2016-01-15 53 views
1

我有一個看起來像這樣(爲簡潔,刪除不相關的評論元素)C接口結構:Doxygen的: static命令忽略對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_STATICYES

你可能會認爲給這些成員添加@static會將它們拖入Class文檔的Static Methods部分,但正如你所看到的那樣,它不會。

我意識到我在這裏彎曲C和Doxygen的限制,但這仍然感覺像一個錯誤 - 或者我做錯了什麼。

+1

C不支持類或_methods_,只有_compond數據類型'struct'_和_functions_。函數指針是不一樣的! – Olaf

+0

哦,我完全知道!這裏的項目,更多的上下文:https://github.com/jdolan/objectively – jdolan

+1

我不明白爲什麼這個問題warrantted downvote。 downvote準則是「這個問題沒有顯示任何研究工作,或者沒有用處。」我不相信是這樣。 此外,Doxygen文檔_明確指出''\ memberof'和'\ static'適用於C語言,並且這些屬性不能從源代碼中推斷出來。 – jdolan

回答

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

此外,從實驗中,我已經找到了解決方法最相近\static\relates <classname>。以此方式標記的功能將顯示在該類文檔的單獨部分中的「相關功能」下。他們也將出現在「繼承自相關函數」的那個類的後代中。