【发布时间】:2014-02-18 13:28:39
【问题描述】:
我的 Linux 系统上的一个标头 socket.h 如下所示。
/* Bits in the FLAGS argument to `send', `recv', et al. */
enum
{
MSG_OOB = 0x01, /* Process out-of-band data. */
#define MSG_OOB MSG_OOB
MSG_PEEK = 0x02, /* Peek at incoming messages. */
#define MSG_PEEK MSG_PEEK
MSG_DONTROUTE = 0x04, /* Don't use local routing. */
#define MSG_DONTROUTE MSG_DONTROUTE
...
定义enum 有点像idiom for creating type-safe-ish constants in C,语言实际上将其视为编译时常量。
我的问题是:宏MSG_OOB、MSG_PEEK、……扩展至自身的定义有什么作用?
【问题讨论】:
-
我从未见过它,但我猜它会覆盖任何可能的替代定义,所以你确定它只是枚举。
-
MSG_OOB扩展为MSG_OOB。 -
@GIJoe 你可能在这里有所收获。它们不会扩展到预处理器可以使用的值,但如果有人需要编写它,
#ifdef MSG_PEEK将按预期工作。
标签: c c-preprocessor