參考中文版谷歌開源項目風格指南,但是并不與其完全相同,整理出來便于規范自己的編碼風格。
一、命名規范
1、文件命名
- 文件名全部小寫,如果項目沒有命名約定則用下劃線"_"分隔開
- c++文件以.cc結尾,頭文件以.h結尾,專門插入文本的文件以.inc結尾
- 定義類時文件名成對出現
- 內聯函數強制放在.h文件中
- 不要使用與/usr/include(編譯器搜索系統頭文件的目錄)下相同的文件名
2、類型命名
類型包括:類、結構體、類型命名(typedef)、枚舉、模板參數 --- 均使用相同命名規定: 以大寫字母開始,每個單詞首字母均大寫,不包含下劃線
例如:
// 類和結構體 class UrlTable { ... class UrlTableTester { ... struct UrlTableProperties { ... // 類型定義 typedef hash_map<UrlTableProperties *, string> PropertiesMap; // using 別名 using PropertiesMap = hash_map<UrlTableProperties *, string>; // 枚舉 enum UrlTableErrors { ...
3、變量命名
- 變量(普通變量、函數參數)和數據成員全部用小寫字母
- 單詞之間用下劃線連接
- 變量和結構體的數據成員最后不用連接下劃線,但是類的數據成員最后要連接下劃線
例如:
string table_name; class TableInfo { ... private: string table_name_; static Pool<TableInfo>* pool_; }; struct UrlTableProperties { string name; int num_entries; static Pool<UrlTableProperties>* pool; };
4、常量命名
常量命名和谷歌的編程規范的常量命名的規則不盡相同。命名規則如下:
- 所有的常量前面加上con(google建議前面加上k)
- 其后的每個單詞采用駝峰命名規則
例如:
const int conDaysInWeek = 7;
5、函數命名
這里的函數分為兩種:普通的函數、取值或者設值的函數
- 普通的函數使用駝峰命名規則,所有的首字母均大寫,對于縮寫的符號比如RPC,也應該將其視為一個單詞首字母大寫
- 取值或者設值的函數應該與對應的變量相配合,可以使用下劃線連接單詞或者駝峰命名的規則
例如:
void OpenFile(string file_name); //對應于成員int count; int count();//取值函數 int set_count();//設值函數
6、枚舉命名
枚舉命名應該保持與常量的命名規則相同,因為枚舉類型中的每個元素的值都是確定的。
例如:
enum SystemStatus{ conOK = 0, conLOST = 1, }
7、宏命名
不建議使用宏,宏不會進行類型檢查,而且還有可能導致變量重定義等問題。可以使用內聯函數代替。
- 宏命名全部大寫,單詞之間用下劃線隔開
例如:
#define ROUND(x) ... #define PI_ROUNDED 3.0
8、命名空間命名
- 命名空間以小寫字母命名.
- 最高級命名空間的名字取決于項目名稱.
- 要注意避免嵌套命名空間的名字之間和常見的頂級命名空間的名字之間發生沖突.
頂級命名空間的名稱應當是項目名或者是該命名空間中的代碼所屬的團隊的名字. 命名空間中的代碼, 應當存放于和命名空間的名字匹配的文件夾或其子文件夾中.