Path: ...!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch
Newsgroups: comp.lang.c
Subject: Re: size_t best practice
Date: Thu, 22 Aug 2024 01:38:24 -0700
Organization: A noiseless patient Spider
Lines: 33
Message-ID: <86a5h59clb.fsf@linuxsc.com>
References:
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Thu, 22 Aug 2024 10:38:25 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="dd674af37156d5461d600da65dab9de0";
logging-data="405193"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+fTBexG3ZH/OKB5NU4eRj/k9fiXv19uWg="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:r9FtTH8rTpBoXVGyQFtTuAfiAlQ=
sha1:+L8y3c6I0coIc7jIJtC+DGdmHJ4=
Bytes: 1927
Andrey Tarasevich writes:
> On 08/20/24 6:55 AM, Andrey Tarasevich wrote:
>
>> On 08/20/24 6:53 AM, Andrey Tarasevich wrote:
>>
>>> For example, iteration all the way to 0 can be idiomatically
>>> implemented as
>>>
>>> for (some_unsigned_type i = size; (some_unsigned_type) i != -1; --i)
>>> ...
>>
>> Sorry, a typo. Was meant to be
>>
>> for (some_unsigned_type i = size; i != (some_unsigned_type) -1; --i)
>> ...
>
> Of, crap. One more time
>
> for (some_unsigned_type i = size - 1;
> i != (some_unsigned_type) -1;
> --i)
> ...
>
> Should be good now :)
To me the redundant cast is a red flag. A cleaner alternative:
for( some_unsigned_type i = size; i > 0 && i--; ){
...
}
Produces identical code to the above at -O1 (both gcc and clang).