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,该解决方案也有失败的零个参数 –