1
/* 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);,将整数作为变量参数列表的一部分。如果是,任何人都可以请解释如何做到这一点?

4

2 回答 2

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 和朋友中所做的:第一个 arg 包含一个描述其余参数的字符串。也许像 vsprintf 这样的东西会为你做一个完美的工作?

于 2012-11-23T21:39:49.303 回答
1

考虑C++ 11 中的可变参数模板。我知道它可以做到这一点,但以前从未使用过它。

于 2012-11-23T21:42:01.350 回答