天天看點

編碼規範

<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>&gt;</b><b>),後不應加空格。</b>

說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。

示例:

(1) 逗号、分号隻在後面加空格。

int a, b, c;

(2)比較操作符, 指派操作符"="、 "+=",算術操作符"+"、"%",邏輯操作符"&amp;&amp;"、"&amp;",位域操作符"&lt;&lt;"、"^"等雙目操作符的前後加空格。

if (current_time &gt;= MAX_TIME_VALUE)

a = b + c;

a *= 2;

a = b ^ 2;

(3)"!"、"~"、"++"、"--"、"&amp;"(位址運算符)等單目操作符前後不加空格。

*p = 'a';        // 内容操作"*"與内容之間

flag = !isEmpty; // 非操作"!"與内容之間

p = &amp;mem;        // 位址操作"&amp;" 與内容之間

i++;             // "++","--"與内容之間

(4)"-&gt;"、"."前後不加空格。

p-&gt;id = pid;     // "-&gt;"指針前後不加空格

(5) if、for、while、switch等與後面的括号間應加空格,使if等關鍵字更為突出、明顯。

正确寫法:

        if (a &lt; 0)

{

       return;

}

        while(a &lt; 0)

       a++;

錯誤寫法:

        if (a &lt; 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, /**&lt; enum value TVal1. */ 

          TVal2, /**&lt; enum value TVal2. */ 

          TVal3 /**&lt; enum value TVal3. */ 

         }

       *enumPtr, /**&lt; enum pointer. Details. */

       enumVar; /**&lt; 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

 在别人的基礎上修改而成

繼續閱讀