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

is it bad practice to have bit-fields and other data types as fields in a single struct in C90?

我在 C:

中有这个结构
typedef struct Set {
    unsigned int state : 1;
    char array[LEN];
} Set;

在编译和执行时,我注意到位域实际上改变了 char 数组本身的一位!所以我想知道这是否是一个已知问题,在一个结构中使用其他数据类型的位域是一种不好的做法,或者我没有做正确的事情。

废话!

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

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

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