3. 标识符命名

标识符命名应遵循以下原则:

  1. 标识符的命名要清晰明了,可以使用完整的单词和大家易于理解的缩写。短的单词可以通过去元音形成缩写,较长的单词可以取单词的头几个字母形成缩写,也可以采用大家基本认同的缩写。例如count写成cnt,block写成blk,length写成len,window写成win,message写成msg,temporary可以写成temp,也可以进一步写成tmp。

  2. 内核风格规定变量、函数和类型采用全小写加下划线的方式命名,常量(宏定义和枚举常量)采用全大写加下划线的方式命名。上面举例的函数名radix_tree_insert、类型名struct radix_tree_root、常量名RADIX_TREE_MAP_SHIFT等。有一种变量命名风格叫匈牙利命名法(Hungarian notation),用变量名的前缀记录变量的类型,例如iCnt、pMsg、lpszBlk等,Linus在[CodingStyle]中毫不客气地讽刺了微软发明的这一风格:“Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs.”代码风格本来就是一个很有争议的问题,如果你接受本章介绍的内核风格(也是本书所有范例代码的风格),就不要使用大小写混合的变量命名方式[17],更不要使用匈牙利命名法。

  3. 全局变量和全局函数的命名一定要详细,不惜多用几个单词多写几个下划线,例如函数名radix_tree_insert,因为它们在整个项目的许多源文件中都会用到,必须让使用者明确这个变量或函数是干什么用的。局部变量和只在一个源文件中调用的内部函数的命名可以简略一些,但不能太短,不要使用单个字母做变量名,只有一个例外:用i、j、k做循环变量是可以的。

  4. 针对中国程序员的一条特别规定:禁止用汉语拼音作为标识符名称,可读性极差。



[17] 大小写混合的命名方式是Modern C++风格所提倡的,在C++代码中很普遍,称为CamelCase),大概是因为有高有低像驼峰一样。