roy@phri.UUCP (Roy Smith) (04/05/89)
I've got a structure which looks like:
struct ident {
char *name;
int type;
union {
double f;
int i;
} value;
};
and I want to initialize the name, type, and value.i elements of an array
of them them at compile time. Trying the obvious:
struct ident idlist[] = {
{"foo", KEYWORD, KW_FOO},
{"bar", KEYWORD, KW_BAR},
{"baz", KEYWORD, KW_BAZ}
};
draws an error from the compiler, "operands of = have incompatible types"
for each of the 3 lines. Is there any way to do what I want to do?
--
Roy Smith, System Administrator
Public Health Research Institute
{allegra,philabs,cmcl2,rutgers,hombre}!phri!roy -or- roy@phri.nyu.edu
"The connector is the network"chris@mimsy.UUCP (Chris Torek) (04/05/89)
In article <3742@phri.UUCP> roy@phri.UUCP (Roy Smith) writes: >I've got a structure which looks like: > > struct ident { > char *name; > int type; > union { > double f; > int i; > } value; > }; > >and I want to initialize the name, type, and value.i elements of an array >of them them at compile time. Unless you have an extension, you cannot do this unless you change the order to union { int i; double f; } value; Even then, you must have a pANS-conformant compiler or its equivalent; most PCCs will refuse to initialise any unions, giving the error message >"operands of = have incompatible types" GCC should do the job, with the re-ordered union. -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@mimsy.umd.edu Path: uunet!mimsy!chris
shankar@hpclscu.HP.COM (Shankar Unni) (04/06/89)
> > struct ident { > > char *name; > > int type; > > union { > > double f; > > int i; > > } value; > > }; > > > >and I want to initialize the name, type, and value.i elements of an array > >of them them at compile time. > > Unless you have an extension, you cannot do this unless you change the > order to > > union { > int i; > double f; > } value; > > Even then, you must have a pANS-conformant compiler or its equivalent; > most PCCs will refuse to initialise any unions, giving the error message And don't forget to brace-enclose the initializer of the union member, as follows: struct ident stuff = { { "abcd", KEYWORD, {KW_ABCD}}, /* ^^^^^^^^^^^ */ /* ... */ }; --- Shankar