2013-09-04 2 views
0

이 구조체는 linux 커널 파일 include/sound/soc-dapm.h에서 발견되었습니다. 회원 선언에 대해 혼란 스럽습니다. Google에서 찾았지만 유익한 정보를 찾을 수 없었습니다. 아무도 이유가 무엇인지 설명 할 수 있다면 : 1 모든 변수 선언 다음에 큰 도움이 될 것입니다. 다음은 코드의 일부입니다.": 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

비트 필드라고합니다. –

+1

여기에 자습서가 있습니다. http://www.tutorialspoint.com/cprogramming/c_bit_fields.htm –

답변

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; 
} 

출력 : 2 30-Age.age의 크기를 줄여보다 더 높은 값을 할당하는 방법

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

공지? 이는 :3이기 때문입니다. 이것은 또한 unsigned char active:1; 예제가 부울을 저장하는 데 유용하다는 것을 의미합니다. 만 true 또는 false 일 수 있으며 우연히 255를 저장할 수 없습니다 (이는 unsigned char의 최대 값입니다).