# [PATCH 6/9] gettext.h: Avoid using a non-standard C construct

5 messages from 2011-04-07 to 2011-04-11. Participants: Ramsay Jones, Jonathan Nieder, Ævar Arnfjörð Bjarmason, Junio C Hamano.
Thread: https://gitlist.dev/t/27020

## Ramsay Jones, 2011-04-07 18:41

Subject: [PATCH 6/9] gettext.h: Avoid using a non-standard C construct
Message-ID: <4D9E056C.1070906@ramsay1.demon.co.uk>
URL: https://gitlist.dev/e/4D9E056C.1070906%40ramsay1.demon.co.uk

```

In particular, standard C does not allow a parenthesized string
as an array initializer. Some compilers, for example GCC and MSVC,
allow this syntax as an extension, but it is (obviously) not a
portable construct.

In order to avoid such a construct, for example while initialising
the array 'ignore_error' (builtin/add.c line 309), we simply
remove the parenthesis from the definition of the N_() macro.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---

For example, tcc can not parse this syntax.

Note that sparse issues warnings like the following:
    builtin/add.c:309:1: warning: too long initializer-string for \
        array of char
which is actually a bug in sparse that is tickled by a parenthesized
string initializer (it doesn't determine the correct size of the
string). Again I have a patch ...

 gettext.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/gettext.h b/gettext.h
index 1b253b7..24d9182 100644
--- a/gettext.h
+++ b/gettext.h
@@ -35,6 +35,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
-- 
1.7.4

```

## Jonathan Nieder, 2011-04-07 22:10

Subject: Re: [PATCH 6/9] gettext.h: Avoid using a non-standard C construct
Message-ID: <20110407221015.GA20080@elie>
URL: https://gitlist.dev/e/20110407221015.GA20080%40elie
In-Reply-To: <4D9E056C.1070906@ramsay1.demon.co.uk>

```
Hi,

Ramsay Jones wrote:

> +++ b/gettext.h
> @@ -35,6 +35,6 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n)
[...]
> -#define N_(msgid) (msgid)
> +#define N_(msgid) msgid

Good catch.  Thanks!

> In particular, standard C does not allow a parenthesized string
> as an array initializer.

The subject line seems unnecessarily vague.  Why not:

	i18n: avoid parenthesized string as array initializer

	The syntax

		static const char ignore_error[] = ("something");

	is invalid C.  GCC and MSVC can parse it, but for example
	tcc cannot.  So remove the parenthesis from the definition
	of the N_() macro.

	Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
	Acked-by: Jonathan Nieder <jrnieder@gmail.com>

```

## Ævar Arnfjörð Bjarmason, 2011-04-10 12:54

Subject: Re: [PATCH 6/9] gettext.h: Avoid using a non-standard C construct
Message-ID: <BANLkTimFQjbf6pz7upcb=QJngZdPTgWLmQ@mail.gmail.com>
URL: https://gitlist.dev/e/BANLkTimFQjbf6pz7upcb%3DQJngZdPTgWLmQ%40mail.gmail.com
In-Reply-To: <20110407221015.GA20080@elie>

```
On Fri, Apr 8, 2011 at 00:10, Jonathan Nieder <jrnieder@gmail.com> wrote:
> Hi,
>
> Ramsay Jones wrote:
>
>> +++ b/gettext.h
>> @@ -35,6 +35,6 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n)
> [...]
>> -#define N_(msgid) (msgid)
>> +#define N_(msgid) msgid
>
> Good catch.  Thanks!
>
>> In particular, standard C does not allow a parenthesized string
>> as an array initializer.
>
> The subject line seems unnecessarily vague.  Why not:
>
>        i18n: avoid parenthesized string as array initializer
>
>        The syntax
>
>                static const char ignore_error[] = ("something");
>
>        is invalid C.  GCC and MSVC can parse it, but for example
>        tcc cannot.  So remove the parenthesis from the definition
>        of the N_() macro.
>
>        Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
>        Acked-by: Jonathan Nieder <jrnieder@gmail.com>

This looks good to me with this commit message:

Acked-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>

```

## Ramsay Jones, 2011-04-11 17:15

Subject: Re: [PATCH 6/9] gettext.h: Avoid using a non-standard C construct
Message-ID: <4DA33735.5070402@ramsay1.demon.co.uk>
URL: https://gitlist.dev/e/4DA33735.5070402%40ramsay1.demon.co.uk
In-Reply-To: <20110407221015.GA20080@elie>

```
Jonathan Nieder wrote:
>> +++ b/gettext.h
>> @@ -35,6 +35,6 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n)
> [...]
>> -#define N_(msgid) (msgid)
>> +#define N_(msgid) msgid
> 
> Good catch.  Thanks!
> 
>> In particular, standard C does not allow a parenthesized string
>> as an array initializer.
> 
> The subject line seems unnecessarily vague.  Why not:
> 
> 	i18n: avoid parenthesized string as array initializer
> 
> 	The syntax
> 
> 		static const char ignore_error[] = ("something");
> 
> 	is invalid C.  GCC and MSVC can parse it, but for example
> 	tcc cannot.  So remove the parenthesis from the definition
> 	of the N_() macro.
> 
> 	Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
> 	Acked-by: Jonathan Nieder <jrnieder@gmail.com>
> 

Sounds good to me. I'll re-roll and use your message verbatim.

Thanks!

ATB,
Ramsay Jones

```

## Junio C Hamano, 2011-04-11 20:13

Subject: Re: [PATCH 6/9] gettext.h: Avoid using a non-standard C construct
Message-ID: <7v1v18wnqr.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7v1v18wnqr.fsf%40alter.siamese.dyndns.org
In-Reply-To: <4DA33735.5070402@ramsay1.demon.co.uk>

```
Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:

>> 	Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
>> 	Acked-by: Jonathan Nieder <jrnieder@gmail.com>
>> 
>
> Sounds good to me. I'll re-roll and use your message verbatim.

Thanks, all.  No need to resend, as I'll be queuing what we got in 'pu'
after amending it.

```
