>백엔드 개발 >C++ >C의 더 엄격한 규칙은 C의 더 관대한 접근 방식과 어떻게 다릅니까?

C의 더 엄격한 규칙은 C의 더 관대한 접근 방식과 어떻게 다릅니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-15 05:06:30159검색

How Does C  's Stricter Rules Differ from C's More Lenient Approach?

C의 불완전성: C가 하위 집합에서 갈라지는 곳

C가 C 내에 완전히 포함되어 있다는 빈번한 주장에도 불구하고 미묘한 차이로 인해 주장이 불완전합니다. 이 기사에서는 C에서 허용되는 코드가 C에서 호환되지 않는 사례를 강조하여 이를 구별하는 차이점을 조명합니다.

복잡한 명확성

C는 변수에 대해 더 엄격한 규칙을 적용합니다. 잠정성을 금지하는 정의. int n과 같이 동일한 변수를 반복적으로 선언합니다. int n;은 C와 달리 C에서는 허용되지 않습니다.

배열 호환성 차이

C에는 C에 존재하지 않는 유형 호환성 제약 조건이 도입되었습니다. C에서는, int a[1] 배열은 유형이 다르지만(int[] 대 int[]) 포인터 int (*ap)[] = &a에 할당될 수 있습니다. 정수[1]). 이 할당은 C에서 실패합니다.

사용되지 않는 함수 정의

C는 K&R 스타일의 함수 정의를 버리고 int b(a) int a; { } 구문이 올바르지 않습니다.

중첩 구조체 범위 차이

C의 중첩 구조체는 C와 달리 클래스 범위를 갖습니다. 결과적으로 둘러싸는 구조체 외부에 중첩 구조체를 선언합니다. struct B b;와 같은 정의로 인해 C에서 불완전한 유형 오류가 발생합니다. .

명시적 유형 지정자 필요

C에서는 모든 선언에 명시적 유형 지정자를 요구합니다. auto a;와 같이 유형 정보를 생략하면 구문 오류가 발생합니다.

C99는 추가 불일치에 기여합니다

C99는 추가 비호환성을 도입합니다.

  • 배열 크기: 선언 매개변수 목록 배열 차원의 지정자는 이제 C 구문(void f(int p[static 100]) { })과 일치해야 합니다.
  • 가변 길이 배열: C는 상수가 아닌 표현식을 금지합니다. 배열 차원 계산용(int n = 1; int an[n];).
  • 유연함 배열 멤버: C에서는 유연한 배열 멤버(struct A { int a; int fam[]; })를 허용하지 않습니다.
  • 제한 한정자: C에서는 별칭 분석을 위한 제한 한정자를 도입합니다. C에는 없습니다(void copy(int *restrict src, int *restrict) dst);).

위 내용은 C의 더 엄격한 규칙은 C의 더 관대한 접근 방식과 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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