Re: Flexible size array
- From: "Robert Gamble" <rgamble99@xxxxxxxxx>
- Date: 28 Jul 2005 18:12:05 -0700
Christopher Benson-Manica wrote:
> Is the following program conforming under C99?
>
> #include <stdio.h>
>
> typedef struct foo {
> int bar;
> int baz[];
> } foo;
>
> foo foos[]={
> { 1, {1,2,3} }
> };
>
> int main() {
> return 0;
> }
No, it's not. It is a constraint violation for a structure containing
a flexible array to be a member of a structure or an array.
I also don't think that you can initialize the flexible array part in
the declaration so something like this wouldn't work either:
foo foo1 = { 1, {1, 2, 3} };
although this would be okay:
foo foo1 = {1};
> gcc -Wall -pedantic -std=c99 (3.3.3 for cygwin) accepts the program
> without the declaration for the array of foo structs, but issues an
> error about "initialization of a flexible array member in a nested
> context" on the program above. Is it correct?
It is correct that there is a problem with your code. I think the
particular error message you are referring to has to do with the fact
that that gcc allows static initialization of flexible arrays as well
as an array of structures containing flexible array member. Because of
this, things get complicated when you try to statically initialize such
an array so gcc disallows this.
Robert Gamble
.
- Follow-Ups:
- Re: Flexible size array
- From: akarl
- Re: Flexible size array
- References:
- Flexible size array
- From: Christopher Benson-Manica
- Flexible size array
- Prev by Date: Re: Macro calling kernel function
- Next by Date: Re: Macro calling kernel function
- Previous by thread: Flexible size array
- Next by thread: Re: Flexible size array
- Index(es):