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

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

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

  • 相关阅读:
    韩式英语
    Daily dictation 听课笔记
    words with same pronunciation
    you will need to restart eclipse for the changes to take effect. would you like to restart now?
    glottal stop(britain fountain mountain)
    education 的发音
    第一次用Matlab 的lamada语句
    SVN的switch命令
    String的split
    SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
  • 原文地址:https://www.cnblogs.com/stublue/p/1683840.html
Copyright © 2020-2023  润新知