人们交流靠各种语言,每行都有每行的所谓的“行话”。程序员也不例外,众所周知,程序员都是用代码进行交流的。那么除了在代码中的注释之外,
程序员如何读懂别人的程序呢?
当然,程序员之间也有所谓的“潜规则”。大家都把代码中的变量、函数和类等等用目前常用的匈牙利命名、驼峰式、帕斯卡命名法来进行命名。

一、匈牙利命名法(Hungarian)
匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变量), 再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。

匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
匈牙利命名法中常用的小写字母的前缀:

前缀              类型a              数组 (Array)b              布尔值 (Boolean)by             字节 (Byte)c              有符号字符 (Char)cb             无符号字符 (Char Byte,没有多少人用)cr             颜色参考值 (ColorRef)cx,cy          坐标差(长度 ShortInt)dw             Double Wordfn             函数h              Handle(句柄)i              整型l              长整型 (Long Int)lp             Long Pointerm_             类的成员n              短整型 (Short Int)np             Near Pointerp              Pointers              字符串型sz             以null做结尾的字符串型 (String with Zero End)w              Word

二、驼峰命名法(Camel)
驼峰式命名法就是当变量名或函式名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像驼峰峰一样此起彼伏,故得名。
驼峰式命名法(Camel-Case)一词来自 Perl 语言中普遍使用的大小写混合格式,而 Larry Wall 等人所著的畅销书《Programming Perl》(O’Reilly 出版)的封面图片正是一匹骆驼。
驼峰式命名法的命名规则可视为一种惯例,并无绝对与强制,为的是增加识别和可读性。
小驼峰法
变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。譬如
int myStudentCount;
变量myStudentCount第一个单词是全部小写,后面的单词首字母大写。
大驼峰法
相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。常用于类名,函数名,属性,命名空间。譬如
public class DataBaseUser;

三、 帕斯卡命名法(Pascal)
帕斯卡命名法其实就是目前说的大驼峰命名法,常用于类名,函数名,属性,命名空间。
string UserName;

三种命名规则的小结:
MyData 就是一个帕斯卡命名的示例
而myData是一个骆驼命名法,它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼
而iMyData是一个匈牙利命名法,它的小写的i说明了它的型态,后面的和帕斯卡命名相同,指示了该变量的用途。

命名的基本原则
(1) 标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解——尽量采用采用英文单词或全部中文全拼表示,若出现英文单词和中文混合定义时,使用连字符“_”将英文与中文割开。较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。例如:temp->tmp、flag->标志寄存器、statistic->stat、increment->inc、message->msg等缩写能够被大家基本认可。
(2) 命名中若使用特殊约定或缩写,则要有注释说明。应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明。
(3) 自己特有的命名风格,要自始至终保持一致,不可来回变化。个人的命名风格,在符合所在项目组或产品组的命名规则的前提下,才可使用。(即命名规则中没有规定到的地方才可有个人命名风格)。
(4) 对于变量命名,禁止取单个字符(如i 、j 、k… ),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i 、j 、k 作局部循环变量是允许的。变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。
(5) 除非必要,不要用数字或较奇怪的字符来定义标识符。
(6) 命名规范必须与所使用的系统风格保持一致,并在同一项目中统一。
(7) 在同一软件产品内,应规划好接口部分标识符(变量、结构、函数及常量)的命名,防止编译、链接时产生冲突。对接口部分的标识符应该有更严格限制,防止冲突。如可规定接口部分的变量与常量之前加上“模块”标识等。
(8) 用正确的反义词组命名具有互斥意义的变量或相**作的函数等。

下面是一些在软件中常用的反义词组。

add / remove begin / end create / destroy
insert / delete first / last g et / release
increment / decrement put / get
add / delete lock / unlock open / close
min / max old / new start / stop
next / previous source / target show / hide
send / receive source / destination
cut / paste up / down
示例:
intmin_sum;
intmax_sum;
intadd_user( BYTE *user_name );
intdelete_user( BYTE *user_name );

(9) 除了编译开关/ 头文件等特殊应用,应避免使用_EXAMPLE_TEST_ 之类以下划线开始和结尾的定义。

变量名的命名规则
(1) 变量的命名规则要求用“匈牙利法则”。
即开头字母用变量的类型,其余部分用变量的英文意思、英文的缩写、中文全拼或中文全拼的缩写,要求单词的第一个字母应大写。
即: 变量名=变量类型+变量的英文意思(或英文缩写、中文全拼、中文全拼缩写)
对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。
见下表:

bool 用b开头 b标志寄存器
int 用i开头 iCount
short int 用n开头 nStepCount
long int 用l开头 lSum
char用c开头 cCount
unsigned char 用by开头
float 用f开头 fAvg
double 用d开头 dDeta
unsigned int(WORD) 用w开头 wCount
unsigned long int(DWORD) 用dw开头 dwBroad
字符串 用s开头 sFileName
用0结尾的字符串 用sz开头 szFileName

(2)指针变量命名的基本原则为:
对一重指针变量的基本原则为:“p”+变量类型前缀+命名,如一个float*型应该表示为pfStat。对二重指针变量的基本规则为:“pp”+变量类型前缀+命名。对三重指针变量的基本规则为:“ppp”+变量类型前缀+命名。
(3)全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount。即:变量名=g_+变量类型+变量的英文意思(或缩写)。此规则还可避免局部变量和全局变量同名而引起的问题。
(4) 静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst。即: 变量名=s_+变量类型+变量的英文意思(或缩写)
(5) 对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。

enum cmEMDAYS
{EMDAYS_MONDAY;
EMDAYS_TUESDAY;
……
};

(6) 对struct、union变量的命名要求定义的类型用大写。并要加上前缀,其内部变量的命名规则与变量命名规则一致。
结构一般用S开头,如:

struct ScmNPoint
{int nX;//点的X位置
int nY; //点的Y位置
};

联合体一般用U开头,如:

union UcmLPoint
{LONG lX;
LONG lY;
}

(7) 对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思。当需要由多个单词表示时,单词与单词之间必须采用连字符“_”连接。
如:#define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 其中CM表示类别。

(8) 对const 的变量要求在变量的命名规则前加入c_。即:c_+变量命名规则;示例:const char* c_szFileName;

函数的命名规范
(1)函数的命名应该尽量用英文(或英文缩写、中文全拼、中文全拼缩写)表达出函数完成的功能——函数名应准确描述函数的功能。遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母。函数名首字大写,若包含有两个单词的每个单词首字母大写。如果是OOP 方法,可以只有动词(名词是对象本身)。示例:

LONG GetDeviceCount(……);
void print_record( unsigned int rec_ind ) ;
intinput_record( void ) ;
unsigned char get_current_color( void ) ;

(2)避免使用无意义或含义不清的动词为函数命名。如使用process、handle等为函数命名,因为这些动词并没有说明要具体做什么。

(3)必须使用函数原型声明。函数原型声明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名;内部函数,只要注释其定义文件名——和调用者在同一文件中(简单程序)时不需要注释。
应确保每个函数声明中的参数的名称、类型和定义中的名称、类型一致。

函数参数命名规范
(1) 参数名称的命名参照变量命名规范。
(2) 为了提高程序的运行效率,减少参数占用的堆栈,传递大结构的参数,一律采用指针或引用方式传递。
(3) 为了便于其他程序员识别某个指针参数是入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志。

如:……cmCopyString(const CHAR * c_szSource, CHAR * szDest)
文件名(包括动态库、组件、控件、工程文件等)的命名规范文件名的命名要求表达出文件的内容,要求文件名的长度不得少于5个字母,严禁使用象file1,myfile之类的文件名。

四种编程命名规则:驼峰命名法,帕斯卡命名法,匈牙利命名法,下划线命名法相关推荐

  1. mfc编程淘汰了吗_四种基本的编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法、下划线命名法)...

    匈牙利命名法 匈牙利命名法是早期的规范,由微软的一个匈牙利人发明的,是 IDE 还十分智障的年代的产物.那个年代,当代码量很多的时候,想要确定一个变量的类型是很麻烦的,不像现在 IDE 都会给提示,所 ...

  2. 四种常用的命名规则:帕斯卡命名法、驼峰命名法、下划线命名法、匈牙利命名法

    帕斯卡命名法.驼峰命名法.下划线命名法.匈牙利命名法 其中前三种用的比较多. 1,帕斯卡命名法(Pascal) 程序代码示例: ShowMessage(); string PassWord; 单字之间 ...

  3. 【日常学习】命名规则 - 驼峰命名法、帕斯卡命名法、匈牙利命名法、下划线命名法

    变量如果随便起名字,不仅其他工作人员难以交接,自己看着也非常混乱,如果按照命名规则进行管理,代码可读性会大大提升 文章参考博客:局外人Lee - 三种编程规则:驼峰命名法.帕斯卡命名法.匈牙利名 f- ...

  4. 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)之间的转换

    因为数据库表的字段名通常是用下划线命名法,但前端通常传的是驼峰命名法的字符串,我要将其转化为下划线命名法的字符串去数据库表中进行查询. 例: select * from use where user_ ...

  5. 驼峰式与下划线命名规则

    在实际代码开发过程中,代码编写格式清晰与否不仅决定了自己的代码编写与维护成本,也直接影响到项目的开发进度.编码中常用的有驼峰法和下划线两种编码格式,其中驼峰法常用在面向对象的高层语言中,下划线方法常用 ...

  6. 下划线命名法 vs 驼峰命名法

    对于历史悠久的下划线命名法(my_variable)和驼峰命名法(myVariable)我们认为选择哪种并不重要,只要你坚持在项目中贯彻它. 在本书中,我们将采用驼峰命名法,因为它是 JavaScri ...

  7. 程序变量命名法:匈牙利命名、驼峰式、帕斯卡命名法

    转自 http://blog.csdn.net/halazi100/article/details/41545393 一.匈牙利命名法:广泛应用于象Microsoft Windows这样的环境中.   ...

  8. 帕斯卡命名法、驼峰命名法、下划线命名法

    帕斯卡命名法.驼峰命名法.下划线命名法.匈牙利命名法 其中前三种用的比较多. 帕斯卡命名法(Pascal) 程序代码示例: ShowMessage(); string PassWord; 单字之间不以 ...

  9. 【Python】标识符 ( Python 标识符命名规则 - 强制性 | 内容限定 | 大小写敏感 | 非关键字 | Python 标识符命名规范 - 建议性 | 下划线命名法 | 英文字母全小写 )

    文章目录 一.Python 标识符 1.Python 标识符命名规则 ( 强制性 ) 2.Python 标识符命名规范 ( 建议性 ) 二.代码示例 1.内容限定代码示例 2.大小写敏感 3.非关键字 ...

最新文章

  1. 2020 ACM Fellows 名单出炉,13 名华人入选,7 名来自国内!
  2. Linux平台下的内存泄漏检测
  3. 【GDAL】GDAL栅格数据结构学习笔记(一): 关于Metadata
  4. android 删除路径文件内容,Android 删除已知路径的文件或文件夹
  5. 小程序 自定义组件报错[“usingComponents“][“my-list“] 未找到
  6. java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...
  7. 关于python中自己写的模块之前相互调用函数
  8. 陪同学面试,我竟然被录取了
  9. 站长工具:天和流量王绿色版 下载
  10. 金额大小写转换(2)
  11. ubuntu 时区 修改时间 保存 重启 变化等
  12. js引用类型和基本类型、隐式类型转换以及强制类型转换面试题
  13. 快速解决NVivo节点慢的问题!
  14. 2021年智慧校园APP全新上线
  15. Android 解决华为手机图片底色变绿问题
  16. 欧式二元期权的定价公式及实现
  17. Java文件操作——简单文件搜索优化版本Lambda优化
  18. matlab figure 虚线圆,flutter 画圆,虚线圆,渐变圆
  19. mysql存储表情字符_MySQL 存储表情字符
  20. MySQL 检索昵称字段合法中文/日文字符对于 5.7/5.6 版本失败的解决方案

热门文章

  1. 江苏计算机对口单招本科学校,江苏对口单招本科学校
  2. MyBatis面试题1
  3. pandas之dropna()的用法
  4. 认证学习4 - Bearer认证(Token认证)讲解、代码实现、演示
  5. PHP读取word文档的方法分析
  6. android自带中文字体,Android中的默认字体系列是什么?
  7. MySQL表中的联合查询
  8. 阿里云智能 AIoT 首席科学家丁险峰:阿里全面进军 IoT 这一年 | 问底中国 IT 技术演进...
  9. CSS display(显示)详解 与 visibility(可见性)详解[第七天]
  10. qt网络编程及readyread信号