良好的编码习惯是一种素养的象征,也一定程度决定了代码的质量和可维护性。有的设计师不注重平时编码习惯,比如命名不讲规则,天马行空,一会大写、一会小写,一会中文拼音,一会下划线等,时间一长,自己写的代码自己都看不懂了。
今日再次学习了关于软件编码常见的4种命名规则。
1.匈牙利命名法
匈牙利命名法广泛应用于微软 Windows 这类环境中,这种命名技术是由微软早期的一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。
匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域、类型等。
这些符号可以多个同时使用,顺序是先m_(成 员变 量),再指针,再简单数据类型,再其他。
例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。
匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀,前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
例如:bEnable, nLength, hWnd。
以下是关于匈牙利命名法中常用的小写字母的前缀。
属性部分: | 类型部分: | 描述部分: |
g_ 全局变量 | 数组 a | 最大 Max |
c_ 常量 | 指针 p | 最小 Min |
m_ c++类成员变量 | 函数 fn | 初始化 Init |
s_ 静态变量 | 无效 v | 临时变量 T(或Temp) |
| 句柄 h | 源对象 Src |
| 长整型 l | 目的对象 Dest |
| 布尔 b |
|
| 浮点型(有时也指文件) f |
|
| 双字 dw |
|
| 字符串 sz |
|
| 短整型 n |
|
| 双精度浮点 d |
|
| 计数 c(通常用cnt) |
|
| 字符 ch(通常用c) |
|
| 整型 i(通常用n) |
|
| 字节 by |
|
| 字 w |
|
| 实型 r |
|
| 无符号 u |
|
2. 下划线命名法
下划线法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。
2.1.函数的命名
函数名使用下划线分割小写字母的方式命名:
设备名_操作名();
操作名一般采用:谓语(此时设备名作为宾语或者标明操作所属的模块)或者谓语 宾语/表语(此时设备名作为主语或者标明操作所属的模块) 等形式,如:
tic_init();
adc_is_busy();
uart_tx_char();
中断函数的命名直接使用 设备名_isr() 的形式命名,如:
timer2_isr();
2.2.变量的命名
变量的命名也采用下划线分割小写字母的方式命名。命名应当准确,不引起歧义,且长度适中。如:
int length;
uint32 test_offset;
单字符的名字也是常用的,如i, j, k等,它们通常可用作函数内的局部变量。tmp常用做临时变量名。
局部静态变量,应加s_词冠(表示static),如:
static int s_lastw;
全局变量(尤其是供外部访问的全局变量),应加g_词冠(表示global),如:
void (* g_capture_hook)(void);
2.3.常量及宏的命名
采用下划线分割大写字母的方式命名,一般应以设备名作为前缀,防止模块间命名的重复。如:
#define TIMER0_MODE_RELOAD 2
#define TIMER2_COUNT_RETRIEVE(val) ((uint16)(65536 - (val)))
当然,看作接口的宏可以按照函数的命名方法命名,例如:
#define timer2_clear() (TF2 = 0)
#define timer0_is_expired() (TF0)
3.驼峰命名法
驼峰命名法近年来越来越流行,驼峰命名法,正如它的名称所表示的那样,指的是混合使用大小写字母来构成标识符的名字。其中第一个单词首字母小写,余下的单词首字母大写。
例如:
printEmployeePaychecks();
函数名中每一个逻辑断点都有一个大写字母来标记。
4.帕斯卡命名法
帕斯卡命名法与驼峰命名法类似,只不过驼峰命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。因此这种命名法也有人称之为“大驼峰命名法”。
例如:
DisplayInfo();
UserName
都是采用了帕斯卡命名法。事实上,很多程序设计者在实际命名时会将驼峰命名法和帕斯卡结合使用,例如变量名采用驼峰命名法,而函数采用帕斯卡命名法。