C++命名建议

如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。

活跃在生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的大量有识先辈们都曾经无数次地以实际行动证明了以上公理的正确性。除了上帝(设它可以改变世间万物的秩序)以外,相信没人有实力对它不屑一顾。

在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性。

在引入细节之前,先说明一下命名规范的整体原则:


同一性


在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个模块中的同一性。


标识符组成


标识符采用英文单词或其组合,应当直观且可以拼读,可望文知意,用词应当准确。


最小化长度 && 最大化信息量原则


在保持一个标识符意思明确的同时,应当尽量缩短其长度。


避免过于相似


不要出现仅靠大小写区分的相似的标识符,例如“i”与“I”,“function”与“Function”等等。


避免在不同级别的作用域中重名


程序中不要出现名字完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但容易使人误解。


正确命名具有互斥意义的标识符


用正确的反义词组命名具有互斥意义的标识符,如:"nMinValue"和"nMaxValue","GetName()" 和 "SetName()" ....


避免名字中出现数字编号


尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。

/结构


除了异常类等个别情况(不希望用户把该类看作一个普通的、正常的类之情况)外,C++类/结构 
的命名应该遵循以下准则:


C++类/结构的命名


类的名称都要以大写字母“C”开头,后跟一个或多个单词。为便于界定,每个单词的首字母要大写。


推荐的组成形式


类的命名推荐用"名词"或"形容词+名词"的形式,例如:"CAnalyzer", "CFastVector" ....

不同于C++类的概念,传统的C结构体只是一种将一组数据捆绑在一起的方式。传统C结构体的命名规则为:


传统C结构体的命名


传统C结构体的名称全部由大写字母组成,单词间使用下划线界定,例如:"SERVICE_STATUS", "DRIVER_INFO" ....

函数


函数的命名


函数的名称由一个或多个单词组成。为便于界定,每个单词的首字母要大写。


推荐的组成形式


函数名应当使用"动词"或者"动词+名词"(动宾词组)的形式。例如:"GetName()", "SetValue()", "Erase()", "Reserve()" ....


保护成员函数


保护成员函数的开头应当加上一个下划线“_”以示区别,例如:"_SetState()" ....


私有成员函数


类似地,私有成员函数的开头应当加上两个下划线“__”,例如:"__DestroyImp()" ....


虚函数


虚函数习惯以“Do”开头,如:"DoRefresh()", "_DoEncryption()" ....


回调和事件处理函数


回调和事件处理函数习惯以单词“On”开头。例如:"_OnTimer()", "OnExit()" ....

变量


变量应该是程序中使用最多的标识符了,变量的命名规范可能是一套C++命名准则中最重要的部分:


变量的命名


变量名由作用域前缀+类型前缀+一个或多个单词组成。为便于界定,每个单词的首字母要大写。

对于某些用途简单明了的局部变量,也可以使用简化的方式,如:i, j, k, x, y, z ....


作用域前缀


作用域前缀标明一个变量的可见范围。作用域可以有如下几种:


前缀


说明



局部变量


m_


类的成员变量(member)


sm_


类的静态成员变量(static member)


s_


静态变量(static)


g_


外部全局变量(global)


sg_


静态全局变量(static global)


gg_


进程间共享的共享数据段全局变量(global global)

除非不得已,否则应该尽可能少使用全局变量。


类型前缀


类型前缀标明一个变量的类型,可以有如下几种:


前缀


说明


n


整型和位域变量(number)


e


枚举型变量(enumeration)


c


字符型变量(char)


b


布尔型变量(bool)


f


浮点型变量(float)


p


指针型变量和迭代子(pointer)


pfn


特别针对指向函数的指针变量和函数对象指针(pointer of function)


g


数组(grid)


i


类的实例(instance)

对于经常用到的类,也可以定义一些专门的前缀,如:std::string和std::wstring类的前缀可以定义为"st",std::vector类的前缀可以定义为"v"等等。

类型前缀可以组合使用,例如"gc"表示字符数组,"ppn"表示指向整型的指针的指针等等。


推荐的组成形式


变量的名字应当使用"名词"或者"形容词+名词"。例如:"nCode", "m_nState","nMaxWidth" ....

常量


C++中引入了对常量的支持,常量的命名规则如下:


常量的命名


常量名由类型前缀+全大写字母组成,单词间通过下划线来界定,如:cDELIMITER, nMAX_BUFFER ....

类型前缀的定义与变量命名规则中的相同。

枚举、联合、typedef


枚举、联合及typedef语句都是定义新类型的简单手段,它们的命名规则为:


枚举、联合、typedef的命名


枚举、联合、typedef语句生成的类型名由全大写字母组成,单词间通过下划线来界定,如:FAR_PROC, ERROR_TYPE ....

宏、枚举值


宏、枚举值的命名


宏和枚举值由全大写字母组成,单词间通过下划线来界定,如:ERROR_UNKNOWN, OP_STOP ....

时间: 2024-08-26 20:11:02

C++命名建议的相关文章

C++ 代码命名建议

核心思想: 完全准确地描述出该变量所代表的事物. 好名字通常是在表达 what, 而不是 how. 变量名在 8 到 15 正好. 如果要加限定词, 那么加在最后. 例如: revenuTotal 或 revenueAverage. 作为标记的变量不该有 “flag” 而应该使用枚举和具名常量.‘ 临时变量也别叫 “tmp” 而应该体现它的用途. 布尔变量最有用的几个分别是: done, error, found, success 或 ok.如: sourceFile 换成 sourcFileF

小酌重构系列[18]——重命名

概述 代码是从命名开始的,我们给类.方法.变量和参数命名,我们也给解决方案.工程.目录命名.在编码时,除了应该遵守编程语言本身的命名规范外,我们应该提供好的命名.好的命名意味着良好的可读性,读你代码的人无需太多的注释,就能通过名称知道它是什么,它能做什么事儿,以及它应该怎么用. 我们命名.命名,不断地命名.既然有这么多命名要做,我们不妨做好他. 关于命名 取名字的成本 取个名字很简单,取个好的名字就不那么容易了.快速随意地取个名字,还不如花点时间取个好名字,因为好名字省下来的时间要比花掉的多.

C#命名规则和风格(收集)

1.     文件命名组织 1-1文件命名 1.        文件名遵从Pascal命名法,无特殊情况,扩展名小写. 2.        使用统一而又通用的文件扩展名: C# 类 .cs 1-2文件注释 1.         在每个文件头必须包含以下注释说明 1 在每个文件头必须包含以下注释说明 /*---------------------------------------------------------------- // Copyright (C) 2004 软件有限公司 // 版

C++函数命名规则

转自:http://blog.csdn.net/rocksword/article/details/10104533 1.严格采用阶梯层次组织程序代码:        各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行.要求相匹配的大括号在同一列,对继行则要求再缩进4格.例如:        2.提示信息字符串的位置        在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中.        3.对变量

数据库设计:表的设计命名的十个注意点

原文链接:http://www.cnblogs.com/netsql/archive/2010/05/04/1727323.html 1.表名一般以[模块名称_具体表名]来实现,同一个模块的前缀是一样的.(Oracle大小写敏感,在SQL中可以不用"_",因为可以用大小写一起的写法.这也是可以的) 2.表名称不应该取得太长(一般不超过三个英文单词,不推荐使用中文拼音,总的长度不要超过30个字符).表名使用英文的原因,有些项目有英文版的需要,或者这个项目是给外国做的时候,使用英文是基本的

Delphi编程建议遵守的规范2---命名规范

1.1.形参命名建议 所有形参的名称都应当表达出它的用途.如果合适的话,形参的名称最好以字母a 为前缀,例如: procedure SomeProc(aUserName:string; aUserAge:integer);   当参数名与类的特性或字段同名时,前缀a 就有必要了 1.2.命名冲突 当两个单元中含有相同名称的过程时,如果调用该过程,实际被调用的是Uses 子句中较后出现的那个单元中的过程.为避免这种情况,可在方法名前加想要的单元名 SysUtils.FindClose(SR); 或

JavaScript命名规范基础及系统注意事项

前端代码中的自定义变量命名           命名方法:     1.驼峰 2.下划线连接           对于文件名,我们一般采用小写字母+下划线的形式     为什么?因为在window下aa.txt和AA.txt系统认为是同一个的文件,而在linux环境下则认为是2个不同的文件,为了使我们代码移植性更好以及为了避免一些不必要的麻烦建议文件名必须小写:           对于js又有以下一些规则:     A:普通变量名     1.以变量首字母突出这个变量的类型(我叫她首字母标记类

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

如何写出优雅的CSS代码 ?(转)

对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队合作和后期的维护:而有的混乱,虽然表达出了最终的效果,然而却晦涩难懂,显然团队成员在读这样的代码时就显得无从下手,更不利于后期的维护了.那么如何写出优雅的代码呢?下面我将以一个很小的项目就以下几个方面简单的表达一下自己的看法,如有不妥,望批评指正. 如何整理一个项目. 如何写出清晰易懂的HTML代码. 如何写出优雅的css代