使用带有无符号字符的位字段时发出警告



这是我的位域

struct {
    unsigned char v64 : 1;
    unsigned char leg : 7;
} valid;

然后我收到警告:

main.c:17:3: warning: type of bit-field ‘v64’ is a GCC extension [-pedantic]
main.c:18:3: warning: type of bit-field ‘leg’ is a GCC extension [-pedantic]

如果我更改为int则没有警告。但我想要一个字节的位域(无符号字符)。

如何?

如果您不想收到警告,请删除gcc -pedantic选项。

在 C99 中,gcc发出带有 -pedantic 的警告,但允许为位字段定义实现类型(如 unsigned char )。

(C99, 6.7.2.1p4) "位字段的类型应是 _Bool、有符号的 int、无符号 int 或其他一些实现定义的类型的限定或非限定版本。

在C90中,只允许使用intunsigned intsigned int

(C90, 6.5.2.1)"位字段的类型必须是 int、无符号 int 或有符号 int 之一的限定或非限定版本"

实际上,在 C90 和 C99 中,C 都不需要警告(仅在 C90 中是未定义的行为,但 C 不需要对未定义行为发出警告)。警告由gcc添加,-pedantic仅供参考。

最新更新