首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可变长度参数列表

可变长度参数列表
EN

Stack Overflow用户
提问于 2012-11-24 05:28:11
回答 2查看 1.3K关注 0票数 1
代码语言:javascript
复制
/* 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作为变量参数列表的一部分。如果是,谁能解释一下是怎么做的?

EN

回答 2

Stack Overflow用户

发布于 2012-11-24 05:39:49

因此,对于您的情况,您只需硬编码,如下所示:

代码语言:javascript
复制
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这样的东西会为你做一个完美的工作?

票数 3
EN

Stack Overflow用户

发布于 2012-11-24 05:42:01

以C++ 11中的variadic templates为例,我知道它可以做到这一点,但以前从未使用过它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13535935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档