structure initialization
Chris Torek
chris at mimsy.umd.edu
Fri Feb 2 11:58:44 AEST 1990
In article <Feb.1.09.43.53.1990.19730 at math.rutgers.edu>
bumby at math.rutgers.edu (Richard Bumby) writes:
>Is it possible that the typedef introduces the need for an extra level
>of bracketing on some compilers?
No. Aggregate initialisers always take one level of braces for each
aggregate. In this case---where we had
struct exp1 {
int length;
long grp1;
long grp2;
};
typedef struct {
struct exp1 blk[5];
} RANGE;
an object of type `RANGE' needed a brace because it was a struct,
plus a brace because the (single) element of that struct was an
array; then, each element of the array needed a brace because it
was a struct.
Had the type definition been
typedef struct {
int somevalue;
struct exp1 b1;
struct exp1 b2[2];
int othervalue;
} RANGE;
this might have been more obvious:
RANGE x = {
/* somevalue */ 1,
/* b1 */ { 1, 2, 3 },
/* b2 */ {
/* b2[0] */ { 4, 5, 6 },
/* b2[1] */ { 7, 8, 9 },
/* b2 */ }
/* othervalue */ 0
};
If you drop all but the b2/b2[0]/b2[1]/b2 lines, you get
RANGE x = { { { 4, 5, 6 }, { 7, 8, 9 } } };
--
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163)
Domain: chris at cs.umd.edu Path: uunet!mimsy!chris
More information about the Comp.lang.c
mailing list