我在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 */
}
感谢。
答案 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}})。