>백엔드 개발 >C++ >C의 가변 길이 배열이 표준을 준수합니까?

C의 가변 길이 배열이 표준을 준수합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-12 20:53:12391검색

Do Variable-Length Arrays in C   Conform to the Standard?

C의 가변 길이 배열: 일관성 및 표준 준수 탐색

아래 C 코드 조각은 언어를 준수하는지에 대한 의문을 제기했습니다. 표준, 특히 상수 표현식과 관련하여:

int main()
{
  int size = 10;
  int arr[size];
}

C 표준에서 (8.3.4/1), 배열의 크기는 "정수 상수 표현"이어야 합니다. 위의 예에서 Size에는 이 속성이 부족한 것 같습니다.

가변 길이 배열(VLA) 및 컴파일 상태

코드는 gcc 4.8 및 Clang 3.2에서 성공적으로 컴파일됩니다. 두 컴파일러 모두 VLA(가변 길이 배열)를 C의 확장으로 지원하기 때문입니다. 그러나 Visual Studio CTP는 크기가 0임을 나타내는 오류 메시지와 함께 코드를 거부합니다. 이 동작은 가변 크기의 배열을 허용하지 않는 C 표준과 일치합니다.

컴파일러 경고 및 언어 확장

gcc 및 clang과 같은 일부 컴파일러는 -pedantic 플래그와 함께 VLA를 사용할 때 경고를 제공합니다. 이 플래그는 코드가 C 표준을 위반함을 나타내는 잠재적인 비표준 기능에 대해 경고합니다. 이 경우 배열의 상수 크기가 부족하여 VLA 사용이 부적절합니다.

적분 상수 표현식

C 초안 표준(5.19)에 따른 통합 상수 표현식 .3) 특정 조건을 만족해야 합니다. 이 경우 리터럴로 초기화되는 크기는 이를 정수 상수 표현식으로 간주합니다. 그러나 C 표준을 준수하려면 "const" 또는 "constexpr"을 사용하여

const int size = 10;

또는

constexpr int size = 10;

결론

가변 길이 어레이는 유연성을 제공하지만 표준 준수와 균형을 맞춰 사용해야 합니다. Visual Studio와 같은 컴파일러는 C 표준을 준수하고 해당 규칙을 위반하는 코드를 거부합니다. 적분 상수 표현식의 개념을 이해하고 언어 확장을 고려함으로써 개발자는 코드가 기능 및 표준화 요구 사항을 모두 충족하는지 확인할 수 있습니다.

위 내용은 C의 가변 길이 배열이 표준을 준수합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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