Re: [PATCH] revision: use C99 declaration of variable in for() loop
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Nov 17, 2021, 11:03 UTC
- Message-ID
- <61518213-9ce8-00d2-efd9-7f2091c574c4@gmail.com>
- In-Reply-To
- <xmqqpmr2j5lq.fsf_-_@gitster.g>
Hi Junio
On 15/11/2021 06:27, Junio C Hamano wrote:
Show 23 quoted lines
> 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
Show 22 quoted lines
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> 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);
> }
>