﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-yo-yo-文章分类-C++</title><link>http://www.cppblog.com/qy5328464/category/9672.html</link><description>No enjoyable day until I make it!</description><language>zh-cn</language><lastBuildDate>Tue, 17 Mar 2009 15:52:09 GMT</lastBuildDate><pubDate>Tue, 17 Mar 2009 15:52:09 GMT</pubDate><ttl>60</ttl><item><title>程序编写规范</title><link>http://www.cppblog.com/qy5328464/articles/75213.html</link><dc:creator>yo-yo</dc:creator><author>yo-yo</author><pubDate>Sun, 01 Mar 2009 00:45:00 GMT</pubDate><guid>http://www.cppblog.com/qy5328464/articles/75213.html</guid><wfw:comment>http://www.cppblog.com/qy5328464/comments/75213.html</wfw:comment><comments>http://www.cppblog.com/qy5328464/articles/75213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qy5328464/comments/commentRss/75213.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qy5328464/services/trackbacks/75213.html</trackback:ping><description><![CDATA[
（转载） &#160;<span style="color: rgb(128, 128, 128); font-family: Verdana; font-size: 13px; ">http://tb.donews.net/TrackBack.aspx?PostId=101449</span><div><span style="font-family: Verdana; font-size: 13px; ">一、注释<br>程序中的注释能够帮助理解程序。但是也不能太多，太多同样会影响程序的可读性。要遵循简练，准确，易理解的原则。<br><br>1、文件头：文件的头部应该有个对本文件的详细描述。内容包括版权，版本号，生成日期，作者，内容，功能，函数功能，与其他文件的关系，修改日志等。尤其是每次修改，都应该写入修改日志。<br><br>下面是一个常用的模版<br>/*************************************************<br>&#160; Copyright (C), 2000-2004, ******<br>&#160; File name:&#160;&#160;&#160;&#160;&#160; // 文件名<br>&#160; Author:&#160;&#160;&#160;&#160;&#160;&#160; Version:&#160;&#160;&#160;&#160;&#160;&#160;&#160; Date: // 作者、版本及完成日期<br>&#160; Description:&#160;&#160;&#160; // 用于详细说明此程序文件完成的主要功能，与其他模块<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 或函数的接口，输出值、取值范围、含义及参数间的控<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 制、顺序、独立或依赖等关系<br>&#160; Others:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 其它内容的说明<br>&#160; Function List:&#160; // 主要函数列表，每条记录应包括函数名及功能简要说明<br>&#160;&#160;&#160; 1. ....<br>&#160; History:&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 修改历史记录列表，每条修改记录应包括修改日期、修改<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 者及修改内容简述 &#160;<br>&#160;&#160;&#160; 1. Date:<br>&#160;&#160;&#160;&#160;&#160;&#160; Author:<br>&#160;&#160;&#160;&#160;&#160;&#160; Modification:<br>&#160;&#160;&#160; 2. ...<br>*************************************************/<br><br>2、函数：列出函数的目的，功能、输入输出、返回值、调用关系等。<br>模版：<br>/*************************************************<br>&#160; Function:&#160;&#160;&#160;&#160;&#160;&#160; // 函数名称<br>&#160; Description:&#160;&#160;&#160; // 函数功能、性能等的描述<br>&#160; Calls:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 被本函数调用的函数清单<br>&#160; Called By:&#160;&#160;&#160;&#160;&#160; // 调用本函数的函数清单<br>&#160; Table Accessed: // 被访问的表（此项仅对于牵扯到数据库操作的程序）<br>&#160; Table Updated:&#160; // 被修改的表（此项仅对于牵扯到数据库操作的程序）<br>&#160; Input:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 输入参数说明，包括每个参数的作<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 用、取值说明及参数间关系。<br>&#160; Output:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 对输出参数的说明。<br>&#160; Return:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 函数返回值的说明<br>&#160; Others:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 其它说明<br>*************************************************/<br><br>3、文件内部注释：编写代码的同时应该写出注释，修改代码时应该连同修改注释。保证注释与文件的同步。写注释时应该遵循简洁，准确，明了的原则，尽量少使 用缩写，尤其是不常用的缩写。注释的位置应该在被注释语句的上方或右方，位于上方时，应该与上方的语句用空行分开。注释应该与被注释语句相同缩进。<br><br>4、命名：变量，数据结构等如果命名不是充分自注释的，必须有注释。说明其作用，取值范围，在哪里使用，适用时的注意事项等。<br><br>5、语句：分支语句必须给出注释。包括语句块的功能，输出。程序块结束行右方必须给出注释以表明程序块结束。switch语句由于某种情况在一个case结束后必须进入另一个case语句时，必须加上注释。<br><br>6、其他需要注意的事项：应该避免在一行代码或表达式中使用注释；函数，变量，结构等的命名尽量遵循规范，使代码成为自注释的；注释应该是对代码的解释或对意图的说明，帮助理解代码。<br><br><br>二、排版<br><br>&#160;&#160;&#160; 正确的排版方式有助于程序的理解，增加可读性。并且在编写代码的过程中，有助于梳理思路。<br><br>1、程序块必须采用缩进风格编写，最好是缩进4个空格。最好不用使用&#8220;tab&#8221;键，不同的编辑器对&#8220;tab&#8221;的解释方式不同，容易造成混乱。<br><br>2、相对独立的程序块之间、变量说明之后必须加空行。<br><br>3、较长的语句应该换行。尽量在低优先级的操作符出换行。换行要有必要缩进，并把操作符放在此行最前面。如果是函数的参数，则不允许将某一参数隔断，应该在两个参数之间换行，中间的逗号放在上一行的最后，<br><br>4、if、for、do、while、case、switch、default等语句自占一行，且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。括号（程序块的分界符）也独占一行，不缩进，其内语句才开始缩进。<br><br>5、多个短句不允许放在同一行。<br><br>6、在两个以上的关键字、变量、常量进行对等操作时，它们之间的操作符之前、之后或者前后要加空格；进行非对等操作时，如果是关系密切的立即操作符（如－>），后不应加空格。<br><br>三、 标识符命名<br>1、标识符的命名要清晰、明了，有明确含义，同时使用完整的单词或大家基本可以理解的缩写，避免使人产生误解。<br>&#160;&#160;&#160; 说明：较短的单词可通过去掉&#8220;元音&#8221;形成缩写；较长的单词可取单词的头几个字母形成缩写；一些单词有大家公认的缩写。<br>&#160;&#160;&#160; 示例：如下单词的缩写能够被大家基本认可。<br>&#160;&#160;&#160; temp&#160;&#160;&#160;&#160;&#160; 可缩写为&#160; tmp&#160; ;<br>&#160;&#160;&#160; flag&#160;&#160;&#160;&#160;&#160; 可缩写为&#160; flg&#160; ;<br>&#160;&#160;&#160; statistic 可缩写为&#160; stat ;<br>&#160;&#160;&#160; increment 可缩写为&#160; inc&#160; ;<br>&#160;&#160;&#160; message&#160;&#160; 可缩写为&#160; msg&#160; ;<br><br>2、命名中若使用特殊约定或缩写，则要有注释说明。<br>&#160;&#160;&#160; 说明：应该在源文件的开始之处，对文件中所使用的缩写或约定，特别是特殊的缩写，进行必要的注释说明。<br><br>3、自己特有的命名风格，要自始至终保持一致，不可来回变化。<br>&#160;&#160;&#160; 说明：个人的命名风格，在符合所在项目组或产品组的命名规则的前提下，才可使用。（即命名规则中没有规定到的地方才可有个人命名风格）。<br><br>4、对于变量命名，禁止取单个字符（如i、j、k...），建议除了要有具体含义外，还能表明其变量类型、数据类型等，但i、j、k作局部循环变量是允许的。<br>&#160;&#160;&#160; 说明：变量，尤其是局部变量，如果用单个字符表示，很容易敲错（如i写成j），而编译时又检查不出来，有可能为了这个小小的错误而花费大量的查错时间。<br>&#160;&#160;&#160; 示例：下面所示的局部变量名的定义方法可以借鉴。<br>&#160;&#160;&#160; int liv_Width<br>&#160;&#160;&#160; 其变量名解释如下：<br>&#160;&#160; &#160;&#160;&#160; &#160;l&#160;&#160;&#160;&#160;&#160; 局部变量（Local）&#160; （其它：g&#160;&#160;&#160; 全局变量（Global）...）<br>&#160;&#160; &#160;&#160;&#160; &#160;i&#160;&#160;&#160;&#160;&#160; 数据类型（Interger）<br>&#160;&#160; &#160;&#160;&#160; &#160;v&#160;&#160;&#160;&#160;&#160; 变量（Variable）&#160;&#160; （其它：c&#160;&#160;&#160; 常量（Const）...）<br>&#160;&#160; &#160;&#160;&#160; &#160;Width&#160; 变量含义<br>这样可以防止局部变量与全局变量重名。<br><br>5、命名规范必须与所使用的系统风格保持一致，并在同一项目中统一，比如采用UNIX的全小写加下划线的风格或大小写混排的方式，不要使用大小写与下划线混排的方式，用作特殊标识如标识成员变量或全局变量的m_和g_，其后加上大小写混排的方式是允许的。<br>&#160;&#160;&#160; 示例： Add_User不允许，add_user、AddUser、m_AddUser允许。&#160;<br><br>6、：除非必要，不要用数字或较奇怪的字符来定义标识符。<br>&#160;&#160;&#160;&#160; 示例：如下命名，使人产生疑惑。<br>&#160;&#160;&#160; #define _EXAMPLE_0_TEST_<br>&#160;&#160;&#160; #define _EXAMPLE_1_TEST_<br>&#160;&#160;&#160; void set_sls00( BYTE sls );<br><br>&#160;&#160;&#160; 应改为有意义的单词命名<br>&#160;&#160;&#160; #define _EXAMPLE_UNIT_TEST_<br>&#160;&#160;&#160; #define _EXAMPLE_ASSERT_TEST_<br>&#160;&#160;&#160; void set_udt_msg_sls( BYTE sls );<br><br>7、在同一软件产品内，应规划好接口部分标识符（变量、结构、函数及常量）的命名，防止编译、链接时产生冲突。<br>&#160;&#160;&#160; 说明：对接口部分的标识符应该有更严格限制，防止冲突。如可规定接口部分的变量与常量之前加上&#8220;模块&#8221;标识等。<br><br>8、用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。<br><br>&#160;&#160;&#160; add / remove&#160;&#160;&#160;&#160;&#160;&#160; begin / end&#160;&#160;&#160;&#160;&#160;&#160;&#160; create / destroy&#160;<br>&#160;&#160;&#160; insert / delete&#160;&#160;&#160; first / last&#160;&#160;&#160;&#160;&#160;&#160; get / release<br>&#160;&#160;&#160; increment / decrement&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; put / get<br>&#160;&#160;&#160; add / delete&#160;&#160;&#160;&#160;&#160;&#160; lock / unlock&#160;&#160;&#160;&#160;&#160; open / close<br>&#160;&#160;&#160; min / max&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; old / new&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; start / stop<br>&#160;&#160;&#160; next / previous&#160;&#160;&#160; source / target&#160;&#160;&#160; show / hide<br>&#160;&#160;&#160; send / receive&#160;&#160;&#160;&#160; source / destination<br>&#160;&#160;&#160; cut / paste&#160;&#160;&#160;&#160;&#160;&#160;&#160; up / down<br>&#160;&#160;&#160; 示例：<br>&#160;&#160;&#160; int&#160; min_sum;&#160; &#160;<br>&#160;&#160;&#160; int&#160; max_sum;<br>&#160;&#160;&#160; int&#160; add_user( BYTE *user_name );<br>&#160;&#160;&#160; int&#160; delete_user( BYTE *user_name );<br><br>9、除了编译开关/头文件等特殊应用，应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义。</span><br></div><img src ="http://www.cppblog.com/qy5328464/aggbug/75213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qy5328464/" target="_blank">yo-yo</a> 2009-03-01 08:45 <a href="http://www.cppblog.com/qy5328464/articles/75213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>