pot*_*ato 0 c macros if-statement function
我从这个用C编写的宏函数中得到了一些奇怪的值
#define func(x, y) (x > y) ? y : x
Run Code Online (Sandbox Code Playgroud)
我认为相当于
int func(int x, int y) {
if (x > y)
return y;
else
return x;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我跑
int x = 10;
int y = 9;
int z = func(x, y++);
printf("x=%d, y=%d, z=%d\n", x, y, z);
Run Code Online (Sandbox Code Playgroud)
我得到x=10, y=11, z=10
而不是x=10, y=10, z=9
知道这里发生了什么吗?
宏只是一个文本扩展.那是:
func(x, y++)
Run Code Online (Sandbox Code Playgroud)
替换为:
(x > y++) ? y++ : x
Run Code Online (Sandbox Code Playgroud)
......当它是一个宏.相比之下,当它是一个函数时,参数被评估一次,如:
int implicit_arg0 = x;
int implicit_arg1 = y++;
push implicit_arg0
push implicit_arg1
jump to address of "func"
Run Code Online (Sandbox Code Playgroud)
...导致y在函数版本中仅增加一次,在宏中增加两次.
归档时间: |
|
查看次数: |
73 次 |
最近记录: |