永发信息网

如图、C语言有关带参宏的问题,这个计算出来的结果为什么是1,9,25?

答案:3  悬赏:80  手机版
解决时间 2021-11-14 19:21
如图、C语言有关带参宏的问题,这个计算出来的结果为什么是1,9,25?
最佳答案
SQ(i++)经过预编译之后被替换成:
((i++) * (i++))
所以结果每次都被多加了1,所以使用宏定义的时候要小心这类问题,跟函数调用是完全不同的追问函数调用和这个形式是一样的啊,为什么这个比函数调用每次多加了1呢?追答解释过了,宏定义的内容经过预编译先将宏定义替换为实际的内容,所以
printf("%d\n", SQ(i++);

这句被预编译器重新生成为:
printf("%d\n", ((i++) * (i++));
也就是说预编译后生成的源代码变成了后面的样子,这两个句子是等同的,只是预编译器帮你做了替换。
全部回答
是这么算的i=1是SQ(1*1)=1 这时候执行i++,i=2,然后在执行i++ i=3;然后进入while循环然后SQ(3*3)=9;然后两次i++;i=5;第三次while循环,SQ(5*5)=25; 第四次两次i++ i=7
退出循环,就是把SQ(i++)执行时用((i++)*(i++))替代,即每循环一次,执行两次i++,懂了吧追问我还是有点儿不懂,,这样每次计算的时候不是i已经自加了一次再相乘么?那第一次计算结果不会变成1*2=2么?
你调用SQ(i++)的时候

是这样执行的((i++)*(i++))
i自加了两次,这样结果你就明白了追问自加两次那第一次执行的时候不就变成1*2了么?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有木有人有网易阴阳师ssr式神的Q版图片(最好
三星GTE1200R怎样解锁
求高手,怎么可以让小王赢。规则就是三带一,
一个男的对一个女的说大被同眠是什么意思?
脚上死皮多什么原因
我的世界有多少种食物
主角是萨拉查·斯莱特林的HP同人小说
眉毛中长了几根比较长的代表什么
卖潍坊肉火烧挣钱吗
华为隐藏了手机图标,怎样恢复桌面图标?
新津老码头怎么样?好不好?值不值得买?
要好听的群管理员名字,速度
卧室晚上睡太干噪
戴尔自检正常说明硬件一定没有问题么?
如果我想明年或后年养猪还行吗赚钱吗
推荐资讯
武功:慕容博和李秋水谁厉害
省地质学校教师姜涛从省城带领学生到乙县进行
烤鱿鱼用什么酱
山东临沂什么时候叫沂临这个名字
为什么每次噩梦,都是发生在老家
《学术探索》非法敛财2000万,质疑南京大学CS
脚上无故出现紫色的淤青?!怎么回事啊。。。
计生三结合中的帮带户,联系户,新增户是什么
求助,日本有哪些国立大学是导师内诺制
有什麽诗词可以形容夕阳很美的?
鹿锦苑周边环境怎么样?生活便利吗?
铁通机房
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?