?? 編程規范與范例(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 + -