C语言的诅咒——《Expert C Programming》中的片段
💡
原文英文,约1500词,阅读约需6分钟。
📝
内容提要
本文提供了C编程的技巧和陷阱,包括在比较中使用字面量,最小化使用无符号类型,将函数声明为静态存储类,使用联合来节省空间等。此外,还讨论了语言的扭曲方面,如声明类似于使用,限定类型和指针赋值以及优先级规则。文章警告不要在表达式中混合多个函数调用,并返回指向字符串字面量的指针。此外,还强调了常见的错误,如假设const使值恒定和隐式int类型转换。文章最后介绍了ANSI C的术语以及理解实现定义、未指定和未定义行为的重要性。
🎯
关键要点
- 在比较中使用字面量可以简化调试过程。
- 尽量减少使用无符号类型,以避免复杂性。
- 使用变体基类型的数组长度定义。
- 将函数声明为静态存储类以限制可见性。
- 让调用者分配缓冲区,而不是被调用者。
- 使用联合体节省空间,因为同一时间只有一个成员存在。
- 结构体、联合体和枚举的定义形式相同。
- 声明与使用的相似性可能导致混淆。
- 结合typedef与声明可以简化语义。
- C语言中的类型限定符和指针赋值规则。
- 赋值运算符具有右结合性。
- 在表达式中混合多个函数调用可能导致不可预测的结果。
- 返回指向字符串字面量的指针是可行的,但不能修改该字符串。
- const并不意味着常量,值仍然可以通过其他方式修改。
- 隐式int类型转换可能导致意外结果。
- sizeof运算符不需要括号,但应谨慎使用。
- ANSI C中的术语包括实现定义、未指定和未定义行为。
➡️