C语言#define定义函数优先级怎么算的?
发布网友
发布时间:2022-05-01 05:56
我来回答
共3个回答
热心网友
时间:2022-06-25 06:50
宏只是把所有参数连接起来,拼成一个表达式而已
你这里直接把x和y代入进去就知道问题在哪里了
原来的表达式为:a + b * a - b
改了之后为:(a + b) * (a - b)
所以你如果用宏的话,最好这样写:#define M(x, y) (x) * (y)
这样就不会出现这种错误了
热心网友
时间:2022-06-25 06:51
这样定义的话#define M(x,y) x*y,M(a+b,a-b) = a+b*a-b,M((a+b),(a-b)) = =(a+b)*(a-b),
如果为了安全,可以#define M(x,y) (x)*(y),这样就可以了M(a+b,a-b)=M((a+b),(a-b))
热心网友
时间:2022-06-25 06:51
宏是简单替换,不要自己认为添加运算顺序。
M(a+b,a-b)就是a+b*a-b, 带入算出来就是2+3*2-3=5
M((a+b),(a-b))就是(a+b)*(a-b),带入算出来就是 -5