In C, if you have a file containing just int something;, you’ve created a variable and allocated space in the object file for it (at least I think you have). If instead you write extern int something;, you don’t create space in the object file, the symbol has to be resolved at link time (some other object file needs to provide the variable).
Suppose you’re writing a mixed Fortran/C program and you have a global variable on the C side that you want to access from Fortran. The following works, I’ve tested it, but I don’t know why it works.
Fortran file:
module stuffmod
use iso_c_binding
implicit none
integer(c_int), bind(c, name="something") :: something_f
end module
program test
use stuffmod
implicit none
print *, something_f
end program
C file:
int something = 10;
How does the compiler know that something_f is, effectively, extern? What would I do instead if I wanted to create a global variable in the fortran object file, and access it from C using a declaration like extern int something?
Thanks