ANSI C

ANSI C

ANSI C, ISO C 및 Standard C는 국제표준기구(ISO) 및 국제전기기술위원회(IEC)의 ISO/IEC JTC 1/SC 22/WG 14American National Standards Institute(ANSI)에 의해 발행된 C 프로그래밍 언어의 연속 표준입니다.지금까지의 이름에서는, 표준의 원래 버전(C89 또는 C90)과 가장 잘 서포트되고 있는 버전(C89 또는 C90)을 특정하고 있었습니다.C로 기술된 소프트웨어 개발자는 컴파일러 간의 휴대성에 도움이 되므로 표준을 준수할 것을 권장합니다.

이력 및 전망

C의 첫 번째 표준은 ANSI에 의해 발표되었다.이 문서는 이후 ISO/IEC에 의해 채택되었고 ISO/IEC에 의해 발행된 후속 개정판이 ANSI에 의해 채택되었지만,[1] "ANSI C"는 여전히 표준을 참조하기 위해 사용됩니다.일부 소프트웨어 개발자는 ISO C라는 용어를 사용하는 반면, 다른 개발자는 표준 기구의 중립적이며 표준 C를 사용합니다.

표준화 C

1983년, 미국 국립 표준 협회(American National Standards Institute)는 C의 표준 규격을 제정하기 위해 X3J11이라는 위원회를 구성했습니다.1985년, C85라고도 불리는 첫 번째 표준 초안이 발표되었습니다.1986년에는 C86이라고도 하는 또 다른 표준 초안이 발표되었습니다.프리 릴리즈 표준 C는 1988년에 발행되었으며, 때로는 C88[2]불리기도 한다.

C89

ANSI 표준은 1989년에 완성되었으며 ANSI X3.159-1989 "프로그래밍 언어 C"로 비준되었습니다.이 버전의 언어를 종종 "ANSI C"라고 부릅니다.나중에 "C89"라는 라벨이 C90과 구별하기 위해 사용되기도 하지만 동일한 라벨링 방법을 사용합니다.

C90

C89와 동일한 표준은 ISO/IEC에 의해 ISO/IEC 9899:1990으로 비준되었으며, 형식 변경([3]C90이라고도 함)만 있었다.따라서 "C89"와 "C90"이라는 용어는 기본적으로 동일한 언어를 나타냅니다.

이 표준은 ANSI/INCITS와[4] ISO/[5]IEC에 의해 철회되었다.

C95

1995년에 ISO/IEC는 ANSI-C 표준에 대한 수정안 1이라고 불리는 확장을 발표했습니다.최종적으로는 ISO/IEC 9899:1990/AMD1:1995 또는 C95로 명명되었습니다.오류 수정 외에도 다음과 같은 언어 [6][7]기능이 추가로 변경되었습니다.

  • 표준 라이브러리의 멀티바이트 와이드 문자 지원 향상,<wchar.h>그리고.<wctype.h> 멀티바이트 I/O도 지원
  • 언어에 디그래프 추가
  • 운영자의 대체 사양을 위한 표준 매크로의 사양(예:and위해서&&
  • 표준 매크로 사양__STDC_VERSION__

개정 이외에도 ISO는 C90에 대해 두 가지 기술적 교정을 발표하였다.

  • ISO/IEC 9899:1990/Cor 1:1994 TCOR1(1994년[8])
  • ISO/IEC 9899:1990/Cor 2:1996(1996년[9])

C95 호환성 프리프로세서 테스트

#(_STDC_VERSION__) 및 __STDC_VERSION__>= 199409l  /* C95 호환 소스 코드.*/ #el(정의되어 있는 경우) (_STDC__) /* C89 호환 소스 코드.*/ #엔디프 

C99

2000년 3월에 ANSI는 ISO/IEC 9899:1999 [10]표준을 채택했습니다.이 표준은 일반적으로 C99라고 불립니다.이전 표준에 추가된 주목할 만한 사항은 다음과 같습니다.

  • 새로운 내장 데이터 유형:long long,_Bool,_Complex,그리고._Imaginary
  • 스태틱 어레이 인덱스, 대표 이니셜라이저, 복합 리터럴, 가변 길이 어레이, 유연한 어레이 멤버, 가변형 매크로 등 몇 가지 새로운 핵심 언어 기능restrict키워드
  • 다음을 포함한 몇 가지 새로운 라이브러리 헤더stdint.h,<tgmath.h>,fenv.h,<complex.h>
  • 인라인 함수, 한 코멘트 등 여러 C++ 기능과의 호환성 향상//, 식별자에 선언과 코드 및 범용 문자 이름을 혼합합니다.
  • 암묵적 함수 선언 및 암묵적 함수 선언 등 위험한 C89 언어 기능 몇 가지 제거int

ISO는 C99에 대해 다음과 같은 세 가지 기술적 교정을 발표했다.

  • ISO/IEC 9899:1999/Cor 1:2001(E)
  • ISO/IEC 9899:1999/Cor 2:2004(E)
  • ISO/IEC 9899:1999/Cor 3:2007(E), 표준 라이브러리 함수는 다음과 같습니다.

이 표준은 ANSI/INCITS와[11] ISO/IEC에[12] 의해 C11을 위해 철회되었다.

C11

C11은 2011년 12월 8일에 정식으로 비준되어 발행되었습니다.주목할 만한 기능으로는 Unicode 지원 향상, 새로운 기능을 사용한 Type-Generic 표현 등이 있습니다._Generic키워드, 크로스 플랫폼멀티스레딩 API (threads.h코어 언어 및 라이브러리 모두에서 지원되는 원자 유형( ).stdatomic.h).

ISO는 C11에 대해 다음과 같은 기술적 교정을 발행했습니다.

  • ISO/IEC 9899:2011/Cor 1:2012[13]

C17

2018년 10월 현재 "C17"은 C 프로그래밍 [14]언어의 현재 표준입니다.

C17은 새로운 언어 [15]기능을 도입하지 않고 C11의 결함을 해결합니다.

C2x

C2x는 다음(C17 이후) 주요 C 언어 표준 [16]개정판의 비공식 이름입니다.

기타 관련 ISO 자료

표준화 프로세스의 일환으로서 ISO/IEC는 C 언어에 관한 기술 보고서사양도 발행합니다.

  • ISO/IEC TR 19769:2004,[17] Unicode 변환 포맷을 지원하는 라이브러리 확장으로 C11에 통합
  • ISO/IEC TR 24731-1:2007,[18] 경계 체크 인터페이스를 지원하는 라이브러리 확장으로 C11에 통합
  • ISO/IEC TR 18037:2008,[19] 임베디드 C 확장 기능 탑재
  • ISO/IEC TR 24732:2009,[20] 10진 부동 소수점 산술, ISO/IEC TS 18661-2:2015로 대체
  • ISO/IEC TR 24747:2009,[21] 특수 수학 함수,
  • ISO/IEC TR 24731-2:2010,[22] 동적 할당 기능을 지원하는 라이브러리 확장 기능
  • ISO/IEC TS 17961:2013,[23] C에서 안전한 코딩 실행
  • ISO/IEC TS 18661-1:2014,[24] IEC 60559:2011 호환 바이너리 부동 소수점 연산
  • ISO/IEC TS 18661-2:2015,[25] IEC 60559:2011 호환 10진 부동 소수점 산술
  • ISO/IEC TS 18661-3:2015,[26] IEC 60559:2011 호환 교환 및 확장 부동 소수점 유형
  • ISO/IEC TS 18661-4:2015,[27] IEC 60559:2011 호환 보조 기능

TS 18661의 제5부 및 최종부, 소프트웨어 트랜잭션 메모리 사양, 병렬 라이브러리 확장 [28]등 더 많은 기술 사양이 개발 중이며 승인 대기 중입니다.

메이저 컴파일러 지원

ANSI C는 현재 널리 사용되는 거의 모든 컴파일러에서 지원됩니다.GCC와 Clang은 현재 널리 사용되는 C 컴파일러의 [29][30]2가지 주요 컴파일러로, 둘 다 C11을 기반으로 하며 C17 및 C18 등의 최신 사양에서 변경된 업데이트를 포함합니다.표준 C에만 기술되어 하드웨어에 의존하지 않는 전제 조건 없이 작성된 소스 코드는 C에 준거한 모든 플랫폼에서 올바르게 컴파일되는 것이 사실상 보증됩니다.이러한 주의사항 없이 대부분의 프로그램은 특정 플랫폼 또는 특정 컴파일러를 사용하여 컴파일할 수 있습니다.예를 들어 GUI 라이브러리와 같은 비표준 라이브러리를 사용하거나 특정 데이터 타입의 정확한 크기나 바이트 엔디안 등 컴파일러 또는 플랫폼 고유의 속성에 의존하기 때문입니다.

컴플라이언스 검출 가능성

K&R C와 ANSI C 표준의 차이를 완화하기 위해__STDC__("표준 c") 매크로를 사용하여 코드를 ANSI 섹션과 K&R 섹션으로 분할할 수 있습니다.

 #(_STDC__) &_STDC__  외부 인트 옵션(인트,  * 컨스턴트 *, 컨스턴트  *);  #실패하다  외부 인트 옵션();  #엔디프 

위의 예에서는 ANSI 준거 실장용 함수 선언에 프로토타입이 사용되며, 그렇지 않으면 사춘기 비프로토타입 선언이 사용됩니다.그것들은 C99 현재도 ANSI에 준거하고 있습니다.이 코드가 정의와 평가를 모두 체크하는 방법에 주의해 주세요.이것은, 일부의 실장에서는,__STDC__ANSI [31]비준수를 나타냅니다.

ANSI C를 지원하는 컴파일러

「 」를 참조해 주세요.

레퍼런스

  1. ^ Brad Kelechava (2017-09-14). "The Origin of ANSI C and ISO C". Retrieved 2018-08-14.
  2. ^ Richard Hale Shaw (September 1988). "Standard C: The ANSI Draft Grows Up". PC Magazine. Vol. 7, no. 15. pp. 116–117.
  3. ^ "Standards - Using the GNU Compiler Collection (GCC)". Retrieved 2012-06-24.
  4. ^ "INCITS/ISO/IEC 9899". www.techstreet.com. Retrieved 2018-10-03.
  5. ^ "ISO/IEC 9899:1990 - Programming Languages -- C". Retrieved 2012-06-24.
  6. ^ Clive D.W. Feather (2010-09-12). "A brief description of Normative Addendum 1".
  7. ^ "ISO/IEC 9899:1990/Amd 1:1995". International Organization for Standardization. 2013-03-22.
  8. ^ "ISO/IEC 9899:1990/Cor 1:1994". ISO. Retrieved 2019-01-21.
  9. ^ "ISO/IEC 9899:1990/Cor 2:1996". ISO. Retrieved 2019-01-21.
  10. ^ "ISO/IEC 9899:1999". ISO. Retrieved 2019-01-21.
  11. ^ "INCITS/ISO/IEC 9899-2012". ANSI.
  12. ^ "ISO/IEC 9899:1999 - Programming Languages -- C". Retrieved 2012-06-24.
  13. ^ "ISO/IEC 9899:2011/Cor 1:2012". International Organization for Standardization.
  14. ^ "ISO/IEC 9899:2018 - Information technology -- Programming languages -- C". www.iso.org.
  15. ^ "The Standard - C". www.iso-9899.info.
  16. ^ "History of C". cppreference.
  17. ^ "ISO/IEC TR 19769:2004". International Organization for Standardization.
  18. ^ "ISO/IEC TR 24731-1:2007". International Organization for Standardization.
  19. ^ "ISO/IEC TR 18037:2008". International Organization for Standardization.
  20. ^ "ISO/IEC TR 24732:2009". International Organization for Standardization.
  21. ^ "ISO/IEC TR 24747:2009". International Organization for Standardization.
  22. ^ "ISO/IEC TR 24731-2:2010". International Organization for Standardization.
  23. ^ "ISO/IEC TS 17961:2013". International Organization for Standardization.
  24. ^ "ISO/IEC TS 18661-1:2014". International Organization for Standardization.
  25. ^ "ISO/IEC TS 18661-2:2015". International Organization for Standardization.
  26. ^ "ISO/IEC TS 18661-3:2015". International Organization for Standardization.
  27. ^ "ISO/IEC TS 18661-4:2015". International Organization for Standardization.
  28. ^ https://en.cppreference.com/w/c/experimental 2016년 1월 16일 방문 목록 참조.
  29. ^ "Using the GNU Compiler Collection (GCC): Standards". gcc.gnu.org. Retrieved 2019-02-05.
  30. ^ "Language Compatibility". clang.llvm.org. Retrieved 2019-02-05.
  31. ^ "Standard predefined macro names". www.ibm.com. Retrieved 2019-04-10.
  32. ^ "HP C/ANSI C developer's bundle". Retrieved 2015-07-12.
  33. ^ IBM XL C/C++ 컴파일러에 추가된 ISO C11 지원
  34. ^ Pelles C 페이지 링크

추가 정보

  • Schreiner, Axel-Tobias (1993). Object Oriented Programming with ANSI-C. Hanser. ISBN 3-446-17426-5.

외부 링크