为什么这段代码无法编译?如果我理解正确的话,它应该能够编译。我错在哪里了?
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
为什么这段代码无法编译?如果我理解正确的话,它应该能够编译。我错在哪里了?
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
当预处理器解释代码时
#if THREADMODEL==NOASC
它将用ASC
替换THREADMODEL
:
#if ASC==NOASC
除非您将#define
ASC
和NOASC
定义为数字值,否则预处理器将使用0值替换它们(它会将任何未定义的符号替换为0):
#if 0==0
这会评估为1
,因此预处理器将评估该块。
要解决此问题,请尝试为ASC
和NOASC
赋予不同的数字值,像这样:
#define ASC 0
#define NOASC (1 + (ASC))
希望这能帮到你!
#define NOASC (1 + ASC)
- Keith ThompsonASC
加上了括号,但忘记给结果表达式加上了。 - templatetypedefASC
上加括号(假设它本身已经正确定义)。但是您需要在宏参数上加括号,但是 ASC
是另一个宏,而不是 NOASC
的参数。 - Keith Thompson