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