大佬教程收集整理的这篇文章主要介绍了[C]宏陷阱,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公众号:为敢(WeiGanTechnologies)
?博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
?GitHub地址:https://github.com/strengthen/LeetCode
?原文地址:https://www.cnblogs.com/strengthen/p/11419042.html
?如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
?原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★@H_403_14@
求两个或几个数的乘积: #define SQU(X) x*x@H_403_14@
@H_403_14@@H_403_14@
但如果这样写呢?@H_403_14@
@H_403_14@竟然不是100了,难道SQU(10)和SQU(5+5)不等价吗?5+5不是10吗?的确,这里SQU(10)和SQU(5+5)的确不等价!@H_403_14@
原因在于,宏定义的本质是文本替换!所以在预处理期间SQU(5+5)这段代码被宏替换为5+5*5+5,结果因为乘法优先级高于加法,变成5+25+5,可想而知!@H_403_14@
那么解决这个问题的办法,相信大家看完之后心里应该有答案了,就是给x加个小括号,使它变成一个整体,如下:@H_403_14@
@H_403_14@@H_403_14@
与此类似的,当我们想算两个数的和的时候呢?我们继续验证: @H_403_14@
@H_403_14@正常写,不会触发陷阱,关键没错并不代表没有问题(虽然每个x都加了小括号!大家试试这样写: @H_403_14@
@H_403_14@为嘛不是20*20的400呢?还是遵循宏的本质,我们展开来看:10+10*10+10=120@H_403_14@
又是一个优先级问题,又一个陷阱,防不胜防呀!那怎么解决呢?答:干脆一了百了,整体全加括号吧!@H_403_14@
这么写:#define ADD(X) ((X)+(X))@H_403_14@
@H_403_14@以上是大佬教程为你收集整理的[C]宏陷阱全部内容,希望文章能够帮你解决[C]宏陷阱所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。