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
//
者:输入作者(或修改者)名字
//
完成日期:2001720
//
//
取代版本:1.0
//
原作者 :输入原作者(或修改者)名字
//
完成日期:2001510
//
//////////////////////////////////////////////////////////////////


函数注释

 

对于自行编写的函数,若是系统关键函数,则须在函数实现部分的上方标明该函数的信息,格式如下:
//=====================================================================
//
名: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)
{
……
}