设为首页 加入收藏

TOP

5.2.2 注释的风格(1)
2013-10-07 15:34:46 来源: 作者: 【 】 浏览:67
Tags:5.2.2 注释 风格

5.2.2  注释的风格(1)

每个组织注释代码的方法都不同。在某些环境中,为了让代码文档具有统一标准,需要使用特定的风格。在其他环境中,注释的数量以及风格由程序员决定。下面的示例给出了注释代码的几种方法。

1. 每行都加入注释

避免缺少文档的方法之一是在每行都包含一条注释。每行代码都加入注释可以保证您编写的所有内容都具有特定的理由。但在实际中,如果代码非常多,这么多的注释是混乱、繁琐而无法做到的。例如,考虑下面没有意义的注释:

  1. int result;                                                                 // Declare an integer to hold the result.  
  2. result = doodad.getResult();        // Get the doodad's result.  
  3. if (result % 2 == 0) {                          // If the result mod 2 is 0 ...  
  4. logError();                                                     // then log an error,  
  5. } else {                                                                // otherwise ...  
  6. logSuccess();                                   // log success.  
  7. }                                                                                       // End if/else  
  8. return result;                                          // Return the result  

代码中的注释好像把每行代码当成容易阅读的英语故事讲述。如果读者具有基本的C++(www.cppentry.com)技能,这完全没有用。这些注释没有引入任何的代码附加信息。看一下这行:
  1. if (result % 2 == 0) {                          // If the result mod 2 is 0 ... 

这行注释只是将代码翻译成了英语,并没有说明为什么程序员用2对结果求模。较好的注释应该是这样的:
  1. if (result % 2 == 0) {                          // If the result is even ... 

修改后的注释给出了代码的附加信息,尽管对于大多数程序员而言这非常明显。结果对2求模是因为代码需要检测结果是否是偶数。

尽管注释太多会有冗长以及多余的倾向,但是当代码很难理解时这样做还是有必要的。下面的代码也是每行都有注释,但是这些注释确实有用。

  1. // Call the calculate method with the default values.  
  2. result = doodad.calculate(getDefaultStart(), getDefaultEnd(), getDefaultOffset());  
  3. // To determine success or failure, we need to bitwise AND the result with  
  4. // the processor-specific mask (see "Doodad API v1.6", page 201).  
  5. result &= getProcessorMask();  
  6. // Set the user field value based on the "Marigold Formula. "  
  7. // (see "Doodad API v1.6", page 136)  
  8. setUserField((result + kMarigoldOffset) / MarigoldConstant) + MarigoldConstant);  

这段代码的环境不明,但是注释可以让您理解每行代码的作用。如果没有注释,很难解释与&以及神秘的"Marigold Formula"相关的计算。

通常没必要给每行代码都添加注释,但是如果代码非常复杂因而需要这样做的时候,不要只是将代码翻译成英语:要解释代码实际上在做什么。

2. 前置注释

您的团队可能决定所有的源文件都使用标准注释。这是记录程序以及特定文件重要信息的好机会。您可能想在每个文件的顶部加入说明信息,下面给出了一些示例信息:

最近的修改日期

原始作者

前面所讲的修改日志

文件给出的功能ID

版权信息

文件或者类的简要说明

未完成的功能

已知的bug

您的开发环境可能允许创建模板,从而自动启动具有前置注释的新文件。某些源代码控制系统(例如并发版本系统,CVS)甚至可以帮助填写元数据。例如,如果您的注释包含了字符串$Id$,CVS将自动扩展注释,包含作者、文件名、版本以及日期。下面的示例给出了一个前置注释:

  1. /*  
  2. * $Id: Watermelon.cpp,v 1.6 2004/03/10 12:52:33 klep Exp $  
  3. *  
  4. * Implements the basic functionality of a watermelon. All units are expressed  
  5. * in terms of seeds per cubic centimeter. Watermelon theory is based on the  
  6. * white paper "Algorithms for Watermelon Processing."  
  7. *  
  8. * The following code is (c) copyright 2011, FruitSoft, Inc. ALL RIGHTS RESERVED  
  9. */  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇5.2.2 注释的风格(2) 下一篇5.3.1 通过重构分解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)