Next: Names, Previous: Procedures, Up: Debugging and Interfacing
g77 handles in a special way functions that return the following types:
CHARACTER
COMPLEX
REAL(KIND=1)
For CHARACTER, g77 implements a subroutine (a C function
returning void)
with two arguments prepended: `__g77_result', which the caller passes
as a pointer to a char array expected to hold the return value,
and `__g77_length', which the caller passes as an ftnlen value
specifying the length of the return value as declared in the calling
program.
For CHARACTER*(*), the called function uses `__g77_length'
to determine the size of the array that `__g77_result' points to;
otherwise, it ignores that argument.
For COMPLEX, when -ff2c is in
force, g77 implements
a subroutine with one argument prepended: `__g77_result', which the
caller passes as a pointer to a variable of the type of the function.
The called function writes the return value into this variable instead
of returning it as a function value.
When -fno-f2c is in force,
g77 implements a COMPLEX function as gcc's
`__complex__ float' or `__complex__ double' function
(or an emulation thereof, when -femulate-complex is in effect),
returning the result of the function in the same way as gcc would.
For REAL(KIND=1), when -ff2c is in force, g77 implements
a function that actually returns REAL(KIND=2) (typically
C's double type).
When -fno-f2c is in force, REAL(KIND=1)
functions return float.