C++ Doxygen和multiple#使用相同的名称定义

C++ Doxygen和multiple#使用相同的名称定义,c++,doxygen,C++,Doxygen,这是我用强氧剂做的一个小实验。 假设我有6个文件: h1.h: f1Data.h: #define val 10 f1.cpp: #include "h1.h" #include "f1Data.h" int A::func1() { return val; } h2.h: f2Data.h #define val 20 f2.cpp #include "h2.h" #include "f2Data.h" int B::func2() { return val; }

这是我用强氧剂做的一个小实验。 假设我有6个文件:

h1.h:

f1Data.h:

#define val 10
f1.cpp:

#include "h1.h"
#include "f1Data.h"

int A::func1()
{
    return val;
}
h2.h:

f2Data.h

#define val 20
f2.cpp

#include "h2.h"
#include "f2Data.h"

int B::func2()
{
    return val;
}
当我将GENERATE_XML=yes和CALL_GRAPH=yes放入配置文件并运行doxygen时,我在生成的XML文件中看到一个bug。特别是,我看到在A::func1()的引用中,给出了f2Data.h中的#定义值,而不是f1Data.h中的#定义值。只有当两个文件中的宏名称相同[在本例中,val]时,才会发生这种情况


有人能告诉我这是doxygen的错误还是我不正确地使用了doxygen吗?

doxygen在处理代码时做了几个假设:

  • 标头已得到适当保护(因此只需处理一次)
  • 公共符号名称在单个项目中是唯一的
  • 这些通常是很好的编程实践,但并不是像您的示例所示由C强制执行的


    如果不遵守上述两条规则,则强氧的输出可能不正确

    谢谢你的回答。它有我的投票权,但我没有必要的声誉!
    #define val 20
    
    #include "h2.h"
    #include "f2Data.h"
    
    int B::func2()
    {
        return val;
    }