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.