C++编码规范.docx

上传人:b****2 文档编号:3487312 上传时间:2023-05-05 格式:DOCX 页数:30 大小:25.54KB
下载 相关 举报
C++编码规范.docx_第1页
第1页 / 共30页
C++编码规范.docx_第2页
第2页 / 共30页
C++编码规范.docx_第3页
第3页 / 共30页
C++编码规范.docx_第4页
第4页 / 共30页
C++编码规范.docx_第5页
第5页 / 共30页
C++编码规范.docx_第6页
第6页 / 共30页
C++编码规范.docx_第7页
第7页 / 共30页
C++编码规范.docx_第8页
第8页 / 共30页
C++编码规范.docx_第9页
第9页 / 共30页
C++编码规范.docx_第10页
第10页 / 共30页
C++编码规范.docx_第11页
第11页 / 共30页
C++编码规范.docx_第12页
第12页 / 共30页
C++编码规范.docx_第13页
第13页 / 共30页
C++编码规范.docx_第14页
第14页 / 共30页
C++编码规范.docx_第15页
第15页 / 共30页
C++编码规范.docx_第16页
第16页 / 共30页
C++编码规范.docx_第17页
第17页 / 共30页
C++编码规范.docx_第18页
第18页 / 共30页
C++编码规范.docx_第19页
第19页 / 共30页
C++编码规范.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++编码规范.docx

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

C++编码规范.docx

C++编码规范

1.   命名规则

1.1.起个合适的名字

1.1.1.   类的名称(适用于C++)

² 类的名称要能告诉我们,这个类是什么。

因此,类的名称通常是名词。

² 类的名字不需要告诉我们,它从哪个类继承而来的。

² 有时候加个后缀是很有用的。

比如类是一个代理(Agents)时,起名叫DownloadAgent更能表达真实的意图。

1.1.2.   方法和函数的名称(适用于C/C++)

² 方法和函数通常都要执行某种行为,因此,名称要能清楚的说明它做什么:

CheckForErrors()而不是ErrorCheck(),DumpDataToFile()而不是DataFile()。

这样也可以很容易的区别函数和数据。

² 函数名总以动词开头,后面跟随其它名称。

这样看起来更自然些。

² 可以加一些必要的后缀:

Max–表示取最大值

Cnt–表示当前的计数值

Key–表示键值

例如:

RetryMax表示可接收的最大数,RetryCnt表示当前接收的数量。

² 前缀也同样有用:

Is–用于询问一些问题。

只要看到Is开头,就知道这是一个查询。

Get–用于获取一个值。

Set–用于设置一个值。

例如:

IsHitRetryLimit.

1.1.3.   含有度量单位的名称(适用于C/C++)

² 如果一个变量用于表示时间,重量或其它度量单位,应把度量单位添加到名称中,以便开发人员更早一步发现问题。

例如:

uint32mTimeoutMsecs;

uint32mMyWeightLbs;

1.1.4.   缩写名称不要全部大写(适用于C/C++)

² 无论是什么缩写名称,我们总以一个大写字母开头,后面跟随的字母全部用小写。

例如:

classFluidOz;            //而不是FluidOZ

classNetworkAbcKey;      //而不是NetworkABCKey

1.2.类的命名(适用于C++)

² 用大写字母作为单词的分隔,每个单词的首字母大写,其它字母均小写。

² 名字的第一个字母应大写

² 不含有下划线('_')

例如:

  classNameOneTwo; 

  className;

1.3.类库(或程序库)命名(适用于C/C++)

² 使用命名空间防止名字冲突。

² 如果编译器没有实现命名空间,需要用前缀来避名名字冲突,不过前缀不要过长(2个字母比较好)。

例如:

JohnJohnson完成了一个数据结构的库,它可以使用JJ作为库的前缀,所以类名就象下面这样:

  classJjLinkList

  {

  }

1.4.方法和函数的命名(适用于C++)

² 使用与类名相同的规则

例如:

  classNameOneTwo

  {

  public:

     int    DoIt();

     void   HandleError();

  }

1.5.类属性的命名(适用于C++)

² 属性(通常是非公有数据成员)名字以字母'm'开头。

² 在'm(m_)' 后面,使用与类名相同的规则。

² 'm(m_)'总是位于其它修饰符(如表示指针的'p')的前面。

例如:

  classNameOneTwo

  {

  public:

     int    VarAbc();

     int    ErrorNumber();

  private:

     int        mVarAbc;

     int        mErrorNumber;

     String*     mpName;

  }

1.6.方法和函数参数的命名(适用于C++)

² 第一个字母必须小写。

² 第一个字母后面的单词使用与类名相同的规则。

例如:

  classNameOneTwo

  {

  public:

     int    StartYourEngines(

                              Engine&rSomeEngine,

                              Engine&rAnotherEngine);

  }

1.7.局部变量的命名(适用于C/C++)

² 所有字母都用小写

² 使用下划线'_'作为单词的分隔。

例如:

  int

  NameOneTwo:

:

HandleError(interrorNumber)

  {

     int           error=OsErr();

     Time          time_of_error;

     ErrorProcessorerror_processor;

  }

1.8.指针变量的命名前缀(适用于C/C++)

² 指针变量多数情况应在前面加'p'。

² 星号'*'应靠近类型,而不是变量名。

例如:

 String*pName=newString;

 

 特别的:

String*pName,name;应分成两行来写:

 String*pName;

 String name;

1.9.引用变量和返回引用函数的命名前缀(适用于C++)

² 引用必须用'r'作前缀修饰。

例如:

  classTest

  {

  public:

     void              DoSomething(StatusInfo&rStatus);

 

     StatusInfo&       rStatus();

     constStatusInfo& Status()const;//这里返回的是常量引用,所以不符合本规则

 

  private:

     StatusInfo&       mrStatus;

  }

1.10.   全局变量的命名前缀(适用于C/C++)

² 全局变量总是以'g(g_)'作为前缀。

例如:

   Logger g_Log;

   Logger*g_pLog;

1.11.   全局常量的命名(适用于C/C++)

² 全局常量全部大写,并以下划线'_'分隔单词。

例如:

   constintA_GLOBAL_CONSTANT=5;

1.12.   静态变量的命名前缀(适用于C++)

² 静态变量以's'作为前缀。

例如:

  classTest

  {

  public:

  private:

     staticStatusInfom_sStatus;

  }

1.13.   自定义类型(typedef)的命名(适用于C/C++)

² 类型定义名称指的是用typedef定义的名称。

² 类型定义名称使用与类名相同的规则,并使用Type作为后缀。

例如:

  typedefuint16 ModuleType;

  typedefuint32 SystemType;

1.14.   宏定义的命名(适用于C/C++)

² 所有单词的字母都用大写,并使用下划线'_'分隔.

例如:

#defineMAX(a,b)blah

#defineIS_ERR(err)blah

1.15.   C函数的命名(适用于C/C++)

² C++项目中,应尽量少用C函数。

² C函数使用GNU规范,所有字母都使用小写,并用下划线'_'作为单词的分隔。

例如:

  int

  some_bloody_function()

  {

  }

² 特别的,为了赚容C/C++,在必要的时候,在C++中应以下面的格式定义C函数:

  extern“C”intsome_bloody_function();

² 或在C/C++中推荐使用下面的格式:

  #ifdef__cplusplus__

  extern“C”{

  #endif

  int

  some_bloody_function()

  {

  }

  #ifdef__cplusplus__

  }

  #endif

1.16.   枚举的命名(适用于C/C++)

² 所有字母都大写,并用下划线'_'作为单词分隔。

例如:

  enumPinStateType

  {

     PIN_OFF,

     PIN_ON

  };

enum{STATE_ERR, STATE_OPEN,STATE_RUNNING,STATE_DYING};

2.   排版规则

2.1.布局和模板

2.1.1.   类的布局模板(适用于C++)

² 请使用下面的模板来创建一个新的类:

/**     

 * 用一行来描述类

 *

 *#include"XX.h"

 *-llib

 *

 * 类的详细说明

 * 

 *@seesomething

 */

 

#ifndef SORUTION_PROJECT_CLASSNAME_H

#define SORUTION_PROJECT_CLASSNAME_H

 

// 在这里包含系统头文件

//

 

// 在这里包含项目头文件

//

 

// 在这里包含局部头文件

//

 

// 在这里放置前置引用

//

 

 

class XX

{

public:

    // 类的生命周期控制函数,如构造和析构,以及状态机

 

    /**

   *Defaultconstructor.

   */

   XX(void);

 

    /**

   *Copyconstructor.

   *

   *@paramfromThevaluetocopytothisobject.

   */

   XX(const XX&from);

 

    /**

   *Destructor.

   */

   virtual~XX(void);

 

    // 在这里放置类的运算操作符

 

    /**

   *Assignmentoperator.

   *

   *@paramfromTHevaluetoassigntothisobject.

   *

   *@returnAreferencetothisobject.

   */

   XX&                    operator=(XX&from); 

 

    // 在这里放置类的操作                      

    // 在这里放置属性存取

    // 在这里放置类的状态查询

 

protected:

private:

};

 

// 内联方法定义

//

 

// 外部引用

//

 

#endif  // SORUTION_PROJECT_CLASSNAME_H

 

² 定义的顺序是:

public,protected,private

² 要清楚public/protected/private都应该放置哪些东西

2.1.2.   源文件格式(适用于C++)

#include "XX.h"                               //classimplemented

 

 

///////////////PUBLIC///////////////////////

 

//================= 构造函数====================

 

XX:

:

XX()

{

}//XX

 

XX:

:

XX(const XX&)

{

}//XX

 

XX:

:

~XX()

{

}//~XX

 

 

//=============== 操作符=========================

 

XX&

XX:

:

operator=(XX&);

{

   return *this;

 

}//=

 

//==============类的操作=====================

//==============属性存取=====================

//==============状态查询  =====================

/////////////PROTECTED //////////////////

 

/////////////PRIVATE   //////////////////

2.1.3.   保护头文件不被重复包含(适用于C/C++)

² 应使用宏定义来保护头文件不被重复包含:

#ifndef SORUTION_PROJECT_CLASSNAME_H

#define SORUTION_PROJECT_CLASSNAME_H

 

#endif // SORUTION_PROJECT_CLASSNAME_H

 

 

² 如果使用命名空间的时候,要把命名空间加到文件名前面:

#ifndef SORUTION_PROJECT_NAMESPACE_CLASSNAME_H

#define SORUTION_PROJECT_NAMESPACE_CLASSNAME_H

 

#endif

2.1.4.   方法和函数的布局(适用于C/C++)

² 对于有较多参数的函数的写法

如果参数较多,一行写不下,我们应该分成几行来写,并且每个参数都另起一行对齐:

   int AnyMethod(

                 int  arg1, 

                 int  arg2,

                 int  arg3,

                 int  arg4);或

int AnyMethod( int  arg1 

              , int  arg2

              , int  arg3

              , int  arg4);

 

2.2.缩进、制表符以及空格(适用于C/C++)

² 缩进的时候,每一层缩进3,4,或8个空格。

(推荐使用4个空格)

² 不要使用TAB,用空格,大多数编辑器可以用空格代替TAB。

TAB应固定4个空格,因为大多数编辑器都是这么设置的。

² 虽然没有规定缩进的层次,但是4至5层是合适的。

如果缩进的层次太多,你可能需要考虑是否进行代码重构了。

例如:

   void

  func()

  {

      if (somethingbad)

     {

          if (anotherthingbad)

         {

              while (moreinput)

             {

             }

         }

     }

  }

2.3.尽量使一行不要超过78个字母(适用于C/C++)

² 有许多编辑器屏幕只有78个字母宽

2.4.保证一行只写一条语句(适用于C/C++)

² 一行最多只写一条语句

² 一行只定义一个变量

例如:

不要象下面这样:

char**a,*x;

 

intwidth,height;//widthandheightofimage

 

要象这样:

char**a=0; //文档说明

char* x=0; //文档说明

2.5.花括号{}规则(适用于C/C++)

2.5.1.   花括号的位置

² 在关键字的下一行单独放置括号,并且与关键字对齐,如:

if (condition)       

{

   ...

}

while (condition)

{

   …

}

2.5.2.   什么时候应使用花括号

所有的if,while和do语句,要么用单行格式,要么使用花括号格式。

² 使用花括号格式:

if(1==somevalue)

{

  somevalue=2;

}

² 单行格式:

if(1==somevalue)somevalue=2;

或下面这样(对于这种写法,建议使用花括号):

if(1==somevalue)

{

somevalue=2;

}

2.5.3.   在花括号结束的位置加上注释

² 在花括号结束的位置加上注释是一个好习惯。

假如前后花括号距离很远,注释就能帮你理解它是如何对应的。

如:

while

(1)

{

   if (valid)

  {

 

  } //ifvalid

   else

  {

  } //notvalid

 

} //endforever

2.5.4.   注意屏幕大小

² 一个语句块尽量不超过一个屏幕大小,这样,不要卷动屏幕就可以阅读代码。

2.6.圆括号()规则(适用于C/C++)

² 圆括号与关键字之间应放一个空格。

² 圆括号与函数名之间不要有空格。

² Return语句不要使用圆括号。

例如:

   if(condition)

   {

   }

 

   while(condition)

   {

   }

 

   strcpy(s,s1);

 

   return1;

2.7.ifelse语句的格式(适用于C/C++)

² 布局

  if(条件)              //注释

  {

  }

  elseif(条件)          //注释

  {

  }

  else                  //注释

  {

  }

² 条件格式

总是把常量放在等号或不等于号的左边:

if(6==errorNum)...

一个很重要的理由是,假如漏写一个等号,这种写法会产生一个编译错误,有助于马上发现问题。

比如:

if(errorNum==6)...

错写成:

if(errorNum=6)...//这是一个不容易发现的灾难

 

2.8.switch格式(适用于C/C++)

² 直通的case语句,应该放置一条注释说明这个case语句是直通到下一个case语句的。

² 总是要写default语句,不管是否是需要。

² 在case中需要定义变量的时候,应把所有代码放在语句块中。

例如:

switch (...)

{

case 1:

   ...

        // 继续执行case2

 

case 2:

   {       

        int v;

       ...

   }

    break;

 

default:

}

2.9.使用goto,continue,break和?

:

(适用于C/C++)

2.9.1.   Goto

² 尽量避免使用Goto语句。

一个合理使用goto语句的场合是,当你需要从多层循环中跳出。

例如:

for (...)

{

    while (...)

   {

       ...

            if (disaster)

goto error; //跳出循环

   }

}

...

error:

cleanupthemess

² 跳转的标号必须单独在一行的最左边。

Goto语句需要有相应的注释,说明它的用途。

2.9.2.   ContinueandBreak

² Continue和break实际上起到与goto一样的作用,因此,尽量少用为上。

并且,Continue与break最好不要连用。

2.9.3.   ?

:

² 用括号把条件表达式括起来。

² 不要在?

:

中写上过多的代码,操作表达式应尽可能简洁。

² 操作语句应分行写,除非它们能够简洁的放在一行当中。

例如:

  (condition)?

funct1():

func2();

  或

  (condition)

     ?

longstatement

     :

anotherlongstatement;

2.10.   运算符号的规则(适用于C/C++)

² 一元操作符如(!

、~等等)应贴近操作对象。

如:

if(!

IsOk)

return++v;

² 二元操作符如(+、*、%、==等等)应在前后留空格。

如:

if(v1==v2)

    returnv1*3;

² ++和--尽量使用前置运算。

在C++中,不管++i还是i++,总是++i更容易生成优化代码。

如:

for(inti=0;i<10;++i)

2.11.   变量声明语句块(适用于C/C++)

² 变量应该是随用随声明,不要集中在函数前(有些C语言不支持,则不在此要求之列)。

特别是在for语句的循环变量,应只在for语句中定义。

如:

for(inti=0;i<10;++i)

 

² 声明语句块必须要对齐

类型,变量,等号和初始化值要分别对齐。

例如:

  DWORD    mDword;

  DWORD*   mpDword;

  char*    mpChar;

  char     mChar;

 

  mDword   =  0;

  mpDword   =   NULL;

  mpChar    =   NULL;

  mChar    =   0;

3.   文档及注释

应当使用文档自动生成工具,来生成相关的程序文档。

3.1.文件或程序库的文档注释(适用于C/C++)

可以为整个文件编写文档。

例如:

/**@filefile.h

 *Abrieffiledescription.

 *Amoreelaboratedfiledescription.

 */

 

3.2.类文档注释(适用于C/C++)

在类定义前面应加上类说明文档。

例如:

/**WindowsNT

 * @briefWindowsNiceTry.

 * @authorBillGates

 * @authorSeveralspeciesofsmallfurryanimalsgatheredtogether

 *         ina

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2