可変個の引数を持つ関数に対し、その引数の参照を可能にします。
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引数に指定します。