>백엔드 개발 >C++ >C 컴파일러는 VLA(가변 길이 배열)를 허용합니까? 그렇다면 그 이유는 무엇입니까?

C 컴파일러는 VLA(가변 길이 배열)를 허용합니까? 그렇다면 그 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-21 03:42:13939검색

Do C   Compilers Accept Variable Length Arrays (VLAs), and If So, Why?

C 컴파일러의 가변 길이 배열(VLA) 허용

VLA는 C99에서 표준화되었지만 C 표준의 일부는 아닙니다. 그럼에도 불구하고 g 및 clang과 같은 컴파일러는 -pedantic 플래그 아래에 경고와 함께 VLA 선언을 허용합니다.

컴파일러 허용

컴파일러는 레거시 코드와의 호환성을 유지하기 위해 비표준 기능을 포함할 수 있는 유연성을 갖습니다. 프로그래머의 편의성을 높였습니다. 이 경우 컴파일러 작성자는 C99에서 C로의 마이그레이션을 용이하게 하기 위해 VLA 선언을 허용하기로 결정했습니다.

표준 해석

C 표준에서는 배열이 상수 크기로만 선언될 수 있다고 명시적으로 명시하고 있습니다. 컴파일 타임에 크기를 알 수 없는 VLA 선언은 이 규칙을 위반하므로 C에서 불법으로 간주됩니다.

컴파일러 구현

표준의 금지에도 불구하고 컴파일러는 VLA를 코드로 변환합니다. 스택에 메모리를 할당하는 것으로 보입니다. 그러나 이 동작은 C 표준에 의해 지정되지 않으며 단지 컴파일러의 구현 세부 사항일 뿐입니다.

결론

VLA는 특정 시나리오에서 유연성을 제공하지만 그렇지 않다는 점을 이해하는 것이 중요합니다. C 표준의 일부. 컴파일러는 호환성 이유로 이를 허용할 수 있지만 사용은 주의해서 수행해야 하며 표준 호환 코드에 의존해서는 안 됩니다. 지원되는 특정 비표준 기능에 대해서는 항상 컴파일러 설명서를 참조하세요.

위 내용은 C 컴파일러는 VLA(가변 길이 배열)를 허용합니까? 그렇다면 그 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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