Doxygen не может развернуть макросы AUTOSAR

#c #doxygen #autosar

#c #doxygen #автозапуск

Вопрос:

Я использую 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, AUTOMATIC, DATA_LOCATION)  var_2;
typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_3;
  

Он не увидит 3 переменные типа uint8 с именами var_1, var_2, var_3
но он видит 3 функции с одинаковым именем P2VAR

пример из вывода xml:

введите описание изображения здесь

кто-нибудь видел это раньше и смог это исправить?

Комментарии:

1. Что вы подразумеваете под «он видит 3 функции»? С предшествующим typedef в тех строках, которые меня смущают.

2. Просто для эксперимента (или чтобы сделать описание проблемы более точным), что произойдет, если вы вставите определение макроса прямо перед использованием?

3. @RubberBee Он показывает их как функции на выходе (см. Скриншот, добавленный к вопросу).

4. Я также пробовал другие макросы, где определение находится непосредственно перед использованием. Я получаю тот же результат. вот почему я подозревал, что у меня какая-то глобальная проблема с конфигурацией.

5. Версия 1.8.9.1 немного устарела (январь 2015), текущая версия 1.8.20. Что происходит при использовании текущей версии?

Ответ №1:

На случай, если я использую ваш код:

 
#define P2VAR(ptrtype, memclass, ptrclass)  ptrtype *


typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_1;
typedef P2VAR( uint8, AUTOMATIC, DATA_LOCATION)  var_2;
typedef P2VAR( uint8, AUTOMATIC, 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

Комментарии:

1. Спасибо за вашу помощь. Когда я попробовал это с простым одним или 2 файлами, все работает нормально. но это не сработало с большой базой кода (по крайней мере, для макросов AUTOSAR и нескольких других). У меня это работает только тогда, когда я добавляю определение макросов в ПРЕДОПРЕДЕЛЕННЫЙ тег. Я помещу это в отдельный ответ, чтобы быть более заметным.

2. В моем предыдущем комментарии (с вопросом) Я написал: «Версия 1.8.9.1 немного устарела (январь 2015), текущая версия 1.8.20. Что происходит при использовании текущей версии? » Верна ли эта версия? что происходит при использовании версии 1.8.20?

3. да, я использую версию v1.8.9.1, поскольку это версия, рекомендованная для проекта. Я пробовал с версией v1.8.20, и я получаю такое же поведение.

4. Странно, было бы интересно увидеть точный случай, когда это пойдет не так. Я не знаю, кто рекомендовал 1.8.9.1, 5 лет назад это было нормально, но я думаю, что в настоящее время было бы лучше использовать 1.8.20, чтобы использовать также новые функции, встроенные в doxygen.

Ответ №2:

Когда я попробовал простой код, он отлично работает, как указано в ответе @albert, но он все еще не работал с большим кодом.

Что работает для меня, так это добавить макросы в ПРЕДОПРЕДЕЛЕННУЮ конфигурацию следующим образом:

 PREDEFINED             = "FUNC(rettype,memclass)=rettype" 
                         "P2VAR(ptrtype,memclass,ptrclass)=ptrtype *" 
                         "VAR(type,memclass)=type"
  

Комментарии:

1.В моем предыдущем комментарии (с вопросом) Я написал: «Версия 1.8.9.1 немного устарела (январь 2015), текущая версия 1.8.20. Что происходит при использовании текущей версии? » Верна ли эта версия? что происходит при использовании версии 1.8.20?