为什么这段代码没有编译?如果我理解正确,这应该编译。我哪里错了?
#define THREADMODEL ASC
#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif
int main() {
}
最佳答案
当预处理器解释
#if THREADMODEL==NOASC
它将用 ASC
替换 THREADMODEL
:
#if ASC==NOASC
除非你有 #define
d ASC
和 NOASC
有数值,预处理器将用 0 值替换它们(它需要任何 undefined symbol 并将其替换为 0):
#if 0==0
然后计算结果为 1
,因此预处理器将计算该 block 。
要解决此问题,请尝试为 ASC
和 NOASC
提供不同的数值,如下所示:
#define ASC 0
#define NOASC (1 + (ASC))
希望这对您有所帮助!
关于c++ - 了解预处理器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239738/