【发布时间】:2010-02-17 12:24:57
【问题描述】:
我有一个使用如下声明的位域的代码
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;
uint8_t 的类型定义为unsigned char。
使用此位字段在 MS-VS 2008 中构建代码会给出如下警告:
imgconvert.c(60) : 警告 C4214: 使用了非标准扩展 : 位域类型不是 int。
- 在使用非 int 类型的位字段时是否存在任何问题/潜在问题?为什么会出现警告?
- C99 C 语言规范是否允许除了 int 类型的位字段?
【问题讨论】:
-
警告非常不言自明:使用了非标准扩展;您的代码可能存在可移植性问题。
-
@Mehrad:仅当所有目标/编译器具有相同大小的整数时,使用类型 int 从可移植性方面才有用。
-
你在这里写的是位域,它们的大小在代码中指定。
-
问题不在于bitfield的大小(是指定的)而是最大bitfield的大小(不大于type)或者padding(两个1位被打包成8bit int和6未使用的位,对于一个 int 它将是 2 个已使用和 30 个空闲)。
-
另一个你可能感兴趣的话题:stackoverflow.com/questions/54719855/…
标签: c visual-c++ bit-fields