首页 软件开发过程编码C++编码规范(Ver1.1)

软件开发过程编码C++编码规范(Ver1.1)

举报
开通vip

软件开发过程编码C++编码规范(Ver1.1) 文件编号:CEG011-1 C++编码规范 (Ver1.1) 文件修改控制 修改记录编号 修改 状态 修改页码及条款 修改人 审核人 批准人 修改日期 1 A 3、变量命名规范,增加“静态变量作用域”范围前缀 张军 刘德启 张进 2002.4.18 2 A 3、变量命名规范,增加“short”类型前缀 张军 刘德启 张进 2002.4.18 3 M 四、函数编写规范,修改缩进规则 张军 刘德启 张进 4 M 3、变量命名规范,在“当变...

软件开发过程编码C++编码规范(Ver1.1)
文件编号:CEG011-1 C++编码规范 (Ver1.1) 文件修改控制 修改 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 编号 修改 状态 修改页码及条款 修改人 审核人 批准人 修改日期 1 A 3、变量命名规范,增加“静态变量作用域”范围前缀 张军 刘德启 张进 2002.4.18 2 A 3、变量命名规范,增加“short”类型前缀 张军 刘德启 张进 2002.4.18 3 M 四、函数编写规范,修改缩进规则 张军 刘德启 张进 4 M 3、变量命名规范,在“当变量作为函数参数使用时,必须如下使用范围前缀”中将“必须”改为“建议”。 张军 刘德启 张进 2002.4.18 5 A 在变量类型前缀的附注中增加“2、除以上规定外,WIN32变量的类型前缀的命名请尽量与微软的命名风格一致。” 张军 刘德启 张进 2002.4.18 6 M 在实例命名规范的示例中修改UN_MAP_INFO *m_pNextMapInfo; ST_LINK_LIST g_CurrentLinkList; 为 UN_MAP_INFO *m_punNextMapInfo; ST_LINK_LIST g_stCurrentLinkList; 张军 刘德启 张进 2002.4.18 目 录 4一、命名规范 41、一般规范 42、文件命名规范 43、变量命名规范 54、实例命名规范 65、函数数命名规范 76、类命名规范 77、其他命名规范 77.1、常量 77.2、联合体 77.3、结构体 77.4、宏 87.5、枚举 8二、注释规范 81、一般规范 82、常量、变量和宏的注释 93、结构体和联合体的注释 94、函数的注释 105、文件头部注释 116、语句注释 11三、文件编写规范 12四、函数编写规范 121、函数划分 122、函数缩进 133、其他 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-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 s short 16-bit Integer sLength 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 f float float Variable fSpeedRate d double double Variable dSpeedRate st struct struct Variable stParaInfo un union union Variable unWeekDay fp FILE* file pointer fpTime c const const [VariableType] Variable cnVariable sz char * null-terminated string szVariable pv void * Pointer to void type pvVariable 注: 1、当变量作为函数参数使用时,建议如下使用范围前缀: i _:输入参数 o_:输出参数 io_:输入输出参数 例: void CHash::Compute(int* io_pnData,int i_nLen,int* o_pnRet); 2、除以上规定外,WIN32变量的类型前缀的命名请尽量与微软的命名风格一致。 4、实例命名规范 · 这里的实例主要指类、结构体和联合体的实例。 · 实例命名格式必须为: 范围前缀+[p]+[辅助信息]+含义标识 其中,范围前缀同变量的范围前缀,辅助信息主要说明实例的一些具体信息,含义标识指对应类、结构体或联合体的含义标识或其缩写,若实例为指针形式必须加p。 例: CH263Encoder *m_pH263Encoder; CConfigDlg g_NewConfigDlg; UN_MAP_INFO *m_punNextMapInfo; ST_LINK_LIST g_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 实际使用时必须加进范围前缀和辅助信息等。 例: HWND g_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”后。 例:class CICDLinkList{ }; class CAPNLinkList{ }; 7、其他命名规范 7.1、常量 · 常量名中所有字母必须大写,单词间必须用“_”相隔。 例:const int A_GLOBAL_CONSTANT= 5; 7.2、联合体 · 联合体类型命名的规则必须是: 联合体名=UN_+含义标识。 · 联合体含义标识中所有字母必须大写,单词间必须用“_”相隔。 7.3、结构体 · 结构体类型命名的规则必须是: 结构体名=ST_+含义标识。 · 结构体含义标识中所有字母必须大写,单词间必须用“_”相隔。 7.4、宏 · 所有字母必须大写,单词间必须用“_”相隔。 · 例:define ENCODING_TIME_TESTING 7.5、枚举 · 枚举名必须加前缀EN_且枚举名中所有字母必须大写,单词间必须用“_” 相隔。 · 枚举的成员变量所有字母必须大写,单词间必须用“_”相隔 · 例: enum EN_PIN_STATE{PIN_OFF, PIN_ON}; enum { STATE_ERR, STATE_OPEN, STATE_RUNNING, STATE_DYING}; 二、注释规范 1、一般规范 · 注释的目的必须是解释代码的目的、功能和采用的方法,提供代码以外 的信息,帮助读者理解代码,禁止没必要的重复注释信息。 · 注释必须语言简炼、易懂而又准确, 所采用的语种必须按“日文--英文-- 中文”从高到低的优先级顺序进行选择。 · 单行注释必须用双斜杠进行注释,多行注释必须用/* */进行注释,注释 内容最好放在对应代码的上方。 · 注释与前面的执行语句之间必须空一行。 · 必须边写代码边注释,修改代码同时修改相应的注释,以保证注释与代 码的一致性。 · 注释行数(不包括程序头和函数头说明部分)必须占总行数的 1/5 到 1/3 。 2、常量、变量和宏的注释 · 在常量、变量(临时变量除外)和宏的 声明 无利益冲突声明中华医学会杂志社职业健康检查不够规范教育部留学服务中心亲友住房声明 前必须对其作适当注释, 注 释说明的要点是: •被保存值的含义(必须) •合法取值的范围(可选) •与其它数据,函数或模块的关系(可选) 例: // default quantilizer level,from 1 to 31. const int DEFAULT_QL=8 // number of gob,12 for CIF and 3 for QCIF . int nGob; 3、结构体和联合体的注释 · 对结构体或联合体的注释要点必须是: •它描述的对象是什么(必须) •对其分量应按变量注释要求加以注释(必须) •与其它数据, 函数或模块的关系(可选) · 例: //3D Point( nPosX , nPosY , nPosZ ) typedef struct ST_ THREED_ PT_TAG{ int nPosX; //x Position int nPosY; //y Position int nPosZ; //z Position } ST_THREED_ PT; 4、函数的注释 · 对于比较重要的函数或方法必须在其声明处作适当注释, 说明该函数的 功能及各参数的含义,注释模版如下: // Get data pointer of sub image short* GetSubImageData (int i_nLeft, // Left position of sub image . int i_nTop, // Top position of sub image . WORD i_wWidth, // Width of sub image . · WORD i_wHeight); // Height of sub image . · 对于自行编写的函数,若是系统关键函数,必须在函数实现部分的上方 标明该函数的信息,格式如下: (中文版) /*************************************************** * 函数名 : * 功能描述 : * 返回值 : * 参数 :(名称,含义,取值说明) * 作者 : * 时间 : * 修改记录 :(修改序号,修改记录,时间,修改人员) ****************************************************/ //(将函数的简单描述放在这里) (英文版) /**************************************************** * Function Name : * Description : * Return Value : * Parameters :(Name,Description,Value) * Author : * Date : * Change log :(ID, Date,Author ,Description ) ****************************************************/ //(Here is the Tip) 注:1、在修改记录栏必须按时间先后顺序自下往上排列。 2、注释文本每行的跨度禁止超过上下条纹框的范围,换行时必须以冒号 所在位置为准进行左对齐。 · 例: /******************************************************************** * Function Name : CBufferList::AllocateMemory * Description : Allocate a memory block and store its address to BufferList. * Return type : void* * Argument : int nNumberofByte :Byte numbers of memory block. BOOL bLogFlag :If true,then write log file. * Author : Tom() * Date : 2001-9-27 * Change log : $$$ Revision 1.2, 2001-12-15,Robert() Modified to be suitable to the new coding rules $$$ Revision 1.1, 2001-10-07,Tom() Replace the Classs-CListItem with new struct-ST_ITEM ************************************************************************************/ 5、文件头部注释 在文件头部必须加注释表明该文件的一些信息,其格式如下: (中文版) /************************************************ (版权所有,,200X- 200X) * 文件名 : * 版本 : * 功能描述 : * 创建日期 : * 作者 : * 修改记录 : (序号,修改说明,日期,修改人) *************************************************/ (英文版) /*********************************************************** (Copyright (c) 200X- 200X ICD Co.,Ltd.,) * File Name : * Version Number : * Description : * Date : * Author : * Change log :( ID, Date,Author, Description,) *********************************************************/ 注: •必须在版本栏中保留以前的信息,格式如:1.0/0.8/0.7。 •在修改记录栏必须按时间先后顺序自下往上排列。 •修改记录中必须特别注明修改了哪些函数。 •注释文本每行的跨度禁止超过上下条纹框的范围,换行时必须以冒号所在位置为准进行左对齐。 例: /*************************************************************************** (Copyright (c) 2001- 2002 ICD Co.,Ltd.,) * File Name : BufferList.cpp * Version Number : 2.0/1.0 * Description : Source file for CBufferList. To allocate and free memory block safely. * Author : Tom(tom@.com) * Date : 2001-9-27 * Change log : $$$ Revision 2.1, 2001-12-15,Robert(robert @.com) Modified to be suitable to the new coding rules in all functions. $$$ Revision 1.1, 2001-10-07,Tom(tom@.com) Replace the CListItem with new struct-ST_ITEM in SetLogOn(). ***************************************************************************/ 6、语句注释 · 对语句的注释必须放在其上方相邻位置,不要放在下面。 · 在程序块的结束行右方最好加注释标记,以表明某程序块的结束。 · 过长的函数实现,最好将其语句按实现的功能分段加以概括性说明. · 必须对不易理解的分枝条件表达式加注释. 三、文件编写规范 · 头文件的构成: 1、头文件的头部注释 2、防止重复包含的宏: #ifndef _文件名_扩展名 #define _文件名_扩展名 3、包含文件部分(系统头文件、项目头文件、本地头文件)(可选) 4、宏定义部分(可选) 5、类型定义部分(可选) 6、结构体定义部分(可选) 7、函数或类的声明部分 8、防止重复包含的宏:#endif · 源文件的构成: 1、源文件的头部注释 2、包含文件部分(系统头文件、项目头文件、本地头文件)(可选) 3、宏定义部分(可选) 4、类型定义部分(可选) 5、结构体定义部分(可选) 6、函数或类的定义部分 注:包含文件时禁止使用绝对路径。 四、函数编写规范 1、函数划分 · 良好的函数划分,必须能够自顶向下逐级抽象地展现设计思想, 提高程 序的易读性和自说明性。 · 函数必须是按功能划分的, 每个函数必须只做一件事情(高内聚准则)。 · 相关的一组函数之间的关联必须尽可能少(低耦合准则)。 · 在不破坏高内聚准则和低耦合准则前提下, 一个函数代码长度最好不超 过100行。 2、函数缩进 · 必须以4个空格键来表示一个缩进单位。 · 在不影响展示程序结构的前提下最好尽可能地减少缩进的层次. · 可以使用如下两种缩进风格: (以if为例) (1) if ( expression ) { statements //缩进四格 } else { statements //缩进四格 } (2) if ( expression ){ statements //缩进四格 } else{ statements //缩进四格 } · 在出现缩进限制时,最好遵循如下表示规范: (1) 过长的条件表达式(以if举例): if (expression1 && (expression2 //缩进四格 || expression3) //缩进八格 && expression4 ) //缩进四格 { statements //缩进四格 } (2) 过长的函数原型说明: OBcObject * OB_DLLPASFUNC FunctionName ( //缩进四格 Type1 Parameter1, // the paramter means is written here //缩进八格 Type2 Parameter2, // ... //缩进八格 ...... ); //缩进四格 (3) 过长的函数调用: OBcObject *pObject = FunctionName //缩进四格 ( //缩进八格 parameter1, parameter2, ... ); if ( FunctionName ( //缩进八格 parameter1, parameter2, ... ) == 0 && expression... ) //缩进四格 { } 3、其他 · 函数的输入参数和输出参数必须少于5个,当参数过多时,可以考虑将 参数定义为一个结构体,并且将结构体指针作为参数。 · 禁止将函数的参数作为工作变量。(将函数的参数作为工作变量,有可 能错误地改变参数内容。对必须改变的参数,最好先用局部变量代替之, 最后再将该局部变量的内容赋给该参数。) · 对于超过3句以上的语句反复调用,最好封装为函数调用。 · 提供给外部使用的函数,禁止使用全局变量交换数据。 五、变量和常量使用规范 · 不要将全部变量的声明放在函数开始处,变量必须在离其第一次使用的 位置最近的地方声明。 · 最好不使用全局变量。 · 定义变量时要注意区分其有无符号,无符号的变量必须加上unsigned。 · 必须尽量使用整型变量代替浮点型变量。 · 禁止对浮点型变量进行相等比较。 · 所有变量必须在使用前进行初始化。 · 最好不使用malloc(), calloc()和realloc()而使用new来为变量分配空间。 · 定义常量必须用const 或 enum,禁止使用#define。 · 最好用声明的常量代替代码中的经常出现的数字。 · 必须将常量定义在尽可能小的范围内。 例: const unsigned int MAX_FOOS = 1000; const unsigned int MAX_FOO_BUFFERS = 40; class foo { public: enum { MAX_INSTANCES = 1000; } ... private: enum { MAX_FOO_BUFFERS = 40; } ... }; 六、其他类型的使用规范 · 禁止在结构体和联合体中定义成员函数。 · 禁止使用预定义宏来实现函数的功能,如果想提高函数调用的速度,可 以将其定义为内联函数(inline关键字) 七、类的编写规范 · 在类中最好避免定义public 和protected 型成员变量,可以用public或 protected 型的成员函数GetXXX()和SetXXX()来代替。 · 最好将类中的一些简单函数(如取成员变量值的函数,激活其他函数的 函数)定义成内联函数。 · 最好不要将函数的定义放在类中。 · 必须将类中不影响该类成员变量值的成员函数定义为常函数类型(使用 const关键字)。 · 禁止在类的构造函数和析构函数中使用全局的对象或变量。 八、可移植性规范 · 最好将平台相关的代码统一放在一个文件里。 · 最好利用typedef声明预定义的数据类型,避免直接使用预定义的数据 类型。 · 必须注意数据类型长度的平台相关性,如int类型在不同的环境下有16 位和32位之分。 · 必须注意int, long, short, float, double 等数据类型在不同的环境下字节 的排列顺序不同。 · 最好使用预编译头: 如果您的代码可以在多个操作系统及多个编译程序中共享, 一个预编译头文件是必不可少的, 该文件用来标识当前所用的操作系统、编译程序、CPU类型下的本地特征,如下以MS-DOS,WIN16,WIN32,Solaris2.x,HPUX,IRIS操作系统、Borland C++ 2.0以上,Microsoft C/C++ 7.0以上, AT&T C++2.0以上UNIX编译器和INTEL,HP,SGI,SPARC机为平台的源码级共享所需的预编译头. #ifndef __compmacr_h #define __compmacr_h // begin the file COMPMACR.H 94.12.11 #ifndef __cplusplus #error This is not a C++ compiler #endif #ifdef hpux #define ENVIRONMENT 1 // indicate the environment has been defined #define CPPATT 200 // AT&T C++ above version 2.0 #define BYTEREVERT 1 // the numeric byte order is revert with ISO #define OS_HPUX // this is hp machine & OS #ifndef UNIX // it is unix OS #define UNIX #endif #endif #ifdef _SGI_SOURCE #define ENVIRONMENT 1 // indicate the environment has been defined #define CPPATT 200 // AT&T C++ above version 2.0 #define BYTEREVERT 0 // the numeric byte order is same as ISO #define OS_SGI // this is SGI machine & OS #define OS_IRIS // this is SGI machine & OS #ifndef UNIX // it is unix OS #define UNIX #endif #endif #ifdef sun #define ENVIRONMENT 1 // indicate the environment has been defined #define CPPATT 200 // AT&T C++ above version 2.0 #ifdef sparc // if is SPARC CPU #define BYTEREVERT 0 // the numeric byte order is same as ISO #else // if is other type CPU #define BYTEREVERT 1 // the numeric byte order is revert with ISO #endif #include // use errno.h to find OS version #if !defined(ENOSYS) || ENOSYS==90 #define OS_Solaris1x // this is SunOS 4.x or Solaris 1.x OS #endif #if ENOSYS==89 #define OS_Solaris2x // this is SunOS 5.x or Solaris 2.x OS #endif #ifndef UNIX // it is unix OS #define UNIX #endif #endif #ifdef __TURBOC__ #define ENVIRONMENT 1 // indicate the environment has been defined #define CPPTURBO 200 // Turbo or Borland C++ above version 2.0 #define BYTEREVERT 1 // the numeric byte order is revert with ISO #ifdef __MSDOS__ #define OS_DOS // this is MS-DOS OS #endif #ifdef _Windows #define OS_WIN16 // this is MS-Windows 3.x 16bit OS #endif #endif #ifdef _MSC_VER #define ENVIRONMENT 1 // indicate the environment has been defined #define CPPMSC 700 // Microsoft C/C++ above version 7.0 #ifdef MSDOS #define OS_DOS // this is MS-DOS OS #define BYTEREVERT 1 // the numeric byte order is revert with ISO #endif #ifdef _WINDOWS #define OS_WIN16 // this is MS-Windows 3.x 16bit OS #endif #endif #if !defined(ENVIRONMENT)|| !defined(BYTEREVERT) #error the header file does not support the compiler #endif // end the COMPMACR.H #endif 九、其他规范 · 程序提交以后对其进行修改时必须将旧语句用/* */或//注释掉,不能自 行删除或修改,对修改情况必须在文件修改记录中加以记载。 · 禁止在程序中使用GOTO语句。 1 第17页/共17页
本文档为【软件开发过程编码C++编码规范(Ver1.1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_677394
暂无简介~
格式:doc
大小:271KB
软件:Word
页数:17
分类:互联网
上传时间:2018-09-07
浏览量:15