C++代码编译过程

C++代码编译过程

源代码从生成到可执行文件可以分成四个步骤:预处理、编译、汇编和链接。

以下是linux下GCC生成一个可执行文件a.out的过程:

图源自网络。

一、预处理

预处理过程主要是处理那些源文件和头文件中以#开头的命令,例如:#include、#define、#ifdef等。

预处理的规则:

·将所有的#define删除,并展开所有的宏定义。
·处理所有条件编译命令,比如 #if、#ifdef、#elif、#else、#endif 等。
·处理#include命令,将被包含文件的内容插入到该命令所在的位置,这与复制粘贴的效果一样。这个过程是递归进行的,也就是说被包含的文件可能还会包含其他的文件。
·删除所有的注释//和/* … */。
·添加行号和文件名标识,便于在调试和出错时给出具体的代码位置。
·保留所有的#pragma命令,因为编译器需要使用它们。

主要的预处理指令及其含义:
图来自网络

​ 预处理的结果是生成**.i文件**。.i文件也是包含C语言代码的源文件,所有包含的文件已经被插入到当前文件中。

二、编译

​ 编译就是把预处理完的文件进行一些列的词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件

​ 在GCC下,编译生成**.s文件**,在Visual Studio下可以在工程目录中看到**.asm文件**。

三、汇编

​ 汇编的过程就是将汇编代码转换成可以执行的机器指令。汇编的结果就是产生目标文件,在GCC下的后缀为.o,在Visual Studio下的后缀为.obj。具体的汇编指令,可以自行上网查询对照。

四、链接

​ 此时目标文件已经是二进制文件,与可执行文件的组织形式类似,只是有些函数和全局变量的地址还未找到,程序不能执行。链接的作用就是找到这些目标地址,将所有的目标文件组织成一个可以执行的二进制文件。

链接的作用就是找到这些目标地址**,将所有的目标文件组织成一个可以执行的二进制文件。

(持续更新中。。。)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值