CompuServe Messages

Unions

    19-Dec-94 16:25:50
Sb: #44817-Unions
Fm: Freddy Potargent 100272,2050
To: Shraddhan 70374,754
Hi Shraddhan, The example _should_ work so I suspect an error in DICE. Check out the following program (compiled with the GNU-compiler) and its output: #include <stdio.h> union DoubleFloat { double dp; long li[2]; }; union DoubleFloat df1; int main (void) { printf ("sizeof (df1) : %2d address of df1 : %08p\n" "sizeof (df1.dp): %2d address of df1.dp : %08p\n" "sizeof (df1.li): %2d address of df1.li[0]: %08p\n" " address of df1.li[1]: %08p\n", sizeof (df1), &df1, sizeof (df1.dp), &df1.dp, sizeof (df1.li), &df1.li[0], &df1.li[1]); df1.dp = 1.0; printf ("%lf => %08lx %08lx\n", df1.dp, df1.li[0], df1.li[1]); df1.li[0] = 0x3ff80000; df1.li[1] = 0x00000000; printf ("%08lx %08lx => %lf\n", df1.li[0], df1.li[1], df1.dp); } And the output: sizeof (df1) : 8 address of df1 : 0x7d40ff4 sizeof (df1.dp): 8 address of df1.dp : 0x7d40ff4 sizeof (df1.li): 8 address of df1.li[0]: 0x7d40ff4 address of df1.li[1]: 0x7d40ff8 1.000000 => 3ff00000 00000000 3ff80000 00000000 => 1.500000 Which is the correct output (and the output you expect). Hope this helps, — Freddy