c++ - c++ 中的预处理器指令:以下代码的输出是什么?
问题描述
学生来了。我有以下一段代码,我对它的输出感到困惑。当我运行这段代码时,它告诉我 C 将是 2,但我虽然它会是 0。为什么是 2?泰!
#include <iostream>
using namespace std;
#define A 0
#define B A+1
#define C 1-B
int main() {
cout<<C<<endl;
return 0;
}
解决方案
这里的要点是您期望B
在 之前被评估A
。普通 C++ 代码也是如此,但预处理器只是简单地将指令替换为其内容。
在这种情况下,发生如下情况.. 采取:
cout<<C<<endl;
代替:C
_1-B
cout<<1-B<<endl;
B
->A+1
cout<<1-A+1<<endl;
A
->0
cout<<1-0+1<<endl;
根据C++ 运算符优先级的通常规则 -
和+
相等并且从左到右关联,所以,1 - 0 + 1
is 2
。
推荐阅读
- angular - 在延迟加载模块中使用子组件
- reactjs - 将拆分表列值反应到不同的行
- concourse - 使用来自文件的动态标签在 Concourse 中使用旧版本的 github-release-resource
- amazon-web-services - 在 provider.tf 中使用多个配置文件而不交换环境变量?
- javascript - ReactJS 未定义 onClick 属性
- android - 使用 mac80211_hwsim 内核模块在 android 模拟器中模拟 WiFi 设备
- r - 在 docker 中运行 RMarkdown 脚本(输出 pdf)时,以端口 8000 作为端点,使用 plot_grid 制作的绘图会在它们周围出现灰色边框
- jquery - jQuery - 隐藏/显示相关 div 是否有文本
- node.js - 带有 TypeScript 3 和 MongoDB 的 Node.js Express API 给了我一些逻辑错误
- while-loop - 如何优化查询以使用 SQL ServerV2014 创建具有动态查询的多表