6

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

#define THREADMODEL ASC 

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

int main() {
}
4

1 回答 1

13

当预处理器解释

#if THREADMODEL==NOASC

它将替换THREADMODELASC

#if ASC==NOASC

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

#if 0==0

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

ASC要解决此问题,请尝试为and赋予不同的数值NOASC,如下所示:

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

希望这可以帮助!

于 2013-08-14T18:46:41.297 回答