|
|
printf関数の様に可変数の引数が可能な関数を作ってみます。
#include <stdio.h>
#include <stdarg.h>
int CalcAdd(int first, ...)
{
int sum = 0;
int next = 0;
va_list marker;
va_start(marker, first); //可変個の引数の初期化
sum += first;
//va_arg()は、リスト内の次の引数を指すように
//markerをインクリメントし、その位置の値を返す
//0となったらループを抜ける
while((next = va_arg(marker, int)) != 0){
sum += next;
}
va_end(marker); //可変個の引数のリセット
return sum;
}
void main()
{
//加算結果を出力する(最後に0を付ける)
printf("加算結果 = %ld\n", CalcAdd(1, 2, 3, 4, 5, 0));
printf("加算結果 = %ld\n", CalcAdd(1, -2, 3, -4, 5, 0));
//↓途中に0が入るとだめ
printf("加算結果 = %ld\n", CalcAdd(1, 2, 0, 4, 5, 0));
//↓intの最大値を越えるとだめ
printf("加算結果 = %ld\n", CalcAdd(2147483647, 1, 0));
}
結果:
加算結果 = 15
加算結果 = 3
加算結果 = 3
加算結果 = -2147483648
これを使うとコンパイラによる型チェックができないので
なるべく使わないほうがいいでしょう。
|
|