自己的編碼有很多不規範的地方:
先規定如下:
如下是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)。
資訊内容: