# 什么是编译器 “编译器是一种将高级语言转换为低级语言的程序。” 这个定义不错;但到底什么是 “编译正确”?编译正确意味着对于任何输入,编译后程序的执行结果都和执行 C 语言形式语义的结果等价 (包括输出和终止)。这个定义其实给了编译器很多优化的空间——例如,所有最终 “用不上” 的计算都可以抹去。现在的编译器为了确保编译正确性,能做的优化相对有限,一个著名的论断是 “编译器不能把冒泡排序优化成快速排序”——虽然在今天也许不再是这样了。