C++命名规则

C++命名规范

\color{red}{常见命名法:}

匈牙利命名法:基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。
Camel命名法:即骆驼式命名法,原因是采用该命名法的名称看起来就像骆驼的驼峰一样高低起伏。
Camel命名法有两种形式:混合使用大小写字母和单词之间加下划线,例如runFast和run_fast都属于Camel命名法。
Pascal命名法:与Camel命名法类似,不过Pascal命名法的首字母为大写字母。

\color{red}{命名通则:}

  • 1、在所有命名中,都应使用标准的英文单词或缩写。不得使用拼音或拼音缩写,除非该名字描述的是中文特有的内容,如半角、全角, 声母、韵母等。
  • 2、所有命名都应遵循望文知义原则,即名称应含义清晰、明确。
  • 3、所有命名都不易过长,应控制在规定的最大长度以内。
  • 4、所有命名都应尽量使用全称。
  • 5、如果命名使用缩写,则应该使用《通用缩写表》(见附录)中的缩写;原则上不推荐使用《通用缩写表》以外的缩写,如果使用,则必须对其进行注释和说明。

\color{red}{具体规范:}

  • 1、工程名:不强制统一。
  • 2、文件名:
    • 基于工程名,开头3个字母应表明与哪一个工程相关。
    • 后面的字母应能够区别不同的功能。
    • 不区分大小写。
    • 长度不限于8.3格式,建议不多于30个字符。
    • 若文件用于定义和实现类,建议文件名与类名保持一致。
  • 3、函数名:
    • 参照 Windows API 的命名规范。
    • 推荐使用动宾结构。函数名应清晰反映函数的功能、用途。
    • 函数名最长不得超过30个字符。
    • 函数名第一个字母必须大写。
    • 全局函数必须以小写前缀"g"开头。
  • 4、变量名:
    • 原则上,变量名的命名遵从匈牙利记法。即:前缀 + 类型 + 变量名
  • 1)格式:
[m_|s_|g_] type [class name|struct name] variable name
  • 2)解释:
    • m_ : 类的成员变量
    • ms_:类的静态成员变量
    • s_ :静态全局变量
    • g_ :普通全局变量
    • 类型缩写(type)
    • char, TCHAR: ch
    • char[],TCHAR[]: sz
    • string: str
    • bool, BOOL: b
    • int, __int16,__int32,__int64: n
    • long: l
    • double: d
    • float: f
    • BYTE: by
    • WORD: w
    • DWORD: dw
    • unsigned: u
    • function: fn
    • p :pointer
    • lp :long pointer

变量名最长不得超过20个字符。

  • 5、类名:
    • 必须以大写"C"开头,后面字母反映具体含义,以清晰表达类的用途和功能为原则。
    • 接口必须以大写"I"开头,代表 Interface 。
    • 当名称由多个单词构成时,每一个单词的第一个字母必须大写。
  • 6、结构体名、宏名、枚举名、联合名:
    • 全部大写。
    • 枚举名加小写前缀"enum"。
      例:
typedef enum _CFILE_OPEN_MODE
{
enumOPEN_READONLY = 0,
enumOPEN_READWRITE = 1,
enumCREATE_ALWAY = 3
 } CFILE_OPEN_MODE;

//·宏名加小写前缀"def"。

例:

#define defMAXNUMBER 100
  • 结构名加小写前缀"tag",之后必须以大写"C"开头。
    例:
typedef struct tagKPOINT
{
int x;
int y;
} KPOINT;

//·联合名加小写前缀"uni"。

例:

typedef union _VARIANT{
char unichVal;
int uninVal;
long unilVal;
float uniftVal;
...
} VARIANT;

\color{red}{C/C++源代码书写规范(试行)}

    1. 在.h/.cpp的开头应有一段格式统一的说明,内容包括:
    • a. 文件名 (FileName);
    • b. 简短说明文件功能、用途 (Comment);
    • c. 创建人 (Creater);
    • d. 文件创建时间 (Date)。

例:

/*!
  *@file
  *@brief
  *@author
  *@date
  */
    1. 除非极其简单,否则对函数应有注释说明。内容包括:功能、入口/出口参数,必要时还可有备注或补充说明。
    1. 每行代码的长度推荐为80列,最长不得超过120列;折行以对齐为准。

例:

HANDLE CSOpenFile(const char cszFileName[],<br>               int nMode);

或者:

BOOL CSReadFile(<br>                HANDLE hFile,<br>               void *pvBuffer,<br>             int nReadSize,<br>              int *pnReadSize<br>             );<br>
    1. 循环、分支代码,判断条件与执行代码不得在同一行上。

例:正确:

if (n == -2)
    n = 1;
else
    n = 2;

不得写做:

if (n == -2) n = 1;
else n = 2;
    1. 指针的定义,* 号既可以紧接类型,也可以在变量名之前。

例:可写做:

int* pnsize;

也可写做:

int *pnsize;

但不得写做:

int * pnsize;
    1. 在类的成员函数内调用非成员函数时,在非成员函数名前必须加上“::”。
    1. 函数入口参数有缺省值时,应注释说明。

例:

BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace /* = TRUE */);

或者:

BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace // = TRUE );
    1. else if 必须写在一行。
    1. 与‘{’、‘}’有关的各项规定:
    • 9.1‘{’、‘}’应独占一行。在该行内可有注释。

例:正确:

for (i = 0; i < cbLine; i++)
{ // .....
    printf("Line %d:", i);
    printf("%s\n", pFileLines);
}
不得写做:

for (i = 0; i < cb; i++)
{printf("Line %d:", i);<br>printf("%s\n", pFileLines);}
    • 9.2‘{’必须另起一行,‘{’之后的代码必须缩进一个Tab。‘{’与‘}’必须在同一列上。

例:正确:

if (i > 0)
{<br>  m = 1;<br>  n++;
}

不得写做:

if (i > 0) {
m = 1;
n++;
}

例外:

if (i == 0)
{ ASSERT(FALSE); return; }
    • 9.3 在循环、分支之后若只有一行代码,虽然可省略‘{’、‘}’,但不推荐这么做。若省略后可能引起歧义,则必须加上‘{’、‘}’。
    1. 与空格有关的各项规定。
    • 10.1 在所有两目、三目运算符的两边都必须有空格。在单目运算符两端不必空格。但在‘->’、‘::’、‘.’、‘[’、‘]’等运算符前后,及‘&’(取地址)、‘*’(取值)等运算符之后不得有空格。

例:正确:

int n = 0, nTemp;
for (int i = nMinLine; i <= nMaxLine; i++)

不得写做:

int n=0, nTemp;
for ( int i=nMinLine; i<=nMaxLine; i++ )
    • 10.2 for、while、if 等关键词之后应有1个空格,再接‘(’,之后无空格;在结尾的‘)’前不得有空格。

例:正确:

if (-2 == n)

不得写做:

if(-2 == n)

if ( -2 == n )
    • 10.3 调用函数、宏时,‘(’、‘)’前后不得有空格。

例:正确:

printf("%d\n", nIndex);

不得写做:

printf ("%d\n", nIndex);

printf( "%d\n", nIndex );
    • 10.4 类型强制转换时,‘(’‘)’前后不得有空格

例:可写做:

(KSFile*)pFile;

也可写做:

(KSFile *)pFile

不得写做:

( KSFile* )pFile

( KSFile * ) pFile
    1. 与缩进有关的各项规定
    • 11.1 缩进以 Tab 为单位。1 个 Tab 为 4 个空格
    • 11.2 下列情况,代码缩进一个 Tab:
        1. 函数体相对函数名及‘{’、‘}’。

例:

int Power(int x)
{
  return (x * x);
}
        1. if、else、for、while、do 等之后的代码。
        1. 一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有 + - * / 等运算符,则运算符应在上一行末尾,而不应在下一行的行首。
    • 11.3 下列情况,不必缩进:switch 之后的 case、default。

例:

switch (nID)
{
case ID_PLAY:
  ......
  break;
case ID_STOP:
  ......
  break;
default:
  ......
  break;
} 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 用Pascal规则来命名属性、方法、事件和类名。 Pascal规则是指名称中单词的首字母大写 ,如Employee...
    木心Sepith阅读 731评论 1 2
  • 1. 用Pascal规则来命名属性、方法、事件和类名 Pascal规则是指名称中单词的首字母大写 ,如Employ...
    Sheh伟伟阅读 24,100评论 6 26
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,744评论 0 10
  • 前言 在初学C++的时候,一定要养成良好的命名习惯才可以让程序的可读性大大提高,这里我整理和收集了一些有用的命名规...
    小黑的守望阅读 1,000评论 0 0
  • 前言 本规范是针对 Go 语言的编码规范,目的是为了统一项目的编码风格,提高源程序的可读性、可靠性和可重用性,从而...
    _张晓龙_阅读 1,964评论 5 21