2013-05-30 1 views
1

C에서 이름없는 비트 필드를 어떻게 사용합니까?
변수 이름없이 C의 비트 필드

예 :

라인의 사용은 무엇
typedef struct fun { 
unsigned int     :8; 
unsigned int foo1   :1; 
unsigned int foo2   :1; 
unsigned int foo3   :1; 
unsigned int foo4   :1; 
unsigned int foo5   :1; 
}dig; 

: 그것은 익명의 비트 필드라고

unsigned int     :8; 
+0

향후 확장을 위해 처음에 8 비트를 예약 하시겠습니까? 당신은 정말로 저자에게 왜 그가 그 책을 그에게 넣었는지를 물어야합니다. 우리가 할 수있는 것은 추측입니다. –

답변

5

가. 그것은 가능한 사용에 대한 C11 표준 상태 :

6.7.2.1 구조와 노동 조합의 구체적인 ERS가

없는 선언자와의 비트 과학 ELD 선언,하지만 콜론 와 폭은 익명의 비트 과학 ELD를 나타냅니다 . 106) 특수 문자 인 의 경우, 너비가 0 인 비트 필드 구조 멤버는 이전의 비트 필드가있는 단위에 추가 비트 필드가 포함되지 않도록 나타냅니다 ( ).

106) 익명의 비트 필드 구조 멤버는 외부에서 부과 된 레이아웃을 따르는 데 유용합니다.

+0

따라서 8 개의 이름이 지정된 비트 필드 변수 (foo [0-7] : 1)가 있다면 이는 8 개의 (이름이없는) +8 (8 개의 명명 된 비트 필드) 비트 메모리를 할당한다는 의미입니까? – ted

+0

예. 기본적으로 추가 비트는 처음에 할당 (또는 예약)됩니다. –

0

이와 같은 언니 드 비트 필드는 여러 가지 이유로 사용될 수 있습니다. 이미 언급 한 한 가지 이유는 사용되지 않은 값이있는 외부 레이아웃과 일치시키기 위해 다른 값을 채우기 위해서입니다. 하드웨어에 직접 매핑하는 데이 방법을 사용하는 것을 보았습니다.

당신이 누군가가 당신이 제공 한 필드를 사용하는 비트를 설정하는 것이 가능하다 사용되지 않고 당신이 만드는 그것을 이름을 지정하지 않음으로써 나타낼 수있는 이름을 부여 할 수 있지만 그들은 또한 향후 확장

에 대한 이름이 남아있을 수

사용자는 비트를 설정하기 위해 농구를 뛰어 넘는다. 또한 unnamed1, unnamed2 등 비트 필드가 산란합니다.

예를 들어 마이크로 프로세서에는 디버거가 사용하는 비트가 있으며, 이름을 지정하지 않으면 개발자가 설정하기가 더 어려워집니다 우연히.

문제는 이전 버전에서 발생했으며 동료가 사용했습니다. 컴파일러와 헤더의 업데이트 및 더 이상 건물 코드