Подтвердить что ты не робот

Определение функции (?) Без {}

Я читал avio.h (часть ffmpeg), и есть определение (?) следующим образом:

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

Я не понимаю. Может ли кто-нибудь объяснить мне, что это делает? Спасибо.

4b9b3361

Ответ 1

av_printf_format - это макрос, который может необязательно добавить атрибут GCC в объявление функции. Он определил в 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, что помогает диагностировать некоторые ошибки.