本文的标题也可以改成“用编译器替换预处理器”:
const double AspectRatio = 1.653;
//最好使用上述代码替换下述代码:
#define ASPECT_RATIO 1.653
好处:
- 记号名称ASPECT_RATIO从未被编译器看见,也许在编译器开始处理源码之前它就被预处理器移走了。于是记号名称ASPECT_RATIO有可能没有进入记号表内。
- 如果当编译出现错误,这个错误信息有可能会提到1.653,而不是AspecRation,如果宏定义放在不是你写的头文件中,那么将很难追踪到这个错误。
- 作为语言常量,AspecRation肯定会被编译器看到,也会进入记号表内,便于追踪错误。
- 使用常量可能比使用#define导致较小量的码,因为预处理器会“盲目地将宏名称ASSPECT_RATIO替换为1.653”