C语言编译过程

最近在看C语言的基础知识,之前只关注编译最后生成的二进制文件,不知道编译过程,学习到了整理一下。

一、C语言编译过程

过程如下:

预编译---->编译---->汇编---->链接器输出---->二进制文件。

编译器将编译分为预处理、编译和汇编。

连接器把各个独立的模块链接为可执行程序。

静态链接在编译期完成,动态链接在运行时完成。

C语言编译过程_第1张图片

预编译过程:

1、处理所有的注释,以空格代替。

2、将所有的#define删除,并且展开所有的宏定义。

3、处理条件编译指令#if、#ifdef、#elif、#else、#endif。

4、处理#include,展开包含的文件。

5、保留编译器需要使用的#pragma指令。

总结:预编译改替换替换,展开#include文件,保留#pragma指令。

编译:

1、对预处理文件进行词法分析、语法和语义分析:

词法分析:关键字、标识符、立即数是否合法;

语法分析:表达式是否遵循语法规则;

语义分析:在语法基础上分析表达式是否合法。

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

总结:编译对预处理文件进行分析,生成汇编代码。

汇编:

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

总结:汇编是把代码转化为机器能听懂的文件。

连接:

连接器是把代码中各个汇编生成的o文件连接起来。

分为静态链接

C语言编译过程_第2张图片

动态链接:

C语言编译过程_第3张图片

你可能感兴趣的:(C语言基础知识,c语言,开发语言)