请向我解释"-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
在我的代码外部,我无法更改它。我倾向于简单地忽略这个警告。如果我保持此代码不变,可能发生的最坏情况是什么?
如果枚举使用所有 9 位,则在读回时会得到一个负数。将其与其他值进行比较时可能会给您带来问题。