google cpp程式設計規範要點整理

2021-07-03 21:47:34 字數 2510 閱讀 5659

資料夾名一律小寫,單詞之間用下劃線連線。

檔名一律小寫,單詞之間用下劃線連線。

源檔名以.cpp結尾,頭檔名以.h結尾,介面頭檔名以_inte***ce.h結尾。

標頭檔案#define保護的格式:

#define 工程名_資料夾名1_子資料夾名2_頭檔名_h_,全部大寫,單詞之間用下劃線連線。

標頭檔案,特別是介面標頭檔案中,不是必須用#include包含的標頭檔案,可以用前置宣告代替,如class xx;,只有做可以減少編譯依賴。

原始檔foo.cpp中的#indelue順序:

1 foo2.h

2 c 系統檔案

3 c++ 系統檔案

4 其他庫的.h檔案

5 本專案內.h檔案

其中每個部分按ascii碼值順序排列。

類的訪問控制區段的宣告順序依次為:public,protected,private。如果某區段沒內容,可以不宣告。

每個區段內的宣告通常按以下順序:

typedefs和列舉

常量建構函式

析構函式

成員函式,含靜態成員函式

資料成員,含靜態資料成員

基本資料型別建議使用int8_t, int32_t, int32_t, int64_t, float, double,不建議使用char, short, int, long等。

無符號數在與0比較時很容易除錯,建議不要使用uint32_t等無符號整型(除非你是在表示乙個位組而不是乙個數值,或是你需要定義二進位制補碼溢位),尤其是不要為了指出數值永不會為負,而使用無符號型別。

namespace名全小寫,單詞之間用下劃線連線。不建議用using namespace std;提前宣告,建議用namespace的全路徑,如std::string。

型別名的每個單詞首字母均大寫,單詞之間不包含下劃線,即駝峰法,如:myexcitingclass、myexcitingenum。所有型別命名,包括類、結構體、型別定義 (typedef)、列舉,均使用該命名規則。介面名以inte***ce為字尾。

變數名一律小寫,單詞之間用下劃線連線,如:

my_exciting_local_variable

類的成員變數以下劃線結尾,如:

my_exciting_member_variable_

將類的所有資料成員宣告為private。

結構體的資料成員不用像類的成員變數那樣以下劃線結尾:

struct urltableproperties

全域性變數用g_作為字首。

所有編譯時常量,無論是區域性的、全域性的、還是類中的,和其他變數稍微區別一下,以k後接大寫字母開頭的單詞,如:

const int kdaysinaweek = 7; 

單獨的列舉值應該優先採用常量的命名方式,但巨集方式的命名也可以接受,如:

enum urltableerrors ;

enum alternateurltableerrors ;

永遠不要用省略字母的縮寫:

int error_count;  // good.

int error_cnt;    // bad.

常規函式:

函式名的每個單詞首字母大寫,沒有下劃線,如:

addtableentry()

deleteurl()

取值和設值函式:

取值和設值函式要與訪問的變數名匹配,如int num_entries_ 是該類的例項變數,則相應的訪問函式為:

class myclass

void set_num_entries(int num_entries)

private:

int num_entries_;

};一般在標頭檔案中把訪問函式定義成內聯函式。

函式引數順序從左到右為:輸入引數,然後是輸出引數。

不允許使用預設函式引數。

不在建構函式中做太多邏輯相關的初始化,建議提供initialize和finalize函式做初始化和清理相關的工作。

建議為所有類提供乙個無參的建構函式和析構函式,以覆蓋編譯器的預設行為。

為避免隱式轉換,應該將單引數建構函式宣告為explicit的。

在宣告的變數或引數前加上關鍵字const用於指明變數值不可被篡改(如 const int foo )。

將const放在前面才更易讀,因為在自然語言中形容詞(const)是在名詞 (int)之前,如const int* foo;。

為類中的函式加上const限定符表明該函式不會修改類成員變數的狀態(如 class foo ;)。

巨集名一律大寫,單詞之間用下劃線連線。不建議使用巨集。

不要使用 c 風格型別轉換,而應該使用 c++ 風格。

用static_cast替代 c 風格的值轉換,,或某個類指標需要明確的向上轉換為父類指標時。

用const_cast去掉const限定符。

用reinterpret_cast指標型別和整型或其它指標之間進行不安全的相互轉換,僅在你對所做一切了然於心時使用。

dynamic_cast在測試**以外不要使用。除了測試**,如果你需要在執行時確定型別資訊,說明有設計缺陷。

TCP IP Winsock程式設計要點

利用winsock程式設計由同步和非同步方式,同步方式邏輯清晰,程式設計專注於應用,在搶先式的多工作業系統中 winnt win2k 採用多執行緒方式效率基本達到非同步方式的水平,應此以下為同步方式程式設計要點。1 快速通訊 winsock的nagle演算法將降低小資料報的傳送速度,而系統預設是使用...

TCP IP Winsock程式設計要點

利用winsock程式設計由同步和非同步方式,同步方式邏輯清晰,程式設計專注於應用,在搶先式的多工作業系統中 winnt win2k 採用多執行緒方式效率基本達到非同步方式的水平,應此以下為同步方式程式設計要點。1 快速通訊 winsock的nagle演算法將降低小資料報的傳送速度,而系統預設是使用...

TCP IP Winsock程式設計要點

利用winsock程式設計由同步和非同步方式,同步方式邏輯清晰,程式設計專注於應用,在搶先式的多工作業系統中 winnt win2k 採用多執行緒方式效率基本達到非同步方式的水平,應此以下為同步方式程式設計要點。1 快速通訊 winsock的nagle演算法將降低小資料報的傳送速度,而系統預設是使用...