C 구조체의 ":"(콜론)-무슨 뜻입니까?
이 질문에 이미 답변이 있습니다.
- C ++ 구조체 구문“a : b”는 5 개의 답을 의미하는 것
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 의 인용문입니다 .
상수 표현식은 필드의 너비를 비트 단위로 지정합니다. 선언자의 유형 지정자는 unsigned int, signed 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));
test1 : 4
test2 : 2
test3 : 1
test4 : 4
I also ran into the colon notation but in my context bit fields didn't make sense. So I did some digging. This notation is also used for assigning values - in my specific situation pointers to functions.
Source: http://www.tldp.org/LDP/lkmpg/2.4/html/c577.htm
Below is a sample and an excerpt to explain.
"There is a gcc extension that makes assigning to this structure more convenient. You'll see it in modern drivers, and may catch you by surprise. This is what the new way of assigning to the structure looks like:"
struct file_operations fops = {
read: device_read,
write: device_write,
open: device_open,
release: device_release
};
The C99 (old, compatible) way looks like:
struct file_operations fops = {
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release
};
It defines bit-fields of width 1 and 8.
참고URL : https://stackoverflow.com/questions/8564532/colon-in-c-struct-what-does-it-mean
'developer tip' 카테고리의 다른 글
git 저장소에서 사용하지 않는 객체를 제거하는 방법은 무엇입니까? (0) | 2020.10.09 |
---|---|
토스트 LENGTH_LONG 및 LENGTH_SHORT의 기간은 얼마입니까? (0) | 2020.10.09 |
부트 스트랩 열 높이를 100 % 행 높이로 만드는 방법은 무엇입니까? (0) | 2020.10.08 |
C 프로그래밍 : 유니 코드 용으로 프로그래밍하는 방법? (0) | 2020.10.08 |
PowerShell PS1 파일에 명령 줄 인수를 전달하는 방법 (0) | 2020.10.08 |