C11(C 표준 리비전)

C11 (C standard revision)

C11(구 C1X)은 ISO/IEC 9899:[1]2011의 비공식 명칭으로 C 프로그래밍 언어의 과거 표준입니다.C99(표준 ISO/IEC 9899:1999)를 대체하고 C17(표준 ISO/IEC 9899:2018)로 대체되었습니다.C11은 일반적인 컨템포러리 컴파일러에서 이미 지원되고 있는 기능을 주로 표준화하고 있으며, 여러 스레드의 실행을 보다 효과적으로 지원하는 상세한 메모리 모델을 포함하고 있습니다.C99에 준거한 실장의 가용성이 늦어지고 있기 때문에, C11에서는 코어 [2][3]언어 표준에 준거하기 쉽게 하기 위해서, 일부의 기능을 옵션으로 하고 있습니다.

최종 초안인 N1570은 [4]2011년 4월에 발행되었습니다.새로운 표준은 2011년 10월 10일 최종 초안 검토를 통과했으며, ISO에 의해 공식 비준되어 2011년 12월 8일 ISO/IEC 9899:2011로 발행되었다. 참여 국가 기관의 결의가 필요한 코멘트는 없었다.

표준 매크로__STDC_VERSION__가치로 정의되어 있다201112L C11 지원을 사용할 [5]수 있음을 나타냅니다.C11의 일부 기능은 GCC에서 [6]2020년 9월 VS 2019(16.8)[9]부터 지원되며 버전 [7]3.1부터 Clang, 버전 12.[8]1부터 IBM XL C 및 Microsoft Visual C++에서 지원됩니다.

C99로부터의 변경

이 표준에는 다음과 [10]같은 C99 언어 및 라이브러리 사양의 몇 가지 변경이 포함되어 있습니다.

  • 얼라인먼트 사양(_Alignas지정자,_Alignof교환입니다.aligned_alloc기능.<stdalign.h>헤더)
  • _Noreturn기능 지정자 및<stdnoreturn.h>머리글자
  • Type-Generic 표현은_Generic키워드를 지정합니다.예를 들어 다음과 같은 매크로가 있습니다.cbrt(x)로 변환됩니다.cbrtl(x),cbrt(x)또는cbrtf(x)종류에 따라x:
#define cbrt(x) _Generic((x), long double: cbrtl, \ 디폴트: cbrt, \ 플로트: cbrtf)(x) 
  • 멀티스레딩 지원(_Thread_local스토리지 클래스 지정자,<threads.h>스레드 작성/관리 기능, 뮤텍스, 조건 변수 및 스레드 고유의 스토리지 기능 및 헤더를 포함합니다.<stdatomic.h>[11] C11 메모리모델을 지원하는 원자 연산의 경우).
  • C Unicode Technical Report ISO/IEC TR 19769:2004에 근거한 Unicode 지원 향상 (char16_t그리고.char32_tUTF-16/UTF-32 부호화 데이터 저장 유형(변환 함수 포함)<uchar.h>및 이에 대응하는u그리고.U스트링 리터럴프리픽스 및u8UTF-8 부호화 [12]리터럴의 프리픽스).
  • 의 삭제gets(안전성을 위해) 기능하다fgets이전 C 언어 표준 개정판 ISO/IEC 9899:1999/Cor.3:2007(E)에서는 폐지되었습니다.
  • 경계 체크 인터페이스(Annex K).[13]
  • 분석 기능(부록 L).
  • 부동소수점 타입의 특성을 문의하기 위한 매크로가 많아집니다.표준 이하의 부동소수점 번호 및 타입에 저장할 수 있는 십진수 숫자에 관한 것입니다.
  • 익명 구조 조합, 조합 및 조합이 중첩된 경우(예:struct T { int tag; union { float x; int n; }; };.
  • 스태틱 어설션: 변환 중에 다음 단계보다 늦은 단계에서 평가됩니다.#if그리고.#error타입이 번역자에 의해 인식되는 경우.
  • 전용 Create-and-Open 모드("…x"서픽스)의 경우fopen이 동작은O_CREAT O_EXCLPOSIX의 경우 일반적으로 잠금 파일에 사용됩니다.
  • quick_exit프로그램을 종료하는 세 번째 방법으로서 기능하며, 종료 시 최소 초기화를 수행하도록 의도되어 있다.exit에러가 발생.[14]
  • 새로운timespec_get기능 및 대응하는 구조<time.h>POSIX 호환성이 있습니다.
  • 복잡한 가치 구축을 위한 매크로(부분적으로는real + imaginary*I이 경우 기대치를 얻지 못할 수 있습니다.imaginary인피니트 또는 NaN)[15]입니다.

옵션 기능

새로운 리비전에서는 1999년 [16]리비전에서는 의무적으로 지원해야 했던 부분 등 일부 표준을 지원하지 않는 구현이러한 부분들은 실장되어 있습니다.프로그램은 미리 정의된 매크로를 사용하여 구현이 특정 기능을 지원하는지 여부를 확인할 수 있습니다.

C11 옵션 기능
특징 기능 테스트 매크로 C99의[17] 가용성
분석 기능(부록 L) __STDC_ANALYZABLE__ 사용할 수 없음
경계 검사 인터페이스(Annex K) __STDC_LIB_EXT1__ 사용할 수 없음
멀티스레딩(<threads.h>) __STDC_NO_THREADS__ 사용할 수 없음
원자 원소와 유형(<stdatomic.h>및 그_Atomic유형 한정자)[18] __STDC_NO_ATOMICS__ 사용할 수 없음
IEC 60559 부동 소수점 산술(부록 F) __STDC_IEC_559__ 선택적.
IEC 60559 호환 복합 산술 (부록 G) __STDC_IEC_559_COMPLEX__ 선택적.
복합형(<complex.h>) __STDC_NO_COMPLEX__ 호스트 구현의 경우 필수
가변 길이[19] 어레이 __STDC_NO_VLA__ 의무적인

비판

선택적 경계 확인 인터페이스(부속문서 K)는 여전히 논란이 많고 광범위하게 구현되지 않았으며, 다음 표준 개정에서 폐지 또는 삭제가 [20]제안되었다.이 인터페이스의 주요 지지자인 Microsoft조차도 [21]이 정의에 따르지 않습니다.또한 부록 K에는 다음과 같은 보다 유용한 TR24731-2(동적 할당 함수)가 포함되어 있지 않습니다.vasprintf그리고.open_memstream오픈 소스 구현으로는 Open Watcom C/C++의 "Safer C" 라이브러리와[23] safeclib가 [24]있습니다.[22]

「 」를 참조해 주세요.

레퍼런스

  1. ^ "ISO/IEC 9899:2011 - Information technology -- Programming languages -- C". www.iso.org.
  2. ^ "WG14 N1250 The C1X Charter" (PDF).
  3. ^ "Subsetting the C Standard". www.open-std.org.
  4. ^ WG14 N1570 위원회 초안 - 2011년 4월 12일
  5. ^ "Defect report #411". ISO/IEC JTC1/SC22/WG14 - C. February 2012. Retrieved 2012-05-04.
  6. ^ "GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org.
  7. ^ "Clang 3.1 Release Notes". llvm.org.
  8. ^ "Support for ISO C11 added to IBM XL C/C++ compilers". www.ibm.com. 17 April 2014.
  9. ^ "C11 and C17 Standard Support Arriving in MSVC". devblogs.microsoft.com. 14 September 2020.
  10. ^ WG14 N1516 위원회 초안 - 2010년 10월 4일
  11. ^ "Atomic operations library - cppreference.com". en.cppreference.com.
  12. ^ "WG14 N1286 — "On Support for TR-19769 and New Character Types", Nick Stoughton, Larry Dwyer" (PDF).
  13. ^ Berin Babcock-McConnell. "API02-C. Functions that read or write to or from an array should take an argument to specify the source or target size".
  14. ^ "Abandoning a Process". www.open-std.org.
  15. ^ "Creation of complex value". www.open-std.org.
  16. ^ WG14 N1548 위원회 초안 - 2010년 12월 2일 6.10.8.3 조건부 기능 매크로
  17. ^ ISO 9899:1999 6.10.8 정의된 매크로 이름
  18. ^ "WG14 N1558 Mar 14-18 meeting minutes (draft)" (PDF).
  19. ^ ISO 9899: 2011 프로그래밍 언어 - C 6.7.6.2 4
  20. ^ "N1969 — Updated Field Experience With Annex K — Bounds Checking Interfaces". www.open-std.org.
  21. ^ Leffler, Jonathan. "c - Do you use the TR 24731 'safe' functions?". Stack Overflow.
  22. ^ "c - Do you use the TR 24731 'safe' functions?". Stack Overflow.
  23. ^ "Safer C Library - Open Watcom". 3 May 2015. Archived from the original on 2015-05-03.
  24. ^ "safec: Safe C Library - README". rurban.github.io.

외부 링크

선행 C 언어 표준 에 의해 성공자