Das wäre in §6.7.2.1 Struktur- und Gewerkschaftsspezifizierer
12) Eine Bitfeld-Deklaration ohne Deklarator, aber nur ein Doppelpunkt und eine Breite, zeigt an unbenanntes Bitfeld. 126
Die Fußnote erklärt, warum solche Dinge existieren:
126 Ein unbenanntes Bit-Feld-Strukturelement ist nützlich, damit Padding extern zugewiesenen Layouts entspricht.
Gleichwohl heißt es im selben Teil des Standards (Absatz 8) auch:
Wenn die struct-declaration-list keine benannten Member enthält, weder direkt noch über eine anonyme Struktur oder eine anonyme Union, ist das Verhalten undefiniert.
Aber einige Compiler (GCC und zumindest Clong) erlauben dies trotzdem, als Erweiterung.
Die Verwendung ist ein bisschen begrenzt, wenn das das einzige Bitfeld in der Struktur ist, aber nicht unmöglich zu verwenden, wie ouah veranschaulicht .
Der Standard fährt mit einer anderen "Kuriosität" fort:
Als Spezialfall gibt ein Bitfeldstrukturelement mit einer Breite von 0 an, dass kein weiteres Bitfeld in die Einheit gepackt werden soll, in der das vorherige Bitfeld, falls vorhanden, platziert wurde.
Dieses Programm ruft undefiniertes Verhalten auf.
C sagt:
(C99, 6.7.2.1p7) "[...] Wenn die struct-declaration-list keine benannten Member enthält, ist das Verhalten nicht definiert."
Jetzt akzeptieren einige Compiler es als Erweiterung. Wie kann das nützlich sein?
Zum Beispiel für Linux Kernel berühmt BUILD_BUG_ON_ZERO
Makro:
Um zu sehen, was dieses Makro bewirkt, können Sie hier sehen.
Nun, gemäß der Sprachspezifikation, wenn Ihr Programm einen Strukturtyp ohne benannte Elemente enthält, ist das Verhalten nicht definiert. (Auf die Frage, warum es nicht offiziell als Zwangsverletzung anerkannt ist, habe ich keine unmittelbare Antwort.) Es ist in 6.7.2.1/7
angegebenDie struct-declaration-list ist eine Abfolge von Deklarationen für die Mitglieder der Struktur oder Vereinigung. Wenn die Struktur-Deklarationsliste enthält keine benannten Mitglieder, das Verhalten ist nicht definiert.
Abgesehen davon ist eine solche Erklärung nicht wirklich "nützlich", da das einzige, was sie produziert, ein undefiniertes Verhalten ist.