首页 > 解决方案 > doxygen 无法正确解析宏

问题描述

我正在使用 doxygen 1.8.11 和 eclipse 插件 eclox。我试图为我的源文件生成调用图。当我检查其中一个文件时,我注意到调用图包含一个函数调用,它实际上被禁用了,#define 我的期望是在调用图中看不到这个函数调用。

在源文件之上:

#define MACRO_NAME   FALSE

....

void Func_1(int *p)
{
   ....
#if (MACRO_NAME == TRUE)
        Func_Call_2()
#else
        Func_Call_3()
#endif 
}

FALSE 和 TRUE 是在“包含路径”设置中包含的标题之一中定义的,并且我还在 html 报告中获得了 FALSE 和 TRUE 的超链接,因此 doxygen 能够找到定义。

Func_Call_2 和 Func_Call_3() 都绘制在调用图中,而实际上我只想看到 Func_Call_3()。

我在 doxyfile 中的设置是:

Enable Preprocessing      YES
Macro Expansion           NO
Expand Only Predefined    NO
Search Includes           YES
Extract All               YES
Extract Static            YES

我也尝试了YES 但只有在将其设置回 NO 后Macro Expansion我才得到此函数的调用图,调用图在 html 文件中再次绘制Func_1

在其中FALSE/TRUE定义的头文件开始如下:

#ifndef HEADER_H
#define HEADER_H

.....

#ifndef TRUE
   #define TRUE   1
#endif

#ifndef FALSE
   #define FALSE  0
#endif

我可以尝试其他设置吗?这样 doxygen 将在没有禁用代码的情况下绘制调用图?

标签: macrosc-preprocessordoxygencall-graph

解决方案


您可以尝试以下建议之一:

  • 不要在 and 的定义中直接使用and而TRUEFALSE条件中使用 and 。10MACRO_NAME
  • 不要设置值,MACRO_NAME但检查它是否已定义。
  • 将宏扩展设置为 YES 并将仅扩展预定义设置为 YES。然后设置预定义和/或按定义扩展以包含相关宏。

推荐阅读