Deutsch   English   Français   Italiano  
<vl780f$3i6eu$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: "Steven G. Kargl" <sgk@REMOVEtroutmask.apl.washington.edu>
Newsgroups: comp.lang.fortran
Subject: Re: how do you send a fortran character string from GCC to GFortran ?
Date: Thu, 2 Jan 2025 23:37:51 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 55
Message-ID: <vl780f$3i6eu$1@dont-email.me>
References: <vl5ima$38li7$1@dont-email.me> <vl6mjm$3f5mv$1@dont-email.me>
	<vl74gk$3hpbc$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Fri, 03 Jan 2025 00:37:51 +0100 (CET)
Injection-Info: dont-email.me; posting-host="6b602592fce6df44489a744f0ab75dc0";
	logging-data="3742174"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+v2PALlSQjGgnrYmxwJN1z"
User-Agent: Pan/0.145 (Duplicitous mercenary valetism; d7e168a
 git.gnome.org/pan2)
Cancel-Lock: sha1:IlXrTAGxRYQdgMrsPLMe9rVpwTA=
Bytes: 2659

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 <string.h>
>> 
>> 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