Как получить предупреждения о неправильном форматировании строки (C ++) - PullRequest
14 голосов
/ 08 февраля 2010

заранее извиняюсь, если я использую плохую терминологию.

когда я компилирую приложение C ++ в gdb и использую printf (), он дает мне удивительные предупреждения, касающиеся согласованности строки формата и передаваемых аргументов.

например, этот код:

printf("%s %s", "foo");

приводит к предупреждению компилятора «слишком мало аргументов для формата», что очень полезно. он также выдаст предупреждения о типе строки формата и типе аргумента. он должен был проверить строку формата и сравнить ее с предоставленными типами аргументов. - Является ли этот вид самоанализа во время компиляции чем-то, что может быть добавлено к обычному исходному коду, или это то, что нужно скомпилировать в сам gcc?

Между прочим, это в gcc 4.2.1 на os x.

1 Ответ

9 голосов
/ 08 февраля 2010

Вы можете делать такие вещи для своих собственных функций, похожих на printf (а также для функций, похожих на scanf / strftime / strfmon):

#define PRINTF_FORMAT_CHECK(format_index, args_index) __attribute__ ((__format__(printf, format_index, args_index)))

void my_printf(const char *fmt, ...) PRINTF_FORMAT_CHECK(1, 2);

См. Руководство gcc для дальнейших деталей.

...