对于C成员函数,忽略Doxygen:\ static命令

时间:2016-01-15 14:11:28

标签: c doxygen

我的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似乎被忽略了,因为静态函数与生成的文档中的其余成员混在一起:

Notice arrayWithArray and arrayWithObjects are with containsObject

我的Doxygen layout.xml包括publicstaticmethodspublicmethods。我的Doxyfile将EXTRACT_ALLEXTRACT_STATIC指定为YES

您会认为向这些成员添加@static会将它们引入到Class文档的Static Methods部分,但正如您所看到的,它并没有。

我意识到我在这里弯曲了C和Doxygen的极限,但这仍然感觉像是一个错误 - 或者我做错了。

1 个答案:

答案 0 :(得分:1)

我完全不相信\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的{​​{1}}是\relates <classname>。以这种方式标记的功能将显示在班级文档的单独部分中,相关功能&#34;。它们也将出现在该类的后代中,并且从#34;继承了相关函数。