상위 질문
타임라인
채팅
관점
C11 (C 표준 개정판)
위키백과, 무료 백과사전
Remove ads
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]
Remove ads
버전 감지
C11에서는 표준 매크로 __STD_VERSION__
의 값이 201112L
로 정의 된다.[6]
#if __STDC_VERSION__ >= 201112L
// C11 지원
#elif __STDC_VERSION__ >= 199901L
// C99 지원
#else
/* C11, C99 지원하지 않음 */
#endif
특정 기능 지원 감지
각 개별 컴파일러가 새로운 표준의 특정 부분만 지원할 경우 다음과 같은 매크로를 통해 기능을 지원하는지 여부를 확인할 수 있다.
같이 보기
각주
외부 링크
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads