你用的宏定义,这个s=S(a+b);程序是这样执行的:s=10*a+b*a+b;所以结果是320,而不是9000,。用宏最好加括号,如#define S(r) 10*(r)*(r),这样结果就是9000了,当然我建议还是少用宏定义,有的时候会发生意想不到的错误。这里完全可以用一个内联函数代替。
#define S(r) 10*r*r
这里改成
#define S(r) 10*(r)*(r)
因为宏不是函数,他只是简单的做了一个替换的工作.比如你写的
S(a+b);
就被替换成 10*a+b*a+b
所以一般写宏的时候,都会把变量(就是你这里面的r)用小括号括起来,这样就不会有这样出乎意料的运算了.
因为define是简单的替换
s=S(a+b);就等于s=10*a+b*a+b;
代码应该改为:
#define S(r) 10*r*r
main()
{
int a=10,b=20,s;
s=S((a+b));
printf("%d",s);
}