programing

C, C99, ANSI C 및 GNU C의 차이점은 무엇입니까?

prostudy 2022. 8. 30. 21:32
반응형

C, C99, ANSI C 및 GNU C의 차이점은 무엇입니까?

codechef에서 프로그래밍 연습을 시작했는데 C와 C99의 차이 때문에 혼란스러웠습니다. 여기서 C는 무슨 뜻입니까? C89인가요?이 송신지의 하부에 있는 언어를 확인해 주세요.C와 C99가 모두 포함되어 있습니다.

인터넷에서 GNU C라는 것을 발견했습니다.Linux/unix 시스템에 다른 C가 있나요?이것들은 ANSI에 의한 C규격에 준거하고 있습니까?나는 또한 "C99 strict"를 읽은 적이 있다.이게 뭐야?

사용 중인 C의 다른 규격이 있습니까?C 4.3.2라는 게 있나요, 아니면 현재 사용 중인 gcc 버전인가요?

편집:

이거, 이거, 이거, 이거 도움이 됐어더 검색해서 답변이 없는 부분은 수정하겠습니다.

나는 프로그램 초보자가 아니다.C언어가 뭔지 알아요.C89, C99, C11 등 ANSI에 의한 C 규격이 다른 것으로 알고 있습니다.

  • 표준화 이전의 모든 것은 C언어의 창시자인 데니스 리치(Dennis Ritchie)를 저자로 하여 그 유명한 책(제1판, 제2판)의 이름을 따서 일반적으로 "K&R C"라고 불린다.이것은 1972년부터 1989년까지의 "C 언어"였습니다.

  • 첫 번째 C 표준은 1989년 미국에서 국가 표준 기관 ANSI에 의해 공개되었다.이 릴리스는 C89 또는 ANSI-C라고 불립니다.1989년부터 1990년까지 이것은 "C 언어"였다.

  • 그 다음해, 미국 표준은 국제적으로 받아들여져 ISO(ISO 9899:1990)에 의해서 공표되었다.이 릴리스의 이름은 C90입니다.기술적으로는 C89/ANSI-C와 같은 규격입니다.정식적으로는 C89/ANSI-C를 대체하여 사용되지 않게 되었습니다.1990년부터 1999년까지 C90은 "C 언어"였습니다.

    1989년 이후 ANSI는 C언어와 관계가 없습니다.아직도 "ANSI C"에 대해 말하는 프로그래머들은 일반적으로 그것이 무엇을 의미하는지 알지 못한다.ISO는 표준 ISO 9899를 통해 C 언어를 "소유"합니다.

  • 1995년에 마이너 업데이트가 출시되었으며, "C95"라고도 합니다.이는 주요 개정사항이 아니라 ISO/IEC 9899:1990/Amd.1:1995라는 정식 명칭의 기술 개정안이었다.가장 큰 변화는 폭넓은 인물 지원의 도입이었다.

  • 1999년에 C 표준은 주요 개정(ISO 9899:1999)을 거쳤다.이 표준의 버전은 C99라고 불립니다.1999년부터 2011년까지 이것은 "C 언어"였습니다.

  • 2011년에 C 표준은 다시 변경되었습니다(ISO 9899:2011).이 버전은 C11이라고 불립니다.다음과 같은 다양한 신기능이_Generic,_Static_assert및 스레드 지원이 언어에 추가되었습니다.이 업데이트는 멀티코어, 멀티프로세서 및 표현식 시퀀싱에 초점을 맞췄습니다.2011년부터 2017년까지, 이것은 「C언어」였습니다.

  • 2017년에는 C11을 개정하여 다양한 불량 보고서를 해결하였습니다.이 표준은 비공식적으로 C17 또는 C18이라고 불립니다.2017년에 완성되었습니다(및 사용).__STDC_VERSION__=201710L)는 ISO에 의해 9899:2018로 릴리즈되었기 때문에 C17/C18의 애매성이 있습니다.새로운 기능은 포함되어 있지 않고 수정만 되어 있습니다.이것은 C 언어의 최신 버전입니다.


"C99 strict"는 컴파일러가 문자 그대로 표준을 따르도록 강요하는 설정을 의미합니다.C 표준에는 준거 구현이라는 용어가 있습니다.기본적으로는 "이 컴파일러는 실제로 C 언어를 올바르게 구현한다"는 의미입니다.C 언어를 올바르게 구현하는 프로그램을 정식적으로는 엄수 프로그램이라고 부릅니다.

'GNU C'는 두 가지 의미가 있습니다.GNU 컴파일러 컬렉션(GCC)의 일부로 제공되는 C 컴파일러 자체.또는 GCC C 컴파일러가 사용하는 비표준 디폴트 셋업을 의미할 수도 있습니다.로 컴파일 하는 경우gcc program.c그러면 C 표준에 따라 컴파일을 하는 것이 아니라 "GNU C"라고 할 수 있는 비표준 GNU 설정입니다.예를 들어 Linux 커널 전체가 표준 C가 아닌 비표준 GNU C로 만들어집니다.

C 표준에 따라 프로그램을 컴파일하려면 다음과 같이 입력해야 합니다.gcc -std=c99 -pedantic-errors사용하시는 GCC 버전이 지원하는 경우 c99를 c11로 바꿉니다.

ANSI C에 대해 답변해야 합니다.ANSI는 아무것도 하지 않았지만 컴파일러는 아직 구축되어 있습니다.예를 들어, PIC XC16 컴파일러는 ANSI 사양(ANSI x3.159-1989)에 정의되어 있는 ANSI C 표준에 준거하고 있으며, Kernighan 및 Ritchie의 The C Programming Language (제2판 ...)" 모든 프로그래밍이 "PC와 같은 큰 컴퓨터용은 아닙니다."디바이스용으로 컴파일러를 작성하는데 드는 비용과 검증에 드는 비용은 $1입니다.ANSI C는 정상적으로 동작하며 임베디드/실시간 디바이스에서 생활하고 있습니다.

Lundin 답변 외에

Dennis Richi가 질문했을 때 하는 말은 다음과 같습니다.

"K&R은 왜 최종 승인된 ANSI 표준을 기다린 후 K&R 제2판을 작성하지 않았습니까?"

왜 K&R은 최종 승인된 ANSI 표준을 기다린 후 K&R 제2판을 작성하지 않았습니까?이 책은 최종 ANSI 표준으로 대체될 때까지 몇 달 동안만 올바른 표준이 될 것 같습니다.이 늦은 단계에서 큰 변화는 거의 없을 것 같습니다만, 3차 에디션을 거의 즉시 작성하거나 폐기할 필요 없이, 몇 개월을 기다려 100% 올바르게 수정하는 것은 어떻습니까?

초판 10주년을 맞이하면 좋을 것 같아서더 심각한 것은, 작년 여름에 시간과 성향이 있었기 때문에 일을 시작했고, X3J11이 거의 끝나가고 있는 것처럼 보였습니다.12월, 1월에 마무리하면서 중요한 변경의 가능성이 납기를 연기할 수 있는지 검토했고, (출판사와 상의한 결과) 기다릴 가치가 없다고 판단했습니다.P-H는 그걸 원했고 Brian과 나 둘 다 우리의 의제에서 벗어나길 원했어.

규격에 변화가 있다고 해도, 새로운 판을 보증할 정도로 광범위할 것이라고는 상상하기 어렵다.(우리는 그것이 지속된다면 노알리아에 어떻게든 대처할 준비가 되어 있었다.)향후 인쇄에 필요한 변경을 할 준비가 되어 있습니다만, 사소한 변경을 희망할 만한 이유가 있습니다.X3J11의 멤버들도 놀랄 만한 사람들 없이 끝내기를 간절히 바라고 있습니다.그들 중 대부분은 ANSI 컴파일러를 준비하고 있는 회사에서 일하고 있기 때문입니다.

데니스 리치

  • ANSI C: 최초의 C언어는 1989년에 ANSI라고 불리는 기구에 의해 표준화되었고 그래서 C89라고 불립니다.

  • C99:
    1999-2000년에는 개발자 요건의 요구에 따라 추가 또는 추가 키워드와 기능이 C99에 포함되었습니다(예: 인라인, 부울).부동소수점 라이브러리 기능 추가)

  • GNU C: GNU는 unix와 같은 운영체제(www.gnu.org)로, GNU의 프로젝트에는 ANSI C 표준에 근거한 C 프로그래밍 언어가 필요합니다.GNU는 코드를 컴파일하기 위해 GCC(GNU 컴파일러 컬렉션) 컴파일러를 사용합니다.malloc, calloc, exit 등의 시스템콜을 정의하는 C 라이브러리 기능이 있습니다..기타

ANSI C는 다른 표준에서 사용 중이거나 다른 표준을 참조하는 표준입니다.

이 질문은 인터넷에서 완전히 검색되지 않았습니다.어쨌든, 이것을 참조해 주세요.

  1. C는 1969년부터 1973년 사이에 AT&T Bell Labs에서 Dennis Ritchie에 의해 개발된 범용 프로그래밍 언어입니다.
  2. C99는 ISO에 의해 발행되어 1999년경 ANSI에 의해 채택된 C 언어의 표준입니다.
  3. GNU C는 c89의 확장일 뿐이며, c99의 일부 기능도 추가되어 있지만 전체적으로 c99 표준과 다르기 때문에 gcc에서 컴파일 할 때 입력해야 합니다.-std=c99이미 다른 답변에 언급되어 있습니다.
  4. ANSI C는 ANSI에 의해 출시된 일련의 표준입니다.

언급URL : https://stackoverflow.com/questions/17206568/what-is-the-difference-between-c-c99-ansi-c-and-gnu-c

반응형