Google C 命名約定

2021-09-04 11:01:15 字數 3208 閱讀 9803

函式命名, 變數命名, 檔案命名要有描述性; 少用縮寫.

int price_count_reader;

// 無縮寫

int num_errors;

// "num" 是乙個常見的寫法

int num_dns_connections;

// 人人都知道 "dns" 是什麼

int n;

// 毫無意義.

int nerr;

// 含糊不清的縮寫.

int n_comp_conns;

// 含糊不清的縮寫.

int wgc_connections;

// 只有貴團隊知道是什麼意思.

int pc_reader;

// "pc" 有太多可能的解釋了.

int cstmr_id;

// 刪減了若干字母.

注意, 一些特定的廣為人知的縮寫是允許的, 例如用 i 表示迭代變數和用 t 表示模板引數.

檔名要全部小寫, 可以包含下劃線 () 或連字元 (-), 依照專案的約定. 如果沒有約定, 那麼 「」 更好.

可接受的檔案命名示例:

my_useful_class.cc

my-useful-class.cc

myusefulclass.cc

myusefulclass_test.cc

內聯函式必須放在 .h 檔案中. 如果內聯函式比較短, 就直接放在 .h 中.

型別名稱的每個單詞首字母均大寫, 不包含下劃線: myexcitingclass, myexcitingenum.

說明所有型別命名 —— 類, 結構體, 型別定義 (typedef), 列舉, 型別模板引數

// 類和結構體

class urltable 

;

結構體變數

不管是靜態的還是非靜態的, 結構體資料成員都可以和普通變數一樣, 不用像類那樣接下劃線:

struct urltableproperties 

;

宣告為 constexpr 或 const 的變數, 或在程式執行期間其值始終保持不變的, 命名時以 「k」 開頭, 大小寫混合. 例如:

const

int kdaysinaweek =

7;

常規函式使用大小寫混合, 取值和設值函式則要求與變數名匹配: myexcitingfunction(), myexcitingmethod(), my_exciting_member_variable(), set_my_exciting_member_variable().

一般來說, 函式名的每個單詞首字母大寫 (即 「駝峰變數名」 或 「帕斯卡變數名」), 沒有下劃線. 對於首字母縮寫的單詞, 更傾向於將它們視作乙個單詞進行首字母大寫 (例如, 寫作 startrpc() 而非 startrpc()).

addtableentry()

deleteurl()

openfileordie()

(同樣的命名規則同時適用於類作用域與命名空間作用域的常量, 因為它們是作為 api 的一部分暴露對外的, 因此應當讓它們看起來像是乙個函式, 因為在這時, 它們實際上是乙個物件而非函式的這一事實對外不過是乙個無關緊要的實現細節.)

取值和設值函式的命名與變數一致. 一般來說它們的名稱與實際的成員變數對應, 但並不強制要求. 例如 int count() 與 void set_count(int count).

命名空間以小寫字母命名. 最高端命名空間的名字取決於專案名稱. 要注意避免巢狀命名空間的名字之間和常見的頂級命名空間的名字之間發生衝突.

頂級命名空間的名稱應當是專案名或者是該命名空間中的**所屬的團隊的名字. 命名空間中的**, 應當存放於和命名空間的名字匹配的資料夾或其子資料夾中.

注意 不使用縮寫作為名稱 的規則同樣適用於命名空間. 命名空間中的**極少需要涉及命名空間的名稱, 因此沒有必要在命名空間中使用縮寫.

要避免巢狀的命名空間與常見的頂級命名空間發生名稱衝突. 由於名稱查詢規則的存在, 命名空間之間的衝突完全有可能導致編譯失敗. 尤其是, 不要建立巢狀的 std 命名空間. 建議使用更獨特的專案識別符號 (websearch::index, websearch::index_util) 而非常見的極易發生衝突的名稱 (比如 websearch::util).

對於 internal 命名空間, 要當心加入到同一 internal 命名空間的**之間發生衝突 (由於內部維護人員通常來自同一團隊, 因此常有可能導致衝突). 在這種情況下, 請使用檔名以使得內部名稱獨一無二 (例如對於 frobber.h, 使用 websearch::index::frobber_internal).

列舉的命名應當和 常量 或 巨集 一致: kenumname 或是 enum_name.

單獨的列舉值應該優先採用 常量 的命名方式. 但 巨集 方式的命名也可以接受. 列舉名 urltableerrors(以及 alternateurltableerrors) 是型別, 所以要用大小寫混合的方式.

enum urltableerrors 

;enum alternateurltableerrors

;

2009 年 1 月之前, 我們一直建議採用 巨集 的方式命名列舉值. 由於列舉值和巨集之間的命名衝突, 直接導致了很多問題. 由此, 這裡改為優先選擇常量風格的命名方式. 新**應該盡可能優先使用常量風格. 但是老**沒必要切換到常量風格, 除非巨集風格確實會產生編譯期問題.

你並不打算 使用巨集, 對吧? 如果你一定要用, 像這樣命名:

my_macro_that_scares_small_children.
參考 預處理巨集; 通常 不應該 使用巨集. 如果不得不用, 其命名像列舉命名一樣全部大寫, 使用下劃線:

#define round(x) ...

#define pi_rounded 3.0

如果你命名的實體與已有 c/c++ 實體相似, 可參考現有命名策略.

bigopen(): 函式名, 參照 open() 的形式

uint: typedef

bigpos: struct 或 class, 參照 pos 的形式

sparse_hash_map: stl 型實體; 參照 stl 命名約定

longlong_max: 常量, 如同 int_max

Google C 命名約定

最重要的一致性規則是命名管理.命名風格快速獲知名字代表是什麼東東 型別?變數?函式?常量?巨集 甚至不需要去查詢型別宣告.我們大腦中的模式匹配引擎可以非常可靠的處理這些命名規則.命名規則具有一定隨意性,但相比按個人喜好命名,一致性更重,所以不管你怎麼想,規則總歸是規則.tip函式命名,變數命名,檔案...

Google C 程式設計規範 命名約定(部分)

1.通用命名規則 具備描述性,適當縮寫,型別和變數應該是名詞,函式名可以用 命令性 動詞 int num errors good.int num completed connections good.int price count reader 無縮寫 int num errors num 是乙個常...

Google C 程式設計風格指南(五) 命名約定

最重要的一致性規則是命名管理,命名風格直接可以直接確定命名實體是 型別 變數 函式 常量 巨集等等,無需查詢實體宣告,我們大腦中的模式匹配引擎依賴於這些命名規則。命名規則具有一定隨意性,但相比按個人喜好命名,一致性更重要,所以不管你怎麼想,規則總歸是規則。1.通用命名規則 general namin...