带有“:1”的结构成员声明

时间:2013-09-04 12:33:14

标签: c variables structure declaration

我在linux内核文件中找到了这个结构include / sound / soc-dapm.h。 我对其成员的声明感到困惑。我在谷歌上寻找它但找不到任何信息。 如果有人能解释为什么在每个变量声明后都有:1,那将是很有帮助的。这是代码的一部分。

struct snd_soc_dapm_widget {

    unsigned int off_val;                   /* off state value */
    unsigned char power:1;                  /* block power status */
    unsigned char invert:1;                 /* invert the power bit */
    unsigned char active:1;                 /* active stream on DAC, ADC's */
    unsigned char connected:1;              /* connected codec pin */

}

感谢。

1 个答案:

答案 0 :(得分:0)

这是一种叫做"bit field"的东西。它用于内存优化。它允许您以比您需要的更小的空间存储类型。

(来自上述链接的代码)。

#include <stdio.h>
#include <string.h>

struct
{
  unsigned int age : 3;
} Age;

int main( )
{
   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );

   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );

   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );

   return 0;
}

输出:

Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0 

注意如何分配高于2 3 的值会将Age.age的大小减少到0?这是因为:3。这也意味着你的unsigned char active:1;示例非常适合存储布尔值:它只能 为真或假,它不会意外存储255(这恰好是{的最大值{1}})。