C++命名規範

來源:互聯網
上載者:User

通則:
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

·bool, BOOL: b

·int, __int16,__int32,__int64: n

·long: l

·double: d

·float: ft

·BYTE: by

·WORD: w

·DWORD: dw

·unsigned: u

·function: fn

·p :pointer

·lp :pointer

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

5、類名:

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

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

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

6、結構名、宏名、枚舉名、聯合名:

·全部大寫。

·枚舉名加小寫首碼"enum"。

例:

typedef enum _KFILE_OPEN_MODE

{

enumOPEN_READONLY = 0,

enumOPEN_READWRITE = 1,

enumCREATE_ALWAY = 3

} KFILE_OPEN_MODE;

//·宏名加小寫首碼"def"。

例:

#define defMAXNUMBER 100

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

例:

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. 建立人 (Creater);

c. 檔案建立時間 (Date);

d. 簡短說明檔案功能、用途 (Comment)。

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

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

例:HANDLE KSOpenFile(const char cszFileName[],

int nMode);

或者:

BOOL KSReadFile(

HANDLE hFile,

void *pvBuffer,

int nReadSize,

int *pnReadSize

);

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);

printf("%s\n", pFileLines);

}

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

例:正確:

if (i > 0)

{

m = 1;

n++;

}

不得寫做:

if (i > 0) {

m = 1;

n++;

}

例外:

if (i == 0)

{ ASSERT(FALSE); return; }

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

例:正確:

if (n == -2)

n = 1;

else

n = 2;

或者:

if (n == -2)

{ n = 1; }

else if (n != nTemp)

{ n = 2; }

else

{ n = 3; }

不得寫做:

if (n == -2)

n = 1;

else if (n != nTemp)

n = 2;

else

n = 3;

不推薦:

if (i < 1)

{ n = 1; }

else

{

if (i == 1)

{ n = 2; }

else

{

if (i > 1)

{ n = 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;

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.