天天看点

编码规范

自己的编码有很多不规范的地方:

先规定如下:

   如下是C++的编码规范:

 1        前言        4

2        文件结构        4

2.1        版本的声明        4

位置:版本的声明位于头文件和定义文件的开头

规范:               

/*

* 文件名称:filename.h

* 摘    要:简要描述本文件的内容

*

* 当前版本:1.1

* 作    者:输入作者(或修改者)名字

* 完成日期:2007年1月29日

* 取代版本:1.0

* 原 作 者:输入原作者(或修改者)名字

* 完成日期:2001年5月10日

*/

2.2        头文件的结构        4

开始位置:

#include <math.h>                        // 引用标准库的头文件

#include “myheader.h”         // 引用非标准库的头文件

void Function1(…);                // 全局函数声明

class Box                                 // 类结构声明

{

};

#endif

2.3        定义文件的结构        5

#include “graphics.h”        // 引用头文件

// 全局变量定义体

int  gVar;

// 全局函数的实现体

void Function1(…)

}

// 类成员函数的实现体

void Box::Draw(…)

  }

2.4        目录结构        6

如果文件数目超过十个,则需要分别将头文件和定义文件保存到不同的目录,便于维护。

  例如可将头文件保存于include目录,将定义文件保存于source目录(可以是多级目录)。

3        程序结构        6

3.1        缩进        6

   cout<<"{..}之后的内容需要空两格,并保证不要使用制表符"<<endl;      

3.2        空行        6

1.类声明、函数定义之后都要空行:

void  Function(...)

   cout<<"function1"<<endl;

//需要空行

void  Function()

   cout<<"function2"<<endl;

//继续空行

2.函数体内,关系密切的语句之间不加空行,其他的地方应加空行分隔。

while (condition1)

  statement1;

  //空一行

  if(condition)

  {

    statement2;  

  else

    statement3;

  statment4;

3.3        代码行        7

1.一行代码只做一件事情,目的是为了方便注释和阅读

  int flag1;        //标记1

  int flag2;        //标记2

2.if、while、for独占一行

  if (condition)

    dosomething(); //执行体

  for (initalization;condition;update)

3.变量的定义满足"就近原则",变量的定义的同时要进行初始化

  int iWidth;     //宽度

  int iHight;     //高度

3.4        代码行内的空格        7

1.留空格的情况:

1.1.关键字之后要留空格,如 const、virtual、inline、case,if、while、for也需要留一个空格再与 ( 结合.eg: if (condition)

1.2.","之后要留空格,如 void Function(x, y, z)

  ";"如果不是一行的结束,也需要空格,for (initialization; condition; update)

1.3.赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”

等二元操作符的前后应当加空格.

2.不留空格

2.1. 函数名之后不留空格 void Function(x, y, z)

2.2. (;)                        //这种情况的话就不需要空格

2.3.一元操作符如“!”、“~”、“++”、“—”、“&”(地址运算符)等前后不加空格

2.4.对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空        格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))

3.5        对齐        8

void Function(int x)

   ...//前面空2个空格

for()

  for()

     ..//嵌套{}的情况

3.6        长行拆分        9

1.代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。

2.长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。

If ((very_longer_variable1 >= very_longer_variable12)

&& (very_longer_variable3 <= very_longer_variable14)

&& (very_longer_variable5 <= very_longer_variable16))

    dosomething();

virtual Cmatrix CmultiplyMatrix (Cmatrix leftMatrix,

                                 Cmatrix rightMatrix);

for (very_longer_initialization;

         very_longer_condition;

         very_longer_update)

        dosomething();

4        命名规则        3

1.类/结构

1.1. 类的命名推荐用"名词"或"形容词+名词"的形式,例如:"CAnalyzer", "CFastVector" ....

2.函数

2.1. 函数名应当使用"动词"或者"动词+名词"(动宾词组)的形式。例如:"GetName()", "SetValue()", "Erase()", "Reserve()" ....

 

2.2.保护成员函数 保护成员函数的开头应当加上一个下划线“_”以示区别,例如:"_SetState()" ....

2.3.私有成员函数 类似地,私有成员函数的开头应当加上两个下划线“__”,例如:"__DestroyImp()" ....

2.4.虚函数 虚函数习惯以“Do”开头,如:"DoRefresh()", "_DoEncryption()" ....

2.5.回调和事件处理函数 回调和事件处理函数习惯以单词“On”开头。例如:"_OnTimer()", "OnExit()" ....

变量

变量应该是程序中使用最多的标识符了,变量的命名规范可能是一套C++命名准则中最重要的部分:

变量的命名 变量名由 作用域前缀+类型前缀 +一个或多个单词组成。为便于界定,每个单词的首字母要大写。

对于某些用途简单明了的局部变量,也可以使用简化的方式,如:i, j, k, x, y, z ....

作用域前缀 作用域前缀标明一个变量的可见范围。作用域可以有如下几种:

前缀 说明

无 局部变量

m_ 类的成员变量(member)

sm_ 类的静态成员变量(static member)

s_ 静态变量(static)

g_ 外部全局变量(global)

sg_ 静态全局变量(static global)

gg_ 进程间共享的共享数据段全局变量(global global)

除非不得已,否则应该尽可能少使用全局变量。

类型前缀 类型前缀标明一个变量的类型,可以有如下几种:

n 整型和位域变量(number)

e 枚举型变量(enumeration)

c 字符型变量(char)

b 布尔型变量(bool)

f 浮点型变量(float)

p 指针型变量和迭代子(pointer)

pfn 特别针对指向函数的指针变量和函数对象指针(pointer of function)

g 数组(grid)

i 类的实例(instance)

对于经常用到的类,也可以定义一些专门的前缀,如:std::string和std::wstring类的前缀可以定义为"st",std::vector类的前缀可以定义为"v"等等。

类型前缀可以组合使用,例如"gc"表示字符数组,"ppn"表示指向整型的指针的指针等等。

推荐的组成形式 变量的名字应当使用"名词"或者"形容词+名词"。例如:"nCode", "m_nState","nMaxWidth" ....

5        程序必要模块        11

5.1        程序LOG        11

5.1.1        跟踪日志        11

跟踪日志是为了开发人员更好定位程序的问题,此日志只供开发人员自己使用。该类型的日志路径,一天一个文件夹,文件夹以“年月日”命名,如“2007124”。内容按如下格式填写:

信息内容:

时间:2007-1-24 13:49:25

信息:XXXXXXXXXXXX

    时间:2007-1-24 13:49:25

    信息:XXXXXXXXXXXX

5.1.2        监控日志        11

 正常日志

  正常日志文件以线程为单位,一个线程一个文件,以应用ID加上线程ID为文件名,如100001_1.log(应用ID为100001,线程ID为1),其中应用ID是事先分配(根据监控程序的配置分配),而线程ID则根据开发人员自行定义,遵循连续性原则(从1开发)。

 错误日志

 又包括数据错误和其他错误,数据库错误的文件名格式为:应用ID_年月日_dberr.log如:100001_20081224_dberr.log(应用ID为100001,时间20081224)。其他错误的文件格式为应用ID_年月日_err.log如:100001_20081224_err.log(应用ID为100001,时间20081224)。

 信息内容: