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

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

va_start の使い方

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

書式

void va_start(va_list ap, last);

どんな関数か

可変長引数関数の内部で、可変部分の引数リストへのアクセスを開始するマクロ。最後の固定引数の名前を渡して初期化する。使用後は必ずva_endで後始末する必要がある。 第2引数(last)には必ず可変長引数の直前にある固定引数の名前をそのまま渡す決まりになっている。

使用例

#include <stdarg.h>
#include <stdio.h>
int sum(int count, ...) {
    va_list ap;
    va_start(ap, count);
    int total = 0;
    for (int i = 0; i < count; i++) total += va_arg(ap, int);
    va_end(ap);
    return total;
}
int main(void) {
    printf("%d\n", sum(3, 1, 2, 3));
    return 0;
}

つまずきやすい注意点

⚠️ va_startとva_endは必ず対で使う。省略すると処理系によっては未定義動作になる。

アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ

va_start と一緒に使う関数

va_arg可変長引数リストから、指定した型で次の1つの引数を取り出すマクロ。呼び出し側が実際に渡した引数の型と、ここで指定した型が… va_endva_startで始めた可変長引数リストの利用を終了するマクロ。多くの処理系では実質何もしないが、規格上はva_star…

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

assert offsetof va_arg va_end

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

完全版(BOOTH)を見る