Вызов printf
имеет неопределенное поведение, поскольку спецификатор преобразования %f
не соответствует типу выражения 10 / 2
, равному int
. Поскольку два операнда выражения 10 / 2
имеют тип int
, результат имеет тип int
, поскольку он является общим типом обоих операндов.
Используйте вместо этого как минимум 10.0 / 2
. В этом случае выражение имеет тип double
.
Или выведите целочисленное выражение 10 /2
, используя спецификатор преобразования %d
или %i
, как
printf( "value: %d", 10 / 2 );
из стандарта C (7.21.6.1 функция fprintf)
9 Если спецификация преобразования недопустима, поведение
undefined.275) Если какой-либо аргумент не является правильным типом для
соответствующая спецификация преобразования, поведение не определено .