Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在doxygen中记录#unde的好方法_Doxygen_Undef - Fatal编程技术网

在doxygen中记录#unde的好方法

在doxygen中记录#unde的好方法,doxygen,undef,Doxygen,Undef,我目前有两个#define in c文件,用于关闭硬件的一些功能以进行测试。但是,当它们还未定义时,我想用doxygen来记录它们 例如: 这很好: /// \def SIMULATE_SOME_HW_INTERFACE /// Define this when you want to simulate HW interface. #define SIMULATE_SOME_HW_INTERFACE 当您将#define更改为#undef时,在doxygen中会收到一条警告,并且它不会显示在d

我目前有两个#define in c文件,用于关闭硬件的一些功能以进行测试。但是,当它们还未定义时,我想用doxygen来记录它们

例如:

这很好:

/// \def SIMULATE_SOME_HW_INTERFACE
/// Define this when you want to simulate HW interface.
#define SIMULATE_SOME_HW_INTERFACE
当您将#define更改为#undef时,在doxygen中会收到一条警告,并且它不会显示在doxygen生成的输出中。我想记录这个#定义它是定义的还是未定义的


如何强制doxygen记录一个#undef???

我找到了一个很麻烦的方法,在#define下添加了#undef。通过这种方式,它是为Doxygen定义的,但立即为编译器未定义

/// \def SIMULATE_SOME_HW_INTERFACE
/// Define this when you want to simulate HW interface.
/// Comment out #undef to simulate HW interface
#define SIMULATE_SOME_HW_INTERFACE
#undef  SIMULATE_SOME_HW_INTERFACE

我试图弄清楚如何使用预定义选项在Doxyconfig文件中设置SIMULATE_HW_接口。无法让它工作。这是我目前为止最好的解决方案。

在仅由Doxygen包含的头文件中定义它们(放在与主源代码不同的目录树中)

通过使用仅在Doxygen设置中定义的define来保护此头文件,例如:

#ifdef ONLY_FOR_DOXYGEN

/// \def SIMULATE_SOME_HW_INTERFACE
/// Define this when you want to simulate HW interface.
#define SIMULATE_SOME_HW_INTERFACE

#endif

我还使用它有条件地包含MFC基类之类的内容,以便它们显示为类层次结构的基础,而不必解析所有MFC。

我解决了在主标题文件中记录编译器标签的问题:

/**
 * \defgroup flags Compilerflags
 */

/**
 * \def MY_FLAG
 * \ingroup flags
 * Dokumentation....
 */
#ifndef MY_FLAG
#define MY_FLAG
#undef MY_FLAG
#else
#define MY_FLAG
#endif

这样一切都可以正常工作:doxygen和编译,您可以继续在命令行中指定您的标志…

也许最好的解决方案不会定义您需要定义的内容。根据我的经验#undef只用于玩把戏/黑客这有点像黑客。我想编写大量代码,处理开发机器上未安装的专用硬件,但在需要在实际目标机器上运行时可以轻松启用。作为对undef的一个真正重大警告,我曾经为苹果修复了一个长达18个月的bug。Quicktime头依赖于递归地包含条件定义,而传统的保护变量是未定义的。后来,有人添加了
#pragma one
,这意味着编译器破坏了递归包含。顺便说一句,这看起来很奇怪(一些静态分析器可能会注意到),我同意你的看法。这只是一个解决办法。我希望有人知道如何强制doxygen记录一个#unde。