Как убедиться, что документация показывает альтернативный код # ifdef - PullRequest
3 голосов
/ 17 мая 2011

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

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

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

1 Ответ

8 голосов
/ 17 мая 2011

Насколько я понимаю, у 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...