source

":" (콜론) (C structure) - 무슨 뜻이죠?

goodcode 2022. 7. 27. 23:59
반응형

":" (콜론) (C structure) - 무슨 뜻이죠?

struct _USBCHECK_FLAGS
    {
        unsigned char   DEVICE_DEFAULT_STATE       : 1;
        unsigned char   DEVICE_ADDRESS_STATE       : 1;
        unsigned char   DEVICE_CONFIGURATION_STATE : 1;
        unsigned char   DEVICE_INTERFACE_STATE     : 1;
        unsigned char   FOUR_RESERVED_BITS         : 8;
        unsigned char   RESET_BITS                 : 8;
    } State_bits;

무엇인가.:1그리고.:8심술궂은가요?

이것들은 비트 필드입니다.기본적으로 콜론 뒤의 숫자는 필드에서 사용되는 비트 수를 나타냅니다.비트 필드에 대해 MSDN에서 인용한 내용을 다음에 나타냅니다.

상수 표현식은 필드의 너비를 비트 단위로 지정합니다.선언자의 유형 지정자는 부호 없는 int, 부호 있는 int 또는 int여야 하며 constant-expression은 음이 아닌 정수 값이어야 합니다.값이 0인 경우 선언에는 선언자가 없습니다.비트 필드, 비트 필드에 대한 포인터 및 비트 필드를 반환하는 함수의 배열은 허용되지 않습니다.옵션 선언자는 비트필드에 이름을 붙입니다.비트 필드는 구조체의 일부로만 선언할 수 있습니다.주소 연산자(&)는 비트 필드 구성 요소에 적용할 수 없습니다.

이름 없는 비트 필드는 참조할 수 없으며 런타임에 그 내용을 예측할 수 없습니다.정렬을 위해 "더미" 필드로 사용할 수 있습니다.폭이 0으로 지정된 이름 없는 비트필드는 struct-declaration-list에서 그 뒤에 오는 멤버의 스토리지가 int 경계에서 시작됨을 보증합니다.

이 예에서는 screen이라는 이름의 구조체의 2차원 배열을 정의합니다.

struct 
{
    unsigned short icon : 8;
    unsigned short color : 4;
    unsigned short underline : 1;
    unsigned short blink : 1;
} screen[25][80];

편집: MSDN 링크의 다른 중요한 비트:

비트 필드의 의미는 정수 유형과 동일합니다.즉, 비트 필드에 있는 비트 수에 관계없이 동일한 기본 유형의 변수가 사용되는 것과 동일한 방식으로 비트 필드가 식에서 사용됨을 의미합니다.

간단한 샘플이 이를 잘 보여줍니다.흥미롭게도 컴파일러는 혼합 타입으로 디폴트인 것 같습니다.sizeof (int).

  struct
  {
    int a : 4;
    int b : 13;
    int c : 1;
  } test1;

  struct
  {
    short a : 4;
    short b : 3;
  } test2;

  struct
  {
    char a : 4;
    char b : 3;
  } test3;

  struct
  {
    char a : 4;
    short b : 3;
  } test4;

  printf("test1: %d\ntest2: %d\ntest3: %d\ntest4: %d\n", sizeof(test1), sizeof(test2), sizeof(test3), sizeof(test4));

테스트 1: 4

테스트 2: 2

테스트 3: 1

테스트 4: 4

콜론 표기법도 사용했지만 내 컨텍스트에서 비트 필드는 의미가 없습니다.그래서 좀 파헤쳤지이 표기법은 함수에 대한 특정 상황 포인터에서도 값을 할당하는 데 사용됩니다.

출처 : http://www.tldp.org/LDP/lkmpg/2.4/html/c577.htm

아래는 샘플과 발췌한 설명입니다.

「이 구조에의 할당을 용이하게 하는 gcc 확장이 있습니다.최신 드라이버에서 볼 수 있으며, 깜짝 놀랄 수도 있습니다.구조체에 할당하는 새로운 방법은 다음과 같습니다."

struct file_operations fops = {
   read: device_read,
   write: device_write,
   open: device_open,
   release: device_release
};

C99(구식, 호환) 방법은 다음과 같습니다.

struct file_operations fops = {
   .read = device_read,
   .write = device_write,
   .open = device_open,
   .release = device_release
};

폭 1과 폭8의 비트필드를 정의합니다.

언급URL : https://stackoverflow.com/questions/8564532/colon-in-c-struct-what-does-it-mean

반응형