这个宏多次替换应该会出错吗
this macro replacement multiple times should give error?
#define a b
#define b c
#define c d
main()
{
int a=192;
printf("%dn",a);
printf("%dn",b);
printf("%dn",c);
printf("%dn",d);
}
所有输出为192。a、b、c是如何声明的?
当您使用宏时,您告诉预处理器用宏后面的表达式替换标识符(在您的情况下,是a、b、c(。
因此,这一系列的定义,告诉预处理器用b代替a的内容,用c代替b的内容,和用d代替c的内容
所以你得到的是,相同的值被打印多次
main()
{
int d = 192;
printf("%dn", d);
printf("%dn", d);
printf("%dn", d);
printf("%dn", d);
}
生成的代码是
main()
{
int d=192;
printf("%dn",d);
printf("%dn",d);
printf("%dn",d);
printf("%dn",d);
}
其当然将打印相同的值四次。
在您的定义中,您对编译器说要替换a->b,b->c,c->d,最后您用d 替换所有内容
所以你的结果代码(在预处理器之后(是:
main()
{
int d=192;
printf("%dn",d);
printf("%dn",d);
printf("%dn",d);
printf("%dn",d);
}
您看过预处理器的输出吗?
提示:你认为线是什么
int a=192;
看起来像是在预处理阶段之后?
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 如何用转义符替换字符串中的所有特殊字符
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 灵气:用期望运算符替换序列时出错
- 在C++中继承类时出错:模板参数推导/替换失败
- C++:替换字符时出错
- 这个宏多次替换应该会出错吗