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

时间:2016-09-23 20:56:10

标签: c enums macros

在阅读其中一个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 ... */
};

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

1 个答案:

答案 0 :(得分:6)

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