Чтение вещественной * 4 переменной со значением 0 с вещественным * 8 приводит к большому числу, иногда без предупреждения.
Я не очень хорош в Фортране.Я просто запускал код на Фортране, полученный от кого-то другого, и он сделал ошибку сегментации.Во время отладки я обнаружил, что одна из подпрограмм считывает переменную со значением 0, определенным для real * 8, поскольку real * 4 приводит к большому значению.
Я попытался воспроизвести его с помощью простого кода, ноКомпилятор показал предупреждение о несоответствии аргумента.Мне пришлось вложить коды для воспроизведения подавленного предупреждения в простом коде, но я не уверен, каково точное условие для подавленного предупреждения.
На самом деле, по некоторым причинам, я подозреваю, что это может быть проблемамой компилятор, так как код (не пример кода, оригинальный код) нормально работал на ПК человека, который дал мне код.
file hello.f
:
implicit none
call sdo()
END
файл test.f
:
subroutine sdo()
implicit none
real*4 dsecs
dsecs=0
write(0,*) dsecs
call sd(dsecs)
return
end
файл test2.f
:
subroutine sd(dsecs)
implicit none
real*8 dsecs
write(0,*) dsecs
return
end
компиляция ивыполнение:
$ gfortran -o hello hello.f test.f test2.f
$ ./hello
Ожидаемый результат:
0. 00000000
0. 0000000000000000
Фактические результаты:
0. 00000000
-5.2153889789423361E+223