Я создаю функцию в 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);
}
Потому что это делает мой массив описаний уродливым, особенно для тех, где мне не нужно добавлять дополнительные значения.