Google C++Style Guide【C++程式設計風格指南解讀】——命名約定
命名規則具有一定隨意性, 但相比按個人喜好命名, 一致性更重要, 所以不管你怎麼想, 規則總歸是規則.
1:函式命名,變數命名,檔案命名要有描述性;少用縮寫。
解讀:儘可能給有描述性的命名,別心疼空間,畢竟讓程式碼易於新讀者理解很重要。不要用只有專案開發者能理解的縮寫,也不要通過砍掉幾個字母來縮寫單詞。
int price_count_reader; // 無縮寫 int num_errors; // “num” 本來就很常見 int num_dns_connections; // 人人都知道 “DNS” 是啥
2:檔名要全部小寫, 可以包含下劃線 (_) 或連字元 (-). 按專案約定來. 如果並沒有專案約定,”_” 更好。
解讀:通常應儘量讓檔名更加明確
* my_useful_class.cc
* my-useful-class.cc
* myusefulclass.cc
3:型別名稱的每個單詞首字母均大寫, 不包含下劃線: MyExcitingClass, MyExcitingEnum.
解讀:型別包含類、列舉、結構體等等....
// classes and structs class UrlTable { ... class UrlTableTester { ... struct UrlTableProperties { ... // typedefs typedef hash_map<UrlTableProperties *, string> PropertiesMap; // enums enum UrlTableErrors { ...
4:變數名一律小寫, 單詞之間用下劃線連線. 類的成員變數以下劃線結尾, 但結構體的就不用,如:: a_local_variable, a_struct_data_member, a_class_data_member_.
解讀:注意類的成員變數以下劃線結尾,對全域性變數沒有特別要求, 少用就好, 但如果你要用, 可以用 g_ 或其它標誌作為字首, 以便更好的區分區域性變數.
5:在全域性或類裡的常量名稱前加 k: kDaysInAWeek. 且除去開頭的 k 之外每個單詞開頭字母均大寫。
解讀:所有編譯時常量, 無論是區域性的, 全域性的還是類中的, 和其他變數稍微區別一下. k 後接大寫字母開頭的單詞:
const int kDaysInAWeek = 7;
6:常規函式使用大小寫混合, 取值和設值函式則要求與變數名匹配: MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable().
解讀:注意的就是:類的私有變數的取值和設值函式需要與變數名匹配
class MyClass {
public:
...
int num_entries() const { return num_entries_; }//取值
void set_num_entries(int num_entries) { num_entries_ = num_entries; }//設值
private:
int num_entries_;
};
7:名字空間用小寫字母命名, 並基於專案名稱和目錄結構: google_awesome_project.
解讀:名稱空間需要一目瞭然其專案和結構
8:列舉的命名應當和 常量 或 巨集 一致: kEnumName 或是 ENUM_NAME.
enum UrlTableErrors {
kOK = 0,
kErrorOutOfMemory,
kErrorMalformedInput,
};
enum AlternateUrlTableErrors {
OK = 0,
OUT_OF_MEMORY = 1,
MALFORMED_INPUT = 2,
};
9:通常 不應該 使用巨集. 如果不得不用, 其命名像列舉命名一樣全部大寫, 使用下劃線:
譯者(acgtyrant)筆記
感覺 Google 的命名約定很高明,比如寫了簡單的類 QueryResult, 接著又可以直接定義一個變數 query_result, 區分度很好;再次,類內變數以下劃線結尾,那麼就可以直接傳入同名的形參,比如 TextQuery::TextQuery(std::string word) : word_(word) {} , 其中 word_ 自然是類內私有成員。
總之,最重要的是保證專案中命名的一致性!