可変引数関数
From cppreference.com
可変長引数関数とは、可変個の引数を取る関数(例:std::printf)のことです。
可変長引数関数を宣言するには、仮引数リストの後に省略記号(...)を置きます。例:int printf(const char* format...);。省略記号の前にカンマを置くこともできます。構文、自動的な引数変換、代替手段についての詳細は可変長引数を参照してください。
関数本体から可変長引数にアクセスするために、以下のライブラリ機能が提供されています。
| ヘッダー
<cstdarg> で定義 | |
| 可変長引数関数へのアクセスを有効にする (関数マクロ) | |
| 次の可変長引数にアクセスする (関数マクロ) | |
| (C++11) |
可変長引数のコピーを作成する (関数マクロ) |
| 可変長引数の走査を終了する (関数マクロ) | |
| va_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言語のドキュメント 可変長引数関数
|