C语言 设有如下宏定义:#define A 3+2 #define B A*A,则表达式B*B的值为多少

结果是23,这是怎么算的?... 结果是23,这是怎么算的? 展开
 我来答
vincant566
推荐于2018-03-13 · TA获得超过902个赞
知道小有建树答主
回答量:470
采纳率:0%
帮助的人:298万
展开全部
掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。所以只要换就可以了:把B换成A*A,那么B*B就是A*A*A*A,然后把A换成3+2,结果就是:3+2*3+2*3+2*3+2=23;
不知道你理解了没有,如果是这样宏定义A的,那么结果又不一样了,#define A (3+2)
那么结果就是5*5*5*5,所以比它本来没括号,你不能习惯的加了括号,这是最容易犯错的。
兜里有两块糖
2013-01-14 · TA获得超过522个赞
知道小有建树答主
回答量:585
采纳率:100%
帮助的人:503万
展开全部
C语言中的宏,在编译时,进行简单替换。
也就是说
当你算B*B时
编译器会把它变为A*A*A*A
3+2*3+2*3+2*3+2 = 23
因为你没有写括号也就是
#define A (3+2)
所以不是你预想的
(3+2)*(3+2)*(3+2)*(3+2)

所以说宏是简单替换,不会帮你把运算优先级也编译出来。
这个是一个常见的宏问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
icecoobe
2013-01-14 · TA获得超过1989个赞
知道小有建树答主
回答量:1058
采纳率:100%
帮助的人:1104万
展开全部
宏只是简单的文本替换

B等价于
3 + 2 * 3 + 2

B*B等价于
3 + 2 * 3 + 2 * 3 + 2 * 3 + 2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xtayygtv
2013-01-14
知道答主
回答量:54
采纳率:0%
帮助的人:19.1万
展开全部
3+2*3+2*3+2*3+2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式