以处理一段c语言程序为例。
文件名:main.c
代码如下:
#define PI 3.14
#include <stdio.h>
int main()
{
double r = 1.0, s;
s = PI * r * r;
printf("s = %lf\n", s);
return 0;
}
- 预编译阶段
主要是处理源文件中的伪指令,包括 宏定义、头文件包含等,gcc会将头文件及宏定义的内容全部展开到当前文件中。
命令:gcc main.c -E -o main.i
其中,main.i就是预编译后生成的文件,使用vim打开,如图1-1.
如图1-1 PI已经被展开成3.14.
2. 编译阶段
完成C语言到汇编语言的转换
命令:gcc main.i -S
结果会生成一个main.s文件,部分代码如图1-2所示.
3. 汇编阶段
将汇编阶段翻译成二进制代码
命令:gcc main.s -c
结果生成一个名为mian.o的二进制文件,使用od命令查看,即输入 od main.o,二进制文件如图1-3.
4. 链接阶段
生成可执行文件
命令:gcc main.o
默认生成名为a.out文件,也可以使用参数 -o 自定义生成文件名,最后输入./a.out,运行结果如图1-4.