google c++ 命名規範

1. 整體規則:不要隨意縮寫;2. 宏、枚舉等使用所有大寫+下劃線;3. 變量(含類、結構體成員變量)、文件、命名空間、存取函數等使用所有小寫+下劃線,類成員變量如下劃線結尾,全局變量以g_開頭;4. 參考現有或相近命名約定……


命名約定
最重要的一致性規則是命名管理,命名風格直接能夠直接肯定命名實體是:類型、變量、函數、常量、宏等等,無需查找實體聲明,咱們大腦中的模式匹配引擎依賴於這些命名規則。


命名規則具備必定隨意性,但相比按我的喜愛命名,一致性更重要,因此無論你怎麼想,規則總歸是規則。


1. 通用命名規則(General Naming Rules)


函數命名、變量命名、文件命名應具備描述性,不要過分縮寫,類型和變量應該是名詞,函數名能夠用「命令性」動詞。


如何命名:


儘量給出描述性名稱,不要節約空間,讓別人很快理解你的代碼更重要,好的命名選擇:


int num_errors;                  // Good.
int num_completed_connections;   // Good.
 


醜陋的命名使用模糊的縮寫或隨意的字符:


int n;                           // Bad - meaningless.
int nerr;                        // Bad - ambiguous abbreviation.
int n_comp_conns;                // Bad - ambiguous abbreviation.
 


類型和變量名通常爲名詞:如FileOpener、num_errors。


函數名一般是指令性的,如OpenFile()、set_num_errors(),訪問函數須要描述的更細緻,要與其訪問的變量相吻合。


縮寫:


除非放到項目外也很是明瞭,不然不要使用縮寫,例如:


// Good
// These show proper names with no abbreviations.
int num_dns_connections;  // Most people know what "DNS" stands for.
int price_count_reader;   // OK, price count. Makes sense.
 
// Bad!
// Abbreviations can be confusing or ambiguous outside a small group.
int wgc_connections;  // Only your group knows what this stands for.
int pc_reader;        // Lots of things can be abbreviated "pc".
 


不要用省略字母的縮寫:


int error_count;  // Good.
int error_cnt;    // Bad.
 


2. 文件命名(File Names)


文件名要所有小寫,能夠包含下劃線(_)或短線(-),按項目約定來。


可接受的文件命名:


my_useful_class.cc
my-useful-class.cc
myusefulclass.cc


C++文件以.cc結尾,頭文件以.h結尾。


不要使用已經存在於/usr/include下的文件名(譯者注,對UNIX、Linux等系統而言),如db.h。


一般,儘可能讓文件名更加明確,http_server_logs.h就比logs.h要好,定義類時文件名通常成對出現,如foo_bar.h和foo_bar.cc,對應類FooBar。


內聯函數必須放在.h文件中,若是內聯函數比較短,就直接放在.h中。若是代碼比較長,能夠放到以-inl.h結尾的文件中。對於包含大量內聯代碼的類,能夠有三個文件:


url_table.h      // The class declaration.
url_table.cc     // The class definition.
url_table-inl.h  // Inline functions that include lots of code.
 


參考第一篇-inl.h文件一節。


3. 類型命名(Type Names)


類型命名每一個單詞以大寫字母開頭,不包含下劃線:MyExcitingClass、MyExcitingEnum。


全部類型命名——類、結構體、類型定義(typedef)、枚舉——使用相同約定,例如:


 


// classes and structs
class UrlTable { ... 
class UrlTableTester { ... 
struct UrlTableProperties { ...


// typedefs
typedef hash_map<UrlTableProperties *, string> PropertiesMap;


// enums
enum UrlTableErrors { ...
 


4. 變量命名(Variable Names)


變量名一概小寫,單詞間如下劃線相連,類的成員變量如下劃線結尾,如my_exciting_local_variable、my_exciting_member_variable_。


普通變量命名:


舉例:


string table_name;  // OK - uses underscore.
string tablename;   // OK - all lowercase.
string tableName;   // Bad - mixed case.
 


 


類數據成員:


結構體的數據成員能夠和普通變量同樣,不用像類那樣接下劃線:


struct UrlTableProperties {
  string name;
  int num_entries;
}
 


結構體與類的討論參考第三篇結構體vs.類一節。


全局變量:


對全局變量沒有特別要求,少用就好,能夠以g_或其餘易與局部變量區分的標誌爲前綴。


5. 常量命名(Constant Names)


在名稱前加k:kDaysInAWeek。


全部編譯時常量(不管是局部的、全局的仍是類中的)和其餘變量保持些許區別,k後接大寫字母開頭的單詞:


const int kDaysInAWeek = 7;
 


6. 函數命名(Function Names)


普通函數(regular functions,譯者注,這裏與訪問函數等特殊函數相對)大小寫混合,存取函數(accessors and mutators)則要求與變量名匹配:MyExcitingFunction()、MyExcitingMethod()、my_exciting_member_variable()、set_my_exciting_member_variable()。


普通函數:


函數名以大寫字母開頭,每一個單詞首字母大寫,沒有下劃線:


AddTableEntry()
DeleteUrl()
 


存取函數:


存取函數要與存取的變量名匹配,這兒摘錄一個擁有實例變量num_entries_的類:


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. 命名空間(Namespace Names)


命名空間的名稱是全小寫的,其命名基於項目名稱和目錄結構:google_awesome_project。


關於命名空間的討論和如何命名,參考第二篇命名空間。


8. 枚舉命名(Enumerator Names)


枚舉值應所有大寫,單詞間如下劃線相連:MY_EXCITING_ENUM_VALUE。


枚舉名稱屬於類型,所以大小寫混合:UrlTableErrors。


enum UrlTableErrors {
  OK = 0,
  ERROR_OUT_OF_MEMORY,
  ERROR_MALFORMED_INPUT,
};
 


9. 宏命名(Macro Names)


你並不打算使用宏,對吧?若是使用,像這樣:MY_MACRO_THAT_SCARES_SMALL_CHILDREN。


參考第四篇預處理宏,一般是不使用宏的,若是絕對要用,其命名像枚舉命名同樣所有大寫、使用下劃線:


 


#define ROUND(x) ...
#define PI_ROUNDED 3.0
MY_EXCITING_ENUM_VALUE
 


10. 命名規則例外(Exceptions to Naming Rules)


當命名與現有C/C++實體類似的對象時,可參考現有命名約定:


bigopen()
函數名,參考open()
uint
typedef類型定義
bigpos
struct或class,參考pos
sparse_hash_map
STL類似實體;參考STL命名約定
LONGLONG_MAX
常量,相似INT_MAX
______________________________________


譯者:命名約定就相對輕鬆許多,在聽從代碼一致性、可讀性的前提下,略顯隨意:


1. 整體規則:不要隨意縮寫,若是說ChangeLocalValue寫做ChgLocVal還有情可原的話,把ModifyPlayerName寫做MdfPlyNm就太過度了,除函數名可適當爲動詞外,其餘命名儘可能使用清晰易懂的名詞;


2. 宏、枚舉等使用所有大寫+下劃線;


3. 變量(含類、結構體成員變量)、文件、命名空間、存取函數等使用所有小寫+下劃線,類成員變量如下劃線結尾,全局變量以g_開頭;


4. 普通函數、類型(含類與結構體、枚舉類型)、常量等使用大小寫混合,不含下劃線;


5. 參考現有或相近命名約定。 緩存


騎虎100 一個好玩有趣有價值的網站 http;//www.qihu100.com
less

相關文章
相關標籤/搜索