iso_c_binding lets Fortran code describe names and types intended for C interop. A binding name is the stable external symbol.

Program

Play the program to choose the API version and build the exported symbol name.

version
c_binding_name.f90
Replay: real traced execution (multi-file project)
program c_binding_name_demo
    use iso_c_binding, only: c_int
    implicit none
    integer(c_int) :: version
    character(len=24) :: symbol

    version = 2
    write(symbol, '(A,I0)') 'run_step_v', version
    print '(A)', trim(symbol)
end program c_binding_name_demo
program c_binding_name_demo
    use iso_c_binding, only: c_int
    implicit none
    integer(c_int) :: version
    character(len=24) :: symbol

    version = 1
    write(symbol, '(A,I0)') 'run_step_v', version
    print '(A)', trim(symbol)
end program c_binding_name_demo
program c_binding_name_demo
    use iso_c_binding, only: c_int
    implicit none
    integer(c_int) :: version
    character(len=24) :: symbol

    version = 3
    write(symbol, '(A,I0)') 'run_step_v', version
    print '(A)', trim(symbol)
end program c_binding_name_demo
  1. version ← 2

    7version = 28write(symbol, '(A,I0)') 'run_step_v', version
    values this step2version
  2. symbol ← run_step_v2

    7version = 28write(symbol, '(A,I0)') 'run_step_v', version9print '(A)', trim(symbol)
    values this steprun_step_v2symbol2version
  3. print '(A)', trim(symbol)

    8    write(symbol, '(A,I0)') 'run_step_v', version9    print '(A)', trim(symbol)10end program c_binding_name_demo
    outputrun_step_v2
    values this steprun_step_v2symbol
  1. version ← 1

    7version = 18write(symbol, '(A,I0)') 'run_step_v', version
    values this step1version
  2. symbol ← run_step_v1

    7version = 18write(symbol, '(A,I0)') 'run_step_v', version9print '(A)', trim(symbol)
    values this steprun_step_v1symbol1version
  3. print '(A)', trim(symbol)

    8    write(symbol, '(A,I0)') 'run_step_v', version9    print '(A)', trim(symbol)10end program c_binding_name_demo
    outputrun_step_v1
    values this steprun_step_v1symbol
  1. version ← 3

    7version = 38write(symbol, '(A,I0)') 'run_step_v', version
    values this step3version
  2. symbol ← run_step_v3

    7version = 38write(symbol, '(A,I0)') 'run_step_v', version9print '(A)', trim(symbol)
    values this steprun_step_v3symbol3version
  3. print '(A)', trim(symbol)

    8    write(symbol, '(A,I0)') 'run_step_v', version9    print '(A)', trim(symbol)10end program c_binding_name_demo
    outputrun_step_v3
    values this steprun_step_v3symbol
iso_c_binding `iso_c_binding` provides interoperable kind names such as `c_int`.
external symbol A stable binding name is the text another language would look up.
write to character `write(symbol, ...)` formats text into a fixed-length character variable.