Функциональные макросы документа без оценки, если/else с доксигеномC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Функциональные макросы документа без оценки, если/else с доксигеном

Сообщение Anonymous »

Я пытаюсь документировать файл заголовка, который имеет различные «перегрузки» при анализе C или C ++. < /p>

Код: Выделить всё

#ifdef __cplusplus

/// myfuncA
void myfuncA();

/// MYMACRO_A
#define MYMACRO_A() \
myfuncA();

#else

/// myfuncB
void myfuncB();

/// MYMACRO_B
#define MYMACRO_B() \
myfuncB();

#endif
Я хочу, чтобы все четыре этих функций и макросов были собраны и индивидуально документированы доксигеном. Это разумный вариант использования в моем приложении; Это специфические перегрузки C и C ++ для основной функции, и DOC будет указывать, каким можно назвать, с помощью которого язык. < /p>
Увы, оказалось невозможным сделать доксиген одновременно, документируя все четыре из них!

Код: Выделить всё

ENABLE_PREPROCESSING = YES
MACRO_EXPANSION      = YES
SKIP_FUNCTION_MACROS = NO
Затем доксиген оценит ifdef __cplusplus до 0 и документировать только myfuncb и mymacro_b .
Альтернативно, когда я устанавливаю

Код: Выделить всё

ENABLE_PREPROCESSING = NO
then Doxygen will not document any macros at all, and so document only myfuncA and myfuncB.
Attempted solutions

[*]I have tried every combination of MACRO_EXPANSION and EXPAND_ONLY_PREDEF, and Разоблачение макросов для expand_as_defined и предопределено без успеха.
[*] Я попытался настройка

Код: Выделить всё

ENABLE_PREPROCESSING = YES
PREDEFINED = ifdef __cplusplus=
< /code>
так что доксиген удалял ветви #if < /code> перед началом анализа и оценки,
, но этот ужасный взлом слишком сложный для моего приложения. Использование @def 
и @fn Требовать доксигена в конечном итоге столкнуться с реальной подписью.
Теоретически можно использовать

Код: Выделить всё

ENABLE_PREPROCESSING = YES
MACRO_EXPANSION      = YES
SKIP_FUNCTION_MACROS = NO

# crucially...
PREDEFINED  = __cplusplus=0 __cplusplus=1
Но, увы, мой исходный код (как в примере выше) использует #ifdef , а не #if . Таким образом, даже __cplusplus = 0 разрешает #ifdef __cplusplus до 1 . Рефакторинг может быть приемлемым для меня, хотя меня по -прежнему заинтересованы в решении без такого существенного изменения! />

Код: Выделить всё

#ifdef __cplusplus

/// myfuncA
void myfuncA();

#define MYMACRO_A() \
myfuncA();

#ifdef THIS_BOGUS_MACRO
/// MYMACRO_A
void MYMACRO_A();
#endif

#else

/// myfuncB
void myfuncB();

#define MYMACRO_B() \
myfuncB();

#ifdef THIS_BOGUS_MACRO
/// MYMACRO_B
void MYMACRO_B();
#endif

#endif
Документация теперь будет включать Myfunca , myfuncb , mymacro_a и mymacro_b Но, увы, последние два будут указаны как функции , а не как макрос. В противном случае, какой разумный, надежный метод для достижения документирования всех четырех объектов, где последние два правильно сообщаются как макросы?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... th-doxygen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»