良好编码风格习惯整理

1、在每个类声明之火、每个函数定义结束之后都要加空行

2、if ,for,while,do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都加上{ },方便代码阅读,防止书写失误

3、尽可能在定义变量的同时初始化该变量(就近原则),对于头文件的指针变量最好在构造函数中赋NULL

4、‘(’向后紧跟,‘,’,‘)’,‘;’向前紧跟,紧跟处不留空格

5、‘,’之后要留空格,如Function(x, y, z), 如果‘;’不是一行的结束符号,其后要留空格,如for (int i = 0; i<n; ++i)

6、对于“=”、“+=”、“>=”、“%”、“||”、“<<”等二元操作符的前后应当加空格

7、对于“!”、“~”、“++”、“--”、“&”(取地址)等一元操作符前后不加空格

8、对于表达式比较长的for语句和if语句,为了紧凑可以适当去掉一些空格,如for (i=0; i<10;++i)和if ((a<=b) && (c<=d))

9、长表达式要在低优先级操作符处拆分成新行,操作符放在行首突出。拆分的新行要适当缩进,整齐排版

  如:

    if ((very_longer_varible1 >= very_longer_varible12)

    && (very_logner_varible2 >= very_longer_varible22)

    && (very_longer_varible3 >= very_longer_varible32))

10、变量命名规则首选Microsoft公司的“匈牙利”法:变量名=属性+类型+对象,若是指针变量加前缀p,常量全大写 const int MAX = 100,其他变量用类似方法

11、不可将浮点变量用“==”或是“!=”与任何数据比较,正确方式:if ((x>=-EPSINON) && (x<=EPSINON)) ,EPSINON是允许误差,即精度

12、if判断中 if (bool)或是if (int ==0)或是if (p==NULL),p为指针

13、在多重循环中,如果允许,应当将最长的循环放在最内层,最短循环放在最外层,以减少CPU跨切循环的次数

14、一般将目的参数放在前面,源参数放在后面:void StringCopy(char *strDestination, char *strSource)

15、如果输入参数以值传递方式传递对象,应该用“const &”方式传递,节省临时对象的构造和析构过程,提高效率

16、函数体的规模要小,尽量控制在50行以内,函数之间低耦合方便调用

17、使用断言,assert仅在VS中debug版本起作用,帮助我们找到错误发生的原因,使用断言要明确注释

18、在malloc或是new申请内存之后,应该立即检查指针值是否为NULL,方式使用指针为空的内存,free或是delete释放内存之后,立即将指针设置为NULL,防止产生“野指针”

19、注意数组作为函数参数时会自动退化为指针

20、关于野指针:"野指针不是NULL指针,是指向“‘垃圾’”内存的指针,一般不会错用NULL指针,因为用if语句容易判断,但是“野指针”没办法用if语句判断。生成野指针的主要原因:a)指针变量没有初始化,应该赋值为NULL或是指向合法内存。b)指针被free或是delete后没有置为NULL。如果一个指针是NULL指针,那么free多少次都不会出问题,如果不是NULL,那么连续free两次就会导致程序运行错误

20、头文件只是用到类指针时,添加类的申明而不是整个类文件,避免生成的工程文件过大,节省编译时间,尤其是在Qt中。

21、如果派生类的函数与基类的函数同名,但是参数不同,此时无论有无virtual关键字,基类的函数将被隐藏(区别于重载,重写(参数相同))

22、参数缺省值只能出现在函数的声明中,而不能出现在定义体中,在编译时,缺省值由编译器自动插入。如果函数由多个参数,则只能由后到前挨个缺省。不合理的使用参数的缺省值会导致重载函数产生二义性(当只传入非缺省值时,编译器不能选择哪个重载函数)

23、构造函数的初始化列表:如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数

24、一个类中相同的代码,最好是提炼成一个独立的方法,方便调用。不同类中重复的代码,提炼成一个新的类

25、关于编程习惯:在编写程序前至少有明确思路(数据结构和算法),而不是坐在电脑前边输边想,东拼西凑。

原文地址:https://www.cnblogs.com/weizhixiang/p/6259089.html