C/C++編程規范
|適用范圍|
本標準適用于利用Visul C++ ,Borland C++,GNC進行軟件程序開發的人員。
一.變量命名
變量風格:匈牙利命名法
變量盡量采用匈牙利命名法,一般情況下,變量的取名方式為:
[范圍前綴_],[類型前綴_],[限定詞]。
特殊的類型命名,前綴表示類、接口
前綴 類型 例子 備注
Lm Class LmObject 表示類型本身
不與范圍前綴結合使用
I Interface 接口 IUnknown
注:類名前綴改為Lm,對于非全局的類最好有語義表示其所屬模塊。類的實例命名與類名大致相同,只是類名語義表示類的通用含義,而類名表示此實例的具體語義。
如類名LmSketPoint表示草圖點的類定義,而它的兩個實例 _StartPoint,_EndPoint分別代表起點和終點的語義。類的實例命名帶上前綴_。
特殊約定:
a. MouseTool的派生類的前綴為_Mt.
b. 對話框類的前綴為CDlg.
c. 橡皮條類的前綴為_Rb.
范圍前綴
前綴 類型 例子 備注
g_ 全局作用域 g_Servers
m_ 成員變量 m_pDoc,
l_ 局部作用域 l_strName 少用
注:編程時盡量少用全程變量,對于全程變量還應在類型前綴后加上如下關鍵字:
特征模塊 : Fea
草圖模塊 : Sket
裝配模塊 : Asm
工程圖模塊 : Lay
曲面模塊 : Surf
界面模塊 : Ui
類型前綴
常用的一般數據類型的前綴表示:
前綴 類型 內存規格描述 例子
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 (當特定類型未知時,在過程中所使用的) 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和函數定義之間。
常量和宏定義必須全部以大寫字母來撰寫,中間可根據意義的連續性用下劃線連接,每一條定義的右側必須有一簡單的注釋,說明其作用;
資源名字定義格式:
菜單: IDM_XX
位圖: IDB_XX
對話框: IDD_XX
字符串: IDS_XX
DLGINIT: DIALOG_XX
ICON: IDR_XX
三.函數命名
函數原型說明包括引用外來函數及內部函數,外部引用必須在右側注明函數來源: 模塊名及文件名, 如是內部函數,只要注釋其定義文件名;
第一個字母必須使用大寫字母,要求用大小寫字母組合規范函數命名,必要時可用下劃線間隔,
示例如下:
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
四.結構體命名
結構體類型命名必須全部用大寫字母,原則上前面以下劃線開始;
結構體變量命名必須用大小寫字母組合,第一個字母必須使用大寫字母,必要時可用下劃線間隔。
對于私有數據區,必須注明其所屬的進程。
全局數據定義只需注意其用途。
示例如下:
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;
五.結構化編碼約定
文件頭部注釋
文件頭部注釋主要是表明該文件的一些信息,其格式如下:
//////////////////////////////////////////////////////////////////
//
// Copyright (c) 2001,XXX公司技術開發部
// All rights reserved.
//
// 文件名稱:filename.h
// 文件標識:見配置管理計劃書
// 摘 要:簡要描述本文件的內容
//
// 當前版本:1.1
// 作 者:輸入作者(或修改者)名字
// 完成日期:2001年7月20日
//
// 取代版本:1.0
// 原作者 :輸入原作者(或修改者)名字
// 完成日期:2001年5月10日
//
//////////////////////////////////////////////////////////////////
函數注釋
對于自行編寫的函數,若是系統關鍵函數,則須在函數實現部分的上方標明該函數的信息,格式如下:
//=====================================================================
// 函 數 名:InsureHasOutputInfo
// 功能描述:確保有適當的輸出信息
// 輸入參數:nProductID:相應的產品ID
// 輸出參數:void
// 創建日期:2002-2-21
// 修改日期:2002-2-21
// 作 者:***
// 附加說明:
//=====================================================================
程序注釋
在程序中重要的地方寫下注釋,在代碼行后邊寫下。
if(condition1)
{
while(condition2) //注釋
{
x=x+y; //注釋。
…..
}
}
代碼縮進
每一個嵌套的函數塊,使用一個TAB縮進(設定為4個空格),大括號必須放在條件語句的下一行,單獨成一行,便于匹對反大括號應該在單獨的一行,在大多數情況下反擴號應有注釋內容。
舉例如下:
if(condition1)
{
while(condition2)
{
…..
…..
}//end while(condition2)
}//end if (condition1)
如果是case
switch (value)
{
case 1:
break;
case 2:
break;
default :
break;
} //end switch (value)
鏈環if:
if (a=1)
{
…..
}
else if (a=2)
{
….
}
else if (a=3)
{
……..
}
else if (a=4)
{
……
}