Рассмотрим следующий код.
! test.f90
program test
use iso_fortran_env, only: INT64, REAL64
print *, real(0_INT64, REAL64)
print *, real(1000_INT64, REAL64)
print *, real(huge(0_INT64), REAL64)
end program test
При компиляции с gfortran
следующим образом:
$ gfortran -Wconversion -std=f2008 test.f90
Я получил следующее предупреждение:
test.f90:5:18:
5 | print *, real(huge(0_INT64), REAL64)
| 1
Warning: Change of value in conversion from ‘INTEGER(8)’ to ‘REAL(8)’ at (1) [-Wconversion]
Обратите внимание, что gfortran
доволен первыми двумя преобразованиями, но не последним.
Вопрос. Является ли показанное выше предупреждение ожидаемым поведением gfortran
? Я думал, что ни в одном из трех случаев не должно появляться никаких предупреждений, поскольку преобразование выполняется явным образом с помощью REAL( , INT64)
.
Вот информация о версии моего gfortran
:
$ gfortran --version
GNU Fortran (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Для справки: ifort
19.1.127 компилирует test.f90 без нареканий:
$ ifort -warn all -stand f08 test.f90
Большое спасибо за любые комментарии или критику.