Deutsch   English   Français   Italiano  
<vq1ifc$ou6s$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.lang.c
Subject: Re: Which code style do you prefer the most?
Date: Sun, 2 Mar 2025 13:21:00 +0100
Organization: A noiseless patient Spider
Lines: 89
Message-ID: <vq1ifc$ou6s$1@dont-email.me>
References: <vpkmq0$21php$1@dont-email.me> <vpl2k4$24fmt$1@dont-email.me>
 <20250225104754.267@kylheku.com> <878qps2abs.fsf@onesoftnet.eu.org>
 <20250226095615.829@kylheku.com> <7wJvP.420809$yI2a.217056@fx42.iad>
 <861pvfyha4.fsf@linuxsc.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 02 Mar 2025 13:21:01 +0100 (CET)
Injection-Info: dont-email.me; posting-host="e34113db79e89efb1cf30712b20c3094";
	logging-data="817372"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19e6b+2lpPVEgwfoBEzaG7za/F4Oaw70lI="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:xeIG7TTeyF2xQlrzwS3QT2Ei5WQ=
In-Reply-To: <861pvfyha4.fsf@linuxsc.com>
Content-Language: en-GB
Bytes: 4078

On 02/03/2025 09:21, Tim Rentsch wrote:
> scott@slp53.sl.home (Scott Lurndal) writes:
> 
>> Kaz Kylheku <643-408-1753@kylheku.com> writes:
>>
>>> On 2025-02-26, Ar Rakin <rakinar2@onesoftnet.eu.org> wrote:
>>>
>>>> Sorry, I should have showed this difference in my original post.
>>>> I like the GNU style except the weird indentation before the
>>>> braces of control statements.  Not sure why they choose to indent
>>>> that way.
>>>>
>>>> The GNU style without indent before braces looks nice to me.
>>>
>>> Without the weird brace indent, it has nothing to do with GNU any
>>> more;  it's just two-space indentation, where opening braces are on
>>> their own line instead of being "cuddled" into the previous line,
>>> which is very common:
>>>
>>>   if (flag)
>>>   {
>>>     switch (state)
>>>     {
>>>       case 42:
>>>       {
>>>         state = 73;
>>>         break;
>>>       }
>>>     }
>>>   }
>>>   else
>>>   {
>>>     statement;
>>>   }
>>
>> There's so much vertical space wasted in that, however.
>>
>>    if (flag && (state == 42)) state = 73;
>>    else                       statement;

The semantics here are different, yes - if "flag" is true and "state" is 
not 42, the original version does not run "statement;" while the 
re-write does run it.

> 
> The suggested rewrite has different semantics.  Instead
> 
>      if(flag)  state = state == 42 ? 73 : state;
>      else      statement;
> 

The semantics here are different from the original - introducing a 
spurious write to "state" could be observable behaviour or subject to an 
additional data race if "state" is "volatile", atomic, or interacts with 
other threads.

> or
> 
>      if(flag)  state != 42 || (state = 73);
>      else      statement;
> 
> has the same behavior as the original.  (Disclaimer: not
> compiled.)

The semantics here are also possibly different from the original if 
"state" is volatile or atomic.  The details of volatile accesses are 
implementation-defined - the evaluation "(state = 73)" with a volatile 
"state" may re-read "state" after the assignment, or may not.

Re-writes of code can have subtle complications when you don't know the 
full context.  This is one reason people working on serious and 
safety-critical software don't faff around with expressions like those 
ones, and prefer clear and unambiguous code that can't be misinterpreted 
by other programmers, or compilers, regardless of the circumstances.  If 
you want to eliminate the switch, consider this :

     if (flag) {
         if (state == 42) {
             state = 73;
         }
     } else {
         statement;
     }


Yes, it is more verbose - but it is absolutely clear, and there is no 
doubt what is going on even if there are volatiles, atomics, or threads 
involved.