programing

C에서의 어레이 초기화에서는 대괄호는 무엇을 의미합니까?

firstcheck 2022. 7. 9. 09:31
반응형

C에서의 어레이 초기화에서는 대괄호는 무엇을 의미합니까?

static uint8_t togglecode[256] = {
    [0x3A] CAPSLOCK,
    [0x45] NUMLOCK,
    [0x46] SCROLLLOCK
};

의 의미는 무엇입니까?[0x3A]여기서요? 전 단지 다음과 같은 진술만 배웠어요.int a[2] = {1, 2};

이는 배열의 n번째 요소를 초기화함을 의미합니다.이 예는 다음을 의미합니다.

togglecode[0x3A] == CAPSLOCK
togglecode[0x45] == NUMLOCK
togglecode[0x46] == SCROLLLOCK

이것들은 「지정 이니셜라이저」라고 불리며, 실제로는 C99 표준의 일부입니다.단, 를 사용하지 않는 구문에서는=그렇지 않습니다.이 페이지부터:

GCC 2.5 이후 구식이 되었지만 GCC는 여전히 이를 수용하고 있는 대체 구문은 다음과 같습니다.[index]요소 값 앞, no=.

GCC 문서에 따르면 이는 ISO C99에 준거하고 있습니다.이들은 이를 "지정 이니셜라이저"라고 부릅니다.

배열 인덱스를 지정하려면 요소 값 앞에 '[index] ='를 입력하십시오.예를들면,

 int a[6] = { [4] = 29, [2] = 15 };

와 동등하다

 int a[6] = { 0, 0, 15, 0, 29, 0 };

이 구문은 본 적이 없지만 gcc 4.4.5로 컴파일한 지 얼마 안 돼서-Wall. 컴파일은 성공했으며 경고는 하지 않았습니다.

이 예에서 알 수 있듯이 특정 어레이 요소를 초기화하고 다른 어레이 요소를 기본값(0)으로 설정할 수 있습니다.

그건 C99에 도입되었고, 지정 이니셜라이저라고 불립니다.

기본적으로 어레이 내의 특정 값을 설정하고 나머지는 기본값으로 둘 수 있습니다.

이 경우 배열 인덱스는 키보드 스캔 코드입니다. 0x3aset #1(섹션 10.6 참조)에 있는 스캔 코드입니다.CapsLock열쇠,0x45NumLock그리고.0x46ScrollLock.

위의 첫 번째 링크에는 다음과 같이 표시됩니다.

int a[6] = { [4] = 29, [2] = 15 };

는 다음과 같습니다.

int a[6] = { 0, 0, 15, 0, 29, 0 };

재미있게도 링크에는 다음과 같은 내용이 있지만=필요한 것 같습니다만, 여기에서는 그렇지 않은 것 같습니다.이는 표준이 아닌 다소 오래된 버전에서의 숙취입니다.gcc.

C99 기능인 지정된 이니셜라이저의 구문과 비슷합니다.

기본적으로 어레이의 일부를 초기화합니다.

int aa[4] = { [2] = 3, [1] = 6 };

배열의 두 번째 값을 6으로, 세 번째 값을 3으로 초기화합니다.

이 경우 어레이 오프셋은 16진수(0x3a)로 되어 있습니다.이것에 의해, 어레이의 58번째 요소가, 나타내고 있는 코드상의 코드에 정의되어 있을 가능성이 있는 CAPSLOCK의 값으로 초기화됩니다.

코드 내의 버전에는 다음 버전이 포함되어 있지 않습니다.=gcc 고유의 확장인 것 같습니다.

언급URL : https://stackoverflow.com/questions/9849719/what-do-square-brackets-mean-in-array-initialization-in-c

반응형