Path: ...!news.nobody.at!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: bart Newsgroups: comp.lang.c Subject: Re: C23 thoughts and opinions Date: Mon, 3 Jun 2024 23:43:00 +0100 Organization: A noiseless patient Spider Lines: 50 Message-ID: References: <20240602124448.704@kylheku.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Tue, 04 Jun 2024 00:42:58 +0200 (CEST) Injection-Info: dont-email.me; posting-host="027492d54fa7a72a30fd705d730c9473"; logging-data="100530"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19KSY9gTc/icsnJvBDGkFKB" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:8zZmEYWHv6o/oHB25W0ILb3ahI4= Content-Language: en-GB In-Reply-To: <20240602124448.704@kylheku.com> Bytes: 2942 On 02/06/2024 20:52, Kaz Kylheku wrote: > On 2024-06-02, Lew Pitcher wrote: >> I've always considered >> for (;;) >> preferable over >> while (1) > > Of course it is preferable. The idiom constitutes the language's direct > support for unconditional looping, not requiring that to be requested by > an extraneous always-true expression. > > Using while (1) or while (true) is like i = i + 1 instead > of ++i, or while (*dst++ = *src++); instead of strcpy. > > When Dennis Ritchie (if it was indeed he) chose for to be the construct > in which the guard expression may be omitted, so that it may express > conditional looping, he expressed the intent that it be henceforth used > for that purpose. > > To continue to use while (1) after the proper utensil is provided is > like to eat with your hands instead of a fork. > To me they're both an abomination. I classify loops like this: Endless, Repeat-N-times, While, Iteration (over ranges or values). Few languages have a special form for the first two, but mine always have done. 'while' is no good for endless loops because there is no actual condition to check. You have to provide one just for it to be eliminated. 'for' is even worse because there is no sort of iteration going on. Actually, somebody could write a loop like this: for(int i=0;;++i) Is that an endless loop or not? Like every other for-loop, you have to analyse it to deduce the intent. Here, you can't even be sure that the empty condition wasn't an oversight. At this point someone will suggest a macro this: #define forever for(;;) All that suggest sto me is that the language *needs* an explicit endless loop!