By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,600 Members | 1,683 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,600 IT Pros & Developers. It's quick & easy.

Flexible size array

P: n/a
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;
}

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?

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
Nov 15 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
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

Nov 15 '05 #2

P: n/a
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
Nov 15 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.