On Tue, Sep 19, 2017 at 3:38 PM, SZEDER Gábor <szeder.dev@xxxxxxxxx> wrote: > A bit "futuristic" option along these lines could be something like > this, using a scoped loop variable in the outer loop to ensure that > it's executed at most once: > > #define for_each_string_list_item(item,list) \ > for (int f_e_s_l_i = 1; (list)->items && f_e_s_l_i; f_e_s_l_i = 0) \ > for (item = (list)->items; item < (list)->items + (list)->nr; ++item) > > The high number of underscores are an attempt to make reasonably sure > that the macro's loop variable doesn't shadow any variable in its > callers or isn't being shadowed in the loop body, which might(?) > trigger warnings in some compilers. Well, and a poor attempt at that, because, of course, the loop variable would still be shadowed in nested for_each_string_list_item loops... And our codebase has these loops nested in entry.c:finish_delayed_checkout(). OTOH, we don't seem to care too much about shadowed variables, since building with -Wshadow gives 91 warnings in current master...