📜  程序的输出 |谨慎使用宏!

📅  最后修改于: 2022-05-13 01:56:11.012000             🧑  作者: Mango

程序的输出 |谨慎使用宏!

预测以下程序的输出

#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) 也会失败 */