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


Я читал авио.h (часть ffmpeg) и есть определение(?) вот так:

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

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

1 20

1 ответ:

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