【问题标题】:doxygen not resolving macro correctlydoxygen 无法正确解析宏
【发布时间】:2019-06-25 04:00:14
【问题描述】:

我正在使用 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

我也尝试使用Macro Expansion YES,但后来我没有得到这个函数Func_1 的调用图,只有在将它设置回 NO 之后,调用图再次在 html 文件中绘制

定义FALSE/TRUE 的头文件开头如下:

#ifndef HEADER_H
#define HEADER_H

.....

#ifndef TRUE
   #define TRUE   1
#endif

#ifndef FALSE
   #define FALSE  0
#endif

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

【问题讨论】:

    标签: macros c-preprocessor doxygen call-graph


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多