У меня есть файл .c, в котором объявлено несколько переменных. Один из них имеет атрибут __align(4)
, т.е. декларация __align(4) static uint32_t myVar;
Когда я создаю документ doxygen для этого исходного файла, в нем перечислены только те переменные, которые объявлены до __align(4) static uint32_t myVar;
(myVar
также не включен в документ).
Пример:
uint32_t var1; //documented by doxygen
static uint32_t var2; //documented by doxygen
__align(4) static uint32_t myVar; //NOT documented by doxygen
uint32_t var4; //NOT documented by doxygen
Я подозреваю, что doxygen видит, что __align()
на самом деле является функцией, и после этого перестает искать объявления переменных.
Как заставить doxygen отображать все мои объявленные переменные? «Хакерским» решением было бы объявить выровненную переменную в нижней части моего раздела переменных, но выровненная переменная все равно не была бы включена в документ.
Любая помощь приветствуется :)
Привет
🤔 А знаете ли вы, что...
C имеет богатую историю и множество книг и ресурсов для изучения.
В этом вопросе есть ряд моментов, требующих внимания.
EXTRAC_ALL=YES
(см. https://www.doxygen.nl/manual/config.html#cfg_extract_all), либо документированы переменныеstatic
, это означает, что нам также нужна настройка EXTRACT_STATIC=YES
(см. https://www.doxygen.nl/manual/config.html#cfg_extract_static)myVar
имеет нестандартный атрибут __align
, и его нужно обрабатывать так же, как атрибут __attribute__
, см. https://www.doxygen.nl/manual/preprocessing.html), поэтому:
PREDEFINED = __align(x)=
MACRO_EXPANSION = YES
Таким образом, полный Doxyfile
может выглядеть так:
EXTRACT_STATIC=YES
PREDEFINED = __align(x)=
MACRO_EXPANSION = YES
и исходный код:
/// \file
/** some docu */
uint32_t var1; //documented by doxygen
/** some docu */
static uint32_t var2; //documented by doxygen
/** some docu */
__align(4) static uint32_t myVar; //NOT documented by doxygen
/** some docu */
uint32_t var4; //NOT documented by doxygen
и все задокументировано, как и ожидалось.