2017-07-20 7 views
3

Bitte erklären Sie mir die Bedeutung von "-Wsigned-enum-bitfield" Clang Warnung.Bedeutung der Clang Warnung "-Wsigned-enum-bitfield"

In meinem Code habe ich eine Definition eines struct mit bitfields bekam:

struct Options { 
    BackgroundType backgroundType : 2; 
    LineSpace lineSpace : 2; 
    bool letterSpacing : 1; 
    bool shadow : 1; 
    Qt::AlignmentFlag alignment : 9; 
} options; 

options.alignment = Qt::AlignLeft; 

Beim Kompilieren dieses Codes mit Clang, erhalte ich die folgende Warnung:

Aufzählungen der Microsoft ABI sind vorzeichenbehaftete Ganzzahlen; betrachten ENUM Qt::AlignmentFlag einen unsignierten zugrunde liegenden Typen unter denen diesen Code tragbar

Enum Qt::AlignmentFlag extern zu meinem Code zu machen, und ich kann es nicht ändern. Ich neige dazu, diese Warnung einfach zu ignorieren. Was ist das Schlimmste, was passieren könnte, wenn ich diesen Code so belasse wie er ist?

+0

@BoPersson Bitte geben Sie es als Antwort. –

+0

Ich denke, das vorgeschlagene Duplikat weist bereits auf dieses Szenario hin. –

Antwort

1

Wenn das Enum alle 9 Bits verwendet, erhalten Sie beim Zurücklesen eine negative Zahl. Könnte Ihnen Probleme beim Vergleich mit einem anderen Wert geben.