软件编码规范

更新时间:2023-11-25 21:20:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件编码规范C++版 Ver1.1(草稿) 项目: 时间: 编号:

天正软件编码规范

一、 命名规范

1、 通则

1.1、 在所有命名中,都应使用标准的英文单词或缩写,避免使用汉语拼音。 1.2、 所有命名都应遵循达意原则,即名称应含义清晰、明确。 1.3、 所有命名都不易过长,在可表达清晰的前提下越简洁越好。 1.4、 所有命名都应尽量使用全称。

1.5、 在类型名称特别复杂的时候,应使用typedef来定义别名。

2、 标识符

2.1、 标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基

本可以理解的缩写,避免使人产生误解。(较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写)

如下单词的常用缩写

application app argument arg average avg block blk buffer buf command cmd control ctrl database db delete del description desc dialog dlg dictionary dict dimension dim distance dist document doc entity ent escape esc flag flg increase inc information info length len VC++中常用控件缩写 Animate ani Check Box chk ComboBox cmb Edit edt Group Box grp ListBox lst Picture pic 更恰当: int iFlag

HMODULE hLoadedSysRsc

library lib manager mgr memory mem message msg object obj password pwd picture pic ployline pline pointer ptr position pos record rec reference ref resource rsc screen scr server srv source src system sys temp tmp text txt version ver window wnd Progress prg Push Button btn Radio Button rad Scroll Bar sb Slider sld Static stc Tab Control tab

不恰当: int iFlg

HMODULE hLoadedSystemResource

2.2、 长的标识符应使用缩写来缩短长度,而特短的标识符应该避免使用缩写。

北京天正工程软件有限公司 Beijing Tangent Engineering Software Co. Ltd.

1

软件编码规范C++版 Ver1.1(草稿) 项目: 时间: 编号:

2.3、 变量和封装体命名中单词或缩写的第一个字母应大写,其它字母小写,单

词和单词之间直接连接,不得有其它字符。在宏定义中全部用大写,单词与单词之间必须用下划线连接。

正确:

TempResource #define REG_KEY

错误:

Temp_Resource temp_resource tempresource #define Reg_Key

2.4、 除了编译开关/头文件等特殊应用,应避免使用_EXAMPLE_TEST_之类以

下划线开始和结尾的定义。

2.5、 对于变量命名,禁止取单个字符(如i、j、k...),命名除了要有具体含义

外,还能表明其变量类型、数据类型等,但i、j、k等作局部循环变量是允许的。

2.6、 命名时,如果需要进一步分类时,分类属性应放在前面。

正确:

CListBox m_wndLstFonts;

CComboBox m_wndCmbColors;

错误:

CListBox m_wndFontsLst;

CComboBox m_wndColorsCmb;

2.7、 命名中若使用特殊约定或缩写,则要有注释说明。(应该在源文件的开始

之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明)

2.8、 在命名规范中没有规定到的地方,才可以使用自己特有的命名风格,要自

始至终保持一致,不可来回变化。

2.9、 除非必要,不要用数字或较奇怪的字符来定义标识符。

正确:

#define EXAMPLE_TEST TestLockDriver

错误:

#define EXAMPLE_0 Test123

2.10、 在同一软件产品内,应规划好接口部分标识符的命名,防止编译、链接

时产生冲突,可在普通标识基础上加上模块标识。

示例:

在TGRX模块中可定义为 CTGRxObject g_rxRegistry 在TGDB模块中可定义为 CTGDbBlockRecord g_dbGlobal 在TGGui模块中可定义为 CTGUiFrameWnd g_uiCmdMgr

2.11、 命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比

如有关STL的代码应使用STL中的全小写加下划线的风格,有关MFC的代码则使用大小写混排的方式。

3、 封装体

3.1、 采用前缀和以大写开头的英文单词或缩写组成,即:前缀 + 标识符。

简写 类型 说明 C class 类 S struct 结构体 E enum 枚举 U union 联合体

示例:

class CTree {}; struct SResBuf {}; enum ESeekType {}; union UResVal{};

4、 变量

4.1、 变量命名应遵循匈牙利记法,即:前缀 + 类型 + 标识符。 4.2、 前缀

简写 类型 说明

m_ class member 类的成员变量 s_ static variable 静态全局变量

示例:

m_arsName m_lFilePos s_cConfig s_iLoopTimes

2

北京天正工程软件有限公司 Beijing Tangent Engineering Software Co. Ltd.

软件编码规范C++版 Ver1.1(草稿) 项目: 时间: 编号:

g_ global variable 普通全局变量 注意:

1、 struct/union中的成员变量不加前

缀,即:类型 + 标识符

2、 const成员变量应使用k + 标识符

3、 enum中的成员应使用k + 标识符

g_hResouce g_sModuleName

struct STreeData {

HICON hTreeIcon; TCHAR szTreeName; };

class CVector3d {

const CVector3d kIdentity; const CVector3d kXAxis; }

enum EDirection {

kLeft, kRight, };

enum EErrorStatus {

kOk,

kOutOfMemory, };

4.3、 类型

基本类型

简写 类型 说明 by byte 字节 b bool 布尔型 n short 短整型 n UINT 无符号整型 i int 整型 l long 长整型 w WORD 双字节 dw DWORD 四字节 f float 浮点数 d double 双精度数 ch char 字符型

sz char[] 以0结尾的字符串 cr COLORREF color ref

psz LPCTSTR const char*字符串指针 psz LPTSTR char*字符串指针 wnd window 窗口类 fn function 函数 p pointer 指针 ar array 数组 lst list 链表 map map 影射 e enum 枚举 u union 联合

c struct 一般的结构体 c class 一般的类 注意:

1、 有的类型可以组合以表示复杂的数

据类型,即:主数据类型 + 修饰类型

示例:

byte byVal; BYTE byVal; bool bVal; BOOL bVal; short nVal; SHORT nVal;

UINT nVal; CUIntArray arnVal; int iVal; INT iVal;

long lVal; LONG iVal; ULONG lVal; WORD wVal; WORD g_wVal; DWORD dwVal; DWORD m_dwVal; float fVal; float& fVal; double dVal; double* pdVal; char chVal; TCHAR chVal;

char szName[5]; TCHAR szName[5] COLORREF crBackground; LPCTSTR pszName;

LPTSTR pszName = new TCHAR[5]; CButton wndOk; CToolBar wndTBar WNDPROC pfnProc;

void* pUnknown; LPCTSTR pszKey; CStringArray arsVal; CPtrList lstpVal;

CMapPtrToPtr mapVal; enum EFileType eFileType; union UResval cVal; struct STreeData cData; class CStudent cXiaoMing;

void** ppVal;

CStringArray arsNames; LPCTSTR pszName;

3

北京天正工程软件有限公司 Beijing Tangent Engineering Software Co. Ltd.

软件编码规范C++版 Ver1.1(草稿) 项目: 时间: 编号:

2、 字符串指针char*、const char*应使

用LPTSTR、LPCTSTR替代 3、 在类型前加const,命名约定不变 Windows / VC++ / MFC类型 s CString 字符串

dc CDC 设备环境对象 bmp CBitmap 位图 pen CPen 画笔 br CBrush 画刷 fnt CFont 字体 rgn CRgn 区域

imglst CImageList 图片列表 mnu CMenu 菜单 pt CPoint 点 vt vector 向量 mat matrix 矩阵 sz CSize 尺寸 rc CRect 矩形 tm CTime 时间 pos POSITION 位臵 h handle 句柄类 p smart point 智能指针 AutoCAD / ObjectARX类型

pt ads_point ads点 ent ads_name ads实体 ss ads_name ads选择集 mat ads_matrix ads矩阵 d ads_real ads实数 rb struct resbuf ads链表 pt AcGePoint2d/3d 点 vt AcGeVector2d/3d 向量 sc AcGeScale2d/3d 比例 mat AcGeMatrix2d/3d 矩阵 ext AcDbExtents 边界 id AcDbObjectId id ar AcArray 数组 tol AcGeTol 误差

LPCTSTR pszVal; LPTSTR pszVal; CString sFileName; CClientDC dcMem; CBitmap bmpLogo; CPen penRed; CBrush brBlue; CFont fntArial; CRgn rgnClip;

CImageList imglstIcons; CMenu mnuPopup;

CPoint ptPosition; POINT ptMouse vector vtVal;

matrix matTransform; CSize szNormal;

CRect rcClient; RECT rcDefault; CTime tmCurrent; POSITION posStart;

HDC hDC; HTREEITEM hParent; _com_ptr_t<…> pInterface; ads_point ptStart; ads_name entLine; ads_name ssPickSet;

ads_matrix matTransform; ads_real dDistance; struct resbuf rbXData; AcGePoint3d ptPosition; AcGeVector2d vtDirection; AcGeScale3d scZoom; AcGeMatrix2d matRotate AcDbExtents extView; AcDbObjectId idEnt;

AcDbVoidPtrArray arpSubEntity; AcGeTol tolTemp;

5、 函数

5.1、 推荐使用动宾结构。函数名应清晰反映函数的功能、用途,见名知意。

常见的函数命名开始:

Init_, Open_, Create_, Get_, Set_, Read_, Load_, Write_, Start_, Stop_, Check_, Test_, Fill_, Process_, Sort_, Do_, Select_, Is_, Exist_,

5.2、 函数名每个单词或缩写的第一个字母必须大写。

正确:

void DoJig()

BOOL IsEmpty();

错误:

void DO_JIG(); void Do_Jig();

6、 宏

6.1、 使用单词或单词缩写,所有字母大写,单词之间使用_分隔。

6.2、 在定义类似函数或变量的宏时例外,可参照函数或变量的命名规范。

北京天正工程软件有限公司 Beijing Tangent Engineering Software Co. Ltd.

4

软件编码规范C++版 Ver1.1(草稿) 项目: 时间: 编号:

示例:

#define IsZero(dVal) (fabs(dVal) < EPS)

#define g_rxRegistry AcRxRegistry::cast(g_cGlobal.GetRegistry())

7、 文件名

7.1、 文件名每个单词或缩写的第一个字母必须大写。

7.2、 文件的命名也应达到见名知意,能够反映该文件所包含的内容。

7.3、 如果文件中仅包含一个主要封装体的相关内容,则该文件名应使用封装体

的名称。

8、 控件ID和窗口对象

8.1、 控件ID的命名应采用全部大写,各式为:IDC_控件类型缩写_标识符。 8.2、 控件窗口对象的命名应在窗口类型后加控件类型缩写。

常用控件命名列表:

文本Static IDC_STC_XXX m_wndStcXxx Picture IDC_PIC_XXX m_wndPicXxx 编辑框Edit IDC_EDT_XXX m_wndEdtXxx ComboBox IDC_CMB_XXX m_wndCmbXxx Group Box IDC_GRP_XXX m_wndGrpXxx Push Button IDC_BTN_XXX m_wndBtnXxx Radio Button IDC_RAD_XXX m_wndRadXxx Check Box IDC_CHK_XXX m_wndChkXxx List Box IDC_LST_XXX m_wndLstXxx Scroll Bar IDC_SCR_XXX m_wndScrXxx Spin IDC_SPN_XXX m_wndSpnXxx Progress IDC_PRG_XXX m_wndPrgXxx Slider IDC_SLD_XXX m_wndSldXxx Tab Ctrl IDC_TAB_XXX m_wndTabXxx List Ctrl IDC_LST_XXX m_wndLstXxx Tree Ctrl IDC_TRE_XXX m_wndTreXxx Animate IDC_ANM_XXX m_wndAnmXxx

二、 编写规范

1、 通则

1.1、 尽量使用标准库函数和公共函数。

1.2、 只能有唯一的声明和实现,提供包含使用。 1.3、 不要随意定义全局变量,尽量使用局部变量。

1.4、 全局变量和函数应放到命名空间中或静态类中或声明成静态函数。 1.5、 程序结构清晰,简单易懂,单个函数的程序行数尽量短。 1.6、 变量使用时要注意越界。

1.7、 字符串操作应该支持处理UNICODE。 1.8、 使用指针之前要做有效性判断。

2、 源文件

2.1、 在源文件(.h / .cpp)的开头应包含一段格式统一的说明,至少包括以下内

容:版权说明、文件名称、版本号、作者、生成时间、文件功能用途说明、维护记录。

北京天正工程软件有限公司 Beijing Tangent Engineering Software Co. Ltd.

5

本文来源:https://www.bwwdw.com/article/mfkt.html

Top