문제

C99 표준은 오늘날의 컴파일러에서 얼마나 보편적으로 지원됩니까? 나는 GCC조차도 그것을 완전히 지원하지 않는다는 것을 이해합니다. 이게 옳은 거니?

C99의 어떤 기능이 다른 것보다 더 많이 지원되는지, 즉 대부분의 컴파일러가 나를 이해할 수 있다고 확신 할 수 있습니까?

도움이 되었습니까?

해결책

휴대용 C 코드를 작성하려면 C89 (Old ANSI C 표준)로 작성하는 것이 좋습니다. 이 표준은 대부분의 컴파일러에서 지원됩니다.

Intel C 컴파일러가 있습니다 아주 좋은 C99 지원 그리고 그것은 빠른 바이너리를 생산합니다. (감사 0x69!)

MSVC가 지원합니다 몇 가지 새로운 기능 Microsoft는 향후 버전에서 지원을 확대 할 계획입니다.

GCC는 C99의 새로운 것들을 지원합니다. 그들은에 관한 테이블을 만들었습니다 C99 기능의 상태. 아마도 C99의 가장 유용한 기능은 가변 길이 배열이며 GCC는 지금 지원합니다. 그 소리 (LLVM의 C Fronted)는 부동 소수점 pragmas를 제외한 대부분의 기능을 지원합니다.

Wikipedia는 다음과 같습니다 C99 지원에 대한 좋은 요약 컴파일러의.

다른 팁

누군가 인텔 컴파일러에 C99 지원이 있다고 언급했습니다. 또한 있습니다 comeau c/c ++ 컴파일러 C99를 완전히 지원합니다. 이것들은 내가 알고있는 유일한 것입니다.

잘 지원되지 않기 때문에 사용하지 않는 C99 기능은 다음과 같습니다.

  • 가변 길이 배열
  • 가변 수의 매개 변수가있는 매크로.

C99는 정기적으로 사용하는 기능이 잘 지원되는 것 같습니다 (Microsoft 제외) :

  • stdint.h
  • snprintf() - MS에는 비표준이 있습니다 _snprintf() 항상 버퍼를 종료하는 널 널 널의 심각한 제한이 있고 버퍼가 얼마나 큰지 표시하지 않습니다.

Microsoft의 비 지원을 위해 일하기 위해 나는 공개 도메인 stdint.h Mingw에서 (VC6에서도 일하도록 수정 한) 및 거의 공개 도메인 snprintf() Holger Weiss에서

Microsoft에서 지원하지 않지만 프로젝트에 따라 다른 컴파일러에서 여전히 사용하는 품목은 다음과 같습니다.

  • 혼합 선언 및 코드
  • 인라인 기능
  • _Pragma() - 이것은 pragmas를 훨씬 더 유용하게 만듭니다

GCC의 경우 a가 있습니다 모든 지원되는 기능이있는 테이블. 누락 된 가장 큰 것은 가변 길이 배열 인 것 같습니다. 다른 누락 된 기능의 대부분은 언어 기능보다는 라이브러리 문제입니다.

IBM C 컴파일러는 C99로 호출 될 때 C99 지원이 있지만 CC 또는 XLC로 호출 할 때는 그렇지 않습니다.

보다 C99 GNU의 수포 상태 현재 지원되는 기능에 대한 자세한 내용은

선 스튜디오 전체 C99 사양을 지원하도록 권장됩니다. 나는 그것들을 사용한 적이 없으므로 확인할 수 없습니다.

Microsoft 컴파일러가 C99 사양을 완전히 지원한다고 생각하지 않습니다. 그들은 현재 C ++에 훨씬 더 집중되어 있습니다.

Clang (LLVM 기반 C 및 C ++ 컴파일러)은 C99 지원이 매우 좋습니다. 나는 그것이지지하지 않는 유일한 것은 플로팅 포인트 pragmas라고 생각합니다.

Microsoft는 C ++ 표준을 추적하는 것으로 보이지만 C99를 지원하지 않습니다. (일부 기능은 체리를 찍을 수 있지만 겹치는 곳에 체리를 픽킹하는 C ++ 0x라고 할 수 있습니다.)

Visual Studio .NET 2003에서 새로운 프로젝트에는 'Compile C 코드가 C ++ (/TP)'옵션을 기본적으로 활성화합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top