Deutsch   English   Français   Italiano  
<vg42jk$3gipd$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: James Kuyper <jameskuyper@alumni.caltech.edu>
Newsgroups: comp.lang.c
Subject: Re: else ladders practice
Date: Fri, 1 Nov 2024 22:25:56 -0400
Organization: A noiseless patient Spider
Lines: 49
Message-ID: <vg42jk$3gipd$1@dont-email.me>
References: <3deb64c5b0ee344acd9fbaea1002baf7302c1e8f@i2pn2.org>
 <20241031161545.aed6541ce6c728923a46e9df@g{oogle}mail.com>
 <vg0hhn$2psrf$1@dont-email.me> <vg254o$3652k$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Injection-Date: Sat, 02 Nov 2024 03:25:57 +0100 (CET)
Injection-Info: dont-email.me; posting-host="e725b66e12540f5fd9ac4ff4512d4ba1";
	logging-data="3689261"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18epGuZv1himoaf3J0CS/qBxqudL9yHpbU="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:eXQFkYwWb1tyH0QvExvcvqePmt8=
In-Reply-To: <vg254o$3652k$1@dont-email.me>
Content-Language: en-US
Bytes: 3333

On 11/1/24 04:56, David Brown wrote:
> On 31/10/2024 19:16, James Kuyper wrote:
>> On 10/31/24 09:15, Anton Shepelev wrote:
>>> fir:
>>>
>>>> somethins i got such pies of code like
>>>>
>>>> if(n==1) {/*something/}
>>>> if(n==2) {/*something/}
>>>> if(n==3) {/*something/}
>>>> if(n==4) {/*something/}
>>>> if(n==5) {/*something/}
>>>>
>>>> technically i would need to add elses
>>>
>>> Why?
>>
>> He has indicated that the value of n is not changed inside any of the
>> if-clauses. A sufficiently sophisticated compiler could notice that
>> fact, and also that each of the conditions is on the same variable, and
>> as a result it could generate the same kind of code as if it had been
>> written with 'else', so it won't generate unnecessary condition tests.
>> It might, in fact, generate the same kind of code which would have been
>> generated if it had been coded properly, as a switch statement, so it
>> might use a jump table, if appropriate.
>> But it's better to write it as a switch statement in the first place, so
>> you don't have to rely upon the compiler being sufficiently
>> sophisticated to get the best results.
>
> I disagree entirely.
>
> It is best to write the code in the way that makes most sense -
> whatever gives the best clarity and makes the programmer's intentions
> obvious to readers, and with the least risk of errors. Consider the
> maintainability of the code - is it likely to be changed in the
> future, or adapted and re-used in other contexts? If so, that should
> be a big influence on how you structure the source code. Can a
> different structure make it less likely for errors to occur unnoticed?
> For example, if the controlling value can be an enumeration then with
> a switch, a good compiler can check if there are accidentally
> unhandled cases (and even a poor compiler can check for duplicates).

I don't see those criteria as conflicting with my advice. A switch seems
to me to unambiguously the clearest way of writing this logic, for
precisely the same reason it also makes it easier for unsophisticated
compilers to optimize it - what needs to be done is clearer both to the
compiler and to the human reader.