Как получить предупреждения о неправильном форматировании строк (C++)

StackOverflow https://stackoverflow.com/questions/2223968

Вопрос

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

когда я компилирую приложение 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 для получения более подробной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top