Я заметил, что большое количество компиляторов C выдает предупреждения, когда спецификаторы преобразования в строке формата функций printf/sprintf не соответствуют типу или счету соответствующих аргументов.Предупреждения о компиляторе printf/sprintf - концептуальный разрыв?
Это кажется мне концептуальным перерывом, поскольку C не имеет встроенных функций в соответствии со спецификацией языка.
Весь компилятор должен знать о printf/sprintf, это их прототипы, а не их семантика. Я знаю, что printf/sprintf являются стандартными функциями C, но все же они находятся в отдельной библиотеке libc, и вы должны включить stdio.h для импорта своих прототипов.
Многие аналитики вместо этого анализируют строку формата, которая также может быть предоставлена во время выполнения.
Означает ли это вышеизложенное?
Концептуальный разрыв от чего? –
Одно слово: QOI (ну: 3 на самом деле) – pmg
@Martin: Насколько я знаю, C не имеет встроенных функций. Как тогда компилятор понимает семантику функций printf/sprintf, когда они определены во внешней библиотеке? –