Re: [PATCH 2/2] gettext.h: add parentheses around N_ expansion
- From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
- Date
- Jan 6, 2015, 13:24 UTC
- Message-ID
- <54ABE205.70801@ramsay1.demon.co.uk>
- In-Reply-To
- <f67db70c63f8dcbfc58d7ffda86ff10@74d39fa044aa309eaea14b9f57fe79c>
On 06/01/15 10:34, Kyle J. McKay wrote:
Show 38 quoted lines
> The N_ macro is used to mark strings for translation without > actually translating them. At runtime the string is expected > to be passed to the gettext API for translation. > > If two N_ macro invocations appear next to each other with only > whitespace (or nothing at all) between them, the two separate > strings will be marked for translation, but the preprocessor > will then combine the strings into one and at runtime the > string passed to gettext will not match the strings that were > translated. > > Avoid this by adding parentheses around the expansion of the > N_ macro so that instead of ending up with two adjacent strings > that are then combined by the preprocessor, two adjacent strings > surrounded by parentheses result instead which causes a compile > error so the mistake can be quickly found and corrected. > > Signed-off-by: Kyle J. McKay <mackyle@gmail.com> > --- > This patch is optional, but prevents the problem fixed by 1/2 > from recurring. > > gettext.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gettext.h b/gettext.h > index 7671d09d..d11a4139 100644 > --- a/gettext.h > +++ b/gettext.h > @@ -63,6 +63,6 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n) > } > > /* Mark msgid for translation but do not translate it. */ > -#define N_(msgid) msgid > +#define N_(msgid) (msgid) > > #endif >
Hmm, see commit 642f85faa ("i18n: avoid parenthesized string as array initializer", 07-04-2011), for a counter-point. :-P
ATB, Ramsay Jones