>백엔드 개발 >C++ >C 컴파일러가 비표준임에도 불구하고 가변 길이 배열을 허용하는 이유는 무엇입니까?

C 컴파일러가 비표준임에도 불구하고 가변 길이 배열을 허용하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 02:46:15339검색

Why Do C   Compilers Accept Variable Length Arrays Despite Them Being Non-Standard?

C의 가변 길이 배열: 비표준 상태에도 불구하고 컴파일러 허용

C에서 VLA(가변 길이 배열)는 표준. 그러나 g 및 clang과 같은 컴파일러는 비표준 사용에 대한 경고 메시지가 있음에도 불구하고 놀랍게도 VLA 선언을 허용합니다. 이러한 예상치 못한 동작은 VLA에 대한 컴파일러의 동기와 표준의 입장에 대한 의문을 제기합니다.

컴파일러 승인

비표준 특성에도 불구하고 컴파일러가 VLA를 승인하는 이유 컴파일러 작성자의 결정에 달려 있습니다. C 컴파일러, 특히 GCC는 역사적으로 허용되었지만 C 표준을 따르지 않는 기능에 대한 지원을 포함하여 이전 C 컴파일러와의 호환성을 우선시합니다. 이러한 호환성 우선 접근 방식은 컴파일러가 VLA 선언 거부를 꺼리는 이유를 설명합니다.

표준 해석

C 표준은 [dcl.array]에서 VLA 사용을 명시적으로 금지합니다. . 배열 선언은 VLA의 경우가 아닌 상수 표현식을 사용하여 크기를 지정해야 한다고 명시되어 있습니다. 즉, C는 기본적으로 런타임 중에 결정된 크기의 배열 할당을 지원하지 않습니다.

컴파일러 구현

표준의 금지에도 불구하고 VLA를 허용하는 컴파일러는 그렇게 합니다. 이를 언어 확장으로 구현함으로써. 정확한 구현은 컴파일러와 플랫폼에 따라 다릅니다. 그러나 컴파일러에서 생성된 어셈블리 코드를 조사하면 VLA 선언이 일반적으로 일반 배열이 구현되는 방식과 유사하게 스택 할당 배열에 매핑된다는 것을 알 수 있습니다.

결론

컴파일러 C에서 VLA를 수용하는 것은 언어 표준에서 벗어나는 컴파일러 확장의 예입니다. 이러한 확장은 특정 상황에서 유용할 수 있지만 제한 사항을 인식하고 신중하게 사용하는 것이 중요합니다. 개발자는 컴파일러 경고 및 설명서를 참조하여 대상 컴파일러 환경에서 VLA 확장의 가용성과 동작을 확인할 수 있습니다.

위 내용은 C 컴파일러가 비표준임에도 불구하고 가변 길이 배열을 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.