【问题标题】:#ifdef WIN32 #elif WIN64 #endif#ifdef WIN32 #elif WIN64 #endif
【发布时间】:2014-10-16 13:33:45
【问题描述】:

我遇到过这样的some example code

#ifdef WIN32
   ...
#elif WIN64
   ...
#endif

#ifdef 块中,使用#elif 表示#elif defined 实际上合法吗?

【问题讨论】:

    标签: c-preprocessor conditional-compilation


    【解决方案1】:

    不,不应该。这并不是说某些不起眼的 C 编译器不会接受它,但它不是 C 标准的一部分。

    通常,对于这样的事情,你会使用#elifdef FOO(我从未在生产代码中真正看到过)或#elif defined(FOO)(就像你提到的那样)。

    这段代码似乎以一种奇怪的方式工作;而是首先检查 WIN32 是否已定义,然后检查 WIN64 是否为非零。

    【讨论】:

    • 感谢您的澄清。 (然而,Visual Studio 资源编辑器似乎不喜欢这两种解决方法,只需要 #elif 而无需参数)。
    • 有趣。也许 Visual Studio 的 .rc 文件只是有自己的(完全不同的)语法。
    • 假设 WINxx 被定义为 1,那么这段代码并不是完全错误的,只是很奇怪(可能不是他们想要的)。请记住,未定义的名称在表达式中扩展为 0,因此这是错误类型,但逻辑有效。
    • 这是一个很好的观点,但假设是#define WINxx 1,而不是#define WINxx
    • @Leushenko 这个假设不能满足,因为afaik你可以在项目设置中定义依赖于设置的符号,而不是给符号任何特定的值。
    猜你喜欢
    • 2010-12-20
    • 2010-11-12
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多