반응형
리눅스 커널에서 이상한 코드를 발견했는데 누가 설명해줄 수 있나요?
initramfs.c에서 이것을 발견했습니다. 이 구문을 본 적이 없는데 누가 이것이 무엇을 하는지 설명해줄 수 있나요?
static __initdata int (*actions[])(void) = {
[Start] = do_start,
[Collect] = do_collect,
[GotHeader] = do_header,
[SkipIt] = do_skip,
[GotName] = do_name,
[CopyFile] = do_copy,
[GotSymlink] = do_symlink,
[Reset] = do_reset,
};
소스 코드 (366행): initramfs.c
인덱스별 순서 외 배열 초기화입니다.글을 쓰는 것과 같습니다.
actions[Start] = do_start;
actions[Collect] = do_collect;
정적 이니셜라이저로 사용할 수 있다는 점만 제외하고요
이 기능은 ISO C99에서 지정된 이니셜라이저로 알려진 기능입니다.배열을 생성하고 해당 배열의 특정 요소를 초기화합니다. 반드시 첫 번째 N 순서일 필요는 없습니다.다음 토막글과 맞먹습니다.
static __initdata int (*actions[SOME_SIZE])(void);
actions[Start] = do_start;
actions[Collect] = do_collect;
actions[GotHeader] = do_header;
actions[SkipIt] = do_skip;
actions[GotName] = do_name;
actions[CopyFile] = do_copy;
actions[GotSymlink] = do_symlink;
actions[Reset] = do_reset;
배열의 크기가 필요한 만큼만 클 뿐이며(가장 큰 인덱스보다 하나 이상 큰) 전역 범위에서 정적으로 초기화할 수 있다는 점을 제외하고는 위 코드를 전역 범위에서 실행할 수 없습니다.
이것은 ANSI C89의 기능은 아니지만, GCC는 C89로 코드를 컴파일할 때에도 이 기능을 확장으로 제공합니다.
배열 초기화 시 지정자
괄호로 표시된 표현식을 지정자라고 하며, 이는 단순히 선언과 같은 순서로 초기화자를 정렬하는 것보다 필드나 요소의 이름을 지정하여 배열이나 구조를 초기화하는 구문입니다.
언급URL : https://stackoverflow.com/questions/2241448/i-found-some-bizarre-code-in-the-linux-kernel-could-some-one-explain-it-to-me
반응형
'sourcecode' 카테고리의 다른 글
HTML5에서 target="_blank"를 사용해도 괜찮습니까? (0) | 2023.10.15 |
---|---|
localhost에서 Google 분석을 사용하지 않도록 설정하는 방법 (0) | 2023.10.15 |
C++를 사용하여 내 SQL 데이터베이스를 연결하는 방법 (0) | 2023.10.15 |
Angular $http POST에서 데이터 배열 전달 (0) | 2023.10.15 |
동면 hbm2ddl.자동 기본값 (0) | 2023.10.15 |