2013-04-30 90 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