8.44 Structure, union, enum, and bitfield extensions

The following structure, union, enum, and bitfield extensions are supported.

  • In C, the element type of a file-scope array can be an incomplete struct or union type. The element type must be completed before its size is required, for example, if the array is subscripted. If the array is not extern, the element type must be completed by the end of the compilation.
  • The final semicolon preceding the closing brace } of a struct or union specifier can be omitted. A warning is issued.
  • An initializer expression that is a single value and initializes an entire static array, struct, or union, does not have to be enclosed in braces. ISO C requires the braces.
  • An extension is supported to enable constructs similar to C++ anonymous unions, including the following:
    • Not only anonymous unions but also anonymous structs are permitted. The members of anonymous structs are promoted to the scope of the containing struct and looked up like ordinary members.
    • They can be introduced into the containing struct by a typedef name. That is, they do not have to be declared directly, as is the case with true anonymous unions.
    • A tag can be declared but only in C mode.
    To enable support for anonymous structures and unions, you must use the anon_unions pragma.
  • An extra comma is permitted at the end of an enum list but a remark is issued.
  • enum tags can be incomplete. You can define the tag name and resolve it later, by specifying the brace-enclosed list.
  • The values of enumeration constants can be given by expressions that evaluate to unsigned quantities that fit in the unsigned int range but not in the int range. For example:
    /* When ints are 32 bits: */
    enum a { w = -2147483648 };  /* No error */
    enum b { x = 0x80000000 };   /* No error */
    enum c { y = 0x80000001 };   /* No error */
    enum d { z = 2147483649 };   /* Error */
    
  • Bit fields can have base types that are enum types or integral types besides int and unsigned int.
Related concepts
4.62 New language features of C99
Related reference
9.71 Pragmas
Non-ConfidentialPDF file icon PDF versionARM DUI0375E
Copyright © 2007, 2008, 2011, 2012, 2014 ARM. All rights reserved.