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).