IT

C는 이니셜 라이저에서 [N… M]은 무엇을 의미하고 있습니까?

lottoking 2020. 8. 18. 07:53
반응형

C는 이니셜 라이저에서 [N… M]은 무엇을 의미하고 있습니까?


에서 sys.c의 라인 123 :

void *sys_call_table[__NR_syscalls] = 
{
    [0 ... __NR_syscalls-1] = sys_ni_syscall,
#include <asm/unistd.h>
};

sys_call_table배열에 대한 일반적인 포인터입니다. 그러나 표기법은 무엇입니까?

[0 ... __NR_syscalls-1]

무엇입니까 ...?


편집 :
내가 여기에 또 다른 C 트릭을 배웠의 #include <asm/unistd.h>됩니다 전처리 및 그 내용으로 대체하고 할당 [0 ... _NR_syscalls-1].


지정된 이니셜 라이저를 사용한 초기화 입니다.

범위 기반 초기화는 gnu gcc입니다.

요소 범위를 동일한 값으로 초기화 한 것 [first ... last] = value입니다. 이 GNU 확장입니다. 예를 들면

 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

아닙니다. -pedantic함께 컴파일 하면 그렇게 말합니다.

어떻게 작동 작동합니까?
전처리 기는 범위 기반 구조에서 #include <asm/unistd.h>실제 내용 ( 기타 기호 상수 및 유형을 정의하고 기타 함수를 선언 )으로 대체 한 다음 포인터 배열을 초기화하는 데 추가로 사용됩니다.

참고 URL : https://stackoverflow.com/questions/10071304/what-does-nm-mean-in-c-aggregate-initializers

반응형