3

更具体的问题是这个问题:我可以在一个结构中添加多少位字段条目?

例如:

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

4

2 回答 2

3

没有限制,重要的是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;

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

于 2013-11-12T16:06:10.983 回答
2

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

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

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

于 2013-11-12T19:20:47.657 回答