нет возможности несовпадения строки формата с аргументами
Если вам нужна строка формата, без специальной поддержки компилятора вы в принципе не сможете этого сделать. Тем не менее, вы можете иметь безопасную библиотеку форматирования в C, если вы откажетесь от строки форматирования. Я ничего не знаю, но я не удивлюсь, если они существуют.
Можно иметь такой интерфейс:
typedef ... FORMATTER;
FORMATTER create_formatter();
int fmt_add_string_default(FORMATTER f, const char *s);
int fmt_add_string(FORMATTER f, const char *s, int maxlength, const char fill, enum fmt_alignment align);
...
int fmt_add_decimal_default(FORMATTER f, int d);
... // you get the idea
int fmt_write_result(FORMATTER f, char *out, int out_length);
void destroy_formatter(FORMATTER f);
Нечто подобное было бы совершенно безопасно, если бы оно было многословным.