- Build = Compile +Link
- 四个步骤:Prepressing Compilation Assembly Linking
- 预处理 .c .cpp .h .hpp文件被预编译后,产生.ii文件
- 预编译主要处理以#开头的预编译指令:
1.删除所有的#define,展开宏的定义。
2.处理条件预编译指令 #undef取消已定义的宏 #if如果给定条件为真,则编译下面代码 #ifdef如果宏已经定义,则编译下面代码 #ifndef如果宏没有定义,则编译下面代码 #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif结束一个#if……#else条件编译块 #error停止编译并显示错误信息
3.#号必须是该行除了任何空白字符外的第一个字符
4.#include 将包含的文件插入到预编译指令的位置。被包含的文件内还可以包含其他的文件。
5.删除所有的注释 和空格。
6.添加行号和文件名标识,方便编译时调试的行号信息和错误和警告的行号信息。
7.保留#pragma 编译器指令 - 编译:把与处理完的文件生成相应的汇编代码。几乎所有的高级语言都会生成汇编代码。
- 汇编:将汇编代码转位机器指令(并非可执行文件)。每一条汇编语句几乎都对应一条机器指令。照表翻译。输出目标文件(Object File)
- 链接
- 编译过程:
1.扫描
2.语法分析
3.语义分析
4.源代码优化
5.代码生成
6.目标代码优化 - 源代码被输入到扫描器中,其运用一种类似于有限状态机的算法,将源代码的字符序列分割成一系列的记号(Token),有这几类:关键字、标识符、字面量(数字,字符串。一般认为不可更改)、特殊符号(+ - *等)。
- 语法分期:产生语法(Syntax)树,采用上下文无关语法。
- 语义分析:
程序员的自我修养 读书笔记03
最新推荐文章于 2017-01-29 22:40:39 发布