f после числа означает, что он должен быть плавающим вместо двойного.В C 3.14
- это двойное число, тогда как 3.14f
- это число с плавающей точкой.Аналогично, вы можете добавить u
и l
, чтобы сделать числа без знака и / или длинной; например, , 42U
- это целое без знака, 42L
- длинное, 42UL
- длинное без знака и 42ULL
- длинное без знака.
%f
- это спецификатор формата, который сообщает функции тип переменной.C не имеет интроспекции нативного типа, и printf
не волшебство.Подпись выглядит так:
int printf(const char *format, ...);
Она не имеет представления о том, что вы передаете, если вы не укажете ее в строке формата.Следует также иметь в виду, что нет никакой безопасности типов для функций с переменными числами;Вы можете передать все, что вы хотите.Например, printf("%s", 1729);
вполне приемлемо.Некоторые компиляторы способны удостовериться, что строки формата соответствуют тому, что вы на самом деле передаете им, но это расширение, а не часть самого языка C.