🔧 ユーティリティ ・ stdarg.h ・ C89
va_arg の使い方type va_arg(va_list ap, type);
可変長引数リストから、指定した型で次の1つの引数を取り出すマクロ。呼び出し側が実際に渡した引数の型と、ここで指定した型が一致していないと未定義動作になる。 呼び出すたびに内部のポインタが自動的に次の引数へ進むため、順番通りに1つずつ取り出していく。
#include <stdarg.h>
#include <stdio.h>
double average(int count, ...) {
va_list ap;
va_start(ap, count);
double total = 0;
for (int i = 0; i < count; i++) total += va_arg(ap, double);
va_end(ap);
return total / count;
}
int main(void) {
printf("%f\n", average(2, 1.0, 3.0));
return 0;
}
⚠️ 呼び出し側が渡した実引数の型とva_argで指定した型が一致しないと未定義動作。printfの書式指定ミスと同種の危険がある。
アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ
va_arg と一緒に使う関数もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。