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

新手,为什么这个运行结果是16
#include
#define f(x) x*x
using namespace std;
int main()
{
int a=4, b=2, c;
c=f(a) / f(b);
cout << c << endl;
return 0;
}

慕斯709654
浏览 637回答 2
2回答

斯蒂芬大帝

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

holdtom

宏直接将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));
打开App,查看更多内容
随时随地看视频慕课网APP