2008 November 24th Monday (十一月 二十四日 月曜日)
2008-11-28 20:48
302 查看
I almost forgot how to implement a vararg function in C programming language. There is a example.
#include <stdarg.h>
/* minprintf: minimal printf with variable argument list */
void minprintf(char *fmt, ...)
{
va_list ap; /* points to each unnamed arg in turn */
char *p, *sval;
int ival;
double dval;
va_start(ap, fmt); /* make ap point to 1st unnamed arg */
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); /* clean up when done */
}
Another example is here.
#include<stdio.h>
#include<stdarg.h>
int my_printf( const char *format,……)
{
va_list ap;
int retval;
va_start(ap,format);
printf(“my_printf( ):”);
retval = vprintf(format,ap);
va_end(ap);
return retval;
}
main()
{
int i = 150,j = -100;
double k = 3.14159;
my_printf(“%d %f %x/n”,j,k,i);
my_printf(“%2d %*d/n”,i,2,i);
}
run my_printf() : -100 3.14159 96
my_printf() : 150 150
#include <stdarg.h>
/* minprintf: minimal printf with variable argument list */
void minprintf(char *fmt, ...)
{
va_list ap; /* points to each unnamed arg in turn */
char *p, *sval;
int ival;
double dval;
va_start(ap, fmt); /* make ap point to 1st unnamed arg */
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); /* clean up when done */
}
Another example is here.
#include<stdio.h>
#include<stdarg.h>
int my_printf( const char *format,……)
{
va_list ap;
int retval;
va_start(ap,format);
printf(“my_printf( ):”);
retval = vprintf(format,ap);
va_end(ap);
return retval;
}
main()
{
int i = 150,j = -100;
double k = 3.14159;
my_printf(“%d %f %x/n”,j,k,i);
my_printf(“%2d %*d/n”,i,2,i);
}
run my_printf() : -100 3.14159 96
my_printf() : 150 150
相关文章推荐
- 2008 November 17th Monday (十一月 十七日 月曜日)
- 2008 March 24th Monday (三月 二十四日 月曜日)
- 2008 November 10th Monday (十一月 十日 月曜日)
- December 24th Monday (十二月 二十四日 月曜日)
- September 24th Monday (九月 二十四日 月曜日)
- 2008 January 7th Monday (一月 七日 月曜日)
- 2008 February 18th Monday (二月 十八日 月曜日)
- 2008 May 19th Monday (五月 十九日 月曜日)
- 2008 July 28th Monday (七月 二十八日 月曜日)
- 2008 November 28th Friday (十一月 二十八日 金曜日)
- 2008 April 14th Monday (四月 十四日 月曜日)
- 2008 August 18th Monday (八月 十八日 月曜日)
- 2008 November 18th Tuesday (十一月 十八日 火曜日)
- 2008 February 4th Monday (二月 四日 月曜日)
- 2008 April 28th Monday (四月 二十八日 月曜日)
- 2008 November 19th Wednesday (十一月 十九日 水曜日)
- 2008 October 27th Monday (十月 二十七日 月曜日)
- 2008 January 24th Thursday (一月 二十四日 木曜日)
- 2008 April 7th Monday (四月 七日 月曜日)
- 2008 May 12th Monday (五月 十二日 月曜日)