C 编译器制作入门

索引

索引

本索引按中文术语整理,主要用于快速回到书中相关章节。

由于本版本对正文做了中文化改写,索引也相应采用中文技术书常用译名,而不是机械保留原文词序。

A-C

  • ABI:应用二进制接口,约定函数调用、参数传递和寄存器使用方式。
  • AST:抽象语法树,语法分析后的核心中间表示。
  • C11:本书示例代码使用的 C 语言标准版本。
  • Git:版本管理工具,用于记录每一步编译器开发。
  • Docker:用于在 macOS 上运行 Linux 构建与测试环境。
  • x86-64:本书目标平台使用的指令集。

编译器基础

机器码、汇编与链接

  • 机器码:CPU 直接执行的程序表示。
  • 汇编器:把汇编代码转换为机器码的程序。
  • 汇编语言:与机器码接近的一种低级文本表示。
  • 程序计数器:保存当前指令地址的 CPU 状态。
  • 寄存器:CPU 内部的高速存储位置。
  • :函数调用、局部变量和临时值常用的内存区域。
  • 目标文件:分离编译得到的中间文件,通常以 .o 结尾。
  • 链接错误:链接阶段发现符号缺失或重复定义等问题时产生的错误。
  • 静态链接:把所需库代码复制进最终可执行文件。
  • 动态链接:程序运行时再加载共享库。
  • 调用者保存:函数调用后可能被覆盖、需要调用者自行保存的寄存器约定。

C 语言语义

  • 头文件:保存声明、类型定义和跨文件共享信息的文件。
  • 前向声明:在定义出现之前先告诉编译器某个函数或变量的类型。
  • 声明:告诉编译器某个名字和类型的存在。
  • 定义:真正为函数或变量提供实体。
  • 左值:可以作为赋值目标的表达式。
  • 右值:表达式计算得到的普通值。
  • 指针:保存地址的值。
  • 数组:连续排列的同类型对象集合。
  • 字符串字面量:以字符数组形式保存的字符串常量。
  • 函数指针:指向函数的指针类型。
  • 声明符:C 类型声明中围绕标识符构成复杂类型的部分。

整数与内存表示

  • 无符号整数:只表示非负数的整数类型。
  • 有符号整数:可以表示负数的整数类型。
  • 二进制补码:现代计算机常用的有符号整数表示方式。
  • 符号位:有符号整数中表示正负的最高位。
  • 符号扩展:把较小整数扩展到较大整数时保持符号不变。
  • 最高位:二进制数中权重最高的位。
  • :可执行文件和进程映像中的区域划分。
  • 文本段:保存机器码的段。
  • 数据段:保存全局变量等数据的段。
  • 程序加载器:把可执行文件映射到内存并启动程序的系统组件。

开发工具与工作流

  • Makefile:描述构建规则的文件。
  • 提交:Git 中记录一组修改的单位。
  • 工作树:从 Git 仓库检出的、供编辑和编译使用的目录树。
  • 仓库:Git 保存历史记录的数据结构。
  • 镜像:Docker 中用于创建容器的模板。
  • 容器:由镜像启动出来的运行环境。
  • 挂载:把宿主机目录映射到容器内路径。