извинения заранее, если я использую плохую терминологию.
когда я компилирую приложение C++ под gdb и использую printf (), это дает мне, потрясающие предупреждения, касающиеся непротиворечивости строки формата и аргументов, передали в.
например, этот код:
printf("%s %s", "foo");
результаты в предупреждении компилятора "слишком мало аргументов в пользу формата", который суперполезен. это также даст предупреждения о типе строки формата по сравнению с типом аргумента. это, должно быть, осмотрело строку формата и сравнило это с типами переданного аргумента. - этот вид самоанализа времени компиляции что-то, что может быть добавлено к обычному исходному коду или является им что-то, что должно быть скомпилировано в сам gcc?
fwiw это находится под 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 .