in
> printf("%f",0);
Вы просите напечатать double , но вы даете int , это противоречиво
Вы не вслучай, когда сгенерированный код делает double из int , потому что printf не int printf(const char *, double);
, а int printf ( const char * format, ... );
, и компилятор не смотрит на форматсделать необходимые преобразования (но во многих случаях компилятор предупреждает вас)
Когда печатает , доступ ко второму аргументу позволяет получить double с использованием 64bи, вероятно, ваш int использует только 32b, поведение не определено.
(редактируйте, спасибо @chqrlie)
Я получаю предыдущее значение с плавающей запятойкогда я печатаю новое значение
В вашем случае может быть printf извлекает двойное значение из регистров MMX в отличие от значения int , которое было переданочерез стек или обычные регистры ... которые могут объяснить, почему одно и то же значение печатается дважды.Но, конечно, как всегда с неопределенным поведением, в любое время может произойти все что угодно