On 4 November 2013 20:38, Laszlo Ersek <ler...@redhat.com> wrote:
> On 11/04/13 21:07, Peter Maydell wrote:
>> If this warning is going to complain about entirely
>> safe and idiomatic code like
>>
>>    int i;
>>    static const int some_array[] = {
>>        0x2a, 0x36, 0x1d, 0x9d, 0x38, 0xb8, 0xdb, 0xdd,
>>    };
>>
>>    for (i = 0; i < ARRAY_SIZE(some_array); i++) {
>>        ...
>>    }
>
> (Entirely safe, and completely non-idiomatic: "i" should be size_t, as
> that is the type of the sizeof operator's result.)

Making simple loop iteration variables 'unsigned' is completely
non-idiomatic. It just happens that we're calculating the upper
bound here via a macro that coincidentally produces an
unsigned result. Insisting on unsigned also runs you into
problems with loops like

   for (i = ARRAY_SIZE(foo) - 1; i >=0 ; i--) {
     something(foo[i]);
   }

(which obviously you can avoid by contorting the code,
but why do that when leaving 'i' as signed is much clearer?)

-- PMM

Reply via email to