2016-07-22 3 views
2

offsetof 매크로 및 구조체 및 클래스에 대한 sizeof 연산자가 있습니다.
조회 할 수있는 비트 비트 필드 멤버의비트 크기을 상쇄하도록 비트 필드 비슷한 기능을 얻을 수있는 방법이 있습니까?비트 필드에 대한 offsetof 및 sizeof와 같은 기능

sizeof#define field_name_size n을 사용하여 에뮬레이션,하지만 하나는 비트 필드의 모든 이전의 회원을 고려하여 몇 가지 복잡한 공식을 사용하는 것 같다부터 offsetof 위해 나는 그것이 #define field_name_offset를 사용하기에 너무 복잡 될 것이라고 두려워 할 수있다.

어떤 경우에는 코드를 수동으로 비트 필드 정의와 동기화해야 할 필요가 없으므로 오류가 발생하기 쉽습니다.
한 예로 비트 필드의 멤버에 인터 로크 쓰기가 있는데, 컴파일러는이를 제공하지 않기 때문에 이러한 멤버에 쓰기 위해 사용자 지정 함수를 사용해야합니다.
또한 컴파일러가 비트 필드 레이아웃을 약간 다르게 구현할 수 있음을 이해합니다. 그러한 매크로/연산자를 사용할 수있게되면 해당 문제의 영향도 줄어 듭니다.

+2

_ "비트 필드에 대해 비슷한 기능을 사용하여 비트 필드 멤버의 비트 오프셋 및 비트 크기를 쿼리 할 수 ​​있습니까?"_ 저는 인식하지 못했습니다. –

+0

무엇 @ @ πάνταῥεῖ는 –

+0

라고 말합니다. @Cheers 그럼 우리는 적어도 두 개입니다 ;-) ... –

답변

2

비트 필드 구성원에 대한 비트 오프셋 및 비트 크기를 쿼리 할 수 ​​있도록 비트 필드에 비슷한 기능을 사용할 수있는 방법이 있습니까?

아니요,이를 수행 할 방법이 없습니다. 비트 필드 오프셋은 비트 필드 멤버에서 추론 할 수 없습니다.

또한 sizeof()은 항상 기본 유형의 크기를 반환하며 최소값은 char이므로 검색하는 최소 크기는 1입니다.

0

아니요, 없습니다. 그리고 이것은 비트 필드를 피하고 산술 및 완전하고 주소 지정이 가능한 정수 유형을 사용하여 비트 배열 및 유사 비트를 수행해야하는 많은 이유 중 하나입니다.