繁体   English   中英

C 中的预处理器指令

[英]Preprocessor Directives in C

为什么下面程序的 output 是 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM