Как убедиться, что документация показывает альтернативный код #ifdef’d

#documentation #typedef #doxygen #conditional-compilation

#Документация #typedef #doxygen #условная компиляция

Вопрос:

Я разрабатываю кроссплатформенную библиотеку. Некоторые фрагменты кода зависят от платформы, поэтому я должен разделить их с помощью #ifdef , проверяя тип платформы. Я разделил один класс на два класса, каждый для своей платформы. У этих классов разные имена, но, наконец, мне нужно typedef привести эти классы к одному типу в зависимости от платформы:

 #ifdef UNIX
/** some comment */
typedef Key_unix Key;
#elif WIN
/** another comment */
typedef Key_win Key;
#endif
  

Сгенерированная документация показывает только первый typedef с обоими комментариями. Как я могу показать оба typedef кода вместе, каждый со своим собственным комментарием?

Ответ №1:

Насколько я понимаю, у doxygen есть свой собственный препроцессор, который будет оценивать #ifdefs . Вы можете определять макросы с помощью PREDEFINED опции.

 # The PREDEFINED tag can be used to specify one or more macro names that 
# are defined before the preprocessor is started (similar to the -D option of 
# gcc). The argument of the tag is a list of macros of the form: name 
# or name=definition (no spaces). If the definition and the = are 
# omitted =1 is assumed. To prevent a macro definition from being 
# undefined via #undef or recursively expanded use the := operator 
# instead of the = operator.
  

Однако, поскольку у вас есть #elif, даже если вы установите PREDEFINED = UNIX WIN , он будет оценивать только первый #ifdef. В качестве альтернативы вы всегда можете попробовать:

 #ifdef UNIX
/** some comment */
typedef Key_unix Key;
#endif
#ifdef WIN
/** another comment */
typedef Key_win Key;
#endif
  

Маловероятно, что при компиляции кода у вас будут определены как UNIX, так и WIN.

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

1. Спасибо за ответ. Я пробовал ваш альтернативный код с ПРЕДОПРЕДЕЛЕННОЙ опцией и без нее, но, к сожалению, он не сработал. Я думаю, что проблема не в макросах, а в дублирующемся коде — typedef того же типа. Doxygen достигает обоих, потому что используются оба комментария. На самом деле мой вопрос заключается в том, есть ли какая-либо опция Doxygen, позволяющая дублировать код в документе.

2. Ах, да, я понимаю, что вы имеете в виду. Я не знаю способа заставить doxygen документировать повторяющиеся typedef так, как вы просите.