> 백엔드 개발 > C++ > C99와 C 코드의 차이점으로 인해 컴파일 오류가 발생합니까?

C99와 C 코드의 차이점으로 인해 컴파일 오류가 발생합니까?

Barbara Streisand
풀어 주다: 2024-12-16 09:23:11
원래의
575명이 탐색했습니다.

What C99 and C   Code Differences Cause Compilation Errors?

C99 및 C 호환성 예외

C는 일반적으로 C의 하위 집합이지만 C 언어의 특정 뉘앙스로 인해 일부 항목을 직접 컴파일하는 것이 금지됩니다. 유효한 C 코드. 고려해야 할 몇 가지 주요 차이점은 다음과 같습니다.

1. 임시 정의 없음

C에서는 동일한 이름을 가진 변수의 여러 선언을 허용하지만 C에서는 그렇지 않습니다. 결과적으로 C에서 유효한 다음 코드는 C에서 컴파일되지 않습니다.

int n;
int n; // ill-formed: n already defined
로그인 후 복사

2. 호환되지 않는 배열 유형

C에서 배열은 int[] 또는 int[N] 구문으로 선언될 수 있습니다. 그러나 C에서는 이를 다르게 처리합니다. C에서 유효한 다음 코드는 C에서 오류를 발생시킵니다.

int a[1];
int (*ap)[] = &a; // ill-formed: a does not have type int[]
로그인 후 복사

3. K&R 함수 정의 스타일 허용되지 않음

C는 K&R 스타일의 함수 정의를 지원하지만 C는 지원하지 않습니다. C에서 유효한 다음 코드는 C에서는 컴파일되지 않습니다.

int b(a) int a; { } // ill-formed: grammar error
로그인 후 복사

4. 중첩된 구조체 범위 차이점

C에서는 중첩된 구조체에 파일 범위가 있고 C에서는 클래스 범위가 있습니다. 이는 C에서 유효한 다음 코드가 C에서는 컴파일되지 않음을 의미합니다.

struct A { struct B { int a; } b; int c; };
struct B b; // ill-formed: b has incomplete type (*not* A::B)
로그인 후 복사

5. 기본값 없음 int

C는 C와 달리 정수 변수의 기본값을 int로 허용하지 않습니다. 따라서 C에서 유효한 다음 코드는 C에서 오류를 발생시킵니다.

auto a; // ill-formed: type-specifier missing
로그인 후 복사

C99의 추가 예외

이러한 예외 외에도 C99에서는 C와의 추가 비호환성이 발생합니다.

  • 매개변수 배열 차원에서 선언 지정자를 특별히 처리하지 않습니다.
  • 가변 길이 배열이 없습니다.
  • 유연한 배열 멤버가 없습니다.
  • 앨리어싱 분석에는 제한 한정자가 없습니다.

위 내용은 C99와 C 코드의 차이점으로 인해 컴파일 오류가 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿