⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 编程规范与范例(5).htm

📁 编程规范大全
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<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>&nbsp;[<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;id=16591"><U><FONT style="BACKGROUND-COLOR: #ffff00" color=#ff0000>岁月如歌——记匠人的百宝箱博客开通一周年</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;id=17379"><U><FONT color=#0000ff>事件驅動觀念</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;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&amp;id=18941"><U><FONT color=#0000ff>计算机族必喝的健康饮料</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;id=18714"><U><FONT color=#0000ff>男人·女人·电脑</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;id=18713"><U><FONT color=#0000ff>学编程的人不能不看的好文章</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;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&amp;id=19794"><U><FONT color=#0000ff>一种软件去除键抖动的方法</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;id=19752"><U><FONT color=#0000ff>司马光,你干嘛砸缸?</FONT></U></A>] [<A href="http://blog.21ic.com/more.asp?name=cxjr&amp;id=19748"><U><FONT color=#0000ff>编码规范</FONT></U></A>]&nbsp;</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&amp;id=18993"><U><FONT color=#ff0000>请网友来评选最佳队员专栏</FONT></U></A><FONT color=#ff0000>]</FONT>&nbsp;</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/5.gif ><a href=blog.asp?name=cxjr&subjectid=66>[编程技巧]<a href=more.asp?name=cxjr&id=2758>编程规范与范例(5)</a></STRONG></FONT><BR>程序匠人&nbsp;&nbsp;&nbsp; 2005-8-27 20:18:00&nbsp;&nbsp;&nbsp;&nbsp; <a href=more.asp?name=cxjr&id=2758>阅读全文(764)</a> | <a href=more.asp?name=cxjr&id=2758#comment>回复(0)</a> | <a href=showtb.asp?id=2758 target=_blank>引用(0)</a><BR><FONT face=宋体 size=4><STRONG>[</STRONG></FONT><A href="http://blog.21ic.org/more.asp?name=cxjr&amp;id=6250" target=_blank><FONT face=宋体 color=#ff0000 size=4><STRONG>广告8号位</STRONG></FONT></A><FONT face=宋体 size=4><STRONG>]&nbsp;[</STRONG></FONT><A href="http://blog.21ic.org/more.asp?name=cxjr&amp;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&amp;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>编程规范与范例(5)&nbsp; <BR>〖文章转载或出处〗≡中国电子技术信息网≡ 网址:<A href="http://www.CETINet.com">www.CETINet.com</A> <BR>编程规范与范例(5)</P>
<P>目&nbsp; 录<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>&nbsp;<BR>&nbsp;<BR>9 质量保证<BR>&amp;sup1; 9-1:在软件设计过程中构筑软件质量。<BR>&amp;sup1; 9-2:代码质量保证优先原则<BR>&nbsp;&nbsp;&nbsp;&nbsp; (1)正确性,指程序要实现设计要求的功能。<BR>&nbsp;&nbsp;&nbsp;&nbsp; (2)稳定性、安全性,指程序稳定、可靠、安全。<BR>&nbsp;&nbsp;&nbsp;&nbsp; (3)可测试性,指程序要具有良好的可测试性。<BR>&nbsp;&nbsp;&nbsp;&nbsp; (4)规范/可读性,指程序书写风格、命名规则等要符合规范。<BR>&nbsp;&nbsp;&nbsp;&nbsp; (5)全局效率,指软件系统的整体效率。<BR>&nbsp;&nbsp;&nbsp;&nbsp; (6)局部效率,指某个模块/子模块/函数的本身效率。<BR>&nbsp;&nbsp;&nbsp;&nbsp; (7)个人表达方式/个人方便性,指个人编程习惯。<BR>&amp;sup1; 9-3:只引用属于自己的存贮空间。<BR>说明:若模块封装的较好,那么一般不会发生非法引用他人的空间。<BR>&amp;sup1; 9-4:防止引用已经释放的内存空间。<BR>说明:在实际编程过程中,稍不留心就会出现在一个模块中释放了某个内存块(如C语言指针),而另一模块在随后的某个时刻又使用了它。要防止这种情况发生。<BR>&amp;sup1; 9-5:过程/函数中分配的内存,在过程/函数退出之前要释放。<BR>&amp;sup1; 9-6:过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。<BR>说明:分配的内存不释放以及文件句柄不关闭,是较常见的错误,而且稍不注意就有可能发生。这类错误往往会引起很严重后果,且难以定位。<BR>示例:下函数在退出之前,没有把分配的内存释放。<BR>typedef unsigned char BYTE;</P>
<P>int example_fun( BYTE gt_len, BYTE *gt_code )<BR>{<BR>&nbsp;&nbsp;&nbsp; BYTE *gt_buf;</P>
<P>&nbsp;&nbsp;&nbsp; gt_buf = (BYTE *) malloc (MAX_GT_LENGTH);<BR>&nbsp;&nbsp;&nbsp; ...&nbsp; //program code, include check gt_buf if or not NULL.<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; /* global title length error */<BR>&nbsp;&nbsp;&nbsp; if (gt_len &gt; MAX_GT_LENGTH)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return GT_LENGTH_ERROR; // 忘了释放gt_buf<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; ...&nbsp; // other program code<BR>}</P>
<P>应改为如下。<BR>int example_fun( BYTE gt_len, BYTE *gt_code )<BR>{<BR>&nbsp;&nbsp;&nbsp; BYTE *gt_buf;</P>
<P>&nbsp;&nbsp;&nbsp; gt_buf = (BYTE * ) malloc ( MAX_GT_LENGTH );<BR>&nbsp;&nbsp;&nbsp; ...&nbsp; // program code, include check gt_buf if or not NULL.<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; /* global title length error */<BR>&nbsp;&nbsp;&nbsp; if (gt_len &gt; MAX_GT_LENGTH)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; free( gt_buf&nbsp; ); // 退出之前释放gt_buf<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return GT_LENGTH_ERROR;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; ...&nbsp; // other program code<BR>}<BR>&amp;sup1; 9-7:防止内存操作越界。<BR>说明:内存操作主要是指对数组、指针、内存地址等的操作。内存操作越界是软件系统主要错误之一,后果往往非常严重,所以当我们进行这些操作时一定要仔细小心。<BR>示例:假设某软件系统最多可由10个用户同时使用,用户号为1-10,那么如下程序存在问题。<BR>#define MAX_USR_NUM 10<BR>unsigned char usr_login_flg[MAX_USR_NUM]= "";</P>
<P>void set_usr_login_flg( unsigned char usr_no )<BR>{<BR>&nbsp;&nbsp;&nbsp; if (!usr_login_flg[usr_no])<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usr_login_flg[usr_no]= TRUE;<BR>&nbsp;&nbsp;&nbsp; }<BR>}</P>
<P>当usr_no为10时,将使用usr_login_flg越界。可采用如下方式解决。<BR>void set_usr_login_flg( unsigned char usr_no )<BR>{<BR>&nbsp;&nbsp;&nbsp; if (!usr_login_flg[usr_no - 1])<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usr_login_flg[usr_no - 1]= TRUE;<BR>&nbsp;&nbsp;&nbsp; }<BR>}<BR>&amp;sup1; 9-8:认真处理程序所能遇到的各种出错情况。<BR>&amp;sup1; 9-9:系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用。<BR>&amp;sup1; 9-10:系统运行之初,要对加载到系统中的数据进行一致性检查。<BR>说明:使用不一致的数据,容易使系统进入混乱状态和不可知状态。<BR>&amp;sup1; 9-11:严禁随意更改其它模块或系统的有关设置和配置。<BR>说明:编程时,不能随心所欲地更改不属于自己模块的有关设置如常量、数组的大小等。<BR>&amp;sup1; 9-12:不能随意改变与其它模块的接口。<BR>&amp;sup1; 9-13:充分了解系统的接口之后,再使用系统提供的功能。<BR>示例:在B型机的各模块与操作系统的接口函数中,有一个要由各模块负责编写的初始化过程,此过程在软件系统加载完成后,由操作系统发送的初始化消息来调度。因此就涉及到初始化消息的类型与消息发送的顺序问题,特别是消息顺序,若没搞清楚就开始编程,很容易引起严重后果。以下示例引自B型曾出现过的实际代码,其中使用了FID_FETCH_DATA与FID_INITIAL初始化消息类型,注意B型机的系统是在FID_FETCH_DATA之前发送FID_INITIAL的。</P>
<P>MID alarm_module_list[MAX_ALARM_MID];</P>
<P>int FAR SYS_ALARM_proc( FID function_id, int handle )<BR>{<BR>&nbsp;&nbsp;&nbsp; _UI i, j;</P>
<P>&nbsp;&nbsp;&nbsp; switch ( function_id )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... // program code<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case FID_INITAIL:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; MAX_ALARM_MID; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (alarm_module_list[i]== BAM_MODULE // **)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || (alarm_module_list[i]== LOCAL_MODULE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (j = 0; j &lt; ALARM_CLASS_SUM; j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FAR_MALLOC( ... );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... // program code</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case FID_FETCH_DATA:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... // program code</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get_Alarm_Module( );&nbsp; // 初始化alarm_module_list</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... // program code<BR>&nbsp;&nbsp;&nbsp; }<BR>}</P>
<P>由于FID_INITIAL是在FID_FETCH_DATA之前执行的,而初始化alarm_module_list是在FID_FETCH_DATA中进行的,故在FID_INITIAL中(**)处引用alarm_module_list变量时,它还没有被初始化。这是个严重错误。<BR>应如下改正:要么把Get_Alarm_Module函数放在FID_INITIAL中(**)之前;要么就必须考虑(**)处的判断语句是否可以用(不使用alarm_module_list变量的)其它方式替代,或者是否可以取消此判断语句。<BR>&amp;sup1; 9-14:编程时,要防止差1错误。<BR>说明:此类错误一般是由于把“&lt;=”误写成“&lt;”或“&gt;=”误写成“&gt;”等造成的,由此引起的后果,很多情况下是很严重的,所以编程时,一定要在这些地方小心。当编完程序后,应对这些操作符进行彻底检查。<BR>&amp;sup1; 9-15:要时刻注意易混淆的操作符。当编完程序后,应从头至尾检查一遍这些操作符,以防止拼写错误。<BR>说明:形式相近的操作符最容易引起误用,如C/C++中的“=”与“==”、“|”与“||”、“&amp;”与“&amp;&amp;”等,若拼写错了,编译器不一定能够检查出来。<BR>示例:如把“&amp;”写成“&amp;&amp;”,或反之。<BR>ret_flg = (pmsg-&gt;ret_flg &amp; RETURN_MASK);&nbsp; <BR>被写为:<BR>ret_flg = (pmsg-&gt;ret_flg &amp;&amp; RETURN_MASK);</P>
<P>rpt_flg = (VALID_TASK_NO( taskno ) &amp;&amp; DATA_NOT_ZERO( stat_data ));<BR>被写为:<BR>rpt_flg = (VALID_TASK_NO( taskno ) &amp; DATA_NOT_ZERO( stat_data ));<BR>&amp;sup1; 9-16:有可能的话,if语句尽量加上else分支,对没有else分支的语句要小心对待;switch语句必须有default分支。<BR>&amp;sup1; 9-17:Unix下,多线程的中的子线程退出必需采用主动退出方式,即子线程应return出口。<BR>&amp;sup1; 9-18:不要滥用goto语句。<BR>说明:goto语句会破坏程序的结构性,所以除非确实需要,最好不使用goto语句。<BR>&amp;frac12; 9-1:不使用与硬件或操作系统关系很大的语句,而使用建议的标准语句,以提高软件的可移植性和可重用性。<BR>&amp;frac12; 9-2:除非为了满足特殊需求,避免使用嵌入式汇编。<BR>说明:程序中嵌入式汇编,一般都对可移植性有较大的影响。<BR>&amp;frac12; 9-3:精心地构造、划分子模块,并按“接口”部分及“内核”部分合理地组织子模块,以提高“内核”部分的可移植性和可重用性。<BR>说明:对不同产品中的某个功能相同的模块,若能做到其内核部分完全或基本一致,那么无论对产品的测试、维护,还是对以后产品的升级都会有很大帮助。<BR>&amp;frac12; 9-4:精心构造算法,并对其性能、效率进行测试。<BR>&amp;frac12; 9-5:对较关键的算法最好使用其它算法来确认。<BR>&amp;frac12; 9-6:时刻注意表达式是否会上溢、下溢。<BR>示例:如下程序将造成变量下溢。<BR>unsigned char size ;<BR>while (size-- &gt;= 0) // 将出现下溢<BR>{<BR>&nbsp;&nbsp;&nbsp; ... // program code<BR>}</P>
<P>当size等于0时,再减1不会小于0,而是0xFF,故程序是一个死循环。应如下修改。<BR>char size; // 从unsigned char 改为char<BR>while (size-- &gt;= 0)<BR>{<BR>&nbsp;&nbsp;&nbsp; ... // program code<BR>}<BR>&amp;frac12; 9-7:使用变量时要注意其边界值的情况。<BR>示例:如C语言中字符型变量,有效值范围为-128到127。故以下表达式的计算存在一定风险。<BR>char chr = 127;<BR>int sum = 200;</P>
<P>chr += 1; // 127为chr的边界值,再加1将使chr上溢到-128,而不是128。<BR>sum += chr; // 故sum的结果不是328,而是72。</P>
<P>若chr与sum为同一种类型,或表达式按如下方式书写,可能会好些。<BR>sum = sum + chr + 1; <BR>&amp;frac12; 9-8:留心程序机器码大小(如指令空间大小、数据空间大小、堆栈空间大小等)是否超出系统有关限制。<BR>&amp;frac12; 9-9:为用户提供良好的接口界面,使用户能较充分地了解系统内部运行状态及有关系统出错情况。<BR>&amp;frac12; 9-10:系统应具有一定的容错能力,对一些错误事件(如用户误操作等)能进行自动补救。<BR>&amp;frac12; 9-11:对一些具有危险性的操作代码(如写硬盘、删数据等)要仔细考虑,防止对数据、硬件等的安全构成危害,以提高系统的安全性。<BR>&amp;frac12; 9-12:使用第三方提供的软件开发工具包或控件时,要注意以下几点:<BR>(1)充分了解应用接口、使用环境及使用时注意事项。<BR>(2)不能过分相信其正确性。<BR>(3)除非必要,不要使用不熟悉的第三方工具包与控件。<BR>说明:使用工具包与控件,可加快程序开发速度,节省时间,但使用之前一定对它有较充分的了解,同时第三方工具包与控件也有可能存在问题。<BR>&amp;frac12; 9-13:资源文件(多语言版本支持),如果资源是对语言敏感的,应让该资源与源代码文件脱离,具体方法有下面几种:使用单独的资源文件、DLL文件或其它单独的描述文件(如数据库格式) <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=2758&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' />&nbsp;<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='回复:编程规范与范例(5)'><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'; > 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -