为了账号安全,请及时绑定邮箱和手机立即绑定

刚开始学c++,看到这个除法的例子不太懂

刚开始学c++,看到这个除法的例子不太懂

C++
慕斯709654 2018-11-01 10:10:44
新手,为什么这个运行结果是16#include#define f(x) x*xusing namespace std;int main(){int a=4, b=2, c;c=f(a) / f(b);cout << c << endl;return 0;}
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

因为宏是机械的替换,没有括号。所以是c=4*4/2*2=16
你可以试试看define f(x) (x*x)
如果问题解决请点我回答右边的采纳,谢谢

查看完整回答
反对 回复 2018-11-03
?
holdtom

TA贡献1805条经验 获得超10个赞

宏直接将c = f(a) / f(b);展开为c=a * a / b * b;
由于乘除优先级一样,所以没有达到预期效果。
因此定义宏最好都加括号保护
#define f(x) (x * x)
可以解决本次的问题
c = f(a) / f(b);展开就变成了c=(a * a) / (b * b);
但是仍不够严谨
c = f(a + b);会被展开成c = (a + b * a + b);
因此需要再加一层括号作为保护:
#define f(x) ((x) * (x))
此时
c = f(a) / f(b);展开为c=((a) * (a)) / ((b) * (b));
c = f(a + b);展开为c=((a + b) * (a + b));

查看完整回答
反对 回复 2018-11-03
  • 2 回答
  • 0 关注
  • 636 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信