<b>1.1. </b><b>程式塊要采用縮進風格編寫,縮進的空格數</b><b>為</b><b>3</b><b>個</b><b>,縮進與</b><b>對齊</b><b>隻使用空格鍵,不應使用Tab鍵</b><b>。</b>
說明:由開發工具自動生成的代碼縮進格式允許不一緻。
<b>1.2. </b><b>函數或過程的開始、結構的定義及循環、判斷等語句中的代碼都要采用縮進風格,</b><b>case</b><b>語句下的情況處理語句也要遵從語句縮進要求。</b>
<b>1.3. </b><b>在兩個以上的關鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之後或者前後要加空格;進行非對等操作時,如果是關系密切的立即操作符(如-</b><b>></b><b>),後不應加空格。</b>
說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。
示例:
(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;
a++;
<b>1.4. </b><b>一行程式以小于</b><b>80</b><b>字元為宜,不要寫得過長。</b>
<b>2.注釋</b>
<b>2.1. </b><b>函數頭部應進行注釋,列出:函數的目的</b><b>/</b><b>功能、輸入參數、輸出參數、傳回值、調用關系(函數、表)等</b><b>。</b>
使用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.
int (*handler)(int a,int b);
};
<b> </b>
*
*/
中間的’*’可以省略:
通常的注釋需包括的資訊
/*************************************************
Function: // 函數名稱
Description: // 函數功能、性能等的描述
Calls: // 被本函數調用的函數清單
Called By: // 調用本函數的函數清單
Table Accessed: // 被通路的表(此項僅對于牽扯到資料庫操作的程式)
Table Updated: // 被修改的表(此項僅對于牽扯到資料庫操作的程式)
Input: // 輸入參數說明,包括每個參數的作
// 用、取值說明及參數間關系。
Output: // 對輸出參數的說明。
Return: // 函數傳回值的說明
Others: // 其它說明
*************************************************/
<b>2.2. </b><b>邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一緻性。不再有用的注釋要删除。</b>
<b>2.3. </b><b>應盡量避免使用全局變量,如果必須使用全局變量,則</b><b>全局變量要有較詳細的注釋</b>
<b>2.4. </b><b>如果你需要不歸檔的注釋,在</b><b>Doxygen</b><b>的注釋</b><b>/**</b><b>…</b><b>*/</b><b>以外,使用原來的注釋即可:如</b><b>://</b><b>…。</b>
<b>3.辨別符命名</b>
<b>3.1. </b><b>辨別符的命名要清晰、明了,有明确含義,同時使用完整的單詞或大家基本可以了解的縮寫,避免使人産生誤解,</b><b>避免使用單個字元作為變量名(如</b><b>i</b><b>、</b><b>j</b><b>、</b><b>k</b><b>,但</b><b>i</b><b>、</b><b>j</b><b>、</b><b>k</b><b>作局部循環變量是允許的)</b><b>。</b>
說明:較短的單詞可通過去掉“元音”形成縮寫;較長的單詞可取單詞的頭幾個字母形成縮寫;一些單詞有大家公認的縮寫。
示例:如下單詞的縮寫能夠被大家基本認可。
temp 可縮寫為 tmp ;
flag 可縮寫為 flg ;
statistic 可縮寫為 stat ;
increment 可縮寫為 inc ;
message 可縮寫為 msg ;
<b>3.2. </b><b>基本類型字首</b>
類型
字首
例子
int
i
iVertexNum
bool
b
bVisible
long
l
lHandle
byte
byteFlag
char
c
cInputCharacter
unsigned int
ui
uiStartIndex
short
s
sMehtodID
usigned short
us
usIndex
WORD
w
wIndex
DWORD
dw
dwFlags
<b>3.3. </b><b>非基本類型字首</b>
<b>特殊類型</b>
指針類型
p
pForm
數組類型
a
aNames
靜态變量
s_
s_manager(此時如果是成員變量可以忽略非公有屬性的下劃線字首規則)
<b>字元串類型字首</b>
std::string std::wstring
str
strName
char*
pstr
pstrName
char[] 數組
sz
szName
結構類型
class/struct
無字首
enum
e
ePrimitiveType
在别人的基礎上修改而成