除int之外的其他类型的位域?

gol*_*ean 10 c visual-c++ bit-fields

我有一个代码,它使用如下声明的位字段

typedef struct my{
    const char *name;
    uint8_t is_alpha : 1;   
    uint8_t is_hwaccel : 1; 
    uint8_t x_chroma_shift; 
    uint8_t y_chroma_shift; 

} mystr; 
Run Code Online (Sandbox Code Playgroud)

uint8_t是typedef'ed unsigned char.

使用此位字段在MS-VS 2008中构建代码会发出如下警告:

imgconvert.c(60) : warning C4214: nonstandard extension used : bit-field types other than int.
  1. 使用除int之外的其他类型的位字段是否存在任何问题/潜在问题?为什么警告?
  2. C99 C语言规范是否允许使用int类型的bit-fileds以外的其他文件?

dir*_*tly 6

1] 使用除 int 类型以外的位字段是否有任何问题/潜在问题?为什么会有警告?

由于位域是低级的,如果您使用非标准类型,则可能存在可移植性问题。因此警告 - 请注意,它仍然是警告而不是错误。

2] C99 C 语言规范是否允许除 int 类型以外的位文件?

来自C99的草案:

6.7.2.1 结构和联合说明符

4 位域的类型应为 _Bool、signed int、unsigned int 或其他实现定义类型的限定或非限定版本。

  • 在标准文档中,“其他一些实现定义的类型”不是非常无用吗? (11认同)