c++ - 了解预处理器指令

标签 c++ c-preprocessor preprocessor-directive

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

#define THREADMODEL ASC 

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

int main() {
}

最佳答案

当预处理器解释

#if THREADMODEL==NOASC

它将用 ASC 替换 THREADMODEL:

#if ASC==NOASC

除非你有 #defined ASCNOASC 有数值,预处理器将用 0 值替换它们(它需要任何 undefined symbol 并将其替换为 0):

#if 0==0

然后计算结果为 1,因此预处理器将计算该 block 。

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

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

希望这对您有所帮助!

关于c++ - 了解预处理器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239738/

相关文章:

c - #define变量的用法

c++ - 将 NULL 作为参数传递时,函数重载如何工作?

c++ - 从像素获取 RGB 值并将 RGB 值设置回同一像素

c++ - 插入排序程序

c# - 排除代码的更好解决方案?

c - 预处理器宏 : any way to get a unique variable name and reuse it?

c - 该声明将取代什么?

c++ - 如何在属性表中包含预处理器指令

c++ - 快速扫描 double 的方法 - C++

c++ - 在#include 语句中使用垃圾字符没有编译器错误