3

可能重复:
C 宏和括号中参数的使用

我发现这个宏观问题非常有趣。

如果以下代码被定义为宏

#define MULT(x, y) x * y

函数调用为int z = MULT(3 + 2, 4 + 2);. 期望的输出是 3+2=5 和 4+2=6 并且 5*6 是 30。

但是返回的输出是 13。它把它当作 3+2*4+2。因此,根据运算符的优先级,它首先评估 2*4。

这里的解决方法是什么?在像这些较小的功能的情况下,哪一个是有效的?定义函数还是使用宏?

4

2 回答 2

11

尝试类似:

#define MULT(x, y) ((x)*(y))
于 2012-06-01T09:53:15.400 回答
0

试试这个:

#define MULT(x, y) ((x) * (y))

就个人而言,我认为使用宏更具可读性(并且击键次数更少)。有人会在急于学习新事物时开始添加到他们的代码中,然后会后悔。

于 2012-06-01T09:54:00.327 回答