Как расширить макросы с помощью doxygen, но не документировать как определение? - PullRequest
4 голосов
/ 17 сентября 2010

Допустим, у меня есть:

#define MY_MACRO(FOO) void FOO();

MY_MACRO(hi);
MY_MACRO(hey);
MY_MACRO(hello);

#undef MY_MACRO

Я хочу, чтобы макросы были расширены с помощью doxygen, что я могу сделать, настроив его правильно:

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = YES
EXPAND_AS_DEFINED      = MY_MACRO

Это позволяетмне увидеть расширенный результат макросов как документированные API в выводе doxygen (функции hi, hey и hello).Пока все хорошо.Но проблема в том, что Doxygen также документирует MY_MACRO как определение.Однако я не хочу, чтобы клиенты API знали о MY_MACRO, так как он не определен и ими не может пользоваться, и он не должен быть им виден.

У меня есть EXTRACT_ALL = YES в моей конфигурации doxygen, и я не хочу это менять.Я попробовал следующую конфигурацию без успеха:

PREDEFINED      = DOXYGEN_SKIP_FOR_USERS

Со следующим кодом:

#ifndef DOXYGEN_SKIP_FOR_USERS
#define MY_MACRO(FOO) void FOO();
#endif /*DOXYGEN_SKIP_FOR_USERS*/

MY_MACRO(hi);
MY_MACRO(hey);
MY_MACRO(hello);

#undef MY_MACRO

Это скрывает документацию по определению, но, конечно, предотвращает расширение, поэтому я делаюне получить функции, документированные в сгенерированном API.

Буду признателен за вашу помощь.

1 Ответ

7 голосов
/ 17 сентября 2010

Предположим, что MY_ - это префикс, который вы последовательно используете в своем коде :) Я бы использовал префикс MY__ (два подчеркивания) для внутренних макросов, а затем поместил бы что-то вроде

EXCLUDE_SYMBOLS        = MY__*

в файле конфигурации Doxygen.

Редактировать: двойное подчеркивание внутри символов зарезервировано для C ++ (не для C). Поэтому, если вы хотите быть совместимым с C и C ++, вам следует выбрать другой тип соглашения. К сожалению, ведущий знак подчеркивания тоже зарезервирован, поэтому _MY_ не будет делать ни того, ни другого.

...