被诅咒的C - 《Expert C Programming》中的编程片段
💡
原文英文,约2600词,阅读约需10分钟。
📝
内容提要
本文总结了《Expert C Programming》中的C语言编程技巧和常见错误,包括使用工具、避免复杂性、内存管理和使用联合体节省空间等建议。还提到setjmp和longjmp用于错误处理,以及类型定义和指针的注意事项,强调良好编程习惯和潜在陷阱。
🎯
关键要点
- 使用工具可以帮助理解程序的调用关系和符号表。
- 在比较中使用字面量在变量前可以简化调试。
- 避免不必要的复杂性,尽量减少无符号类型的使用。
- typedef 应该用于组合数组、结构体、指针或函数的类型,而不是仅仅为了省去 'struct' 关键字。
- 使用联合体节省空间,因为同一时间只有一个成员存在。
- 使用 setjmp 和 longjmp 进行错误处理,可以在发现不可恢复的错误时转移控制回主输入循环。
- 声明与使用相似,理解声明的含义对于避免错误至关重要。
- const 关键字并不意味着值是常量,可能通过其他方式修改。
- 隐式整型转换可能导致意外的比较结果,需谨慎处理。
- sizeof 操作符不需要括号,但应避免滥用。
- typedef 可以用于多个声明,但不应滥用以保持代码清晰。
❓
延伸问答
在C语言中,如何使用工具来帮助理解程序的调用关系?
可以使用工具如cflow和cscope来打印程序的调用关系和符号表,从而帮助理解程序结构。
为什么在比较中使用字面量在变量前可以简化调试?
这样可以避免因等号位置错误而导致的调试困难,例如使用if (3==i)而不是if (i==3)。
typedef在C语言中应该如何使用?
typedef应用于组合数组、结构体、指针或函数的类型,而不是仅仅为了省去'struct'关键字。
setjmp和longjmp在错误处理中的作用是什么?
setjmp和longjmp用于在发现不可恢复的错误时,将控制转移回主输入循环,从而实现错误恢复。
使用联合体(union)有什么好处?
使用联合体可以节省空间,因为同一时间只有一个成员存在,允许不同的解释同一数据。
在C语言中,const关键字的作用是什么?
const关键字使得通过该符号的值变为只读,但并不防止通过其他方式修改该值。
➡️