{{위키데이터 속성 추적}}
'''C11'''은 ISO/IEC 9899:2011의 줄임말로 [[C (프로그래밍 언어)|C 언어]]의 최신 개정된 표준을 의미한다. 이전까지 표준이던 [[C99]]의 후속으로 최종안인<ref name="N1570"/>이 [[2011년 4월]]에 제출되었고 검토를 거쳐 [[2011년 12월]] 8일에 최종 승인되었다.

PELLES C 8.0에서 완전히 지원하며, [[GNU 컴파일러 모음|GCC]] 4.6, [[클랭|Clang]] 3.1, [[IBM]] XL C 12.1, [[비주얼 C++|MSVC]] 18 등이 C11의 일부 기능을 지원한다.

2018년 6월에 후속 개정판인 [[C18]] 표준이 발표되었다.

== C13에서 바뀐 점 ==
* 정렬 기능. (<code>_Alignas</code> 한정자, <code>alignof</code> 연산자, <code>aligned_alloc</code> 함수 지원 <stdalign.h> [[헤더 파일]])
* <code>_Noreturn</code> 함수 한정자.
* 형에 따른 제네릭 기능으로 <code>_Generic</code> 키워드 추가. 예를 들면 다음 매크로 <code>cbrt(x)</code>는 <code>x</code>의 형에 따라 <code>cbrtl</code>, <code>cbrtf</code>, <code>cbrt</code>로 호출 됨.
<div style="margin-left:3em"><syntaxhighlight lang="c">
#define cbrt(x) _Generic((x), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(x)</syntaxhighlight></div>
* 멀티스레드 지원. (<code>_Thread_local</code> 스토리지 한정자, <code><threads.h></code> 헤더에 스레드 생성 관리 함수, 뮤텍스, 컨디션, 로컬 스레드 저장소 함수 지원. 또한 <code>_Atomic</code> 형 한정자와 <code><stdatomic.h></code> 헤더를 이용해 [[원자성|아토믹]] 오퍼레이션 지원)
* C 유니코드 기술 문서 ISO/IEC TR 19769:2004를 토대로 [[유니코드]] 지원 개선 (<code>char16_t</code>와 <code>char32_t</code>를 각각  [[UTF-16]]/[[UTF-32]] 코드 저장용 형으로 할당. 유니코드 변환 함수를 <code><uchar.h></code>에 추가 함)<ref name="N1286"/>
* 메모리 [[경계 검사]](Memory bounds checking) 인터페이스(Annex K).<ref>{{웹 인용|last=Berin Babcock-McConnell|title=API02-C. Functions that read or write to or from an array should take an argument to specify the source or target size|url=https://www.securecoding.cert.org/confluence/display/seccode/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월 22일|보존url=https://web.archive.org/web/20110929133109/https://www.securecoding.cert.org/confluence/display/seccode/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일|url-status=dead}}</ref>
* 이전 C99에서 구식 함수로 규정한 <code>gets()</code>를 제거. 대신 버퍼 안정화/메모리 경계 검사 기능을 추가한 <code>gets_s</code>를 표준에 편입함.
* 분석 기능의 추가 (Annex L).
* [[부동소수점]](float) 형의 특징, 예를 들면 진수 변환, 정수부 얻기 등등을 검사하기 위한 매크로 추가
* 이름없는 <code>union</code> 또는 <code>struct</code>를 사용하기 더 편리해짐 예시: {{code|2=c|struct T { int tag; union { float x; int n; }; };}}.
* 정적 어셔션(Static assertion)은 이제 전처리기 <code>#if</code>, <code>#error</code> 등이 평가되기 전에 컴파일러가 먼저 형식을 처리한 다음 어셔선 처리가 수행됨
* <code>fopen()</code> 함수에 배타적 생성 모드 (<code>"…x"</code>)가 생김. 이 기능은 POSIX <code>open()</code> 함수의 <code>O_CREAT|O_EXCL</code>기능과 같으며 보통 파일을 배타적으로 생성 할 때 유용하다.
* <code>exit()</code> 함수와 별개로 최소한 종료 작업만 수행하고 프로그램을 종료하는 새로운 함수 <code>quick_exit()</code>의 추가.<ref>[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1327.htm WG14 N1327 Abandoning a Process]</ref>
* 복소수를 생성하는 매크로의 추가<ref name="N1464"/>

== 버전 감지 ==
C11에서는 표준 매크로 <code>__STD_VERSION__</code>의 값이 <code>201112L</code>로 정의 된다.<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_411.htm|title=Defect report #411|date=February 2012|publisher=ISO/IEC JTC1/SC22/WG14 - C|accessdate=2012-05-04}}</ref>

<syntaxhighlight lang="c">
#if __STDC_VERSION__ >= 201112L
    // C11 지원
#elif __STDC_VERSION__ >= 199901L
    // C99 지원
#else
    /* C11, C99 지원하지 않음 */
#endif
</syntaxhighlight>

== 특정 기능 지원 감지 ==
각 개별 컴파일러가 새로운 표준의 특정 부분만 지원할 경우 다음과 같은 매크로를 통해 기능을 지원하는지 여부를 확인할 수 있다.
{| class="wikitable"
|+ C11의 특정 기능 지원 감지
! 기능
! 기능 감지용 매크로
! C99에 정의됨<ref name="ISO9899-1999-6-10-8"/>
|-
| 분석 기능 (Annex L)
| <code>__STDC_ANALYZABLE__</code>
| 정의되지 않음
|-
| 메모리 경계 검출 (Annex K)
| <code>__STDC_LIB_EXT1__</code>
| 정의되지 않음
|-
| 멀티스레드 (<code><threads.h></code>)
| <code>__STDC_NO_THREADS__</code>
| 정의되지 않음
|-
| [[원자성|아토믹]] 기능 및 형식 (<code><stdatomic.h></code> 및 <code>_Atomic</code> 형 지정자)<ref name="N1558">[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1558.pdf WG14 N1558 Mar 14-18 meeting minutes (draft)]</ref>
| <code>__STDC_NO_ATOMICS__</code>
| 정의되지 않음
|-
| [[IEEE 754-2008|IEC 60559]] 부동소수점 산술 연산자 (Annex F)
| <code>__STDC_IEC_559__</code>
| 일부 지원
|-
| [[IEEE 754-2008|IEC 60559]] 복소수 산술 연산자 (Annex G)
| <code>__STDC_IEC_559_COMPLEX__</code>
| 일부 지원
|-
| 복소수 형 (<code><complex.h></code>)
| <code>__STDC_NO_COMPLEX__</code>
| 필수 사항
|-
| 가변 길이 배열<ref>ISO 9899:2011 Programming Languages - C 6.7.6.2&nbsp;4</ref>
| <code>__STDC_NO_VLA__</code>
| 필수 사항
|}

== 같이 보기 ==
* [[C (프로그래밍 언어)|C 언어]]
* [[C99]]

== 각주 ==
{{각주|refs=
<ref name="N1464">[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1464.htm WG14 N1464 Creation of complex value]</ref>
<ref name="N1570">[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf WG14 N1570 Committee Draft — April 12, 2011]</ref>
<ref name="ISO9899-1999-6-10-8">ISO 9899:1999 6.10.8 ''Predefined macro names''</ref>
<ref name="N1286">[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1286.pdf WG14 N1286 — "On Support for TR-19769 and New Character Types", Nick Stoughton, Larry Dwyer]</ref>
}}

== 외부 링크 ==
* [http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1250.pdf The C1X Charter]
* [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf N1570], the final draft of C1X, 2011-04-12 에 발표됨
* [http://www.open-std.org/jtc1/sc22/wg14/ ISO C Working Group's official website]
* [http://sourceforge.net/projects/safeclib/ Safe C Library of Bounded APIs]
* {{저널 인용|last=Plum|first=Thomas|date= 2012년 4월 6일|title=C Finally Gets A New Standard|journal=[[Dr. Dobb's Journal]]|url=http://drdobbs.com/cpp/232800444}}
* {{저널 인용|last=|first=|date=2009년 2월 20일|title=The Safe C Library|journal=[[Dr. Dobb's Journal]]|url=http://www.drdobbs.com/cpp/the-safe-c-library/214502214|확인날짜=2013년 11월 25일|보존url=https://web.archive.org/web/20131202222313/http://www.drdobbs.com/cpp/the-safe-c-library/214502214|보존날짜=2013년 12월 2일|url-status=dead}}
* [http://www.owasp.org.cn/OWASP_Conference/2011/17_.pdf Safe C API—Concise solution of buffer overflow, The OWASP Foundation, OWASP AppSec, Beijing 2011 ] {{웨이백|url=http://www.owasp.org.cn/OWASP_Conference/2011/17_.pdf |date=20131203031224 }}

{{C 프로그래밍 언어}}

[[분류:C 프로그래밍 언어]]
[[분류:프로그래밍 언어 표준]]