MFC程序生成EXE文件的过程是:预处理-编译-链接-打包生成exe文件。(预编译是编译过程,即将一些常用的不经常改变的文件先进行编译处理生成中间文件,以节省时间,它不属于预处理,在VS项目属性的C/C++下的预编译头里可以添加想要预编译的文件)
今天讲一讲预处理。
基础知识
预处理是程序在编译之前调用预处理器对预处理指令进行处理识别的过程。它不属于c/c++范畴,只是c/c++能够接纳预处理指令而已,相当于合作商,便于开发人员开发。
哪些是预处理命令呢?以#开头的语句都是预处理命令,比较常见的有导入头文件预处理命令:#include,有#define,有#pragma,有#ifdef,有#endif等等。
在VS项目属性下C/C++下的预处理器定义可以定义预处理宏,相当于#define xxx,重要的是它的作用范围是当前项目的每个文件,因此是一次定义,全局受用。
VS系统默认定义了几个比较重要的宏,可以方便开发人员进行调试:
__FILE__:代指当前文件名(包含绝对路径)
__DATE__:当前文件编译的日期
__TIME__:当前文件编译的时间
__LINE__:
这几个宏相当于常量,可以像常量一样使用。
TRACE:向输出窗口打印文字
预处理器指令主要分为以下几种:
一、文件包含:#import、#pragma comment(lib,"xxx.lib")
二、宏定义:#define PI 3.1415
三、条件判断处理:#if、#else、#elif、#ifdef、#undef(取消宏定义)、#endif、ifndef
四、其它:
1.#pragma once 该文件只编译一次
2.#error 停止编译并显示错误信息
例如:#ifdef _DEBUG
#error _DEBUG DEFINED
#endif
会弹出错误信息,且程序无法继续编译。
宏定义的作用范围
宏定义能作用在当前文件,以及包含了当前文件的文件中。
如:在xxx.h中定义了宏#define HONG,则yyy.cpp内部包含了它#import xxx.h,则在yyy.cpp中该宏也是有作用的。