c - 在 C90 中将位字段和其他数据类型作为单个结构中的字段是不好的做法吗?

标签 c struct bit-fields

我在 C: 中有这个结构

typedef struct Set {
    unsigned int state : 1;
    char array[LEN];
} Set;

在编译和执行时,我注意到位字段实际上改变了 char 数组本身中的一位!所以我想知道这是否是一些已知问题,并且在一个结构中包含具有其他数据类型的位字段是一种不好的做法,或者我没有正确执行某些操作。

最佳答案

废话!

请放心,struct 的元素总是进行布局,因此它们在内存中是不相交的。

您的程序显然有一个导致未定义行为的构造 - 很可能您正在索引array[-1]或类似的内容。

(除非某些聪明的 alec 编写了 #define struct union:其行为也是未定义的,因为您不应该在 C 中重新定义关键字。)

关于c - 在 C90 中将位字段和其他数据类型作为单个结构中的字段是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41299293/

相关文章:

c - 在 C 中修改字符串数组中的字符串

c - 标准 C 中的 sizeof 与 sizeof()?

go - 使用值创建结构实例

gcc - __attribute__((packed)) 和 __attribute__((__packed__))

c++ - 什么时候以及为什么要在代码中使用位域?

c - 包含位域的结构的大小

c++ - 防止 GCC 对结构 union 中的位域重新排序

c - 在 C 中使用 Makefile 处理多个文件

c - 测量进程上下文切换

c - 将包含 vector 的结构传递给 CUDA 内核