天天看點

編碼規範

自己的編碼有很多不規範的地方:

先規定如下:

   如下是C++的編碼規範:

 1        前言        4

2        檔案結構        4

2.1        版本的聲明        4

位置:版本的聲明位于頭檔案和定義檔案的開頭

規範:               

/*

* 檔案名稱:filename.h

* 摘    要:簡要描述本檔案的内容

*

* 目前版本:1.1

* 作    者:輸入作者(或修改者)名字

* 完成日期:2007年1月29日

* 取代版本:1.0

* 原 作 者:輸入原作者(或修改者)名字

* 完成日期:2001年5月10日

*/

2.2        頭檔案的結構        4

開始位置:

#include <math.h>                        // 引用标準庫的頭檔案

#include “myheader.h”         // 引用非标準庫的頭檔案

void Function1(…);                // 全局函數聲明

class Box                                 // 類結構聲明

{

};

#endif

2.3        定義檔案的結構        5

#include “graphics.h”        // 引用頭檔案

// 全局變量定義體

int  gVar;

// 全局函數的實作體

void Function1(…)

}

// 類成員函數的實作體

void Box::Draw(…)

  }

2.4        目錄結構        6

如果檔案數目超過十個,則需要分别将頭檔案和定義檔案儲存到不同的目錄,便于維護。

  例如可将頭檔案儲存于include目錄,将定義檔案儲存于source目錄(可以是多級目錄)。

3        程式結構        6

3.1        縮進        6

   cout<<"{..}之後的内容需要空兩格,并保證不要使用制表符"<<endl;      

3.2        空行        6

1.類聲明、函數定義之後都要空行:

void  Function(...)

   cout<<"function1"<<endl;

//需要空行

void  Function()

   cout<<"function2"<<endl;

//繼續空行

2.函數體内,關系密切的語句之間不加空行,其他的地方應加空行分隔。

while (condition1)

  statement1;

  //空一行

  if(condition)

  {

    statement2;  

  else

    statement3;

  statment4;

3.3        代碼行        7

1.一行代碼隻做一件事情,目的是為了友善注釋和閱讀

  int flag1;        //标記1

  int flag2;        //标記2

2.if、while、for獨占一行

  if (condition)

    dosomething(); //執行體

  for (initalization;condition;update)

3.變量的定義滿足"就近原則",變量的定義的同時要進行初始化

  int iWidth;     //寬度

  int iHight;     //高度

3.4        代碼行内的空格        7

1.留白格的情況:

1.1.關鍵字之後要留白格,如 const、virtual、inline、case,if、while、for也需要留一個空格再與 ( 結合.eg: if (condition)

1.2.","之後要留白格,如 void Function(x, y, z)

  ";"如果不是一行的結束,也需要空格,for (initialization; condition; update)

1.3.指派操作符、比較操作符、算術操作符、邏輯操作符、位域操作符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”

等二進制操作符的前後應當加空格.

2.不留白格

2.1. 函數名之後不留白格 void Function(x, y, z)

2.2. (;)                        //這種情況的話就不需要空格

2.3.一進制操作符如“!”、“~”、“++”、“—”、“&”(位址運算符)等前後不加空格

2.4.對于表達式比較長的for語句和if語句,為了緊湊起見可以适當地去掉一些空        格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))

3.5        對齊        8

void Function(int x)

   ...//前面空2個空格

for()

  for()

     ..//嵌套{}的情況

3.6        長行拆分        9

1.代碼行最大長度宜控制在70至80個字元以内。代碼行不要過長,否則眼睛看不過來,也不便于列印。

2.長表達式要在低優先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行适當的縮進,使排版整齊,語句可讀。

If ((very_longer_variable1 >= very_longer_variable12)

&& (very_longer_variable3 <= very_longer_variable14)

&& (very_longer_variable5 <= very_longer_variable16))

    dosomething();

virtual Cmatrix CmultiplyMatrix (Cmatrix leftMatrix,

                                 Cmatrix rightMatrix);

for (very_longer_initialization;

         very_longer_condition;

         very_longer_update)

        dosomething();

4        命名規則        3

1.類/結構

1.1. 類的命名推薦用"名詞"或"形容詞+名詞"的形式,例如:"CAnalyzer", "CFastVector" ....

2.函數

2.1. 函數名應當使用"動詞"或者"動詞+名詞"(動賓詞組)的形式。例如:"GetName()", "SetValue()", "Erase()", "Reserve()" ....

 

2.2.保護成員函數 保護成員函數的開頭應當加上一個下劃線“_”以示差別,例如:"_SetState()" ....

2.3.私有成員函數 類似地,私有成員函數的開頭應當加上兩個下劃線“__”,例如:"__DestroyImp()" ....

2.4.虛函數 虛函數習慣以“Do”開頭,如:"DoRefresh()", "_DoEncryption()" ....

2.5.回調和事件處理函數 回調和事件處理函數習慣以單詞“On”開頭。例如:"_OnTimer()", "OnExit()" ....

變量

變量應該是程式中使用最多的辨別符了,變量的命名規範可能是一套C++命名準則中最重要的部分:

變量的命名 變量名由 作用域字首+類型字首 +一個或多個單詞組成。為便于界定,每個單詞的首字母要大寫。

對于某些用途簡單明了的局部變量,也可以使用簡化的方式,如:i, j, k, x, y, z ....

作用域字首 作用域字首标明一個變量的可見範圍。作用域可以有如下幾種:

字首 說明

無 局部變量

m_ 類的成員變量(member)

sm_ 類的靜态成員變量(static member)

s_ 靜态變量(static)

g_ 外部全局變量(global)

sg_ 靜态全局變量(static global)

gg_ 程序間共享的共享資料段全局變量(global global)

除非不得已,否則應該盡可能少使用全局變量。

類型字首 類型字首标明一個變量的類型,可以有如下幾種:

n 整型和位域變量(number)

e 枚舉型變量(enumeration)

c 字元型變量(char)

b 布爾型變量(bool)

f 浮點型變量(float)

p 指針型變量和疊代子(pointer)

pfn 特别針對指向函數的指針變量和函數對象指針(pointer of function)

g 數組(grid)

i 類的執行個體(instance)

對于經常用到的類,也可以定義一些專門的字首,如:std::string和std::wstring類的字首可以定義為"st",std::vector類的字首可以定義為"v"等等。

類型字首可以組合使用,例如"gc"表示字元數組,"ppn"表示指向整型的指針的指針等等。

推薦的組成形式 變量的名字應當使用"名詞"或者"形容詞+名詞"。例如:"nCode", "m_nState","nMaxWidth" ....

5        程式必要子產品        11

5.1        程式LOG        11

5.1.1        跟蹤日志        11

跟蹤日志是為了開發人員更好定位程式的問題,此日志隻供開發人員自己使用。該類型的日志路徑,一天一個檔案夾,檔案夾以“年月日”命名,如“2007124”。内容按如下格式填寫:

資訊内容:

時間:2007-1-24 13:49:25

資訊:XXXXXXXXXXXX

    時間:2007-1-24 13:49:25

    資訊:XXXXXXXXXXXX

5.1.2        監控日志        11

 正常日志

  正常日志檔案以線程為機關,一個線程一個檔案,以應用ID加上線程ID為檔案名,如100001_1.log(應用ID為100001,線程ID為1),其中應用ID是事先配置設定(根據監控程式的配置配置設定),而線程ID則根據開發人員自行定義,遵循連續性原則(從1開發)。

 錯誤日志

 又包括資料錯誤和其他錯誤,資料庫錯誤的檔案名格式為:應用ID_年月日_dberr.log如:100001_20081224_dberr.log(應用ID為100001,時間20081224)。其他錯誤的檔案格式為應用ID_年月日_err.log如:100001_20081224_err.log(應用ID為100001,時間20081224)。

 資訊内容: