C语言问题 大神看到了请帮忙说明一下运算过程,感激不尽!

如题所述

答案为-20

(a+b)-(a+b)*5=-20.

不懂可以追问

追问

您好,我的疑问是定义了宏SUB(a) (a)-(a), 而d=SUB(a+b)*c,然后直接带入宏,不应该是((a+b)*c)-((a+b)*c),也就是两边的a+b都要乘以c嘛,可是您的解答前面一个a+b不带c,后面一个却带有,就是这里不太明白。麻烦再解疑。谢谢

追答

是这样的,sub(a+b)是一个整体,但【不是先把这个值算完再乘c】,宏定义就是【直接替换】【再整体计算】的过程,SUB(a+b)等于(a+b)-(a+b)对吧,那就直接把SUB(a+b)替换成(a+b)-(a+b),不管有没有乘c什么的,就是直接替换。所以最终表达式结果就是(a+b)-(a+b)*c。再给你举个别的例子,

#define sub(x) x+x

你计算一下

d = sub(5) * 3的值

答案是5+5*3=20,而不是30

追问

哦哦,也就是说宏定义的带参数,只替换括号里面的参数,括号外面的值可以暂时忽略,等替换全部结束后再把以下的数值带进去计算……明白了,非常感谢。

追答

是的就是这样。不懂还可以继续追问或者私信我也可以

追问

嗯嗯,好的好的。非常感谢。可以加您好友嘛,希望可以日后向您请教

追答

QQ号私信给你了,不知道为啥追答发不出去了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-02-23
SUB是宏定义 特点是直接带入
所以 SUB(a+b)就是(a+b)-(a+b)
带入到代码里 就是
d=(a+b)-(a+b)*c 所以会先算后面的(a+b)*c
=(2+3)-(2+3)*5
=5-25
=-20
输出-20追问

您好,我给您私信了

追答

没看到私信。。。

本回答被网友采纳
相似回答