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