定义内部枚举

时间:2012-10-02 10:32:06

标签: c linux enums

在Linux内核源代码中,我看到,在枚举内部,还有一个与enum元素名称相同的定义。我们在linux/rtnetlink.h中的示例:

enum {
        RTM_BASE        = 16,
#define RTM_BASE        RTM_BASE

        RTM_NEWLINK     = 16,
#define RTM_NEWLINK     RTM_NEWLINK
        RTM_DELLINK,
#define RTM_DELLINK     RTM_DELLINK
...

这是什么原因?我无法弄清楚这是如何使用的。

由于

3 个答案:

答案 0 :(得分:5)

我能想到的一件事是你可以通过宏来检查枚举的存在

#ifdef RTM_BASE
int flag = RTMBASE;
#else
int flag = 0;
#endif

不知道这是不是正在发生的事情。

答案 1 :(得分:3)

这些#define实现的另一件事,除了允许旧代码继续旧名称之外,应该更改枚举常量名称,并检查它们是否已定义,是为了防止其他代码定义这些符号。

#include <linux/rtnetlink.h>
// for some reason, the author thinks
#define RTM_BASE 17.3f
// is a good idea

不会编译。

答案 2 :(得分:2)

另一个猜测:这个宏可以允许在不破坏其他代码的情况下重命名枚举的条目。变化

enum {
        RTM_BASE        = 16,
#define RTM_BASE        RTM_BASE

enum {
        RTM_BASE_NEW_NEW_NEW        = 16,
#define RTM_BASE        RTM_BASE_NEW_NEW_NEW

用户仍然可以使用RTM_BASE