"int 크기 = 10;"입니다. 상수 표현식?
코드 조각:
int main() { int size = 10; int arr[size]; }
가변 길이 배열(VLA)이 유효한 C 기능인지에 대한 질문을 제기합니다.
표준의 관점
C 표준 (8.3.4/1)에서는 배열 크기가 정수 상수 표현이어야 하지만 "크기"는 그렇지 않은 것으로 나타납니다. GCC 및 Clang과 같은 컴파일러는 C의 확장으로 VLA를 지원하므로 이 코드를 허용합니다. 표준을 준수하는 Visual Studio에서는 이를 거부합니다.
가변 길이 배열
VLA는 동적으로 결정되는 크기의 배열을 허용하는 C99 기능입니다. GCC와 Clang은 이 기능을 C로 확장합니다. 그러나 VLA는 C 표준의 일부가 아니며 GCC/Clang에서 -pedantic 플래그를 사용하면 경고나 오류가 발생합니다.
적분 상수 표현식
에 따르면 C 초안 표준(5.19/3), 정수 상수 표현식은 암시적으로 다음으로 변환되는 정수 또는 범위가 지정되지 않은 열거 유형의 표현식입니다. 핵심 상수 표현식의 기준을 만족하는 prvalue입니다.
"size"를 상수 표현식으로 만들기
표준을 준수하려면 "size"를 선언해야 합니다. 적분 상수 표현. 이는 다음과 같이 달성할 수 있습니다:
결론
GCC 및 Clang의 VLA 수용은 확장이며 C의 표준 기능은 아닙니다. Visual Studio의 거부는 표준을 준수합니다. 표준 C에서 VLA와 유사한 기능을 사용하려면 const 또는 constexpr을 사용하여 배열 크기를 통합 상수 표현식으로 만드는 것이 좋습니다.
위 내용은 `int size = 10;`은 C의 배열 크기 조정에 유효한 상수 표현식입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!