# 静态类型检查

1. 类型化的语言
   - 变量的类型：限定变量在程序执行期间的取值范围和存储空间消耗
   - 类型化的语言：变量都给定类型的语言，表达式、语句等程序构造的类型都可以静态确定，运行时不需要额外的操作
   - 未类型化的语言：不限制变量值范围的语言

2. 类型的两个典型应用
   - 静态的语义分析：类型检查
   - 中间代码生成：声明语句翻译，数组寻址的翻译，类型转换

3. 类型表达式
   - 类型可以是语法的一部分，因此也是结构的
   - 基本类型是类型表达式
   - 类名也是类型表达式
   - 类型构造算子作用于类型表达式构成新的类型表达式

4. 结构等价
   - 两个类型表达式完全相同 (不考虑类型名)：类型表达式树一样，相同的类型构造夫作用于相同的子表达式
   - 有类型名时，用它们所定义的类型表达式代换它们，所得表达式完全相同 (类型定义无环时)

5. 名等价
   - 把每个类型名看成一个可区分的类型
   - 两个类型表达式名等价当且仅当是相同的基本类型或不进行名字代换就能结构等价

6. C 语言中对除结构体以外的所有类型使用结构等价，对结构体使用名字等价，以避免类型图中的环

7. 函数和算符的重载
   - 重载符号：有多个含义，在每个引用点的含义唯一
   - 重载消除：重载符号的引用点，含义能确定到唯一
   - 