需要强调的是,我们采用如此的替换对预处理的需求降低了,但是并没有完全消除,#define仍然是必需品,#ifdef和#ifndef仍然在控制编译上扮演着重要的作用。
#define ASPECT_RADIO 1.512
上面语句运用了宏定义,在代码中ASPECT_RADIO的值就是1.512,但是需要注意的是:宏定义语句的处理是预处理器进行操作的,也就是说在编译器对代码进行编译的时候,所有的ASPECT_RADIO就已经被替换成1.512了,如果程序中出现错误的时候,打印的信息是不会包含ASPECT_RADIO的,这无疑对错误的定位造成了困难。
一般我们会用const,enum 和 inline关键字来替代 #define,下面就说一下具体的替代情况。(这里不是说#define就完全没用了,只是在下面的情况下使用其他关键字替代更好,#define自有其其他的用处)
用const替代
const语句是实实在在的编译器处理的,不像#define是在预处理中进行替换,例如上面的代码可以替换成
const double ASPECT_RADIO = 1.512;
对于一般的情况直接这样替换就行,但是有两种情况需要注意一下:
1. 常量指针
当const与指针进行结合时,情况有些复杂,当我们在头文