一個好的代碼規範直接影響代碼的質量,今天給大家分享的內容如標題所示:C/C++命名規範。
命名約定
最重要的一致性規則是命名管理, 命名的風格能讓我們在不需要去查找類型聲明的條件下快速地瞭解某個名字代表的含義: 類型、變量、 函數、 常量、宏等。甚至,我們大腦中的模式匹配引擎非常依賴這些命名規則。
命名規則具有一定隨意性, 但相比按個人喜好命名, 一致性更重要, 所以無論你認爲它們是否重要, 規則總歸是規則。
一、通用命名規則
1.總述
函數命名, 變量命名, 文件命名要有描述性; 少用縮寫。
2.說明
儘可能使用描述性的命名, 別心疼空間, 畢竟相比之下讓代碼易於新讀者理解更重要. 不要用只有項目開發者能理解的縮寫, 也不要通過砍掉幾個字母來縮寫單詞。
比如:
注意, 一些特定的廣爲人知的縮寫是允許的, 例如用 i 表示迭代變量和用 T 表示模板參數。
模板參數的命名應當遵循對應的分類: 類型模板參數應當遵循類型命名的規則, 而非類型模板應當遵循變量命名的規則。
二、文件命名
1.總述
文件名儘量全部小寫, 可以包含下劃線 (_) 或連字符 (-), 依照項目的約定. 如果沒有約定, 那麼 “_” 更好。
2.說明
通常應儘量讓文件名更加明確,bsp_i2c.h 就比 i2c.h 要好。
同時,源文件和頭文件最好成對出現,比如bsp_i2c.c 和bsp_i2c.h 。
定義的方式有很多中,比如通過下劃線或連字符:
bsp_i2c.c
bsp-i2c.c
bspi2c.c
三、類型命名
1.總述
類型名稱的每個單詞首字母均大寫, 不包含下劃線: MyExcitingClass, MyExcitingEnum.
2.說明
所有類型命名 —— 類, 結構體, 類型定義 (typedef), 枚舉, 類型模板參數 —— 均使用相同約定, 即以大寫字母開始, 每個單詞首字母均大寫, 不包含下劃線。
例如:
四、變量命名
1.總述
變量 (包括函數參數) 和數據成員名一律小寫, 單詞之間用下劃線連接. 類的成員變量以下劃線結尾, 但結構體的就不用, 如: a_local_variable, a_struct_data_member, a_class_data_member_.
2.說明
普通變量命名
舉例:
類數據成員
不管是靜態的還是非靜態的, 類數據成員都可以和普通變量一樣, 但要接下劃線。
結構體變量
不管是靜態的還是非靜態的, 結構體數據成員都可以和普通變量一樣, 不用像類那樣接下劃線:
五、常量命名
1.總述
聲明爲 constexpr 或 const 的變量, 或在程序運行期間其值始終保持不變的, 命名時以 “k” 開頭, 大小寫混合。
例如:
const int kDaysInAWeek = 7;
2.說明
所有具有靜態存儲類型的變量 (例如靜態變量或全局變量, 參見 存儲類型) 都應當以此方式命名. 對於其他存儲類型的變量, 如自動變量等, 這條規則是可選的. 如果不採用這條規則, 就按照一般的變量命名規則。
六、函數命名
1.總述
常規函數使用大小寫混合, 取值和設值函數則要求與變量名匹配: MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable()。
2.說明
一般來說, 函數名的每個單詞首字母大寫 (即 “駝峯變量名” 或 “帕斯卡變量名”), 沒有下劃線. 對於首字母縮寫的單詞, 更傾向於將它們視作一個單詞進行首字母大寫 (例如, 寫作 StartRpc() 而非 StartRPC())。
(同樣的命名規則同時適用於類作用域與命名空間作用域的常量, 因爲它們是作爲 API 的一部分暴露對外的, 因此應當讓它們看起來像是一個函數, 因爲在這時, 它們實際上是一個對象而非函數的這一事實對外不過是一個無關緊要的實現細節)
取值和設值函數的命名與變量一致. 一般來說它們的名稱與實際的成員變量對應, 但並不強制要求. 例如 int count() 與 void set_count(int count)。
七、枚舉命名
1.總述
枚舉的命名應當和 常量 或 宏 一致: kEnumName 或是 ENUM_NAME.
2.說明
單獨的枚舉值應該優先採用 常量 的命名方式. 但 宏 方式的命名也可以接受. 枚舉名 UrlTableErrors (以及 AlternateUrlTableErrors) 是類型, 所以要用大小寫混合的方式。
八、命名
1.總述
你並不打算 使用宏, 對吧? 如果你一定要用, 像這樣命名: MY_MACRO_THAT_SCARES_SMALL_CHILDREN.
2.說明
參考 預處理宏; 通常 不應該 使用宏. 如果不得不用, 其命名像枚舉命名一樣全部大寫, 使用下劃線:
#define ROUND(x) ...
#define PI_ROUNDED 3.0
九、代碼命名“神奇”
最後,推薦一個代碼命名“神奇”,可能很多人都知道了,就是Code if。
如果你想跟着小編一起學編程的話!
可以來我的C語言/C++編程學習交流俱樂部,【點擊進入】!
還有(源碼,零基礎教程,項目實戰教學視頻),歡迎初學者和正在進階中的小夥伴們!