gpt4 book ai didi

c++ - 为什么 defined(X) 在没有空格的预处理器定义中不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:19 24 4
gpt4 key购买 nike

包含 defined(X) 的预处理器定义永远不会计算为真,但 (defined X) 会。这发生在 MSVC9 中;我没有测试过其他预处理器。一个简单的例子:

#define FEATURE0 1
#define FEATURE1 0
#define FEATURE2 1

#define FEATURE3 (FEATURE0 && !FEATURE1 && (defined(FEATURE2)))
#define FEATURE4 (FEATURE0 && !FEATURE1 && (defined FEATURE2))
#define FEATURE5 (FEATURE0 && !FEATURE1 && (defined (FEATURE2)))

#if FEATURE3
#pragma message("FEATURE3 Enabled")
#elif (FEATURE0 && !FEATURE1 && (defined(FEATURE2)))
#pragma message("FEATURE3 Enabled (Fallback)")
#endif

#if FEATURE4
#pragma message("FEATURE4 Enabled")
#elif (FEATURE0 && !FEATURE1 && (defined FEATURE2))
#pragma message("FEATURE4 Enabled (Fallback)")
#endif

#if FEATURE5
#pragma message("FEATURE5 Enabled")
#elif (FEATURE0 && !FEATURE1 && (defined (FEATURE2)))
#pragma message("FEATURE5 Enabled (Fallback)")
#endif

编译器的输出是:

1>已启用 FEATURE3(回退)
1>启用功能4
1>FEATURE5 启用

工作案例:defined (X)defined(X)defined X
破例:defined(X)

为什么 defined 在定义的一部分进行不同的评估,如示例中的 #if 情况,与直接评估相比,如 # elif 示例中的情况?

最佳答案

defined 特定于 #if#elif。通过宏扩展使用它时,行为未定义。

关于c++ - 为什么 defined(X) 在没有空格的预处理器定义中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com