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에 도입되었고, 지정 이니셜라이저라고 불립니다.
기본적으로 어레이 내의 특정 값을 설정하고 나머지는 기본값으로 둘 수 있습니다.
이 경우 배열 인덱스는 키보드 스캔 코드입니다. 0x3a
set #1(섹션 10.6 참조)에 있는 스캔 코드입니다.CapsLock
열쇠,0x45
이NumLock
그리고.0x46
이ScrollLock
.
위의 첫 번째 링크에는 다음과 같이 표시됩니다.
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
'programing' 카테고리의 다른 글
sprintf()는 자동 메모리 할당 기능을 갖추고 있습니까? (0) | 2022.07.09 |
---|---|
상태, 커밋, 디스패치 및 게터에 의존하는 Vuex 액션을 테스트(모카)하려면 어떻게 해야 합니까? (0) | 2022.07.09 |
Java로 가상 함수/메서드를 작성할 수 있습니까? (0) | 2022.07.09 |
Vuex + FireBase 데이터베이스 작업 (0) | 2022.07.09 |
vuex-persist를 사용하는 Nuxt.js - 페이지 새로 고침 시 비동기 데이터에서 지속 상태를 사용할 수 없음 (0) | 2022.07.09 |