没有{}的函数定义(?)

时间:2013-04-30 09:09:05

标签: c ffmpeg

我正在阅读avio.h(ffmpeg的一部分),并且有这样的定义(?):

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

我不明白。有人能解释一下这是做什么的吗?感谢。

1 个答案:

答案 0 :(得分: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之类的参数,这有助于诊断一些错误。