Как получить предупреждения о неправильном форматировании строк (С++)
извиняется заранее, если я использую плохую терминологию.
когда я компилирую С++-приложение под gdb и использую printf(), он дает мне потрясающие предупреждения, касающиеся согласованности строки формата и переданных аргументов.
например, этот код:
printf("%s %s", "foo");
приводит к предупреждению компилятора "слишком мало аргументов для формата", что очень полезно.
он также выдаст предупреждения о типе типа строки против типа аргумента.
он должен был проверить строку формата и сравнить ее с указанными типами аргументов.
- это такая интроспекция времени компиляции, которую можно добавить в обычный исходный код, или это что-то, что нужно скомпилировать в сам gcc?
fwiw это под gcc 4.2.1 на os x.
Ответы
Ответ 1
Вы можете делать такие вещи для своих собственных функций, подобных 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 manual.