2009-10-20 39 views

Trả lời

4

Sử dụng typedef cho loại con trỏ hàm.

3

Kiểu chữ thường làm việc với các con trỏ hàm dễ dàng hơn, nhưng không cần thiết.

#include <stdarg.h> 
void foo(int count, ...) { 
    va_list ap; 
    int i; 
    va_start(ap, count); 
    for (i = 0; i < count; i++) { 
     void (*bar)() = va_arg(ap, void (*)()); 
     (*bar)(); 
    } 
    va_end(ap); 
} 
+2

Nói chung, để tạo ra một loại tên (để sử dụng với 'va_arg',' sizeof', một thợ đúc chư hoặc tương tự), hãy viết một tuyên bố của một biến với kiểu đó, sau đó loại bỏ các tên biến. – caf

+2

Trên thực tế, đây là (trớ trêu thay) họ chỉ có thời gian mà typedefs được yêu cầu. Nói về tham số * type * cho va_arg trong phần 7.15.1.1 của tiêu chuẩn C: "Kiểu tham số phải là tên kiểu được chỉ định sao cho kiểu con trỏ tới đối tượng có kiểu được chỉ định có thể thu được đơn giản bằng cách postfixing a * để nhập. " Điều này có nghĩa là nhiều loại không tầm thường không được đảm bảo hoạt động, kể cả ví dụ của bạn, không có typedef. –

+0

Không biên dịch trên bộ công cụ của tôi. – KeatsPeeks

Các vấn đề liên quan