1.将常常出错的合法的c语言代码视为错误!!!提醒本身之后该用不易出错的形式表示!!!web
2.空语句要用NULL显示表示!!算法
3.不要在if或while等语句中用赋值语句函数
3.要利用原型进行检查,而且参数要用精确的数值类型测试
4.下定决心使用lint,编写高质量的c语言代码spa
5.要有单个函数的测试习惯!!!设计
6.要注意将==两边的值反过来写,也就是相似:6==a指针
7.要大量使用断言,注意必定要利用断言assert或本身实现断言对参数进行检查调试
8.要从程序中删去无定义的特性或者在程序中使用断言来检查出无定义特性的非法使用,详细说明不清楚的断言日志
9,。断言不是用来检查错误的是用来检查非法情况的。orm
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. 决不容许一样错误出现两次