关闭

c/c++的编程规范

416人阅读 评论(0) 收藏 举报

一个程序员的编码水平如何,从他写的代码的风格,布局就可以看出来。所以良好的编码风格是非常重要的。清晰易读的代码,才是高质量的代码。

下面是我从网上找到的一个关于编码风格的帖子。

对于编程的初学者比较有用,高手就不必浏览了。

一.

每日编写如此之多的代码,很多同学现在的想法是,我要实现功能,实现了功能以后,万事大吉。

其实在实际工作当中不是这样的。在工作当中,因为各种原因,程序员们来来往往,是很频繁的事情。所以,要求我们的代码格式规范工整,这里就涉及到几点代码编写的要求:

 变量名要有意义

    变量名不能让人不知所云。比如动辄str1,str2。你今天知道这是个字符串,等你过一段时间再来看的话,你就未必知道这是个什么东西了。它到底是干嘛用的?我当时写了这玩意是有啥想法来着?一概不记得了。但是如果你起个有点意义的名字,情况就会好很多了。比如说,临时使用的SQL语句,你可以起个名字叫m_tmpSQL。我想,看到这个变量名的人,再怎么想,都能想出来这里面存放的是个SQL语句。

2 代码缩进工整

   现在的IDE里,有很多自动缩进的功能,比如你在if后打上大括号,IDE会自动给你放到合适的位置。但是有一种情况,如果你的代码是复制粘贴进来的呢?这时候的缩进不见得完全准确。如果是VC6的话,可以使用ALT+F8,IDE会帮你搞定一切。一般来说,手工排版的话,在IDE里可以使用tab键。而如果是在文本编辑器里的话,建议使用四个空格。因为空格的长度在任何地方都是一样的,而一个制表位就不见得一样了。

3 合理适当的注释

   很多同学写代码都不喜欢加注释的,原因多半还是认为自己肯定能看的懂。实际上,合理的注释是很有必要的。有些时候,为了完成一些功能,你灵光一现,写出了一些绝妙的代码,或者使用了复杂的逻辑来书写代码。可是你的后来人咋办呢?或者日后你自己修改的时候,面对满眼的if,else,for,switch,估计动起来也有点胆战心惊吧?并且,合理的注释在你写代码的时候,也能帮你厘清思路,明白自己在做什么,下一步要怎么进行

From:http://student.csdn.net/space.php?uid=39017&do=thread&id=452

 

二.标题:可不可以拜托各位一件事情?

很多同学喜欢把代码拿上来,询问。

不过,肖老师是程序白痴,看不懂同学们的代码。

举个例子

这是某位同学的代码,我仅仅是举例子,不是针对这位同学,希望不要见怪哈。

 #include<iostream> 这个看得懂
using namespace std;  这个也知道
int main() 这个简直太懂了
{
      int num=1997;              num请问是准备做什么的?    
      long fn[10000]={0};          fn请问是做什么的?10000是什么意思?
      fn[0]=fn[1]=1;             为啥0和1这两个单元要赋初值?为啥是1?
      int i,j;  这个能猜出来,这是循环变量。
      for(i=2;i<=num;i++)  为啥是2开始,而不是0?
      {
            for(j=1;j<=fn[0];j++)  第二重循环式做啥的?fnp[0]不是1吗?为啥不写成1?
            fn[j]*=i;  这个*是什么意思?
            for(j=1;j<=fn[0];j++)  同样的问题
                 if(fn[j]>=10000)  10000是什么意思?
                 {
                       fn[j+1]+=fn[j]/10000;  这两行是什么意思?
                       fn[j]%=10000;  这里求出的余数是什么意思?
                 }
            if(fn[j]>0)  为啥是大于0?可不可能小于0?
           fn[0]++;
       }
      for(i=fn[0];i>0;i--)  为啥从后向前打印?
           cout<<fn[i];
       return 0;
}

这种程序,在我们的工程项目中,将会直接拒收。并且不计算工作量,嗯,顺便也就不发薪水了。

大家写程序,请务必写出人看得懂的程序,不要想当然的认为,每个人都有你这么高的水平,每个人理所当然,思路这会和你一致,一定能看懂你写的代码。

这里我也提示大家一段代码。

 

 int SafePrintf(char* szBuf,int nMaxLength,char *szFormat, ...)   
   
     int nListCount=0;   
     va_list pArgList;   
     if (!szBuf) goto SafePrintf_END_PROCESS;   
     va_start (pArgList,szFormat);   
     nListCount+=Linux_Win_vsnprintf(szBuf+nListCount,   
     nMaxLength-nListCount,szFormat,pArgList);   
     va_end(pArgList);   
     if(nListCount>(nMaxLength-1)) nListCount=nMaxLength-1;   
     *(szBuf+nListCount)='\0';   
 SafePrintf_END_PROCESS:   
     return nListCount;   
   
 

这是一段变参的字符串打印函数,我也没有加任何注释,如果有看不懂的同学,请直接向我询问。

里面使用的是匈牙利命名法。

 From:http://student.csdn.net/space.php?uid=39028&do=thread&id=287

 

三.标题:程序的板式---c/c++的编程规范

版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。

空行

空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。

  【规则1-1】在每个类声明之后、每个函数定义结束之后都要加空行

  【规则1-2】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。

2 代码行

  【规则2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。

  【规则2-2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。这样可以防止书写失误。

  【建议2-3】

尽可能在定义变量的同时初始化该变量(就近原则)

代码行内的空格

  【规则3-1】关键字之后要留空格。象const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。象if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。

  【规则3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。

  【规则3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。

  【规则3-4】‘,’之后要留空格,如Function(x, y, z)。如果‘;’不是一行的结束符号,其后要留空格,如for (initialization; condition; update)。

对齐与缩进

  【规则4-1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。

  【规则4-2】采用统一的缩进格式,以四个空格作为缩进符号,不以tab字符作为缩进符号,因为tab字符在不同的编辑器中表示的宽度不同。

  【规则4-3】{ }之内的代码块在‘{’右边第一缩进处左对齐。

注释

C 语言的注释符为“”。C++语言中,程序块的注释常采用“”,行注释一般采用“//…”。要求必须注释的对象包括以下四类:

(1)版本、版权声明;

(2)函数接口说明:完成的功能,输入,输出,返回值说明;

(3)数据结构(包括全局变量和常量):说明其物理含义和值域说明;

(4)重要的代码行或段落提示。

虽然注释有助于理解代码,但注意不可过多地使用注释。

  【规则5-1】采用“”注释的时候,在“”之前必须至少保留一个空格。采用“//”注释的时候在“//”之后必须至少保留一个空格。

  【规则5-2】采用注释的时候必须和所注释的对象保持对齐。采用行注释“//”的时候,如果在行前注释则必须和该行对齐;如果在行后注释,如果多行之间关系密切,则这些行的注释最好也能对齐;对于行后注释较长的,必须将注释折行并对齐。

 

void function1(…)

{

}

Struct A{

    Int m1;       // 成员1

    Char m2;      // 成员2,用于…

                  // 的处理

    Double m3;    // 成员3

};

 

  【规则5-3】注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。注释的花样要少。

  【规则5-4】如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。例如:i++; // i 加1,多余的注释

  【规则5-5】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

长行拆分

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

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

From:http://student.csdn.net/space.php?uid=32810&do=thread&id=455

 

三.匈牙利命名法

匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。

  举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为Switchboard时,变量全称应该为 frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变量类型为标签,那么就应命名成 lblSwitchboard。可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代码。

想了解更多请查看http://baike.baidu.com/view/419474.htm?fr=ala0_1

 

四.骆驼命名法

  骆驼式命令法,正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:

  printEmployeePaychecks()

  print_employee_paychecks()

  第一个函数名使用了骆驼式命名法——函数名中的每一个逻辑断点都有一个大写字母来标记;第二个函数名使用了下划线法----函数名中的每一个逻辑断点都有一个下划线来标记。

  骆驼式命名法近年来越来越流行了,在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。另一方面,下划线法是c出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:217418次
    • 积分:3266
    • 等级:
    • 排名:第10398名
    • 原创:114篇
    • 转载:37篇
    • 译文:0篇
    • 评论:23条
    最新评论