1.处理所有的注释,以空格代替
2.将所有的#define删除,并且展开所有的宏定义
3.处理条件编译指令 #if #ifdef #elif #else #endif
4.处理#include,展开被包含的文件
5.保留编译器需要使用的#pragma指令指令实例: gcc -E file. -o file.i
对预处理文件进行此法分析,语法分析和语义分析词法分析:分析关键字,标示符,立即数等是否合法语法分析:分析表达式是否遵循语法规则语义分析:在语法饭呢西的基础上进一步分析表达式是否合法
分析结束后进行代码优化生成相应的汇编代码文件指令实例: gcc -S file.i -o file.s
汇编器将汇编代码转变为机器的可以执行指令
每条汇编语句几乎都对应一条机器指令指令实例: gcc -c file.s -o file.o
工程中的每个c语言源文件被编译后生产目标文件,这些目标文件是通过链接生成最终的可执行程序
链接器的主要作用是把各个模块之间相互引用的部分处理好,使得哥哥模块之间能够正确的衔接
静态链接:目标文件直接链接进入可执行程序
动态链接;在程序启动后才动态加载目标文件推荐阅读:
推荐阅读: 静态链接和动态链接的优缺点 多个c文件是如何组织的