brad@ds3.bradley.edu (Bradley E. Smith) (11/04/90)
Hi, I realize that the program below is not quite right(or proper) but I
am trying to move our 'pic' source from a VAX to a SUN SPARC. The below
program works ok on a VAX, AT&T 3B2, IBM RT but dumps core on a SUN. I
always thought that unions were passed by value. Anyways I need this
program to work, or I will have to rewrite a bunch of things.
Is it me or is the compiler bugging (FYI: 4.0.3 and 4.1 have the same
problem, and gcc does the same thing).
union u {
int i;
long l;
char c;
float f;
char *cp;
};
main()
{
union u x,z;
x.i = 100;
z.i = 99;
printf("sizeof(u) = %d\n", sizeof(x));
printf("sizeof(int) = %d\n", sizeof(int));
(void) doit(x,z);
(void) doit(0,0);
exit(0);
}
doit(a,b)
union u a;
union u b;
{
(void) printf("%d, %d\n", a.i, b.i);
}henry@zoo.toronto.edu (Henry Spencer) (11/21/90)
In article <1990Nov4.031554.3208@rice.edu> brad@ds3.bradley.edu (Bradley E. Smith) writes: > union u x,z; > (void) doit(x,z); > (void) doit(0,0); Did you try running "lint" on this? You will find type mismatches. `0' is not a union value; it cannot be passed to a function that is expecting to get a union. On some machines this accidentally works, but on a lot of modern ones, it doesn't. There is no such thing as a "union constant" in C, so you'll have to assign `0' to a union variable and pass the variable. "I don't *want* to be normal!" | Henry Spencer at U of Toronto Zoology "Not to worry." | henry@zoo.toronto.edu utzoo!henry