다음 프로그램은 64 비트 Linux 컴퓨터에서 작동하지만 32 비트 Linux 컴퓨터에서 충돌합니다.조각으로 va_list 처리
#include <cstdarg>
#include <iostream>
void proc_int(std::va_list va)
{
std::cout << va_arg(va, int);
}
void proc_str(std::va_list va)
{
std::cout << va_arg(va, const char*);
}
void outputv(std::va_list va)
{
proc_int(va);
std::cout << " ";
proc_str(va);
std::cout << "\n";
}
void output(int dummy, ...)
{
va_list va;
va_start(va, dummy);
outputv(va);
va_end(va);
}
int main()
{
output(0, 42, "hello");
}
나는 va_list
32 비트에 char*
하지만 struct __va_list_tag[1]
64 비트에 있기 때문에 이것은 믿습니다. 이 프로그램을 휴대 가능하게 만들려면 어떤 변경을해야합니까? outputv
의 서명을 변경하지 않는 것이 좋습니다. cppreference에서
포인터로 전달 : http://ideone.com/bhKalu –
@ n.m. 64 비트에서 오류 : '__va_list_tag **'를 __va_list_tag (*) [1]로 변환 할 수 없습니다. – aschepler