Re: Flexible size array
- From: akarl <fusionfive@xxxxxxxxx>
- Date: Fri, 29 Jul 2005 02:29:10 GMT
Robert Gamble wrote:
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.
Moreover, according to the standard the signature of `main' should be either
int main(void)
or
int main(int argc, char *argv[])
(Guess Java makes people forget `void' in C function headers with empty parameter lists.)
August .
- References:
- Flexible size array
- From: Christopher Benson-Manica
- Re: Flexible size array
- From: Robert Gamble
- Flexible size array
- Prev by Date: Re: apparent 4 GB memory limit for brk() in solaris 8 on some hardware...?
- Next by Date: Re: order of execution
- Previous by thread: Re: Flexible size array
- Next by thread: Macro calling kernel function
- Index(es):
Relevant Pages
|