从C语言到二进制程序[第五期一生一芯计划 - P4]
笔记
- 预处理: 主要是文本替换,
#include
,#define
等; 其他还有去除注释, 条件编译(#ifdef
等), 字符串拼接等. - 编译
- 词法分析: 识别token与位置, 本质文本匹配.
- 语法分析: 根据C语法把token组织成AST.
- 语义分析: 确定AST中每个表达式类型, 处理类型转换, 语义错误等.
- 中间代码生成: 编译场景的指令集.
- 优化: 在保证程序的可观测行为一致性的条件下, 对中间代码进行优化.
- 目标代码生成: 中间代码翻译成目标指令集.
- 汇编: 汇编代码翻译成二进制目标文件.
- 连接: 合并多个目标文件, 生成可执行文件.
- C标准除了明确定义的行为, 还有
- Unspecified Behavior: 提供多种行为由实现选择.
- Implementation-defined Behavior: 环境进行规定(写进文档), 包括编译器+(操作系统+库函数), 即ABI(Application Binary Interface).
- Undefined Behavior: 不符合标准的行为.
Comments