Everything
7.4.10 <stdarg.h>

可変個の引数を持つ関数に対し、その引数の参照を可能にします。

 

以下はすべて処理系定義です。

種別

定義名

説明

(マクロ)

va_list

可変個の引数を参照するために、va_start, va_arg, va_endマクロで共通に使用される変数の型です。

関数

(マクロ)

va_start

可変個の引数の参照を行うため、初期設定処理を行います。

va_arg

可変個の引数を持つ関数に対して、現在参照中引数の次の引数への参照を可能とします。

va_end

可変個の引数を持つ関数の引数への参照を終了させます。

va_copy <-lang=c99>

可変個の引数をコピーします。

 

本標準インクルードファイルで定義しているマクロを使用したプログラムの例を以下に示します。

 

    1   #include <stdio.h>
    2   #include <stdarg.h>
    3
    4   extern void prlist(int count,...);
    5
    6   void main()
    7   {
    8       prlist(1, 1);
    9       prlist(3, 4, 5, 6);
    10      prlist(5, 1, 2, 3, 4, 5);
    11  }
    12
    13  void prlist(int count,...)
    14  {
    15      va_list ap;
    16      int i;
    17
    18      va_start(ap,count);
    19      for(i=0;i<count;i++)
    20          printf("%d",va_arg(ap,int));
    21      putchar('\n');
    22      va_end(ap);
    23  }

 

【説明】

この例では、第1引数に出力するデータの数を指定し、以下の引数をその数だけ出力する関数prlistを実現しています。

18行目で、可変個の引数への参照をva_startで初期化します。その後引数を一つ出力するたびに、va_argマクロによって次の引数を参照します(20行目)。va_argマクロでは、引数の型名(この場合はint型)を第2引数に指定します。

引数の参照が終了したら、va_endマクロを呼び出します(22行目)。