Giả sử tôi có hàm lấy đối số variadic (...
) hoặc va_list
được truyền từ một hàm khác như vậy. Logic chính là chính hàm này (chúng ta hãy gọi nó là f1
), nhưng tôi muốn chuyển nó va_list
sang một hàm khác (hãy gọi nó là f2
) sẽ xác định loại đối số tiếp theo, lấy nó bằng cách sử dụng va_arg
và chuyển đổi đúng cách lưu trữ nó để người gọi sử dụng.Vượt qua va_list hoặc trỏ đến va_list?
Có đủ để chuyển va_list đến f2
hay là cần thiết để chuyển con trỏ đến va_list. Trừ khi va_list được yêu cầu là loại mảng hoặc lưu trữ dữ liệu vị trí của nó tại vị trí các đối tượng va_list
trỏ tới (chứ không phải trong chính đối tượng), tôi không thể biết cách truyền giá trị theo giá trị có thể cho phép hàm gọi (f1
) để 'xem' các thay đổi được gọi là chức năng được thực hiện bởi va_arg
.
Có ai có thể làm sáng tỏ điều này không? Tôi quan tâm đến những gì tiêu chuẩn yêu cầu, không phải những gì một số thực hiện cụ thể cho phép.
Đồng ý với chỉnh sửa cuối cùng của bạn - một con trỏ là con đường để đi (vì OP muốn các thay đổi đối với 'va_list' để chắc chắn có thể nhìn thấy trong chức năng gọi). – caf
@caf: Tôi không nghĩ bạn nên sửa đổi tham chiếu của tôi thành 'vfprintf()' vì có vẻ như những người khác đang phạm sai lầm giống như tôi đã làm và gợi ý người hỏi xem xét các nguyên mẫu hiện có (không thực sự trả lời câu hỏi của mình). – JeremyP
Tôi muốn nói để lại một bình luận và/hoặc bỏ phiếu 'em xuống sau đó - nó có vẻ tốt hơn để có câu trả lời đúng không obfuscated với giả định trước đó, không chính xác ... – caf