Overloading Macro on Number of Arguments爲什麼我的可變參數宏不能正確接受參數?
https://codecraft.co/2014/11/25/variadic-macros-tricks/
我一直在尋找上述兩個環節,試圖讓下面的代碼工作:
#define _GET_NUMBER(_0, _1, _2, _3, _4, _5, NAME, ...) NAME
#define OUTPUT_ARGS_COUNT(...) _GET_NUMBER(_0, ##__VA_ARGS__, 5, 4, 3, 2, 1, 0)
...
cout << OUTPUT_ARGS_COUNT("HelloWorld", 1.2) << endl;
cout << OUTPUT_ARGS_COUNT("HelloWorld") << endl;
cout << OUTPUT_ARGS_COUNT() << endl;
這將編譯,運行,並給出了下面的輸出:
2
1
1
我不能爲我的生活找出爲什麼打電話OUTPUT_ARGS_COUNT()我我給了我1而不是0.我對我正在嘗試使用的代碼有一個很好的理解,但對我來說這仍然是一種希望。所以我猜這可能是我沒有正確應用某些東西,儘管我從字面上複製並從堆棧溢出鏈接粘貼示例代碼。
我用G ++ 5.4.0 20160609.
任何意見或其他資源你可以點我編譯到將不勝感激。
你可以看到http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html:*「上面的解釋是含糊不清的,唯一的宏參數是一個可變參數參數的情況下,因爲它沒有意義來區分是否沒有論證是一個空的論證還是缺少的論證,CPP在符合特定的C標準時保留逗號,否則逗號將作爲標準的擴展刪除。 – Jarod42
選中此https://stackoverflow.com/questions/2308243/macro-returning-the-number-of-arguments-it-is-given-in-c,該解決方案也有失敗的零個參數 –