本篇作者强调 “宁可以编译器替换预处理器”. 因为预处理器会先于编译器使用。
从C语言继承来的宏,在预处理阶段会被替换掉。 那么到了编译阶段,使用宏的时候的记号名称有可能没有进入记号表内。
而const, inline,enum可以获得宏带来的效率,以及类型安全性等。
1. 作者介绍了enum hack技术: 使用enum来代替宏
class GamPlayer {
private:
enum { NumTurns = 5 }; //"the enum hack"
int scores[NumTurns];
...
};
这种技术我在leveldb的源码中也见到过。