我学会了使用函数库stdarg.h
来使函数具有未知数量的参数。下面是一个简单的功能如何使用这个:有两个主要约束C:如何编写像printf这样的函数
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);
}
基础上面的代码,我不知道怎么printf
可以克服:
1)固定数量的参数:意思是,在几乎vardiac函数中,你需要包含一些参数。但是当我写printf
时,我不必包含这个数字。我曾经想过,在printf
真的使用参数之前,它已经计算了前面的参数数量(通过计算第一个字符串中的数字%)。但是,我认为这个解决方案有点不高效。它必须经过三个阶段:计算参数个数,并将这些参数放入堆栈,最后将所有参数放入屏幕。
2)所有参数必须具有相同的类型:正如您在行中看到的那样:printf("%d\n",va_arg(ap, int));
。所以,列表中的每个参数必须具有相同的类型。而且据我们所知,这不是printf中的必备条件。您可以使用整数或字符串打印double。如果我们把所有这一切就像一个字符串,因此此行应该是错误的,因为错误的语法:
printf("%d",4); //4 cannot treat by string
printf("%d",'4'); // :)) I think this line is better
请帮我上面的两个问题解释一下。
http://www.gamedev.net/topic/386650-how-to-write-a-printf- like-function/ – 2012-08-12 10:05:30
因为,正如你所看到的,printf不能通过这样的简单循环工作,为什么你对它施加约束只适用于这样一个简单的循环? – 2012-08-12 10:13:52