标准C与经典C的区别:程序设计的现代方法

需积分: 10 0 下载量 184 浏览量 更新于2024-10-09 收藏 209KB PDF 举报
"C语言程序设计:现代方法_附录C_标准C与经典C的比较" 这篇资源主要探讨了标准C(按照ANSI/ISO C标准)与经典C(Kernighan和Ritchie的《C Programming Language》第一版所描述的版本)之间的差异。以下是这些差异的详细说明: 1. **标识符**:在经典C中,标识符的前8个字符是唯一的,而标准C不再限制这个长度。 2. **关键字**:标准C引入了`const`、`enum`、`signed`、`void`和`volatile`这五个新关键字,这些都是经典C中没有的。同时,经典C将`entry`视为关键字,但在标准C中它不再是关键字。 3. **一元+运算符**:标准C引入了一元`+`运算符,允许对一个表达式求正,经典C中则没有这个操作。 4. **switch语句**:在经典C中,`switch`语句的控制表达式必须是`int`类型,而标准C放宽了这个限制,允许使用任何整数类型,包括`unsigned int`和`long int`。 5. **基本类型**: - **无符号类型**:经典C只有一个无符号类型`unsigned int`,标准C增加了更多的无符号类型,如`unsigned char`, `unsigned short`等。 - **signed**:标准C引入了`signed`类型说明符,使得明确指定有符号类型成为可能。 - **数的后缀**:标准C提供了`U`或`u`后缀来表示无符号整数常量,以及`F`或`f`后缀来表示`float`类型的浮点常量。`L`或`l`后缀在经典C中只能用于整数,但标准C允许用于浮点常量,表示`long double`。 - **long float和long double**:经典C中没有`long double`类型,它将`long float`视为`double`的别名,而在标准C中这是独立的类型。 6. **转义序列**:标准C添加了`\a`(警报)、`\v`(垂直tab)和`\?`(问号)转义序列,以及十六进制的转义序列,如`\xHH`。 7. **size_t类型**:标准C中,`sizeof`运算符的结果类型是`size_t`,这比经典C中的`int`类型更精确,可以处理更大范围的大小。 8. **通用的算术转换**:标准C对不同类型间的算术运算进行了更细致的规定,例如,经典C会强制`float`到`double`的转换,并规定短无符号整数与长有符号整数相加总是产生无符号结果,而标准C对此有更复杂和明确的规则。 9. **函数定义**:在标准C中,函数定义的参数列表必须包含参数的类型,而在经典C中,可以省略类型,让编译器根据上下文推断。 这些差异反映了C语言随着时间的发展和标准化过程中的改进,旨在提高语言的灵活性、安全性和可移植性。为了充分利用现代C的功能和保证代码的兼容性,开发者应当遵循标准C的规范。如果使用的编译器不是标准兼容的,应查阅其手册以了解支持的特性。此外,对于其他不那么重要的差异,可以参考《C Programming Language》第二版的附录A和C。