Есть ли способ заставить doxygen показать числовые значения перечисления без изменения css?

Я хочу получить реальное значение члена перечисления в выводе doxygen. Например, у меня есть:

///MyEnum
typedef enum My_Enum
{
MY_ENUM_0,///<MY_ENUM_0
MY_ENUM_1,///<MY_ENUM_1
MY_ENUM_2 ///<MY_ENUM_2
} My_Enum;

Вывод:

MyEnum.
Enumerator:
MY_ENUM_0
      MY_ENUM_0.
MY_ENUM_1
      MY_ENUM_1.
MY_ENUM_2
      MY_ENUM_2.

Я хочу:

Enumerator:
MY_ENUM_0
          0 MY_ENUM_0.
MY_ENUM_1
          1 MY_ENUM_1.
MY_ENUM_2
          2 MY_ENUM_2.

Или что-то подобное.

Ответ 1

Используя doxygen, мы можем документировать:

  • enum
  • Его значения
  • Описание каждого значения

Следующий фрагмент кода описывает пример для всех выше.

/*! \enum My_Enum
* Documentation of the enum type.
*/

typedef enum My_Enum {
    MY_ENUM_0, /*!< Document the value 0 */
    MY_ENUM_1, /*!< Document the value 1 */
} My_Enum;

/*! \var My_Enum MY_ENUM_0
 * The description of the MY_ENUM_0. Can contain its enumerated name */

/*! \var My_Enum MY_ENUM_1
 * The description of the MY_ENUM_1. Can contain its enumerated name*/

Также обратите внимание, что поскольку расширение макро /enum НЕ происходит в doxygen комментариях. Если какой-либо из них используется в комментарии doxygen, их нужно развернуть с помощью INPUT_FILTER. Например:

INPUT_FILTER = sed /MY_ENUM_0/0

требуется для следующего фрагмента кода

typedef enum My_Enum {
    MY_ENUM_0, /*!< MY_ENUM_0 */
    ...

Также ознакомьтесь с этим answer для получения подробной информации о нескольких стилях комментариев doxygen:

  • ///< <comment>
  • /*!< <comment> */

Ответ 2

Я не могу придумать способ сделать это напрямую из doxygen. Doxygen не является компилятором Си. Таким образом, он не будет выводить значение перечисления, которое является константой времени компиляции.

Самое близкое, что может сделать doxygen, - это выборочно расширить ваши макросы, так как он имеет препроцессор C. Таким образом, если вам присвоено некоторое значение для константы, полученной при расширении препроцессора, doxygen может развернуть макросы и показать вам, что будет назначено.

Основываясь на ответе TheCodeArtist, вы можете подумать о написании скрипта, который выполняется до doxygen, создает копии ваших файлов, ищет этот шаблон:

enum *** {
    ***, ///< %VAL%:

и заменяет каждое вхождение% VAL% на то, каким должно быть значение, чтобы вы не отставали от цифр вручную. После запуска doxygen оригинальные файлы, содержащие токены% VAL%, должны быть заменены. Это не особенно элегантное или надежное решение.

Ответ 3

Я хочу получить реальное значение члена enum в выводе doxygen. Например, у меня есть:

///MyEnum
typedef enum My_Enum
{
MY_ENUM_0,        ///<MY_ENUM_0
MY_ENUM_1,        ///<MY_ENUM_1
MY_ENUM_2         ///<MY_ENUM_2
} My_Enum;

Выход:

MyEnum.
Enumerator:
MY_ENUM_0  MY_ENUM_0.
MY_ENUM_1  MY_ENUM_1.
MY_ENUM_2  MY_ENUM_2.

Что я хочу это:

Enumerator:
MY_ENUM_0  0 MY_ENUM_0.
MY_ENUM_1  1 MY_ENUM_1.
MY_ENUM_2  2 MY_ENUM_2.

Или что-то подобное.