更具体的问题是这个问题:我可以在一个结构中添加多少位字段条目?
例如:
struct SMyStruct
{
unsigned int m_data1 : 3;
unsigned int m_data2 : 1;
unsigned int m_data3 : 7;
// ...
unsigned long long m_datan : 42;
};
位的总数可能超过 32 或 64(或者系统架构是什么)?
更具体的问题是这个问题:我可以在一个结构中添加多少位字段条目?
例如:
struct SMyStruct
{
unsigned int m_data1 : 3;
unsigned int m_data2 : 1;
unsigned int m_data3 : 7;
// ...
unsigned long long m_datan : 42;
};
位的总数可能超过 32 或 64(或者系统架构是什么)?
没有限制,重要的是bit-fields的数量不能大于数据类型的bits的数量,例如:
typedef struct _Structure {
int field1:32; // OK
int field2:40; // Error, int is 32 bit size
char field3:4; // OK
char field4:9; // Error, char is 8 bit size
} Structure;
数据类型的大小、位域的数量和字节序取决于硬件/编译器。
C 标准不需要实现能够翻译具有超过 1023 个成员的程序struct
。C 2011 (N1570) 5.2.4.1 1:
实现应能够翻译和执行至少一个程序,该程序至少包含以下每个限制的一个实例:……单个结构或联合中的 1023 个成员……</p>
一个实现可能无法翻译一些成员较少的程序,只要它可以翻译至少一个具有 1023 个成员的程序(以及其他限制)。任何适度质量的实现都将能够处理任何合理数量的成员,包括位字段。