구조체 배열 끝에 빈 중괄호 '{ }'가 필요한 이유는 무엇입니까?
static struct ctl_table ip_ct_sysctl_table[] = {
{
.procname = "ip_conntrack_max",
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec,
},
// ...
{
.procname = "ip_conntrack_log_invalid",
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &log_invalid_proto_min,
.extra2 = &log_invalid_proto_max,
},
{ }
};
여기서 일련의 구조는 다음과 같이 끝납니다.{ }
어떤 목적으로 추가되었습니까?
참고로 이 코드보다 조금 위에 다른 구조체 배열이 있지만 끝에는 빈 괄호가 없습니다.
구조체 배열 끝에 빈 괄호를 사용해야 할 때는 언제입니까?
이 특별한 변경은 sysctl net의 일부였습니다.Eric W. Biedman에 의해 커밋된 사용되지 않은 바이너리 sysctl 코드를 삭제하여 의 마지막 요소의 초기화를 변경합니다.ip_ct_sysctl_table
에서 배열하다.{0}
로.{}
(다른 많은 어레이 초기화와 유사한 변경을 수행합니다).
그{0}
패턴이 훨씬 더 오래 지속된 것 같습니다, 그리고 둘 다.{0}
또는{}
final element-initialization은 일반적으로 (Linux 소스 코드에서) 명시적으로 다음과 같이 불립니다.Terminating entry
따라서 이러한 어레이의 길이를 파악하지 않고 소비할 수 있는 패턴이 존재하기 때문에 제로 초기화 종료 엔트리에 도달하면 소비는 종료됩니다.예를 들어, 제로 초기화를 의도한 유사한 어레이에 대해서는 코멘트에 다음과 같이 명시되어 있습니다.
static struct codec_connection toonie_connections[] = { { .connected = CC_SPEAKERS | CC_HEADPHONE, .codec_bit = 0, }, {} /* terminate array by .connected == 0 */ };
0 끝 문자열에 대해 잘 알고 계실 겁니다. ctl_table ip_ct_sysctl_table[]
는 제로 종단 배열입니다.즉, 마지막 배열 엔트리의 멤버는 모두 제로입니다.
구조체 배열 끝에 빈 중괄호 '{ }'가 필요한 이유는 무엇입니까?
명확히 하자면, "구조체 배열 끝의 빈 괄호 '{ }'는 C 구문 요건을 충족하기 위해 필요하지 않습니다.
구조체 배열 끝에 빈 괄호를 사용해야 할 때는 언제입니까?
프로그램에 모든 0의 최종 배열 요소를 갖는 것이 유용할 수 있습니다. - 확실히 그 끝을 감지하기 위해서입니다.이러한 요구는 애플리케이션의 어레이 사용에서 비롯됩니다.ctl_table ip_ct_sysctl_table[]
C언어 요구가 아닙니다.
어레이의 요소 수를 1개 늘리기 위해 어레이 끝에 0으로 초기화된 요소가 1개 있습니다.
이 작은 데모를 생각해 보세요.
#include <stdio.h>
struct Test
{
int x;
int y;
} arr[] =
{
{1,2},
{3,4},
// {}
};
int main(void) {
printf("%zu\n", sizeof(arr) / sizeof(arr[0]));
return 0;
}
의 크기arr
코멘트를 해제하면 어레이가 변경됩니다.{}
어레이 초기화 리스트의 마지막에 표시됩니다.
출력:
와 함께// {}
(어레이에는 2개의 요소가 있습니다)
2
와 함께{}
(어레이에는 3가지 요소가 있습니다)
3
상세설명:
ip_ct_sysctl_table
레음
in->ctl_table = kmemdup(ip_ct_sysctl_table,
sizeof(ip_ct_sysctl_table),
GFP_KERNEL);
★★★★★★{}
.ip_ct_sysctl_table
.
언급URL : https://stackoverflow.com/questions/60489448/what-is-the-need-of-empty-braces-at-the-end-of-array-of-structs
'programing' 카테고리의 다른 글
Vuex: 정의되지 않은 속성 '$store'를 읽을 수 없습니다. (0) | 2022.09.03 |
---|---|
잭슨 VS지손 (0) | 2022.09.03 |
vuejs의 Axios에서 계산된 속성을 자동으로 새로 고치는 방법 (0) | 2022.09.01 |
어떻게 목록의 자바에 있는 모든 요소들을 인쇄할? (0) | 2022.09.01 |
기본적으로 5가 아닌 웹 팩 4를 사용하는 Vue CLI (0) | 2022.09.01 |