宏定义中运算符与函数体中的运算顺序不同,需要给宏定义函数加括号改变运算顺序,以免造成意想不到的错误。
#define f1(a, b) a * b
#define f2(a, b) (a) * (b)
int main()
{
cout << f1(2 + 3, 2) << endl;
cout << f2(2 + 3, 2) << endl;
return 0;
}
结果:
8
10
f1(2 + 3, 2)
表示 2 + 3 * 2 = 8
,而 f2(2 + 3, 2)
表示 (2 + 3) * (2) = 10
。