Описание тега anonymous-struct

In ISO C11 (and some extensions of ISO C++) an anonymous struct is a data member of struct type, whose members are treated as members of the enclosing struct or union. It is declared as `struct { /* members */ };`.

In C starting with the 2011 ISO standard (and some extensions of ISO C++) an anonymous struct is a data member of struct type, whose members are treated as members of the enclosing struct or union. It is declared as struct { /* members */ };.

Anonymous structs should not be confused with unnamed structs (which are an official C++ feature). That is a struct that has simply been given no name, such as in the following case:

// The type of "lineInfo" is an *unnamed struct*, 
// but "lineInfo" is _not_ an *anonymous struct*
struct {
   int lineNumber;
   int length;
} lineInfo;

In the following, the struct that contains byte0 and byte1 is anonymous, and those two members become members of the enclosing union, so that things.byte0 becomes valid:

union {
  struct {
    char byte0;
    char byte1;
  };
  char bytes[2];
} things;