On 8/30/06, Chris Littell <[EMAIL PROTECTED]> wrote:
On 8/30/06, Nikolai Weibull <[EMAIL PROTECTED]> wrote:
> On 8/29/06, Brad Beveridge <[EMAIL PROTECTED]> wrote:
> > On 29/08/06, Ilya <[EMAIL PROTECTED]> wrote:
> > > Brad Beveridge wrote:
> > > >    static char string[2] = {0};
> > > Should not you have "= {0, 0}" here?  Second element never get
> > > initialized but it could be accessed by ml_append_string.
> >
> > That might be more clear perhaps, but when you initialize an array
> > like that in C, the last element is propagated for the whole array.
>
> What C compiler are you using?  The last element is /not/ propagated
> in C.  The rest of the array will be initialized to zero, which is the

In C89 this is true.  In C99, you can initialize values out of order
and by index range, and the final value in an array initializer is
propogated to the rest of the values.

In C99 you can initialize values "out of order", yes, but you can't do
it with ranges.  Ranges are a GNU C extension.  The propagation
neither happens in any of the ANSI standards, nor in the GNU extended
version of C.  It's simple to test write the following in "a.c":

#include <stdio.h>

int
main(void)
{
       int is[2] = { 1 };
       int i;

       for (i = 0; i < 2; i++)
               printf("%d\n", is[i]);

       return 0;
}

And then to actually test it:

$ for std in c89 c99 gnu89 gnu99; do gcc -std=$std a.c && echo $std:
&& a.out; done
c89:
1
0
c99:
1
0
gnu89:
1
0
gnu99:
1
0

http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gcc/designated-inits.html

Nowhere in that section does it say that the last value is propagated.

 nikolai

Reply via email to