Clang警告的含义" -Wsigned-enum-bitfield"

时间:2017-07-20 13:18:57

标签: c++ clang portability bit-fields

请向我解释" -Wsigned-enum-bitfield" Clang警告。

在我的代码中,我得到了一个带有位域struct的定义:

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

options.alignment = Qt::AlignLeft;

使用Clang编译此代码时,我收到以下警告:

  默认情况下,Microsoft ABI中的

枚举是有符号整数;考虑   为枚举Qt::AlignmentFlag提供一个无符号的基础类型来生成此代码   便携

枚举Qt::AlignmentFlag是我的代码的外部,我无法更改它。我倾向于忽略这个警告。如果我保留此代码,可能会发生的最糟糕的事情是什么?

1 个答案:

答案 0 :(得分:1)

如果枚举使用全部9位,则在读取时会得到负数。在将其与其他值进行比较时,可能会给您带来问题。