c语言问题

#include <stdio.h>
#define P 3
#define S(a) P*a*a
void main()
{int ar;
ar=S(3+5);
printf("%d\n",ar);

}
答案为什么是29 不是192

因为#define S(a) P*a*a 定义后 是直接替换 运算过程是这样的

3*3+5*3+5 所以是29

弱势这样定义的 P*(a)*(a)
结果就是192
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-11
3*3+5*3+5=9+15+5 = 29
宏是直接替换的,要是你这样:#define S(a) P*(a)*(a),就是192追问

那如果我将题目改为ar=S(3+5+1);那应该怎么算

追答

如果宏定义没变化还是P*a*a的话,继续展开,3 * 3+5+1 * 3+ 5+1 = 23

宏定义最好加上括号,因为你可能用表达式,比如S(3+5)这样的,替换的话会出问题,good luck!

本回答被提问者和网友采纳
第2个回答  2014-03-28
这个考点就在宏定义上,宏定义是先替换,然后在计算(严格按照上面定义部分,注意括号)
第3个回答  2014-03-28
3×3+5×3+5
算一下就知道等于多少追问

这样错在哪 3*(3+5)*(3+5)

相似回答