7

这是我的位域

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为没有警告。但我想要一个字节的位域(无符号字符)。

如何?

4

1 回答 1

13

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

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

(C99,6.7.2.1p4)“位域的类型应为 _Bool、signed int、unsigned int 或其他一些实现定义的类型的合格或非合格版本。”

在 C90 中,只允许int,unsigned intsigned int

(C90,6.5.2.1)“位域的类型应为 int、unsigned int 或 signed int 之一的合格或非合格版本”

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

于 2012-06-05T23:16:31.593 回答