传递va_list*会不会导致标准未定义问题?
whoho 2008-01-16 08:53:26 C99上写明,如果传递va_list给函数,如果函数内部对va_list调用了va_arg(),
则函数调用返回以后,不应再对其调用va_arg()
如果传递的是va_list*,则函数返回后,是否可以继续对其调用va_arg()?
给定:
void fun(va_list arg)
{
va_arg(arg, int);
}
void gun(va_list* arg)
{
va_arg(*arg, int);
}
则:
(1)标准写明的情况:
//假设arg已经用va_start初始化过
for (i=0; i<4; i++)
fun(arg);
这段调用是不允许的
(2)这是我有疑问的:
//假设arg已经用va_start初始化过
for (i=0; i<4; i++)
gun(arg);
这样子是否可以?
如果是要在一个编译器上做个实验,那对我意义不大,现在我需要在几个平台上做可移植的代码。
所以请尽量以标准的角度来给我解释一下,谢谢。