龙空技术网

C语言编译器编译过程

一代盐商 1487

前言:

现在我们对“c语言过程”大约比较注重,我们都想要学习一些“c语言过程”的相关资讯。那么小编也在网络上搜集了一些对于“c语言过程””的相关资讯,希望姐妹们能喜欢,兄弟们快快来学习一下吧!

从C语言源代码编写完成到计算机能够执行的程序,大致经过预编译、编译、汇编、链接四个过程,每个过程都会输出一个文件。

预编译

预编译过程的目标是把C源文件变成中间代码,具体内容是:

包含的头文件替换成对应的函数声明宏定义的展开,进行字符串的替换处理条件编译指令,如#ifdef/#else/#ifndef/#endif等删除代码中的注释文件添加行号和标识

预编译指令

gcc -E hello.c -o hello.i
编译

编译过程的目标是把中间代码变成汇编文件,具体内容是:

对预处理文件进行词法分析,语法分析和语义分析

词法分析:分析关键字,标示符,立即数等是否合法语法分析:分析表达式是否遵循语法规则语义分析:在语法分析的基础上进一步分析表达式是否合法

分析结束后进行代码优化生成相应的汇编代码文件

编译指令

gcc -S hello.i -o hello.s
汇编

汇编过程的目标是把汇编文件变成二进制文件,具体内容是:

汇编器将汇编代码转变为机器的可以执行指令每条汇编语句几乎都对应一条机器指令

汇编指令

gcc -c hello.s -o hello.o
链接

链接过程的目标是把二进制文件变成可执行程序,具体内容是:

将二进制文件所用到的外部库绑定才能正常运行

链接指令

gcc hello.o -o hello.out
运行可执行程序

计算机执行最终生成的文件hello.out(可执行程序),输出结果如下:

标签: #c语言过程