C语言的宏定义问题?

来源:百度知道 编辑:UC知道 时间:2024/05/28 13:59:35
#define sqr(x)X*X
main()
{
int a=16,k=2,m=1;
a/=sqr(k+m)/sqr(k+m);
printf("%d\n,a")

}
宏展开是这样的吗?

a/=3*3/3*3
从左到右..9/3 然后在乘3吗?

错了,c中的宏展开只是简单的替换,如# define N 3 运行时只会简单的将N换为3,又如:# define sqrt(x) x*x
只会将sqrt(x)换为x*x,而不会使sqr(k+m)发生替换

宏展开只是简单的替换,不要直接运算,
展开后是: a/=3+3/3+3
这样可能达不到你的目的,所以宏定义运算式时最好加上括号
如: #define sqr(x) (x)*(x) 这样x不论是数字还是运算式也行

展开后是这样的(只是简单的替换,不会先算( )里的值,直接代进去)

即K+M*K+M/K+M*K+M

2+1*2+1/2+1*2+1==7