C:如何编写printf这样的函数

C:如何编写printf这样的函数,c,variadic-functions,C,Variadic Functions,我已经学会了使用librarystdarg.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); } 请帮我解释以上两个问题。1)您自己已经回答

我已经学会了使用library
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);
}
请帮我解释以上两个问题。

1)您自己已经回答了这个问题-
printf
必须解析格式字符串,以决定在变量列表中接受多少个参数

2) 解析格式列表时,它将跟踪格式列表中指定的参数类型,并使用适当的类型调用
var_arg

另外-有趣的内容在
vfprintf()
中,这里是链接的源代码,尽管可能有更可读的(如果效率较低的话)


编辑:snprintf有一个可移植的实现,看起来更可读(见此处)

因为,正如您所观察到的,printf不能通过这样一个简单的循环工作,为什么要对它施加只适用于这样一个简单循环的约束?
printf("%d",4); //4 cannot treat by string
printf("%d",'4'); // :)) I think this line is better