程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C/C++源代碼書寫規范

C/C++源代碼書寫規范

編輯:關於C++
C/C++源代碼書寫規范 1. 在.cpp的開頭應有一段格式統一的說明,內容包括:
a. 文件名 (FileName);
b. 簡短說明文件功能、用途 (Comment);
c. 創建人 (Creater);
d. 文件創建時間 (Date)。
例:
//////////////////////////////////////////
//
// FileName: ***.cpp
// Creator: piaocoder
// Date: ****-**-**
// Comment: ***
//
//////////////////////////////////////////


2. 對於主要功能函數應有注釋說明。內容包括:功能、入口/出口參數,必要時還可有備注或補充說明,對於函數中的主要功能代碼,也應有注釋說明。注釋以英文為主。

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

例:
HANDLE CSOpenFile(const char cszFileName[],\
                  int nMode);
或者:
BOOL CSReadFile(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++)

(condition) ? funct1() : func2();
Or
    (condition)
      ? long statement
      : another long statement;
不得寫做:
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

10.5 代碼行內的空格規則:

(1)關鍵字之後需要加空格

(2)函數名之後不能留空格

(3)‘(’向後緊跟,‘)’、‘,’、‘;’向前緊跟,緊跟處不留空格。

(4)‘,’之後要留空格,如果‘;’不是一行的結束符,其後應該留空格。

(5)一般的二元操作符前後都應該留空格。

(6)一般一元操作符前後都不加空格。

(7)像“[]”、“.”、“->”這類操作符前後不加空格。


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;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved