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

표준 금지에도 불구하고 일부 C 컴파일러가 가변 길이 배열(VLA)을 허용하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-23 22:10:15
원래의
826명이 탐색했습니다.

Why Do Some C   Compilers Accept Variable Length Arrays (VLAs) Despite Standard Prohibition?

C에서 가변 길이 배열(VLA) 허용

C 표준에 가변 길이 배열(VLA)이 없음에도 불구하고, g 및 clang과 같은 컴파일러는 놀랍게도 VLA 구문을 허용합니다. 이로 인해 컴파일러의 동작과 이 비표준 기능의 의미에 대한 의문이 제기되었습니다.

컴파일러 허용 범위

컴파일러가 VLA를 수용하는 것은 고유한 설계에서 비롯됩니다. 특히 GCC는 레거시 C 컴파일러와의 호환성을 우선시하므로 기술적으로 C 표준의 일부가 아니더라도 VLA 구문을 인식할 수 있습니다.

표준 위치

C 문법은 배열 크기가 상수 표현식이어야 함을 지정합니다. VLA는 변수 표현식을 사용하므로 이 규칙을 위반하므로 C 표준의 일부로 간주되지 않습니다.

컴파일러 구현

C 컴파일러의 VLA는 컴파일러 확장으로 구현됩니다. . 컴파일러는 일반 배열과 유사하게 실행 중에 스택에 배열을 할당하여 이를 처리합니다. 그러나 표준에서는 이 동작을 정의하지 않으므로 컴파일러마다 다를 수 있습니다.

결과

C에서 VLA를 사용하면 다음과 같은 몇 가지 의미가 있습니다.

  • 호환성 문제: VLA가 있는 코드는 엄격하게 VLA를 준수하는 모든 C 컴파일러에서 컴파일되거나 실행되지 않을 수 있습니다. 표준을 준수합니다.
  • 정의되지 않은 동작: 표준은 VLA 할당 방법을 지정하지 않으므로 메모리 관리 동작을 예측할 수 없습니다.
  • 이식성 감소: 컴파일러 확장에 의존하면 코드 양이 줄어듭니다. 다양한 시스템과 컴파일러에 걸쳐 이식 가능합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿