了解预处理程序指令

时间:2013-08-14 18:41:47

标签: c++ c-preprocessor preprocessor-directive

为什么这段代码没有编译?如果我理解正确,这应该编译。哪里我错了?

#define THREADMODEL ASC 

#if THREADMODEL==NOASC
THIS BLOCK SHOULDN'T BE COMPILED
#endif

int main() {
}

1 个答案:

答案 0 :(得分:13)

预处理器解释时

#if THREADMODEL==NOASC

它会将THREADMODEL替换为ASC

#if ASC==NOASC

除非#define d ASCNOASC具有数值,否则预处理器将用0值替换它们(它接受任何未定义的符号并将其替换为0):< / p>

#if 0==0

然后评估为1,因此预处理器将评估块。

要解决此问题,请尝试为ASCNOASC提供不同的数值,如下所示:

#define ASC    0
#define NOASC  (1 + (ASC))

希望这有帮助!