【发布时间】: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