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
.