可变长度参数列表 /*va_参数示例*/ #包括 #包括 无效打印行(字符*第一,…) { char*str; va_列表vl; str=第一; va_启动(vl,第一); 做{ str=va_arg(vl,char*); 如果 printf(“%s\n”,str); }while(str!=NULL); va_端(vl); } int main() { 打印行(“第一”、“第二”、“第三”、“第四”、空); 返回0; }

可变长度参数列表 /*va_参数示例*/ #包括 #包括 无效打印行(字符*第一,…) { char*str; va_列表vl; str=第一; va_启动(vl,第一); 做{ str=va_arg(vl,char*); 如果 printf(“%s\n”,str); }while(str!=NULL); va_端(vl); } int main() { 打印行(“第一”、“第二”、“第三”、“第四”、空); 返回0; },c,C,我们可以像这样调用PrintLines函数(“第一”、“第二”、“第三”、6、NULL)将整数作为变量参数列表的一部分。如果是,有人能解释一下怎么做吗?所以对于你的情况,你只需要硬编码,比如: /* va_arg example */ #include <stdio.h> #include <stdarg.h> void PrintLines ( char* first, ...) { char* str; va_list vl; str=first;

我们可以像这样调用
PrintLines
函数(“第一”、“第二”、“第三”、6、NULL)将整数作为变量参数列表的一部分。如果是,有人能解释一下怎么做吗?

所以对于你的情况,你只需要硬编码,比如:

/* 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;
}
但我认为这不是你想要的:有时你可能想用4位的整数调用PrintLines,有时用字符串调用PrintLines。然后你必须告诉它位置4的那个东西是什么,因为这个糟糕的函数应该如何发现112312123是整数还是字符串的地址?
因此,您必须为这个函数提供一些类型信息,可能类似于printf和friends中的操作:第一个参数包含一个描述其余参数的字符串。也许像vsprintf这样的东西对你来说会做得很好?

所以对于你的情况,你只需要硬编码,比如:

/* 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;
}
但我认为这不是你想要的:有时你可能想用4位的整数调用PrintLines,有时用字符串调用PrintLines。然后你必须告诉它位置4的那个东西是什么,因为这个糟糕的函数应该如何发现112312123是整数还是字符串的地址?
因此,您必须为这个函数提供一些类型信息,可能类似于printf和friends中的操作:第一个参数包含一个描述其余参数的字符串。也许VStavf会为你做一个完美的工作?

< P>在C++ 11中考虑。我知道它可以做到这一点,但以前从未使用过。

在C++ 11中考虑。我知道它可以做到这一点,但以前从未使用过。

您将代码标记为
C++
,但代码本身是纯
C
。语言在这里很重要,因为使用
C++
时,您最好使用可变模板。您可以,但问题是您使用char*类型调用va_arg,因此它会将6解释为指向字符(或字符串)的指针,这将给您带来一些问题,就像您使用%s进行printf一样。为什么不传递字符串文本“6”?@ LoL4T0:使用C中不存在的特性在编写C++时不是强制性的。谢谢你没有删除C++标签。@本杰明兰德利,这种问题很混乱,因为我可以用3行代码编写可变的等价于不同的寺庙,但是它看起来不适合作者。这取决于我们的项目的要求。你把代码标记为<代码> C++ >代码>,但是代码本身是纯代码>代码>代码>。语言在这里很重要,因为使用
C++
时,您最好使用可变模板。您可以,但问题是您使用char*类型调用va_arg,因此它会将6解释为指向字符(或字符串)的指针,这将给您带来一些问题,就像您使用%s进行printf一样。为什么不传递字符串文本“6”?@ LoL4T0:使用C中不存在的特性在编写C++时不是强制性的。谢谢你没有删除C++标签。@本杰明兰德利,这种问题很混乱,因为我可以用3行代码写更多安全的变量,但是它看起来不适合作者。这取决于我们项目的要求。实际上,它是:<代码> AutoV= {(BOOL)(std::cout实际上是:
autov={(bool)(std::cout