为什么这段代码没有编译?如果我理解正确,这应该编译。哪里我错了?
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
答案 0 :(得分:13)
预处理器解释时
#if THREADMODEL==NOASC
它会将THREADMODEL
替换为ASC
:
#if ASC==NOASC
除非#define
d ASC
和NOASC
具有数值,否则预处理器将用0值替换它们(它接受任何未定义的符号并将其替换为0):< / p>
#if 0==0
然后评估为1
,因此预处理器将评估块。
要解决此问题,请尝试为ASC
和NOASC
提供不同的数值,如下所示:
#define ASC 0
#define NOASC (1 + (ASC))
希望这有帮助!