當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C語言 va_arg用法及代碼示例

C語言stdarg頭文件(stdarg.h)中va_arg宏的用法及代碼示例。

用法:

type va_arg (va_list ap, type)
檢索下一個參數
該宏擴展為類型的表達式type與的價值當前論點在裏麵可變參數列表由...確定ap

每次對該宏的調用都會修改狀態ap這樣,對該宏的下一次調用將擴展到其評估結果之後的參數。

注意va_arg無法確定傳遞給函數的參數的實際類型,但使用傳遞的任何類型作為type宏參數作為其類型。

還要注意va_arg既不能確定檢索到的參數是否是傳遞給函數的最後一個參數(即使它是該列表末尾的元素)。該函數的設計方式應使得可以通過命名參數或已讀取的其他自變量的值以某種方式推斷參數的數量。

參數

ap
類型的對象va_list攜帶有關當前檢索狀態的信息可變參數列表。該對象應已通過對的初始調用進行了初始化。va_start或者va_copy並沒有與釋放va_end
type
類型名稱。此類型名稱用作該宏擴展為的表達式的類型(即其返回類型)。
為了使類型表達式適合於與va_arg,它必須是這樣的type*產生一個指向type
這個type應與提取的參數的類型兼容(根據默認的參數提升)。未簽名另一個版本,或者一個是空指針以及其他一些指針類型。

返回值

返回當前附加參數作為類型的表達式type

示例

/* va_arg example */
#include <stdio.h>      /* printf */
#include <stdarg.h>     /* va_list, va_start, va_arg, va_end */

int FindMax (int n, ...)
{
  int i,val,largest;
  va_list vl;
  va_start(vl,n);
  largest=va_arg(vl,int);
  for (i=1;i<n;i++)
  {
    val=va_arg(vl,int);
    largest=(largest>val)?largest:val;
  }
  va_end(vl);
  return largest;
}

int main ()
{
  int m;
  m= FindMax (7,702,422,631,834,892,104,772);
  printf ("The largest value is: %d\n",m);
  return 0;
}


FindMax函數將要獲取的其他參數數量作為其第一個參數。檢索第一個附加參數並將其用作比較的初始參考,然後在循環中檢索其餘的附加參數並進行比較以返回最大的參數(在本例中為892)。

輸出:
The largest value is: 892

相關用法


注:本文由純淨天空篩選整理自C標準庫大神的英文原創作品 C va_arg function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。