【发布时间】:2014-10-16 13:33:45
【问题描述】:
我遇到过这样的some example code:
#ifdef WIN32
...
#elif WIN64
...
#endif
在#ifdef 块中,使用#elif 表示#elif defined 实际上合法吗?
【问题讨论】:
标签: c-preprocessor conditional-compilation
我遇到过这样的some example code:
#ifdef WIN32
...
#elif WIN64
...
#endif
在#ifdef 块中,使用#elif 表示#elif defined 实际上合法吗?
【问题讨论】:
标签: c-preprocessor conditional-compilation
不,不应该。这并不是说某些不起眼的 C 编译器不会接受它,但它不是 C 标准的一部分。
通常,对于这样的事情,你会使用#elifdef FOO(我从未在生产代码中真正看到过)或#elif defined(FOO)(就像你提到的那样)。
这段代码似乎以一种奇怪的方式工作;而是首先检查 WIN32 是否已定义,然后检查 WIN64 是否为非零。
【讨论】:
#elif 而无需参数)。
WINxx 被定义为 1,那么这段代码并不是完全错误的,只是很奇怪(可能不是他们想要的)。请记住,未定义的名称在表达式中扩展为 0,因此这是错误类型,但逻辑有效。
#define WINxx 1,而不是#define WINxx。