如何解决在这类情况下,执行的顺序是什么?
我已经定义了一个宏来查找数字的平方。
#include<iostream>
#define square(x) x*x
using namespace std;
int main()
{
int a = square(2+3);
cout<<a<<endl;
}
在上述情况下,输出为11。我用(3 + 2)替换了括号中的表达式,然后输出为11。类似地,对于(4 + 2)和(2 + 4),输出为14
我已将'+'
替换为'*'
,它给出了正常的输出,就像它首先计算了方括号中的表达式并计算了平方。
谁能告诉我如何概括输出,例如执行顺序是什么?
解决方法
有了#define square(x) x*x
,这个square(2+3)
就变成了
2+3*2+3
。当然,由于*
优于+
,哪个会导致意外结果。 *
不会发生此问题,因为在这种情况下,优先顺序无关紧要。
您可能想要#define square(x) (x)*(x)
才能获得(2+3)*(2+3)
。
或者,不太容易遭受类似性质的间接问题
#define square(x) ((x)*(x))
,以获取((2+3)*(2+3))
。
更好的是,因为宏确实提供了许多陷阱,例如陷阱,您应该只使用一个明确定义的函数。对于现代的编译器,大多数使用宏的理由已经过时了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。