From: Phillip Wood Date: Wed, 17 Nov 2021 11:03:58 GMT Subject: Re: [PATCH] revision: use C99 declaration of variable in for() loop Message-ID: <61518213-9ce8-00d2-efd9-7f2091c574c4@gmail.com> In-Reply-To: Hi Junio On 15/11/2021 06:27, Junio C Hamano wrote: > There are certain C99 features that might be nice to use in our code > base, but we've hesitated to do so in order to avoid breaking > compatibility with older compilers. But we don't actually know if > people are even using pre-C99 compilers these days. > > One way to figure that out is to introduce a very small use of a > feature, and see if anybody complains, and we've done so to probe > the portability for a few features like "trailing comma in enum > declaration", "designated initializer for struct", and "designated > initializer for array". A few years ago, we tried to use a handy > > for (int i = 0; i < n; i++) > use(i); > > to introduce a new variable valid only in the loop, but found that > some compilers we cared about didn't like it back then. Two years > is a long-enough time, so let's try it agin. > > If this patch can survive a few releases without complaint, then we > can feel more confident that variable declaration in for() loop is > supported by the compilers our user base use. And if we do get > complaints, then we'll have gained some data and we can easily > revert this patch. I like the idea of using a specific test balloon for the features that we want to use but wont this one break the build for anyone doing 'make DEVELOPER=1' because -Wdeclaration-after-statement will error out. I think we could wrap the loop in gcc's warning pragmas to avoid that. Best Wishes Phillip > Signed-off-by: Junio C Hamano > --- > revision.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/revision.c b/revision.c > index 9dff845bed..44492f2c02 100644 > --- a/revision.c > +++ b/revision.c > @@ -43,10 +43,8 @@ static inline int want_ancestry(const struct rev_info *revs); > > void show_object_with_name(FILE *out, struct object *obj, const char *name) > { > - const char *p; > - > fprintf(out, "%s ", oid_to_hex(&obj->oid)); > - for (p = name; *p && *p != '\n'; p++) > + for (const char *p = name; *p && *p != '\n'; p++) > fputc(*p, out); > fputc('\n', out); > } >