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

先规定如下:

 

   如下是C++的编码规范:
 1        前言        4
2        文件结构        4
2.1        版本的声明        4

位置:版本的声明位于头文件和定义文件的开头
规范:               
/*
* 文件名称:filename.h
* 摘    要:简要描述本文件的内容
*
* 当前版本:1.1
* 作    者:输入作者(或修改者)名字
* 完成日期:2007年1月29日
*
* 取代版本:1.0
* 原 作 者:输入原作者(或修改者)名字
* 完成日期:2001年5月10日
*/

        
2.2        头文件的结构        4
开始位置:
/*
* 文件名称:filename.h
* 摘    要:简要描述本文件的内容
*
* 当前版本:1.1
* 作    者:输入作者(或修改者)名字
* 完成日期:2007年1月29日
*
* 取代版本:1.0
* 原 作 者:输入原作者(或修改者)名字
* 完成日期:2001年5月10日
*/
#include <math.h>                        // 引用标准库的头文件

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

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

class Box                                 // 类结构声明
{

};
#endif

2.3        定义文件的结构        5
开始位置:
/*
* 文件名称:filename.h
* 摘    要:简要描述本文件的内容
*
* 当前版本:1.1
* 作    者:输入作者(或修改者)名字
* 完成日期:2007年1月29日
*
* 取代版本:1.0
* 原 作 者:输入原作者(或修改者)名字
* 完成日期:2001年5月10日
*/
#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)
  {
    dosomething(); //执行体
  }
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)。
 信息内容:
时间:2007-1-24 13:49:25
信息:XXXXXXXXXXXX
    时间:2007-1-24 13:49:25
    信息:XXXXXXXXXXXX

posted on 2009-02-16 18:15  蚂蚁跳楼  阅读(300)  评论(0编辑  收藏  举报