본문 바로가기

Programming/C Programming

struct 변수 사용 bit 한계 설정하기

다음과 같이 사용이 가능하다.


 
 struct i2c_gpio_platform_data {
 unsigned int sda_pin;
 unsigned int scl_pin;
 int  udelay;
 int  timeout;
 unsigned int sda_is_open_drain:1;
 unsigned int scl_is_open_drain:1;
 unsigned int scl_is_output_only:1;
}; 

이것의 의미는 해당 변수에서 오로지 N bit 만 사용하겠다는 의미 이다.
즉, 변수 사용상의 명확성을 준 것이다.
그리고 선언시에만 가능하다.

간단히 Test code 를 보자.

 
// 각각 1, 2 ,3 bit 만 사용하도록 set
struct AAA{
 unsigned int a:1;
 unsigned int b:2;
 unsigned int c:3;
};

int main(int argc, const char *argv[])
{
 struct AAA aaa = {
  .a = 1,
  .b = 1,
  .c = 1,
  };
  
// 이건 변수 초기화 임 - 헷갈리지 말자.
 struct AAA aaa2={
  a:3,
  b:3,
  c:3,
  };
  
 struct AAA bbb={ 
  a:4,
  b:4,
  c:4,
  };
 
 printf("aaa = %d, %d, %d \n", aaa.a, aaa.b, aaa.c);
 printf("aaa2 = %d, %d, %d \n", aaa2.a, aaa2.b, aaa2.c);
 printf("bbb = %d, %d, %d \n", bbb.a, bbb.b, bbb.c);
 
 return 0;
 
}
결과
aaa = 1, 1, 1
aaa2 = 1, 3, 3
bbb = 0, 0, 4


자신이 사용하도록 정해진 bit 만 set 된다.
중간에 함수내에 초기화와 헷갈리지 말자.

C는 모든것을 알고 있을것 같은데, 가끔은 생소한 문법들이 있다는것이 나를 놀라게 한다.


ps. 최초 posting 할때에는 초기화 루틴과 헷갈려서 잘못된 내용이 전달되었군요.
알려주신 박준영씨 감사합니다.


'Programming > C Programming' 카테고리의 다른 글

__read_mostly keyword  (0) 2010.06.29
전처리기 사용 : define ##  (0) 2010.02.23
[TIP] easy mistake casting buffer  (0) 2009.09.21
AtoH function  (0) 2009.09.11
해더파일을 통한 배열 입력  (2) 2008.11.04