1.1. 程序塊要採用縮進風格編寫,縮進的空格數爲3個,縮進與對齊只使用空格鍵,不應使用Tab鍵。
說明:由開發工具自動生成的代碼縮進格式允許不一致。
1.2. 函數或過程的開始、結構的定義及循環、判斷等語句中的代碼都要採用縮進風格,case語句下的情況處理語句也要遵從語句縮進要求。
1.3. 在兩個以上的關鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之後或者前後要加空格;進行非對等操作時,如果是關係密切的立即操作符(如->),後不應加空格。
說明:採用這種鬆散方式編寫代碼的目的是使代碼更加清晰。
示例:
(1) 逗號、分號只在後面加空格。
int a, b, c;
(2)比較操作符, 賦值操作符"="、 "+=",算術操作符"+"、"%",邏輯操作符"&&"、"&",位域操作符"<<"、"^"等雙目操作符的前後加空格。
if (current_time >= MAX_TIME_VALUE)
a = b + c;
a *= 2;
a = b ^ 2;
(3)"!"、"~"、"++"、"--"、"&"(地址運算符)等單目操作符前後不加空格。
*p = 'a'; // 內容操作"*"與內容之間
flag = !isEmpty; // 非操作"!"與內容之間
p = &mem; // 地址操作"&" 與內容之間
i++; // "++","--"與內容之間
(4)"->"、"."前後不加空格。
p->id = pid; // "->"指針前後不加空格
(5) if、for、while、switch等與後面的括號間應加空格,使if等關鍵字更爲突出、明顯。
正確寫法:
if (a < 0)
{
return;
}
while(a < 0)
{
a++;
}
錯誤寫法:
if (a < 0) return;
while(a < 0)
a++;
1.4. 一行程序以小於80字符爲宜,不要寫得過長。
2.1. 函數頭部應進行註釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值、調用關係(函數、表)等。
使用Doxygen的JavaDoc style來註釋C++代碼,下面是一個典型class的樣例。詳細可以閱讀doxygen_manual-1.6.3.chm。
/**
* A test class. A more elaborate class description.
*/
class Test
{
public:
/**
* An enum.
* More detailed enum description.
*/
enum TEnum {
TVal1, /**< enum value TVal1. */
TVal2, /**< enum value TVal2. */
TVal3 /**< enum value TVal3. */
}
*enumPtr, /**< enum pointer. Details. */
enumVar; /**< enum variable. Details. */
/**
* A constructor.
* A more elaborate description of the constructor.
*/
Test();
/**
* A destructor.
* A more elaborate description of the destructor.
*/
~Test();
/**
* a normal member taking two arguments and returning an integer value.
* @param a an integer argument.
* @param s a constant character pointer.
* @see Test()
* @see ~Test()
* @see testMeToo()
* @see publicVar()
* @return The test results
*/
int testMe(int a,const char *s);
/**
* A pure virtual member.
* @see testMe()
* @param c1 the first argument.
* @param c2 the second argument.
*/
virtual void testMeToo(char c1,char c2) = 0;
/**
* a public variable.
* Details.
*/
int publicVar;
/**
* a function variable.
* Details.
*/
int (*handler)(int a,int b);
};
|
/**
*
*/
中間的’*’可以省略:
/**
*/
|
通常的註釋需包括的信息
/*************************************************
Function: // 函數名稱
Description: // 函數功能、性能等的描述
Calls: // 被本函數調用的函數清單
Called By: // 調用本函數的函數清單
Table Accessed: // 被訪問的表(此項僅對於牽扯到數據庫操作的程序)
Table Updated: // 被修改的表(此項僅對於牽扯到數據庫操作的程序)
Input: // 輸入參數說明,包括每個參數的作
// 用、取值說明及參數間關係。
Output: // 對輸出參數的說明。
Return: // 函數返回值的說明
Others: // 其它說明
*************************************************/
2.2. 邊寫代碼邊註釋,修改代碼同時修改相應的註釋,以保證註釋與代碼的一致性。不再有用的註釋要刪除。
2.3. 應儘量避免使用全局變量,如果必須使用全局變量,則全局變量要有較詳細的註釋
2.4. 如果你需要不歸檔的註釋,在Doxygen的註釋/**…*/以外,使用原來的註釋即可:如://…。
3.1. 標識符的命名要清晰、明瞭,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤解,避免使用單個字符作爲變量名(如i、j、k,但i、j、k作局部循環變量是允許的)。
說明:較短的單詞可通過去掉“元音”形成縮寫;較長的單詞可取單詞的頭幾個字母形成縮寫;一些單詞有大家公認的縮寫。
示例:如下單詞的縮寫能夠被大家基本認可。
temp 可縮寫爲 tmp ;
flag 可縮寫爲 flg ;
statistic 可縮寫爲 stat ;
increment 可縮寫爲 inc ;
message 可縮寫爲 msg ;
類型
|
前綴
|
例子
|
int
|
i
|
iVertexNum
|
bool
|
b
|
bVisible
|
long
|
l
|
lHandle
|
byte
|
byte
|
byteFlag
|
char
|
c
|
cInputCharacter
|
unsigned int
|
ui
|
uiStartIndex
|
short
|
s
|
sMehtodID
|
usigned short
|
us
|
usIndex
|
WORD
|
w
|
wIndex
|
DWORD
|
dw
|
dwFlags
|
|
|
|
特殊類型
指針類型
|
p
|
pForm
|
數組類型
|
a
|
aNames
|
靜態變量
|
s_
|
s_manager(此時如果是成員變量可以忽略非公有屬性的下劃線前綴規則)
|
字符串類型前綴
std::string std::wstring
|
str
|
strName
|
char*
|
pstr
|
pstrName
|
char[] 數組
|
sz
|
szName
|
結構類型
class/struct
|
無前綴
|
|
enum
|
e
|
ePrimitiveType
|
在別人的基礎上修改而成