Hallo zusammen,
ich verstehe gerade nicht, was mein Compiler aus meinem struct macht und
warum.
Das ist mein struct:
1 | __extension__ typedef struct {
|
2 | unsigned char i2cError : 1;
|
3 | unsigned char overCurrent : 1;
|
4 | unsigned char stepLoss : 1;
|
5 | unsigned char electricalDefect : 1;
|
6 | unsigned char thermalWarning : 1;
|
7 | unsigned char thermalError : 1;
|
8 | unsigned char chargePumpFail : 1;
|
9 | unsigned char noMotor : 1;
|
10 | unsigned char stuff : 7;
|
11 | unsigned char unexpectedBehaviour : 1;
|
12 | } __attribute__((packed)) tmc222Diag_t;
|
Gebaut wird das Ganze mit MinGW64 unter Windows 7 mit fast ohne
Optionen:
1 | ...
|
2 | gcc -g -pg -Wall -Wextra -Wpedantic -std=c99 -c -o main.o
|
Und der Ergebnis ist: sizeof(tmc222Diag_t) ist 5!
Ich habe 2 erwartet: Es gibt nirgendwo ernsthafte Bytegrenzen, wo er
irgendeine Form von Alignment durchführen sollte.
An was habe ich nicht gedacht?
Viele Grüße
W.T.