宏定义最关键的是要注意它只是一个文本替换,不注意的话,很容易引起歧义,看下面一段代码:
#include<stdio.h>
#define M( x ) ( x*x )
int main()
{
int a, b= 3;
a = M( b+2 );
printf ("%d\n" , a );
return 0;
}
这里的 M 是想要得到 x 的平方,而在程序中调用的参数为 b+2 ,原本想将 a 赋值为 (b+2)*(b+2),也就是 25 ,但是由于宏定义是展开在预处理时期,也就是在编译之前,此时 b 并没有赋值,这时候的 b 只是一个符号。 因此在程序中被展开为: (b+2*b+2); 所以程序执行后的结果为 a 的值为11。
所以为了达到原来的目的,我们可以把宏定义 M 改为:
#define M(x) ( (x) * (x) )
就可以变为平方的形式了