標識符命名應遵循以下原則:
標識符命名要清晰明了,可以使用完整的單詞和易於理解的縮寫。短的單詞可以通過去元音形成縮寫,較長的單詞可以取單詞的頭幾個字母形成縮寫。看別人的代碼看多了就可以總結出一些縮寫慣例,例如count
寫成cnt
,block
寫成blk
,length
寫成len
,window
寫成win
,message
寫成msg
,number
寫成nr
,temporary
可以寫成temp
,也可以進一步寫成tmp
,最有意思的是internationalization
寫成i18n
,詞根trans
經常縮寫成x
,例如transmit
寫成xmt
。我就不多舉例了,請讀者在看代碼時自己注意總結和積累。
內核編碼風格規定變數、函數和類型採用全小寫加下劃線的方式命名,常量(比如宏定義和枚舉常量)採用全大寫加下劃線的方式命名,比如上一節舉例的函數名radix_tree_insert
、類型名struct radix_tree_root
、常量名RADIX_TREE_MAP_SHIFT
等。
微軟髮明了一種變數命名法叫匈牙利命名法(Hungarian notation),在變數名中用首碼表示類型,例如iCnt
(i表示int)、pMsg
(p表示pointer)、lpszText
(lpsz表示long pointer to a zero-ended string)等。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.”代碼風格本來就是一個很有爭議的問題,如果你接受本章介紹的內核編碼風格(也是本書所有範例代碼的風格),就不要使用大小寫混合的變數命名方式[19],更不要使用匈牙利命名法。
全局變數和全局函數的命名一定要詳細,不惜多用幾個單詞多寫幾個下劃線,例如函數名radix_tree_insert
,因為它們在整個項目的許多源檔案中都會用到,必須讓使用者明確這個變數或函數是幹什麼用的。局部變數和只在一個源檔案中調用的內部函數的命名可以簡略一些,但不能太短。儘量不要使用單個字母做變數名,只有一個例外:用i
、j
、k
做循環變數是可以的。
針對中國程序員的一條特別規定:禁止用漢語拼音做標識符,可讀性極差。