【问题标题】:Is there a maximum number of bit field entries in a C structure?C 结构中的位字段条目是否有最大数量?
【发布时间】:2013-11-12 16:01:33
【问题描述】:

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

例如:

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(或任何系统架构)?

【问题讨论】:

  • 位数取决于变量的类型。因此,如果 int 是 2 个字节长(记住 int 的大小取决于平台),最大值将是 int number:16
  • @hhachem:每个字节的位数也取决于实现。
  • @EricPostpischil 好点。字节中的位数也取决于平台,因此人们在提到 8 位时仍然使用术语“八位字节”;)

标签: c struct bit-fields


【解决方案1】:

不限,重要的是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;

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2011-02-08
      • 2014-01-26
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多