<cstdarg>

va_start

void va_start (va_list ap, paramN);
初始化一個變長引數列表
初始化 ap 以便從引數 paramN 之後的其他引數中檢索。

呼叫 va_start 的函式,在返回之前也必須呼叫 va_end

引數

ap
未初始化的 va_list 型別物件。
呼叫後,它包含透過 va_arg 檢索其他引數所需的資訊。
如果 ap 已經作為第一個引數傳遞給了先前對 va_startva_copy 的呼叫,那麼在呼叫此函式之前,它必須先傳遞給 va_end
paramN
函式定義中最後一個命名引數的名稱。後續呼叫 va_arg 提取的引數是 paramN 之後的引數。
該引數不能是宣告為 `register` 儲存類、函式或陣列型別,或者其型別在應用預設引數提升後不相容的引數。
該引數不能是引用型別,或者其型別與在沒有引數的情況下傳遞引數所產生的型別不相容。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* va_start example */
#include <stdio.h>      /* printf */
#include <stdarg.h>     /* va_list, va_start, va_arg, va_end */

void PrintFloats (int n, ...)
{
  int i;
  double val;
  printf ("Printing floats:");
  va_list vl;
  va_start(vl,n);
  for (i=0;i<n;i++)
  {
    val=va_arg(vl,double);
    printf (" [%.2f]",val);
  }
  va_end(vl);
  printf ("\n");
}

int main ()
{
  PrintFloats (3,3.14159,2.71828,1.41421);
  return 0;
}

函式 PrintFloats 以額外引數的數量作為第一個引數(n),然後使用 cstdarg 宏順序讀取這些引數,並以特定格式打印出來。

輸出
Printing floats: [3.14] [2.72] [1.41]


另見