Nếu tôi có một va_list tôi biết làm thế nào để trích xuất tất cả các yếu tố của nó:Làm thế nào để điền vào một va_list
void printInts(int n,...)
{
va_list va;
va_start(va, n);
for(unsigned int i=0; i<n; i++)
{
int arg=va_arg(va, int);
printf("%d",arg);
}
va_end(va);
}
Vì vậy, khi tôi gọi printInts (3,1,2,3) các va_list được điền tất cả những thông số.
Nhưng làm cách nào để tự điền một va_list mà không dùng va_start? Ý tôi là tôi muốn một cái gì đó như:
va_list va;
push_arg(va, int, 5); // And so on until I fill all parameters
...
Tôi cần điều này vì có hàm chấp nhận va_list làm đối số và tôi không biết cách điền vào va_list của tất cả các tham số của nó.
Loại 'va_list' không thực sự là một danh sách như vậy, nó thực sự thường là một loại con trỏ vào ngăn xếp và' va_arg' sửa đổi con trỏ này để trỏ đến đối số tiếp theo trên ngăn xếp. –
@JoachimPileborg: Đôi khi nó không phải là một con trỏ vào ngăn xếp. –
Tại sao bạn không muốn sử dụng 'va_start'? – szx