文档#define没有预处理器

时间:2018-01-02 16:13:34

标签: c doxygen

在我写的Doxygen文档中,我设置了ENABLE_PREPROCESSING = NO,因为我希望记录所有代码,而不管任何#if语句。

问题是我需要记录#define,但是因为我已经禁用了预处理器,所以没有为它生成任何内容(该文件上的其他结构都记录得很好)。 / p>

一个选项是启用预处理器并使用PREDEFINED选项设置所有#if,但在我的情况下这实际上是不可实现的(太多了)。

有没有其他方法可以达到预期的效果?

谢谢!

1 个答案:

答案 0 :(得分:3)

  

在我写的Doxygen文档中,我设置了ENABLE_PREPROCESSING = NO,因为我希望记录所有代码,而不管任何#if语句。

它有一些代码味道。您的代码提供的界面应根据其构建方式记录。记录可能已经构建但未构建的功能,或者记录可以构建功能的替代方法,这是毫无意义的。一般来说,这意味着使用Doxygen预处理条件编译指令。

如果你有条件编译,你打算让你的库的用户在他们构建自己的程序时触发,那么我建议采用不同的方法:拆分你的标题,以便你的用户选择要包含哪些标头而不是依赖条件编译来自定义单个标头的内容。

但是,如果必须记录单个文档集中每个条件编译分支中的所有代码,并且您还想记录宏,那么您可以考虑保留预处理,并过滤使用输入过滤器输出条件编译指令。后一部分可能像这样指定,例如:

INPUT_FILTER = "sed '/^[ ]*#[ ]*\(if\|el\|endif\)/ d'"

这不考虑续行,以便保持相对简单,但即使以这种形式,它也可能足以满足您的目的。如果需要,可以增加它来处理行继续。