const int를 사용한 배열 크기 초기화의 파악하기 어려운 딜레마
C 영역에서 배열 크기 초기화에 상수를 사용하면 종종 다음과 같은 문제가 발생합니다. 알 수 없는 딜레마. 어떤 상황에서는 이 방법이 원활하게 허용되지만 다른 상황에서는 암호 같은 컴파일 오류가 발생합니다.
다음 코드 조각을 고려하세요.
<code class="cpp">const int size = 2; int array[size] = {0};</code>
이 예에서 컴파일러는 배열 선언을 기꺼이 허용합니다. 상수 변수 'size'로 지정된 크기입니다. 그 이유는 '크기'에 대한 초기화 표현식의 특성에 있습니다. 이는 상수 표현식입니다. 즉, 컴파일 타임에 완전히 평가될 수 있습니다. 이를 통해 컴파일러는 컴파일 중에 배열의 정확한 크기를 결정하여 그에 따라 메모리 할당을 용이하게 합니다.
위와 대조하여 다음 스니펫을 살펴보세요.
<code class="cpp">int a = 2; const int size = a; int array[size] = {0};</code>
여기서 컴파일러는 "컴파일 오류"를 한탄하며 발작을 일으켰습니다. 문제의 핵심은 '크기'를 초기화하는 데 사용되는 표현에 있습니다. 상수가 아닌 변수('a')가 포함됩니다. 이는 표현식을 상수가 아닌 표현식의 영역으로 분류합니다. 결과적으로 컴파일러는 컴파일 타임에 배열의 크기를 확인할 수 없습니다.
이러한 동작은 C 표준 위원회의 근본적인 결정에서 비롯됩니다. 위원회는 유연성보다 단순성과 명확성을 우선시했습니다. 후자를 구현하려면 'const int size = a;'와 같은 수정 불가능한 표현을 구별하는 복잡한 흐름 분석이 필요합니다. 그리고 'const int size = foo();'와 같은 상수가 아닌 표현식도 있습니다. 이러한 복잡성은 바람직하지 않은 것으로 간주되었습니다.
따라서 규칙은 그대로 유지됩니다. 배열 크기는 상수 표현식을 통해서만 초기화할 수 있습니다. 이렇게 하면 컴파일러가 배열의 크기를 명확하게 결정할 수 있으므로 예측 가능한 메모리 할당과 원활한 컴파일이 보장됩니다. 배열 크기 초기화의 세계를 탐험할 때 항상 이 원칙을 명심하십시오.
위 내용은 C에서 `const int` 변수를 사용하여 배열 크기를 초기화할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!