C11 (C standart revizyonu) - C11 (C standard revision)
C dili revizyonları |
---|
C11 (eski adıyla C1X ), C programlama dili için geçmiş bir standart olan ISO/IEC 9899:2011 için resmi olmayan bir addır . C99'un yerini almıştır (standart ISO/IEC 9899:1999) ve yerini C17 (standart ISO/IEC 9899:2018) almıştır. C11, temel olarak yaygın çağdaş derleyiciler tarafından zaten desteklenen özellikleri standartlaştırır ve birden çok yürütme iş parçacığını daha iyi desteklemek için ayrıntılı bir bellek modeli içerir . Uyumlu C99 uygulamalarının gecikmeli kullanılabilirliği nedeniyle, C11, temel dil standardına uymayı kolaylaştırmak için bazı özellikleri isteğe bağlı hale getirir.
Nihai taslak N1570, Nisan 2011'de yayınlandı. Yeni standart, 10 Ekim 2011'de nihai taslak incelemesinden geçti ve resmi olarak ISO tarafından onaylandı ve 8 Aralık 2011'de ISO/IEC 9899:2011 olarak yayınlandı, herhangi bir yorum gerektirmeden katılan ulusal organlar tarafından karara bağlanır.
Standart bir makro __STDC_VERSION__
, 201112L
C11 desteğinin mevcut olduğunu belirtmek için değerle tanımlanır . C11'in bazı özellikleri, sürüm 4.6 ile başlayan GCC , sürüm 3.1 ile başlayan Clang , sürüm 12.1 ile başlayan IBM XL C ve Eylül 2020'de VS 2019 (16.8) ile başlayan Microsoft Visual C++ tarafından desteklenmektedir .
C99'dan Değişiklikler
Standart, C99 dili ve kitaplık özelliklerinde aşağıdakiler gibi çeşitli değişiklikler içerir:
-
Hizalama belirtimi (
_Alignas
belirleyici,_Alignof
operatör,aligned_alloc
işlev,<stdalign.h>
başlık) _Noreturn
Fonksiyon belirteci ve<stdnoreturn.h>
başlık_Generic
Anahtar sözcüğü kullanarak genel ifadeler yazın. Örneğin, aşağıdaki makrocbrt(x)
çevirircbrtl(x)
,cbrt(x)
ya dacbrtf(x)
türüne görex
:
#define cbrt(x) _Generic((x), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(x)
-
Çoklu iş parçacığı desteği (
_Thread_local
depolama sınıfı belirteci,<threads.h>
iş parçacığı oluşturma/yönetim işlevlerini içeren başlık, muteks , koşul değişkeni ve iş parçacığına özgü depolama işlevselliğinin yanı sıra<stdatomic.h>
C11 bellek modelini destekleyen atomik işlemler için). - C Unicode Teknik Raporu ISO/IEC TR 19769:2004'e ( ve dönüştürme işlevleri dahil olmak üzere UTF-16 / UTF-32 kodlu verileri depolama türleri ve bunlara karşılık gelen ve dize değişmez ön ekleri ve ayrıca ön eki) temel alan geliştirilmiş Unicode desteği UTF-8 kodlu değişmez değerler).
char16_t
char32_t
<uchar.h>
u
U
u8
- Çıkarılması
gets
(Safer lehine fonksiyonufgets
1999 / Cor.3: 2007 (E) Önceki C dili standart revizyon, ISO / IEC 9899 yılında kaldırıldı). - Sınır kontrol arayüzleri (Ek K).
- Analiz edilebilirlik özellikleri (Ek L).
- Normal altı kayan nokta sayıları ve türün depolayabildiği ondalık basamak sayısı ile ilgili kayan nokta türlerinin özelliklerini sorgulamak için daha fazla makro .
- Anonim yapılar ve birlikler , birlikler ve yapılar iç içe geçtiğinde kullanışlıdır, örneğin .
struct T { int tag; union { float x; int n; }; };
-
Statik iddialar daha sonra daha aşamasında çeviri sırasında değerlendirilir,
#if
ve#error
tip çevirmen tarafından anlaşılır. - için özel bir oluştur ve aç modu (
"…x"
sonek)fopen
. Bu davranacağını gibiO_CREAT|O_EXCL
içinde POSIX'e yaygın kullanılır, kilit dosyaları . quick_exit
Bir program sona erdirmek için üçüncü bir yolu olarak fonksiyonu, en az deinitialization dem ile Eğer yapmak amacıylaexit
başarısız olur.- Bir dereceye kadar POSIX uyumluluğu ile yeni bir
timespec_get
işlev ve karşılık gelen yapı .<time.h>
- Karmaşık değerlerin oluşturulması için makrolar (kısmen
real + imaginary*I
, eğerimaginary
sonsuzsa veya NaN ise beklenen değeri vermeyebilir ).
Opsiyonel özellikler
Yeni revizyon, 1999 revizyonunda desteklenmesi zorunlu olanlar da dahil olmak üzere, uygulamaların standardın belirli kısımlarını desteklememesine izin veriyor. Programlar, bir uygulamanın belirli bir özelliği destekleyip desteklemediğini belirlemek için önceden tanımlanmış makroları kullanabilir.
Özellik | Özellik testi makrosu | C99'da kullanılabilirlik |
---|---|---|
Analiz edilebilirlik (Ek L) |
__STDC_ANALYZABLE__
|
Müsait değil |
Sınır kontrol arayüzleri (Ek K) |
__STDC_LIB_EXT1__
|
Müsait değil |
Çoklu kullanım ( <threads.h> )
|
__STDC_NO_THREADS__
|
Müsait değil |
Atomik ilkeller ve türleri ( <stdatomic.h> ve _Atomic tür niteleyicisi)
|
__STDC_NO_ATOMICS__
|
Müsait değil |
IEC 60559 kayan nokta aritmetiği (Ek F) |
__STDC_IEC_559__
|
İsteğe bağlı |
IEC 60559 uyumlu karmaşık aritmetik (Ek G) |
__STDC_IEC_559_COMPLEX__
|
İsteğe bağlı |
Karmaşık türler ( <complex.h> )
|
__STDC_NO_COMPLEX__
|
Barındırılan uygulamalar için zorunlu |
Değişken uzunluklu diziler |
__STDC_NO_VLA__
|
Zorunlu |
eleştiri
İsteğe bağlı sınır kontrol arayüzleri (Ek K) tartışmalı olmaya devam ediyor ve geniş çapta uygulanmadı ve bunların kullanımdan kaldırılması veya bir sonraki standart revizyondan çıkarılması önerildi. Bu arayüzün ana savunucusu olan Microsoft bile tanıma uymuyor. Buna ek olarak, Ek K gibi daha yararlı TR24731-2 (dinamik ayırma işlevleri) içermez vasprintf
ve open_memstream
. Birkaç açık kaynak uygulaması, Open Watcom C/C++'ın "Daha Güvenli C" kitaplığını ve safeclib'i içerir.
Ayrıca bakınız
- C++20 , C++17 , C++14 , C++11 , C++03 , C++98 , C++ programlama dili standardının sürümleri
- C ve C++ uyumluluğu
Referanslar
Dış bağlantılar
- C1X Sözleşmesi
- N1570 , C1X'in son taslağı, 12 Nisan 2011 tarihli
- ISO C Çalışma Grubu'nun resmi web sitesi
- PDF'ye ek olarak basit ASCII ve bağlantılı HTML formlarında standart taslak .
- Sınırlı API'lerin Güvenli C Kitaplığı
- Erik, Thomas (6 Nisan 2012). "C Sonunda Yeni Bir Standart Aldı" . Dr. Dobb'un Günlüğü .
- Güvenli C API—Arabellek taşmasının özlü çözümü, The OWASP Foundation, OWASP AppSec, Beijing 2011