On 4 October 2011 12:09, Bingfeng Mei wrote:
> Hello,
> According to 
> http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Zero-Length.html#Zero-Length
> A zero-length array should have a length of 1 in c90.

I think you've misunderstood that page.  You cannot have a zero-length
array in C90, what that page says is that in strict C90 you would have
to create an array of length 1 as a workaround.  It's not saying
sizeof(char[0]) is 1.

GNU C an C99 allow you to have a zero-length array.

> But I tried
>
> struct
> {
>  char a[0];
> } ZERO;
>
> void main()
> {
>  int a[0];
>  printf ("size = %d\n", sizeof(ZERO));
> }
>
> Compiled with gcc 4.7
> ~/work/install-x86/bin/gcc test.c -O2 -std=c90
>
> size = 0

If you add -pedantic you'll discover that program isn't valid in C90.

> I noticed the following statement in GCC document.
> "As a quirk of the original implementation of zero-length arrays,
> sizeof evaluates to zero."
>
> Does it mean GCC just does not conform to c90 in this respect?

C90 doesn't allow zero length arrays, so you're trying to evaluate a
GNU extension in terms of a standard.  I'm not sure what you expect to
happen.

Reply via email to