MAC(++a, b);
或
mac(++a, b);
第一个是宏调用,第二个是类似的函数调用。
这是C编程书中一章末尾的复习问题。我不认为其中任何一个都是有效的,也许这是一个技巧问题,但我不确定,因为我没有真正看到宏调用与这个实例中的函数调用有什么不同
答案 0 :(得分:3)
保证有效版本可能是
mac(++a, b)
因为宏版本MAC
可能会多次评估其操作数。举个例子
#define MAC(a, b) (a + a + b)
在这种情况下,MAC(++a, b)
将扩展为
(++a + ++a + b)
未定义,因为它在两个序列点之间修改了两次a
。
另一方面,函数调用始终只计算一次其参数。