Doxygen неправильно определяет тип возврата

У меня есть этот код:

#if PY_MAJOR_VERSION >= 3
int
#else
void
#endif
init_numpy()
{
    import_array();
}

Это некрасиво, но это не моя проблема (причина этого кода обсуждается здесь https://mail.scipy.org/pipermail/numpy-discussion/2010-December/054357.html).).

У меня проблема в том, что если я добавлю комментарий doxygen выше, например:

/*! \brief some function
*
*/
#if PY_MAJOR_VERSION >= 3
...

Doxygen предполагает, что этот метод имеет возвращаемый тип void. Что, конечно, в общем случае неверно.

Вопрос

Есть ли способ получить правильную документацию, а именно, что тип возвращаемого значения зависит от используемой версии Python. Я не возражаю, если приведенный выше код немного изменится (конечно, при условии, что функциональность такая же).


person NOhs    schedule 16.02.2016    source источник
comment
Какую версию doxygen вы используете. С 1.8.11 у меня проблем нет. Смотрите также теги о препроцессинге в Doxyfile   -  person albert    schedule 17.02.2016
comment
Мастер doxygen говорит, что я использую 1.8.11. И что вы имеете в виду под отсутствием проблем? Показывается ли что-то вроде (int/void) в вашей сгенерированной документации?   -  person NOhs    schedule 17.02.2016
comment
В моей документации я вижу либо int, либо void в зависимости от настройки PY_MAJOR_VERSION в ПРЕДОПРЕДЕЛЕННОМ элементе Doxyfile. Возможность int/void никогда не будет показана, так как это противоречит коду, этого можно добиться только в описании.   -  person albert    schedule 20.02.2016


Ответы (1)


Вы можете просто жестко указать тип возвращаемого значения в комментарии. Он будет иметь тег [return] (я думаю) и просто типы, которыми он может быть (int/void), а затем указать причину в описании.

person Careful Now    schedule 16.02.2016
comment
Я не смог найти то, что вы описываете. Здесь (stack.nl/~dimitri/doxygen/manual/commands. html#cmdreturn) говорит, что можно добавить только описание, а не тип. - person NOhs; 17.02.2016
comment
Добавьте @return в комментарий doxygen и затем опишите, что возвращается. Затем Doxygen должен включить это в документацию. - person Careful Now; 17.02.2016
comment
Но это только добавляет описание в подробный раздел. В обзоре всех методов по-прежнему написано void вместо чего-то вроде (int/void). - person NOhs; 17.02.2016
comment
Это, вероятно, так же хорошо, как вы собираетесь получить, к сожалению. Это чрезвычайно редкое и обычно нерекомендуемое использование операторов препроцессора, поэтому я не ожидаю, что он его подхватит. Вы можете перевернуть оператор, если хотите, чтобы он отображал int как возвращаемый тип. Например, #if PY_MAJOR_VERSION ‹ 3 void #else int . - person Careful Now; 17.02.2016