mik*_*och 20 c gcc static-analysis c89
很多时候我想要一个函数来接收可变数量的参数,例如以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);
}
Run Code Online (Sandbox Code Playgroud)
如果foo收到非char*变量,我可以指示gcc或clang发出警告吗?类似的东西__attribute__(format),但是对于同一指针类型的多个参数.
geo*_*car 15
我知道你想以__attribute__((sentinel))某种方式使用,但这是一个红色的鲱鱼.
你想要的是做这样的事情:
#define push(s, args...) ({ \
char *_args[] = {args}; \
_push(s,_args,sizeof(_args)/sizeof(char*)); \
})
Run Code Online (Sandbox Code Playgroud)
包装:
void _push(stack_t s, char *args[], int argn);
Run Code Online (Sandbox Code Playgroud)
您可以按照您希望的方式编写它!
然后你可以打电话:
push(stack, "foo", "bar", "baz");
push(stack, "quux");
Run Code Online (Sandbox Code Playgroud)