Для обеспечения совместимости с программами на Си в редакции 2003 года стандарта Fortran введен модуль iso_c_binding
, который позволяет писать такие вещи:
USE iso_c_binding, ONLY: c_int, c_float
INTEGER(KIND=c_int) :: x
REAL(KIND=c_float) :: y
, который гарантированно отображается точно на int x
и float y
на С-стороне.Теперь для целых чисел это крайне важно, поскольку тип INTEGER
по умолчанию может (в зависимости от компилятора и платформы) очень хорошо переноситься на 64-битный целочисленный тип, даже если int
является 32-битным.
Однако,для типов с плавающей запятой следующие отображения кажутся почти неизбежными:
REAL*4 (or) REAL -> float
REAL*8 (or) DOUBLE PRECISION -> double
Так вот вопрос: есть ли практическая платформа или компилятор, где это не удовлетворено, например, где sizeof(REAL*4) != sizeof(float)