Код: Выделить всё
#ifdef __cplusplus
/// myfuncA
void myfuncA();
/// MYMACRO_A
#define MYMACRO_A() \
myfuncA();
#else
/// myfuncB
void myfuncB();
/// MYMACRO_B
#define MYMACRO_B() \
myfuncB();
#endif
Увы, оказалось невозможным сделать доксиген одновременно, документируя все четыре из них!
Код: Выделить всё
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
SKIP_FUNCTION_MACROS = NO
Альтернативно, когда я устанавливаю
Код: Выделить всё
ENABLE_PREPROCESSING = NO
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 Код: Выделить всё
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
SKIP_FUNCTION_MACROS = NO
# crucially...
PREDEFINED_IN_TURN = __cplusplus=0 __cplusplus=1
< /code>
Но, увы, такого ключа нет (и кажется нетривиальным, чтобы взломать). Конечно, это не сразу же работает с моим примером кода, который использует #ifdef Функционирование, но инвазивное решение состоит в том, чтобы рефакторировать код, такой
, что каждый #if/ #else филиал исследуется, когда макро, как
Код: Выделить всё
DOXYGENКод: Выделить всё
#if defined(__cplusplus) || defined(DOXYGEN)
...
#endif
#if !defined(__cplusplus) || defined(DOXYGEN)
...
#endif
< /code>
вместе с Doxyfile
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
SKIP_FUNCTION_MACROS = NO
# crucially
PREDEFINED = DOXYGEN
Код: Выделить всё
#ifdef __cplusplus
/// myfuncA
void myfuncA();
#define MYMACRO_A() \
myfuncA();
#if 0
/// MYMACRO_A
void MYMACRO_A();
#endif
#else
/// myfuncB
void myfuncB();
#define MYMACRO_B() \
myfuncB();
#if 0
/// MYMACRO_B
void MYMACRO_B();
#endif
#endif
Подробнее здесь: https://stackoverflow.com/questions/795 ... th-doxygen
Мобильная версия