1.宏定义一定要加括号
尤其是宏定义不是单项的时候,因为宏定义在预编译的时候编译器就是对它进行简单的替换,加了括号可以更加保证替换完之后不会产生我们预料不到的情况
2.函数的输入参数要检查
尤其对于指针和需要在函数中被减的传参,指针需要判断是否为空,需要被减的判断是否大于减数;函数对输入参数做了检查就相当于保证了外部给的条件是没问题的,此时如果出问题就是函数内部的问题了,这样就缩减了出BUG时的检查范围了。
3.多用枚举类型
对于某些变量,其值只会在一定的范围内的(如0-2,1-6,10-20)则对其定义个枚举类型,这样编译器会对其进行检查,一旦发现其值超过范围会报错,发现可能会超过范围则报警告;要多学会利用编译器来提前发现问题
4.多用static
无论是对于函数还是变量,只要是外部不会用到的都加static;还有就是能作为局部变量的就别定义成全局的,即便是局部静态变量(都别定义成全局的)
5.多用const
对于指针则涉及其指向的值是否可变和指针本身(指向的地址)是否可变的问题,所以定义指针的时候需要考虑两个const,如果都不可变的话那就都加const,如:cont int *const pot; 对于非指针则相对简单了,只需要考虑其本身是否可变就行了
6.多用volatile
volatile的核心意思是:告诉编译器该变量是很重要的,所以在涉及对该变量操作和该变量相关的代码的时候别进行优化,如读写该变量的时候要从其源地址读写而别使用备份
7.volatile const也是有意义的
这点很重要,很多人以为const的变量已经是不可变了,再加volatile就没啥意义了(不会涉及读写),但是,加了const只是表示程序不可改变它的值,不代表编译器不可以,所以加const还是有意义的(编译器在涉及对它的操作的时候会从其源地址读写)