2010-09-17 59 views
4

說我有:如何使doxygen擴展宏,但沒有記錄爲定義?

#define MY_MACRO(FOO) void FOO(); 

MY_MACRO(hi); 
MY_MACRO(hey); 
MY_MACRO(hello); 

#undef MY_MACRO 

我希望宏被doxygen的擴大,這我能夠通過配置正確的方式做:

ENABLE_PREPROCESSING = YES 
MACRO_EXPANSION  = YES 
EXPAND_ONLY_PREDEF  = YES 
EXPAND_AS_DEFINED  = MY_MACRO 

這使我看到了擴大在doxygen輸出(函數hi,heyhello)中記錄宏的結果。到目前爲止,這一切都很好。但問題是,doxygen也將MY_MACRO作爲一個定義。但是,我不希望API的客戶知道MY_MACRO,因爲它是未定義的,並且不能被他們使用,並且不應該被他們看到。

我在我的doxygen配置中有EXTRACT_ALL = YES,我不想改變它。我曾嘗試以下配置沒有成功:

PREDEFINED  = DOXYGEN_SKIP_FOR_USERS 

用下面的代碼:

#ifndef DOXYGEN_SKIP_FOR_USERS 
#define MY_MACRO(FOO) void FOO(); 
#endif /*DOXYGEN_SKIP_FOR_USERS*/ 

MY_MACRO(hi); 
MY_MACRO(hey); 
MY_MACRO(hello); 

#undef MY_MACRO 

這隱藏的定義文件,當然避免擴大,所以我沒有得到的功能記錄在生成的API中。

我將不勝感激您的幫助。

回答

6

假設MY_是你在代碼中使用一致的前綴:)我會用內部宏前綴MY__(兩個下劃線),然後把類似

EXCLUDE_SYMBOLS  = MY__* 

Doxygen配置文件中。

編輯:符號內的雙下劃線保留給C++(不適用於C)。所以如果你想與C和C++兼容,你應該選擇其他類型的約定。不幸的是,前導下劃線也被保留,所以_MY_不會。

+1

有關雙下劃線的註釋:包含雙下劃線的名稱被保留供編譯器使用。爲了避免踩到彼此的腳趾,最好避免在自己的標識符中使用雙下劃線。 – 2010-09-17 08:38:40

+0

@Bart你有引用得心應手嗎?我認爲這只是以雙下劃線開頭的標識符。 (並且全局標識符以下劃線開始,等等) – llasram 2010-09-17 10:10:22

+0

@Bart和@llasram:我認爲這個雙下劃線規則是C++規則,而不是C(我沒注意到C++標誌)。但無論如何,爲了我們在這裏討論的目的,我們可以很容易地找出其他一些不太討厭的前綴。 – 2010-09-17 11:51:37