>>>>> On Mon, 7 Jun 2010 11:12:47 -0600, Mark Hoemmen said: > > On Mon, Jun 7, 2010 at 10:56, Martin Simmons <mar...@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_ -- Martin Simmons LispWorks Ltd http://www.lispworks.com/ _______________________________________________ cffi-devel mailing list cffi-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel