问题描述
我正在使用Doxygen v1.8.9.1来分析AUTOSAR C代码。 AUTOSAR代码具有一些宏来定义变量和函数。像这样:
#define P2VAR(ptrtype,memclass,ptrclass) ptrtype *
我尝试更改以下配置:
ENABLE_PREPROCESSING
MACRO_EXPANSION
EXPAND_ONLY_PREDEF
EXPAND_AS_DEFINED
SKIP_FUNCTION_MACROS
无论我做什么,它都无法识别使用这些宏定义的函数和变量。相反,它会看到具有相同名称的多个功能。
typedef P2VAR( uint8,AUTOMATIC,DATA_LOCATION) var_1;
typedef P2VAR( uint8,DATA_LOCATION) var_2;
typedef P2VAR( uint8,DATA_LOCATION) var_3;
它将不会看到3个类型为uint8的变量,名称分别为var_1,var_2,var_3 但是它看到3个同名的函数P2VAR
xml输出中的示例:
任何人都曾经见过并能够解决此问题吗?
解决方法
以防我使用您的代码:
#define P2VAR(ptrtype,memclass,ptrclass) ptrtype *
typedef P2VAR( uint8,AUTOMATIC,DATA_LOCATION) var_1;
typedef P2VAR( uint8,DATA_LOCATION) var_2;
typedef P2VAR( uint8,DATA_LOCATION) var_3;
并作为doxygen配置文件:
QUIET=YES
EXTRACT_ALL=YES
ENABLE_PREPROCESSING=YES
MACRO_EXPANSION =YES
EXPAND_AS_DEFINED=YES
GENERATE_XML=YES
我只在定义部分看到一次P2VAR
,在索引中看到一次(当然在代码部分也看到)。
在doxygen版本1.8.20以及版本1.8.9.1中我都看到了
当我尝试一个简单的代码时,就像@albert的答案中所提到的那样,它可以正常工作,但是在大代码上仍然无法使用。
对我有用的是按如下所示在PREDEFINED配置中添加宏:
PREDEFINED = "FUNC(rettype,memclass)=rettype" \
"P2VAR(ptrtype,ptrclass)=ptrtype *" \
"VAR(type,memclass)=type"