Linux编码规范详解
编码风格
1. 命名规则:
类名 大写C开头,其后每个单词首字母大写,单词之间不加任何分隔符 CRenderComponent
结构名 大写S开头,其余规则同类名 SRectangle
枚举名 大写E开头,其余规则同类名 ENodeType
类的公有函数 第一个单词首字母小写,且必须为动词,其后每个单词首字母大写,单词之间不加任何分隔符 initNetwork()
类的保护函数 以单下划线开头,其余规则同公有函数 _initNetwork()
类的私有函数 以双下划线开头,其余规则同公有函数 __initNetwork()
类的虚函数 在函数名末尾添加大写字母V _initNetworkV()
普通变量 每个单词首字母大写,且单词之间不加任何分隔符,整体变量名必须为名词 LocalIP
指针变量 以小写字母p开头,其余规则同普通变量 pData
类的成员变量 以m_开头,其余规则同普通变量 m_LocalIP
类的指针成员变量 以m_开头,其余规则同普通指针变量 m_pData
函数输入参数 以小写字母v开头,不区分输入参数是否为指针,其余规则同普通变量 vLocalIP,vData
函数输出参数 以小写字母vo开头,其余规则同函数输入参数 voLocalIP
函数输入出参数 某个参数同时作为输入和输出参数,则以小写字母vio开头,其他规则同函数输入参数 vioLocalIP
指针类型的函数参数 不需要在参数前加小写字母p
2. 多余的空格
(1)引用符号和变量名称之间不要加空格
(2)分号前不要加空格;
(3)”(“后不要加空格
3. 缺少的空格
(1) 函数的参数之间要加空格
(2) if等关键字后面要加空格
4.cpp文件中每个函数前加如下两行(类的构造函数和析构函数不加)
//******************************************************************
//FUNCTION:
5. 函数之间用且仅用一行空行分开;
6. 函数体内执行不同子功能的代码用且仅用一行空行分开;
7. 文件中任何地方不能出现连续两个或两个以上的空行;
8. 文件中不能有被注释掉的代码;
9. 避免为变量名增加注释去说明该变量的功能,变量名本身就该明确体现其功能;
10. 避免使用全局变量,绝对不能在全局命名空间中使用全局变量;
11. 尽量避免写注释,如果要写,尽量用英文,并注意拼写错误;
12. 避免变量和函数命名中的拼写错误;
13. 禁止在变量和函数命名中使用拼音;
14. 双重循环使用循环变量i和k,而不是i和j
15. 一个函数只完成一个功能,函数函数控制在50行;
16. 一个类的源代码行数控制在400行;
17. 变量的定义尽量靠近其第一次使用;
18. 对于重复出现的相同计算,应该用一个变量来保存计算结果,而不是多次重复计算
19. 避免在程序中直接出现数字; Magic Number;
20. 避免include无用的头文件,特别是在头文件中。请逐个删除头文件和cpp文件中的include语句,以测试哪些是无用的include;
21. 重载的虚函数必须使用关键字override进行修饰;
22. get*()成员函数的返回类型不能为void;
23. get*()成员函数的参数中不能包含输出参数;
24. get*()成员函数必须加const修饰,限制其不能修改所有成员变量;
25. get*()成员函数的返回值如果有必要,必须加const修饰以防止被修改;
26. 如果需要获取某个成员变量并对其进行修改,使用fetch*()而不是get*();
27. 如果需要通过输出参数的方式来获取某个成员变量,使用dump*()而不是get*();
28. 避免串联式的指针调用(如pClass1->getClass2()->getClass3()->doSomething());
29. 尽量使用了_ASSERT();
30. 工程中不能出现明显不应该的依赖关系。例如,如果我是做KNN搜索,那这个明显不该依赖OpenCV,OSG等这类特殊功能的函数库,但KNN依赖于EIGEN这类数学库或者boost这类通用库可以接受。