【发布时间】:2016-02-10 01:54:02
【问题描述】:
为什么 netinet/in.h 以这种方式定义常量?
enum
{
IPPROTO_IP = 0,
#define IPPROTO_IP IPPROTO_IP
IPPROTO_HOPOPTS = 0,
#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS
IPPROTO_ICMP = 1,
#define IPPROTO_ICMP IPPROTO_ICMP
IPPROTO_IGMP = 2,
...
};
【问题讨论】:
-
你不认为条件是用于启用/禁用功能,例如如果定义了
IPPROTO_ICMP,则创建IPPROTO_ICMP枚举并在协议栈中启用ICMP 协议。我在 LwIP 库中看到过类似的东西。 -
@MortenJensen 应该在任一情况下定义枚举,以便完成运行时检查,而不是使用库的每个应用程序都执行
-DIPPROTO_xxxx=IPPROTO_xxxx -
@CoffeeandCode 为什么您更喜欢运行时检查而不是编译时检查?我同意它的品味很差,我只是在猜测原作者的想法:)
-
@MortenJensen 编译时检查被编译到库中,运行时检查是为了确保协议被库的链接版本支持。无论如何都会有运行时检查,但可能会有
config.h文件或类似文件用于与用户进行编译时检查。
标签: c enums constants c-preprocessor