一个可执行的C++二进制的整个构建过程包括:预处理,编译,汇编,链接。
在预处理阶段,就是预处理器对预处理命令进行处理,常用的预处理命令主要包括三类:
1、宏定义,2、文件包含,3、条件编译。
宏定义,#define ;实际上在effective C++中,并不太建议使用define,建议尽量使用const,inline,enum替换#define,
原因在于define的常量在编译器处理之前已经完成替换,所以没有进入符号表,导致如果出现问题,不好跟踪定位。
文件包含,#include
条件编译命令较多,常用的有:
#ifdef
#ifndef
#endif
通过条件编译可以避免头文件被重复包含的问题。
如:在头文件中做如下定义
#ifndef KERNEL_MONITOR_H
#define KERNEL_MONITOR_H
....
#endif
如上就可以避免对kernel_monitor.h这个头文件重复包含。