前言:
要開發出專業化的軟件產品,在編碼階段,必須嚴格貫徹一定的代碼開發准則,這會減少程式的隱含錯誤,同時使程式的內部結構清晰。從而開發出少錯誤、易維護的優質程式,使得程式的團隊合作性和專業化程度大為提高。這是軟件開發中公認的一個准則,也是軟件工程在編碼階段的一個具體的應用。我曾與不少編程的朋友討論過這個問題,在實際的開發中也積累了一些心得,現在我將我所體會到的Coding Rule整理於下:
內容:
適用平台為32位Windows,語言為以C++為基礎的語言(C++,VC++...)
一.提高程序的可讀性要求:
1.對你所寫的每一個文件都加上相關的標准化注釋,一般應包括:文件的作用、版本號信息、作者及時間等。
2.為你定義的類寫詳細的注釋,包括作者、時間、版本修訂信息、基本的算法、以及成員變量的詳細解釋等。
3.為你定義的每一個函數寫詳細的注釋,包括輸入輸出參數說明、返回值說明、函數功能說明。
********************************************************************************
4.在函數的內部,長條注釋(劃分功能模塊)、短條注釋(說明實現的各步驟)與句後解釋(說明重要句的意義)相結合,清晰功能的實現層次。
file://*************下面實現如下功能 *****************
file://進行...操作(1)。
..............
.............. file://此操作作用為...。
file://進行...操作(2)。
5.所有命名(類、函數、變量..)均要求意義明確易於理解。
6.避免在代碼中直接使用數字和TRUE/FALSE等不確定意義的詞,盡量使用有意義的串值代替。
const static Word W_PERSON_NUM = 10;
BOOL bMustProcess = TRUE;
7.最好不要出現向“if(test)等”邏輯判斷語句,用以下代替:
if( TRUE == test)
if( PersonNum == test)
if(NULL != test).
8.不要使用goto。
9.不要寫太長的if(){...},for(){...},While(...){}或者太多的嵌套。
10.對上述較長者在范圍結束處加注釋。如//for 循環結束
11.在名字上區分各種變量及函數
類成員變量:m_*,全局變量:g_*,API函數:::。
二.消除程序中的隱患
降低耦合性:
1.只有被其他類引用的函數才定義成public型函數。
2.類中最好不用public型成員變量(經典代替方法:為這個變量寫Get與Set函數)。
3.最好不使用全局變量。
說明:可以在C*App類中指定,然後使用AfxGetApp()->***來使用
提高聚合性:
1.一個公用的成員函數不可返回所在類的成員變量的指針或非常量的引用。
2.使用一個類,在可能的情況下(僅通過指針或引用被訪問的類),應將類的頭文件包含在使用者的.cpp文件中,提高封裝性,同時避免重復包含(類為自定的情況下)。如果必須在使用者的.h文件中包含此類的頭文件,應使用ifdef...語句避免重復包含。
3.函數的功能應單一,參數的意義應該單一。
基本規則:
1.盡量使用括號來清晰計算表達式的順序。
2.使用引用參數來代替指針參數(明晰語義;保證傳遞時已經初始化了;保持效率)。
3.變量定義時應賦初值。
4.使用NULL == *,FALSE == *,代替 * == NULL,* ==FALSE...。
說明:避免筆誤
5.使用NULL;空語句。
While(---)NULL; file://避免筆誤(誤加分號)
6.使用const static 代替 #define(使用編譯器的類型檢查機制)。
7.所有含虛函數的類的析構函數必須是虛析構函數。
8.在VC下編程時,設置編譯選項“Warning level”為“Level 4”(啟動編譯器所有的預警功能)。
9.函數中自己編制的return前,最好應用系統默認值。
10. debug版與Release版。
#ifdef DEBUG #define DEBUG
......
.....
#endif #undef DEBUG
11. 反安裝時,應移去所有我們自定義的DLL,LIB,OCX,注冊表項...。