Summary
1)编译器个别由以下 4 局部组成:预处理器、编译器、汇编器、链接器
2)点击 Build 之后,IDE 会进行 预编译
(生成两头.i
文件)、编译
(生成 汇编代码.s
文件)、汇编
(生成 指标文件.o
文件)、链接
(生成 可执行程序.out
文件)。
3)预编译会做的事件:解决正文
(应用空格代替); 开展宏
(删除 ’#define’); 解决 #
结尾的符号(包含解决 条件编译指令
、 开展头文件
、#pragma 指令
等)
4)编译器所做工作
-
对预处理.i 文件进行
词法剖析、语法分析、语义剖析
- 词法剖析:剖析关键字、标识符、立刻数等是否非法
- 语法分析:剖析表达式是否恪守语法规定
- 语义剖析:在语法分析的根底上进一步剖析表达式是否非法
- 剖析完结后进行代码优化
生成相应的汇编代码文件
5)汇编器所做工作
- 将
汇编代码转变为机器的可执行指令
每条汇编语句简直都对应一条机器指令
编译过程简介
1、预编译
预编译做的是文本处理工作:
正文用空格代替
开展所有的宏定义
,并将 #define 删除- 解决
条件编译指令
#if, #ifdef, #elif, #else, #endif - 解决
#include
,开展被蕴含的头文件 - 保留编译器须要应用的
#pragma 指令
预处理指令示例:gcc - E test.c -o test.i
2、编译
编译器所做工作
-
对预处理.i 文件进行
词法剖析、语法分析、语义剖析
- 词法剖析:剖析关键字、标识符、立刻数等是否非法
- 语法分析:剖析表达式是否恪守语法规定
- 语义剖析:在语法分析的根底上进一步剖析表达式是否非法
- 剖析完结后进行代码优化
生成相应的汇编代码文件
编译指令示例:gcc -S test.i -o test.s
3、汇编
汇编器所做工作
- 将
汇编代码转变为机器的可执行指令
每条汇编语句简直都对应一条机器指令
汇编指令示例:gcc -c test.s -o test.o
(.o 文件被称为指标文件,并不是最终的可执行程序;个别 一个.c 文件就对应到一个.o 指标文件
)
本文总结自“狄泰软件学院”唐佐林老师《C 语言进阶课程》。
如有错漏之处,恳请斧正。