-1

可変引数を取る C 関数があり、非常に長い引数リストを使用して呼び出す必要があります。引数はすべて、配列の要素を通過します。例:

myFunction( A[0], B[0], A[1], B[1], A[2], B[2], A[3], B[3], ..... A[N], B[N] );

ここで、N は通常 100 ~ 200 です。

N を大きくするたびにこの呼び出しを手動で作成する必要はなく、考えてみると、これを行うエレガントな方法はありますか?

私は次のようなものを試しました:

i=0;
myFunction( A[i], B[i++], A[i], B[i++], A[i], B[i++], A[i], B[i++], ..... A[i], B[++] );

しかし、もちろんそれは失敗します。ただし、N を大きくするたびに、同じ行を何度もコピーするだけでよいので、各配列インデックスが正しいことを確認する必要はありません。これは非常に面倒です。

myFunction() を変更することはできません。

次のように、C にその場で関数呼び出しを作成する方法があればいいのにと思います。

for( i = 0 ; i <= N ; i++ )
{
    CONSTRUCT_CALL( myFunction, A[i], B[i] );
}

これはまさに私が望むものですが、もちろんそれはオプションではありません。

もっと簡単でエレガントなものはありますか?

どうもありがとうございました。

4

2 に答える 2

0

あなたのデザインには非常に悪いものがあります。

myFunction2 つの配列 (A と B) を取り、使用するインデックスの数を取るように書き換えます。

このような関数を呼び出す短い例:

int A[100];
int B[100];
int c = myFunction(A, B, 100);

可能な実装myFunction:

int myFunction(int* A, int* B, int count)
{
    int result = 0;
    for(int j = 0; j < i; j++)
        result += A[j] + B[j]*2;

    return result;
}
于 2014-09-16T12:16:47.187 に答える