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