刚开始学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;
}

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

宏直接将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));