【发布时间】:2016-06-30 12:37:09
【问题描述】:
我需要使用范围枚举,以便我可以将它们作为特定类型传递给我们的序列化程序。我已经为Enum1 的枚举成员给出了明确的整数值。
因此,我已将两个与上述描述匹配的作用域枚举放入位域中
enum class Enum1 {
value1 = 0x0,
value2 = 0x1,
value3 = 0x2
};
enum class Enum2 {
value1 = 0x0,
value2,
value3,
// ...
value14
};
struct Example {
Enum1 value1 : 2;
Enum2 value2 : 6;
}
现在,无论我使用 Example 类型,我都会收到警告“'Example::value1' 太小,无法容纳 'Enum1' 的所有值”,Enum2 也是如此。请注意,我们定义的值并非如此,我们根本不关心这些之外的值。
这在我们的构建过程中是一个相当严重的干扰 - 项目庞大而复杂,我们不想浏览许多这些警告(而且有很多)。
我查看了一个 GCC (G++) 标志来禁用特定警告。有没有我可以在命令行上传递的?理想情况下,如果可能,我会使用警告编译指示在本地禁用它。
此时更改代码结构的余地很小,但我们确实可以使用删除这些虚假警告。
编辑:添加了具有更改标识符的范围枚举。
【问题讨论】:
-
如果 Enum1 包含大于 3 的值,那么它将不适合 2 位
-
你能说明
Enum1和Enum2的定义吗? -
@nikniknik2016:没有
-
@jsren 然后创建一个人工minimal reproducible example 复制相同的问题,然后发布。对于我们看不到的代码,我们无能为力。
-
虽然我不知道它的状态,但有这个gcc bug report
标签: c++ gcc enums bit-fields suppress-warnings