小编fsa*_*asm的帖子

枚举是位域实现定义的类型吗?

我试图更好地理解 C99 标准,但现在我对将枚举用作结构中的位域以及它们是否被视为 int 或实现定义的类型感到困惑。在查找 C99 的最终草案时,我发现第 6.7.2.1 段。4

位域的类型应为_Boolsigned intunsigned int或其他一些实现定义类型的限定或非限定版本 。

和 6.7.2.2 段。4

每个枚举类型应与char、有符号整数类型或无符号整数类型兼容。类型的选择是实现定义的,但应能够表示枚举的所有成员的值。...

所以我尝试使用这个简单的源代码

enum e {
    E0, E1
};

struct s {
    enum e bitfield : 4;
};
Run Code Online (Sandbox Code Playgroud)

我可以使用 gcc-5.0 和 clang-3.5 在没有警告的情况下编译它,-std=c99 -Wall -Wextra -pedantic但是我在 gcc-4.8 中得到以下警告

warning: type of bit-field 'bitfield' is a GCC extension
Run Code Online (Sandbox Code Playgroud)

这里开始混乱。枚举作为位域是否被视为 int 或实现定义的类型?这是 GCC-4.8 中的错误还是他们改变了对标准的解释?将它与其他 C99 编译器一起使用是否安全?

c c99 language-lawyer

6
推荐指数
1
解决办法
1596
查看次数

标签 统计

c ×1

c99 ×1

language-lawyer ×1