Uzix | микроблог

Статический анализ вызовов printf-like функций

При разработке для встраиваемых систем зачастую приходится писать свои реализации printf и подобных функций. Однако для самописных функций не работает опция “-Wformat”: проверка вызовов на корректность аргументов (сверка количества и типов аргументов со строкой форматирования). Для решения этой проблемы в GCC существует специальный атрибут функции “format”. Пример применения:

int fmt( void (*put)(char,void**), void *putarg, const char *fmt, ... )
    __attribute__ ((format (__printf__, 3, 4)));

Первым аргументом атрибута идёт тип проверки (printf, scanf, strftime, strfmon), второй - номер аргумента с форматом (нумерация с 1), третий - номер аргумента с которого начинается список аргументов (…).

Комментарии