zoukankan      html  css  js  c++  java
  • C语言初学者应该知道的(一)

    C语言初学者应该知道的(一)

    ——编码风格与规范

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

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

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

    一.

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

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

    变量名要有意义

        变量名不能让人不知所云。比如动辄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

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

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

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

    举个例子

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

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

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

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

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

     1 int SafePrintf(char* szBuf,int nMaxLength,char *szFormat, ...)    
     2 {    
     3     int nListCount=0;    
     4     va_list pArgList;    
     5     if (!szBuf) goto SafePrintf_END_PROCESS;    
     6     va_start (pArgList,szFormat);    
     7     nListCount+=Linux_Win_vsnprintf(szBuf+nListCount,    
     8     nMaxLength-nListCount,szFormat,pArgList);    
     9     va_end(pArgList);    
    10     if(nListCount>(nMaxLength-1)) nListCount=nMaxLength-1;    
    11     *(szBuf+nListCount)='\0';    
    12 SafePrintf_END_PROCESS:    
    13     return nListCount;    
    14 }    

      

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

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

     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这样的环境中,它的使用非常普遍

    个人感觉这两种命名法都比较好,但是更倾向于骆驼命名法。

    以上内容蓝色部分由本人书写,其他来源于网络。

  • 相关阅读:
    Web性能优化系列(3):如何延迟加载JS
    Web性能优化系列(2):剖析页面绘制时间
    Web性能优化系列(1):Web性能优化分析
    页面制作之开发调试工具(1)
    格式化 SQL 来提高效率
    关于SQL注入,你应该知道的那些事
    jQuery()方法的第二个参数
    JSON简介以及用法代码汇总
    js简单的面试题
    常用meta整理
  • 原文地址:https://www.cnblogs.com/stublue/p/1683840.html
Copyright © 2011-2022 走看看