gpt4 book ai didi

c - 使用 gcc 在 C 中类型安全的可变参数

转载 作者:太空狗 更新时间:2023-10-29 16:28:07 27 4
gpt4 key购买 nike

很多时候我希望函数接收可变数量的参数,例如以 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);
}

如果 foo 接收到非 char* 变量,我可以指示 gcc 或 clang 发出警告吗?类似于 __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);

您可以完全按照您希望的方式编写!

然后你可以调用:

push(stack, "foo", "bar", "baz");
push(stack, "quux");

关于c - 使用 gcc 在 C 中类型安全的可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com