1. 程式人生 > 實用技巧 >C++命名規範

C++命名規範

常見命名法:

  • 匈牙利命名法:
    基本原則是:變數名=屬性+型別+物件描述,其中每一物件的名稱都要求有明確含義,可以取物件名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。

  • Camel命名法:
    該命名法的名稱看起來就像駱駝的駝峰一樣高低起伏。Camel命名法有兩種形式:混合使用大小寫字母和單詞之間加下劃線,例如runFast和run_fast都屬於Camel命名法。

  • Pascal命名法
    與Camel命名法類似,不過Pascal命名法的首字母為大寫字母。

命名通則:

  1. 在所有命名中,都應使用標準的英文單詞或縮寫。不得使用拼音或拼音縮寫,除非該名字描述的是中文特有的內容,如半形、全形, 聲母、韻母等。
  2. 所有命名都應遵循望文知義原則,即名稱應含義清晰、明確。
  3. 所有命名都不易過長,應控制在規定的最大長度以內。
  4. 所有命名都應儘量使用全稱,必要可以使用縮寫

具體規範:

工程名

  • 不強制統一

檔名

  • 基於工程名,開頭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++原始碼書寫規範(試行)

  1. 在.h/.cpp的開頭應有一段格式統一的說明,內容包括:
    • 檔名 (FileName);
    • 簡短說明檔案功能、用途 (Comment);
    • 建立人 (Creater);
    • 檔案建立時間 (Date)。
/*!
 *@file
 *@brief
 *@author
 *@date
*/
  1. 除非極其簡單,否則對函式應有註釋說明。內容包括:功能、入口/出口引數,還可有備註或補充說明。
  2. 每行程式碼的長度推薦為80列,最長不得超過120列;折行以對齊為準。
  3. 迴圈、分支程式碼,判斷條件與執行程式碼不得在同一行上。
// 正確
if (n == -2)
    n = 1;
else
    n = 2;
// 不得寫做:
if (n == -2) n = 1;
else n = 2;
  1. 指標的定義,* 號既可以緊接型別,也可以在變數名之前。
    • int* pnsize; ---> yes
    • int *pnsize; ---> yes
    • int * pnsize; ---> no
  2. 在類的成員函式內呼叫非成員函式時,在非成員函式名前必須加上::
  3. 函式入口引數有預設值時,應註釋說明。
    BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace /* = TRUE */);
  4. else if 必須寫在一行。]
  5. 與縮排有關的各項規定
    9.1 縮排以Tab為單位。1個Tab 為 2個空格
    9.2 下列情況,程式碼縮排一個 Tab: