Понимание основ использования BIND(C) в фортране

У меня есть очень маленький пример кода Fortran, который я хотел бы понять, пожалуйста.

  subroutine test_iso_c

  use ISO_C_BINDING

  implicit real(c_double) (a-h,o-z)    

  real :: var, expression

  interface
    real(c_double) function test (y) bind( c )
     use ISO_C_BINDING
       real(c_double), value :: y
     end
  end interface


  ! call 
  var = test(expression) ! - expression  is a real declared variable which is calculated using simple  arithmetic operation.   

  end 

Можете ли вы объяснить мне следующее (я предполагаю, что c_double означает двойную точность в области кода C?)

1 - Что делает implicit real(c_double) (a-h,o-z)?

2 - что делают value и bind(c) в интерфейсе функции

3 - Я видел этот код как часть более крупной процедуры, можете ли вы сказать, что обеспечивает/делает эта тестовая функция?


person A2LBK    schedule 11.02.2019    source источник
comment
Вы можете прочитать об этих деталях здесь. Пожалуйста, поймите эту страницу и подумайте, есть ли что-то еще, что вы хотите узнать. Как бы то ни было, это довольно широкий вопрос. В частности, мы не можем ответить на часть 3, так как не знаем деталей функции test. Поведение оператора implicit здесь не отличается от любого другого (до F2018) использования.   -  person francescalus    schedule 11.02.2019
comment
спасибо !, Что такое использование до F2018 по сравнению с implicit удовлетворением   -  person A2LBK    schedule 11.02.2019
comment
Этот оператор implicit делает любую переменную с начальной буквой a, b, c,..., h, o, p, q,..., z без явного объявления типа типом real(c_double). Этот другой ответ содержит некоторые подробности об этом.   -  person francescalus    schedule 11.02.2019