【发布时间】:2021-06-28 14:41:29
【问题描述】:
这个程序返回 a=25,但是如果我将 sqr(x) 定义为 (x*x),它返回 a=11。为什么会这样?
#include <stdio.h>
#define sqr(x) ((x)*(x))
main (){
int a,b=3;
a=sqr(b+2);
printf("a=%d\n",a);
return 0;
}
【问题讨论】:
-
因为
b + 2 * b + 2不是(b + 2) * (b + 2) -
在 C 中,宏在预处理过程中被扩展,所以不像你通常调用函数那样调用
sqr,定义首先扩展为((x)*(x))和x替换为(b + 2)在这种情况下。 -
那里必须是一个副本,但我似乎找不到它。