C89是C语言的第一个标准化版本,在1989年被ANSI (American National Standards Institute) 和ISO (International Organization for Standardization)联合发布。该标准定义了C语言的语法、语义和标准库。C89包含了32个关键字、多种数据类型、控制结构、运算符、函数等元素,几乎包涵了所有C语言的基本特性。
距离C89标准发布已经30多年了,但C89由于其简洁性和易于移植性,在许多嵌入式系统和操作系统开发中仍然广泛应用。
(1)特点一:严格的类型检查和转换规则
C89标准中,对于变量声明和定义要求十分严格,必须在使用之前进行显式的声明或定义,这与C语言的松散类型管理相比,显得更为严谨。同时,在类型转换时也要遵循一定的规则,如遵循先把整型提升为无符号整型,或者先把带符号整型提升为更宽的带符号整型等。
(2)特点二:标准库的扩展
C89标准中,标准库被扩充为更加全面、更加强大的形态。 另外,在标准库中加入了类型安全的函数,如包括printf和scanf在内的几乎所有标准库函数都被修改以遵循类型安全的约束。这大大提高了程序的健壮性和可靠性。
(3)特点三:注重代码移植
C89标准非常注重代码的可移植性。它明确定义了基本的数据类型,如整型和浮点型,因而程序员可以确信在不同的系统上编写代码不会变得更加困难。另外,C89还明确规定了编译器和标准库函数的需求,从而保证了C程序在不同的计算机上运行时维持了一致的行为。
C语言不断发展和演变,也经历了多次更新,如C99、C11、C17等版本,这些版本在语法、功能、性能等方面都有所提高。下面主要比较C89和C99。
(1)C99相对于C89的增强
C99中增加了对复合字面量、对变长参数的支持、complex数运算、inline函数、真正的布尔类型等众多语言增强。此外,C99中增加了一个附录,其中的库函数部分规定了一个更大的API集合。
(2)C99相对于C89的缺陷
从内存管理的角度来看,C99的malloc和free函数在实现上仍然存在巨大的风险。此外,C99对Unicode字符集的支持不够完整,对于多字节字符集的处理也存在一定的问题,这些也是C89标准所不存在的问题。
总之,C89是C语言的第一个标准化版本,其标准的定义对后来C语言标准的发展有很大的影响。它通过对C语言语法和标准库的规范化,推动了计算机科学的发展。尽管现在的C语言标准已经远远超出了C89,但在某些场合和环境下,C89仍然是一种合适的选择。