为什么在枚举中使用#define值?

Fat*_*ror 4 c macros enums

在阅读其中一个Linux标题时,我遇到了一些奇怪的事情<linux/rtnetlink.h>:

/* RTnetlink multicast groups */
enum rtnetlink_groups {
        RTNLGRP_NONE,
#define RTNLGRP_NONE            RTNLGRP_NONE
        RTNLGRP_LINK,
#define RTNLGRP_LINK            RTNLGRP_LINK
        RTNLGRP_NOTIFY,
#define RTNLGRP_NOTIFY          RTNLGRP_NOTIFY
        RTNLGRP_NEIGH,
#define RTNLGRP_NEIGH           RTNLGRP_NEIGH
        RTNLGRP_TC,
#define RTNLGRP_TC              RTNLGRP_TC
        RTNLGRP_IPV4_IFADDR,
#define RTNLGRP_IPV4_IFADDR     RTNLGRP_IPV4_IFADDR
/* ... etc, pattern continues ... */
};
Run Code Online (Sandbox Code Playgroud)

我很难理解这里宏的原因或者它们会产生什么不同.这有什么用途?

Joh*_*ica 6

它使常量对预处理器可见.您可以#ifdef用来检查特定常量是否可用.