叮当警告"-Wsigned-enum-bitfield"的含义

Meaning of Clang warning "-Wsigned-enum-bitfield"

本文关键字:-Wsigned-enum-bitfield 警告 叮当      更新时间:2023-10-16

请向我解释"-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 位,则在读回时会得到一个负数。将其与其他值进行比较时可能会给您带来问题。