将内部库的doxygen注释块放在哪里(在H或CPP文件中)?[关闭]


97

常识告诉我们,Doxygen注释块必须放在类,结构,枚举,函数,声明所在的头文件中。我同意这是一个合理的论据,对于没有源的库(仅包含目标代码的标头和库)来说,这是合理的。

但是...在开发公司内部(或作为我自己的副项目)库时,我一直在想完全相反的方法,该库将与其完整的源代码一起使用。我建议将大注释块放在实现文件(HPP,INL,CPP等)中,以免使标头中声明的类和函数的界面混乱。

优点:

  • 头文件中的混乱程度较小,只能添加功能分类。
  • 例如,使用Intellisense时预览的注释块不会冲突-这是我在.H文件中具有函数的注释块并在同一.H文件中具有内联定义时观察到的缺陷。但包含在.INL文件中。

缺点:

  • (显而易见的一个)注释块不在声明所在的头文件中。

那么,您如何看待并可能提出建议?

Answers:


77

将文档放在人们使用和处理代码时可以读写的地方。

类注释放在类前面,方法注释放在方法前面。

这是确保事物得到维护的最佳方法。它还可以使您的头文件保持相对的精简,并避免了人们更新方法文档的麻烦问题,这些问题导致头文件变脏并触发了重建。我实际上已经知道有人以此为借口以后编写文档


11
我曾痛苦地想过为什么应该避免在标头中使用文档-一位高级副总裁告诉我将方法注释放入类声明中,并发现自己实际上保存了注释编辑以供以后使用,因为点击这些标头会触发45分钟的构建时间!
安迪·邓特

7
不落水,只是问:如果我想弄清楚API(甚至是内部API)的作用,我宁愿不必打开.cpp并仔细阅读所有代码来查找文档。我承认这将是一个痛苦,如果你记录的不仅仅是客户的什么方法做(如视图如何它),但你不应该这样做,无论如何,对不对?
TED

8
使用Doxygen生成文档的全部目的是使生成的文档可访问。我们有一个内部Web服务器,Doxygen输出将发送到该服务器,然后我们可以在讨论中使用指向该服务器上页面的链接。这也将类或方法文档与讨论更广泛的设计问题的其他页面联系在一起。
Andy Dent

1
确定实施讨论的公开程度是一个有趣的问题。当然,如果有特定的算法或副作用,我希望以图书馆的客户身份来了解它们。有时只有维护人员才知道,而Doxygen具有标记条件部分的简便方法,因此您可能会针对不同的观点生成不同的文档。
Andy Dent

76

我喜欢利用名称可以在多个地方记录的事实。

在头文件中,我编写了该方法的简短说明,并记录了其所有参数-与方法本身的实现相比,这些参数更改的可能性较小,如果存在,则无论如何都需要更改函数原型。

我将长格式文档放在实际实现旁边的源文件中,因此可以随着方法的发展而更改详细信息。

例如:

mymodule.h

/// @brief This method adds two integers.
/// @param a First integer to add.
/// @param b Second integer to add.
/// @return The sum of both parameters.
int add(int a, int b);

mymodule.cpp

/// This method uses a little-known variant of integer addition known as
/// Sophocles' Scissors. It optimises the function's performance on many
/// platforms that we may or may not choose to target in the future.
/// @TODO make sure I implemented the algorithm correctly with some unit tests.
int add(int a, int b) {
  return b + a;
}

3
我喜欢这种方法,但它似乎与AUTOBRIEF不兼容。我想知道是否有一种配置解决方法来消除生成的多个摘要。
亚伦·赖特

我也喜欢这种方法,它在实现过程中提供了很好的平衡。
Xofo

我无法使用Doxygen 1.8.15在我的机器上重现此方法。参数文档不会出现,只有简短和详细的描述。
punyidea

1
附录:将详细说明的位置更改为该功能块的内部内容对我来说很有效。现在,将描述添加到标题文档中描述的末尾。
punyidea

18

标头中包含注释意味着如果更改注释,则必须重新编译该类的所有用户。对于大型项目,如果编码人员冒着花下20分钟重建所有内容的风险,他们将不太愿意更新标头中的注释。

并且..由于您应该阅读html文档,而不是浏览代码中的文档,因此注释块更难在源文件中定位并不是一个大问题。


正确,但是如果它是从工件检索的动态库并且您没有源文件,则是一个大问题:-)
DrumM

12

标题: 由于在查看文件时其他“杂音”较少,因此更易于阅读注释。

来源: 然后,您可以在查看注释时阅读实际功能。

我们只使用标头中注释的所有全局函数和源中注释的局部函数。如果您愿意,还可以包括copydoc命令,以将文档插入多个位置,而不必多次编写(对于维护而言更好)

但是,您也可以使用简单的命令将结果复制到不同的文件文档中。例如:-

我的文件1.h

/**
 * \brief Short about function
 *
 * More about function
 */
WORD my_fync1(BYTE*);

我的文件1.c

/** \copydoc my_func1 */
WORD my_fync1(BYTE* data){/*code*/}

现在,您在两个功能上都获得了相同的文档。

这样一来,在最终输出中的多个位置显示文档的同时,您就可以减少代码文件中的干扰。


2
块何时复制?
Mert CanErgün17年

2

通常,我将.h文件中的接口文档(\ param,\ return)放在.h文件中,将实现文件(\ details)放在.c / .cpp / .m文件中。Doxygen将功能/方法文档中的所有内容分组。



2

我正在使用QtCreator进行编程。一个非常有用的技巧是按住Ctrl键单击函数或方法以在头文件中获取声明。

在头文件中注释该方法时,您可以快速找到所需的信息。所以对我来说,注释应该位于头文件中!


-1

在c ++中,有时可以在标头模块和.cpp模块之间拆分实现。在这里将文档放入头文件似乎更干净,因为这是所有公共函数和方法都得到保证的唯一位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.