【发布时间】:2016-12-15 17:44:52
【问题描述】:
为什么这不起作用(断言失败...我不希望它执行)?
#define OS_MACOSX 0
#if defined(OS_MACOSX)
fructose_assert(1==2);
#endif
【问题讨论】:
-
你定义了一些东西,然后检查它是否被定义,想知道为什么它会产生 true?我不明白你为什么感到困惑。
标签: c++ c-preprocessor
为什么这不起作用(断言失败...我不希望它执行)?
#define OS_MACOSX 0
#if defined(OS_MACOSX)
fructose_assert(1==2);
#endif
【问题讨论】:
标签: c++ c-preprocessor
因为你使用了错误的测试。
OS_MACOSX 被定义为...到0。你问它是否定义。而是询问它是否是 set:
#if OS_MACOSX
fructose_assert(1==2);
#endif
如果它被定义为计算结果为零的东西,或者根本没有定义,#if 将跳过代码。任何非零值,且满足#if 条件并编译代码。
【讨论】: