前端之家收集整理的这篇文章主要介绍了
c – 算术表达式上下文中的宏扩展?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在网站上看到了以下
代码.
我无法判断结果如何变为11,而不是25或13.
为什么我在想25因为SQ(5)5 * 5
或13因为
SQ(2)= 4;
SQ(3)= 9;
可能是最终结果将是13(9 4)
但惊讶地看到结果为11.
结果如何成为11?
using namespace std;
#define SQ(a) (a*a)
int main()
{
int ans = SQ(2 + 3);
cout << ans << endl;
system("pause");
}
#define扩展在编译器看到源
代码之前启动.这就是为什么它们被称为预处理器指令,这里的处理器是将C转换为机器可读
代码的编译器.
所以,这就是宏预处理器传递给编译器的原因:
SQ(2 3)扩展为(2 3 * 2 3)
所以,这真的是2 6 3 = 11.
你怎么能让它做你期望的?
>执行评估顺序.在宏定义或宏调用中使用().要么>写一个简单的功能来完成这项工作
原文链接:https://www.f2er.com/c/117673.html