[C++][程式設計風格]C++命名規則

me_lawrence發表於2015-09-16

http://www.cnblogs.com/jingmoxukong/articles/2167785.html

C++命名規範

常見命名法:

 

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

 

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

 

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

 

 

 


命名通則:
1、在所有命名中,都應使用標準的英文單詞或縮寫。不得使用拼音或拼音縮寫,除非該名字描述的是中文特有的內容,如半形、全形, 聲母、韻母等。

 

2、所有命名都應遵循望文知義原則,即名稱應含義清晰、明確。

 

3、所有命名都不易過長,應控制在規定的最大長度以內。

 

4、所有命名都應儘量使用全稱。

 

5、如果命名使用縮寫,則應該使用《通用縮寫表》(見附錄)中的縮寫;原則上不推薦使用《通用縮寫表》以外的縮寫,如果使用,則必須對其進行註釋和說明。

具體規範:

 

1、工程名:

 

不強制統一。

 

2、檔名:

 

·基於工程名,開頭3個字母應表明與哪一個工程相關。

 

·後面的字母應能夠區別不同的功能。

 

·不區分大小寫。

 

·長度不限於8.3格式,建議不多於30個字元。

 

·若檔案用於定義和實現類,建議檔名與類名保持一致。

 

3、函式名:

 

·參照 Windows API 的命名規範。

 

·推薦使用動賓結構。函式名應清晰反映函式的功能、用途。

 

·函式名最長不得超過30個字元。

 

·函式名第一個字母必須大寫。

 

·全域性函式必須以小寫字首"g"開頭。

 

4、變數名:

 

原則上,變數名的命名遵從匈牙利記法。即:字首 + 型別 + 變數名

 

1)格式:

 

[m_|s_|g_] type [class name|struct name] variable name

 

2)解釋:

 

·m_ : 類的成員變數

 

·ms_:類的靜態成員變數

 

·s_ :靜態全域性變數

 

·g_ :普通全域性變數

 

·型別縮寫(type)

·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: fn

·p :pointer

·lp :long pointer

變數名最長不得超過20個字元。

 

5、類名:

 

·必須以大寫"C"開頭,後面字母反映具體含義,以清晰表達類的用途和功能為原則。

 

·介面必須以大寫"I"開頭,代表 Interface 。

 

·當名稱由多個單詞構成時,每一個單詞的第一個字母必須大寫。

 

6、結構體名、巨集名、列舉名、聯合名:

 

·全部大寫。

 

·列舉名加小寫字首"enum"。

 

例:

 

typedef enum _CFILE_OPEN_MODE

 

{

 

enumOPEN_READONLY = 0,

 

enumOPEN_READWRITE = 1,

 

enumCREATE_ALWAY = 3

 

 } CFILE_OPEN_MODE;

 

//·巨集名加小寫字首"def"。

 

例:

 

#define defMAXNUMBER 100

 

·結構名加小寫字首"tag",之後必須以大寫"C"開頭。

 

例:

 

typedef struct tagKPOINT

 

{

 

int x;

 

int y;

 

} KPOINT;

 

//·聯合名加小寫字首"uni"。

 

例:

 

typedef union _VARIANT{

 

char unichVal;

 

int uninVal;

 

long unilVal;

 

float uniftVal;

 

...

 

} VARIANT;

 

 

 

C/C++原始碼書寫規範(試行)

 

1. 在.h/.cpp的開頭應有一段格式統一的說明,內容包括:

 

  a. 檔名 (FileName);

 

  b. 簡短說明檔案功能、用途 (Comment);

 

  c. 建立人 (Creater);

 

  d. 檔案建立時間 (Date)。

例:

/*!
  *@file
  *@brief
  *@author
  *@date
  */


2. 除非極其簡單,否則對函式應有註釋說明。內容包括:功能、入口/出口引數,必要時還可有備註或補充說明。

 

3. 每行程式碼的長度推薦為80列,最長不得超過120列;折行以對齊為準。

例:

HANDLE CSOpenFile(const char cszFileName[],<br>               int nMode);

或者:

BOOL CSReadFile(<br>                HANDLE hFile,<br>               void *pvBuffer,<br>             int nReadSize,<br>              int *pnReadSize<br>             );<br>

 

4. 迴圈、分支程式碼,判斷條件與執行程式碼不得在同一行上。

例:正確:

if (n == -2)
    n = 1;
else
    n = 2;

不得寫做:

if (n == -2) n = 1;
else n = 2;

 

5. 指標的定義,* 號既可以緊接型別,也可以在變數名之前。

例:可寫做:int* pnsize;

也可寫做:int *pnsize;

但不得寫做:int * pnsize;

 

6. 在類的成員函式內呼叫非成員函式時,在非成員函式名前必須加上“::”。

 

7. 函式入口引數有預設值時,應註釋說明。

例:

BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace /* = TRUE */);

或者:

BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace // = TRUE );

 

8. else if 必須寫在一行。

 

9. 與‘{’、‘}’有關的各項規定:

 

9.1‘{’、‘}’應獨佔一行。在該行內可有註釋。

例:正確:

for (i = 0; i < cbLine; i++)
{ // .....
    printf("Line %d:", i);
    printf("%s\n", pFileLines);
}

不得寫做:

for (i = 0; i < cb; i++)
{printf("Line %d:", i);<br>printf("%s\n", pFileLines);}


9.2‘{’必須另起一行,‘{’之後的程式碼必須縮排一個Tab。‘{’與‘}’必須在同一列上。

例:正確:

if (i > 0)
{<br>  m = 1;<br>  n++;
}

不得寫做:

if (i > 0) {
m = 1;
n++;
}

例外:

if (i == 0)
{ ASSERT(FALSE); return; }

 

9.3 在迴圈、分支之後若只有一行程式碼,雖然可省略‘{’、‘}’,但不推薦這麼做。若省略後可能引起歧義,則必須加上‘{’、‘}’。

 

10. 與空格有關的各項規定。

 

10.1 在所有兩目、三目運算子的兩邊都必須有空格。在單目運算子兩端不必空格。但在‘->’、‘::’、‘.’、‘[’、‘]’等運算子前後,及‘&’(取地址)、‘*’(取值)等運算子之後不得有空格。

例:正確:

int n = 0, nTemp;
for (int i = nMinLine; i <= nMaxLine; i++)

不得寫做:

int n=0, nTemp;
for ( int i=nMinLine; i<=nMaxLine; i++ )

 

10.2 for、while、if 等關鍵詞之後應有1個空格,再接‘(’,之後無空格;在結尾的‘)’前不得有空格。

例:正確:

if (-2 == n)


不得寫做:

if(-2 == n)

if ( -2 == n )

 

10.3 呼叫函式、巨集時,‘(’、‘)’前後不得有空格。

例:正確:

printf("%d\n", nIndex);

不得寫做:

printf ("%d\n", nIndex);

printf( "%d\n", nIndex );

 

10.4 型別強制轉換時,‘(’‘)’前後不得有空格

例:可寫做:

(KSFile*)pFile;

也可寫做:

(KSFile *)pFile


不得寫做:

( KSFile* )pFile

( KSFile * ) pFile

 

11. 與縮排有關的各項規定

 

11.1 縮排以 Tab 為單位。1 個 Tab 為 4 個空格

 

11.2 下列情況,程式碼縮排一個 Tab:

1. 函式體相對函式名及‘{’、‘}’。

例:

int Power(int x)
{
return (x * x);
}


2. if、else、for、while、do 等之後的程式碼。

 

3. 一行之內寫不下,折行之後的程式碼,應在合理的位置進行折行。若有 + - * / 等運算子,則運算子應在上一行末尾,而不應在下一行的行首。

 

11.3 下列情況,不必縮排:switch 之後的 case、default。

例:

switch (nID)
{
case ID_PLAY:
  ......
break;
case ID_STOP:
  ......
break;
default:
  ......
break;
}

相關文章