06 C++编译器是如何工作的
1. Abstract syntax tree
编译器的工作是把代码转化为constant data(常数资料)和instructions(指令),构建抽象语法树后开始生产代码
cpp 中没有文件的概念,文件只是给编译器提供源码的一个方式
.cpp 告诉编译器用 c++编译->编译器当成一个translation unit->得到一个.obj
常见的preprocessor语句==pragma statement==
常见的 Preprocessor statement
2. 1 #include
#include
就是把想要的文件中的内容复制进来.比如创建了一个 EndBrace.h,2 其中的内容是:
则我的 Multiple 函数这么写仍可以正常编译
检查 Preprocess 的文件,可通过如下操作生成.i 文件
Math.i 文件内容如下
2.2 #define
搜索 INTEGER 这个词,然后替换成后面的东西
2.3 #if
可以让我们依据特定条件==包含==或==剔除==代码
可将.obj 转化为可读版本的.asm 文件,阅读二进制用了 vscode 插件Hex Editor
3. 编译器优化
3.1 简单案例
3.2 constant folding
3.3 函数签名和 call
call 即调用函数,通过图中的符号修饰对函数做唯一签名认真,让linker按函数签名寻找函数
修改编译器,可以自动优化汇编指令