定义内部枚举

Mir*_*chi 7 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
...
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Ker*_* SB 5

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

#ifdef RTM_BASE
int flag = RTMBASE;
#else
int flag = 0;
#endif
Run Code Online (Sandbox Code Playgroud)

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


evn*_*vnu 2

另一个猜测:这个宏可以允许重命名枚举的条目,而不会破坏其他代码。改变

enum {
        RTM_BASE        = 16,
#define RTM_BASE        RTM_BASE
Run Code Online (Sandbox Code Playgroud)

enum {
        RTM_BASE_NEW_NEW_NEW        = 16,
#define RTM_BASE        RTM_BASE_NEW_NEW_NEW
Run Code Online (Sandbox Code Playgroud)

用户仍然可以使用RTM_BASE.