Interoperability Concepts
C Binding Name
Stable External Symbol
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.
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
version ← 2
7version = 28write(symbol, '(A,I0)') 'run_step_v', versionvalues this step2versionsymbol ← run_step_v2
7version = 28write(symbol, '(A,I0)') 'run_step_v', version9print '(A)', trim(symbol)values this steprun_step_v2symbol2versionprint '(A)', trim(symbol)
8 write(symbol, '(A,I0)') 'run_step_v', version9 print '(A)', trim(symbol)10end program c_binding_name_demooutputrun_step_v2values this steprun_step_v2symbol
version ← 1
7version = 18write(symbol, '(A,I0)') 'run_step_v', versionvalues this step1versionsymbol ← run_step_v1
7version = 18write(symbol, '(A,I0)') 'run_step_v', version9print '(A)', trim(symbol)values this steprun_step_v1symbol1versionprint '(A)', trim(symbol)
8 write(symbol, '(A,I0)') 'run_step_v', version9 print '(A)', trim(symbol)10end program c_binding_name_demooutputrun_step_v1values this steprun_step_v1symbol
version ← 3
7version = 38write(symbol, '(A,I0)') 'run_step_v', versionvalues this step3versionsymbol ← run_step_v3
7version = 38write(symbol, '(A,I0)') 'run_step_v', version9print '(A)', trim(symbol)values this steprun_step_v3symbol3versionprint '(A)', trim(symbol)
8 write(symbol, '(A,I0)') 'run_step_v', version9 print '(A)', trim(symbol)10end program c_binding_name_demooutputrun_step_v3values 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.