在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)
这是什么原因?我无法弄清楚这是如何使用的.
谢谢
我能想到的一件事是你可以通过宏来检查枚举的存在:
#ifdef RTM_BASE
int flag = RTMBASE;
#else
int flag = 0;
#endif
Run Code Online (Sandbox Code Playgroud)
不知道这是不是正在发生的事情.
另一个猜测:这个宏可以允许重命名枚举的条目,而不会破坏其他代码。改变
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.
| 归档时间: |
|
| 查看次数: |
1584 次 |
| 最近记录: |