#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?