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