很多时候,我希望函数接收可变数量的参数,例如以 NULL 结尾
#define push(stack_t stack, ...) _push(__VARARG__, NULL);
func _push(stack_t stack, char *s, ...) {
va_list args;
va_start(args, s);
while (s = va_arg(args, char*)) push_single(stack, s);
}
我可以指示 gcc 或 clang 警告 foo 是否收到非char*
变量?类似的东西__attribute__(format)
,但对于同一指针类型的多个参数。
我知道你正在考虑使用__attribute__((sentinel))
不知何故,但这是一个转移注意力的事情。
你想要做的是这样的事情:
#define push(s, args...) ({ \
char *_args[] = {args}; \
_push(s,_args,sizeof(_args)/sizeof(char*)); \
})
其中包含:
void _push(stack_t s, char *args[], int argn);
你可以写exactly你希望的方式来写它!
然后你可以调用:
push(stack, "foo", "bar", "baz");
push(stack, "quux");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)