C++命名规范(v1.0)
文章目录
规范参考
Google 开源项目风格指南 (中文版)
https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/naming/#id3
个人博客:
https://blog.csdn.net/weixin_33991418/article/details/93774217
常用命名法
驼峰命名法
指混合使用大小写字母来构成变量和函数的名字。当变量名或函数名是由一个或多个单词连结在一起构成的唯一识别字时**,第一个单词以小写字母开始,从第二个单**词开始以后的每个单词**的首字母都采用大写字母,**例如:myName、myAge,这样的变量名看上去就像骆驼峰一样此起彼伏,因此被称为驼峰命名法。
int treeBase;
int elemNum;
int treeSize;
帕斯卡(Pascal)命名法
也叫大驼峰法,与驼峰命名法类似,不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写。
int TreeBase;
int ElemNum;
int TreeSize;
匈牙利命名法
匈牙利命名法是由一位能干的 Microsoft 程序员查尔斯- 西蒙尼(Charles Simonyi) 提出的。它通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等这些符号可以多个同时使用,基本原则是:变量名=属性+类型+对象描述。
匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
int iTreeBase;
int iElemNum;
int iTreeSize;
下划线命名法
与驼峰命名法相似,通过一种方式将不同单词区分开,方便读懂变量含义。与驼峰命名法不同的是,驼峰命名法采用的是首字母大写区分,下划线命名法是在不同单词之间添加下划线。
int tree_base;
int elem_num;
int tree_size;
通用命名规则
总述
函数命名, 变量命名, 文件命名要有描述性; 少用缩写.
说明
尽可能使用描述性的命名, 别心疼空间, 毕竟相比之下让代码易于新读者理解更重要. 不要用只有项目开发者能理解的缩写, 也不要通过砍掉几个字母来缩写单词.
文件命名
文件名要全部小写, 可以包含下划线 (_
) 或连字符 (-
), 依照项目的约定. 如果没有约定, 那么 “_
” 更好.
通常应尽量让文件名更加明确
myusefulclass.h
myusefulclass.cpp
函数命名
总述
常规函数使用大小写混合, 取值和设值函数则要求与变量名匹配: MyExcitingFunction()
, MyExcitingMethod()
说明
一般来说, 函数名的每个单词首字母大写 (即 “驼峰变量名” 或 “帕斯卡变量名”), 没有下划线. 对于首字母缩写的单词, 更倾向于将它们视作一个单词进行首字母大写 (例如, 写作 StartRpc()
而非 StartRPC()
).
int InitQueue(LinkQueue &LQ) ;
int EnQueue(LinkQueue &LQ, int e);
int DeQueue(LinkQueue &LQ, int &e);
类与对象
总述
类型名称的每个单词首字母均大写, 不包含下划线: MyExcitingClass
, MyExcitingEnum
.
说明
所有类型命名 —— 类, 结构体, 类型定义 (typedef
) 类型模板参数 —— 均使用相同约定, 即以大写字母开始, 每个单词首字母均大写, 不包含下划线. 例如:
// 类和结构体
class UrlTable { ...
class UrlTableTester { ...
struct TUrlTableProperties { ...
// 类型定义
typedef hash_map<TUrlTableProperties *, string> PropertiesMap;
结构体
- 定义结构体,保证C和C++兼容,采用typedef语句,并且以T开头。
typedef struct TStudent
{
int iId;
string strName;
};
struct TStudent
{
int iId;
string StrName;
};
枚举
enum ErrorCode {
ErrorCode_1001 = -1001,
ErrorCode_1002 = -1002,
ErrorCode_1003 = -1003,
ErrorCode_1004 = -1004,
ErrorCode_1005 = -1005
};
全局变量
- 全局变量一律以g_开头,后面为变量,变量同时还要加前缀。
extern int g_testValue;
使用static关键字
static int testValue;
宏和常量
- 常量、宏定义一般都是所有字母大写,特别是宏定义,在不同字母之间,可以加上下划线,也可以不加。
#define OK 1
#define ERROR 0
#define OVERFLOW -1
const int FACEMAXCOUNT = 3;
- 或者,声明为
constexpr
或const
的变量, 或在程序运行期间其值始终保持不变的, 命名时以 “k” 开头, 大小写混合
const int kFaceMaxCount = 3;
变量命名规则
-
用最短字符表示最准确的意义。
-
使用变量前缀。
-
一般采用匈牙利命名法:变量名=属性+类型+对象描述。
-
变量由多个单词组成,则每个单词的首个字母大写。
-
变量带了前缀则:前缀+首字母大写
int iTestValue; //int前缀:i
- 变量带了下划线:_+首字母小写
int g_testValue; //全局前缀:g
- 变量无前缀无下划线
int testValue; //驼峰命名
普通变量命名
string table_name; // 好 - 用下划线.
string tablename; // 好 - 全小写.
string tableName; // 差 - 混合大小写
类数据成员
不管是静态的还是非静态的, 类数据成员都可以和普通变量一样, 但要接下划线.
class TableInfo {
...
private:
string table_name_; // 好 - 后加下划线.
string tablename_; // 好.
static Pool<TableInfo>* pool_; // 好.
};
结构体变量
不管是静态的还是非静态的, 结构体数据成员都可以和普通变量一样, 不用像类那样接下划线但是要加T
struct TUrlTableProperties {
string name;
int num_entries;
static Pool<TUrlTableProperties>* pool;
};
整型前缀
int iStudentID; //int前缀:i
short sStudentID; //short前缀:s
unsigned int unStudentID // unsigned int 前缀:un
long lStudentID; //long前缀:l
浮点型前缀
float fValue; //float前缀:f
double dValue; //double前缀:d
字符型前缀
char chChar; //char前缀:ch
字符串前缀
string strPath; //string字符串前缀:str
QString strPath; //Qt QString类前缀:str
布尔型前缀
bool bIsOK; //bool类型前缀:b
指针型前缀
char * pPath; //指针前缀:p
数组前缀
int arrnNum; //数组前缀:arr
字节的前缀
BYTE byIP; //字节前缀:by
句柄前缀
HWND hWndDlg; //h