C11(C 표준 리비전)
C11 (C standard revision)C 언어 리비전 |
---|
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_t
UTF-16/UTF-32 부호화 데이터 저장 유형(변환 함수 포함)<uchar.h>
및 이에 대응하는u
그리고.U
스트링 리터럴프리픽스 및u8
UTF-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_EXCL
POSIX의 경우 일반적으로 잠금 파일에 사용됩니다. - 그
quick_exit
프로그램을 종료하는 세 번째 방법으로서 기능하며, 종료 시 최소 초기화를 수행하도록 의도되어 있다.exit
에러가 발생.[14] - 새로운
timespec_get
기능 및 대응하는 구조<time.h>
POSIX 호환성이 있습니다. - 복잡한 가치 구축을 위한 매크로(부분적으로는
real + imaginary*I
이 경우 기대치를 얻지 못할 수 있습니다.imaginary
인피니트 또는 NaN)[15]입니다.
옵션 기능
새로운 리비전에서는 1999년 [16]리비전에서는 의무적으로 지원해야 했던 부분 등 일부 표준을 지원하지 않는 구현이러한 부분들은 실장되어 있습니다.프로그램은 미리 정의된 매크로를 사용하여 구현이 특정 기능을 지원하는지 여부를 확인할 수 있습니다.
특징 | 기능 테스트 매크로 | 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]
「 」를 참조해 주세요.
레퍼런스
- ^ "ISO/IEC 9899:2011 - Information technology -- Programming languages -- C". www.iso.org.
- ^ "WG14 N1250 The C1X Charter" (PDF).
- ^ "Subsetting the C Standard". www.open-std.org.
- ^ WG14 N1570 위원회 초안 - 2011년 4월 12일
- ^ "Defect report #411". ISO/IEC JTC1/SC22/WG14 - C. February 2012. Retrieved 2012-05-04.
- ^ "GCC 4.6 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org.
- ^ "Clang 3.1 Release Notes". llvm.org.
- ^ "Support for ISO C11 added to IBM XL C/C++ compilers". www.ibm.com. 17 April 2014.
- ^ "C11 and C17 Standard Support Arriving in MSVC". devblogs.microsoft.com. 14 September 2020.
- ^ WG14 N1516 위원회 초안 - 2010년 10월 4일
- ^ "Atomic operations library - cppreference.com". en.cppreference.com.
- ^ "WG14 N1286 — "On Support for TR-19769 and New Character Types", Nick Stoughton, Larry Dwyer" (PDF).
- ^ 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".
- ^ "Abandoning a Process". www.open-std.org.
- ^ "Creation of complex value". www.open-std.org.
- ^ WG14 N1548 위원회 초안 - 2010년 12월 2일 6.10.8.3 조건부 기능 매크로
- ^ ISO 9899:1999 6.10.8 정의된 매크로 이름
- ^ "WG14 N1558 Mar 14-18 meeting minutes (draft)" (PDF).
- ^ ISO 9899: 2011 프로그래밍 언어 - C 6.7.6.2 4
- ^ "N1969 — Updated Field Experience With Annex K — Bounds Checking Interfaces". www.open-std.org.
- ^ Leffler, Jonathan. "c - Do you use the TR 24731 'safe' functions?". Stack Overflow.
- ^ "c - Do you use the TR 24731 'safe' functions?". Stack Overflow.
- ^ "Safer C Library - Open Watcom". 3 May 2015. Archived from the original on 2015-05-03.
- ^ "safec: Safe C Library - README". rurban.github.io.
외부 링크
- C1X 헌장
- N1570, 2011년 4월 12일자 C1X 최종 초안
- ISO C 워킹 그룹의 공식 웹사이트
- PDF 외에 간단한 ASCII 및 링크 HTML 형식으로 된 표준 초안.
- Safe C Library of Bounded APIs
- Plum, Thomas (April 6, 2012). "C Finally Gets A New Standard". Dr. Dobb's Journal.
- Safe C API - 버퍼 오버플로 솔루션, OWASP Foundation, OWASP AppSec, 베이징 2011