📄 c语言编程规范.htm
字号:
<TBODY>
<TR bgColor=#f8f8f8>
<TD><STRONG><FONT color=#ff0000>广告(2号位)</FONT></STRONG></TD></TR>
<TR bgColor=#ffffff>
<TD>
<DIV align=center>
<ADDRESS> <A href="http://www.3gmcu.com/" target=_blank><IMG style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000" src="http://blog.21ic.org/uploadfile-/2005122820932375.gif" border=0></A></ADDRESS></DIV></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><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/4.gif ><a href=blog.asp?name=cxjr&subjectid=66>[编程技巧]<a href=more.asp?name=cxjr&id=2753>C语言编程规范</a></STRONG></FONT><BR>程序匠人 2005-8-27 20:12:00 <a href=more.asp?name=cxjr&id=2753>阅读全文(1624)</a> | <a href=more.asp?name=cxjr&id=2753#comment>回复(0)</a> | <a href=showtb.asp?id=2753 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>C语言编程规范 <BR>〖文章转载或出处〗≡中国电子技术信息网≡ 网址:<A href="http://www.CETINet.com">www.CETINet.com</A> <BR>C语言编程规范(仅供参考)</P>
<P>1. 基本要求<BR>1.1 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。<BR>1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。<BR>1.3 尽量使用标准库函数和公共函数。<BR>1.4 不要随意定义全局变量,尽量使用局部变量。<BR>1.5 使用括号以避免二义性。</P>
<P>2.可读性要求<BR>2.1 可读性第一,效率第二。<BR>2.2 保持注释与代码完全一致。<BR>2.3 每个源程序文件,都有文件头说明,说明规格见规范。<BR>2.4 每个函数,都有函数头说明,说明规格见规范。<BR>2.5 主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。<BR>2.7 常量定义(DEFINE)有相应说明。<BR>2.8 处理过程的每个阶段都有相关注释说明。<BR>2.9 在典型算法前都有注释。<BR>2.10 利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为 6个<BR>字节。<BR>2.11 循环、分支层次不要超过五层。<BR>2.12 注释可以与语句在同一行,也可以在上行。<BR>2.13 空行和空白字符也是一种特殊注释。<BR>2.14 一目了然的语句不加注释。<BR>2.15 注释的作用范围可以为:定义、引用、条件分支以及一段代码。<BR>2.16 注释行数(不包括程序头和函数头说明部份)应占总行数的 1/5 到 1/3 。</P>
<P>3. 结构化要求<BR>3.1 禁止出现两条等价的支路。<BR>3.2 禁止GOTO语句。<BR>3.3 用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。<BR>3.4 用 CASE 实现多路分支。<BR>3.5 避免从循环引出多个出口。<BR>3.6 函数只有一个出口。<BR>3.7 不使用条件赋值语句。<BR>3.8 避免不必要的分支。<BR>3.9 不要轻易用条件分支去替换逻辑表达式。</P>
<P>4. 正确性与容错性要求<BR>4.1 程序首先是正确,其次是优美<BR>4.2 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。<BR>4.3 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。<BR>4.4 所有变量在调用前必须被初始化。<BR>4.5 对所有的用户输入,必须进行合法性检查。<BR>4.6 不要比较浮点数的相等,<BR>如: 10.0 * 0.1 == 1.0 , 不可靠<BR>4.7 程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否<BR>逻辑锁定、打印机是否联机等。<BR>4.8 单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。</P>
<P>5. 可重用性要求<BR>5.1 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。<BR>5.2 公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。<BR>5.3 公共控件或类应建立使用模板。<BR> 附:C++ 编程规范,delphi作相应的参考</P>
<P>1适用范围<BR>本标准适用于利用Visul C++ ,Borland C++进行软件程序开发的人员.。</P>
<P>.2变量命名<BR>命名必须具有一定的实际意义,形式为xAbcFgh,x由变量类型确定,Abc、Fgh表示连续意<BR>义字符串,如果连续意义字符串仅两个,可都大写.如OK.<BR>具体例程:<BR>BOOL类型 bEnable;</P>
<P>ch * char chText<BR>c * 类对象 cMain(对象实例)<BR>h * Handle(句柄) hWnd<BR>i * int<BR>n * 无符号整型<BR>p * 指针<BR>sz,str * 字符串<BR>w WORD<BR>x,y 坐标<BR>Char或者TCHAR类型 与Windows API有直接联系的用szAppName[10]形式否则用<BR>FileName[10]形式,单个字符也可用小写字母表示;<BR>Int类型 nCmdShow;<BR>LONG类型 lParam;<BR>UINT类型 uNotify;<BR>DWORD类型 dwStart;<BR>PSTR类型 pszTip;<BR>LPSTR类型 lpCmdLine<BR>LPTSTR类型 lpszClassName;<BR>LPVOID类型 lpReserved<BR>WPARAM类型 wParam,<BR>LPARAM类型 lParam<BR>HWND类型 hDlg;<BR>HDC类型 hDC;<BR>HINSTANCE类型 hInstance<BR>HANDLE类型 hInstance,<BR>HICON类型 hIcon;<BR>int iTmp<BR>float fTmp<BR>DWORD dw*<BR>String , AnsiString str *<BR>m_ 类成员变量 m_nVal, m_bFlag<BR>g_ 全局变量 g_nMsg, g_bFlag<BR>局部变量中可采用如下几个通用变量:nTemp,nResult,I,J(一般用于循环变量)。<BR>其他资源句柄同上<BR>.3常量命名和宏定义<BR>常量和宏定义必须具有一定的实际意义;<BR>常量和宏定义在#include和函数定义之间;<BR>常量和宏定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一<BR>条定义的右侧必须有一简单的注释,说明其作用;<BR>资源名字定义格式:<BR>菜单:IDM_XX或者CM_XX<BR>位图:IDB_XX<BR>对话框:IDD_XX<BR>字符串:IDS_XX<BR>DLGINIT:DIALOG_XX<BR> ICON:IDR_XX<BR>.4函数命名<BR>函数原型说明包括引用外来函数及内部函数,外部引用必须在右侧注明函数来源:模<BR>块名及文件名, 如是内部函数,只要注释其定义文件名;<BR>第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线<BR>间隔,示例如下:<BR>void UpdateDB_Tfgd (TRACK_NAME); <A href="file://Module">file://Module</A> Name :r01/sdw.c<BR>void PrintTrackData (TRACK_NAME); <A href="file://Module">file://Module</A> Name :r04/tern.c<BR>void ImportantPoint (void); <A href="file://Module">file://Module</A> Name :r01/sdw.c<BR>void ShowChar (int , int , chtype); <A href="file://Local">file://Local</A> Module<BR>void ScrollUp_V (int , int); <A href="file://Local">file://Local</A> Module<BR>.5结构体命名<BR>结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用<BR>大小写字母组合,第一个字母必须使用大写字母,必要时可用下划线间隔。对于私有数<BR>据区,必须注明其所属的进程。全局数据定义只需注意其用途。<BR> 示例如下:<BR> typedef struct<BR> {<BR> char szProductName[20];<BR> char szAuthor[20];</P>
<P> char szReleaseDate[16];<BR> char szVersion[10];<BR> unsigned long MaxTables;<BR> unsigned long UsedTables;<BR>}DBS_DATABASE;<BR>DBS_DATABASE GdataBase;</P>
<P>6 控件的命名:<BR>用小写前缀表示类别<BR>用小写前缀表示类别:<BR>fm 窗口<BR>cmd 按钮<BR>cob combo,下拉式列表框<BR>txt 文本输入框<BR>lab labal,标签<BR>img image,图象<BR>pic picture<BR>grd Grid,网格<BR>scr 滚动条<BR>lst 列表框<BR>frm fram</P>
<P>7注释<BR>原则上注释要求使用中文;<BR>文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复<BR>杂的算法需要加上流程说明;<BR>函数注释包括:输入、输出、函数描述、流程处理、全局变量、调用样例等,复杂的函数<BR>需要加上变量用途说明;<BR>程序中注释包括:修改时间和作者、方便理解的注释等;</P>
<P><BR> 引用一: 文件开头的注释模板<BR>/******************************************************************<BR>** 文件名:<BR>** Copyright (c) 1998-1999 *********公司技术开发部<BR>** 创建人:<BR>** 日 期:<BR>** 修改人:<BR>** 日 期:<BR>** 描 述:<BR>**<BR>** 版 本:<BR>**--------------------------------------------------------------------------<BR>---</P>
<P><BR>******************************************************************/</P>
<P> 引用二: 函数开头的注释模板<BR>/*****************************************************************<BR>** 函数名:<BR>** 输 入: a,b,c<BR>** a---<BR>** b---<BR>** c---<BR>** 输 出: x---<BR>** x 为 1, 表示...<BR>** x 为 0, 表示...<BR>** 功能描述:<BR>** 全局变量:<BR>** 调用模块:<BR>** 作 者:<BR>** 日 期:<BR>** 修 改:<BR>** 日 期:<BR>** 版本<BR>****************************************************************/<BR> 引用三: 程序中的注释模板<BR>/*----------------------------------------------------------*/<BR>/* 注释内容 */<BR>/*----------------------------------------------------------*/<BR>8 程序<BR>a. 程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序,<BR>尽量不采用递归模式。<BR>b. 编写程序时,亦必须想好测试的方法,换句话说,”单元测试” 的测试方案应<BR>在程序编写时一并拟好。<BR>c. 注释一定要与程序一致。<BR>d. 版本封存以后的修改一定要将老语句用/* */ 封闭,不能自行删除或修改,并要<BR>在文件及函数的修改记录中加以记录。<BR>e. 程序中每个block 的开头 ”{" 及 "}” 必须对齐,嵌套的block 每进一套,<BR>缩进一个tab,TAB 为4个空格,block类型包括if、for、while、do等关键字引出的。<BR>f. 对于比较大的函数,每个block 和特殊的函数调用,都必须注明其功能,举例如下<BR>:<BR>count.divisor = 1193280 / freq; // compute the proper count<BR>OutByte((unsigned short)67, (unsigned char)182); // tell 8253 that a<BR>count is coming<BR>OutByte((unsigned short)66, count. c[0]); // send low-order byte<BR>OutByte((unsigned short)66, count. c[1]); // send high-order byte</P>
<P>×××××××××××××××××××××××××××××××××××××××<BR>bcb,delphi中的变量命名:<BR> 遵循匈牙利命名法,命<BR>名必须有意义,制定如下规定<BR> 窗体:以大写的W开始,如About版权窗体, 命名为WAbout<BR>文件:以大写的F开始,如About版权窗体,文件命名为FAbout.cpp<BR>按钮(Button):如退出按钮,命名为btnExit<BR> ……<BR> 基类:加base标记,如报表基类,窗体命名为:WBaseRep, 文件命名为FBaseRep.cpp</P>
<P>转贴<BR>> 1. 在.h/.cpp的开头应有一段格式统一的说明,内容包括:<BR>> a. 文件名 (FileName);<BR>> b. 创建人 (Creater);<BR>> c. 文件创建时间 (Date);<BR>> d. 简短说明文件功能、用途 (Comment)。<BR>好习惯<BR>> 2. 除非极其简单,否则对函数应有注释说明。内容包括:功能、入口/出口参数,必<BR>要<BR>> 时还可有备注或补充说明。<BR>还是好习惯<BR>> 3. 每列代码的长度推荐为 80列,最长不得超过120列;折行以对齐为准。<BR>太宽了,我的限制是60列,因为文本方式下屏幕一共80列,如果你用BC这一类的编辑<BR>器,窗口边框等又要占据一定空间,所以80列太宽<BR>> 4. 循环、分支代码,判断条件与执行代码不得在同一行上。<BR>很对<BR>> 5. 指针的定义,* 号既可以紧接类型,也可以在变量名之前。<BR>><BR>> 例:可写做:int* pnsize;<BR>><BR>> 也可写做:int *pnsize;<BR>><BR>> 但不得写做:int * pnsize;<BR>建议采用第二种,除非附加另外一条规定:一次只声明一个变量,否则就会让人混淆,<BR>比如:<BR>int* a, b;<BR>看起来b好像也是个指针,其实不是。<BR>> 6. 在类的成员函数内调用非成员函数时,在非成员函数名前必须加上"::"。<BR>这一条我倒觉得并不是必需的,我的看法是决不要让你的类成员函数和全局函数的名称<BR>相同(或类似)<BR>> 7. 函数入口参数有缺省值时,应注释说明。<BR>><BR>> 例:BOOL CWpsDib::PaintDIB(CDC* pDC, CRect& rc,<BR>> int nBrightness, <A href="file://*=0*//">file://*=0*//</A><BR>> BOOL bGrayScale <A href="file://*=FALSE*//">file://*=FALSE*//</A> )<BR>每个变量写一行,必要时加上/*in, out*/注释<BR>> 8. else if 必须写在一行。<BR>应该尽量避免else if这样的结构<BR>> 9. 与‘{’、‘}’有关的各项规定:<BR>><BR>> 9.1‘{’、‘}’应独占一行。在该行内可有注释。<BR>> 9.2 ‘{’必须另起一行,‘{’ 之后的代码必须缩进一个Tab。‘{’与‘}’必须在<BR>同<BR>> 一列上。<BR>> 9.3 在循环、分支之后若只有一行代码,虽然可省略‘{’、‘}’,但不推荐这么<BR>> 做。若省略后可能引起歧义,则必须加上‘{’、‘}’。<BR>持保留意见,因为GNU的代码规范是这样的:<BR>if ( NULL == ptr )<BR> {<BR> // do something here<BR> }<BR>或者<BR>if ( NULL == ptr ) {<BR> // do something here<BR>}<BR>争论哪个更好并没有意义,关键是统一,如果用VC当然你的办法最方便,可是如果你用<BR>emacs或者vi,就不是这样了。<BR>> 10. 与空格有关的各项规定。<BR>><BR>> 10.1 在所有两目、三目运算符的两边都必须有空格。在单目运算符两端不必空格。<BR>但<BR>> 在‘—>’、‘::’、‘.’、‘[’、‘]’等运算符前后,及‘&’(取地址)、‘*<BR>> ’(取值)等运算符之后不得有空格。<BR>> 10.2 for、while、if 等关键词之后应有1个空格,再接‘(’,之后无空格;在结<BR>尾<BR>> 的‘)’前不得有空格。</P>
<P>我认为在括号两端加空格并不是什么错误,尤其是在一个条件十分复杂的if语句里<BR>> 10.3 调用函数、宏时,‘(’、‘)’前后不得有空格。<BR>> 10.4 类型强制转换时,‘(’‘)’前后不得有空格<BR>同上<BR>> 11. 与缩进有关的各项规定<BR>><BR>> 11.1 缩进以 Tab 为单位。1 个 Tab 为 4 个空格<BR>我认为这个值应该更大,我自己使用8个空格,如果你的代码因为缩进幅度太大而导致<BR>折行,那么几乎可以肯定你的程序设计方案有问题。<BR>> 11.2 下列情况,代码缩进一个 Tab:<BR>> 1. 函数体相对函数名及'{'、'}'。<BR>> 2. if、else、for、while、do 等之后的代码。<BR>> 3. 一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有 + - * / 等<BR>运<BR>> 算符,则运算符应在上一行末尾,而不应在下一行的行首。<BR>这一条我反对,运算符应该放在下一行行首,以使人能清楚的知道这一行是续上一行<BR>的,比如<BR>if ( something<BR> && somethingelse<BR> && otherthings )<BR>如果写做<BR>if ( something &&<BR> somethingelse &&<BR> otherthings )<BR>反而看不清楚<BR>> 11.3 下列情况,不必缩进:switch 之后的 case、default。 <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=2753&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='回复:C语言编程规范'><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);">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -