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

Смежные вопросы