C언어 > [펌] C언어 문법: Bit field (콜론 연산자)

TODAY218 TOTAL2,275,327
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | C언어 | C언어 | [펌] C언어 문법: Bit field (콜론 연산자)

페이지 정보

작성자 키트 작성일2017-09-12 12:58 조회1,264회 댓글0건

본문

C언어 문법: Bit field (콜론 연산자)  - 리눅스/안드로이드

리눅스 커널 소스를 살펴보다가 스트럭쳐 안에 이상한 형식의 변수 선언을 보았다.

struct task_struct {
     ...
     unsigned did_exec:1;
     ...
};

이런 형태였는데, 변수를 선언한 다음 콜론(:)과 숫자가 오는 형태는 여지껏 본 적이 없었다.
구글링을 하여 찾아보니 bit field라는 이름의 C언어의 문법 중 하나라는 것을 알게 되었고
위키피디아에서 좀 더 자세한 글을 찾게 되어 번역해 보았다.

미리 이야기하자면 위의 구문은 did_exec라는 1bit짜리 변수를 선언한 것이다.

=======================================================================================
출처: http://en.wikipedia.org/wiki/C_syntax (Bit fields의 번역)

C언어는 bit field라고 알려진 특별한 형식의 스트럭쳐 멤버를 제공한다.
bit filed는 bit의 수를 명시한 integer 변수이다. bit filed는 signed int, unsigned int 혹은
_Bool의 스트럭쳐 멤버 형식과 멤버의 이름을 명시한 후 콜론을 쓰고 멤버 변수가 갖게 될 bit의 수를 적는다.
bit field의 총 bit 수는 명시된 형식의 최대 bit 수를 넘을 수 없다.

C언어 문법의 특별 예외 사항으로, sined 나 unsigned를 명시하지 않으면 정의된
int의 타입이 singed인지 unsigned인지 알 수 없다. 따라서 이식성(potability)을 위해 모든 스트럭쳐 멤버는
singed, unsigned를 명시하는 것을 권장한다.

콜론과 비트의 수로 이루어진 빈 bit field 엔트리도 허용하는데 이것은 padding을 의미한다.
bit field의 멤버는 주소를 갖지 않기 때문에 & 주소 연산자를 사용할 수 없다.
또한 bit field는 sizeof 연산자도 사용할 수 없다.

아래의 선언문은 f 타입으로 명명되고 g라는 인스턴스를 갖는 새로운 스트럭쳐를 정의한다.
각 멤버의 선언에 대해 간략히 주석을 달아놓았다.

struct f
{
    unsigned int  flag : 1;   -- bit flag: on(1) 또는 off(0)의 값을 가질 수 있다. --
    signed int    num : 4;   -- signed 4-bit field; -7...7 또는 -8...7의 값을 갖는다. (???) --
    : 3;                            -- 스트럭쳐를 8bit로 맞추기 위한 3bit의 padding bit --
} g;

댓글 0

조회수 1,264

등록된 댓글이 없습니다.

C언어HOME > C언어 > C언어 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기