Я читал avio.h (часть FFmpeg) и есть определение, как это (?) (?):Определение функции без {}
int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
.
Я не понимаю. Может ли кто-нибудь объяснить мне, что это делает? Благодарю.
Я читал avio.h (часть FFmpeg) и есть определение, как это (?) (?):Определение функции без {}
int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
.
Я не понимаю. Может ли кто-нибудь объяснить мне, что это делает? Благодарю.
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
, что помогает диагностировать некоторые ошибки.
Спасибо за разъяснение! – vericule