我们以实现函数printf的一个最简单的版本为例,体验下如何以可一直的方式编写可处理变长参数表的函数。因为我们的重点在于参数的处理,所以,函数minprintf只处理格式字符串和参数,格式转换则通过调用函数printf实现
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void minprintf(char *fmt, ...){
va_list ap;
char *p, *sval;
int ival;
double dval;
va_start(ap,fmt);
for(p=fmt;*p;p++){
if(*p!='%'){
putchar(*p);
continue;
}
switch(*++p){
case 'd':
ival = va_arg(ap,int);
printf("%d",ival);
break;
case 'f':
dval =va_arg(ap,double);
printf("%f",dval);
break;
case 's':
for(sval=va_arg(ap,char *);*sval;sval++)
putchar(*sval);
break;
default:
putchar(*p);
break;
}
}
va_end(ap);
}
int main(int argc,char *argv[])
{
minprintf("%s","hello world!");
return 0;
}
本文详细解读了如何使用C语言实现一个能够处理变长参数表的简单函数minprintf,并通过实例展示了如何灵活运用printf进行格式化输出。
1016

被折叠的 条评论
为什么被折叠?



