欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

程序编译详情过程

程序员文章站 2022-04-01 20:13:30
在运行一个程序时,事实上经过了预编译,编译,汇编,链接四个过程。只不过我们在运行程序时,这些步骤被隐藏了。 ①预编译: 把源代码文件如main.c,被预编译成一个.i文件。在l...

在运行一个程序时,事实上经过了预编译,编译,汇编,链接四个过程。只不过我们在运行程序时,这些步骤被隐藏了。

①预编译:

把源代码文件如main.c,被预编译成一个.i文件。在linux下的命令为:

gcc-E main.c -o main.i

预编译的具体任务:

1.将所有的“#define”删除,并展开所有的宏定义。

2.处理所有条件预编译指令。

3.处理头文件预编译指令,将被包含的文件插入到该预编译指令的位置。

4.删除所有的注释。

5.添加行号和文件名标识。

6.保留所有的#pragma编译器指令,因为编译器需要使用它们。

预编译的作用:

经过预编译后的.i文件不包含任何宏定义,并且包含的文件也已经被插入到.i文件中。当我们无法判断宏定义是否正确或头文件包含是否正确时,可以查看预编译后的文件夹来确定问题。

②编译:

把预编译后的文件如main.i,编译成.s文件。在linux下的命令为:

gcc-S main.i -o main.s

编译的具体任务:

把预编译完的文件进一步的进行一系列的语法,词法,解析检查。

③汇编:

把编译后的文件如main.s,汇编成.o文件。在linux下的命令为:

gcc-c main.s -o main.o

汇编的具体任务:

通过汇编代码转化为机器可以执行的指令。

④链接

把汇编后的文件如main.o,链接成.exe可执行文件。在linux下的命令为:

gcc main.o -o main

链接的具体任务:将不同部分的代码和数据收集组合为一个单一文件的过程。