○可変引数リスト

引数の数が決まっていないメソッドを実現する



#include <stdio.h>
#include <stdarg.h>

void test(int size,...){
	va_list ap;
	va_start(ap,size);//可変引数リストの初期化 可変引数の直前の変数を指定する
	
	int i;
	while(EOF!=(i=(int)va_arg(ap,int*))){//可変引数リストからEOFまで取得
		printf("%d\n",i);
	}

	va_end(ap);//可変引数リストの終了
}

int main(){
	test(0,1,2,3,4,5,6,7,8,9);
	return 0;
}


処理結果

1
2
3
4
5
6
7
8
9



■sprintfに仕事をさせるような関数を作る

可変引数リストをそのままsprintfに渡してもうまくいかないので
va_listを引数に取る関数を使用すると吉
そのまま引数リストを渡せる。

vprintf,vfprintf,vsprintf,vsnprintf,vwprintf,vfwprintf,vswprintf
などがある。


void test(char*str,...){
	char pos[128];
	va_list ap;
	va_start(ap,str);
	vsprintf(pos,str,ap);
	
	//何らかの処理

	va_end(ap);//可変引数リストの終了
}






▲トップページ > Windows と C++