一、预处理阶段(Preprocessing)
通过预处理器处理源码中的宏、头文件和条件编译指令
- // 原始代码
- #include <stdio.h>
- #define PI 3.14
- int main() {
- printf("Value: %f", PI);
- }
预处理后展开为
- // 展开stdio.h头文件内容
- // 替换PI为3.14
- int main() {
- printf("Value: %f", 3.14);
- }
二、编译阶段(Compilation)
编译器将预处理后的代码转换为汇编代码,核心过程如下:
词法分析
将源码拆解成token流(如int, main, (, ), {等)
语法分析
构建抽象语法树(AST),验证代码结构合法性
语义分析
检查类型匹配、变量声明等语义规则
中间代码生成
生成LLVM IR或三地址码等中间表示
- t1 = 3.14
- call printf, "Value: %f", t1
代码优化
对中间代码进行冗余消除、循环优化等(如-O1/-O2优化等级)
目标代码生成
生成对应CPU架构的汇编代码(x86/ARM/RISC-V等)
|