C11 (C 버전)
보이기
C11은 ISO/IEC 9899:2011의 줄임말로 C 언어의 최신 개정된 표준을 의미한다. 이전까지 표준이던 C99의 후속으로 최종안인[1]이 2011년 4월에 제출되었고 검토를 거쳐 2011년 12월 8일에 최종 승인되었다.
PELLES C 8.0에서 완전히 지원하며, GCC 4.6, Clang 3.1, IBM XL C 12.1, MSVC 18 등이 C11의 일부 기능을 지원한다.
2018년 6월에 후속 개정판인 C18 표준이 발표되었다.
C13에서 바뀐 점
[편집]- 정렬 기능. (
_Alignas
한정자,alignof
연산자,aligned_alloc
함수 지원 <stdalign.h> 헤더 파일) _Noreturn
함수 한정자.- 형에 따른 제네릭 기능으로
_Generic
키워드 추가. 예를 들면 다음 매크로cbrt(x)
는x
의 형에 따라cbrtl
,cbrtf
,cbrt
로 호출 됨.
#define cbrt(x) _Generic((x), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(x)
- 멀티스레드 지원. (
_Thread_local
스토리지 한정자,<threads.h>
헤더에 스레드 생성 관리 함수, 뮤텍스, 컨디션, 로컬 스레드 저장소 함수 지원. 또한_Atomic
형 한정자와<stdatomic.h>
헤더를 이용해 아토믹 오퍼레이션 지원) - C 유니코드 기술 문서 ISO/IEC TR 19769:2004를 토대로 유니코드 지원 개선 (
char16_t
와char32_t
를 각각 UTF-16/UTF-32 코드 저장용 형으로 할당. 유니코드 변환 함수를<uchar.h>
에 추가 함)[2] - 메모리 경계 검사(Memory bounds checking) 인터페이스(Annex K).[3]
- 이전 C99에서 구식 함수로 규정한
gets()
를 제거. 대신 버퍼 안정화/메모리 경계 검사 기능을 추가한gets_s
를 표준에 편입함. - 분석 기능의 추가 (Annex L).
- 부동소수점(float) 형의 특징, 예를 들면 진수 변환, 정수부 얻기 등등을 검사하기 위한 매크로 추가
- 이름없는
union
또는struct
를 사용하기 더 편리해짐 예시:struct T { int tag; union { float x; int n; }; };
. - 정적 어셔션(Static assertion)은 이제 전처리기
#if
,#error
등이 평가되기 전에 컴파일러가 먼저 형식을 처리한 다음 어셔선 처리가 수행됨 fopen()
함수에 배타적 생성 모드 ("…x"
)가 생김. 이 기능은 POSIXopen()
함수의O_CREAT|O_EXCL
기능과 같으며 보통 파일을 배타적으로 생성 할 때 유용하다.exit()
함수와 별개로 최소한 종료 작업만 수행하고 프로그램을 종료하는 새로운 함수quick_exit()
의 추가.[4]- 복소수를 생성하는 매크로의 추가[5]
버전 감지
[편집]C11에서는 표준 매크로 __STD_VERSION__
의 값이 201112L
로 정의 된다.[6]
#if __STDC_VERSION__ >= 201112L
// C11 지원
#elif __STDC_VERSION__ >= 199901L
// C99 지원
#else
/* C11, C99 지원하지 않음 */
#endif
특정 기능 지원 감지
[편집]각 개별 컴파일러가 새로운 표준의 특정 부분만 지원할 경우 다음과 같은 매크로를 통해 기능을 지원하는지 여부를 확인할 수 있다.
기능 | 기능 감지용 매크로 | C99에 정의됨[7] |
---|---|---|
분석 기능 (Annex L) | __STDC_ANALYZABLE__
|
정의되지 않음 |
메모리 경계 검출 (Annex K) | __STDC_LIB_EXT1__
|
정의되지 않음 |
멀티스레드 (<threads.h> )
|
__STDC_NO_THREADS__
|
정의되지 않음 |
아토믹 기능 및 형식 (<stdatomic.h> 및 _Atomic 형 지정자)[8]
|
__STDC_NO_ATOMICS__
|
정의되지 않음 |
IEC 60559 부동소수점 산술 연산자 (Annex F) | __STDC_IEC_559__
|
일부 지원 |
IEC 60559 복소수 산술 연산자 (Annex G) | __STDC_IEC_559_COMPLEX__
|
일부 지원 |
복소수 형 (<complex.h> )
|
__STDC_NO_COMPLEX__
|
필수 사항 |
가변 길이 배열[9] | __STDC_NO_VLA__
|
필수 사항 |
같이 보기
[편집]각주
[편집]- ↑ WG14 N1570 Committee Draft — April 12, 2011
- ↑ WG14 N1286 — "On Support for TR-19769 and New Character Types", Nick Stoughton, Larry Dwyer
- ↑ 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”. 2011년 9월 29일에 원본 문서에서 보존된 문서. 2011년 9월 22일에 확인함.
- ↑ WG14 N1327 Abandoning a Process
- ↑ WG14 N1464 Creation of complex value
- ↑ “Defect report #411”. ISO/IEC JTC1/SC22/WG14 - C. February 2012. 2012년 5월 4일에 확인함.
- ↑ ISO 9899:1999 6.10.8 Predefined macro names
- ↑ WG14 N1558 Mar 14-18 meeting minutes (draft)
- ↑ ISO 9899:2011 Programming Languages - C 6.7.6.2 4
외부 링크
[편집]- The C1X Charter
- N1570, the final draft of C1X, 2011-04-12 에 발표됨
- ISO C Working Group's official website
- Safe C Library of Bounded APIs
- Plum, Thomas (2012년 4월 6일). “C Finally Gets A New Standard”. 《Dr. Dobb's Journal》.
- “The Safe C Library”. 《Dr. Dobb's Journal》. 2009년 2월 20일. 2013년 12월 2일에 원본 문서에서 보존된 문서. 2013년 11월 25일에 확인함.
- Safe C API—Concise solution of buffer overflow, The OWASP Foundation, OWASP AppSec, Beijing 2011 Archived 2013년 12월 3일 - 웨이백 머신