Rio*_*lku 3 c calling-convention
使用stdarg.h,我只能拉一种类型,因为我必须知道我正在检索的类型.那么,printf如何设法成为任何类型的可变函数,在C中不会少?
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.
}
Run Code Online (Sandbox Code Playgroud)
请注意,当您考虑所有各种类型的参数时,完整的实现将比这更复杂,参数可以是所有不同的大小,"%*d"使得额外的va_arg()用法得到数字的宽度,宽度说明符也可以改变输出.