了解预处理器指令

Understanding preprocessor directives

本文关键字:指令 处理器 预处理 了解      更新时间:2023-10-16

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

#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 ASCNOASC具有数值,否则预处理器将用0值替换它们(它接受任何未定义的符号并用0替换它们):

#if 0==0

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

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

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

希望这能有所帮助!