可变参数

#include <stdio.h>
#include
<stdarg.h>

void print_num(int n, ...)
{
int i;
int num;
va_list args;
va_start(args, n);
for(i = 0; i < n; ++i) {
num
= va_arg(args, int);
printf(
"%d ", num);
}
printf(
"\n");
va_end(args);
}
void print_str(char *str, ...)
{
char *s;
va_list args;
va_start(args, str);
printf(
"%s ", str);
while((s = va_arg(args, char *))) {
printf(
"%s ", s);
}
printf(
"\n");
va_end(args);
}
int main()
{
print_num(
5, 25, 10, 8, 46, 28);
print_str(
"I", "Love", "You!", NULL);
return 0;
}

/************************************************************************/
/*可变参数宏的一种实现-------参考linux-0.12 stdarg.h */
/************************************************************************/


typedef
char *va_list;

#define __va_rounded_size(TYPE) \
(((
sizeof(TYPE) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))

#define va_start(AP, LASTARG) \
(AP
= ((char *) &LASTARG + __va_rounded_size(LASTARG)))

#define va_arg(AP, TYPE) \
(AP
+= __va_rounded_size(TYPE), \
*((TYPE *)(AP - __va_rounded_size(TYPE))))

 

posted @ 2010-09-08 21:23  penink  阅读(125)  评论(0)    收藏  举报