当前位置:文档之家› C++注释规范

C++注释规范

C++注释规范
C++注释规范

C++注释规范

版本:1.0

制定部门:质量管理部

目录

1 说明 (3)

2 注释种类 (3)

2.1 重复代码 (3)

2.2 解释代码 (3)

2.3 代码标记 (3)

2.4 概述代码 (3)

2.5 代码意图说明 (4)

2.6 传达代码无法表达的信息 (4)

3 注释原则 (4)

3.1 站在读者的立场编写注释 (4)

3.2 注释无法取代良好的编程风格 (4)

3.3 好注释能在更高抽象层次上解释我们想干什么 (5)

4 规范细则 (5)

4.1 文件注释规范 (5)

4.2 名字空间注释规范 (6)

4.3 类定义注释规范 (7)

4.4 数据声明注释规范 (8)

4.5 函数注释规范 (8)

4.6 代码标记注释规范 (10)

5 FAQ (10)

5.1 枚举值需要注释吗? (10)

5.2 前置条件、后置条件和不变式有必要注释出来吗? (10)

5.3 写注释太耗时间怎么办? (11)

5.4 有效的注释是指什么? (11)

参考书目 (11)

参考工具 (11)

1 说明

本文档用于规范C++代码中注释的编写。规范中提出的多数注释格式都来源于文档生成工具doxygen,所以遵从本规范进行注释的C++代码都可以使用doxygen生成美观一致的代码文档。

同时另一方面,美观绝非衡量文档质量的唯一标准。文档内容准确与否,是否充分,以及语言组织是否清晰流畅,这些都是决定一份文档质量的重要标准。遗憾的是,这些标准当中有不少需要通过主观加以判断,很难进行明确的规范。

所以我们将尽可能的提供明确的评判标准,同时,本规范中也不可避免的提出了一些比较主观的注释要求或是建议,这些要求或是建议多数都来自于众多先驱多年的开发经验。遵循它们不仅有助于生成一份美观的代码文档。更重要,依照这些要求和建议来编写注释,能够有效的帮助开发者在早期就反省自己设计的合理性,同时也为编写单元测试提供更多的帮助。

2 注释种类

2.1 重复代码

重复性注释只是用不同文字把代码的工作又描述一次。他除了给读者增加阅读量外,没有提供更多信息。

2.2 解释代码

解释性注释通常用于解释复杂、敏感的代码块。在这些场合他们能派上用场,但通常正是因为代码含混不清,才体现出这类注释的价值。如果代码过于复杂而需要解释,最好是改进代码,而不是添加注释。使代码清晰后再使用概述性注释或者意图性注释。

2.3 代码标记

标记性注释并非有意留在代码中,他提醒开发者某处的工作未做完。在实际工作中,我们经常会使用这些注释作为程序骨架的占位符,或是已知bug的标记。

2.4 概述代码

概述性注释是这么做的:将若干代码行的意思以一两句话说出来。这种注释比重复性注释强多了,因为读者读注释能比读代码更快。概述性注释对于要修改你代码的其他人来说尤

其有用。

2.5 代码意图说明

意图性注释用来指出要解决的问题,而非解决的方法。意图性注释和概述性注释没有明显的界限,其差异也无足轻重,都是非常有效的注释。

2.6 传达代码无法表达的信息

某些信息不能通过代码来表达,但又必须包含在源代码中。这种注释包括版权声明、作者、日期、版本号等杂项信息;与代码设计有关的注意事项;优化注记;和doxygen要求的注释等等。

3 注释原则

编写一份好的注释,并不比编写一段好的代码更容易,以至于我们不得不特别强调编写注释应该遵循的三个原则:

3.1 站在读者的立场编写注释

我们的代码将会面对很多不同的读者。其中一类是代码复审者。他们希望看到的是准确的注释说明,小心地编写注释避免出现可笑的错误是最重要的。

接下来的读者是代码的用户,这部分人大多并不关心代码中使用了何等绝妙的高超技术。事实上,代码能干什么,以及如何正确的使用更令他们感兴趣。所以当我们在对那些可能面向用户的地方注释时,多多考虑一下用户的实际需要并非多余。

最后一类,怎么说呢,作为代码的维护者,他们整天要和成打的代码打交道,渴望能够用最少的时间找到目标代码。所以,如果代码中有一些提纲挈领的注释,可以供他们用作节约代码阅读时间的索引,毫无疑问,这会令大家都工作得更加开心。

3.2 注释无法取代良好的编程风格

引用《代码大全》中的观点,在代码层文档中起主要作用的因素并非注释,而是良好的编程风格。编程风格包括良好的程序结构、直率易懂的方法、有意义的变量名和函数名、具名常量、清晰的布局、以及最低复杂度的控制流及数据结构。关于命名方面的规范参见《C++命名规范》。

虽然本篇规范讨论的重点并非编程风格,但是无论什么时候,我们都应该明白,对于精心编写的代码而言,注释不过是美丽衣裳上的小饰物而已。

3.3 好注释能在更高抽象层次上解释我们想干什么

在编写注释这一问题上,我们经常犯的一个错误,就是将代码已经清楚说明的东西换种说法再写一次。尤其是如果我们为代码添加中文注释的时候,简单的等同于将英文译作中文,那么这样的注释能够给他人带来的好处微乎其微,更多时候是徒增阅读负担以及维护工作量。

再次重申,好注释不是重复代码,或是解释代码。它们会让其意图清晰。注释应该能在更高抽象层次上解释我们想干什么。

4 规范细则

4.1 文件注释规范

代码文件注释是典型的用于传达代码无法表达信息类的注释,所以没有太多值得讨论的地方。一份文件注释至少需要包括以下内容:

1)代码文件的文件名,占据注释的第一行并用@file加以标记

2)文件内容的简要描述,占据单独一行并用@brief加以标记

3)文件作者的公司email地址,占据单独一行并用@author加以标记

4)文件活动年份1,占据单独一行并用@date加以标记

也可以包含以下一些可选内容:

1)文件内容的详细描述,紧接简要描述之后并与其以一空行隔开

2)文件版本,占据单独一行并用@version加以标记,使用maj.min格式表示,其

中maj为主版本号,min为次版本号。

文件注释需要放到每个代码文件的起始位置。这里提供了一个完整的格式示例,多数情况下可以完全照搬其格式。

请注意,正如我们《C++编码规范》中提到的。在C++世界中,我们不应该使用C风格的/*…*/块注释,而应该使用C++风格的//行注释。是的,我们应该毫不动摇的恪守这一条

1所谓“文件活动年份”,可以把它理解为文件从创建年份到最后一次维护的年份,比如2004-2006。

款。但是,由于我们希望借助doxygen帮助我们生成漂亮的文档,如果我们在对文件注释的

为了避免这样的尴尬场面,我们只好破例留下了这段C风格文件注释。好在这是唯一必须使用C风格注释才能令doxygen满意的地方,跨过文件注释之后,我们仍然应该虔诚的遵循C++的行注释风格。

4.2 名字空间注释规范

名字空间是一个好东西,编写名字空间注释的要点是,不要试图把这个名字空间介绍的面面俱到。简单的介绍设置这个名字空间的意图或是完全不要注释都是不错的选择。

如果决定要为名字空间添加注释,有一点非常重要:无论如何不要试图给同一个名字空间提供两份不同的注释,不管这些注释是否位于同一个代码文件中。一个有效的做法是,一开始不用给名字空间添加任何注释,先用doxygen生成文档,发现哪个名字空间缺少文档,再挑选一个最合适的代码文件进行名字空间注释。下面是一个名字空间注释的格式示例:

结合前面文件注释的例子我们可以看到,@brief概述项之后,必须有一个空行用于分割随后的详细描述。本文中所有的概述和详述项都遵循这一规则,后面将不再累述。

4.3 类定义注释规范

类定义注释主要有以下几个用途:

?说明该类的设计方法。有的信息通过编码细节“逆向工程”是难以获得的,如果概述性注释能够提供这些信息,将会特别有用。在其中应该说明类的设计思

路、总体设计方法和曾考虑过后又放弃的其他方案等等。

?类使用指南。这主要是针对代码用户所做的注释,当看到一个类定义时,用户往往第一个念头就是想要知道这个类可以用来做什么,以及怎么才能正确地做

到。添加这样的注释,可以有效地帮助用户进入一些代码作者认为正确地使用

场景,而不是任凭用户自行想象,然后使用错误的方式来操作这个类。

?说明类不变项。类确保从调用者的视角来看,该条件总是为真。在类各个成员函数内部处理过程中,不变项不一定会保持,但在函数退出,控制权返回到调

用者时,不变项必须为真。

请注意,要想达到以上这些目标,使用重复代码的注释方式是不可能做到的。下面是我们一个类注释格式及演示如何达到第2、3两个个目标的例子:

请特别注意例子中注释的最后部分,使用@invariant指出的不变项,这一承诺将对类所有的方法有效。因此,单元测试的编写者将会非常乐意对这一承诺加以验证。

那么,是不是所有的类,我们都需要为其编写如此详尽细致的说明注释呢?事实上完全2@ref是doxygen中用于引用其他主题的特殊标签,本例中多处出现的引用都会指向一些方法说明。

没有必要。所谓使用指南,只有在别人有使用的需求且存在疑问,需要这些信息加以解答时才具有实际的意义。所以,对于大多数为了优化代码结构,或是为了实施某些设计模式而衍生出来,并不真正直接向外界提供功能的内部实现类而言,都不需要编写示例中那样太过详细的指南性质注释。这些类更需要的是说明该类设计方法的注释。

大致上我们认为只要满足下面列举的一些条件,就应该编写较为详细的指南性说明注释:

?概要设计中明确提出的接口类

?会被多人或是多处共享的工具类

?虽是局部使用,但结构复杂以至于很容易引起错误理解以至于需要特别说明4.4 数据声明注释规范

数据声明包括类数据成员、具名常量和位标志。

变量声明的注释应给出变量名未表达出来的各种信息。研究表明,对数据进行注释比对使用数据的过程做注释更为重要(SDC 1982)。下面是对数据进行注释的一些准则:?注释数值的单位。例如某个数值变量表示长度,请指明长度单位是英寸、英尺、米、千米还是毫米。不能认为单位是不言自明的——新手不知道,工作于另一

个系统的人也不知道。

?说明数值的允许范围。如果变量值有一个期望范围,就应该明确的说明这个范围。

我们约定,可以在一行以内容纳的数据声明注释,都应该使用行尾注释法,下面是一个变量声明注释的格式示例:

注意///之后的<小于号,这是行尾注释必须遵循的格式。

一行无法容纳的数据声明注释,则不采用行尾注释法。下面是一个多行注释的例子:

4.5 函数注释规范

为一个函数编写注释,一般而言需要说明以下几个部分的信息:

a)函数的概要描述,使用@brief加以标识。注意如果一个函数无法用一两句话说清

楚,就有必要考虑我们到底想让函数做什么。要是不便做出简短的说明,往往意味着设计还嫌不足,这时就应该反思一下是否需要修正设计了。原则上除了简单的get/set访问器,其余所有的函数都应该附上概要说明。

b)通过函数名无法传达的信息,紧接概要描述之后,并与其以一空行隔开。如果函数

名和概要描述已经足够说明这个函数的一切,那么完全可以忽略这一部分。但有些时候我们希望告诉读者一些名称和标准功能之外的函数行为特征时,就可以将这些内容通过这种方式表达出来。这些内容很可能会描述一些函数精度局限性;是否以及如何对某一全局数据进行了修改;所使用算法的来源等等。

c)参数的描述,每个参数注释都使用@param加以标识。事实上,参数注释的内容和

前面介绍的数据注释非常类似,它们都用于给出名称未能表达的信息,比如单位等信息。只不过,对于函数注释而言,有专门的前置条件用于描述参数取值的范围限定。所以在参数注释中就不需要专门指出其取值范围。注意为参数加上输入/输出标记是必要的,这一指示通过紧接参数名的[in]/[out]来体现。

d)前置条件描述,在最后一个参数注释之后使用@pre加以标识。说到前置条件,这

在契约式编程中是很重要的概念。它是函数与其调用者之间制定的契约之一。前置条件规定了作为函数的调用者,必须遵循的一些调用规则,如果调用者违反的这些规则,那么函数将不会正确执行。正如前面提到,前置条件可以用于描述参数的取值范围。事实上,前置条件可以约定的规则远不止这一点,例如作为一个数据库数据检索函数,它可以在其前置条件中指出必须首先保证数据库连接是打开的等等。

前置条件不是函数注释中必须的选项,但是我们认为作为契约式编程实践的重要体现,尽量明确的为自己的函数构筑起防线是非常值得的事情。

e)返回值描述,在前置条件之后使用@return加以标识。对于返回值,我们需要以比

较简短的语言说明它的含义,同时也要注意是否存在单位等需要特别说明的附加信息。返回值描述比较特殊的一个地方在于,如果返回值的值本身有一个确定的取值范围,并且应该分项说明的话,可以使用@retval标记,对每个可能返回的值加以说明。如果函数没有返回值或是返回值为void,则可以忽略本项内容。

f)后置条件描述,在返回值描述之后使用@post加以标识。与前置条件相对应,后置

条件用于向函数调用者承诺函数保证会做到的事情,以及函数执行完成时世界的状态。一个函数具有后条件这一事实同时也意味着它会结束:不可能出现无限循环。

同前置条件一样,后置条件同样不是必须的选项,但这并不意味着其可有可无。

下面是一个包含了上述所有内容的成员函数注释示例:

4.6 代码标记注释规范

在代码编写过程中,经常需要在尚未完成的代码骨架中加入一些警示标记,或是当发现程序某处存在bug时加以标注以备随后修正。糟糕的是,不同的程序员可能会使用不同的方式来表达他们的意图,这导致维护难度增加以及很难使用工具检测。所以需要我们以一种统一且使用工具容易检测的方式来进行代码标记。

标注计划中需要完成的代码,我们可以在准备添加代码的地方使用@todo标记,这样不但在doxygen生成的文档中会醒目的表现出来,而且很多编辑器也能够识别这一标记,在特定的位置提示你将要进行的工作。类似的,为了指示已知bug,我们可以使用@bug标记。

5 FAQ

5.1 枚举值需要注释吗?

事实上,枚举值本身就是对一些原本是字面常量值的特殊注释。下面是我们经常可以看到的枚举注释:

显然,这样画蛇添足地重复代码的注释毫无意义。请记住,枚举值本身就是说明,取一个合理的好名字远胜于添加一段无谓的注释。与之类似的还有typedef,在是否需要注释这个问题上,他们具有类似的特征。

5.2 前置条件、后置条件和不变式有必要注释出来吗?

其实,采用注释来表现程序契约纯属无奈之举。原因很简单,C++语言本身并不支持程序契约的表达。可是经验证明,按合约设计的程序,在交付后产生问题的可能性远远小于没

有明确约束的。

尽管借助C++编译器无法执行这些契约,但是至少我们可以通过编写注释,以一种语言提醒的方式对这一缺陷加以弥补。有一个可行的途径总好过一无所有不是吗。

5.3 写注释太耗时间怎么办?

有效注释并不费时。注释太多并不比注释太少好,

注释占用太多时间通常归因于两点。

一是注释风格耗时或枯燥乏味。我们在制定规范时对此进行了充分考虑,在编写便利和符合doxygen要求之间作了很多平衡。

二是因为不容易想出程序干什么的描述,所以写注释太难。这通常意味着还没有真正的理解程序。“写注释”所占用的时间其实都用在了更好地理解程序上面,不管写不写注释,这些时间注定是要花的。

5.4 有效的注释是指什么?

参考前文中提到的注释分类,我们认为,对于已经发布的代码,只允许有三种类型的注释:代码无法表达的信息、意图性注释和概述性注释。

特别需要注意的是,重复代码性质的注释,无论如何都不能称为好注释。编写这样的注释只会给人带来阅读和维护的负担。

参考书目

[McConnell04] Steve McConnell. CODE COMPLETE (2nd Edition) (Microsoft Press 2006) [Hunt-Thomas04] A.Hunt and D.Thomas. The Pragmatic Programmer (Addison Wesley 2004) [Doxygen06] Doxygen manual 1.4.7 (Doxygen 2006)

参考工具

[Doxygen] Doxygen 1.4.7

C语言注释规范

C语言注释规范 1.注释原则 同一软件项目开发中,尽量保持代码注释规范和统一。 注释方便了代码的阅读和维护。 边写代码边注释,修改代码时要相应修改注释,保证注释和代码的一致性。 注释要简洁明确,不要出现形容词。 对于写的好的注释,我们将是第一个受益者。 大型软件开发中,通过别人的注释可以快速知道他人所写函数的功能,返回值,参数的使用。 2.文件头部的注释 示例: / * Program Assignment : 该文件的作用 * Author: 作者 * Date: 2013/8/6 14:34 * Description: 该文件的描述 *****/ /* * Source code in : 源代码的路径 * Function List: * initLinear 初始化线性表 * destoryLinear 释放线性表申请的空间 * isLinearEmpty 判断线性表是否为空 * isLinearFull 判断线性表是否为满 * getLinearElementValue 取得下标为index的元素的值 */ 注意:这个函数列表可以快速查询到我们想要了解的函数。 3.结构体,全局变量等的注释 示例: typedef POLYNOMIAL USER_TYPE; /* 新的数据类型的描述*/ int a; /* 全局变量的作用*/ /* 说明结构体的功能*/ typedef struct LINEAR { USER_TYPE *data; /* 每个成员的意义(作用) */ int maxRoom; /* 每个成员的意义(作用) */

int elementCount; /* 每个成员的意义(作用) */ }LINEAR; 4.函数的注释 在逻辑性较强的的地方加入注释,以便其他人的理解,在一定的程度上排除bug。 示例: /* * Function Name: getLinearElementIndex * Purpose: 取得元素的index值 * Params : * @LINEAR linear 线性表实例 * @USER_TYPE var 类型为USER_TYPE的实例 * @int (*)() cmp 提供接口,让用户定义具体比较函数 * Return: int 返回元素的index值 * Limitation: 如果返回-1,则代表不存在var的元素 */ int getLinearElementIndex(LINEAR linear, USER_TYPE var, int (*cmp)()) { /* * 如果逻辑太过复杂,这里写明该算法的过程和思路。 */ boolean found = FALSE; int i; for(i = 0; i < && !found; i++) if(cmp[i], var) == 0) found = TRUE; if(i >= i = NOT_FOUND; return i; }

MyEclipse设置Java代码注释模板

设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦。现就每一个元素逐一介绍: 文件(Files)注释标签: /** * @Title: ${file_name} * @Package ${package_name} * @Description: ${todo} * @author chenguang * @date ${date} ${time} * @version V1.0 */ 类型(Types)注释标签(类的注释): /** * 类功能说明 * 类修改者修改日期 * 修改说明 * Title: ${file_name} * Description:清大海辉科技开发平台 * Copyright: Copyright (c) 2006 * Company:北京清大海辉科技有限公司 * @author ${user} * @date ${date} ${time} * @version V1.0 */ 字段(Fields)注释标签: /** * @Fields ${field} : ${todo} */ 构造函数标签: /** * Title: * Description: * ${tags} */

方法(Constructor & Methods)标签: /** * 函数功能说明 * ${user} ${date} * 修改者名字修改日期 * 修改内容 * @param ${tags} * @return ${return_type} * @throws */ getter方法标签: /** * @return ${bare_field_name} */ setter方法标签: /** * @param ${param} ${bare_field_name} */ 加注释快捷键:选中你要加注释的方法或类,按Alt + shift + J。

程序代码注释编写规范

程序代码注释编写规范 为提高控制程序的阅读性与可理解性,现制定相关代码程序代码注释编写的编写规范。 一般情况下,源程序有效注释量必须在20%以上,注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。 常规注释有以下两种方式。 单行:以"//"符号开始,任何位于该符号之后的本行文字都视为注释。 多行:以"/*"符号开始,以"*/"结束。任何介于这对符号之间的文字都视为注释。 一、说明性文件 说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。 示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************* COPYRIGHT (C), MicTiVo International. Co., Ltd. File NAME: // 文件 Author: Version: Date: // 作者、版本及完成日期 DESCRIPTION: // 用于详细说明此程序文件完成的主要功能,与其他模块 // 或函数的接口,输出值、取值范围、含义及参数间的控 // 制、顺序、独立或依赖等关系 Others: // 其它内容的说明 Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明 1.... History: // 修改历史记录列表,每条修改记录应包括修改日期、修改 // 者及修改内容简述 1. Date: Author: Modification: 2. .. *************************************************/ 二、源文件头 源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。 示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************************ COPYRIGHT (C), MicTiVo International. Co., Ltd. FileName: Author:

Eclipse自动添加注释

Eclipse自动添加注释 我们在用Eclipse开发工具编写代码时,常常需要在类的头部加上一下注释,标明类的作者,创建时间等等。我们常用的做法是: 方式1:在新建类时勾选:Generate comments 如图1。 图1 创建类时指定生成注释 这种方式固然可以生成,但是只会是Eclipse默认的,仅有@author xxxx

方式2:快捷键生成 第二种就是我们生成类的时,也许忘了勾选。那么我们就会使用Eclipse提供的快捷键ctrl+alt+j 图2 快捷键添加注释 当然这种方式也需要开发者,现将鼠标定位类名行或者方法名行。然后生成对应的注释。那么如果我们想要自己定义自己的注释呢? 方式三:自动生成自定义注释 Eclipse最大好处就是很多东西都能让开发者自己来定义。下面说说如何自定义生成注释。 3.1首先自定义注释模板 打开:windows-->preference -->Java-->code style -->code templates --> code -->new java file 按照如上操作打开到相应对话框,如下图3

图3:注释模板对话框 当进入到这个对话框后,点击右侧“Edit”编辑按钮,进入到注释模板编辑对话框,如下图4:

图4 编辑自定义注释模板 在这个对话框中编辑你想要的注释模板,编辑完成后点击OK。 附:注释基本模板: 当点击OK退出模板编辑对话框后,勾选:automatically add comments for new methods and types,如图5

图5 设置自动添加注释 当然,你还可以设置很多注释,包括getter、setter等等的注释,都在这里,有兴趣的你都可以多试试。

程序代码注释编写规范

程序代码注释编写规范 XXX份公司

为提高控制程序的阅读性与可理解性,现制定相关代码程序代码注释编写的编写规范。 一般情况下,源程序有效注释量必须在20%以上,注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。 常规注释有以下两种方式。 单行:以"//"符号开始,任何位于该符号之后的本行文字都视为注释。 多行:以"/*"符号开始,以"*/"结束。任何介于这对符号之间的文字都视为注释。 一、说明性文件 说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。 示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************* COPYRIGHT (C), MicTiVo International. Co., Ltd. File NAME: // 文件 Author: Version: Date: // 作者、版本及完成日期 DESCRIPTION: // 用于详细说明此程序文件完成的主要功能,与其他模块 // 或函数的接口,输出值、取值范围、含义及参数间的控 // 制、顺序、独立或依赖等关系 Others: // 其它内容的说明 Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明 1.... History: // 修改历史记录列表,每条修改记录应包括修改日期、修改 // 者及修改内容简述 1. Date: Author: Modification: 2. .. *************************************************/ 二、源文件头 源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。 示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************************

C语言编写规范之注释

1、头文件包含Includes 2、私有类型定义 Private typedef 3、私有定义Private define 4、私有宏定义 Private macro 5、私有变量 Private variables 6、私有函数原型Private function prototypes 7、私有函数Private functions 8、私有函数前注释 /****************************************************************************** * * Function Name : FSMC_NOR_Init * Description : Configures the FSMC and GPIOs to interface with the NOR memory. * This function must be called before any write/read operation * on the NOR. * Input : None * Output : None * Return : None ******************************************************************************* / 9、程序块采用缩进风格编写,缩进空格为4。 10、相对独立的程序块之间、变量说明之后必须加空行; 11、较长的字符(>80字符)要分成多行书写,长表达式要在低优先级操作符划分新行,操作符放在新行之首,新行要恰当缩进,保持排版整齐; 12、循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首; 13、若函数或过程中的参数较长,则要进行适当的划分。 14、不允许把多个短语句写在一行中,即一行只写一条语句。 15、if、for、do、while、case、switch、default等语句自占一行,且if、for、 do、while等语句的执行语句部分无论多少都要加括号{}。 16、对齐只使用空格键,不使用TAB键; 17、 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case 语句下的情况处理语句也要遵从语句缩进要求 18、 程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一 列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以 及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。 19、 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或

程序源代码注释规范

程序注释规范说明 程序注释规范应包括以下三方面: 一、文件头部注释 在代码文件的头部进行注释,这样做的好处在于,我们能对代码文件做变更跟踪。在代码头部分标注出创始人、创始时间、修改人、修改时间、代码的功能,这在团队开发中必不可少,它们可以使后来维护/修改的同伴在遇到问题时,在第一时间知道他应该向谁去寻求帮助,并且知道这个文件经历了多少次迭代、经历了多少个程序员的开发和修改。 样本: /***************************************************** ** 作者:Liuchao ** 创始时间:2007-11-12 ** 修改人:Liuchao ** 修改时间:2007-11-12 ** 修改人:Liaochao ** 修改时间:2007-11-12 ** 描述: ** 主要用于产品信息的资料录入,… *****************************************************/ 二、函数、属性、类等注释 请使用///三斜线注释,这种注释是基于XML的,不仅能导出XML制作帮助文档,而且在各个函数、属性、类等的使用中,编辑环境会自动带出注释,方便你的开发。以protected,protected Internal,public声明的定义注释都建议以这样命名方法。 例如: ///

/// 用于从ERP系统中捞出产品信息的类 ///

class ProductTypeCollector { … } 三、逻辑点注释 在我们认为逻辑性较强的地方加入注释,说明这段程序的逻辑是怎样的,以方便我们自己后来的理解以及其他人的理解,并且这样还可以在一定程度上排除BUG。在注释中写明我们的逻辑思想,对照程序,判断程序是否符合我们的初衷,如果不是,则我们应该仔细思考耀修改的是注释还是程序了… 四、变量注释 我们在认为重要的变量后加以注释,说明变量的含义,以方便我们自己后来的理解以及其他人的理解,并且这样还可以在一定程度上排除BUG.我们常用///三斜线注释。 /// 用于从ERP系统中捞出产品信息的类 class ProductTypeCollector { int STData;/// … }

软件总代码行数_软件注释率_分析

文档名称:软件总代码行数_软件注释 率分析 作者: 日期:

1. cncc 1.1 工具简介 度量工具名称cncc 网址https://www.doczj.com/doc/9c13143927.html,/ 操作方式命令行 实现语言C++ 适用的操作系统Windows 可以度量的属性code-lines, empty-lines, comment-lines, total-lines 备注 1.2 工具优缺点总结 最新版本 cncc-1-3-1,在sourceforge中2004年已经停止更新。最大的优点是源代码全部存于一个cpp文件,便于集成。 缺点: 1.代码基本没有注释。 2.下载的代码编译有9个错误。 3.费了2个多小时也没搞定。 1.3 使用例程 无。 2. CodeCount 2.1 工具简介 度量工具名称CodeCount 网址https://www.doczj.com/doc/9c13143927.html,/downloads421/sourcecode/windows

/control/detail1783204.html 操作方式GUI 实现语言C++ 适用的操作系统Windows 可以度量的属性total-lines, empty-lines, comment-lines, code-lines, 备注 2.2 工具优缺点总结 优点: 工具比较精简,统计源文件总行数、代码行数、空白行数、注释行数,代码有一定的注释。 缺点: 下载的源码是vc7工程,由于机器并没有vc7,利用工具进行工程类型转换,将vc7的工程转换为vc6的工作,编译出错。 核心代码如下: BOOL bCommentSet = FALSE; //注释行统计标识有"/*"时TRUE, "*/"时FALSE BOOL bQuatoSet = FALSE; //字符串统计标识首次一行有奇数个"时TRUE, 下一行有奇数个"时FALSE int nLength = (int)file.GetLength(); CString bufRead; int nLineCommentBegin = 0; while(file.ReadString(bufRead)!=FALSE) { BOOL bStatedComment = FALSE;//本行作为注释行是否已统计过 BOOL bStatedCode = FALSE; //本行作为代码行是否已统计过 nLines++; bufRead.TrimLeft(); //先将文件头的空格或制表符去掉 if(bufRead.GetLength()==0) //为空白行

java注释规范总结大全

在软件开发的过程中总是强调注释的规范,但是没有一个具体的标准进行说明,通常都是在代码编写规范中简单的描述几句,不能作为一个代码注释检查的标准和依据,做什么都要有一个依据吗:),现在我特整理了一个《Java的注释规范》,内容来自网络、书籍和自己的实际积累。 JA V A注释规范 版本/状态作者版本日期 1.0 ghc 2008-07-02 一、背景 1、当我们第一次接触某段代码,但又被要求在极短的时间内有效地分析这段代码,我们需要什么样的注释信息? 2、怎么样避免我们的注释冗长而且凌乱不堪呢? 3、在多人协同开发、维护的今天,我们需要怎么样的注释来保证高质、高交的进行开发和维护工作呢? 二、意义 程序中的注释是程序设计者与程序阅读者之间通信的重要手段。应用注释规范对于软件本身和软件开发人员而言尤为重要。并且在流行的敏捷开发思想中已经提出了将注释转为代码的概念。好的注释规范可以尽可能的减少一个软件的维护成本, 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护。好的注释规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码。好的注释规范可以最大限度的提高团队开发的合作效率。长期的规范性编码还可以让开发人员养成良好的编码习惯,甚至锻炼出更加严谨的思维能力。 三、注释的原则 1、注释形式统一 在整个应用程序中,使用具有一致的标点和结构的样式来构造注释。如果在其他项目组发现他们的注释规范与这份文档不同,按照他们的规范写代码,不要试图在既成的规范系统中引入新的规范。 2、注释的简洁 内容要简单、明了、含义准确,防止注释的多义性,错误的注释不但无益反而有害。 3、注释的一致性 在写代码之前或者边写代码边写注释,因为以后很可能没有时间来这样做。另外,如果有机会复查已编写的代码,在今天看来很明显的东西六周以后或许就不明显了。通常描述性注释先于代码创建,解释性注释在开发过程中创建,提示性注释在代码完成之后创建。修改代码的同时修改相应的注释,以保证代码与注释的同步。 4、注释的位置 保证注释与其描述的代码相邻,即注释的就近原则。对代码的注释应放在其上方相邻或右方的位置,不可放在下方。避免在代码行的末尾添加注释;行尾注释使代码更难阅读。不过在批注变量声明时,行尾注释是合适的;在这种情况下,将所有行尾注释要对齐。 5、注释的数量 注释必不可少,但也不应过多,在实际的代码规范中,要求注释占程序代码的比例达到20%左右。注释是对代码的“提示”,而不是文档,程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱,注释的花样要少。不要被动的为写注释而写注释。 6、删除无用注释

Zdeveloper代码规范模板

Zdeveloper2.x代码规范1 ZDeveloper命名规范 常见JAVA包命名(以platform插件为例)。 2 公共包 plugins存放所有插件配置文件; lang存放所有插件国际化配置文件; JAVA存放所有插件java类文件; DB目录存放zdm文件。

3 一般情况java包 *.ui子包存放本插件所属UI类(*.ui省略前面的com.zving.platform,下同); *.service子包存放本插件所属扩展服务类; *.service.impl子包存放扩展服务项实现类; *.extend子包存放本插件扩展相关的类( 扩展点接口类或抽象类) ; *.extend.impl子包存放本插件扩展实现类( 扩展行为或其它扩展实现类) ; *.bl子包存放本插件所属后台业务逻辑类。 4 特殊扩展服务用到java包 *.code子包存放本插件所属扩展代码管理扩展服务的扩展项类; *.privilege子包存放本插件扩展菜单权限服务的扩展项类; *.config子包存放本插件扩展配置项扩展服务的扩展项类; *.properties子包存放本插件扩展栏目或站点配置项相关的扩展服务的扩展项类; *.tag子包存放本插件扩展标签服务的扩项类; *.tempalte子包存放本插件扩展模板服务的扩展项类;

( 插件包的命名参展以上方式, 项目需要能够酌情添加有一定意义的子包) 5 插件包 插件包统一以”com.zving.”+插件名称来命名(公司名称域名+插件名称)。 6 插件类 插件名称+”Plugin”, 位于插件所属包根目录下。 7 插件配置文件 ”com.zving.”+插件名称+”.plugin”。 8 UI类 页面名称+”UI”, 类存放位置为”com.zving.”+插件名称+”.ui”子包。

代码编写规范说明书

代码编写规范说明书(c#.net与https://www.doczj.com/doc/9c13143927.html,)目录 1 目的 2 范围 3 注释规范 3.1 概述 3.2 自建代码文件注释 3.3 模块(类)注释 3.4 类属性注释 3.5 方法注释 3.6 代码间注释 4 命名总体规则 5 命名规范 5.1 变量(Variable)命名 5.2 常量命名 5.3 类(Class)命名 5.4 接口(Interface)命名 5.5 方法(Method)命名 5.6 名称空间Namespace)命名 6 编码规则 6.1 错误检查规则 6.2 大括号规则 6.3 缩进规则 6.4 小括号规则 6.5 If Then Else规则 6.6 比较规则 6.7 Case规则 6.8 对齐规则 6.9 单语句规则 6.10 单一功能规则 6.11 简单功能规则 6.12 明确条件规则 6.13 选用FALSE规则 6.14 独立赋值规则 6.15 定义常量规则 6.16 模块化规则 6.17 交流规则 7 编程准则 7.1 变量使用 7.2 数据库操作 7.3 对象使用 7.4 模块设计原则 7.5 结构化要求 7.6 函数返回值原则 8 代码包规范 8.1 代码包的版本号

8.2 代码包的标识 9 代码的控制 9.1 代码库/目录的建立 9.2 代码归档 10 输入控制校验规则 10.1 登陆控制 10.2 数据录入控制 附件1:数据类型缩写表 附件2:服务器控件名缩写表 1 目的 一.为了统一公司软件开发设计过程的编程规范 二.使网站开发人员能很方便的理解每个目录,变量,控件,类,方法的意义 三.为了保证编写出的程序都符合相同的规范,保证一致性、统一性而建立的程序编码规范。 四.编码规范和约定必须能明显改善代码可读性,并有助于代码管理、分类范围适用于企业所有基于.NET平台的软件开发工作 2 范围 本规范适用于开发组全体人员,作用于软件项目开发的代码编写阶段和后期维护阶段。 3 注释规范 3.1 概述 a) 注释要求英文及英文的标点符号。 b) 注释中,应标明对象的完整的名称及其用途,但应避免对代码过于详细的描述。 c) 每行注释的最大长度为100个字符。 d) 将注释与注释分隔符用一个空格分开。 e) 不允许给注释加外框。 f) 编码的同时书写注释。 g) 重要变量必须有注释。 h) 变量注释和变量在同一行,所有注释必须对齐,与变量分开至少四个“空格”键。 如:int m_iLevel,m_iCount; // m_iLevel ....tree level // m_iCount ....count of tree items string m_strSql; //SQL i) 典型算法必须有注释。 j) 在循环和逻辑分支地方的上行必须就近书写注释。 k) 程序段或语句的注释在程序段或语句的上一行 l) 在代码交付之前,必须删掉临时的或无关的注释。 m) 为便于阅读代码,每行代码的长度应少于100个字符。 3.2 自建代码文件注释 对于自己创建的代码文件(如函数、脚本),在文件开头,一般编写如下注释: /****************************************************** FileName: Copyright (c) 2004-xxxx *********公司技术开发部 Writer: create Date: Rewriter:

代码注释规范说明

Comments criterion of the Code 在多个PROJIECT共同开发的前提下,为了减少修改升级CODE过程中出现失误和方便SI 人员对代码的维护,加强部门整体代码注释规范,建议通过在每一次代码修改过程中添加代码标志符进行注释,这样可以使软件工程师在升级代码的过程中减少错误率,同时可以保持对以前版本代码的修改思路清晰,能在最短时间里复查代码中的错误。 标准C++/C的文件结构: // Copyright (c) Microsoft Corporation. All rights reserved. // Use of this source code is subject to the terms of the Microsoft end-user // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT. // If you did not accept the terms of the EULA, you are not authorized to use // this source code. For a copy of the EULA, please see the LICENSE.RTF on your // install media. /** * Port Copyright (c) Hisys Corporation. All rights reserved. * @file batt_pdd.c * Abstract * This file contains battery driver PDD implementation. * Change Log * 2006.2.21 Shi Yuehua Initial Version * **/ 代码注释规范如下: //***********COMMENTS-HISTORY***********// /****************************************************************************** *NAME | SIGN | PROJECT | SUMMARY * *------------------------------------------------------------------------------ *Johson.Li M060806_A HXS006 Use the two methods to measure the battery voltage. *Johson.Li M060812_A HXS010 Change the init array value from 4 to 8. *Johson.Li M060812_B COMMON Change the USB CHANGING conditions. * ........... * ........... ******************************************************************************/ 代码注释标题声明包含四部分: 1.作者名称 2.标记符 3.项目名称 4.摘要 1.《NAME》:修改该部分CODE的软件人员名称(英文名称&中文名称拼音缩写),第一个字母大写。 2.《SIGN》:该标记符应在所有本次修改代码前面声明,主要是为了方便搜索,当我们想查找本次为了实现某个功能所做的代码修改时,可以搜索此标记符,即可找到全部修改过的相关代码段。 标记符:M060806_A M: 英文缩写 060806:代表修改日期为2006.08.06 A:代表当天添加或者修改的第一项功能。如果当日继续做其他有别与本次功能差异的修改,可以采用M060806_B的方法,依次类推(A、B、C、D、E、F……) .

idea,注释模板

竭诚为您提供优质文档/双击可除 idea,注释模板 篇一:idea快捷键 一常用快捷键 alt+回车导入包,自动修正,当引入的类需要异常捕获的时候 ctrl+shift+space自动补全代码,“new”字符,还可以引入强制转换的ctrl-alt-space可以自动导import类名或接口名提示,以及new后面的提示ctrl+n查找类 ctrl+shift+n查找文件 ctrl+shift+alt+n查找类中的方法或变量 ctrl+shift+alt+s:打开projectstructure ctrl+shift+F7选中文本,高亮显示所有该文本,按esc 高亮消失。ctrl+shift+F9编译类 ctrl+shift+F10运行类 crtl+shift++打开所有关闭的方法,crtl++打开当前关闭的方法 输入/**即可自(idea,注释模板)动写上该方法参数的注释

ctrl-shift-j快捷键把两行合成一行并把不必要的空 格去掉以匹配你的代码格式。ctrl-shift-V快捷键可以将最近使用的剪贴板内容选择插入到文本。使用时系统会弹出一个含有剪贴内容的对话框,从中你可以选择你要粘贴的部分。 ctrl+shift+up/down代码向上/下移动。 ctrl+shift+t自动创建测试类 ctrl+alt+s:打开settings ctrl+alt+l格式化代码 ctrl+alt+o优化导入的类和包 ctrl+alt+V快速为后面生成变量,如new或者方法的返回类型。ctrl+alt+left/right返回至上次浏览的位置ctrl-alt-b可以导航到一个抽象方法的实现代码。 ctrl-alt-t,选中某段代码,可以快速包围用if,try 等。在options|Filetemplates|codetab中你还可以自己定制产生捕捉块的模板。 alt+insert生成代码(如get,set方法,构造函数等) alt+shift+up/down代码向上/下移动。 alt+up/down在方法与类属性间快速移动定位 alt+F1查找代码所在位置 alt+1快速打开或隐藏工程面板 alt+left/right切换代码视图 alt+F3,选中文本,逐个往下查找相同文本,并高亮显

C 注释规范

C++注释规范 版本:1.0 制定部门:技术架构部C++基础架构组 2006.8

目录 1说明 (3) 2注释种类 (3) 2.1重复代码 (3) 2.2解释代码 (3) 2.3代码标记 (3) 2.4概述代码 (3) 2.5代码意图说明 (4) 2.6传达代码无法表达的信息 (4) 3注释原则 (4) 3.1站在读者的立场编写注释 (4) 3.2注释无法取代良好的编程风格 (4) 3.3好注释能在更高抽象层次上解释我们想干什么 (5) 4规范细则 (5) 4.1文件注释规范 (5) 4.2名字空间注释规范 (6) 4.3类定义注释规范 (7) 4.4数据声明注释规范 (8) 4.5函数注释规范 (8) 4.6代码标记注释规范 (10) 5FAQ (10) 5.1枚举值需要注释吗? (10) 5.2前置条件、后置条件和不变式有必要注释出来吗? (10) 5.3写注释太耗时间怎么办? (11) 5.4有效的注释是指什么? (11) 参考书目 (11) 参考工具 (11)

1说明 本文档用于规范C++代码中注释的编写。规范中提出的多数注释格式都来源于文档生成工具doxygen,所以遵从本规范进行注释的C++代码都可以使用doxygen生成美观一致的代码文档。 同时另一方面,美观绝非衡量文档质量的唯一标准。文档内容准确与否,是否充分,以及语言组织是否清晰流畅,这些都是决定一份文档质量的重要标准。遗憾的是,这些标准当中有不少需要通过主观加以判断,很难进行明确的规范。 所以我们将尽可能的提供明确的评判标准,同时,本规范中也不可避免的提出了一些比较主观的注释要求或是建议,这些要求或是建议多数都来自于众多先驱多年的开发经验。遵循它们不仅有助于生成一份美观的代码文档。更重要,依照这些要求和建议来编写注释,能够有效的帮助开发者在早期就反省自己设计的合理性,同时也为编写单元测试提供更多的帮助。 2注释种类 2.1重复代码 重复性注释只是用不同文字把代码的工作又描述一次。他除了给读者增加阅读量外,没有提供更多信息。 2.2解释代码 解释性注释通常用于解释复杂、敏感的代码块。在这些场合他们能派上用场,但通常正是因为代码含混不清,才体现出这类注释的价值。如果代码过于复杂而需要解释,最好是改进代码,而不是添加注释。使代码清晰后再使用概述性注释或者意图性注释。 2.3代码标记 标记性注释并非有意留在代码中,他提醒开发者某处的工作未做完。在实际工作中,我们经常会使用这些注释作为程序骨架的占位符,或是已知bug的标记。 2.4概述代码 概述性注释是这么做的:将若干代码行的意思以一两句话说出来。这种注释比重复性注释强多了,因为读者读注释能比读代码更快。概述性注释对于要修改你代码的其他人来说尤

华为代码规范文档

代码规范文档

目录 1 概述错误!未定义书签。 编写目的错误!未定义书签。 文档约定错误!未定义书签。 预期的读者和阅读建议错误!未定义书签。 参考文献错误!未定义书签。 2 排版要求错误!未定义书签。 程序块缩进错误!未定义书签。 程序块之间空行错误!未定义书签。 长语句和长表达式错误!未定义书签。 循环、判断等长表达式或语句错误!未定义书签。 长参数错误!未定义书签。 短语句错误!未定义书签。 条件、循环语句错误!未定义书签。 语句对齐错误!未定义书签。 函数、过程和结构等语句块错误!未定义书签。 程序块分界符错误!未定义书签。 操作符前后空格错误!未定义书签。 其他错误!未定义书签。 3 注释错误!未定义书签。 有效注释量错误!未定义书签。 公司标识错误!未定义书签。 说明性文件错误!未定义书签。 源文件头错误!未定义书签。 函数头部说明错误!未定义书签。 注释与代码一致错误!未定义书签。 注释内容错误!未定义书签。 注释缩写错误!未定义书签。 注释位置错误!未定义书签。 变量、常量注释错误!未定义书签。 数据结构的注释错误!未定义书签。 全局变量错误!未定义书签。 注释缩排错误!未定义书签。 注释与代码之间空行错误!未定义书签。 变量定义、分支语句错误!未定义书签。 其他错误!未定义书签。 4 标识符命名错误!未定义书签。 命名清晰错误!未定义书签。 特殊命名需注释错误!未定义书签。 命名风格保持一致错误!未定义书签。 变量命名错误!未定义书签。 命名规范与系统风格一致错误!未定义书签。 其他错误!未定义书签。 5 可读性错误!未定义书签。 运算符优先级错误!未定义书签。

论文要求及注释格式

《**文学》课程论文布置 总体要求: 1.以小论文方式完成; 2.为让同学认真准备,有足够时间完成,第10周即5月6号统一提交论文; 3.须交手写稿,不交电子稿。请学委按班级学号顺序统一整理后提交给教师; 4.教师阅读后会就作业进行课堂讲解; 5.期中成绩占期末总成绩的30%。请同学认真完成,如果对本次安排有意见或建议, 请及时提出,以便进行修改与改进。 评论**的小说《***》 说明与具体要求: 1.具体题目自行拟定。论文不必过于忧虑写得好坏,重在通过自己的努力,尝试了解、学习论文写作的基本规范与要求,为将来从事论文写作打下基础。 2.要探讨的论题主题不宜太大,要考虑可行性,尽量选一个角度深入研究。尤其注意 言之有据、充实而不发空论。不要写成读后感、作品欣赏或导读。 3.论文篇幅不少于2500字。 4.论文可以借鉴他人,但不能抄袭,用自己的语言和构思。 5.论文格式请参照我在网络教学平台教学材料中上传的学术论文,或者自行查找学习 知网上或图书馆、资料室专业杂志的论文。论文大体包括题目、摘要、关键词、主体、注释、参考文献等几个部分。 6.注意区别注释与参考文献。注释是指在文章中,具体引用了他人的观点、材料处的 注解。注释体例分文内注(在某处加括号的形式注明)、文末注、页脚注。本科生论文一般 以后两种为多,可以任选一种。参考文献一般指整篇文章曾经借鉴而不能或不必具体指出某 处的著作或文章。一般放在整篇论文后面。 7.以下附注释方式。大体可以作两种选择(以下以注释例说明),请根据自己的习惯选 择与学习。 注释方式一: 著作: 作者、著作名、出版者、出版年份、页码(这些要素的位置可以变动,但要求齐全并全文统一)

JAVA代码注释规范

JAVA代码注释规范 目录 JA V A代码注释规范 (1) 注释的原则 (1) 注释的简洁 (1) 注释的一致性 (1) 注释的位置 (2) 注释的数量 (2) 删除无用注释 (2) 复杂的注释 (2) 多余的注释 (2) 必加的注释 (3) JA V A注释技巧 (3) JA V A注释具体实现 (4) 源文件注释 (4) 类(模块)注释: (5) 接口注释: (5) 构造函数注释: (6) 方法注释: (6) 方法内部注释: (7) 全局变量注释: (7) 局部(中间)变量注释: (7) 常量 (7) p.s. 注释使用统一的注释文件 (8) 注释的原则 注释形式统一 在整个应用程序中,使用具有一致的标点和结构的样式来构造注释。如果在其他项目组发现他们的注释规范与这份文档不同, 按照他们的规范写代码,不要试图在既成的规范系统中引入新的规范。 注释的简洁 内容要简单、明了、含义准确,防止注释的多义性,错误的注释不但无益反而有害。 注释的一致性

在写代码之前或者边写代码边写注释,因为以后很可能没有时间来这样做。另外,如果有机会复查已编写的代码, 在今天看来很明显的东西六周以后或许就不明显了。通常描述性注释先于代码创建,解释性注释在开发过程中创建, 提示性注释在代码完成之后创建。修改代码的同时修改相应的注释,以保证代码与注释的同步。 注释的位置 保证注释与其描述的代码相邻,即注释的就近原则。对代码的注释应放在其上方相邻或右方的位置,不可放在下方。 避免在代码行的末尾添加注释;行尾注释使代码更难阅读。不过在批注变量声明时,行尾注释是合适的;在这种情况下,将所有行尾注释要对齐。 注释的数量 注释必不可少,但也不应过多,在实际的代码规范中,要求注释占程序代码的比例达到20%左右。注释是对代码的“提示”,而不是文档, 程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱,注释的花样要少。不要被动的为写注释而写注释。 删除无用注释 在代码交付或部署发布之前,必须删掉临时的或无关的注释,以避免在日后的维护工作中产生混乱。 复杂的注释 如果需要用注释来解释复杂的代码,请检查此代码以确定是否应该重写它。尽一切可能不注释难以理解的代码,而应该重写它。 尽管一般不应该为了使代码更简单便于使用而牺牲性能,但必须保持性能和可维护性之间的平衡。 多余的注释 描述程序功能和程序各组成部分相互关系的高级注释是最有用的,而逐行解释程序如何工作的低级注释则不利于读、写和修改,是不必要的, 也是难以维护的。避免每行代码都使用注释。如果代码本来就是清楚、一目了然的则不加注释,避免多余的或不适当的注释出现。

代码审查规范方案

代码审查规范 1. Code Review目的 Code Review是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们可以对代码、测试过程和注释进行检查。 Code Review主要用来在软件工程过程中改进代码质量,通过Code Review可以达到如下目的: ?在项目早期就能够发现代码中的BUG。 ?帮助初级开发人员学习高级开发人员的经验,达到知识共享。 ?避免开发人员犯一些很常见,很普通的错误。 ?保证项目组人员的良好沟通。 ?项目或产品的代码更容易维护。 2. Code Review的前提条件 代码提交审核前,开发者必须确保代码符合如下条件,审核者需要确保所有前提条件都已满足方可开始审查,同时也是审查的主要检查点。 ?所有代码注释清晰,语法正确,编译通过。 ?日志代码完整,业务日志、系统日志分开,中文描述,脱敏处理,状态变更,全部清晰明确。 ?测试代码覆盖全部分支和流程,暂时统一使用工具Emma(各编译器可下载对应插件)进行Coverage Check。

?项目引用关系明确,依赖关系清晰,配置文件描述。 3. Code Review的审查范围 代码的一致性、编码风格、代码的安全问题、脱敏问题、代码冗余、是否正确设计以符合设计要求(性能、功能)与设计文档相同等等。 3.1、完整性检查(Completeness) ?代码是否完全实现了设计文档中所涉及的所有流程和功能点 ?代码是否已包含所有所需的业务日志、系统日志、异常日志,日志内容是否完整,日志文件配置是否正确。 ?代码是否使用缓存等,配置信息是否正确可配置。 ?代码中是否存在任何没有定义或没有引用到的变量、常数或数据类型等 3.2、一致性检查(Consistency) ?代码的逻辑是否符合设计文档 ?代码中使用的格式、符号、结构等风格是否保持一致 3.3、正确性检查(Correctness) ?代码是否符合制定的标准 ?所有的变量都被正确定义和使用 ?所有的注释都是准确的 ?所有的程序调用都使用了正确的参数个数

相关主题
文本预览
相关文档 最新文档