Deutsch   English   Français   Italiano  
<vt48go$35hh3$2@dont-email.me>

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

Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: do { quit; } else { }
Date: Tue, 8 Apr 2025 23:38:18 +0100
Organization: A noiseless patient Spider
Lines: 71
Message-ID: <vt48go$35hh3$2@dont-email.me>
References: <vspbjh$8dvd$1@dont-email.me> <8634enhcui.fsf@linuxsc.com>
 <vsph6b$ce6m$5@dont-email.me> <86ldsdfocs.fsf@linuxsc.com>
 <20250406161323.00005809@yahoo.com> <86ecy5fjin.fsf@linuxsc.com>
 <20250406190321.000001dc@yahoo.com> <86plhodtsw.fsf@linuxsc.com>
 <20250407210248.00006457@yahoo.com> <vt15lq$bjs0$3@dont-email.me>
 <vt2lp6$1qtjd$1@dont-email.me> <vt31m5$2513i$1@dont-email.me>
 <vt3d4g$2djqe$1@dont-email.me> <vt3iqh$2ka99$1@dont-email.me>
 <868qoaeezc.fsf@linuxsc.com> <vt3oeo$2oq3p$1@dont-email.me>
 <86mscqcpy1.fsf@linuxsc.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 09 Apr 2025 00:38:17 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="86cd0c292c528f4b59336ead25869004";
	logging-data="3327523"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+1EWkWD43p+z+kVXbUci4o"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:VCXvgaRtrw0FJEBSW7intDzIBsQ=
Content-Language: en-GB
In-Reply-To: <86mscqcpy1.fsf@linuxsc.com>
Bytes: 3892

On 08/04/2025 22:18, Tim Rentsch wrote:
> bart <bc@freeuk.com> writes:
> 
>> On 08/04/2025 18:32, Tim Rentsch wrote:
>>
>>> bart <bc@freeuk.com> writes:
>>>
>>>> On 08/04/2025 15:50, David Brown wrote:
>>>>
>>>>> On 08/04/2025 13:35, bart wrote:
>>>>>
>>>>>> But this need not be the case.  For example this is module A:
>>>>>>
>>>>>> --------------------------
>>>>>>    #include <stdio.h>
>>>>>>
>>>>>>    typedef struct point {float a; float b;} Point;
>>>>>>
>>>>>>    float dist(Point);
>>>>>>
>>>>>>    int main(void) {
>>>>>>    Point p = {3, 4};
>>>>>>    printf("%f\n", dist(p));
>>>>>>    }
>>>>>> --------------------------
>>>>>>
>>>>>> And this is module B that defines 'dist':
>>>>>>
>>>>>>
>>>>>> --------------------------
>>>>>>    #include <math.h>
>>>>>>
>>>>>>    typedef float length;
>>>>>>    typedef struct _tag {length x, y;} vector;
>>>>>>
>>>>>>    length dist(vector p) {return sqrt(p.x*p.x + p.y*p.y);}
>>>>>> --------------------------
>>>>>>
>>>>>> The types involved are somewhat different, but are compatible
>>>>>> enough for it to work.
>>>>>
>>>>> The two types are entirely compatible.
>>>>
>>>> Are they?
>>>
>>> No, they are not.  The type names 'Point' and 'vector' name two
>>> distinct types, and those types are not compatible, because
>>> the two struct tags are different.
>>>
>>> Because the two types are not compatible, even just calling the
>>> function dist() is undefined behavior.
>>
>> I get an incompatible error (from the example you snipped) even when I
>> remove both struct tags.
>>
>> I can't use the same struct tag in the same scope as one will clash
>> with the other.  But if I have the second in an inner scope, then I
>> again get the error.
> 
> If you want to make a point or ask a question about C code,
> SHOW THE CODE.  And show all of it.  Don't make people guess
> by showing only some of the code or by giving just a description.

I'm showing the code but you keep snipping it!  If you want testable 
code, just wrap it with 'int main() { ... }'. (I assumed you could 
figure that out.)

Here I was responding to your remark that the types are incompatible 
because the struct tags are different. If by that you mean 'struct X' vs 
'struct Y', then I said that isn't the case, as my example without such 
tags showed.