Different languages can have very different ways of dealing with variables that are not local to a particular routine, but have a more global scope. FORTRAN has common blocks for global data that are accessed by particular routines. The data values in a common block can be accessed by different names in different routines, although this is generally considered bad practice. C functions can access global data by using variables that are not declared in a particular routine, but have a scope of all the routines contained in the source file in which the global variables are defined. If the same variable is needed across several source files, then it can be declared as extern.
Although these two mechanisms are very different in principle, in practice, computer manufacturers tend to implement them in a way such that it is possible to share global data between routines that have been written in different languages. The details of how this is done are given in the appendix about specific machines. However, there is an indirect way of accessing FORTRAN common blocks from C that is also worth considering. The FORTRAN routine that calls the C function can pass as an argument, the first element of the common block. As long as FORTRAN passes this argument by reference, then the C function can use this address to access all of the other elements of the common block. The elements of the common block must be stored contiguously. Whether this method, or the use of the F77 macros, achieve a greater degree of portability in this respect is not known at present. On account of these potential portability problems, you should avoid passing global data between routines written in different languages, whenever possible.
CNF and F77 Mixed Language Programming -- FORTRAN and C