2013-04-30 36 views
20

Tôi đã đọc avio.h (một phần của ffmpeg) và có định nghĩa như thế này (?) (?):định nghĩa chức năng mà không cần {}

int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);.

Tôi không hiểu. Ai đó có thể giải thích cho tôi điều này làm gì? Cảm ơn.

Trả lời

24

av_printf_format là macro, có thể tùy chọn thêm thuộc tính GCC vào khai báo hàm. Nó được xác định in attributes.h:

#ifdef __GNUC__ 
# define av_builtin_constant_p __builtin_constant_p 
# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) 
#else 
# define av_builtin_constant_p(x) 0 
# define av_printf_format(fmtpos, attrpos) 
#endif 

Vì vậy, đây thực sự là khai báo hàm, có thể có thuộc tính cụ thể nếu được biên soạn trên GCC.

Thuộc tính format cho GCC biết rằng hàm sẽ lấy đối số của nó như printf, giúp chẩn đoán một số lỗi.

+0

Cảm ơn bạn đã giải thích! – vericule

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