了解预处理程序指令

Suk*_*lay 6 c++ c-preprocessor preprocessor-directive

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

#define THREADMODEL ASC 

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

int main() {
}
Run Code Online (Sandbox Code Playgroud)

tem*_*def 13

当预处理器解释时

#if THREADMODEL==NOASC
Run Code Online (Sandbox Code Playgroud)

它将替换THREADMODELASC:

#if ASC==NOASC
Run Code Online (Sandbox Code Playgroud)

除非你有#defined ASC并且NOASC有数值,否则预处理器将用0值替换它们(它接受任何未定义的符号并用0替换它们):

#if 0==0
Run Code Online (Sandbox Code Playgroud)

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

为了解决这个问题,尽量给予不同的数值ASCNOASC,就像这样:

#define ASC    0
#define NOASC  (1 + (ASC))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!