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