c – 算术表达式上下文中的宏扩展?

前端之家收集整理的这篇文章主要介绍了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

猜你在找的C&C++相关文章