C与C++中宏的用法小结

写在前面,一些c/c++的书籍都对使用宏不是很推荐,因为确实太容易出问题,不过大神总是能用宏写出来非常牛逼的代码,当年读PyG的源码的时候就被作者使用宏自动编码的技术所折服(使用宏减少代码量是宏的精髓)。宏的用法千变万化,我对很多用法也是一知半解,因此只选了一些自己掌握的内容。

一,宏的缺点

  1. 宏不能访问对象的私有成员

  2. 宏的定义很容易产生二义性

#define Multi(x) (x*x)

如果用一个数字去调用它Multi(10),结果是100;但是如果用一个表达式Multi(10+10)去调用的话,我们期待的结果是400,但是宏调用结果是(10+10*10+10),结果为120。为了避免这些错误,尽量给宏的参数都加上括号,包括最外层的括号。

#define MUL(A,B) ((A)*(B))
#define Multi(x) ((x)*(x))

这样在一定程度上可以保证能够程序不出错,但是对于有些情况还是不行,调用Multi(a++),宏展开式为(a++)*(a++),如果a=4,结果为4*4=16,a=6,而我们期望的是4*4=16,a=5

  1. 宏不会进行数据类型的安全检查,其只是简单的字符替换。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。