Forum: Compiler & IDEs Kurios - GCC aktzeptiert kein Union-Struct. "warning: type of bit-field 'yxz' is a GCC extension"?


von Klaus (Gast)


Lesenswert?

Hallo Zusammen,

arbeite seit vielen Monaten erfolgreich mit einem STM32 und GCC Version
4.3.3 und StandardLib von STM.

Definier ich aber ein Union/Struct
1
typedef union{
2
    u8  test;
3
    struct{
4
    u8 myvalue1:1;
5
    u8 myvalue2:1;
6
    u8 myvalue3:1;
7
    u8 myvalue4:1;
8
    u8 myvalue5:3;
9
    u8 myvalue6:1;
10
  }bit;
11
 }STATUS;

Kommen diese Fehlermeldung, für jedes Struct Mitglied:
1
warning: type of bit-field 'myvalue1' is a GCC extension
2
warning: type of bit-field 'myvalue2' is a GCC extension
3
warning: type of bit-field 'myvalue3' is a GCC extension
4
....

Union hab ich vorher schon verwendet, ohne Stuct kein Problem.

Weiß jemand vielleicht woran das liegen könnte?
GCC extension???

Vielen Dank
Klaus

: Verschoben durch User
von holger (Gast)


Lesenswert?

>Kommen diese Fehlermeldung, für jedes Struct Mitglied:

>warning: type of bit-field 'myvalue1' is a GCC extension

Das ist keine Fehlermeldung sondern ein Hinweis das
deine Bitfields nicht unbedingt von jedem Compiler
so angenommen werden.

von (prx) A. K. (prx)


Lesenswert?

C99: A bit-field shall have a type that is a qualified or unqualified 
version of _Bool, signed int, unsigned int, or some other 
implementation-defined type.

Folglich gibt es bei unsigned char eine Warnung.

von Rolf Magnus (Gast)


Lesenswert?

Klaus schrieb:

> Union hab ich vorher schon verwendet, ohne Stuct kein Problem.

Das hat nichts mit unions und structs zu tun, sondern, wie der Compiler 
ja auch schon schreibt, mit dem Bitfeld.

> Weiß jemand vielleicht woran das liegen könnte?

Laut ISO-C muss ein Compiler bei Bitfeldern nur die Typen int, unsigned 
int und _Bool unterstützen. Ich nehme mal an, daß dieses 'u8' keins 
davon ist.

> GCC extension???

GCC bietet als Erweiterung auch die Möglichkeit, andere Typen für 
Bitfelder zu nutzen. Mit dieser Warnung sagt er dir, daß das 
GCC-spezifisch ist.

von Klaus (Gast)


Lesenswert?

Super vielen Dank für die Hilfe!!
C99 ist drin. Wer häts gedacht.
Klaus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.