Copyright (C) 2000-2012 |
GNU Info (g77-295.info)FunctionsFunctions (FUNCTION and RETURN) =============================== `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'. |