C结构中是否存在最大数量的位字段条目?

时间:2013-11-12 16:01:34

标签: c struct bit-fields

更具体地说,问题是:我可以在结构中添加多少位字段条目?

例如:

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(或者系统架构是什么)?

2 个答案:

答案 0 :(得分:3)

没有限制,重要的是位字段的数量不能比数据类型的位数更大,例如:

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;

数据类型的大小,位字段的数量和字节顺序取决于硬件/编译器。

答案 1 :(得分:2)

C标准不要求实现能够在struct中翻译超过1023个成员的程序。 C 2011(N1570)5.2.4.1 1:

  

实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:...单个结构或联合中的1023个成员......

实施可能无法翻译具有较少成员的某些程序,只要它可以翻译至少一个具有1023个成员的程序(以及其他限制)。任何适度质量的实现都将能够处理任何合理数量的成员,包括位字段。