我有3个文件:
test.c的
int table[] = {
#define X(val) val,
#include "test.x"
#undef X
};
void level2(void) {
level3();
level4();
}
void level3(void) {
level4();
}
test2.c中
void level1(void) {
level2();
level3();
level4();
}
void level4(void) {
}
test.x
X(1)
X(2)
X(3)
我使用doxygen为这些函数创建调用图。这就是我的预期:
但这是我得到的:
看来test.c上的X-macro是罪魁祸首。我设法让它干活 2件事(要么会):
test.x
以便doxygen找不到它。它会显示警告,但是
callgraph是正确的。test.x
末尾添加尾随换行符。通常文件会结束
在X(3)
之后立即。问题:
如何在不编辑文件的情况下从doxygen中获取可靠的调用图? 我需要改变一个设置还是这个普通的错误?
答案 0 :(得分:1)
我对xmacros有不同的经验。通常,Doxygen会将宏视为正确的声明,而不是实际预处理它们。为了让宏工作(这包括x-macros)。一般来说:
MACRO_EXPANSION=yes
EXPAND_ONLY_PREDEF=yes
(这将使Doxygen扩展所有宏)或EXPAND_AS_DEFINED
。此外,请注意:http://www.doxygen.nl/manual/config.html#cfg_skip_function_macros
为了让您了解xmacros和Doxygen的可能性,我可以从中生成适当的文档:https://github.com/couchbase/libcouchbase/blob/master/include/libcouchbase/error.h#L95