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