Deutsch English Français Italiano |
<86mscqcpy1.fsf@linuxsc.com> 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: Tim Rentsch <tr.17687@z991.linuxsc.com> Newsgroups: comp.lang.c Subject: Re: do { quit; } else { } Date: Tue, 08 Apr 2025 14:18:30 -0700 Organization: A noiseless patient Spider Lines: 61 Message-ID: <86mscqcpy1.fsf@linuxsc.com> 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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Date: Tue, 08 Apr 2025 23:18:31 +0200 (CEST) Injection-Info: dont-email.me; posting-host="3be70bfd357a158f55184c1ca57022b7"; logging-data="3243327"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+NWR1WpdPJefytWljJvg4xONMNp5/DlTQ=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:DH2E7aYgmm5tW4dcPdyGFWtYGCM= sha1:igny5QFSmHeFcnaTYBFFvZ3MfJI= Bytes: 3310 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.