#define ADD(a,b) (a)+(b)
void foo1()
{
int a=1, b=2;
int k=0;
while(k++ < 10000)
{
int c = ADD(a,b);
a = c;
}
}
void foo2()
{
int a=1, b=2;
int k=0;
while(k++ < 10000)
{
int c = a + b;
a = c;
}
}
Run Code Online (Sandbox Code Playgroud)
foo1和foo2有什么区别.有人问我这个问题,我找不到任何区别.两者似乎100%相同.关于堆栈上的内存分配可能有些不同?您可以尝试回答这个问题,假设记忆非常有限吗?
唯一的区别与以下事实有关:您需要将整个宏包含在另外一组parens中,而不是像您一样编写宏:
#define ADD(a,b) ((a)+(b))
Run Code Online (Sandbox Code Playgroud)
如果你没有做出那个修复,那么
ADD(3,4) * 5
Run Code Online (Sandbox Code Playgroud)
等于23,但是
(3 + 4) * 5
Run Code Online (Sandbox Code Playgroud)
等于34.
这是伟大的,你没有正确地包围在自己的括号每个宏参数,但你还需要附上整个宏在括号避免precendence相关的错误.