概要:该篇文章以 MSCV 为例,简要介绍了 C++ 程序的生成过程。
1. 生成工具
MSVC,全称 Microsoft Visual C++,是由微软开发的用于生成 C++ 程序的工具集,包括 C++ 预处理器、编译器、链接器和其他生成工具。
2. 生成过程
2.1 预处理(Preprocess)
预处理由预处理器(Preprocessor)完成,其目的是对源代码进行预处理,为后续编译做准备。编写一个 hello.h 头文件和一个 hello.cpp 源文件,其各自的内容如下。在 VS 的开发者命令提示符中输入指令:cl -P hello.cpp,将生成以 .i 结尾的预处理文件。预处理文件的内容仍然是可读的文本文件,打开后的内容如下,对比后可以发现,预处理过程主要完成以下内容:
- 删除注释
- 拷贝头文件
- 处理条件编译
- 展开宏定义
// hello.h
#ifndef HELLO_H
#define HELLO_H
void SayHello();
#endif
// hello.cpp
#include "hello.h"
#define PI 3.1415926
void SayHello()
{
return;
}
#line 1 "hello.cpp"
#line 1 "C:\\Users\\mushuishui\\Desktop\\hello\\hello.h"
void SayHello();
#line 8 "C:\\Users\\mushuishui\\Desktop\\hello\\hello.h"
#line 3 "hello.cpp"
void SayHello()
{
int pi = 3.1415926;
return;
}
其中 #line 命令为 MSVC 预处理器的特性,可以忽略
2.2 编译(Compile)
编译由编译器(Compiler)完成,其目的是将预处理后的源文件翻译为可供计算机执行的二进制文件。在 VS 的开发者命令提示符中输入指令:cl -c -Tp hello.i,继续生成以 .obj 结尾的目标文件。
2.3 链接(Link)
链接由链接器(Linker)完成,其目的是将若干个编译后产生的目标文件链接成可执行文件,可执行文件就是最终生成的可以直接运行的 C++ 程序。编写另一个具有入口函数的 main.cpp 源文件,其内容如下,按照上述步骤编译生成另一个目标文件,在 VS 的开发者命令提示符中输入指令:link main.obj hello.obj,将生成 .exe 结尾的可执行文件。
// main.cpp
#include "hello.h"
int main()
{
SayHello();
}
3. 总结
最后以一张图概括 C++ 程序的生成过程。