2011-08-12 7 views
2

可能性の重複:
C/C++: Passing variable number of arguments around変数arg関数を呼び出す関数を作成するにはどうすればよいですか?

私は別のソースファイル単位にCのAPIを呼び出すすべての機能を配置する必要があります。これは他のコードとの干渉を定義するためです。したがって、おそらく干渉するコードを分離しておくこと。

とにかく、ほとんどの機能は、例えばint型関数2(int型)ですので、私はちょうどこのような別のファイルに実装します。

int XXfunction1(int val) { return function(val) } 

しかし、私はまた、このような可変の引数を持つ関数を持っています。

extern int function2(int, ...) 

だから私はそれを呼び出す自分の関数を書くことができますか?

これは動作していないよう:

int XXFunction2(int val, ...) { 
    return function2(val, ...); 
} 

私は関数を書くにはどうすればよいですか?

答えて

4

バリデーションリストを取ることができるメソッドの "v"バージョンが必要です。

int function2v(int val, va_list arg_list) 
{ 
    //Work directly with the va_list 
} 

//And to call it 
int XXFunction2(int val, ...) { 
    int returnVal; 
    va_list list; 
    va_start(list, val); 

    returnVal = function2v(val, list); 

    va_end(list); 

    return returnVal; 
} 
-1

Function2はXXFunction2より前に宣言しなければなりません。あなたができることは、.hファイルの関数シグネチャを使用する前にインポートすることです。それ以外の場合は、XXFunction2をコンパイルしているときにCがFunction2を見つけられず、コンパイルエラーが発生します。

+2

この回答は手元の問題とは関係ありません。 –

+0

正確なところまでは正確ですが、質問のポイントがありません。 –

関連する問題