新手,为什么这个运行结果是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 回答
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));
- 2 回答
- 0 关注
- 636 浏览
添加回答
举报
0/150
提交
取消