Deutsch English Français Italiano |
<vg2ttn$3a4lk$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder2.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Bart <bc@freeuk.com> Newsgroups: comp.lang.c Subject: Re: else ladders practice Date: Fri, 1 Nov 2024 15:59:53 +0000 Organization: A noiseless patient Spider Lines: 103 Message-ID: <vg2ttn$3a4lk$1@dont-email.me> References: <3deb64c5b0ee344acd9fbaea1002baf7302c1e8f@i2pn2.org> <vg0t3j$2ruor$1@dont-email.me> <78eabb4054783e30968ae5ffafd6b4ff2e5a5f17@i2pn2.org> <vg2g37$37mh3$1@dont-email.me> <6724CFD2.4030607@grunge.pl> <vg2llt$38ons$1@dont-email.me> <2491a699388b5891a49ef960e1ad8bb689fdc2ed@i2pn2.org> <b681ee05856e165c26a5c29bf42a8d9d53843d6d@i2pn2.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 01 Nov 2024 16:59:52 +0100 (CET) Injection-Info: dont-email.me; posting-host="043844d4a216b291756c29a01a715cc9"; logging-data="3478196"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18NHrSRFtSIurnkjiQqBvQF" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:WFEwtRH2QJMmMA5Ei2ro5tzD9YI= In-Reply-To: <b681ee05856e165c26a5c29bf42a8d9d53843d6d@i2pn2.org> Content-Language: en-GB Bytes: 4595 On 01/11/2024 14:17, fir wrote: > fir wrote: >> Bart wrote: >>> On 01/11/2024 12:55, fir wrote: >>>> Bart wrote: >>>>> On 01/11/2024 11:32, fir wrote: >>>>>> Bart wrote: >>>>>>> ral clear patterns here: you're testing the same variable 'n' >>>>>>> against >>>>>>> several mutually exclusive alternatives, which also happen to be >>>>>>> consecutive values. >>>>>>> >>>>>>> C is short of ways to express this, if you want to keep those >>>>>>> 'somethings' as inline code (otherwise arrays of function >>>>>>> pointers or >>>>>>> even label pointers could be use >>>>>> >>>>>> so in short this groupo seem to have no conclusion but is tolerant >>>>>> foir various approaches as it seems >>>>>> >>>>>> imo the else latder is like most proper but i dont lkie it optically, >>>>>> swich case i also dont like (use as far i i remember never in my >>>>>> code, >>>>>> for years dont use even one) >>>>>> >>>>>> so i persnally would use bare ifs and maybe elses ocasionally >>>>>> (and switch should be mended but its fully not clear how, >>>>>> >>>>>> as to those pointer tables im not sure but im like measurad it onece >>>>>> and it was (not sure as to thsi as i dont remember exactly) slow >>>>>> maybe >>>>>> dependant on architecture so its noth wort of use (if i remember >>>>>> correctly) >>>>> >>>>> Well, personally I don't like that repetition, that's why I mentioned >>>>> the patterns. You're writing 'n' 5 times, '==' 5 times, and you're >>>>> writing out the numbers 1, 2, 3, 4, 5. >>>>> >>>>> I also don't like the lack of exclusivity. >>>>> >>>>> However I don't need to use C. If those 'somethings' were simple, or >>>>> were expressions, I could use syntax like this: >>>>> >>>>> (n | s1, s2, s3, s4, s5) >>>>> >>>> >>>> on a C ground more suitable is >>>> >>>> {s1,s2,s3,s4,s5)[n] >>>> >>>> //which is just array indexing >>> >>> No, it's specifically not array indexing, as only one of s1 - s5 is >>> evaluated, or nothing is when n is not in range, eg. n is 100. >>> >>> You could try something like that in C: >>> >>> int x; >>> >>> x = ((int[]){(puts("a"),10), (puts("b"),20), (puts("c"), 30), >>> (puts("d"),40)})[3]; >>> >>> printf("X=%d\n", x); >>> >>> The output is: >>> >>> a >>> b >>> c >>> d >>> X=40 >>> >>> Showing that all elements are evaluated first. If index is 100, the >>> result is also undefined. >>> >>> >> :-O >> what is this, first time i see such thing >> > im surprised that it work, but in fact i meant that this syntax is old c > compatible but sych thing like > > > {printf("ONE"), printf("TWO"), printf("THREE")} [2] > > shouldn evaluate al just the one is selected > like in array tab[23] not eveluates something other than tab[23] It's a 'compound literal'. It allows you to have the same {...} initialisation data format, but anywhere, not just for initialing. However it always needs a cast: (int[]){printf("ONE"), printf("TWO"), printf("THREE")}[2]; This prints ONETWOTHREE, it also then indexes the 3rd value of the array, which is 5, as returned by printf, so this: printf("%d\n", (int[]){printf("ONE"), printf("TWO"), printf("THREE")}[2]); prints ONETWOTHREE5