C/C++編程規(guī)范
|適用范圍|
本標(biāo)準(zhǔn)適用于利用Visul C++ ,Borland C++,GNC進(jìn)行軟件程序開發(fā)的人員。
一.變量命名
變量風(fēng)格:匈牙利命名法
變量盡量采用匈牙利命名法,一般情況下,變量的取名方式為:
[范圍前綴_],[類型前綴_],[限定詞]。
特殊的類型命名,前綴表示類、接口
前綴 類型 例子 備注
Lm Class LmObject 表示類型本身
不與范圍前綴結(jié)合使用
I Interface 接口 IUnknown
注:類名前綴改為Lm,對于非全局的類最好有語義表示其所屬模塊。類的實例命名與類名大致相同,只是類名語義表示類的通用含義,而類名表示此實例的具體語義。
如類名LmSketPoint表示草圖點的類定義,而它的兩個實例 _StartPoint,_EndPoint分別代表起點和終點的語義。類的實例命名帶上前綴_。
特殊約定:
a. MouseTool的派生類的前綴為_Mt.
b. 對話框類的前綴為CDlg.
c. 橡皮條類的前綴為_Rb.
范圍前綴
前綴 類型 例子 備注
g_ 全局作用域 g_Servers
m_ 成員變量 m_pDoc,
l_ 局部作用域 l_strName 少用
注:編程時盡量少用全程變量,對于全程變量還應(yīng)在類型前綴后加上如下關(guān)鍵字:
特征模塊 : Fea
草圖模塊 : Sket
裝配模塊 : Asm
工程圖模塊 : Lay
曲面模塊 : Surf
界面模塊 : Ui
類型前綴
常用的一般數(shù)據(jù)類型的前綴表示:
前綴 類型 內(nèi)存規(guī)格描述 例子
ch Char 8-bit character chGrade
ch TCHAR 16-bit character if _UNICODE is defined chName
b BOOL Boolean value bEnabled
n Int Integer (size dependent on operating system) nLength
n UINT Unsigned value (size dependent on operating system) nLength
w WORD 16-bit unsigned value wPos
l LONG 32-bit signed integer lOffset
dw DWORD 32-bit unsigned integer dwRange
p * Ambient memory model pointer pDoc
lp FAR* Far pointer lpDoc
lpsz LPSTR 32-bit pointer to character string lpszName
lpsz LPCSTR 32-bit pointer to constant character string lpszName
lpsz LPCTSTR 32-bit pointer to constant character string if _UNICODE is defined lpszName
h handle Handle to Windows object hWnd
lpfn (*fn)() callbackFar pointer to CALLBACK function lpfnAbort
常用Windows對象名稱縮寫
這些名稱縮寫很多情況下可直接使用,直接作變量的名稱。
Windows 對象 例子變量 MFC類 例子對象
HWND hWnd; CWnd* pWnd;
HDLG hDlg; CDialog* pDlg;
HDC hDC; CDC* pDC;
HGDIOBJ hGdiObj; CGdiObject* pGdiObj;
HPEN hPen; CPen* pPen;
HBRUSH hBrush; CBrush* pBrush;
HFONT hFont; CFont* pFont;
HBITMAP hBitmap; CBitmap* pBitmap;
HPALETTE hPalette; CPalette* pPalette;
HRGN hRgn; CRgn* pRgn;
HMENU hMenu; CMenu* pMenu;
HWND hCtl; CStatic* pStatic;
HWND hCtl; CButton* pBtn;
HWND hCtl; CEdit* pEdit;
HWND hCtl; CListBox* pListBox;
HWND hCtl; CComboBox* pComboBox;
控件前綴
控件類型 前綴 例子
3D Panel Pnl pnlGroup
ADO Data Ado adoBiblio
Animated button Ani aniMailBox
Check box Chk chkReadOnly
Combo box, drop-down list box Cbo cboEnglish
Command button Cmd cmdExit
Common dialog Dlg dlgFileOpen
Communications Com comFax
Control (當(dāng)特定類型未知時,在過程中所使用的) Ctr ctrCurrent
Data Dat datBiblio
Data-bound combo box Dbcbo dbcboLanguage
Data-bound grid Dbgrd dbgrdQueryResult
Data-bound list box Dblst dblstJobType
Data combo Dbc dbcAuthor
Data grid Dgd dgdTitles
Data list Dbl dblPublisher
Data repeater Drp drpLocation
Date picker Dtp dtpPublished
Directory list box Dir dirSource
Drive list box Drv drvTarget
File list box Fil filSource
Flat scroll bar Fsb fsbMove
Form Frm frmEntry
Frame Fra fraLanguage
Gauge Gau gauStatus
Graph Gra graRevenue
Grid Grd grdPrices
Hierarchical flexgrid flex flexOrders
Horizontal scroll bar Hsb hsbVolume
Image img imgIcon
Image combo imgcbo imgcboProduct
ImageList Ils ilsAllIcons
Label Lbl lblHelpMessage
Lightweight check box lwchk lwchkArchive
Lightweight combo box lwcbo lwcboGerman
Lightweight command button lwcmd lwcmdRemove
Lightweight frame lwfra lwfraSaveOptions
Lightweight horizontal scroll bar lwhsb lwhsbVolume
Lightweight list box lwlst lwlstCostCenters
Lightweight option button lwopt lwoptIncomeLevel
Lightweight text box lwtxt lwoptStreet
Lightweight vertical scroll bar lwvsb lwvsbYear
Line Lin linVertical
List box Lst lstPolicyCodes
ListView Lvw lvwHeadings
MAPI message mpm mpmSentMessage
MAPI session mps mpsSession
MCI mci mciVideo
Menu mnu mnuFileOpen
Month view mvw mvwPeriod
MS Chart Ch chSalesbyRegion
MS Flex grid msg msgClients
MS Tab mst mstFirst
OLE container Ole oleWorksheet
Option button opt optGender
Picture box pic picVGA
Picture clip clp clpToolbar
ProgressBar prg prgLoadFile
Remote Data Rd rdTitles
RichTextBox Rtf rtfReport
Shape shp shpCircle
Slider Sld sldScale
Spin spn spnPages
StatusBar Sta staDateTime
SysInfo sys sysMonitor
TabStrip tab tabOptions
Text box Txt txtLastName
Timer tmr tmrAlarm
Toolbar Tlb tlbActions
TreeView Tre treOrganization
UpDown upd updDirection
Vertical scroll bar vsb vsbRate
二.常量命名和宏定義
常量和宏定義必須具有一定的實際意義,常量和宏定義在#include和函數(shù)定義之間。
常量和宏定義必須全部以大寫字母來撰寫,中間可根據(jù)意義的連續(xù)性用下劃線連接,每一條定義的右側(cè)必須有一簡單的注釋,說明其作用;
資源名字定義格式:
菜單: IDM_XX
位圖: IDB_XX
對話框: IDD_XX
字符串: IDS_XX
DLGINIT: DIALOG_XX
ICON: IDR_XX
三.函數(shù)命名
函數(shù)原型說明包括引用外來函數(shù)及內(nèi)部函數(shù),外部引用必須在右側(cè)注明函數(shù)來源: 模塊名及文件名, 如是內(nèi)部函數(shù),只要注釋其定義文件名;
第一個字母必須使用大寫字母,要求用大小寫字母組合規(guī)范函數(shù)命名,必要時可用下劃線間隔,
示例如下:
void UpdateDB_Tfgd (TRACK_NAME); //Module Name :r01/sdw.c
void PrintTrackData (TRACK_NAME); //Module Name :r04/tern.c
void ImportantPoint (void); //Module Name :r01/sdw.c
void ShowChar (int , int , chtype); //Local Module
void ScrollUp_V (int , int); //Local Module
四.結(jié)構(gòu)體命名
結(jié)構(gòu)體類型命名必須全部用大寫字母,原則上前面以下劃線開始;
結(jié)構(gòu)體變量命名必須用大小寫字母組合,第一個字母必須使用大寫字母,必要時可用下劃線間隔。
對于私有數(shù)據(jù)區(qū),必須注明其所屬的進(jìn)程。
全局?jǐn)?shù)據(jù)定義只需注意其用途。
示例如下:
typedef struct
{
char szProductName[20];
char szAuthor[20];
char szReleaseDate[16];
char szVersion[10];
unsigned long MaxTables;
unsigned long UsedTables;
}DBS_DATABASE;
DBS_DATABASE GdataBase;
五.結(jié)構(gòu)化編碼約定
文件頭部注釋
文件頭部注釋主要是表明該文件的一些信息,其格式如下:
//////////////////////////////////////////////////////////////////
//
// Copyright (c) 2001,XXX公司技術(shù)開發(fā)部
// All rights reserved.
//
// 文件名稱:filename.h
// 文件標(biāo)識:見配置管理計劃書
// 摘 要:簡要描述本文件的內(nèi)容
//
// 當(dāng)前版本:1.1
// 作 者:輸入作者(或修改者)名字
// 完成日期:2001年7月20日
//
// 取代版本:1.0
// 原作者 :輸入原作者(或修改者)名字
// 完成日期:2001年5月10日
//
//////////////////////////////////////////////////////////////////
函數(shù)注釋
對于自行編寫的函數(shù),若是系統(tǒng)關(guān)鍵函數(shù),則須在函數(shù)實現(xiàn)部分的上方標(biāo)明該函數(shù)的信息,格式如下:
//=====================================================================
// 函 數(shù) 名:InsureHasOutputInfo
// 功能描述:確保有適當(dāng)?shù)妮敵鲂畔?/span>
// 輸入?yún)?shù):nProductID:相應(yīng)的產(chǎn)品ID
// 輸出參數(shù):void
// 創(chuàng)建日期:2002-2-21
// 修改日期:2002-2-21
// 作 者:***
// 附加說明:
//=====================================================================
程序注釋
在程序中重要的地方寫下注釋,在代碼行后邊寫下。
if(condition1)
{
while(condition2) //注釋
{
x=x+y; //注釋。
…..
}
}
代碼縮進(jìn)
每一個嵌套的函數(shù)塊,使用一個TAB縮進(jìn)(設(shè)定為4個空格),大括號必須放在條件語句的下一行,單獨成一行,便于匹對反大括號應(yīng)該在單獨的一行,在大多數(shù)情況下反擴(kuò)號應(yīng)有注釋內(nèi)容。
舉例如下:
if(condition1)
{
while(condition2)
{
…..
…..
}//end while(condition2)
}//end if (condition1)
如果是case
switch (value)
{
case 1:
break;
case 2:
break;
default :
break;
} //end switch (value)
鏈環(huán)if:
if (a=1)
{
…..
}
else if (a=2)
{
….
}
else if (a=3)
{
……..
}
else if (a=4)
{
……
}