Re: [PATCH] revision: use C99 declaration of variable in for() loop
- From
brian m. carlson <sandals@crustytoothpaste.net>
- Date
- Nov 15, 2021, 22:26 UTC
- Message-ID
- <YZLemOWM0rAuRTRe@camp.crustytoothpaste.net>
- In-Reply-To
- <xmqqpmr2j5lq.fsf_-_@gitster.g>
On 2021-11-15 at 06:27:45, Junio C Hamano wrote:
Show 17 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.
I think you absolutely need a compiler option for this to work on older systems. Many of those compilers support C99 just fine but need an option to enable it.
I think this could go on top of my patch, though.
Show 30 quoted lines
> 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.
>
> 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);
> }
> --
> 2.34.0-rc2-165-g9b3c04af29
> -- brian m. carlson (he/him or they/them) Toronto, Ontario, CA