INTERACTIVE LAB

cppVIP0 次浏览 更新于 2026-09-29

C/C++ 编译过程详解

从预处理、编译、汇编到链接,理解 C/C++ 程序的构建流程。

前言

虽然用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结尾]

本文将以下面这份代码为例进行介绍:

image-20231125100501679

这份代码只有三个文件,非常简单,分别为:

  • fun.h:定义函数的头文件
  • fun.cpp:实现函数的源文件
  • main.cpp:入口源文件

为了方便查看每一步的处理结果,这三个文件我也在linux系统中放了一份,用于查看每一步编译后的结果文件。

预处理

首先第一步是预处理,它的作用是尽量去除掉对下一步编译无用的东西:

  1. 去除掉注释
  2. 将宏替换
  3. 将头文件展开
  4. 执行预处理指令

完成上面几个步骤后,前面的代码大概就是下面这样了:

image-20231125100820826

主要就是:

  • 将注释内容去除掉
  • 将头文件在.cpp中原地展开
  • 将宏替换掉
  • 执行预处理指令排除掉不必要的代码
该实验为 VIP 专享内容,
请开通后继续阅读后续 70% 并运行完整示例~

DISCUSSION

评论 0

还没有评论,来留下第一条吧。