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

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

Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: =?UTF-8?Q?Arne_Vajh=C3=B8j?= <arne@vajhoej.dk>
Newsgroups: comp.os.vms
Subject: Re: New VSI post on Youtube
Date: Wed, 21 Aug 2024 14:19:52 -0400
Organization: A noiseless patient Spider
Lines: 69
Message-ID: <va5b48$3v0je$1@dont-email.me>
References: <v9ehs5$3mqbj$1@dont-email.me> <v9idff$f9k4$1@dont-email.me>
 <v9iqln$hrs3$1@dont-email.me> <v9iro6$fql6$1@dont-email.me>
 <66bcf876$0$717$14726298@news.sunsite.dk>
 <66bcfbe3$0$717$14726298@news.sunsite.dk> <v9kske$uqhh$2@dont-email.me>
 <va04hl$2viks$2@dont-email.me> <66c397f6$0$716$14726298@news.sunsite.dk>
 <va226u$3ce14$1@dont-email.me> <va22l3$3cdrf$4@dont-email.me>
 <va26po$3d9f0$1@dont-email.me> <va3flv$3iue9$8@dont-email.me>
 <va4md4$3rubu$1@dont-email.me> <va5ao4$3v0jf$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 21 Aug 2024 20:19:52 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="3ba9841a42d1dda3811ea9704efa0629";
	logging-data="4162158"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/TH7ejQyiSQXcp8TXw8mpmkxFWIAUx9SY="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:djzL2LscCVhrFrw9rVq+botrVuc=
In-Reply-To: <va5ao4$3v0jf$1@dont-email.me>
Content-Language: en-US
Bytes: 2835

On 8/21/2024 2:13 PM, Arne Vajhøj wrote:
> On 8/21/2024 8:26 AM, chrisq wrote:
>> On 8/21/24 02:25, Lawrence D'Oliveiro wrote:
>>> On Tue, 20 Aug 2024 09:47:36 -0400, Arne Vajhøj wrote:
>>>> Few languages support multiple return values.
>>>
>>> Even in C and Fortran, a function can return a struct.
>>
>> Better to declare the struct externally, then pass a pointer
>> to it. Much tidier.
> 
> In C one should definitely return a pointer to struct and not
> a struct.
> 
> It looks like VSI Fortran cannot return a structure as function
> result, but VSI Pascal can return a record as function result.
> 
> And it is returned as a pointer argument under the hood.

Unless it fits in a register, then it is returned
as a true function result:

$ type s2.pas
module s2;

type
    iituple = record
                  a : integer;
                  b : integer;
              end;

[global]
function get : iituple;

var
    res : iituple;

begin
    res.a := 123;
    res.b := 456;
    get := res;
end;

end.
$ pas s2
$ type m2.c
#include <stdio.h>

struct iituple
{
     int a;
     int b;
};

struct iituple get();

int main()
{
     struct iituple res = get();
     printf("%d %d\n", res.a, res.b);
     return 0;
}
$ cc m2
$ link m2 + s2
$ run m2
123 456

Arne