Преобразование реальной переменной fortran-iso-c-binding в реальную

С помощью fortran-iso-c-binding я могу взаимодействовать с функциями C и получать переменные таких типов, как

real(c_float)
integer(c_int)

Но в остальной части программы я хотел бы использовать базовые типы (просто потому, что я не хочу заменять много реальных переменных на real(c_float) переменных только из-за одной функции интерфейса)

Существует ли безопасный, независимый от платформы/компилятора и надежный способ преобразования типов fortran-iso-c-binding обратно в типы fortran (примитивные)? эквивалент REAL()


person Peter    schedule 22.01.2014    source источник


Ответы (1)


НАСТОЯЩЕЕ внутреннее – это то, чего вы хотите. Или, что то же самое, простое присваивание.

REAL(C_FLOAT) :: r_c
REAL :: r_default
r_default = r_c

Если преобразуемое значение выходит за пределы допустимого диапазона для целевого типа, ваша программа не соответствует требованиям.

person IanH    schedule 22.01.2014
comment
НАСТОЯЩАЯ встроенная документация — раздел Аргументы указывает, что аргумент должен быть INTEGER, REAL или СЛОЖНЫЙ. - person Peter; 22.01.2014
comment
Объект, объявленный REAL(C_FLOAT) :: x, является объектом типа REAL. Вы можете использовать встроенную функцию REAL для преобразования между различными типами вещественных чисел. Присваивание делает то же самое по определению. - person IanH; 22.01.2014