C言語 可変引数リストの処理 - stdarg.h - [ va_list, va_start, va_end, va_arg ]
2008.09.10 Wednesday | by LRESULT
stdarg.hには、可変個の引数を取得するマクロが定義されています。
可変個の引数とは、"..."で表される引数です。
printf( "%d, %d", a, b );の「a, b」のように、
数が決められていない引数のことを可変個の引数といいます。
va_list
可変個の引数を格納する為の変数(可変引数リスト)。
実際には、typedef void *va_list ; という形で定義されてます
書式 | void va_start( va_list ap, paraNum ) |
---|---|
機能 | 可変個引数リストの初期化 |
引数 | va_list ap : 可変個引数リスト paraNum : 初期化する数 |
戻り値 | なし |
書式 | void va_end( va_list ap ) |
---|---|
機能 | 可変個引数リストの終了 |
引数 | va_list ap : 可変個引数リスト |
戻り値 | なし |
書式 | type va_arg( va_list ap, type ) |
---|---|
機能 | 可変個引数リストから指定した型で取得 |
引数 | va_list ap : 可変個引数リスト type : 取得する型 |
戻り値 | なし |
5個の可変個引数、"I", "Can", "Do", "It", "!!" を va_listを利用して取得します。 |
---|
#include <stdio.h> #include <stdarg.h> void func( int num, ... ); void main(void) { func( 5, "I", "Can", "Do", "It", "!!" ); } void func( int num, ... ) { va_list ap; int i; char *str; /* 可変引数リスト初期化 */ va_start( ap, num ); for( i=0; i<num; i++ ){ /* 可変個の引数を取り出し */ str = va_arg( ap, char* ); printf( "%s ", str ); } /* 可変引数リスト終了 */ va_end( ap ); } |
I Can Do It !! |
---|
と、表示されるかと。 va_arg()で、引数を取り出す際には、char*を使用して 文字列で取り出しています。 |