共用体
C言語は(タグなし)共用体をサポートしている。Cの共用体は全てのメンバのオフセットが0である(つまり先頭バイトから始まる)構造体であり、宣言に予約語structではなく共用体を意味するunionを使うことを除いて構造体と全く同じ構文で宣言・定義される。またメンバへのアクセスも構造体と同様に.演算子あるいは->演算子で行える。共用体全体のサイズは少なくともメンバの中で最大のものを格納できる大きさに決められる(後ろにパディングされる可能性がある)。
共用体の初期化は、先頭で宣言したメンバの型で行わなければならない。
構造体を含む共用体については配置について特別な規定があり、共用体のメンバとして、先頭のメンバの型が同じである構造体を複数持つ場合は、それらの構造体の先頭メンバに限り、正確に重なり合うことが保証される。つまり、先頭メンバは別の構造体の先頭メンバの名前でも正しく参照できる。この仕様は似たような構成の構造体を集めた共用体で、先頭メンバをタグ情報として使うために役立つ。
C99までは無名の構造体および共用体が許可されていなかったが、C11では許可されるようになった。