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

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

——编码风格与规范

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

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

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

一.

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

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

1变量名要有意义

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

2usingnamespacestd; 这个也知道

3intmain() 这个简直太懂了

4{

5intnum=1997; num请问是准备做什么的?

6longfn[10000]={0}; fn请问是做什么的?10000是什么意思?

7fn[0]=fn[1]=1; 为啥0和1这两个单元要赋初值?为啥是1?

8inti,j; 这个能猜出来,这是循环变量。

9for(i=2;i<=num;i++) 为啥是2开始,而不是0?

10{

11for(j=1;j<=fn[0];j++) 第二重循环式做啥的?fnp[0]不是1吗?为啥不写成1?

12fn[j]=i; 这个是什么意思?

13for(j=1;j<=fn[0];j++) 同样的问题

14if(fn[j]>=10000) 10000是什么意思?

15{

16fn[j+1]+=fn[j]/10000; 这两行是什么意思?

17fn[j]%=10000; 这里求出的余数是什么意思?

18}

19if(fn[j]>0) 为啥是大于0?可不可能小于0?

20fn[0]++;

21}

22for(i=fn[0];i>0;i--) 为啥从后向前打印?

23cout<<fn[i];

24return0;

25}

26

27

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

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

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

1intSafePrintf(charszBuf,intnMaxLength,charszFormat, ...)

2{

3intnListCount=0;

4va_list pArgList;

5if(!szBuf)gotoSafePrintf_END_PROCESS;

6va_start (pArgList,szFormat);

7nListCount+=Linux_Win_vsnprintf(szBuf+nListCount,

8nMaxLength-nListCount,szFormat,pArgList);

9va_end(pArgList);

10if(nListCount>(nMaxLength-1)) nListCount=nMaxLength-1;

11*(szBuf+nListCount)='\0';

12SafePrintf_END_PROCESS:

13returnnListCount;

14}

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

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

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

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

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

1空行

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

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

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

2代码行

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

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

【建议2-3】

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

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对齐与缩进

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

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

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

5注释

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

(1)版本、版权声明;

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

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

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

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

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

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

/**************************************函数名称:*函数功能:*输入参数:*输出参数:*返 回 值:*************************************/void function1(…){} Struct A{Int m1; //成员1Char m2; //成员2,用于…//的处理Double m3; //成员3};

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

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

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

6长行拆分

【规则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()

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

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

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

以上内容蓝色部分由本人书写,其他来源于网络。原文链接: https://www.cnblogs.com/stublue/archive/2010/03/11/1683840.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/8752

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午8:00
下一篇 2023年2月6日 下午8:01

相关推荐