On Mon, 7 Jun 2010 11:12:47 -0600, Mark Hoemmen said:
On Mon, Jun 7, 2010 at 10:56, Martin Simmons martin@lispworks.com wrote:
> On Sat, 5 Jun 2010 16:12:58 +0200, Juan Jose Garcia-Ripoll said:
CHARACTERs in Fortran are just pointers of type char*, just like in C, and just like any other fortran array. There is no terminating null and the fortran functions get the length either from some argument or because they assume a given size (for instance in Lapack it is a one-character string what the function expects)
Are you sure about? I think the lengths are passed as implicit arguments at the end of the argumwnt list.
Not on any Fortran compilers I've seen, at least when dealing with LAPACK. Replacing CHARACTER*(*) with "char* const" when calling LAPACK routines that take CHARACTER*(*) arguments works perfectly fine with all the Fortran compilers I've encountered (e.g., gfortran, Intel Fortran compiler, IBM's xlf).
Maybe LAPACK is compiled with options that make this work (or nothing looks at the length arguments), but when I compile the code below with gfortran it clearly passes the string lengths 4 and 3 as extra arguments.
INTEGER FUNCTION ILAENV( NAME , NN ) CHARACTER*( * ) NAME, NN ILAENV = ICHAR( NAME( 1: 1 ) ) RETURN END
INTEGER FUNCTION ZZZ( ) ZZZ = ILAENV("fooo", "bar") RETURN END
movl $3, %ecx movl $4, %edx movl $.LC0, %esi movl $.LC1, %edi call ilaenv_