C++命名規範
常見命名法:
-
匈牙利命名法:
基本原則是:變數名=屬性+型別+物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。 -
Camel命名法:
該命名法的名稱看起來就像駱駝的駝峰一樣高低起伏。Camel命名法有兩種形式:混合使用大小寫字母和單詞之間加下劃線,例如runFast和run_fast都屬於Camel命名法。 -
Pascal命名法
與Camel命名法類似,不過Pascal命名法的首字母為大寫字母。
命名通則:
- 在所有命名中,都應使用標準的英文單詞或縮寫。不得使用拼音或拼音縮寫,除非該名字描述的是中文特有的內容,如半形、全形, 聲母、韻母等。
- 所有命名都應遵循望文知義原則,即名稱應含義清晰、明確。
- 所有命名都不易過長,應控制在規定的最大長度以內。
- 所有命名都應儘量使用全稱,必要可以使用縮寫
具體規範:
工程名
- 不強制統一
檔名
- 基於工程名,開頭3個字母應表明與哪一個工程相關。
- 後面的字母應能夠區別不同的功能。
- 檔名儘可能用小寫,必要使用大寫或者漢字
- 長度不限於8.3格式,建議不多於30個字元。
- 若檔案用於定義和實現類,建議檔名與類名保持一致。
- 檔案的字尾名一律大寫。*.CPP *.H
函式名
- 參照 Windows API 的命名規範。
- 推薦使用動賓結構。函式名應清晰反映函式的功能、用途。
- 函式名最長不得超過30個字元。
- 函式名第一個字母必須大寫。
- 全域性函式必須以小寫字首"g"開頭。
變數名
-
原則
- 一般變數名的命名遵從匈牙利記法。即:字首 + 型別 + 變數名
- 函式的傳參名稱全部小寫,不加字首
- 結構體、類對應變數的命名...暫時就使用cs做為字首
-
格式
- [m_|s_|g_] type [class name|struct name] variable name
-
解釋
- m_ : 類的成員變數
- ms_:類的靜態成員變數
- sg_ :靜態全域性變數
- g_ :普通全域性變數
-
型別縮寫
| type | abridge |
|----------------| ------- |
| char, TCHAR | ch |
| char[],TCHAR[]| sz |
| string | str |
| bool, BOOL | b |
| int, __ int16, __ int32, __int64 | n |
| long | l |
| double | d |
| float | f |
| BYTE | by |
| WORD | w |
| DWORD | dw |
| unsigned | u |
| function point| lpfn |
| pointer | p |
| long pointer | lp |
| class,struct | cs |
| size_t | un |
| 模版 | 模版名稱小寫縮寫 |
變數名最長不得超過20個字元。 -
類名:
- 必須以大寫"C"開頭,後面字母反映具體含義,以清晰表達類的用途和功能為原則。
- 介面必須以大寫"I"開頭,代表 Interface 。
- 當名稱由多個單詞構成時,每一個單詞的第一個字母必須大寫。
-
結構體名、巨集名、列舉名、聯合名:
- 全部大寫。
typedef enum _CFILE_OPEN_MODE_
{
OPEN_READONLY = 0,
OPEN_READWRITE = 1,
CREATE_ALWAY = 3
} CFILE_OPEN_MODE;
#define MAXNUMBER 100
typedef struct _KPOINT_
{
int x;
int y;
} KPOINT;
typedef union _VARIANT_{
char chVal;
int nVal;
long lVal;
float ftVal;
...
} VARIANT;
C/C++原始碼書寫規範(試行)
- 在.h/.cpp的開頭應有一段格式統一的說明,內容包括:
- 檔名 (FileName);
- 簡短說明檔案功能、用途 (Comment);
- 建立人 (Creater);
- 檔案建立時間 (Date)。
/*!
*@file
*@brief
*@author
*@date
*/
- 除非極其簡單,否則對函式應有註釋說明。內容包括:功能、入口/出口引數,還可有備註或補充說明。
- 每行程式碼的長度推薦為80列,最長不得超過120列;折行以對齊為準。
- 迴圈、分支程式碼,判斷條件與執行程式碼不得在同一行上。
// 正確
if (n == -2)
n = 1;
else
n = 2;
// 不得寫做:
if (n == -2) n = 1;
else n = 2;
- 指標的定義,
*
號既可以緊接型別,也可以在變數名之前。- int* pnsize; ---> yes
- int *pnsize; ---> yes
- int * pnsize; ---> no
- 在類的成員函式內呼叫非成員函式時,在非成員函式名前必須加上
::
。 - 函式入口引數有預設值時,應註釋說明。
BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace /* = TRUE */);
else if
必須寫在一行。]- 與縮排有關的各項規定
9.1 縮排以Tab為單位。1個Tab 為 2個空格
9.2 下列情況,程式碼縮排一個 Tab: