我发现这个宏观问题将是非常有趣的。
如果下面的代码定义为宏
#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。
这是什么问题? 如果这些功能较小的功能哪一个更高效?定义函数或使用宏?
我发现这个宏观问题将是非常有趣的。
如果下面的代码定义为宏
#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。
这是什么问题? 如果这些功能较小的功能哪一个更高效?定义函数或使用宏?
试试这个:
#define MULT(x, y) ((x) * (y))
就个人而言,我认为这是更具可读性(和更少的按键),以不使用宏。这是有人开始在学习新事物的过程中加入他们的代码并在后来感到遗憾的事情。
您仍然缺少括号。想象一下'z/MULT(x,y)' – Shahbaz
这么多重复... –
你如何衡量效率?编码时间,执行时间,可维护性... –
该宏可能更有效。如果优化器内联函数,它们可能是等价的。 –