我有这样的C接口结构(为了简洁起见,删除了不相关的注释元素):
struct ArrayInterface {
/**
* @static
* @fn Array *Array::arrayWithArray(const Array *array)
* @memberof Array
*/
Array *(*arrayWithArray)(const Array *array);
/**
* @static
* @fn Array *Array::arrayWithObjects(ident obj, ...)
* @memberof Array
*/
Array *(*arrayWithObjects)(ident obj, ...);
/**
* @fn _Bool Array::containsObject(const Array *self, const ident obj)
* @memberof Array
*/
_Bool (*containsObject)(const Array *self, const ident obj);
// ...
}
@fn
和@memberof
按预期工作。这些函数确实被Doxygen选为成员函数。但是,@static
似乎被忽略了,因为静态函数与生成的文档中的其他成员集中在一起:我的Doxygen layout.xml同时包含
publicstaticmethods
和publicmethods
。我的Doxyfile指定EXTRACT_ALL
和EXTRACT_STATIC
为YES
。您可能认为向这些成员添加
@static
会将它们拉入类文档的静态方法部分,但正如您所看到的,它不会。我意识到我在这里弯曲了C和Doxygen的极限,但这仍然感觉像一个bug——或者也许我做错了什么。
最佳答案
我不认为\static
有效。
struct _carData
{
float mass;
};
/*! @class Car*/
typedef struct _carData *Car;
/*! @memberof Car*/
static *Car _carRegistry;
/*! @memberof Car*/
static size_t _carRegistrySize;
/*! @memberof Car*/
float CarGetMass(Car car);
/*! @static @memberof Car*/
void InitCarRegistry();
InitCarRegistry
将被列为Car
的普通成员,而不是静态成员。尽管the manual对\static
的描述非常清晰:指示注释块记录的成员是静态的,即它在类上工作,而不是在类的实例上工作。
此命令仅在语言本身不支持静态方法的概念(例如C)时使用。
(强调我的)
我在https://bugzilla.gnome.org/show_bug.cgi?id=791832开了一张这方面的错误罚单
编辑:Doxygen的bug跟踪器已更改为Github。票现在在https://github.com/doxygen/doxygen/issues/6298。
此外,从实验中,我发现最接近于
\static
的解决方案是\relates <classname>
。以这种方式标记的函数将显示在类文档的“相关函数”下的单独部分中。它们还会出现在“继承自的相关函数”下该类的后代中。关于c - Doxygen:C成员函数忽略的\static命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34812911/