C语言程序编译过程一般包括:预处理 -> 编译 -> 汇编 ->链接。整个过程实现了将高级语言转换为机器码,实现程序的执行。
1.预处理:预处理器读取源文件,处理预处理指令,如#include
, #define
等,生成.i
文件
2.编译:编译器将预处理后的代码编译成汇编代码,通常用16进制表示。编译之后生成.s
文件
编译器会检查语法错误,类型不匹配等,有错误将生成错误信息;
volatile关键字定义的变量随时可能改变,所以不进行编译器优化
3.汇编:汇编器将汇编代码转换成机器码(二进制代码),将汇编中的指令和操作数转换为CPU可以直接执行的机器指令,生成.o
文件。
4.链接:链接器将多个目标文件进行链接,给函数,变量等进行地址分配,解析数据调用关系,输出可执行文件,可以直接在操作系统运行。
如上,源文件经过预处理器、编译器、汇编器、链接器,最终生成可执行文件。