在 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 中重新定义关键字。)
我在 C:
中有这个结构typedef struct Set {
unsigned int state : 1;
char array[LEN];
} Set;
在编译和执行时,我注意到位域实际上改变了 char 数组本身的一位!所以我想知道这是否是一个已知问题,在一个结构中使用其他数据类型的位域是一种不好的做法,或者我没有做正确的事情。
废话!
请放心,struct
的元素总是 布局,因此它们在内存中是不相交的。
您的程序显然具有导致 未定义行为 的构造 - 很可能您正在索引 array[-1]
或类似内容。
(除非一些聪明的 alec 写了 #define struct union
:它的行为也是未定义的,因为你不应该在 C 中重新定义关键字。)