Thank you very much. I misunderstood the document. 

Bingfeng

> -----Original Message-----
> From: Jonathan Wakely [mailto:jwakely....@gmail.com]
> Sent: 04 October 2011 12:48
> To: Bingfeng Mei
> Cc: gcc@gcc.gnu.org
> Subject: Re: Not conform to c90?
> 
> 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