C言語学習ポータル(無料版) 学習コンテンツ 関数リファレンス va_arg

🔧 ユーティリティ ・ stdarg.h ・ C89

va_arg の使い方

C言語 標準ライブラリ関数リファレンス(無料公開)

書式

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 と一緒に使う関数

va_start可変長引数関数の内部で、可変部分の引数リストへのアクセスを開始するマクロ。最後の固定引数の名前を渡して初期化する。使用後… va_endva_startで始めた可変長引数リストの利用を終了するマクロ。多くの処理系では実質何もしないが、規格上はva_star…

同じ分類(ユーティリティ)の関数

assert offsetof va_end va_start

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る