C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解( 五 )

{int a;

a=N*N;

Printf( % d , a);

本题中宏名N代表的是表达式2+1 , 使用时容易产生的错误是先把N计算出来2+1=3 , 然后再带入求a的值 , a=3*3 , 结果为9 。 但实际上宏展开只是简单的代替 , 不进行计算 , 本题应该这样计算a=2+1*2+1 , 得到结果为5 。

2.带参宏的定义实例

例题3:源程序:

#define f(x)(x*x)

main()

{inti1 , i2;

i1=f(8)/f(4);

i2=f(4+4)/f(2+2);

Printf(%d , %d , i1 , i2);

本题的输出结果是4 , 3 。 i1 , i2看上去参数一样为什么结果不同呢 , 实际上二者的调用、展开形式不同 , 其中i1=(8*8)/(4*4)=64/16=4 , i2=(4+4*4+4)/(2+2*2+2)=24/8=3;和例题2一样宏展开只是简单的代替 , 不先进行计算 。

推荐阅读