是否可以记录一个 typedef,根据预处理器定义具有不同类型,并使用 Doxygen 在 html 输出中显示两种替代方案?
我想要记录的代码:
/**
* \file
*/
#ifdef _WIN32
/**
* Documentation for Windows goes here...
*/
typedef wchar_t MyChar;
#else
/**
* Documentation for Non-Windows goes here...
*/
typedef char MyChar;
#endif
我已经测试了几个与预处理器相关的设置,但我只能更改 html 输出中显示的 typedef 或合并文档。我什至设法让一种 typedef 显示在文件的概述部分中,而另一种则显示在详细描述中。然而我无法让两种选择同时出现。
我设法产生以下两种替代方案:
----------------------------------------------
typedef wchar_t | MyChar | ....
----------------------------------------------
----------------------------------------------
typedef char | MyChar | ....
----------------------------------------------
但不是这样的
----------------------------------------------
typedef wchar_t | MyChar | ....
----------------------------------------------
typedef char | MyChar | ....
----------------------------------------------
注意:我不介意修改源代码,只要
wchar_t
和char
都需要显示在typedef ...
部分我参加聚会迟到了,但是...
如果您在 ENABLE_PREPROCESSING = YES
中设置了
Doxyfile
,然后还设置了 PREDEFINED = DOXYGEN
,则可以执行以下操作:
#if defined(DOXYGEN)
/// @brief On Windows
typedef wchar_t MyChar;
/// @brief On other systems
typedef char MyChar;
#else
#if defined(_WIN32)
typedef wchar_t MyChar;
#else
typedef char MyChar;
#endif
#endif
因此编译器最终只会看到并选择一个定义,但 Doxygen 会看到这两个定义并将它们都添加到输出中。
你可以减少重复量,但代价是降低可读性:
#if defined(_WIN32) || defined(DOXYGEN)
/// @brief On Windows
typedef wchar_t MyChar;
#endif
#if !defined(_WIN32) || defined(DOXYGEN)
/// @brief On other systems
typedef char MyChar;
#endif
那个
!
比一些漂亮的大#else
要微妙得多,但它至少意味着你不会意外地更改主代码中的定义,然后忘记更改相应的文档。
尽管如果您需要支持许多不同的操作系统,那么这很容易变成一长串过于复杂的条件。
\typedef
命令作为显式文档的形式来实现此目的,但是当我尝试它时,我无法让它工作。
最后,设置
ENABLE_PREPROCESSING = NO
实际上可能会导致 Doxygen 读取:
#if defined(_WIN32)
/// @brief On Windows
typedef wchar_t MyChar;
#else
/// @brief On other systems
typedef char MyChar;
#endif
就好像:
/// @brief On Windows
typedef wchar_t MyChar;
/// @brief On other systems
typedef char MyChar;
但目前,这是一个未经检验的理论。
请注意,这些解决方案中的任何一个都可能最终会破坏参考链接,因为当 Doxygen 期望每个符号都是唯一的时,您实际上定义了相同的符号两次。