/* 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函数,将integer作为变量参数列表的一部分。如果是,谁能解释一下是怎么做的?
发布于 2012-11-24 05:39:49
因此,对于您的情况,您只需硬编码,如下所示:
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);
}但我认为这并不是您想要的:您有时可能希望调用PrintLines时使用的是第4位的整数,有时使用的是字符串。然后你必须告诉它Pos4处的东西是什么,因为这个可怜的函数应该如何判断112312123是一个整数还是一个字符串的地址?因此,您必须为该函数提供一些类型信息,可能类似于printf和friends中的操作:第一个arg包含一个描述其余参数的字符串。也许像vsprintf这样的东西会为你做一个完美的工作?
发布于 2012-11-24 05:42:01
以C++ 11中的variadic templates为例,我知道它可以做到这一点,但以前从未使用过它。
https://stackoverflow.com/questions/13535935
复制相似问题