>백엔드 개발 >C++ >`int size = 10;`은 C의 배열 크기 조정에 유효한 상수 표현식입니까?

`int size = 10;`은 C의 배열 크기 조정에 유효한 상수 표현식입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 21:15:10499검색

Is `int size = 10;` a Valid Constant Expression for Array Sizing in C  ?

"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"를 선언해야 합니다. 적분 상수 표현. 이는 다음과 같이 달성할 수 있습니다:

  • const 사용: const int size = 10;
  • constexpr 사용: constexpr int size = 10;

결론

GCC 및 Clang의 VLA 수용은 확장이며 C의 표준 기능은 아닙니다. Visual Studio의 거부는 표준을 준수합니다. 표준 C에서 VLA와 유사한 기능을 사용하려면 const 또는 constexpr을 사용하여 배열 크기를 통합 상수 표현식으로 만드는 것이 좋습니다.

위 내용은 `int size = 10;`은 C의 배열 크기 조정에 유효한 상수 표현식입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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