#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.可以任何人解释我原因
答案 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.