1 Pluspunkt 0 Minuspunkte

Ich verstehe nicht ganz was dieser Code macht. Ich dachte der Member x der Struktur B würde dabei auf 1 gesetzt werden weil man ja den = Operator innerhalb des typedef nicht nutzen kann? Aber es scheint trotzdem 0 zu sein.

#include <stdio.h>

typedef struct a {
    int x;
} A;

typedef struct b {
    int x : 1;
} B;

int main(int argc, char **argv) {

    A a = { 2 };
    B b;
    B *c;

    printf("%d, %d, %d", a.x, b.x, c->x);

}
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte
Das ist ein Bitfeld, das :1 bedeutet "1 Bit breit", also sind sie in Ihrem Fall alle booleschen Werte - 0 oder 1. Der Compiler soll dabei die Platznutzung optimieren, indem er mehrere davon in ein Byte (8 Bit) packt.
von (716 Punkte)