/* 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/

10-12 16:08