Bit-Felder vom Typ als int?

Habe ich einen code verwendet bit-Felder wie folgt deklariert

typedef struct my{
    const char *name;
    uint8_t is_alpha : 1;   
    uint8_t is_hwaccel : 1; 
    uint8_t x_chroma_shift; 
    uint8_t y_chroma_shift; 

} mystr; 

uint8_t ist typedef ' ed zu unsigned char.

Bau den code in MS-VS 2008 verwenden diese bit-Felder gibt eine Warnung wie folgt:

imgconvert.c(60) : warning C4214: nonstandard extension benutzt : bit-Feld andere Typen als int.
  1. Gibt es irgendwelche Probleme/potentielle Probleme mit der Verwendung von bit-Feldern von anderen Typ als int? Warum die Warnung?
  2. Anderen als int-Datentyp bit-fileds Sie dürfen von C99 der C-Sprache Spezifikation?
  • Die Warnung ist selbsterklärend: Nichtstandard-Erweiterung verwendet ; der code kann haben Portabilität Probleme.
  • Typ int ist nützlich, aus Portabilität Aspekte nur, wenn alle Ziele/compiler haben die gleiche Größe von ints.
  • Sie sind schriftlich über die bitfields hier, Ihre Größe ist im code angegeben.
  • Das problem ist nicht die Größe der Bitfeld (es ist angegeben), aber die Größe der maximalen Bitfeld (nicht größer als die type) oder die Polsterung (zwei 1-bits sind verpackt in 8bit-int mit 6 unbenutzte bits, die für ein int, es wäre 2 verwendet und 30 frei).
  • Einem anderen thread, die Sie interessieren könnten: stackoverflow.com/questions/54719855/...
InformationsquelleAutor goldenmean | 2010-02-17
Schreibe einen Kommentar