宏里面参数不加括号容易出错,在使用时尽量加括号
程序1:
#include<stdio.h>
#define SQARE(X) X*X
int main()
{
int n = 10;
int m=SQARE(n);
printf("m=%d\n",m);
return 0;
}
结果:
m=100
请按任意键继续. . .
分析:貌似没有出问题,请看下面两个例子
程序2:
#include<stdio.h>
#define SQARE(X) X*X
int main()
{
int m = SQARE(1 + 3);//1+3*1+3=7
printf("m=%d\n", m);
return 0;
}
结果:
m=7
请按任意键继续. . .
改正程序2:
#include<stdio.h>
#define SQARE(X) (X)*(X)
int main()
{
int m = SQARE(1+3);//(1+3)*(1+3)=16
printf("m=%d\n",m);
return 0;
}
结果:
m=16
请按任意键继续. . .
程序3:
#include<stdio.h>
#define ADD(X) X+X //不加括号容易出错
int main()
{
int m = 10*ADD(2);//10*2+2
printf("m=%d\n",m);
return 0;
}
结果:
m=22
请按任意键继续. . .
改正程序3:
#include<stdio.h>
#define ADD(X) (X+X)
int main()
{
int m = 10*ADD(2);//10*(2+2)
printf("m=%d\n",m);
return 0;
}
结果:
m=40
请按任意键继续. . .