문제

나는 보통 C89에서 C 코드를 작성합니다. 이제 C99의 일부 기능 intxx_t 또는 __VA_ARGS__ 또는 snprintf)는 매우 유용하며 심지어 중요 할 수 있습니다.

C89에서 C99에서 C99까지의 요구 사항이 더 많아지기 전에 C99 기능 중 어느 것이 널리 지원되었는지, 어떤 기능이 널리 지원되지 않았거나 심지어 해로운 것으로 간주되지 않았는지 알고 싶었습니다.

우리는 대상 컴파일러 지원을 확인할 수 있다는 것을 알고 있지만, 이것은 우리의 지원이 많이 좁아 질 것이며, 이것이 오픈 소스 소프트웨어의 경우 더 넓은 지원을받는 것을 선호합니다.

예를 들어, 우리는 Solaris (SUNCC) 컴파일러와 GCC를 사용하지만, 우리는 아주 적은 노력으로 호환성을 유지할 수있는 다른 컴파일러가있을 수 있습니다.

예를 들어, Windows에서 작업하지 않았거나 Windows 컴파일러에 대해 아무것도 알고 있지만 Windows 호환성을 유지하는 것이 좋습니다.

도움이 되었습니까?

해결책

많은 C99 기능이 선택 사항이므로 부족은 기술적으로 부족하지 않습니다. 나는 아래를 구별하지 않을 것입니다.

  • 흠, 승리에는 없습니다 <stdint.h>, 있지만 있습니다 Microsoft 용 Open-Source 버전의 Stdint.h. 파일이 구현 되더라도 많은 개별 유형이 누락되었습니다.

  • 복잡하고 상상의 지원은 종종 누락되거나 깨지는 것입니다.

  • 확장 된 식별자와 넓은 문자는 문제점이 될 수 있습니다.

보다 이 C99 목록은 GCC의 기능 문제입니다.

다른 팁

goto 아직 해로운 것으로 간주됩니다.


어떻게 든 나는 수집했다 다운 투표. 나는 위의 진술을 levity를 추가하기 위해 제시했으며, 그 개념에 대해 30% 진지합니다.

나는 다운 투표가 프로그래밍 언어의 역사를 이해하지 못하는 젊은이들로부터 온 것으로 기대합니다. 아니다 모든 싱글 goto 내가 일한 100% 난이도가없는 스파게티 코드 (수백만 라인의 Fortran 66)와 비교할 수있는 악은 사악합니다. goto 구조화 된 진술이있는 진술 (for, while, do .. while, switch) 가능한 한. 그러나 때때로 a goto 여러 개의 중첩 루프에서 헤어질 여분의 플래그 변수와 같은 복잡성을 피하면 괜찮습니다.

글쎄, GCC는 어떤 데스크탑 OS를 대상으로하는 데 상관없이 기본적으로 GCC가 될 것입니다.

주로 C ++ 컴파일러 인 Visual C ++는 C99 사양과 관련이 없습니다. stdint.h는 좋아하는 intxx_t 매크로를 선언합니다. __VA_ARGS__ 사용할 수 있습니다. _bool, _complex 및 _pragma는 Microsoft Visual C ++ 컴파일러에서 구현되지 않았습니다. 나는 printf/scanf의 필드가 구현되지 않았지만 vc2010이 그들을 처리하지는 않았을 것입니다. SNPRINTF는 존재하지만 선행 밑줄과 약간 다른 의미를 가지고 있습니다.

짧은 답변 : "쉬운"C99 기능은 컴파일러 문법을 변경하거나 표준 라이브러리를 회복하지 않고 구현하는 것입니다. VC ++는이를 지원하는 것입니다. C99와 C ++ 사이에 충돌이있는 경우 C ++가 이길 것으로 기대하십시오.

런타임 크기는 컴파일러 작가의 악몽입니다. 그래서 나는 유해하다고 생각합니다.

GLIBC는 C99 구성을 구현하지 않습니다 realloc, 그래서 realloc(ptr, 0) 휴대용이 아닙니다.

http://sourceware.org/bugzilla/show_bug.cgi?id=12547

restrict C99의 키워드가되었습니다. 이는 사용자의 네임 스페이스에 침해되는 구현입니다. 단어가 포함 된 유효한 C89 프로그램이있는 경우 restrict, C99와 함께 작동하도록 프로그램을 변경해야합니다. 다시 말해 : 뒤로 호환성이 없습니다. 그들이 거꾸로 호환성을 깨뜨릴 것이라면, 그들은 제거했을 것입니다. gets 표준에서 먼저.

제네릭 수학 유형은의 기능입니다 <tgmath.h> MacOS x 10.6.2에서 GCC 4.2.1과 함께 제공되는 것 같습니다.

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