【发布时间】:2013-08-14 18:41:47
【问题描述】:
为什么这段代码没有编译?如果我理解正确,这应该编译。我哪里错了?
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
【问题讨论】:
标签: c++ c-preprocessor preprocessor-directive
为什么这段代码没有编译?如果我理解正确,这应该编译。我哪里错了?
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
【问题讨论】:
标签: c++ c-preprocessor preprocessor-directive
当预处理器解释时
#if THREADMODEL==NOASC
它将用ASC替换THREADMODEL:
#if ASC==NOASC
除非你有 #defined ASC 和 NOASC 有数值,否则预处理器会将它们替换为 0 值(它接受任何未定义的符号并将它们替换为 0):
#if 0==0
然后计算结果为1,因此预处理器将计算该块。
要解决此问题,请尝试为 ASC 和 NOASC 提供不同的数值,如下所示:
#define ASC 0
#define NOASC (1 + (ASC))
希望这会有所帮助!
【讨论】:
#define NOASC (1 + ASC)
ASC加上括号,但不是结果表达式。
ASC 括起来(假设它本身已正确定义)。您确实需要将宏参数括起来,但 ASC 是另一个宏,而不是 NOASC 的参数。