VLA는 C99에서 표준화되었지만 C 표준의 일부는 아닙니다. 그럼에도 불구하고 g 및 clang과 같은 컴파일러는 -pedantic 플래그 아래에 경고와 함께 VLA 선언을 허용합니다.
컴파일러는 레거시 코드와의 호환성을 유지하기 위해 비표준 기능을 포함할 수 있는 유연성을 갖습니다. 프로그래머의 편의성을 높였습니다. 이 경우 컴파일러 작성자는 C99에서 C로의 마이그레이션을 용이하게 하기 위해 VLA 선언을 허용하기로 결정했습니다.
C 표준에서는 배열이 상수 크기로만 선언될 수 있다고 명시적으로 명시하고 있습니다. 컴파일 타임에 크기를 알 수 없는 VLA 선언은 이 규칙을 위반하므로 C에서 불법으로 간주됩니다.
표준의 금지에도 불구하고 컴파일러는 VLA를 코드로 변환합니다. 스택에 메모리를 할당하는 것으로 보입니다. 그러나 이 동작은 C 표준에 의해 지정되지 않으며 단지 컴파일러의 구현 세부 사항일 뿐입니다.
VLA는 특정 시나리오에서 유연성을 제공하지만 그렇지 않다는 점을 이해하는 것이 중요합니다. C 표준의 일부. 컴파일러는 호환성 이유로 이를 허용할 수 있지만 사용은 주의해서 수행해야 하며 표준 호환 코드에 의존해서는 안 됩니다. 지원되는 특정 비표준 기능에 대해서는 항상 컴파일러 설명서를 참조하세요.
위 내용은 C 컴파일러는 VLA(가변 길이 배열)를 허용합니까? 그렇다면 그 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!