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






