On 8/30/06, Nikolai Weibull <[EMAIL PROTECTED]> wrote:
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.
Wow, I reread it and you are correct. I'm not sure why I held that assumption... Also thanks for the examples.
nikolai
Chris
