C++编码规范Ver11.docx

上传人:b****6 文档编号:7797957 上传时间:2023-01-26 格式:DOCX 页数:23 大小:28.05KB
下载 相关 举报
C++编码规范Ver11.docx_第1页
第1页 / 共23页
C++编码规范Ver11.docx_第2页
第2页 / 共23页
C++编码规范Ver11.docx_第3页
第3页 / 共23页
C++编码规范Ver11.docx_第4页
第4页 / 共23页
C++编码规范Ver11.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C++编码规范Ver11.docx

《C++编码规范Ver11.docx》由会员分享,可在线阅读,更多相关《C++编码规范Ver11.docx(23页珍藏版)》请在冰豆网上搜索。

C++编码规范Ver11.docx

C++编码规范Ver11

文件编号:

CEG011-1

 

C++编码规范

(Ver1.1)

 

文件修改控制

修改记录编号

修改

状态

修改页码及条款

修改人

审核人

批准人

修改日期

1

A

3、变量命名规范,增加“静态变量作用域”范围前缀

张军

刘德启

张进

2002.4.18

2

A

3、变量命名规范,增加“short”类型前缀

张军

刘德启

张进

2002.4.18

3

M

四、函数编写规范,修改缩进规则

张军

刘德启

张进

2002.4.18

4

M

3、变量命名规范,在“当变量作为函数参数使用时,必须如下使用范围前缀”中将“必须”改为“建议”。

张军

刘德启

张进

2002.4.18

5

A

在变量类型前缀的附注中增加“2、除以上规定外,WIN32变量的类型前缀的命名请尽量与微软的命名风格一致。

张军

刘德启

张进

2002.4.18

6

M

在实例命名规范的示例中修改UN_MAP_INFO*m_pNextMapInfo;

ST_LINK_LISTg_CurrentLinkList;

UN_MAP_INFO*m_punNextMapInfo;

ST_LINK_LISTg_stCurrentLinkList;

张军

刘德启

张进

2002.4.18

目录

一、命名规范4

1、一般规范4

2、文件命名规范4

3、变量命名规范4

4、实例命名规范5

5、函数数命名规范6

6、类命名规范7

7、其他命名规范7

7.1、常量7

7.2、联合体7

7.3、结构体7

7.4、宏7

7.5、枚举8

二、注释规范8

1、一般规范8

2、常量、变量和宏的注释8

3、结构体和联合体的注释9

4、函数的注释9

5、文件头部注释10

6、语句注释11

三、文件编写规范11

四、函数编写规范12

1、函数划分12

2、函数缩进12

3、其他13

五、变量和常量使用规范14

六、其他类型的使用规范14

七、类的编写规范15

八、可移植性规范15

九、其他规范17

术语说明:

必须:

解释为必须严格遵循的要求。

最好:

解释为建议遵循的要求。

可以:

解释为可以选择遵循的要求。

禁止:

解释为必须严格禁止遵循的要求。

一、命名规范

1、一般规范

∙C++命名规范包括文件命名规范和标识命名规范。

∙标识是指C++语言中语法对象的名字,包括常量名、变量名、函数名、类和类型名及预处理名等,标识名的基本语法必须是以字母开始,由字母、数字及下划线组成的单词。

∙标识名最好分为两部分:

标识前缀+含义标识。

∙标识前缀必须由1个或多个不超过3个字母的缩写词组成。

在有些情况下标识名中可以不含标识前缀。

∙含义标识按其应用的含义可以由一个或多个词组成.含义标识中的词最好不缩写,除非这种缩写比较通用,禁止在同一系统中对同一单词使用不同的表示法(如全写和缩写均使用).缩写词在书写时最好全部大写.

2、文件命名规范

∙文件名必须由前缀和后缀组成,最好采用长文件命名格式。

∙文件名必须用英文字母表达,禁止使用中文。

∙对于几个单词组合表达的文件名,每个单词第一个字母必须大写。

∙源文件后缀格式可以为.cpp或.cxx,头文件后缀格式可以为:

.h,.hxx。

例:

ScreenCapturer.h,H263Encoder.cpp

∙每一个类最好都有一个头文件和源文件,头文件和源文件的前缀必须与类名相对应。

例:

类CBufferControl对应BufferControl.h,BufferControl.cpp

类CVideoFrame对应VideoFrame.h,VideoFrame.cpp

3、变量命名规范

∙变量命名格式必须是:

变量名=++

范围前缀类型前缀含义标识

∙范围前缀的取名必须遵照下表:

前缀

类型

例子

g_

全局作用域

g_Servers

m_

成员变量

m_pDoc,

l_

局部作用域

l_strName

s_

静态变量作用域

s_strName

注:

局部作用域前缀可以省略不用

∙类型前缀的取名必须遵照下表:

前缀

类型

描述

例子

ch

char

8-bitcharacter

chGrade

ch

TCHAR

16-bitcharacterif_UNICODEisdefined

chName

b

BOOL

Booleanvalue

bEnabled

n

int

Integer(sizedependentonoperatingsystem)

nLength

n

UINT

Unsignedvalue(sizedependentonoperatingsystem)

nLength

s

short

16-bitInteger

sLength

w

WORD

16-bitunsignedvalue

wPos

l

LONG

32-bitsignedinteger

lOffset

dw

DWORD

32-bitunsignedinteger

dwRange

p

*

Ambientmemorymodelpointer

pDoc

lp

FAR*

Farpointer

lpDoc

lpsz

LPSTR

32-bitpointertocharacterstring

lpszName

lpsz

LPCSTR

32-bitpointertoconstantcharacterstring

lpszName

lpsz

LPCTSTR

32-bitpointertoconstantcharacterstringif_UNICODEisdefined

lpszName

h

handle

HandletoWindowsobject

hWnd

lpfn

(*fn)()

callbackFarpointertoCALLBACKfunction

lpfnAbort

f

float

floatVariable

fSpeedRate

d

double

doubleVariable

dSpeedRate

st

struct

structVariable

stParaInfo

un

union

unionVariable

unWeekDay

fp

FILE*

filepointer

fpTime

c

const

const[VariableType]Variable

cnVariable

sz

char*

null-terminatedstring

szVariable

pv

void*

Pointertovoidtype

pvVariable

注:

1、当变量作为函数参数使用时,建议如下使用范围前缀:

i_:

输入参数

o_:

输出参数

io_:

输入输出参数

例:

voidCHash:

:

Compute(int*io_pnData,inti_nLen,int*o_pnRet);

2、除以上规定外,WIN32变量的类型前缀的命名请尽量与微软的命名风格一致。

4、实例命名规范

∙这里的实例主要指类、结构体和联合体的实例。

∙实例命名格式必须为:

范围前缀+[p]+[辅助信息]+含义标识

其中,范围前缀同变量的范围前缀,辅助信息主要说明实例的一些具体信息,含义标识指对应类、结构体或联合体的含义标识或其缩写,若实例为指针形式必须加p。

例:

CH263Encoder*m_pH263Encoder;

CConfigDlgg_NewConfigDlg;

UN_MAP_INFO*m_punNextMapInfo;

ST_LINK_LISTg_stCurrentLinkList;

∙常用Windows对象名称缩写

Windows对象

例子变量

MFC类

例子对象

WND

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;

CButton*

pBtn;

CEdit*

pEdit;

CListBox*

pListBox;

CComboBox*

pComboBox

实际使用时必须加进范围前缀和辅助信息等。

例:

HWNDg_hMainWnd,g_hChildWnd;

CBitmap*m_pOldBitmap;

CBitmap*m_pNewBitmap;

5、函数数命名规范

∙类成员函数命名规则最好是:

函数名=函数的含义标识

∙其他函数命名规则最好是:

函数名=范围前缀_+函数返回值类型+函数的含义标识

∙函数名的范围前缀可以用来表明函数所属的模块类别。

例:

ui_nShowErrorMsg(),ui表明该函数属于界面模块。

∙函数的含义标识必须能反映函数实现的功能。

∙函数的含义标识中第一个字母必须大写。

∙对于几个单词组合表达的函数的含义标识,每个单词第一个字母必须大

写。

例1:

CheckForErrors()优于ErrorCheck(),

DumpDataToFile()优于DataFile().

例2:

IsHitRetryLimit(),

RetryMax(),

RetryCnt()等函数名切实反映了其实现的功能

6、类命名规范

∙类名中第一个字母必须为大写“C”。

∙对于几个单词组合表达的类名,每个单词第一个字母必须大写。

例:

用CTransmitter而不用Transmitter。

∙在类名中最好通过使用前缀来防止类名冲突,前缀可以由2个或2个以

上的唯一字符组成,前缀必须放在大写字母“C”后。

例:

classCICDLinkList{};

classCAPNLinkList{};

7、其他命名规范

7.1、常量

∙常量名中所有字母必须大写,单词间必须用“_”相隔。

例:

constintA_GLOBAL_CONSTANT=5;

7.2、联合体

∙联合体类型命名的规则必须是:

联合体名=UN_+含义标识。

∙联合体含义标识中所有字母必须大写,单词间必须用“_”相隔。

7.3、结构体

∙结构体类型命名的规则必须是:

结构体名=ST_+含义标识。

∙结构体含义标识中所有字母必须大写,单词间必须用“_”相隔。

7.4、宏

∙所有字母必须大写,单词间必须用“_”相隔。

∙例:

defineENCODING_TIME_TESTING

7.5、枚举

∙枚举名必须加前缀EN_且枚举名中所有字母必须大写,单词间必须用“_”

相隔。

∙枚举的成员变量所有字母必须大写,单词间必须用“_”相隔

∙例:

enumEN_PIN_STATE{PIN_OFF,PIN_ON};

enum{STATE_ERR,STATE_OPEN,

STATE_RUNNING,STATE_DYING};

二、注释规范

1、一般规范

∙注释的目的必须是解释代码的目的、功能和采用的方法,提供代码以外

的信息,帮助读者理解代码,禁止没必要的重复注释信息。

∙注释必须语言简炼、易懂而又准确,所采用的语种必须按“日文--英文--

中文”从高到低的优先级顺序进行选择。

∙单行注释必须用双斜杠进行注释,多行注释必须用/**/进行注释,注释

内容最好放在对应代码的上方。

∙注释与前面的执行语句之间必须空一行。

∙必须边写代码边注释,修改代码同时修改相应的注释,以保证注释与代

码的一致性。

∙注释行数(不包括程序头和函数头说明部分)必须占总行数的1/5到

1/3。

2、常量、变量和宏的注释

∙在常量、变量(临时变量除外)和宏的声明前必须对其作适当注释,注

释说明的要点是:

•被保存值的含义(必须)

•合法取值的范围(可选)

•与其它数据,函数或模块的关系(可选)

例:

//defaultquantilizerlevel,from1to31.

constintDEFAULT_QL=8

//numberofgob,12forCIFand3forQCIF.

intnGob;

3、结构体和联合体的注释

∙对结构体或联合体的注释要点必须是:

•它描述的对象是什么(必须)

•对其分量应按变量注释要求加以注释(必须)

•与其它数据,函数或模块的关系(可选)

∙例:

//3DPoint(nPosX,nPosY,nPosZ)

typedefstructST_THREED_PT_TAG{

intnPosX;//xPosition

intnPosY;//yPosition

intnPosZ;//zPosition

}ST_THREED_PT;

4、函数的注释

∙对于比较重要的函数或方法必须在其声明处作适当注释,说明该函数的

功能及各参数的含义,注释模版如下:

 

//Getdatapointerofsubimage

short*GetSubImageData(inti_nLeft,//Leftpositionofsubimage.

inti_nTop,//Toppositionofsubimage.

WORDi_wWidth,//Widthofsubimage.

WORDi_wHeight);//Heightofsubimage.

∙对于自行编写的函数,若是系统关键函数,必须在函数实现部分的上方

标明该函数的信息,格式如下:

(中文版)

/***************************************************

*函数名:

*功能描述:

*返回值:

*参数:

(名称,含义,取值说明)

*作者:

*时间:

*修改记录:

(修改序号,修改记录,时间,修改人员)

****************************************************/

//(将函数的简单描述放在这里)

(英文版)

/****************************************************

*FunctionName:

*Description:

*ReturnValue:

*Parameters:

(Name,Description,Value)

*Author:

*Date:

*Changelog:

(ID,Date,Author,Description)

****************************************************/

//(HereistheTip)

注:

1、在修改记录栏必须按时间先后顺序自下往上排列。

2、注释文本每行的跨度禁止超过上下条纹框的范围,换行时必须以冒号

所在位置为准进行左对齐。

∙例:

/********************************************************************

*FunctionName:

CBufferList:

:

AllocateMemory

*Description:

AllocateamemoryblockandstoreitsaddresstoBufferList.

*Returntype:

void*

*Argument:

intnNumberofByte:

Bytenumbersofmemoryblock.

BOOLbLogFlag:

Iftrue,thenwritelogfile.

*Author:

Tom()

*Date:

2001-9-27

*Changelog:

$$$Revision1.2,2001-12-15,Robert()

Modifiedtobesuitabletothenewcodingrules

$$$Revision1.1,2001-10-07,Tom()

ReplacetheClasss-CListItemwithnewstruct-ST_ITEM

************************************************************************************/

5、文件头部注释

在文件头部必须加注释表明该文件的一些信息,其格式如下:

(中文版)

/************************************************

(版权所有,,200X-200X)

*文件名:

*版本:

*功能描述:

*创建日期:

*作者:

*修改记录:

(序号,修改说明,日期,修改人)

*************************************************/

(英文版)

/***********************************************************

(Copyright(c)200X-200XICDCo.,Ltd.,)

*FileName:

*VersionNumber:

*Description:

*Date:

*Author:

*Changelog:

(ID,Date,Author,Description,)

*********************************************************/

注:

•必须在版本栏中保留以前的信息,格式如:

1.0/0.8/0.7。

•在修改记录栏必须按时间先后顺序自下往上排列。

•修改记录中必须特别注明修改了哪些函数。

•注释文本每行的跨度禁止超过上下条纹框的范围,换行时必须以冒号所在位置为准进行左对齐。

例:

/***************************************************************************

(Copyright(c)2001-2002ICDCo.,Ltd.,)

*FileName:

BufferList.cpp

*VersionNumber:

2.0/1.0

*Description:

SourcefileforCBufferList.

Toallocateandfreememoryblocksafely.

*Author:

Tom(tom@.com)

*Date:

2001-9-27

*Changelog:

$$$Revision2.1,2001-12-15,Robert(robert@.com)

Modifiedtobesuitabletothenewcodingrulesinallfunctions.

$$$Revision1.1,2001-10-07,Tom(tom@.com)

ReplacetheCListItemwithnewstruct-ST_ITEMinSetLogOn().

***************************************************************************/

 

6、语句注释

∙对语句的注释必须放在其上方相邻位置,不要放在下面。

∙在程序块的结束行右方最好加注释标记,以表明某程序块的结束。

∙过长的函数实现,最好将其语句按实现的功能分段加以概括性说明.

∙必须对不易理解的分枝条件表达式加注释.

三、文件编写规范

∙头文件的构成:

 

1、头文件的头部注释

2、防止重复包含的宏:

#ifndef_文件名_扩展名

#define_文件名_扩展名

3、包含文件部分(系统头文件、项目头文件、本地头文件)(可选)

4、宏定义部分(可选)

5、类型定义部分(可选)

6、结构体定义部分(可选)

7、函数或类的声明部分

8、防止重复包含的宏:

#endif

∙源文件的构成:

 

1、源文件的头部注释

2、包含文件部分(系统头文件、项目头文件、本地头文件)(可选)

3、宏定义部分(可选)

4、类型定义部分(可选)

5、结构体定义部分(可选)

6、函数或类的定义部分

注:

包含文件时禁止使用绝对路径。

四、函数编写规范

1、函数划分

∙良好的函数划分,必须能够自顶向下逐级抽象地展现设计思想,提高程

序的易读性和自说明性。

∙函数必须是按功能划分的,每个函数必须只做一件事情(高内聚准则)。

∙相关的一组函数之间的关联必须尽可能少(低耦合准则)。

∙在

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1