我有这样的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似乎被忽略了,因为静态函数与生成的文档中的其他成员集中在一起:
c - Doxygen:C成员函数忽略的\static命令-LMLPHP
我的Doxygen layout.xml同时包含publicstaticmethodspublicmethods。我的Doxyfile指定EXTRACT_ALLEXTRACT_STATICYES
您可能认为向这些成员添加@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/

10-16 23:58