可変引数関数
From cppreference.com
< c
可変長引数関数とは、printf のように可変個の引数を取る関数のことです。
可変長引数関数の宣言では、最後の仮引数として省略符号 (...) を使います。例: int printf(const char* format, ...);。構文と実引数の自動変換についての詳細は 可変長引数 を参照してください。
関数本体から可変長引数にアクセスするには、以下のライブラリ機能を使用します。
型 | ||
| va_start、va_arg、va_end、va_copy で必要とされる情報を保持する (typedef) | ||
マクロ | ||
| ヘッダー
<stdarg.h> で定義 | ||
| 可変長引数関数へのアクセスを有効にする (関数マクロ) | ||
| 次の可変長引数にアクセスする (関数マクロ) | ||
| (C99) |
可変長引数のコピーを作成する (関数マクロ) | |
| 可変長引数の走査を終了する (関数マクロ) | ||
[編集] 例
様々な型の値を表示します。
このコードを実行
#include <stdarg.h> #include <stdio.h> void simple_printf(const char* fmt, ...) { va_list args; for (va_start(args, fmt); *fmt != '\0'; ++fmt) { switch(*fmt) { case 'd': { int i = va_arg(args, int); printf("%d\n", i); break; } case 'c': { // A 'char' variable will be promoted to 'int' // A character literal in C is already 'int' by itself int c = va_arg(args, int); printf("%c\n", c); break; } case 'f': { double d = va_arg(args, double); printf("%f\n", d); break; } default: puts("Unknown formatter!"); goto END; } } END: va_end(args); } int main(void) { simple_printf("dcff", 3, 'a', 1.969, 42.5); }
出力
3 a 1.969000 42.50000
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 7.16 可変長引数 <stdarg.h> (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 7.16 可変長引数 <stdarg.h> (p: TBD)
- C11標準 (ISO/IEC 9899:2011)
- 7.16 可変長引数 <stdarg.h> (p: 269-272)
- C99標準 (ISO/IEC 9899:1999)
- 7.15 可変長引数 <stdarg.h> (p: 249-252)
- C89/C90標準 (ISO/IEC 9899:1990)
- 4.8 可変長引数 <stdarg.h>
[編集] 関連項目
| 可変長引数関数のC++ ドキュメント
|