Что делат такая запись при использовании gcc __attribute__ ((format (n, f, e)))?
Что делат такая запись при использовании gcc
__attribute__ ((format (n, f, e)))
Ответы (1 шт):
Этот атрибут заставляет компилятор проверять, что предоставленные аргументы имеют правильный формат для определяемой функции использующей функции форматирования, где есть параметр со строкой форматирования и есть параметр принимающий аргументы со значениями форматирующими эту строку.
Например, у Вас есть функция:
#include <stdio.h>
#include <stdarg.h>
__attribute__ ((format (printf, 2, 5)))
void print_object_info(void* obj, const char* format, int flags, int e, ...)
{
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
Здесь компилятор удостоверится, что второй параметр определённой функции const char* format является форматируемой строкой и передаётся как аргумент форматируемой строки в функцию форматирования, а аргументы начиная с пятого (...) используются как аргументы подставляемые в форматирование. В противном случае выдаст ошибку:
source.c:11:1: error: args to be formatted is not ‘...’
{
Подробнее можно прочитать в документации GCC здесь.