向可变参数宏添加默认参数
是否可以在可变宏中的变量参数之前添加默认参数? 例如,我有宏的版本,就像
#define MACRO(arg1, ...) func(arg1, ##__VA_ARGS__)
我想在变量参数之前在宏中添加 2 个默认参数,这样它就不会影响以前的版本。喜欢:
#define MACRO(arg1, arg2 = "", arg3 = "", ...) func(arg1, arg2, arg3, ##__VA_ARGS__)
任何帮助将不胜感激。
Is it possible to add default arguments before variable argument in variadic macro?
e.g I have the version of macro something like
#define MACRO(arg1, ...) func(arg1, ##__VA_ARGS__)
I would like to add 2 more default arguments in the macro before variable arguments so that it should not affect previous version. Like:
#define MACRO(arg1, arg2 = "", arg3 = "", ...) func(arg1, arg2, arg3, ##__VA_ARGS__)
Any help would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为这是不可能的。编译器/预处理器如何知道第二个和第三个参数是变量参数的一部分还是覆盖默认值?
这就是为什么具有默认值的参数必须位于函数的最后位置的原因。
如果您能够指定 arg2 并使用 arg3 默认值,恐怕您必须有两个或三个宏,但这很容易出错。
I do not think this is possible. How would the compiler/preprocessor knows if the second and third arguments are part of the variable arguments or override the default values ?
That's the reason why parameters with default values have to be in last position in a function.
I'm afraid you'll have to have two macros or three if you to be able to specify arg2 and use arg3 default value, but this is error-prone.
你可以做什么:
这个不好的事情 - 零参数被视为没有参数,例如
BAR(0, 'c')
将生成字符串10, c, default
What you can do:
Bad thing about this - zero parameter is treated like no parameter, e.g.
BAR(0, 'c')
will produce string10, c, default
不是作为问题的答案,而是作为简单解决问题的方法:
Not as an answer to your question but as a way to simply solve your problem: