C语言中的宏陷阱 #define SQU(x) x*x

       需求:求两个或几个数的乘积         #define SQU(x) x*x

    我们正常使用没有问题

    但如果这样写呢?

        竟然,不是100了 难道SQU(10) 与SQU(5+5)不等价吗? 5+5不是10吗 确实 ,在这里SQU(10)和SQU(5+5)的确不等价!原因在于,宏定义的本质是:文本替换!所以在预处理期间SQU(5+5)这段代码被宏替换为 5+5*5+5 因为乘法优先级高于加法,所以答案是35

        解决方法:就是给x加个小括号,使它变成一个整体

    就可以解决了

    当我们想算两个数的和的时候呢?我们继续验证:

欸,为什么不是20*20 = 400呢  。还是遵循宏的本质,我们展开来看:10+10*10+10=120又是一个优先级问题,又一个陷阱,防不胜防呀!

干脆整体加括号吧

这样写 #define ADD(x) ((x)+(x))

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容