32

For example, say we have a union

typedef union {
unsigned long U32;
float f;
}U_U32_F;

When a variable of this union type is declared, is there a way to set an initial value?

U_U32_F u = 0xffffffff;   // Does not work...is there a correct syntax for this?
timrau
  • 22,578
  • 4
  • 51
  • 64
semaj
  • 1,555
  • 1
  • 12
  • 25

3 Answers3

41

Use an initializer list:

U_U32_F u = { 0xffffffff };

You can set other members than the first one via

U_U32_F u = { .f = 42.0 };
Christoph
  • 164,997
  • 36
  • 182
  • 240
4

Note that per-member union initialization doesn't work on pre-C99 compilers, of which there is a depressing number out there. The current Microsoft C compiler doesn't support it, for example. (I vaguely recall it doesn't even support first-member initialization, which goes back to K&R II, but I might be wrong about that.)

ceo
  • 1,138
  • 1
  • 8
  • 16
  • 4
    Microsoft more or less abandoned C and wants you to use C++ (or even better yet: C#); I'm quite content with MinGW, now that gcc-4.4 is out; in the future, Clang/LLVM might be a viable alternative as well if you're looking for a free compiler – Christoph Jan 27 '10 at 23:22
  • 2
    The Microsoft C compiler does not (and to my knowledge has not, nor will) conform to any particular standard. – Mathieu K. Feb 10 '16 at 09:24
3

Try U_U32_F u = {0xffffffff};

Alexander Gessler
  • 45,603
  • 7
  • 82
  • 122