程序的输出 |谨慎使用宏!
预测以下程序的输出
#define square(x) x*x
int main()
{
int x;
x = 36/square(6);
printf("%d",x);
getchar();
return 0;
}
输出:36
解释:
预处理器将 square(6) 替换为 6*6,表达式变为 x = 36/6*6,x 的值计算为 36。如果我们想要宏 square(x) 的正确行为,我们应该将其声明为
#define square(x) ((x)*(x)) /* 注意表达式
(x*x) 对于 square(6-2) 也会失败 */