我正在研究if_link.h
Linux内核标头,它包含以下枚举:
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
....
}
定义看起来没用;他们的目的是什么?为什么只定义了某些项目?
正如Matthew Slattery在另一个答案中提到的那样,GCC手册中有一个章节,即§3.10.5自引用宏,它描述了此类宏的可能用法。
一种可能的用法是在宏扩展为对其自身的调用时避免无限扩展,但这是不鼓励的做法。另一个用途是定义预处理器宏和枚举:
如果要使用枚举定义数字常量,则可以这样做,但是每个常量的'#ifdef'为true。
因此,这基本上就是MM在上述评论中所说的。
<rant>为什么内核开发人员的行为会如此不一致?我更喜欢将枚举值也作为定义添加到其自身的接口,以使其易于探查当前头标集中可用的功能。
真正令人沮丧的部分是此集合中的某些枚举值具有#define,而有些则没有。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句