2011-08-12 156 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文件上的函數簽名並在使用之前導入它,否則C在編譯XXFunction2時找不到Function2,導致編譯錯誤。

+2

此答案與手邊的問題無關。 –

+0

儘可能準確,但錯過了問題的要點。 –

相關問題