c++ - #define 宏不符合预期
问题描述
我在测试中弄错了这个问题,我真的很困惑为什么。
对于下面给定的代码,我认为输出将为 0。有人可以解释为什么不是吗?
#include<iostream>
using namespace std;
#define A 0
#define B A+1
#define C 1-B
int main{
cout<<C;
return(0);
}
正确答案(和实际输出)是 2。
解决方案
如果你一步一步地展开宏,你会得到正确的答案。
cout<<C;
是
cout<<1-B;
是
cout<<1-A+1;
是
cout<<1-0+1;
这是
cout << 2;
请记住,宏不像变量那样工作。如果你使用变量,你会得到不同的答案。
int a = 0;
int b = a+1; // b is 1.
int c = 1-b; // c is 0
cout << c; // Expect 0 in output.
推荐阅读
- asp.net - 将 Azure OAuth 访问/刷新令牌提供给 MSAL 后端以进行缓存
- pandas - pandas eval 不支持 where
- php - 以 HTML 形式编辑 XML 并提交给自己
- excel - 为什么我在 VBA 中收到运行时错误 91 错误?
- laravel - Laravel 6 更改 public_path()
- lua - 将 LuaTable 写入文件
- c# - 将“AuthenticatedUsers”设置为用户 UserRights
- laravel - Laravel:当给定参数无效时,将用户重定向到自定义 404 页面
- z3 - Z3:函数是用内联实现的吗?
- c++ - 为什么这个迭代算法不起作用?