| Deutsch English Français Italiano |
|
<vu401g$reom$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: Loops (was Re: do { quit; } else { })
Date: Mon, 21 Apr 2025 00:29:52 +0100
Organization: A noiseless patient Spider
Lines: 91
Message-ID: <vu401g$reom$1@dont-email.me>
References: <vspbjh$8dvd$1@dont-email.me> <20250413072027.219@kylheku.com>
<vtgpce$39229$1@dont-email.me> <vti2ki$g23v$1@dont-email.me>
<vtin99$vu24$1@dont-email.me> <vtiuf0$18au8$1@dont-email.me>
<vtj97r$1i3v3$1@dont-email.me> <vtl166$36p6b$1@dont-email.me>
<vtlcg0$3f46a$2@dont-email.me> <vtnekn$1fogv$1@dont-email.me>
<vto2mb$20c4n$1@dont-email.me> <vtu4i5$3hteg$1@dont-email.me>
<vtujko$3uida$1@dont-email.me> <vtvfop$rf2p$1@dont-email.me>
<vtvto2$15otp$1@dont-email.me> <vu01k7$1bfv2$1@dont-email.me>
<vu0720$1dva7$1@dont-email.me> <vu2hmg$3jn88$1@dont-email.me>
<vu2mkc$3noft$1@dont-email.me> <vu38da$735n$1@dont-email.me>
<vu3j7s$g755$1@dont-email.me> <87ecxmv4t4.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Mon, 21 Apr 2025 01:29:52 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="519b62363da5fc709140aed5764e0c61";
logging-data="899862"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+JIJI1yyHRnWsolfy2G+3g"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:mAO/6GeUqQHqGCle7nSPTCvMayU=
Content-Language: en-GB
In-Reply-To: <87ecxmv4t4.fsf@nosuchdomain.example.com>
On 20/04/2025 23:36, Keith Thompson wrote:
> bart <bc@freeuk.com> writes:
>> for(p=sqliteHashFirst(&pSchema->trigHash); p; p=sqliteHashNext(p)){
>> sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
>> }
>
> I might write it like this:
>
> for ( p = sqliteHashFirst(&pSchema->trigHash);
> p != NULL;
> p = sqliteHashNext(p) )
> {
> sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
> }
> I have certain preferences (spaces around most operators, explicit
> comparison to NULL, willingness to split long lines) that other C
> programmers may or may not share.
I rarely see complex loops split over multiple lines (mainly when they
get so long that they'd overflow the line, but they can still be complex
enough before then).
But the thing is, once you split it into multiple lines, then there is
little advantage over using a regular 'while' loop:
p = sqliteHashFirst(&pSchema->trigHash);
while (p != NULL)
{
sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
p = sqliteHashNext(p) )
}
The same number of lines, but now:
* The one-time initialisatioin is isolated and out of the way
* The execution order is more natural: the increment follows the body
as it does at runtime.
* It's clearly a while loop which repeats until some pointer is NULL
(Note there can be minor differences in behaviour with statements like
'continue', or variable scope when the 'for' declares its variables.)
>> It keeps it even more together, which you seem to like.
>
> That's something you invented. I find it ugly, and I presume you'd
> agree. The fact that you think that someone else would prefer it
> indicates that you don't understand how other people think.
AFAIK it is legal C code, and I invented it because somebody said things
that belong together should be together in one place. However, I have
seen actual examples like that, in for-headers that that use
comma-separated expressions.
> I'd rather not write `for (ch in 0..255)` because it's a syntax error.
It's a syntax error because the form doesn't naturally exist in C; you'd
have to emulate using macros, which is a poor solution.
> You have the luxury of using your own language.
That 'ch in 0..255' form or close equivalent is supported by that long
set of languages I listed earlier. It's not my invention, I just copied it.
It is just something that is desirable. Look again at the C version: it
looks off. (At least, you'd use a shorter loop index!)
>> I said I tried one like C's, and it was never used. There is enough
>> flexibility in the rest to deal with anything that comes up.
>
> It was never used by whom?
By me. One use-case was porting code from C, but I didn't do much of
that either.
> If you don't like C-style for loop, they absolutely should not
> exist in a language for which you are, if I understand correctly,
> the sole implementer and the sole user.
But I hear so much about how wonderful it is, how multi-purpose, how
indispensible, how superior to an ordinary 'for' (admittedly from people
who don't have a choice) that I didn't want to miss out!