2017-08-30 63 views
1

我有一個結構,而按照慣例,我需要使用某個宏以聲明該類型的變量中宏時:Doxygen的警告使用匿名結構

的結構:

struct basic_struct { 
    int a; 
    int b; 
}; 

宏:

#define BASIC_VAR(var_name) struct basic_struct var_name 

我遇到一個問題與Doxygen的使用匿名結構裏面這個宏的時候,如下:

warning: no uniquely matching class member found for BASIC_VAR(var_1) 

1)下降宏

struct { 
    struct basic_struct var_1; 
    int var_2; 
} my_struct; 

2)不使用匿名結構

struct my_struct_t { 
    BASIC_VAR(var_1); 
    int var_2; 
} my_struct; 

struct { 
    BASIC_VAR(var_1); 
    int var_2; 
} my_struct; 

我得到的Doxygen的警告不要警告英格斯。 但我必須使用宏,我更願意繼續使用匿名結構,我可以使用任何Doxygen命令來避免此警告?

+1

爲什麼你必須使用宏?它不會提供非常易讀的代碼 –

回答

2

我相信你需要設置MACRO_EXPANSIONYES中的Doxyfile,這樣的Doxygen將擴大您的宏。請參閱https://www.stack.nl/~dimitri/doxygen/manual/preprocessing.html

此外,您可能需要將您的宏添加到PREDEFINED標記。

+1

確定已將此設置爲YES,但我確實查看了該鏈接,並向PREDEFINED標記添加了「BASIC_VAR(var1)=」解決了問題!由於某些原因,將EXPAND_ONLY_PREDEF標記設置爲NO沒有。不管怎樣,謝謝! –

0

,我使用的解決方法是編輯的Doxyfile:

1)確保MACRO_EXPANSION標籤預定義的標籤設置爲YES

2)添加宏接着用=運算符,沒有空格,在我的情況下:BASIC_VAR(var_1)=

由於某些原因,將MACRO_EXPANSION標記設置爲YES並將EXPAND_ONLY_PREDEF設置爲NO不起作用。