home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.fortran      Putting John Backus on a giant pedestal      5,127 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 4,888 of 5,127   
   Steven G. Kargl to Lynn McGuire   
   Re: how do you send a fortran character    
   02 Jan 25 23:37:51   
   
   From: sgk@REMOVEtroutmask.apl.washington.edu   
      
   On Thu, 02 Jan 2025 16:38:10 -0600, Lynn McGuire wrote:   
      
   > On 1/2/2025 12:40 PM, Steven G. Kargl wrote:   
   >> On Thu, 02 Jan 2025 02:27:54 -0600, Lynn McGuire wrote:   
   >>   
   >>> How do you send a fortran character string from GCC to GFortran ?   
   >>>   
   >>> I cannot get this to link.  I can do the reverse, send a fortran   
   >>> character string from Gfortran to GCC.   
   >>>   
   >>> I do have the additional complication that I do not know the length of   
   >>> the fortran character string being sent from GCC to Gfortran at compile   
   >>> time, only run time.  So that is a character*(*) string.   
   >>>   
   >>> I am not using the ISO C binding.   
   >>   
   >> As Thomas as indicated, ISO C binding was introduced into the   
   >> Fortran standard to address your needs.  But, if you want to   
   >> go old school with gcc/gfortran, then   
   >>   
   >> % cat aa.c   
   >> #include    
   >>   
   >> void   
   >> string_(char *s, int *slen)   
   >> {   
   >>     strncpy(s, "abc", *slen);   
   >> }   
   >>   
   >> % cat bb.f90   
   >> program foo   
   >>     external :: string   
   >>     character(len=10) str   
   >>     call string(str, len(str))   
   >>     print *, '>>' // str //'<<'   
   >> end program foo   
   >>   
   >> % ~/work/bin/gcc -c aa.c   
   >> % gfcx -o z bb.f90 aa.o   
   >> % ./z   
   >>   >>abc<<   
   >   
   > Isn't the character string length variable "slen" a value parameter and   
   > size_t type ?   
   >   
      
   'int *' is a pointer to an int.  size_t may or may not be an int.   
      
   If one refuses to use the facilities of the Fortran standard,   
   namely ISO C binding, then one needs to experiment to determine   
   the type(s) and calling convention.   
      
   --   
   steve   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca