Deutsch   English   Français   Italiano  
<20240623182210.663@kylheku.com>

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

Path: ...!feeds.phibee-telecom.net!2.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Kaz Kylheku <643-408-1753@kylheku.com>
Newsgroups: comp.lang.c
Subject: Re: Fixing a sample from K&R book using cake static analyser
Date: Mon, 24 Jun 2024 01:31:36 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 73
Message-ID: <20240623182210.663@kylheku.com>
References: <v53sl1$35qt7$1@dont-email.me> <v558hv$3dskb$1@dont-email.me>
 <20240623034624.135@kylheku.com>
 <20240624014040.c7a4b34e68ce734ff837868d@gmail.moc>
 <20240623160155.649@kylheku.com>
Injection-Date: Mon, 24 Jun 2024 03:31:37 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="0a91c74ce60a0e44ab75e91b4c3a6a2f";
	logging-data="642246"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/SR6RWZsuJbPX938CtzY+MWQ6WL1Ub6+Q="
User-Agent: slrn/pre1.0.4-9 (Linux)
Cancel-Lock: sha1:Zj62sIhrwVhnZhHZiAfcJzOw/l0=
Bytes: 3037

On 2024-06-23, Kaz Kylheku <643-408-1753@kylheku.com> wrote:
> On 2024-06-23, Anton Shepelev <anton.txt@gmail.moc> wrote:
>> Kaz Kylheku:
>>
>>> What scatter-brained drivel. Watch and learn:
>>>
>>>   struct nlist *install(char *name, char *defn)
>>>   {
>>>     struct nlist *existing = lookup(name);
>>>
>>>     if (existing) {
>>>       return existing;
>>>     } else {
>>
>> When the if-branch ends with a return, the else-branch is
>> redundant, and its body shall be written bare, removing one
>> (useless) level of nesting and indentation.
>
> I did that because there are declarations in the else case.
>
> I avoid mising declarations and statements, because I consider
> that a language misfeature.
>
> In a block structured language, declarations should come first,
> then statements.

Also:

You generally want parallel elements at the same level of indentation.

The following structure can be grating on the eyes:

  if (key == node->key)
    return node;
  else if (key < node->key)
    return tree_search(node->right, key);
  return tree_search(node->left, key);

This is just an example; I realize we are not handling the case
of the key being found.

This is better:

  if (key == node->key)
    return node;
  else if (key < node->key)
    return tree_search(node->right, key);
  else
    return tree_search(node->left, key);

the parallel elements align at the same indentation level.

The structure being recommended by Anton is most at home in imperative
situations like this:

  stmt1;
  stmt2;
  if (condition1)
    return early;
  stmt3;
  stmt4;
  if (condition2)
    return early;
  stmt5;
  ...

When we have multiple cases that are all parallel and of equivalent
importance (they could be in in any order), not so much.

-- 
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca