길이가 0인 배열로 구조체 리팩토링
레거시 코드에서는 길이가 0인 배열이 포함된 구조체를 만나는 것이 일반적입니다. 이러한 색다른 관행은 우려를 불러일으키고 코드 리팩토링 노력을 방해할 수 있습니다. 이 문서에서는 길이가 0인 배열의 이유를 설명하고 리팩토링에 대한 조언을 제공합니다.
길이가 0인 배열의 원인과 사용
구조체 서브의 길이가 0인 배열 동적으로 할당된 메모리에 대한 포인터입니다. "C-Hack"으로 알려진 이 기술은 이전 컴파일러에서 임의 길이의 배열을 생성하는 데 사용되었습니다. 요소가 0개인 배열을 선언함으로써 컴파일러는 배열이 존재했던 메모리 위치에 대한 포인터를 제공합니다. 이를 통해 개발자는 동적 할당을 통해 런타임에 배열의 크기를 제어할 수 있습니다.
대체 접근 방식: 동적 할당
현대 C에서 임의 길이의 배열을 생성하려면 길이가 0인 배열을 사용하지 않는 환경에서는 동적 메모리 할당을 사용합니다. 다음은 지정된 길이의 배열로 someData 구조체를 할당하는 함수의 예입니다.
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
이 함수는 구조체와 해당 배열에 메모리를 할당하고, nData 멤버를 초기화하고, 할당된 구조체에 대한 포인터를 반환합니다.
리팩터링 조언
구조체를 리팩터링하려면 길이가 0인 배열의 경우 다음 단계를 따르세요.
위 내용은 레거시 C/C 코드에 길이가 0인 배열을 포함하는 구조체를 어떻게 리팩터링할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!