va_start
From cppreference.com
| ヘッダー <stdarg.h> で定義 |
||
void va_start( va_list ap, parmN ); |
(C23まで) | |
| void va_start( va_list ap, ... ); |
(C23以降) | |
va_start マクロは、名前付き引数 parmN の後に続く可変引数へのアクセスを可能にします (C23 まで)(C23 まで)。
va_start は、va_arg の呼び出しの前に、有効な va_list オブジェクト ap のインスタンスとともに呼び出される必要があります。
|
|
(C23まで) |
|
|
(C23以降) |
目次 |
[編集] パラメータ
| ap | - | va_list 型のインスタンス |
| parmN | - | 最初の可変引数の前の名前付き引数 |
[編集] 展開された値
(なし)
[編集] 例
このコードを実行
#include <stdio.h> #include <stdarg.h> int add_nums_C99(int count, ...) { int result = 0; va_list args; va_start(args, count); // count can be omitted since C23 for (int i = 0; i < count; ++i) { result += va_arg(args, int); } va_end(args); return result; } #if __STDC_VERSION__ > 201710L // Same as above, valid since C23 int add_nums_C23(...) { int result = 0; va_list args; va_start(args); int count = va_arg(args, int); for (int i = 0; i < count; ++i) { result += va_arg(args, int); } va_end(args); return result; } #endif int main(void) { printf("%d\n", add_nums_C99(4, 25, 25, 50, 50)); #if __STDC_VERSION__ > 201710L printf("%d\n", add_nums_C23(4, 25, 25, 50, 50)); #endif }
実行結果の例
150 150
[編集] 参照
- C17標準 (ISO/IEC 9899:2018)
- 7.16.1.4 The va_start macro (p: 198-199)
- C11標準 (ISO/IEC 9899:2011)
- 7.16.1.4 The va_start macro (p: 271-272)
- C99標準 (ISO/IEC 9899:1999)
- 7.15.1.4 The va_start macro (p: 251-252)
- C89/C90標準 (ISO/IEC 9899:1990)
- 4.8.1.1 The va_start macro
[編集] 関連項目
| 次の可変長引数にアクセスする (関数マクロ) | |
| (C99) |
可変長引数のコピーを作成する (関数マクロ) |
| 可変長引数の走査を終了する (関数マクロ) | |
| va_start、va_arg、va_end、va_copy で必要とされる情報を保持する (typedef) | |
| C++ ドキュメント for va_start
| |