C++编译过程分为四个阶段
1. 预处理
第一,据编译器支持的字符集,翻译源码。编译器把源代码中出现的字符映射到源字符集。该过程处理多字节字符和三字符序列。
第二,编译器定位每个反斜杠后面跟着换行符的实例,并删除它们。把多个物理行转换成一个逻辑行。
第三,编译器把文本划分成预处理记号序列、空白序列和注释序列(记号是由空格、制表符或换行符分隔的项)。这里要注意的是,编译器将用一个空格字符替换每一条注释。
第四,明示常量。把#define定义的宏展开。
第五,包含文件,比如预处理器会把包含进来的头文件展开
第六,处理其他预处理指令,如#undef、#ifdef等
输入 | 输出 |
*.c | *.i |
2. 编译
编译器会检查语法、语义错误
,并生成汇编代码。语法错误编译器能检测,
输入 | 输出 |
*.i | *.s |
3. 汇编
汇编器将汇编语言代码转换为机器代码,并生成目标文件。目标文件包含二进制形式的机器代码,但尚未链接到最终的可执行文件。
输入 | 输出 |
*.s | *.o |
4. 链接
链接器将一个或多个目标文件、库文件(如标准库、动态库等)和启动文件合并为一个可执行文件。链接器的主要任务包括解析符号引用、分配内存地址、合并数据段和代码段等。
输入 | 输出 |
*.o | 可执行文件,如:*.exe(win) |