1、被隐藏的编译过程:
2、编译过程:
(1)预编译:
- · 处理所有的注释,以空格代替;
- · 将所有的#define删除,并展开所有的宏定义
- · 处理条件编译指令:#if,#ifdef,#elif,#else,#endif
- · 处理#include,展开包含的头文件
- · 保留编译器需要使用的#pragma指令
(2)编译:
- · 对预处理后的文件进行一系列词法分析、语法分析和语义分析
- · 词法分析:主要分析关键字、标识符、立即数等是否合法
- · 语法分析:主要分析表达式是否遵循语法规则
- · 语义分析:在语法分析的基础上进一步分析表达式是否合法
- · 分析结束后,进行代码优化,生成相应的汇编代码文件
3、汇编:
- · 汇编器将汇编代码转变为机器指令
- · 每个汇编语句几乎对应一条机器指令
4、链接器
- · 连接器主要把各个模块之前相互引用的部分处理好,使得各个模块之间能够正确衔接,组成一个完成的应用程序。
静态连接:
动态链接: