C 带“quot;”的结构成员声明:1“;
我在linux内核文件include/sound/soc dapm.h中发现了这种结构。 我对其成员的声明感到困惑。我在谷歌上查找了它,但找不到任何有用的东西。 如果有人能解释为什么每个变量声明后都有:1,那将是很大的帮助。这是代码的一部分C 带“quot;”的结构成员声明:1“;,c,variables,structure,declaration,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;
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 */
}
谢谢。这是一种叫a的东西。它用于内存优化。它允许您在比其他方式所需的更少的空间中存储类型
(代码来自上面的链接)
请注意,指定大于23的值如何将
Age.Age
的大小减小到0
?这是因为:3
。这也意味着未签名字符处于活动状态:1代码>示例非常适合存储布尔值:它只能为真或假,不能意外存储255(恰好是无符号字符的最大值)。它被称为位字段。这里有一个教程解释它们
#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;
}