/* va_arg example */
#include <stdio.h>
#include <stdarg.h>
void PrintLines ( char* first, ...)
{
char* str;
va_list vl;
str=first;
va_start(vl,first);
do {
str=va_arg(vl,char*);
if
printf ("%s\n",str);
} while (str!=NULL);
va_end(vl);
}
int main ()
{
PrintLines ("First","Second","Third","Fourth",NULL);
return 0;
}
我们可以像PrintLines
一样调用PrintLines("First","Second","Third",6,NULL);
函数,将整数作为变量参数列表的一部分。如果有,可以请任何人解释如何做到这一点吗?
答案 0 :(得分:3)
所以对于你的情况你只需硬编码,如:
void PrintLines ( char* first, ...)
...
str1=va_arg(vl,char*);
str2=va_arg(vl,char*);
str3=va_arg(vl,char*);
int4=va_arg(vl,int);
va_end(vl);
}
但我认为这不是你想要的:你有时可能想要在pos 4中使用整数调用PrintLines,有时也需要使用字符串。然后你必须告诉它在pos 4的那个东西是什么,因为这个差的函数应该怎么发现112312123是一个整数还是一个字符串的地址? 所以你必须为这个函数提供一些类型信息,可能类似于在printf和friends中完成的:第一个arg包含一个描述其余参数的字符串。也许像vsprintf这样的人会为你做一个完美的工作?
答案 1 :(得分:1)
在C ++ 11中考虑variadic templates。我知道它可以做到这一点,但以前从未使用它。