Subject: Re: cb/pedantic-build-for-developers, POSIX-but-not-C99 and -Wno-pedantic-ms-format

From: Junio C Hamano <[email-masked]>
Date: Wed, 22 Sep 2021 09:13:19 -0700

Ævar Arnfjörð Bjarmason <[email-masked]> writes:

> I.e. complaining about "%m$" instead of "%" in printf formats, it's easy
> enough to fix in my case, it's just something I used to de-duplicate a
> rather complex format, this makes it C(89|99)-compliant:
>     
>     -       strbuf_addf(&fmt, "%%s%%s%%s-%%0%1$lud.%%0%1$lud-%%s-%%s-%%s",
>     -                   (unsigned long)tmp.len);
>     +       strbuf_addf(&fmt, "%%s%%s%%s-%%0%lud.%%0%lud-%%s-%%s-%%s",
>     +                   (unsigned long)tmp.len, (unsigned long)tmp.len);
>
> But in general, do we view -pedantic as an implicit endorsement that we
> should be using less POSIX and more standard C than we otherwise would?
>
> I may be wrong, but I believe that construct is widely portable, we
> don't use it in the main source, but in the po/ files (so anything that
> uses git + gettext tests for this already):

Reordering (_("%s %s"), a, b) to ("%2$s %1$s", a, b) is essential to
make po/ work. 

While I do not think of a reason why it should not work, I am not
sure duplicating (%1$s %1$s", a) falls into the same category.

Any solution that makes the per-cent ridden format string is better
;-)