0

我在 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 */

}

谢谢。

4

1 回答 1

0

这是一种叫做“位域”的东西。它用于内存优化。它使您可以将类型存储在比您需要的更少的空间中。

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

#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.ageto的大小0?这是因为:3. 这也意味着您的unsigned char active:1;示例非常适合存储布尔值:它只能是 true 或 false,它不会意外存储 255(恰好是 an 的最大值unsigned char)。

于 2013-09-04T12:58:55.000 回答