軟件編碼規范
前言:
通過建立代碼編寫規范,形成BCB 開發小組編碼約定,提高程序的可靠性、可讀性、可修改性、可維護性、一致性,保證程序代碼的質量,繼續軟件開發成果,充分利用資源。提高程序的可繼續性,使開發人員之間的工作成果可以共享。
軟件編碼要遵循以下原則:
1.遵循開發流程,在設計的指導下進行代碼編寫。
2.代碼的編寫以實現設計的功能和性能為目標,要求正確完成設計要求的功能,達到設計的性能。
3.程序具有良好的程序結構,提高程序的封裝性好,減低程序的耦合程度。
4.程序可讀性強,易於理解;方便調試和測試,可測試性好。
5.易於使用和維護;良好的修改性、擴充性;可重用性強/移植性好。
6.占用資源少,以低代價完成任務。
7.在不降低程序的可讀性的情況下,盡量提高代碼的執行效率。
本規范的描述主要以 Borland C++ Builder 語言為例
一、 規范:以下對本規范作具體說明。
1:源程序的文件治理:
a)組織:每個程序文件單元通常都應由 .cpp、.dfm和 .h 等文件組成,並將單元的公共聲明部分放在 .h 文件中。劃分單元主要是以類為依據,原則上每個較大的類都應為一個單獨的單元,但在類較小且多個小類關系密切等情況下也可幾個類共一個單元(建議僅對已經具體測試的較為通用的類采用)。
b)命名:原程序文件命名采用有意義的格式。例如:對登陸程序來說三個文件的命名應該是這樣,.cpp的是 Login.cpp .dfm的是Login.dfm .h的是Login.h
c)文件結構:每個程序文件由標題、內容和附加說明三部分組成。
(A)標題:文件最前面的注釋說明,其內容主要包括:程序名,作者,版本信息,簡要說明等,必要時應有更詳盡的說明(將以此部分以空行隔開單獨注釋)。
(B)內容:為文件源代碼部分基本上按預處理語句、類型定義、變量定義、函數原型、函數實現(僅對 .cpp 文件)的順序。 main 、 winmain ,控件注冊等函數應放在內容部分的最後,類的定義按 private 、 protected 、 pubilic 、 __pubished 的順序,並盡量保持每一部分只有一個,各部分中按數據、函數、屬性、事件的順序。
(C)附加說明:文件末尾的補充說明,如參考資料等,若內容不多也可放在標題部分的最後。
舉例說明:
/*************************************************************
類:class TimageManipulation
設計者:lunhongjun (2001/05/09)
用途:用於圖象處理,實現圖象亮度、對比度、反白、色彩平衡等處理
版本:
1.0 2001/05/09 完成基本的圖象處理功能設計
2001/05/10 修改完成一個小Bug.
*************************************************************/
class TImageManipulation
{
private://define variant
Graphics::TBitmap * pSourceBitmap;//用於存放未經處理的原始圖像
Graphics::TBitmap * pManipulatedImage;//用處存放經過處理後的圖象
//圖像處理過程中的相關參數
int iBrightness; //色彩亮度
int iContrast; //色彩對比度
int iRedColorBalance; //紅色色彩平衡度
int iBlueColorBalance; //藍色色彩平衡度
int iGreenColorBalance; //綠色色彩平衡度
bool bRotate; //字體旋轉度數
bool bMonochrome; //是否反白顯示
private:
void __fastcall BrightnessImage(void);//調整圖象亮度
void __fastcall ContrastImage(void);//調整圖象對比度
void __fastcall DoManipulationImage(void);//圖象處理
void __fastcall MonochromeImage(void);//圖象反白
void __fastcall DoColor(void);
void __fastcall DoFilter(int * flt, int Div);
void __fastcall RotateImage(void);//調整圖象色彩平衡
public://define property ,method,event,function
__fastcall TImageManipulation();
__fastcall ~TImageManipulation();
void __fastcall DoBrightness(int BrightnessIncrement);
void __fastcall DoContrast(int ContrastIncrement);
void __fastcall DoMonochrome(void);
void __fastcall DoChangeColorBalance(int RedBalance,
int BlueBalance, int GreenBalance);
void __fastcall SetSourceImage(Classes::TPersistent* Source);
Graphics::TBitmap * __fastcall GetManipulationImage(void);
void __fastcall DoBlur(void);
void __fastcall DoSharp(void);
void __fastcall DoEmboss(void);
void __fastcall LoadImageFromFile(AnsiString FileName);
void __fastcall SaveManipulatedImageAsFile(AnsiString FileName);
TImageManipulation& operator=(const TImageManipulation & imSource);
void __fastcall DoRotate(void);
};
#endif
2.編輯風格:
(1)縮進
縮進以4個空格為單位。建議在Tools/Editor Options中設置General頁面的Block ident為4,Tab Stop為4,不要選中Use tab character。預處理語句、全局數據、函數原型、標題、附加說明、函數說明、標號等均頂格書寫。語句塊的“{”“}”配對對齊,並與其前一行對齊,語句塊類的語句縮進建議每個“{”“}”單獨占一行。
(2)空格
變量、類、常量數據和函數在其類型,修飾(如 __fastcall 等)名稱之間適當空格並據情況對齊。要害字原則上空一格,如: if ( ... ) 等,運算符的空格規定如下:“::”、“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正負號),“&”(取址或引用)、“*”(指使用指針時)等幾個運算符兩邊不加空格(其中單目運算符系指與操作數相連的一邊),其它運算符(包括大多數二目運算符和三目運算符“?:”兩邊均加一空格,“(”、“)”運算符在其內側空一格,在作函數定義時還可據情況多空或不空格來對齊,但在函數實現時可以不用。“,”運算符只在其後空一格,需對齊時也可不空或多空格,“sizeof”運算符建議也在其後空一格,不論是否有括號,對語句行後加的注釋應用適當空格與語句隔開並盡可能對齊。
(3)對齊
原則上關系密切的行應對齊,對齊包括類型、修飾、名稱、參數等各部分對齊。另每一行的長度不應超過屏幕太多,必要時適當換行,換行時盡可能在“,”處或運算符處,換行後最好以運算符打頭,並且以下各行均以該語句首行縮進,但該語句仍以首行的縮進為准,即如其下一行為“{”應與首行對齊。
變量定義最好通過添加空格形成對齊,同一類型的變量最好放在一起。如下例所示:
int Value;
int Result;
int Length;
DWord Size;
DWORD BufSize;
char * pBuf;
void * pOutputBuf;
LPCSTR * pPath;
(4)空行
程序文件結構各部分之間空兩行,若不必要也可只空一行,各函數實現之間一般空兩行,由於BCB會自動產生一行“//------”做分隔,另因每個函數還要有函數說明注釋,故通常只需空一行或不空,但對於沒有函數說明的