C11

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

C11은 ISO/IEC 9899:2011의 줄임말로 C 언어의 최신 개정된 표준을 의미한다. 이전까지 표준이던 C99의 후속으로 최종안인 [1]2011년 4월에 제출되었고 검토를 거쳐 2011년 12월 8일에 최종 승인되었다.

GCC 4.6, Clang 3.1, IBM XL C 12.1, MSVC 18 등이 C11의 일부 기능을 지원한다.

C99에서 바뀐 점[편집]

  • 정렬 기능. (_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_tchar32_t를 각각 UTF-16/UTF-32 코드 저장용 형으로 할당. 유니코드 변환 함수를 <uchar.h>에 추가 함)[2]
  • 메모리 경계 검사(Memory bounds checing) 인터페이스(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")가 생김. 이 기능은 POSIX open() 함수의 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

특정 기능 지원 감지[편집]

각 개별 컴파일러가 새로운 표준의 특정 부분만 지원할 경우 다음과 같은 매크로를 통해 기능을 지원하는지 여부를 확인할 수 있다.

C11의 특정 기능 지원 감지
기능 기능 감지용 매크로 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__ 필수 사항

같이 보기[편집]

바깥 고리[편집]

참조[편집]

References[편집]