2012-06-01 43 views
1

可能重复:
C Macros and use of arguments in parenthesesC语言编程宏乘法

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

如果下面的代码定义为宏

#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。

这是什么问题? 如果这些功能较小的功能哪一个更高效?定义函数或使用宏?

+2

这么多重复... –

+0

你如何衡量效率?编码时间,执行时间,可维护性... –

+0

该宏可能更有效。如果优化器内联函数,它们可能是等价的。 –

回答

10

试着这么做:

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

谢谢。但问题是更关心效率。 – Katti

+0

@Katti:这与效率有什么关系? –

+0

为什么不使用'x * y'并跳过宏或函数呢? – aztaroth

0

试试这个:

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

就个人而言,我认为这是更具可读性(和更少的按键),以使用宏。这是有人开始在学习新事物的过程中加入他们的代码并在后来感到遗憾的事情。

+1

您仍然缺少括号。想象一下'z/MULT(x,y)' – Shahbaz