C++ #define宏定义运算疑惑:为什么计算得到的C值为4?
问题原因解析
该问题本质是C/C++ 预处理器#define宏的纯文本替换特性导致的,宏不会自动处理表达式的运算优先级,只会按照定义的内容逐字符替换,没有额外的语法加工逻辑。
宏展开过程拆解
你定义的三个宏在预编译阶段的展开顺序如下:
- 第一步替换宏
C:3-B会先替换B的定义内容,得到表达式3 - A+1 - 第二步替换宏
A:将上一步的A替换为定义值0,最终得到可直接运算的表达式3 - 0 + 1
结果计算逻辑
C++中加减运算符优先级相同,遵循从左到右的运算顺序:
- 先计算
3 - 0得到结果3 - 再计算
3 + 1得到结果4,就是你最终看到的输出值。
修正方案
如果想要得到预期的3 - (A+1) = 2的结果,只需要在宏定义时为表达式整体包裹括号,避免运算优先级错乱即可:
#define B (A+1)
修改后C展开会得到3 - (0+1),运算结果就符合预期了。
内容的提问来源于stack exchange,提问作者PALES
相关产品推荐
相关产品推荐

