mümkün Yinelenen çalışmaz:
Are there gotchas using varargs with reference parametersvarargs geçiş referans-ile-parametresi
Merhaba, varargs ile ilgili bir sorun vardır. Koduma bakın (Microsoft Visual Studio 2005 veya 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;
}
işlev T1, T2 iyi çalışır. Ancak T3 fonksiyonunun bir problemi var. İşaretçi p "Test3" işaret etmez. Va_start'ı referans ile kullanamaz mıyım? Şimdiden teşekkürler.
Amaçlanan davranışı g ++ olarak gösterir, ancak bu gerçekten çok fazla bir şey ifade etmez, değil mi? –