可能重複:
Are there gotchas using varargs with reference parameters可變參數(參數va_list的va_start)不與通按引用參數工作
嗨,我有可變參數的問題。 看看我的代碼(Microsoft Visual Studio 2005或2008)。
#include <stdarg.h>
struct Test { int a; };
void T1(int n, ...) {
va_list args;
va_start(args, n);
char* p = va_arg(args, char*);
va_end(args);
}
void T2(Test n, ...) {
va_list args;
va_start(args, n);
char* p = va_arg(args, char*);
va_end(args);
}
void T3(const Test& n, ...) {
va_list args;
va_start(args, n);
char* p = va_arg(args, char*); // p corrupt!!
va_end(args);
}
int _tmain(int argc, _TCHAR* argv[]) {
const Test t;
T1(1, "Test1");
T2(t, "Test2");
T3(t, "Test3");
return 0;
}
函數T1,T2工作正常。但T3功能有問題。指針p不指向「Test3」。我不能使用帶引用傳遞的va_start嗎? 在此先感謝。
它表現出g ++中的預期行爲,但這並不意味着太多,是嗎? – 2010-07-06 07:57:13