首先声明,此为笔者个人所制定的针对C++程序的命名规则,并非权威,也绝非最好的命名规则。之所以要制定这些规则,是因为笔者每次给文件或者变量命名的时候总是要想许久,而且取的名字有些不能见文知意,隔一段时间再来读这些代码也需要半天才想得起来是什么意思,这样就耽搁了很多时间。为了解决这个令人头痛的命名问题,笔者结合自身编程习惯,制定了自己的一套C++命名规则,尽管不是最权威和最好的,但笔者相信,只要严格遵守命名规则(不管是谁制定的),那么在开发过程中,一定会使自己的思路更清晰,开发效率更高,程序可读性更强,修改更加容易。
0、按功能进行命名
1、.h文件和.cpp文件:仅由小写英文字母组成,.h和.cpp名称应当一致,比如pavementdistressextraction.h和pavementdistressextraction.cpp
2、命名空间:仅由小写英文字母组成,且由.h名称的每个首单词首字母构成,最后一个单词与.h名称的最后一个单词一致,比如pdextraction
3、自定义基本数据类型(建议使用typedef):仅由小写英文字母组成,只保留最后一个基本数据类型名,前面的单词全部只取首字母,全部小写,然后合并在一起作为前缀,比如
typedef long long llong;
typedef unsigned char uchar;
typedef unsigned short ushort;
typedef int * intp; //这种命名方式可以和引用类型(严格来讲引用不是类型,这里只是为了较好理解才这么称呼)变量联合使用
typedef float * floatp;
4、自定义非基本数据类型(建议使用宏定义):同上,比如
#define vint vector<int>
#define vvint vector<vint>
#define vfloat vector<float>
#define vvfloat vector<vfloat>
#define vstring vector<string>
5、循环体中的计数变量:统一使用小写单个英文字母i,j,k,l,m,n,s,t,仅在这几个字母中进行选择,比如
for (int i=0; i<5; i++) {}
6、类:仅由英文字母组成,每个单词首字母均大写,其余字母小写,比如PavementDistressExtraction
7、类中公有成员变量:以下划线为前缀,其后跟英文字母,首单词的首字母为小写,其余单词首字母大写,其余字母均小写,若有数字,则将数字置于最后,比如
int _segmentNumber;
int _segmentNumber2;
8、类中私有成员变量:同上
9、类中保护成员变量:同上
10、类中公有成员函数:仅由英文字母和数字组成,每个单词的首字母均大写,其余字母小写,若有数字,则将数字置于最后,比如
void SetStyleSheet();
void SetStyleSheet2();
11、类中私有成员函数:同上
12、类中保护成员函数:同上
13、类中内联成员函数:同上
14、函数体中定义的变量:首单词首字母小写,其余单词首字母大写,其余字母小写,后缀为下划线,若有数字,则将数字置于后缀之前,比如
int segmentNumber_;
int segmentNumber2_;
15、函数参数变量:值参数-v_+全小写字母加下划线组合_;指针参数(声明时带有*)-p_+全小写字母加下划线组合_;引用参数(声明时带有&)-r_+全小写字母加下划线组合_,比如
void GetAllFormatFiles(string v_path_, vstring &r_files_name_, string v_format_, char *p_mode_, floatp &r_index_);
16、自定义结构体变量:仅由英文字母构成,且英文字母全部大写,比如
typedef struct PointSize {} POINTSIZE;
17、自定义结构体变量中的成员变量:s_全小写英文字母加下划线组合,若有数字,则将数字置于最后,比如
typedef struct PointInfo
{
float s_marker_size;
float s_marker_size2;
float s_x;
float s_y;
float s_z;
int *s_rgb;
int s_rgb2[3];
vstring s_point_note;
} POINTINFO;
18、宏定义基本类型变量:全大写英文字母_全大写英文字母,比如
#define TDP_PSIS 0
#define TDP_CPIS 1.5
#define TDP_PPIS 'c'
#define TDP_DPIS "hello"
19、自定义宏定义类对象:仅由英文字母组成,首单词小写,其余单词首字母大写,其余字母小写,比如
#define vtkSPtr vtkSmartPointer
20、自定义宏定义函数:仅由英文字母组成,首单词小写,其余单词首字母大写,其余字母小写,比如
#define vtkSPtrObj(VarName, Type) vtkSPtr<Type> VarName
#define vtkSPtrNew(VarName, Type) VarName = vtkSPtr<Type>::New()
#define vtkSPtrObjNew(VarName, Type) vtkSPtr<Type> VarName = vtkSPtr<Type>::New()
21、QT控件:父容器控件类名_功能名_自身控件类名,统一只采用小写字母加下划线组合,比如
QWidget *dialog_segment_length_content_widget;
22、VTK对象:vtk为前缀,后接英文字母,每个单词的首字母均大写,其余字母小写,比如
vtkAxesActor vtkSegmentAxes;
23、其他非自定义对象:同上,此时的前缀可根据需要修改
24、宏定义结尾处不加分号
25、自定义基本数据类型结尾处要加分号,比如
typedef unsigned short ushort;
26、包含头文件结尾处不加分号,且包含指令后无空格,比如
#include<iostream>
#include"test.h"
27、若是存在几种情况同时满足,则尽量根据交集最多的原则自行组合