前言
虽然用vs这样的集成工具开发C/C++程序很简单,只需要点一下就能完成代码的编译、生成可执行文件,但其底层完成的却并不容易。
而有些时候知道了底层原理,就能更加容易的找到bug、也能对代码理解的更加深入。
而本文就是来介绍一下C/C++整个编译过程的,主要分为4步:预处理、编译、汇编、链接。
这四部分的流程如下图所示:
graph TB
A[C/C++源码]--预处理-->B[预处理代码,以.i结尾]
B--编译-->C[得到汇编代码,以.s结尾]
C--汇编-->D[得到二进制代码,以.o结尾]
D--链接-->E[得到可执行文件,windows系统中以exe、dll结尾]
本文将以下面这份代码为例进行介绍:

这份代码只有三个文件,非常简单,分别为:
fun.h:定义函数的头文件fun.cpp:实现函数的源文件main.cpp:入口源文件
为了方便查看每一步的处理结果,这三个文件我也在linux系统中放了一份,用于查看每一步编译后的结果文件。
预处理
首先第一步是预处理,它的作用是尽量去除掉对下一步编译无用的东西:
- 去除掉注释
- 将宏替换
- 将头文件展开
- 执行预处理指令
完成上面几个步骤后,前面的代码大概就是下面这样了:

主要就是:
- 将注释内容去除掉
- 将头文件在
.cpp中原地展开 - 将宏替换掉
- 执行预处理指令排除掉不必要的代码
该实验为 VIP 专享内容,
请开通后继续阅读后续 70% 并运行完整示例~
请开通后继续阅读后续 70% 并运行完整示例~
DISCUSSION
评论 0
还没有评论,来留下第一条吧。