未知类型的可变参数
variadic args of unkown type
使用 stdarg.h,我只能提取一种类型,因为我必须知道我正在检索的类型。那么,在 C 语言中,printf 如何成为任何类型的可变参数函数?
printf()
使用格式字符串来确定在 运行 时要提取哪种参数。
我没有查看 printf()
的源代码,但一种可能的实现可能包含如下开关:
switch (type_specifier)
{
case 's':
str = va_arg(args, char *);
/* output str as a string */
break;
case 'd':
number = va_arg(args, int);
/* output number as a decimal value */
break;
etc.
etc.
etc.
}
请注意,当您考虑所有各种类型的参数时,完整的实现将比这复杂得多,参数可以是各种大小,事实上“%*d”会产生额外的 va_arg() 用于获取数字的宽度,宽度说明符也可以改变输出。
使用 stdarg.h,我只能提取一种类型,因为我必须知道我正在检索的类型。那么,在 C 语言中,printf 如何成为任何类型的可变参数函数?
printf()
使用格式字符串来确定在 运行 时要提取哪种参数。
我没有查看 printf()
的源代码,但一种可能的实现可能包含如下开关:
switch (type_specifier)
{
case 's':
str = va_arg(args, char *);
/* output str as a string */
break;
case 'd':
number = va_arg(args, int);
/* output number as a decimal value */
break;
etc.
etc.
etc.
}
请注意,当您考虑所有各种类型的参数时,完整的实现将比这复杂得多,参数可以是各种大小,事实上“%*d”会产生额外的 va_arg() 用于获取数字的宽度,宽度说明符也可以改变输出。