> 백엔드 개발 > C++ > 본문

C에서 `const int` 변수를 사용하여 배열 크기를 초기화할 수 없는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-28 21:17:30
원래의
854명이 탐색했습니다.

Why Can't I Initialize an Array Size with a `const int` Variable in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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