2014-11-07 39 views
0

我在這裏看到了有關如何將可變參數從一個函數傳遞到另一個函數的問題的答案,這些函數聲明使用va_list傳遞給第二個函數。太好了,我想這一點,的va_start不喜歡va_list的傳遞的傳遞......如果你通過va_list將可變參數的參數傳遞給另一個函數,你怎麼稱呼va_start(沒有錯誤)

void foo(const char *str, va_list args) { 
    va_start(args, str); 
    //do something 
    va_end(args); 
} 

void foo(const char *str, ...) { 
    va_list args; 
    foo(str, args); 
} 

從我得到這個錯誤G ++:

error: ‘va_start’ used in function with fixed args

回答

1

此代碼會導致如您在使用foo未初始化args未定義行爲。正確的方法是:

void foo(const char *str, va_list args) { 
    //do something 
} 

void foo(const char *str, ...) { 
    va_list args; 
    va_start(args, str); 
    foo(str, args); 
    va_end(args); 
} 
3

你需要調用va_start在你的可變參數函數。同爲va_end

void foo (const char * str, va_list args) 
{ 
    /* ... */ 
} 

void foo (const char * str, ...) 
{ 
    va_list args; 

    va_start(args, str); 
    foo(str, args); 
    va_end(args); 
} 
相關問題