By default, the Fortran compiler converts function and subprogram names to upper case. The C compiler never performs case conversion. A C procedure called from a Fortran program must, therefore, be named using the appropriate case. For example, consider the following calls:
|
CALL PROCNAME() |
The C procedure must be named PROCNAME. |
|
X=FNNAME() |
The C procedure must be named FNNAME |
In the first call, any value returned by PROCNAME is ignored. In the second call to a function, FNNAME must return a value.
By default, Fortran subprograms pass arguments by reference; that is, they pass a pointer to each actual argument rather than the value of the argument. C programs, however, pass arguments by value. Consider the following:
When a Fortran program calls a C function, the C function's formal arguments must be declared as pointers to the appropriate data type.
When a C program calls a Fortran subprogram, each actual argument must be specified explicitly as a pointer.
For Windows IA-32 only, you can alter the default calling convention. You can use either the -iface stdcall option (stdcall) or the -iface cvf option (Compaq* and Powerstation* compatibility) to change the default calling convention, or the VALUE or C attributes in an explicit interface using Microsoft attributes. For more information, see the Intel® Fortran Language Reference.
The -iface stdcall and -iface cvf options are intended to facilitate calling routines written in C. By default, -iface cvf passes arguments by reference and -iface stdcall by value. Both options cause the routine compiled and routines that it calls to have a @<n> appended to the external symbol name, where n is the number of bytes of all parameters. Both options assume that any routine called from a Fortran routine compiled this way will do its own stack cleanup, "callee pops." -iface cvf also changes the way that CHARACTER variables are passed. With -iface cvf, CHARACTER variables are passed as address/length pairs (that is, -iface:mixed_str_len_arg).