Я создаю функцию на C для преобразования значения индекса в строку, которая представляет собой подробное описание «поля», представленного индексом.
Итак, у меня есть хороший массив со всеми подробными описаниями, проиндексированными по индексу.
Чтобы сбросить его в буфер, я использую такой код
#define BUFFER_SIZE 40
void format_verbose(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
snprintf(mY_buffer, BUFFER_SIZE, "%s", MY_ARRAY[my_index].description);
}
Проблема возникает в некоторых случаях, когда мне нужно вставить некоторые другие строки в строку при ее форматировании. Итак, я хочу что-то вроде этого (где описание в этом случае содержит %s
).
void format_verbose_with_data(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
// ...
snprintf(mY_buffer, BUFFER_SIZE, MY_ARRAY[my_index].description,
some_string);
}
Наш make-файл настроен так, чтобы это (опасное) использование snprintf() предупреждало, а предупреждения обрабатывались как ошибки. Значит, не скомпилируется. Я хотел бы отключить предупреждение только для этой строки, где, хотя это несколько опасно, я буду контролировать строку и могу проверить, работает ли она с каждым значением, с которым она вызывается.
В качестве альтернативы я был бы рад сделать это каким-то другим способом, но я действительно не хочу использовать это решение.
void format_verbose_with_data(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
// ...
snprintf(mY_buffer, BUFFER_SIZE, "%s%s%s"
MY_ARRAY[my_index].description1, some_string,
MY_ARRAY[my_index].description2);
}
Потому что это делает мой массив описания уродливым, особенно для тех, где мне не нужно добавлять дополнительные значения.