-3

私はこれを持っています:

long int addsquares(int n, ...) 

パラメータにアクセスするにはどうすればよいですか? 使えませんva_startva_arg

4

4 に答える 4

1

実装依存...

事前テスト

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;
}
于 2013-04-08T13:21:41.880 に答える
1

可変引数マクロ ( ) を使用することが許可されていない可変引数関数があると言っている場合は、va_xxxそれらのマクロの内容を自分で書き直す必要があります。

関数プロトタイプを変更できない限り、現在はそれも許可されていると思います。

于 2013-04-08T12:43:51.500 に答える
0

配列を使用し、各パラメーターを配列の 1 つの「セル」に格納します。

long int addsquares(int[] parameters)
{
    for (int i = 0; i < parameters.length(); i++)
    {
        //Use current parameter: parameters[i]
    }
}

これはc#コードですが、cでも機能すると思います。

于 2013-04-08T12:36:22.663 に答える