1.将经常出错的合法的c语言代码视为错误!!!提醒自己以后该用不易出错的形式表示!!!
2.空语句要用NULL显示表示!!
3.不要在if或while等语句中用赋值语句
3.要利用原型进行检查,并且参数要用精确的数值类型
4.下定决心使用lint,编写高质量的c语言代码
5.要有单个函数的测试习惯!!!
6.要注意将==两边的值反过来写,也就是类似:6==a
7.要大量使用断言,注意一定要利用断言assert或自己实现断言对参数进行检查
8.要从程序中删去无定义的特性或者在程序中使用断言来检查出无定义特性的非法使用,详细说明不清楚的断言
9,。断言不是用来检查错误的是用来检查非法状况的。
10.消除隐式假定,或利用断言判断其正确性
11.不要隐瞒错误
12.利用不同的算法对程序的结果进行确认
13.不要等待错误发生,使用初始检查程序
14.断言的局限是要求调用断言的程序代码必须能够运行到!
15.瓶颈子系统是加入断言的绝佳之处
16.进行差错或使用DEBUG版本时,要消除随机性,是错误可再现
17.冲掉无用的信息,以免被错误地使用。对于已经释放的系统内存,出于防止依然有指针错误,则将所有有用内存信息覆盖掉在释放!!!
18.保存一个日志,以唤起你的注意,保存调试信息,以便进行更强的错误检查
19.要有逐行代码进行跟踪的习惯(一定要下定决心)
20.当对代码进行逐行跟踪时,要密切关注数据流
21.对代码每条路径进行测试一边
22.不要在正常返回之中隐藏错误代码
23.在设计每一个函数接口时,一定要考虑好数据的返回形式,仔细斟酌,然后选择方便调用且不会在正常返回的结果中隐藏错误的形式
24.编写功能单一的函数
25.对一个函数界面的设计要从以下方面进行考虑:1.函数的传入参数是否合理,2.函数的返回值是否合理3.函数的调用是否方便
26.避免传入bool参数
27.程序中要避免使用莫名其妙的数字。
28.要注意曾强函数的可读性
29.不要容忍有错的参数
30.使用有严格定义的数据类型
31.在实现某个设计的时候,一定要严格按照设计去实现。如果在编写代码时只是近似地实现所提出的要求,那就很容易出错。
32.避免使用嵌套的“?:“运算符
33.通过最大限度地增加公共代码的数量来使代码差异减到最少。
34.不查优先级表,用括号
35.要注意代码本身的简洁
36.不能毫无必要地将不同类型地操作符混合使用,如果必须将不同类型地操作符混合使用,就用括号把它们隔离开来
37.如果你要用到的数据不是你自己所有的,那怕是临时的,也不要对其执行写操作。
38.为了提高效率,向全局缓冲区或静态缓冲传递数据也是很吸引人的,但是这是一条充满风险的捷径。假若你写了一个函数,用来创建只给调用函数使用的数据,
39.编写依赖于别的程序内部处理的寄生函数不仅危险,而且也是不负责任的:如果宿主函数有了更改,寄生函数也就毁坏了。
那么就将数据返回给调用函数,或保证不意外地更改这个数据。
40.紧凑的C代码并不能保证得到高效的机器代码,最重要的是可读性!!!
41.你必须养成经常询问怎样编写代码的习惯。本书就是长期坚持询问一些简单问题所得的结果。
l我怎样才能自动检测出错误?
l我怎样才能防止错误?
l这种想法和习惯是帮助我编写无错代码呢还是妨碍了我编写无错代码? 42.
决不允许同样错误出现两次