【发布时间】:2015-02-13 12:33:59
【问题描述】:
在像 printf 这样的函数中,我们使用stdarg.h 来处理可变参数。
void print(int args,...){
va_list ap;
va_start(ap, args);
int i = 0;
for(i=0; i<args; i++){
printf("%d\n",va_arg(ap, int));
}
va_end(ap);
}
我们想要解析格式列表(我们的可变参数函数的第一个参数)以跟踪格式列表中指定的参数的类型,然后使用适当的类型调用 va_arg。
我创建了第一个循环来解析格式列表,将说明符字母存储到一个数组中。 所以我知道我们期望哪种类型以及有多少。
例如:ft_like_printf("Watch your %d %s\n", 6, "Spider pig");
specifiers_list = "ds"
所以 d int 和 s char* (与 printf 相同的说明符)
但是如何动态地编码呢?使用不同类型调用 va_arg 的语法是什么?
我已经阅读了THIS 和THAT,我认为这正是我想要的,不是吗? 如果是,该怎么办?包含枚举+联合的结构或包含联合+函数指针的结构的真实案例场景是什么?
为了处理不同的数据类型,我从这个开始:
typedef struct s_flist
{
char c;
(*f)();
} t_flist;
t_flist flist[] =
{
{ 's', &putstr },
{ 'i', &put_number },
{ 'd', &put_number }
};
【问题讨论】:
-
我不知道您所说的
But how to code it dynamically? What is the syntax to call va_arg with differents types ?是什么意思,我做过类似的事情,所以我可能会有所帮助,但我需要澄清一下。 -
如果我们有 va_arg(ap, int),我们只能传递 int。那么如何使用 va_arg(ap, TYPE) 的 TYPE 等于当前参数的类型呢?
-
没错,所以
va_arg(ap, char *)对应char *等等。 -
问题解决了吗?
标签: c variadic-functions