구조 선언 끝에 있는 이 [1]의 목적은 무엇입니까?
MSP430 마이크로컨트롤러의 헤더 파일을 조사하다가<setjmp.h>
:
/* r3 does not have to be saved */
typedef struct
{
uint32_t __j_pc; /* return address */
uint32_t __j_sp; /* r1 stack pointer */
uint32_t __j_sr; /* r2 status register */
uint32_t __j_r4;
uint32_t __j_r5;
uint32_t __j_r6;
uint32_t __j_r7;
uint32_t __j_r8;
uint32_t __j_r9;
uint32_t __j_r10;
uint32_t __j_r11;
} jmp_buf[1]; /* size = 20 bytes */
익명의 구조물을 선언하고 typedef를 통해jmp_buf
하지만, 나는 그 일이 무엇인지 이해할 수 없다.[1]
를 위한 것입니다.나는 그것이 선언하는 것을 안다.jmp_buf
(이 익명의 구조의) 멤버 한 명과 함께 배열할 수 있지만, 어떤 용도로 사용되는지 상상할 수 없습니다.좋은 생각 있어요?
이것은 C에서 "참조 유형"을 만들기 위한 일반적인 트릭입니다. 여기서 함수 인수로 사용하면 프로그래머가 명시적으로 사용할 필요 없이 단일 요소 배열이 첫 번째 요소에 대한 포인터로 저하됩니다.&
operator 를 지정해, 주소를 취득합니다.선언된 경우에는 실제 스택타입(동적 할당이 필요 없음)이지만, 인수로 전달된 경우, 호출된 함수는 복사가 아닌 포인터를 수신하기 때문에 저렴하게 전달됩니다(그렇지 않은 경우 호출된 함수에 의해 변환될 수 있습니다).const
).
GMP 에서는, 같은 트릭을 사용하고 있습니다.mpz_t
이 구조체는 동적으로 할당된 메모리에 대한 포인터를 관리하기 때문에 type이 매우 중요합니다.mpz_init
이 함수는 구조에 대한 포인터를 얻는데 의존하며 복사본이 아닙니다. 그렇지 않으면 전혀 초기화할 수 없습니다.마찬가지로, 많은 작업이 동적으로 할당된 메모리의 크기를 조정할 수 있으며, 호출자의 구조를 변환하지 못하면 작동하지 않습니다.
언급URL : https://stackoverflow.com/questions/47086406/whats-the-purpose-of-this-1-at-the-end-of-struct-declaration
'programing' 카테고리의 다른 글
변수 개수의 인수를 PHP 함수에 전달하는 방법 (0) | 2022.09.24 |
---|---|
PHP 스크립트에서 max_execution_time 가져오기 (0) | 2022.09.24 |
Java Enumeration과 반복자의 차이점 (0) | 2022.09.24 |
Numpy에서 벡터의 크기를 어떻게 구하나요? (0) | 2022.09.24 |
[첫 글자가 B로 시작]에서 모두 선택합니다. (0) | 2022.09.24 |