C语言中的预处理器指令

问题描述 投票:0回答:1

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

#include<stdio.h>

#define square(x) x*x

int main()
{
  int var;
  var = 125/square(5);
  printf("%d",var);
  return 0;
}
c-preprocessor
1个回答
1
投票

请注意 var = 125/square(5); 成为 var = 125/5*5 当你编译代码时。所以编译器会计算出 125/5 之前 5*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;
}

2
投票

这一行:

var = 125/square(5);

被扩展成:

var = 125/5*5;

从左到右扩展为 25*5 再到 125;

要解决这个问题,请在定义的 square,像这样。

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

请注意 x 为了实现预期的行为,当如 1+2 被传递到 square.

© www.soinside.com 2019 - 2024. All rights reserved.