2013-04-30 91 views
20

我讀avio.h(的ffmpeg的一部分),而且定義是這樣的(?)(?):功能定義,而{}

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

我不明白。有人能解釋我做了什麼嗎?謝謝。

回答

24

av_printf_format是一個宏,它可以選擇性地將GCC屬性添加到函數聲明中。它的定義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 

因此,這實際上是一個函數聲明,如果GCC編譯可以具有特定屬性。

format屬性告訴GCC該函數的參數如printf,這有助於診斷一些錯誤。

+0

感謝您的解釋! – vericule 2013-04-30 10:53:11