摘要:
宏是C和C++语言的抽象设施中最生硬的工具,它是披着函数外衣的饥饿的狼,很难驯服,它会我行我素地游走于各处。要避免使用宏。
这一点在effective C++中也进行了解释。C++的宏的主要问题在于,他们表面上看起来很好,而实际上做的却是另一回事。宏会忽略作用域,忽略类型系统,忽略所有其他的语言特性和规则,而且会劫持它为文件其余部分所定义的符号。宏调用看上去很像符号或者函数调用,但实际上并非如此。宏不太“卫生”,也就是说,它会根据自己所使用时所处的环境引人注目而且令人惊讶地展开为各种东西。宏需要进行文本替换,因此编写远距离也正确的宏接近于一种魔法,而精通这种魔法既无意义也无趣。
即使在极少情况下,有正当理由编写宏,也绝不要考虑编写一个以常见词或者缩略词为名字的宏。尽可能快地消除宏的定义,总是给他们取很明显的、大写的、很难看的名字,并且不要放在头文件中。
例外情况:
1. 宏仍然是几个重要任务的唯一解决方案,比如#include保护符,条件编译中的#ifdef和#if _defined,以及assert的实现。
2. 在条件编译中,要避免在代码中到处杂乱地插入#ifdef.相反,应该对代码进行组织,利用宏来驱动一个公共接口的多个实现,然后始终使用该接口。
3.如果不想到处复制和粘贴代码段,那么可以使用宏。
时间: 2025-01-25 05:38:26