#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))))