我正在使用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_4()。
我在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就可以在没有禁用代码的情况下绘制调用图了?
您可以尝试以下建议之一:
- 在
MACRO_NAME
的定义和条件中,不要直接使用TRUE
和FALSE
,而是使用1
和0
- 不要为
MACRO_NAME
设置值,但要检查它是否已定义 - 将"宏展开"设置为"是",将"仅预定义展开"设置成"是"。然后设置"预定义"和/或"按定义展开"以包括相关宏