《Google C++编码规范》读书笔记第七章:注释

《Google C++编码规范》读书笔记第七章:注释

注释对于代码的可读性是非常重要的

一.注释风格(Comment Style)

使用//或者/* */都可以,只要统一就好

二.文件注释(File Comments)

在每一个文件里加入版权公告,然后是文件内容描述。依次:
1. 版权(copyright statement),例如:Copyright 2008 Google Inc.;
2. 版本许可证(license boilerplate):例如:Apache 2.0,BSD,LGPL,GPL;
3. 作者(author line):标识文件的原始作者。

通常,头文件对所声明的类的功能和用法做简单讨论,源文件则可以包含更多的细节和算法讨论。可以把源文件中的注释放到头文件中,并在源文件中指出文档在头文件中。

常见五种常见的开源协议
- BSD开源协议(original BSD,Free BSD):自由
的修改使用,必须带有原来代码中的BSD协议。
- Apache Licence 2.0(Version 2.0,Version 1.1,Version 1.0):该协议和BSD类似
- GPL(GNU General Public License):Linux就是采用了GPL,GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。
- LGPL(GNU Lesser General Public License): LGPL允许商业软件通过类库引用(link)方式使用LGPL
类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用
并发布和销售。
- MIT:MIT是和BSD一样宽范的许可协议。

三.类注释(Class Comments)

每个类的定义要附着描述类的功能和用法的注释。
如果类任何同步前提(synchronization assumption),请使用文档说明之;同样地,如果类可以被多线程访问,也使用文档说明之。

四.函数注释(Function Comments)

函数声明处注释描述函数的功能,定义处描述函数的实现。
声明处注释的内容:
1. 输入输出(inputs, outpus);
2. 对类的成员而言,函数调用期间是否需要保持引用参数,是否会释放这些参数;
3. 如果函数分配了内存,是否需要调用者释放;
4. 是否存在函数使用的性能隐忧(performance implications);
5. 如果函数是可重入的(re-entrant),其同步前提是什么?

例如:

// Returns an iterator for this table. It is the client's
// responsibility to delete the iterator when it is done with it,
// and it must not use the iterator once the GargantuanTable object
// on which the iterator was created has been deleted.
//
// The iterator is initially positioned at the beginning of the table.
//
// This method is equivalent to:
// Iterator* iter = table->NewIterator();
// iter->Seek("");
// return iter;
// If you are going to immediately seek to another place in the
// returned iterator, it will be faster to use NewIterator()
// and avoid the extra seek.
Iterator* GetIterator() const;

注释构造/析构函数时,要准确说明函数对参数做了什么。
函数定义:
每个函数定义需要注释说明函数的功能和实现要点

五.变量注释(Variable Comments)

通常变量名就有比较清晰的含义,特定情况下才需要注释。
1. 类成员:
类的成员变量应该说明用途,如果变量可以接受NULL或者-1等警戒值,须说明之。
2. 全局变量(常量)
全局变量也应该说明其含义和用途。

六.实现注释(Implementation Comments)

对于代码中的巧妙或者晦涩的地方,应该加以注释。
可以使用代码前加注释,或者代码行尾后添加两个空格进行注释。

//comments
{
    ...
}

{
    if(...) {
        ...  //comments
    }
}

七.标点、拼写和语法(Punctuation, Spelling and Grammar)

注释一般包含适当大写和句点(.),短一点的注释可以随意点,但是要注意风格的一致性。
对于分号和逗号的使用。

八.TODO注释(TODO Comments)

对于那些临时的,短期的解决方案,或者已经够好但是不够完美的代码使用TODO注释。
方式:TODO,后面接括号,括号里面加上逆的大名、邮件地址等,还可以在后面加上冒号,目的是可以根据统一的TODO格式进行查找,例如:

//TODO(kl.gmail.com):use a "*" here for concateation operator

如果下个在将来某一天来做一件事,可以加上一个特定的时间(“Fix by November 2005”)或者事件(“Remove this code…”)。

主要参考自《Google C++编码规范》中文版

猜你喜欢

转载自blog.csdn.net/qq_25467397/article/details/80905509