1.亲核字符串、数组操作之越界与否。不然,很可能出现程序可以编译通过,但是最终却给出了错误的结果。另外指针和数组的越界访问,很容易出发segment fault
2.不要重写标准库函数,把函数名改成你自己才懂得的晦涩的名字,遵循一种统一的编程规范。
3.在书写switch case和定义相同结构的变量的时候,如果为了少手动来写一部分代码,直接采用复制粘贴的形式,那么很有可能你的某个便另定义是错误的(直接copy了钱一个变量的值,而没有做对应的修改)。
4.scanf后面没有加&,switch中漏掉break,=和==的误用
5.使用一些危险的,有可能产生越界的库函数,例如gets等。
6.多加或者少用了分号,while后if后面,会导致逻辑错误。
7.函数的声明最好和定义分离,函数要先声明,后使用
8.循环边界的确定,边界的+1还是-1,从循环中出来以后值是多少,往往是一些关键节点。
当程序的逻辑和你预想的逻辑不符的时候,想想什么地方可能出现问题:其中,4、5、6三点是最容易出现问题的地方;如何避免这类问题浪费掉大量调试时间呢?写一个脚本,每次都检查这几个地方!
给一个sed脚本,可以检测for、while、if后面多加的分号问题:
1 #n
2 /^[\ \t]*if/{
3 /);/p
4 }
5
6 /^[\ \t]*while/{
7 /);/p
8 }
9
10
11 /^[\ \t]*for/{
12 /);/p
13 }
更多的语法正确而语义错误的例子,可以参考: http://blog.csdn.net/ipmux/article/details/17350933