在像 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 。
我进行第一个循环来解析格式列表,将说明符字母存储到数组中。
所以我知道我们期望哪种类型以及有多少种。
ex: ft_like_printf("Watch your %d %s\n", 6, "Spider pig");
specifiers_list = "ds"
所以 d int 和 s char* (与 printf 相同的说明符)
但如何编码呢动态地?使用不同类型调用 va_arg 的语法是什么?
我读过了THIS https://stackoverflow.com/a/5551632/3206885 and THAT https://stackoverflow.com/a/1722238/3206885我认为这就是我正在寻找的,不是吗?
如果是,该怎么办?包含枚举+联合的结构或包含联合+函数指针的结构的真实情况是什么?
为了处理不同的数据类型,我从以下开始:
typedef struct s_flist
{
char c;
(*f)();
} t_flist;
t_flist flist[] =
{
{ 's', &putstr },
{ 'i', &put_number },
{ 'd', &put_number }
};