提问人:dollydollydon 提问时间:7/29/2022 最后编辑:Yksisarvinendollydollydon 更新时间:7/29/2022 访问量:78
Cout 宏值未按预期工作 [已关闭]
cout macro value doesn't work as expected [closed]
问:
#include<iostream>
using namespace std;
#define C 1<<(8*1)
int main(){
if(C==256){
int a=C;
cout<<a;
}
}
我的期望是 256,但它打印了 18。这是怎么回事?谢谢!
答:
7赞
Yksisarvinen
7/29/2022
#1
我假设你的问题是关于,而不是关于.std::cout << C;
std::cout << a;
宏是简单的复制和粘贴文本替换。当预处理器遇到宏名称时,它会将其替换为文本定义,而不进行任何分析。所以,发生的事情是
std::cout << C;
替换为
std::cout << 1<<(8*1);
这确实应该打印.18
这是不使用宏的一个很好的理由。相反,请使用常量(或 constexpr)变量:
constexpr int C = 1 << (8 * 1);
这是类型安全的,在任何上下文中使用时都不会让您感到惊讶。
如果出于某种原因确实必须使用宏,请确保将其包装在额外的参数中:
#define C (1 << (8 * 1)) // but seriously, don't use macros
评论
#define C (1<<(8*1))
cout << C
cout << 1 << 8