Next: , Previous: Procedures, Up: Debugging and Interfacing


13.3 Functions (FUNCTION and RETURN)

g77 handles in a special way functions that return the following types:

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.