C
- c缺陷与陷阱 内容古老但不会过时(就是以现代教育资源与编程经验来看,有点浅显) 4
词法陷阱
- 注意==与=,如果判断条件用=请使用()如(ch=getchar())
- 注意位运算与逻辑运算
- 词法分析中的贪心法 (尽可能使一个token长)如a---b等效(a--)-b
语法陷阱
- c语言的声明 (在c的几乎所有经典当中都有对复杂声明的探讨,不赘述)
- 注意运算符的优先级 (你也许可以找到一些规律记住它们)
- 注意;的错误会改变if else的行为
- 灵活使用switch语句当中不会自动break的特性
- 注意else的配对
语义陷阱
- C语言只有一维数组,并且我们只能获得长度以及首元素的地址,所有数组的其他操作本质上都是对于指针的操作
- 想清楚内存空间,合理的free,防止内存泄漏,是否分配成功,字符串多一个字节
- 数组传进函数的信息缺失
- 不要解引用NULL,相应的也可以推广到垃圾值以及已经free的地址
- 注意边界,写成 x >= begin && x < end,这有不少理解与计算的好处
- 求值顺序/序列点
- a>INT_MAX-b可以验证a+b是否溢出
- 返回整型的函数没有return,会返回垃圾值
链接
- 善用lint检查链接时错误
- extern仅是引用
- static避免命名冲突
- 没include也可以用库函数,只是缺少声明而已
- 在头文件中extern全局变量,在任何地方include它是优秀的方法
库函数
不记录
预处理器
该部分的内容上面或多或少有所提及,包括把参数以及最外(),以及不要让参数中有副作用,不要在宏中使用if,不要用宏替换指针类型
可移植性缺陷
- 权衡兼容与新特性的便利
- 标识符的限制
- 逻辑移位与物理移位
- 整型的符号与大小 (使用unsigned char)
- 在新的实现当中,realloc可以把已经free的内存块重新分配大小
很多过时内容没有记录