C++编程规范(上)

 
第一章文件声明
【规则1-1 头文件和定义文件的说明
       在头部声明文件的基本信息。
1) 文件名
2) 简要说明该文件的作用
3) 版本信息,原作者和编辑作者,建立日期或最后修改日期
/*********************************************************************
* File: MathGraph.h ,    interface defination of CMathGraph
* Abstract: CMathGraph is a class for drawing various kinds of
*            math plot,histogram, etc
*
* Current Version: 1.0
* Coder: Dai Jun
* Last Edited: 2006-Dec-11
*
* First Finish: 2006-Dec-11
* First Coder: Dai Jun
**********************************************************************/
 
【规则1-2 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
#ifndef    MATHGRAPH_H // 防止mathgraph.h被重复引用
#define    MATHGRAPH_H
 …………程序正文
 #endif
 
【规则1-3 用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
【规则1-4 用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
 
【建议】尽量避免使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。若要使用全局变量,建议在独立的头文件中定义以方便查找。
 
2程序的版式
空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍不得用空行。
2.1代码行,空行及空格
【规则2-1-1 在每个类声明之后、每个函数定义结束之后都要加空行。
void Function1(…)
{
 …
}
// 空行
void Function2(…)
{
 …
}
 
【规则2-1-2 在一个函数体内,逻揖上密切相关的语句之间不加空行,不同功能的程序块之间应加空行分隔。参见示例
//空行
void Function()
{
   数值计算程序段 ;
   //空行
   数值输出程序段;
}
 
【规则2-1-3 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。
   
int width;    // 宽度
int height;   // 高度
int depth;    // 深度
 
【规则2-1-4 if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}, 这样可以防止书写失误。
    for (initialization; condition; update)
{
dosomething();
}
// 空行
other();
 
【建议2-1-5 尽量在定义变量的同时初始化该变量(就近原则)
如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如
int width = 10;     // 定义并初绐化width
 
【规则2-1-6 函数名之后不要留空格,紧跟左括号‘(’
 
【规则2-1-7 ‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。
 
【规则2-1-8 ‘,’之后要留空格,如Function(x, y, z)。如果‘;’不是一行的结束符号,其后要留空格,如for (initialization; condition; update)。
 
【规则2-1-9 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格。但对于比较长的for, if等语句,为了紧凑可以适当去掉空格。 如for(i=0; i<10; i++) 和 if ((a<=b) && (c<=d))
【规则2-1-10 源程序中关系较为紧密的代码应尽可能相邻。
rect.length=10,//矩形的长      不良的风格
char_poi=str;//显示的文本串
rect.width=5;//矩形的宽
rect.length=10;
rect.width=5;// 矩形的长与宽关系较密切,放在一起。
char_poi=str;
 
【规则2-1-11 一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等前后不加空格。象“[]”、“ .”、“->”这类操作符前后也不加空格
   
void Func1(int x, int y, int z);           // 良好的风格
if (year >= 2000)                          // 良好的风格
if ((a>=b) && (c<=d))                      // 良好的风格
if(a>=b&&c<=d)                             // 不良的风格
for (i=0; i<10; i++)                       // 良好的风格
for(i=0;i<10;i++)                          // 不良的风格
for (i = 0; I < 10; i ++)                  // 过多的空格
x = a < b ? a : b;                         // 良好的风格
x=a<b?a:b;                                 // 不好的风格
int *x = &y;                               // 良好的风格 
int * x = & y;                             // 不良的风格 
array[5] = 0;                             // 不要写成 array [ 5 ] = 0;
a.Function();                              // 不要写成 a . Function();
b->Function();                             // 不要写成 b -> Function();
 
 
2.2 对齐与拆分
【规则2-2-1 程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
 
【规则2-2-2 { }之内的代码块在‘{’右边数格处左对齐。(VC的TAB默认为4格,有些规范不建议使用TAB,因为不同编辑器TAB键不一致,考虑到敲空格比较烦琐,同一用TAB=4格左右缩进,可以设置编辑器TAB值)。同一级的代码块要对齐。
 
if (condition)
{
… // program code
}
else
{
… // program code
}
如果出现嵌套的{},则使用缩进对齐,如:
     {
       …
          {
           …
          }
       …
}
 
【规则2-2-3 代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。
 
【规则2-2-4 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
 
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);
 
 
 
 
【规则2-2-5 应当将修饰符 * 和 & 紧靠变量名, 返回类型为指针的函数可靠近类型名
 
char  *name;
       int* Function(char *ch)
C语言的注释符为“/*…*/”。C++语言中,程序块的注释常采用“/*…*/”,行注释一般采用“//…”。
【规则2-3-2 如果语句表达得很清楚的,则不必加注释。否则多此一举,令人厌烦。 有效注释应该占程序文字量的25%左右
 
【规则2-3-3 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
 
【规则2-3-4 尽量避免在注释中使用缩写,特别是不常用缩写。
 
【规则2-3-5 注释的位置应与被描述的代码相邻,上方或右方,不可放在下方。
  实现在某一功能的长代码段开始处注明代码段功能,用//号占位以方便查找
 
void Func()
{
...
//开始绘图
      …… 长代码段
 //计算矩阵///
          ......
    }
 
函数定义处开头要注释函数名,函数功能和输入输出参数。简单明了的函数可以只注释功能。函数声明处上方简要说明函数功能。
 
/*****************************************************
* ComplexFunc 函数功能描述......
* 输入参数: para1 参数1的意义
*                    1 若para为1的意义 2 若para为2的意义
*             para2 参数2的意义
* 返回值      char*   返回值的意义
*******************************************************/
char* ComplexFunc(int para1, char *para2)
{
 ...
}
/***********************************************************
* 设置para
*************************************************************/
void SimpleFunc(int para)
{   
m_para = para;
}
 
【规则2-3-6 当域内代码比较多,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读和检查。
if (a!=0)
{
  … 长代码段
} //end if a
else
{
  … 长代码段
}//end else
 
2.4 类的声明版式
【规则2-4-1 一般先定义接口函数,再定义成员变量,先public,后private. 把成员函数分类成:构造/释构,属性,行为. 在函数声明的上方和成员变量右方加上功能注释,
 class CmathGraph
{
   public:
        CmathGraph()
        ~CmathGraph()
   //Attribute
   public:
              //设置DC
        void SetDC(CDC *pDC);
        //获取绘图区域大小
        CSize GetSize();
   //Operation
   public:
        //在屏幕输出文本
         void DrawText(CString str);
   protected:
        int member1;   //member1的作用
        char member2; //member2的作用
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值