📄 编程规范与范例(6).htm
字号:
<TR bgColor=#f8f8f8>
<TD><STRONG><FONT color=#ff0000>酷贴推荐 <FONT color=#ff0000>[</FONT><A href="http://blog.21ic.org/more.asp?name=cxjr&id=7437" target=_blank><U><FONT color=#ff0000>更多…… </FONT></U></A><FONT color=#ff0000>]</FONT></FONT></STRONG></TD></TR>
<TR bgColor=#ffffff>
<TD>
<P align=left>
<TABLE borderColor=#cccccc cellSpacing=2 cellPadding=3 width="100%" bgColor=#ffffff border=1>
<TBODY>
<TR>
<TD>
<P align=center> [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=16591"><U><FONT style="BACKGROUND-COLOR: #ffff00" color=#ff0000>岁月如歌——记匠人的百宝箱博客开通一周年</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=17379"><U><FONT color=#0000ff>事件驅動觀念</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=17377"><U><FONT color=#0000ff>单片机程序设计中运用事件驱动机制</FONT></U></A>]</P></TD>
<TR>
<TD>
<P align=center>[<A href="http://blog.21ic.com/more.asp?name=cxjr&id=18941"><U><FONT color=#0000ff>计算机族必喝的健康饮料</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=18714"><U><FONT color=#0000ff>男人·女人·电脑</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=18713"><U><FONT color=#0000ff>学编程的人不能不看的好文章</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=18742"><U><FONT color=#0000ff>PIC机与MCS-51的区别</FONT></U></A>]</P></TD>
<TR>
<TD>
<P align=center>[<A href="http://blog.21ic.com/more.asp?name=cxjr&id=19794"><U><FONT color=#0000ff>一种软件去除键抖动的方法</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=19752"><U><FONT color=#0000ff>司马光,你干嘛砸缸?</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&id=19748"><U><FONT color=#0000ff>编码规范</FONT></U></A>] </P></TD>
<TR>
<TD>
<P align=center><FONT color=#ff0000>调查:[</FONT><A href="http://21icbbs.com/club/vote/showvote.asp?id=98" target=_blank><U><FONT color=#ff0000>您认为《匠人的百宝箱》如何?</FONT></U></A><FONT color=#ff0000>] [</FONT><A href="http://21icbbs.com/club/vote/showvote.asp?id=129" target=_blank><U><FONT color=#ff0000>您最喜欢《匠人的百宝箱》中哪个栏目?</FONT></U></A><FONT color=#ff0000>] [</FONT><A href="http://blog.21ic.com/more.asp?name=cxjr&id=18993"><U><FONT color=#ff0000>请网友来评选最佳队员专栏</FONT></U></A><FONT color=#ff0000>]</FONT> </P></TD></TR></TBODY></TABLE></P></TD></TR></TBODY></TABLE></P>
<P align=left>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=1 cellPadding=3 width="100%" bgColor=#cccccc border=0>
<TBODY>
<TR bgColor=#f8f8f8>
<TD>
<P align=left><FONT color=#ff0000 size=4><STRONG><img src=images/face/1.gif ><a href=blog.asp?name=cxjr&subjectid=66>[编程技巧]<a href=more.asp?name=cxjr&id=2759>编程规范与范例(6)</a></STRONG></FONT><BR>程序匠人 2005-8-27 20:19:00 <a href=more.asp?name=cxjr&id=2759>阅读全文(841)</a> | <a href=more.asp?name=cxjr&id=2759#comment>回复(0)</a> | <a href=showtb.asp?id=2759 target=_blank>引用(0)</a><BR><FONT face=宋体 size=4><STRONG>[</STRONG></FONT><A href="http://blog.21ic.org/more.asp?name=cxjr&id=6250" target=_blank><FONT face=宋体 color=#ff0000 size=4><STRONG>广告8号位</STRONG></FONT></A><FONT face=宋体 size=4><STRONG>] [</STRONG></FONT><A href="http://blog.21ic.org/more.asp?name=cxjr&id=7705"><U><FONT style="BACKGROUND-COLOR: #000000" face=宋体 color=#ffffff size=4><STRONG>免责声明</STRONG></FONT></U></A><FONT face=宋体 size=4><STRONG>] [</STRONG><A href="http://blog.21ic.com/more.asp?name=cxjr&id=18993"><U><FONT style="BACKGROUND-COLOR: #ffff00" color=#ff0000 size=3><STRONG>请网友来评选最佳队员专栏!</STRONG></FONT></U></A><STRONG>]</STRONG></FONT></P></TD></TR>
<TR bgColor=#ffffff>
<TD height=0>
<DIV align=left><P>编程规范与范例(6) <BR>〖文章转载或出处〗≡中国电子技术信息网≡ 网址:<A href="http://www.CETINet.com">www.CETINet.com</A> <BR>编程规范与范例(6)</P>
<P>目 录<BR>1 排版 6<BR>2 注释 11<BR>3 标识符命名 18<BR>4 可读性 20<BR>5 变量、结构 22<BR>6 函数、过程 28<BR>7 可测性 36<BR>8 程序效率 40<BR>9 质量保证 44<BR>10 代码编辑、编译、审查 50<BR>11 代码测试、维护 52<BR>12 宏 53<BR> <BR> <BR>10 代码编辑、编译、审查<BR>&sup1; 10-1:打开编译器的所有告警开关对程序进行编译。<BR>&sup1; 10-2:在产品软件(项目组)中,要统一编译开关选项。<BR>&sup1; 10-3:通过代码走读及审查方式对代码进行检查。<BR>说明:代码走读主要是对程序的编程风格如注释、命名等以及编程时易出错的内容进行检查,可由开发人员自己或开发人员交叉的方式进行;代码审查主要是对程序实现的功能及程序的稳定性、安全性、可靠性等进行检查及评审,可通过自审、交叉审核或指定部门抽查等方式进行。<BR>&sup1; 10-4:测试部测试产品之前,应对代码进行抽查及评审。<BR>&frac12; 10-1:编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。<BR>&frac12; 10-2:同产品软件(项目组)内,最好使用相同的编辑器,并使用相同的设置选项。<BR>说明:同一项目组最好采用相同的智能语言编辑器,如Muiti Editor,Visual Editor等,并设计、使用一套缩进宏及注释宏等,将缩进等问题交由编辑器处理。<BR>&frac12; 10-3:要小心地使用编辑器提供的块拷贝功能编程。<BR>说明:当某段代码与另一段代码的处理功能相似时,许多开发人员都用编辑器提供的块拷贝功能来完成这段代码的编写。由于程序功能相近,故所使用的变量、采用的表达式等在功能及命名上可能都很相近,所以使用块拷贝时要注意,除了修改相应的程序外,一定要把使用的每个变量仔细查看一遍,以改成正确的。不应指望编译器能查出所有这种错误,比如当使用的是全局变量时,就有可能使某种错误隐藏下来。<BR>&frac12; 10-4:合理地设计软件系统目录,方便开发人员使用。<BR>说明:方便、合理的软件系统目录,可提高工作效率。目录构造的原则是方便有关源程序的存储、查询、编译、链接等工作,同时目录中还应具有工作目录----所有的编译、链接等工作应在此目录中进行,工具目录----有关文件编辑器、文件查找等工具可存放在此目录中。<BR>&frac12; 10-5:某些语句经编译后产生告警,但如果你认为它是正确的,那么应通过某种手段去掉告警信息。<BR>说明:在Borland C/C++中,可用“#pragma warn”来关掉或打开某些告警。<BR>示例:<BR>#pragma warn -rvl // 关闭告警<BR>int examples_fun( void )<BR>{<BR> // 程序,但无return语句。<BR>}<BR>#pragma warn +rvl // 打开告警<BR>编译函数examples_fun时本应产生“函数应有返回值”告警,但由于关掉了此告警信息显示,所以编译时将不会产生此告警提示。<BR>&frac12; 10-6:使用代码检查工具(如C语言用PC-Lint)对源程序检查。<BR>&frac12; 10-7:使用软件工具(如 LogiSCOPE)进行代码审查。 <BR>11 代码测试、维护<BR>&sup1; 11-1:单元测试要求至少达到语句覆盖。<BR>&sup1; 11-2:单元测试开始要跟踪每一条语句,并观察数据流及变量的变化。<BR>&sup1; 11-3:清理、整理或优化后的代码要经过审查及测试。<BR>&sup1; 11-4:代码版本升级要经过严格测试。<BR>&sup1; 11-5:使用工具软件对代码版本进行维护。<BR>&sup1; 11-6:正式版本上软件的任何修改都应有详细的文档记录。<BR>&frac12; 11-1:发现错误立即修改,并且要记录下来。<BR>&frac12; 11-2:关键的代码在汇编级跟踪。<BR>&frac12; 11-3:仔细设计并分析测试用例,使测试用例覆盖尽可能多的情况,以提高测试用例的效率。<BR>&frac12; 11-4:尽可能模拟出程序的各种出错情况,对出错处理代码进行充分的测试。<BR>&frac12; 11-5:仔细测试代码处理数据、变量的边界情况。<BR>&frac12; 11-6:保留测试信息,以便分析、总结经验及进行更充分的测试。<BR>&frac12; 11-7:不应通过“试”来解决问题,应寻找问题的根本原因。<BR>&frac12; 11-8:对自动消失的错误进行分析,搞清楚错误是如何消失的。<BR>&frac12; 11-9:修改错误不仅要治表,更要治本。<BR>&frac12; 11-10:测试时应设法使很少发生的事件经常发生。<BR>&frac12; 11-11:明确模块或函数处理哪些事件,并使它们经常发生。<BR>&frac12; 11-12: 坚持在编码阶段就对代码进行彻底的单元测试,不要等以后的测试工作来发现问题。<BR>&frac12; 11-13:去除代码运行的随机性(如去掉无用的数据、代码及尽可能防止并注意函数中的“内部寄存器”等),让函数运行的结果可预测,并使出现的错误可再现。<BR> <BR>12 宏<BR>&sup1; 12-1:用宏定义表达式时,要使用完备的括号。<BR>示例:如下定义的宏都存在一定的风险。<BR>#define RECTANGLE_AREA( a, b ) a * b<BR>#define RECTANGLE_AREA( a, b ) (a * b)<BR>#define RECTANGLE_AREA( a, b ) (a) * (b)<BR>正确的定义应为:<BR>#define RECTANGLE_AREA( a, b ) ((a) * (b))<BR>&sup1; 12-2:将宏所定义的多条表达式放在大括号中。<BR>示例:下面的语句只有宏的第一条表达式被执行。为了说明问题,for语句的书写稍不符规范。<BR>#define INTI_RECT_VALUE( a, b )\<BR> a = 0;\<BR> b = 0;</P>
<P>for (index = 0; index < RECT_TOTAL_NUM; index++)<BR> INTI_RECT_VALUE( rect.a, rect.b );</P>
<P>正确的用法应为:<BR>#define INTI_RECT_VALUE( a, b )\<BR>{\<BR> a = 0;\<BR> b = 0;\<BR>}</P>
<P>for (index = 0; index < RECT_TOTAL_NUM; index++)<BR>{ <BR> INTI_RECT_VALUE( rect[index].a, rect[index].b );<BR>}<BR>&sup1; 12-3:使用宏时,不允许参数发生变化。<BR>示例:如下用法可能导致错误。<BR>#define SQUARE( a ) ((a) * (a))</P>
<P>int a = 5;<BR>int b;<BR>b = SQUARE( a++ ); // 结果:a = 7,即执行了两次增1。</P>
<P>正确的用法是:<BR>b = SQUARE( a );<BR>a++; // 结果:a = 6,即只执行了一次增1。 <BR> <A></A></P></DIV></TD></TR></TBODY></TABLE><FONT color=#ff0000></FONT>
<P align=right><A href="http://blog.21ic.org/blog.asp?name=cxjr" target=_blank><FONT color=#ff0000>如果你的‘芯’是一座作坊,我愿做那不知疲倦的程序匠。打造一流博客,我们每天在努力!</FONT></A></P><A href="http://blog.21ic.org/blog.asp?name=cxjr" target=_blank><FONT color=#ff0000></FONT></A><br><a name='comment'></a><table width='90%' border='0' align='center' cellspacing='0' cellpadding='0'> <tr> <td><strong>发表评论:</strong></tr></td></table>
<table width='90%' border='0' align='center' cellspacing='0' cellpadding='0'> <tr> <td><table align='left' width='100%' border='0' cellspacing='0' cellpadding='0'>
<form action='more.asp?name=cxjr&id=2759&action=addcomment_ic' method='post' name='commentform' onSubmit='return Verifycomment()'>
<tr><td height='25' align='left'>昵称:<input name='UserName' type='text' id='UserName' size='15' maxlength='20' value=''></td></tr>
<tr><td height='25' align='left'>密码:<input name='Password' type='password' id='Password' size='15' maxlength='20' value=''> (游客无须输入密码)</td></tr>
<tr ><td height='25' align='left' >验证码:<input name='GetCode' type='text' id='GetCode' size='12' maxlength='20' /> <img src='inc/code.asp' width='40' height='10' border='0' /><td></tr><tr ><td height='25' align='left' >主页:<input name='homepage' type='text' id='homepage' size='42' maxlength='50' value='http://'><td></tr><tr ><td height='25' align='left' >标题:<input name='commenttopic' type='text' id='commenttopic' size='42' maxlength='50' value='回复:编程规范与范例(6)'><td></tr><tr height='200'><td ><INPUT type='hidden' name='edit' id='edit' value=''>
<link rel="STYLESHEET" type="text/css" href="images/edit.css">
<Script Src="images/DhtmlEdit.js"></Script>
<table id="oblog_Container" class="oblog_Body" height=100% width=350 cellpadding=1 cellspacing=0 border=0 >
<tr>
<td height="10"> <table cellpadding=0 cellspacing=0 >
<tr class="yToolbar" ID="ExtToolbar0" >
<td> <select language="javascript" class="oblog_TBGen" id="FontSize" onchange="FormatText('fontsize',this[this.selectedIndex].value);">
<option class="heading" selected>字号
<option value="1">1
<option value="2">2
<option value="3">3
<option value="4">4
<option value="5">5
<option value="6">6
<option value="7">7</option>
</select>
<td class="oblog_Btn" TITLE="加粗" LANGUAGE="javascript" onclick="FormatText('bold', '');ondrag='return false;'" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/bold.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td class="oblog_Btn" TITLE="斜体" LANGUAGE="javascript" onclick="FormatText('italic', '');ondrag='return false;'" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/italic.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td class="oblog_Btn" TITLE="下划线" LANGUAGE="javascript" onclick="FormatText('underline', '');ondrag='return false;'" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/underline.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td class="oblog_Btn" TITLE="取消格式" LANGUAGE="javascript" onclick="FormatText('RemoveFormat', '');ondrag='return false;'" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/removeformat.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td class="oblog_Btn" TITLE="左对齐" NAME="Justify" LANGUAGE="javascript" onclick="FormatText('justifyleft', '');ondrag='return false;'" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/aleft.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td class="oblog_Btn" TITLE="居中" NAME="Justify" LANGUAGE="javascript" onclick="FormatText('justifycenter', '');ondrag='return false;'" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/center.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td class="oblog_Btn" TITLE="右对齐" NAME="Justify" LANGUAGE="javascript" onclick="FormatText('justifyright', '');ondrag='return false;'" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/aright.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td class="oblog_Btn" TITLE="插入表情" LANGUAGE="javascript" onclick="oblog_foremot()" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
<img class="oblog_Ico" src="images/smiley.gif" WIDTH="16" HEIGHT="16" unselectable="on"> </td>
<td id="forecolor" name=forecolor class="oblog_Btn" TITLE="字体颜色" LANGUAGE="javascript" onclick="oblog_foreColor();" onmouseover=this.className='oblog_BtnMouseOverUp'; onmouseout=this.className='oblog_Btn'; >
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -