当然了,你用的是宏替代,而不是内联函数啊。宏替代的实质,其实就是字符c串替代。因此,y=S(z+2)=S(5+2),当用宏替代时,变为 5+2*5+2,因此结果明显是17啊。想共同切磋c++,请加我吧(543351954)。(我是一个业余编程爱好者)。
define a b的实质是替换,把所有a出现的地方换成b,替换时b所代表的运算式原封不动,不会自行添加括号,就像Word里的文字替换
#define S(x) x*x:
S(z+2)=5+2*5+2=17
#define S(x) (x)*(x):
S(z+2)=(5+2)*(5+2)=49
#define S(x) x*(x):
S(z+2)=5+2*(5+2)=19
#define S(x) (x)*x:
S(z+2)=(5+2)*5+2=37
这个是对define的理解
S(z+2)=z+2*z+2=5+2*5+2
而不是S(z+2)=(z+2)*(z+2)
这个没有什么多解释的。。就是deifne和函数的区别。
不理解也只能多看看书。
因为宏定义只是带表符号,不是先进行运算
y=S(z+2)=z+2*z+2=5+2*5+2=17
宏定义没有计算优先权,也没有括号
运行结果是这个样子的:5+2*5+2=17,明白?