/* 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
函数吗,它将整数作为变量参数列表的一部分。如果是,有人能解释一下怎么做吗? 最佳答案
所以对于你的情况,你只需要硬编码,比如:
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,有时用一个字符串调用PrintLines。然后你必须告诉它pos 4的位置是什么,因为这个糟糕的函数应该如何找出112312123是整数还是字符串的地址?
所以您必须为这个函数提供一些类型信息,可能类似于printf和friends中的操作:第一个参数包含一个描述其余参数的字符串。也许像vsprintf这样的东西会对你很好?
关于c - 可变长度参数列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13535935/