程式設計書寫規則 (轉)

worldblog發表於2007-12-12
程式設計書寫規則 (轉)[@more@]

  書寫規則

  /develop/author/netauthor/he_zhidan/">何志丹收藏
在編寫的過程中,特別是在多人協作程式設計時,規範的程式書寫格式可以提高程式的可讀性,提高編寫程式的,使寫出的程式具有更高的可移植性。本公司在多年的開發過程中,總結了許多使程式更加清晰可讀的規則,逐步形成了自己的一套程式設計風格。全面的瞭解和熟悉這些規則,並在實際程式設計中嚴格的遵守這些規則,對每一位程式設計人員來說都是非常重要的。
以下是在程式設計過程中應該遵循的規則:
一、基本要求
1.1 名(不包括副檔名)的長度不超過8個字元,即儘量不用長檔名。
1.2 Tab鍵一般設為8,Tab字元要存成空格。
1.3 一般來說,類、結構、列舉的定義,的宣告放在.h中,
1.4 函式、成員函式的實現放在.cpp中,不要把它們放在.h中。(inline函式除外)
1.5 縮格
語句縮排為兩個字元。例如:
if(i == 10)
  Value = 10;
1.6 列對齊
一般來說,需要對齊書寫的列都從第8n+1列開始書寫。
一個檔案中需要對齊書寫的列儘量從同一列開始書寫。
1.7 區域性變數儘量在要用到的地方定義,不要全部定義在檔案的開頭。
1.8 在設計資料結構時要遵守對齊原則
編譯選項中要選4位元組靠齊,程式碼書寫時要按8位元組靠齊書寫。
當有位元組空出時,要用Rev標明,以便再需要空間時首先使用此空間。
例如:
struct StructA
{
  BYTE  A;
  BYTE  Rev[3];
  D C;
}
1.9 #include "headerfile.h"的書寫
標頭檔案的include要按相同的順序書寫。
在所有檔案都要include的標頭檔案寫完後,要用#inclde hdrstop標識出來。
例如:
a.cpp中b.cpp中
#include <.h>#include
#pragma hdrstop#pragma hdrstop
#include #include
#include #include
......
二、程式
這裡說的程式框架,是指為了體現程式結構,以註釋的形式對原始檔按功能進行模組的劃分。
具體方法:
2.1 模組命名
模組名應有意義,可以明確表示模組的功能。
如果一個模組只是一個類的話,模組名應為"class 類名"。例如:class BaseWND
2.2 模組宣告
在預處理之後列出所有定義的模組名。
模組名應縮格書寫,如果模組中還定義了子模組,子模組名要相對其父模組縮格書寫。
例如:
/*(頂格書寫)
  Module1 Name  (縮格書寫)
  Module2 Name
  Child Module Name  (縮格書寫)
  ………
  ………
*/
2.3 模組的定義
在模組的起始/結束位置以模組名加Begin/End的方式標明。格式如下:
// Module1 Name Begin
......  (Module1)
// Module1 Name End
2.4 cpp檔案中模組的宣告和定義必須同時寫出,而在h檔案中如果模組只是一個類時,可以只寫宣告部分。
2.5 入口(Import):即模組中使用到的其它模組定義的函式,這些函式可能被改動。
2.6 出口(Export):即供其它模組使用的函式。
三、註釋
3.1 註釋符號與程式程式碼放在同一行時,應該用一個以上的空格和程式程式碼分開。
3.2 "//"與註釋文字之間要空一格。
3.3 使用"//"的註釋應該儘量列對齊書寫。
3.4 不易看懂的部分一定要註釋。
四、命名
4.1 應該使用有具體意義的名字進行命名,這樣可以減少註釋。
4.2 變數名和函式名一律按XxxXxx格式書寫。除迴圈變數外,單個字母的變數也要用大寫字母表示。
例如:MaxItems、M
4.3 迴圈變數可以使用單個小寫字母來命名。例如:
for(int i = 0; i < 10; i++)
  Array[i] = 0;
4.4 預處理宏名字中的所有字母都應大寫,中間可以用"_"分隔,即使用XXX_XXX格式。
常量宏、變數宏的定義都用這種方法。如常量MAX_PATH、PI
4.5 類名、結構名、列舉名一律按XxxXxxXXX格式書寫。
如果僅由一個單片語成,則整個單詞大寫(XXX格式)。例如:CreateFontINFO
4.6 只有下列資料型別的變數名加字首,其它型別不加字首:
字首p:指標型變數名;
字首h:控制程式碼型變數名;
字首b:布林型變數名。
4.7 類成員變數和函式不能另外加字首。
4.8 函式的引數命名不用in/out來標識傳入/傳出。
五、
5.1 需要判斷優先順序的表示式,要用"()"來標明不同的優先順序,以便程式的閱讀。
5.2 當表示式太長,一行寫不下時(超過80個字元),應把它分為幾行書寫。
5.3 劃分表示式的基本規則如下:
在一個低優先順序的運算子後開始劃分。
把這個運算子後的放到新行上。
使新的一行相對於語句的第一行縮格。
如果表示式要分為3行以上,則從第3行始的每一行與第2行對齊。
例如:
Value = TheDatabase.Search(UserQuery->Criterium,
  CurrentSession.ain,
  ...);
5.4 劃分用小括號括起的表示式時,也可以讓新行與"("後的內容對齊書寫。例如:
Value = TheDatabase.Search(UserQuery->Criterium,
  CurrentSession.Domain);
5.5 劃分賦值表示式時,也可以讓新行與"="後的內容對齊書寫。
Value = MaxNumber(Number1, Number2) -
  MinNumber(Number3, Number4);
5.6 如果表示式包含函式,應在儘量在函式呼叫以外的地方劃分它,以保證函式呼叫的完整性。
除非函式的呼叫部分很長,必須劃分。
例如:上例中不要按以下方式劃分
Value = MaxNumber(Number1,
  Number2) - MinNumber(Number3, Number4);
5.7 劃分條件表示式時,新的一行與表示式的開始位置同列。例如:
if(Condition == Green &&
  Status == Ok)
  GrantClearancce();
六、 語句
6.1 基本規則
6.1.1 表示式中不允許出現連續的兩個空格。
6.1.2 在","與";"符號的左邊不能有空格,但右邊要空格。例如:
for(int i, j = 0; i > 4; i++)
  Array[i][j] = 0;
6.1.3 二維算數運算子、關係運算子的左右要各空一格。
但如果其中一個運算元是很小的數字時,不要空格。例如:
Sum = Number1 + Number2;
Sum = Number+5;
6.1.4 一維運算子與運算元之間不要空格。例如:i++
6.1.5 間接訪問運算子"*"和取地址運算子"&",右邊不空格。
它們與左邊的資料型別後之間要空格。例如:
void Function(char *pString, int &Num);
Function(&Buffer, Number);
有"*"、"&"的變數定義及宣告的列對齊方式如下例所示:
int  Num;
char  *pStr;
int  &Value;
6.1.6 “箭頭”運算子"->"的左右都不要空格。
6.1.7 域運算子"::"的左右都不要空格。
6.1.8 陣列名與其後的"["之間不要空格。例如:Array[3]
6.1.9 大括號使用規則
使用大括號"{"和"}"時,把它們分別放在單獨的一行上,以提高程式的可讀性。
大括號與引用它的語句對齊。而大括號中的正文應該縮格書寫。例如:
while(GetMessage(&Msg, NULL, 0, 0))
{
  TranslateMessage(&Msg);
  DispatchMessage(&Msg);
}
6.1.10 連續書寫的語句不要超過10行,要在適當的地方空一行。
6.1.11 不同用途的語句之間要適當的空一行。
6.1.12 佔多行的語句前後都要空一行。
6.1.13 每次空行不要超過一行。
6.1.14 儘量把常量的定義放在一起書寫。
6.1.15 預處理部分放在源程式的開始。例如:
#include
6.1.16 預處理指令分為多行時,每行後的""應列對齊書寫。
#define GET_MAX_NUM(A, B)
  if(A > B) 
  Ret = A; 
  else 
  Ret = B;
6.1.17 if、while、for、do-while、switch、case等語句的語句體另起一行,用大括號括起。
按大括號的使用規則書寫。
6.1.18 if、while、for語句中,如果語句體只有一條語句可以不加大括號。
6.1.19 語句體要縮格書寫。
6.1.20 語句關鍵字與其後的"("之間,不能有空格。
6.1.21 語句儘量精簡,可寫可不寫的部分不要寫。例如:
return (Ret); 應寫為 return Ret;
語句後的表示式可以用小括號將其整個括起,也可以不寫這對小括號,此時要求不寫小括號。
6.1.22 陣列的定義
陣列定義在一行時,陣列內容與"{","}"之間要空一格。"="與"{"之間也要空一格。例如:
int Array[] = { 1, 2, 3 };
陣列內容較多需分多行書寫時,第一行從"="後開始劃分,
具體內容另起一行縮格書寫,其它行從","後開始劃分,內容之間對齊書寫,
"{","}"佔單獨的一行。例如:
char Array[][20] =
{
  "String1", "String2",
  "String3", "String4"
};
6.1.23 Goto語句儘量少用。
6.2 for語句
6.2.1 在for語句的表示式中,分號的右邊要空一格。
6.2.2 劃分for語句的表示式時,應儘可能的在for語句中的分號位置後劃分。
6.2.3 劃分for 語句的時候,如果只有第二個表示式很長,可以只劃分二個表示式,將語句寫成兩行。例如:
for(i = 0; i < ARRAYSIZE && Status == Ok &&
  ReLever > MinResourcelLevel; i++)
  Array[i] = i;
6.3 do-while語句
6.3.1 do-while語句中,左括號"{"單獨佔一行,而右括號"}"應與while條件語句在同一行上。
6.3.2 "while"與前面的"}"之間,必須空一格。
例如:
do
{
  Value++;
} while(i < 10);
6.4 switch語句
6.4.1 "case"與其後的值之間,必須有一個空格,值與":"之間不能有空格。
6.4.2 case語句相對於switch要縮格。case語句體相對於case要縮格。
6.4.3 case語句體如果很簡單,可以不使用大括號。例如:
switch(Month)
{
  case 1:
  case 2:
  {
  Value = 5;
  ...
  break;
  }
  case 12:
  Value = 7;
  break;
  default:
  {
  ...
  }
}
七、函式
7.1 一個函式不要過大,如果函式太大,儘量把其按功能劃分為幾個小函式。
7.2 具有類似功能的函式要放在一起書寫,可以把它們作為一個模組。
7.3 函式之間要空一行。
7.4 函式的返回型別與函式名寫在同一行。
7.5 函式名與其後的"("之間不能空格。
7.6 函式定義中,引數的型別說明在參數列中完成。
7.7 函式參數列中,各引數之間的逗號後要空一格。
7.8 函式參數列中的指標,如果只用於傳入時,一定要加const。
7.9 函式定義中,語句體要另起一行,用大括號括起。
7.10 語句體要縮格書寫。
7.11 函式定義中,如果語句體為空或者為單個簡單語句,可將語句體與函式名放在同一行,"{"前要空一格,語句體前後也要空一格。如果語句體為空,"{"和"}"之間不空格。
7.12 在定義或呼叫一個函式時,如果引數很長,可以在一個引數之後劃分它。
7.13 劃分函式的引數時,不要把某個引數的型別和識別符號分開放在不同行上。
7.14 劃分函式的引數時,另起的一行從函式定義的第一個引數所在列開始,或縮格書寫。例如:
BOOL CALLBACK DialogProc(HWND hDlg, UINT Msg,
  WPARAM WParam, LPARAM LParam);
BOOL CALLBACK DialogProc(HWND hDlg, UINT Msg,
  WPARAM WParam, LPARAM LParam);
7.15 劃分函式時,也可以將整個參數列另起一行,新行與函式的起始位置對齊。
BOOL CALLBACK DialogProc
(HWND hDlg, UINT Msg, WPARAM WParam, LPARAM LParam);
八、類和結構
8.1 類和結構的定義中,語句體要另起一行,用大括號括起。
8.2 語句體要縮格書寫。
8.3 類名和基類之間的":"左右都要空一格。
8.4 類和結構的定義中,成員及成員函式名要對齊書寫。
8.5 類和結構的定義中,private,public,protected關鍵字單獨佔一行,並且不要縮格。
例如:
class ExampleP: public BasePOS
{
private:
  double X;
  double Y;
public:
  init(double Xc = 0.0, double Yc = 0.0);
  char *Display();
  double GetSum() { return X + Y; }
};
8.6 能不寫struct,class關鍵字的地方就不寫,例如:
class MyCLASS Test;  應寫為 MyCLASS Test;
8.7 ":"左右各空一格,如果要劃分表示式,應從":"後開始劃分,並縮格書寫。例如:
MyCLALL::Func(int A, int B) :
  BaseFunc(int A, int B)
{
...
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992327/,如需轉載,請註明出處,否則將追究法律責任。

相關文章