名前空間
変種

va_start

提供: cppreference.com
<tbody> </tbody>
ヘッダ <stdarg.h> で定義
void va_start( va_list ap, parmN );

va_start マクロは名前付き引数 parmN に続く可変長引数にアクセスできるようにします。

va_start は、あらゆる va_arg の呼び出しの前に、有効な va_list オブジェクト ap のインスタンスを指定して呼ぶべきです。

parmNregister 記憶域クラス指定子を用いて宣言されている場合、配列型の場合、関数型の場合、またはデフォルト引数昇格の結果の型と互換性のない型の場合、動作は未定義です。

引数

ap - va_list 型のインスタンス
parmN - 最初の可変長引数の前の名前付き引数

展開後の値

(なし)

#include <stdio.h>
#include <stdarg.h>

int add_nums(int count, ...) 
{
    int result = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i) {
        result += va_arg(args, int);
    }
    va_end(args);
    return result;
}

int main(void) 
{
    printf("%d\n", add_nums(4, 25, 25, 50, 50));
}

出力例:

150

参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.16.1.4 The va_start macro (p: 271-272)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.15.1.4 The va_start macro (p: 251-252)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.8.1.1 The va_start macro

関連項目

可変長引数関数の次の引数にアクセスします
(関数マクロ) [edit]
可変長引数関数の引数をコピーします
(関数マクロ) [edit]
可変長引数関数の引数の巡回を終了します
(関数マクロ) [edit]
va_start, va_arg, va_end, va_copy で使用される情報を保持します
(typedef) [edit]