C 中的预处理器指令

Preprocessor Directives in C

为什么下面程序的输出是 125 而不是 5?

#include<stdio.h>

#define square(x) x*x

int main()
{
  int var;
  var = 125/square(5);
  printf("%d",var);
  return 0;
}

这一行:

var = 125/square(5);

扩展为:

var = 125/5*5;

从左到右求值到 25*5 然后到 125;

要修复它,请在 square 的定义中将参数括起来,如下所示:

#define square(x) ((x)*(x))

另请注意 x 周围的额外括号,以便在例如1+2 传递到 square.

请注意,编译代码时 var = 125/square(5); 变为 var = 125/5*5
所以编译器在5*5之前计算125/5。结果变成(125/5)*5 = 125.

#define square(x) x*x 改为 #define square(x) (x*x).

这是您的代码:

#include<stdio.h>

#define square(x) (x*x)

int main()
{
  int var;
  var = 125/square(5);
  printf("%d",var);
  return 0;
}