私はこれを持っています:
long int addsquares(int n, ...)
パラメータにアクセスするにはどうすればよいですか? 使えませんva_start
しva_arg
…
私はこれを持っています:
long int addsquares(int n, ...)
パラメータにアクセスするにはどうすればよいですか? 使えませんva_start
しva_arg
…
実装依存...
事前テスト
long int addsquares(int n, int d1, ...){
printf("%p,%p\n", &n, &d1);
return 0L;
}
結果: Windows 64 ビット システム、vc10 (sizeof int:4)
003DFD54,003DFD58
Windows 64 ビット システム、gcc 4.4.3 (sizeof int:4)
000000000022FE60,000000000022FE68
vc10 の場合:
long int addsquares(int n, ...){
int i, *p = &n;
long sum = 0L;
for(i=1;i<=n;++i)
sum += p[i]*p[i];
return sum;
}
gcc の場合:
long int addsquares(int n, ...){
int i, *p = &n;
long sum = 0L;
for(i=1;i<=n;++i)
sum += p[i*2]*p[i*2];
return sum;
}
可変引数マクロ ( ) を使用することが許可されていない可変引数関数があると言っている場合は、va_xxx
それらのマクロの内容を自分で書き直す必要があります。
関数プロトタイプを変更できない限り、現在はそれも許可されていると思います。
配列を使用し、各パラメーターを配列の 1 つの「セル」に格納します。
long int addsquares(int[] parameters)
{
for (int i = 0; i < parameters.length(); i++)
{
//Use current parameter: parameters[i]
}
}
これはc#コードですが、cでも機能すると思います。