可変長引数関数
From ja.cppreference.net
可変長引数関数とは (例: std::printf) のように可変個の引数を取る関数です。
可変長引数関数を宣言するには、パラメータリストの後に省略記号 (ellipsis) を記述します (例: int printf(const char* format...);)。その前にオプションのカンマを置くこともできます。構文、自動引数変換、および代替手段の詳細については、可変長引数を参照してください。
関数本体から可変長引数にアクセスするには、以下のライブラリ機能が提供されています:
ヘッダ
<cstdarg> | |
| va_start 可変長引数関数の引数へのアクセスを有効にする | |
| va_arg 次の可変長引数関数の引数にアクセスする | |
va_copy |
(C++11) 可変長引数関数の引数のコピーを作成する |
| va_end 可変長引数関数の引数の走査を終了する | |
| va_listva_start, va_arg, va_end, va_copy に必要な情報を保持する (typedef) | |
例
このコードを実行
#include <cstdarg> #include <iostream> void simple_printf(const char* fmt...) // C-style "const char* fmt, ..." is also valid { va_list args; va_start(args, fmt); while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int); std::cout << i << '\n'; } else if (*fmt == 'c') { // note automatic conversion to integral type int c = va_arg(args, int); std::cout << static_cast<char>(c) << '\n'; } else if (*fmt == 'f') { double d = va_arg(args, double); std::cout << d << '\n'; } ++fmt; } va_end(args); } int main() { simple_printf("dcff", 3, 'a', 1.999, 42.5); }
出力:
3 a 1.999 42.5
関連項目
|
Cドキュメント
for
可変個引数関数
|