Home C&C++函数库 c++ 语法 程序源码 Linux C库

va_copy

macro   <cstdarg>

void va_copy (va_list dest, va_list src);

复制变量参数表

将dest初始化为src的副本(在它的当前状态)。

从dest中提取的下一个参数与从src中提取的参数相同。

调用va_copy的函数在返回之前也应该在dest上调用va_end

☲  参数


dest

类型为va_list的未初始化对象。
调用之后,它携带检索src相同的附加参数所需的信息。
如果dest已经作为第一个参数传递给了之前调用va_start或va_copy的函数, 那么在调用该函数之前,应该将它传递给va_end

src

类型为va_list的对象,该对象已经携带了信息,可以通过va_arg获取附加参数 (例如,它已经作为第一个参数传递给va_start或va_copy,但还没有通过va_end释放)。

☉  返回值



none

☣  示例



/* va_copy example */
#include <stdio.h>      /* printf, vprintf*/
#include <stdlib.h>     /* malloc */
#include <string.h>     /* strlen, strcat */
#include <stdarg.h>     /* va_list, va_start, va_copy, va_arg, va_end */

/* print ints until a zero is found: */
void PrintInts (int first,...)
{
  char * buffer;
  const char * format = "[%d] ";
  int count = 0;
  int val = first;
  va_list vl,vl_count;
  va_start(vl,first);

  /* count number of arguments: */
  va_copy(vl_count,vl);
  while (val != 0) {
    val=va_arg(vl_count,int);
    ++count;
  }
  va_end(vl_count);

  /* allocate storage for format string: */
  buffer = (char*) malloc (strlen(format)*count+1);
  buffer[0]='\0';

  /* generate format string: */
  for (;count>0;--count) {
    strcat (buffer,format);
  }

  /* print integers: */
  printf (format,first);
  vprintf (buffer,vl);

  va_end(vl);
}

int main ()
{
  PrintInts (10,20,30,40,50,0);
  return 0;
}

PrintLines函数接受数量可变的参数。传递的第一个参数首先成为形参, 但其余的使用va_arg在do-while循环中顺序检索,直到检索到下一个参数为一个空指针。
输出:
[10] [20] [30] [40] [50] [0]

🍄  另请参阅


va_list 保存关于变量参数的信息的类型(类型)
va_start 初始化变量参数列表(宏)
va_arg 检索下一个参数(宏)
va_end 结束使用变量参数列表(宏)

联系我们 免责声明 关于CandCplus 网站地图