void fun2(char *format, ...){
va_list arg_list;
va_start(arg_list, format);
vprintf(format, arg_list);
va_end(arg_list);
}
void fun1(char *format, ...){
fun2(format);
}
int main(){
fun1("test: %d", 100);
}
输出:
测试:100
https://onlinegdb.com/OfdDeSJg_
上述示例是否有错误或不推荐的地方?
我猜当进行fun2(format);
调用时,只传递指向第一个参数(format
)的指针,对吗?
当fun2
中的vprintf
访问整数vprintf
时,这个整数在哪里?在为fun1
保留的堆栈中,在为fun2
保留的堆栈中,在为vprintf
保留的堆栈中,还是在其他地方?
如果像我想象的那样,只有指向第一个参数的指针被传递到fun2
,这是否意味着当fun2
调用的函数和宏访问整数fun2
时,它们正在访问为fun1
保留的堆栈?