通过解释,c中给定程序的正确输出是什么

时间:2016-07-23 17:40:10

标签: c

#include<stdio.h>
#define sqr(n) (n*n);
int main()
{
  int x =3,b;
  b=sqr(x+1);
  printf("%d\n", b);
  return 0;
}

//输出应该是16但是我在GCC编译器中编译时输出结果是7.可以任何人解释我原因

1 个答案:

答案 0 :(得分:0)

这一行存在问题:

#define sqr(n) (n*n);

因为n周围没有括号,n+1评估为(n + 1 * n + 1)。 输出为7,因为sqr(3 + 1)的计算结果为(3 + 1 * 3 + 1)= 7。 要修复,请添加括号:

#define sqr(n) ((n)*(n));

然后sqr(3 + 1)评估为((3 + 1)*(3 + 1))= 16.