Zab*_*ula 15 c macros c-preprocessor
我正在研究if_link.hLinux内核头文件,它包含这个枚举:
enum {
IFLA_UNSPEC,
IFLA_ADDRESS,
IFLA_BROADCAST,
IFLA_IFNAME,
IFLA_MTU,
IFLA_LINK,
IFLA_QDISC,
IFLA_STATS,
IFLA_COST,
#define IFLA_COST IFLA_COST
IFLA_PRIORITY,
#define IFLA_PRIORITY IFLA_PRIORITY
IFLA_MASTER,
#define IFLA_MASTER IFLA_MASTER
....
}
Run Code Online (Sandbox Code Playgroud)
定义看起来没用; 他们的目的是什么?为什么只有一些项目定义了?
cor*_*ump 11
正如Matthew Slattery 在另一个答案中提到的那样,GCC手册有一节,即§3.10.5自引用宏,它描述了这些宏的可能用途.
一种可能的用途是当宏扩展为对自身的调用时避免无限扩展,但这是一种沮丧的做法.另一个用途是定义预处理器宏和枚举:
如果要使用枚举定义数字常量,但是对于每个常量都使用"#ifdef",则可以执行此操作.
所以这基本上是MM在上面评论中所说的.
<rant>为什么内核开发人员行为如此不一致?我更喜欢将枚举值作为自身的定义添加的接口,以便于探测当前标头集中可用的哪些功能.
真正令人沮丧的部分是这个集合中的一些枚举值有#defines,而其中一些没有.
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |