doxygen无法正确解析宏

时间:2019-01-31 16:18:06

标签: macros c-preprocessor doxygen call-graph

我正在使用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是,但是只有在将其设置回NO后,我才没有为此功能Func_1获得任何调用图。在HTML文件中再次绘制了调用图

其中定义了FALSE/TRUE的头文件是这样的:

#ifndef HEADER_H
#define HEADER_H

.....

#ifndef TRUE
   #define TRUE   1
#endif

#ifndef FALSE
   #define FALSE  0
#endif

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

1 个答案:

答案 0 :(得分:0)

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

  • 请勿在{{1​​}}的定义和条件中直接使用TRUEFALSE,而应使用10
  • 不为MACRO_NAME设置值,而是检查它是否已定义。
  • 将“宏扩展”设置为“是”,并将“仅预定义的扩展”设置为“是”。然后设置Predefined和/或Expand As Defined以包括相关的宏。