结构双输出

时间:2011-12-24 14:59:28

标签: c struct bit-fields

struct node
{
    double a : 23;
    int b;
}s;
int main()
{    
    printf("%d\n",sizeof(s));
}

为什么会产生编译错误?我想知道为什么我们不能用双数据类型做位域。

4 个答案:

答案 0 :(得分:5)

我的回答是C.我不知道它是否适用于C ++ 我建议你不要尝试编写多语言源文件。这很辛苦。

  • printf
  • 范围内没有原型
  • sizeof(s)的类型和"%d"所需的类型不匹配
  • 在main(C89)中缺少return 0;

你得到什么编译器错误?


  

我想知道我们不能用双数据类型

做按位

因为the C99 Standard这样说,例如(强调是我的)

  

6.7.2.1/9

     

比特字段被解释为由指定的有符号或无符号整数组成的   比特数。

答案 1 :(得分:4)

  

C提供了一种特殊类型的结构成员,称为位字段,它是integer with an explicitly specified number of bits.

非整数类型不能用作位字段的基类型。

答案 2 :(得分:3)

引自维基:

  

C还提供了一种特殊类型的结构成员,称为位字段,它是一个具有明确指定位数的整数。位字段被声明为int,signed int,unsigned int或_Bool类型的结构成员,后跟成员名称冒号(:)和它应占用的位数。单个位字段中的总位数不得超过其声明类型中的总位数。

在语句double a : 23;中你使用的是bit字段为double,这是一个错误。你应该使用int代替。

编辑: 行为是依赖于实现的使用除了这些之外的任何东西.Char可能在您的系统上工作,但它可能在其他平台上失败,因为它不是标准的一部分。

答案 3 :(得分:2)

是的,你不能将位字段应用于double,这就是它给出编译错误的原因。 只有签名的& amp; unsigned int,_ bool数据类型。