>백엔드 개발 >C++ >상수 배열 바운드 규칙에도 불구하고 가변 길이 배열이 이 C 코드에서 작동하는 이유는 무엇입니까?

상수 배열 바운드 규칙에도 불구하고 가변 길이 배열이 이 C 코드에서 작동하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-16 11:40:10116검색

Why Do Variable-Length Arrays Work in This C   Code Despite the Constant Array Bound Rule?

상수 배열 바인딩 요구 사항에도 불구하고 C의 가변 길이 배열

C에서는 바인딩된 배열이 상수 표현식이어야 한다고 명시되어 있습니다. 그러나 특정 코드 시나리오에서는 이 규칙을 위반해도 오류가 발생하지 않는 것으로 보입니다. 다음 예를 고려하십시오.

#include <iostream>
using namespace std;

int main(){
    int n=10;
    int a[n];

    for (int i=0; i<n; i++) {
        a[i]=i+1;
        cout<<a[i]<<endl;
}
    return 0;
}

교과서에 따르면 이 코드는 n이 상수 표현식이 아니기 때문에 오류를 발생시킵니다. 놀랍게도 Mac의 Xcode4에서는 완벽하게 실행됩니다. 이 명백한 모순을 설명하는 것은 무엇입니까?

답은 VLA(가변 길이 배열)라는 C99 기능에 있습니다. 주로 C에서 사용되지만 특정 컴파일러는 C에서도 VLA를 지원합니다. 이 맥락에서 int a[n]은 int a[10]과 유사한 스택에 공간을 할당하는 VLA입니다.

따라서 위의 코드는 가변 길이 n의 VLA를 사용합니다. 이 기능을 사용하면 배열 경계가 기술적으로 상수 표현식이 아니더라도 동적으로 결정된 크기로 배열을 생성할 수 있습니다.

위 내용은 상수 배열 바운드 규칙에도 불구하고 가변 길이 배열이 이 C 코드에서 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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