未知类型的可变参数

里奥库

使用stdarg.h,我只能提取一种类型,因为我必须知道正在检索的类型。那么,printf如何在C中成为任何类型的可变函数?

dgnuff

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()来获取参数。数字的宽度,并且宽度说明符也可以改变输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章