Что делат такая запись при использовании gcc __attribute__ ((format (n, f, e)))?

Что делат такая запись при использовании gcc

 __attribute__ ((format (n, f, e)))

Ответы (1 шт):

Автор решения: Alex

Этот атрибут заставляет компилятор проверять, что предоставленные аргументы имеют правильный формат для определяемой функции использующей функции форматирования, где есть параметр со строкой форматирования и есть параметр принимающий аргументы со значениями форматирующими эту строку.

Например, у Вас есть функция:

#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 здесь.

→ Ссылка