请各位大虾为我讲讲这道C语言编程题,谢谢

下面程序的运行结果是#defineM(z)(z)*(z)main(){printf("%d\n",M(1+2+3);}答案为什么是12啊,应该这样吧:(1+2+3)*(1... 下面程序的运行结果是
#define M(z) (z)*(z)
main()
{ printf("%d\n",M(1+2+3);}
答案为什么是12啊,应该这样吧:(1+2+3)*(1+2+3)=36
展开
 我来答
gdoupanguoqing
2009-08-21 · TA获得超过245个赞
知道小有建树答主
回答量:90
采纳率:0%
帮助的人:96.3万
展开全部
楼主此题的结果确实应该是36, 理由也如楼主所述.

这道题实际上是提醒我们注意使用宏定义很容易出现的一个错误.

宏定义实际上是在编译期间执行了一个简单的替换操作. 如果这道题中的宏是这样定义的:
#define M(z) z*z
那么这样得到的结果将会是 1+2+3*1+2+3 = 11. 这显然不是我们期望的结果.
塞斯克小法
2009-08-21 · TA获得超过415个赞
知道小有建树答主
回答量:383
采纳率:0%
帮助的人:176万
展开全部
按照你的编程来看,(1+2+3)*(1+2+3)=36没错
如果把第一行改成#define M(z) z*z
则答案是1+2+3*1+2+3=11
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ydnhwan
2009-08-21 · TA获得超过443个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:317万
展开全部
答案错了,刚才在vs2008上实验一下。输出36.你可以自己写个程序测试一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9b6d3b6b3
2009-08-21
知道答主
回答量:17
采纳率:0%
帮助的人:10.2万
展开全部
可惜,在我电脑上运行,结果就是36
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
niat818
2009-08-21 · TA获得超过233个赞
知道小有建树答主
回答量:488
采纳率:0%
帮助的人:484万
展开全部
没错,是36.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式