编译链接过程

本文详细介绍了编译链接过程,包括预编译、编译、汇编和链接四个阶段。预编译处理头文件和宏定义;编译阶段进行语法、语义分析及代码优化;汇编阶段将汇编代码转化为机器指令;链接阶段合并.o文件,解决符号依赖并分配地址。最终,通过虚拟地址映射,生成可执行文件。
摘要由CSDN通过智能技术生成

我们应该知道,一个.c文件经过编译链接过程会变成.exe文件(windows下)和.out文件(Linux下)的可执行文件。
我认为掌握编译链接原理对程序员来说很是重要。
首先,这样一个过程可以大致分为两个过程,即编译和链接过程。
对于编译过程又可以细分为预编译,编译,汇编三个过程。


一.预编译
预编译过程主要处理那些源代码文件中以“#”开头的预编译指令,比如:头文件“#include”,宏定义“define”。。
主要处理规则如下:

  1. 将所有的“#define”删除,并且展开所有的宏定义。
  2. 处理所有条件编译指令,比如:“#if”,“ifdef”。。
  3. 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。
  4. 把所有注释用空格替换。
  5. 添加行号和文件名标识。
  6. 保留所有的#pragma编译器指令。

在预编译完成之后我们可以得到的是一个.i文件。
在linux中,预编译.i文件的获取可以用 gcc -E main.c -o main.i 命令获得。
这里写图片描述
这时候如果你打开了main.i文件,你会发现前面好几百行我们并不认识的乱码,而我们的程序只在最后出现占一点点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值