我得到了下面的實現來獲取變量宏中的參數個數(目前僅限於16個參數)。但是,對於VS2010,無論傳遞多少個參數,輸出始終爲1
。 With GCC,輸出是正確的,使我得出結論,我必須錯過某些特定的MSVC(10)。爲什麼此可變參數計數宏在VC++中失敗?
#define PP_NARGS(...) \
_xPP_NARGS_IMPL(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
#define _xPP_NARGS_IMPL(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,N,...) N
int main(){
int i = PP_NARGS(A,V,C,X,Y,Z);
std::cout << i;
std::cin.get();
return 0;
}
所以,問題是作爲標題狀態,任何幫助將不勝感激。
Omg,它*做*工作!真棒!你有解釋爲什麼? – Xeo 2011-04-03 17:30:39
我很高興我可以幫助:-) 老實說,我無法解釋爲什麼(Doh)。 正如我在答案中寫的,我認爲你的宏在C99標準中是很好的。 我把'EXPAND'的東西解釋爲一個純粹的解決辦法,並且可能在那裏沒有任何技術上有趣的事情...... 根據 [這裏](http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement), 這看起來像是VC的錯誤行爲。 – 2011-04-03 18:36:41
非常感謝您採取這種解決方法。按照VS14 CTP3中的描述工作(2008年,MS發現一個錯誤(參見Ise的鏈接),仍然存在)。 – 2014-09-15 12:16:25