ANSI C - ANSI C

ANSI C , ISO C ve Standart C , Amerikan Ulusal Standartlar Enstitüsü (ANSI) ve Uluslararası Standardizasyon Örgütü (ISO) tarafından yayınlanan C programlama dili için birbirini takip eden standartlardır . Tarihsel olarak, adlar özellikle standardın orijinal ve en iyi desteklenen versiyonuna atıfta bulunur ( C89 veya C90 olarak bilinir ). C dilinde yazan yazılım geliştiricileri, derleyiciler arasında taşınabilirliğe yardımcı olduğu için standartlara uymaya teşvik edilir .

Tarih ve görünüm

C için ilk standart ANSI tarafından yayınlandı. Bu belge daha sonra Uluslararası Standardizasyon Örgütü (ISO) tarafından kabul edilmiş ve ISO tarafından yayınlanan müteakip revizyonlar ANSI tarafından kabul edilmiş olsa da, "ANSI C" hala standardı ifade etmek için kullanılmaktadır. Bazı yazılım geliştiriciler ISO C terimini kullanırken, diğerleri standartlar açısından tarafsızdır ve Standart C'yi kullanır.

Standartlaştırma C

1983'te Amerikan Ulusal Standartlar Enstitüsü, C'nin standart bir spesifikasyonunu oluşturmak için X3J11 adlı bir komite kurdu. 1985'te, bazen C85 olarak adlandırılan ilk Standart Taslak yayınlandı . 1986'da, bazen C86 olarak adlandırılan başka bir Taslak Standardı yayınlandı . Ön yayın Standardı C, 1988'de yayınlandı ve bazen C88 olarak anılır .

C89

ANSI standardı 1989'da tamamlandı ve ANSI X3.159-1989 "Programlama Dili C" olarak onaylandı. Dilin bu sürümüne genellikle "ANSI C" denir. Daha sonra bazen "C89" etiketi, onu C90'dan ayırt etmek için kullanılır, ancak aynı etiketleme yöntemi kullanılır.

C90

C89 ile aynı standart, Uluslararası Standardizasyon Örgütü tarafından ISO/IEC 9899:1990 olarak, yalnızca bazen C90 olarak anılan biçimlendirme değişiklikleriyle onaylanmıştır. Bu nedenle, "C89" ve "C90" terimleri temelde aynı dili ifade eder.

Bu standart hem ANSI/INCITS hem de ISO/IEC tarafından yürürlükten kaldırılmıştır.

C95

1995 yılında ISO , ANSI-C standardı için Değişiklik 1 adlı bir uzantı yayınladı. Sonunda tam adı ISO/IEC 9899:1990/AMD1:1995 veya takma adı C95 idi . Hata düzeltmenin yanı sıra, dil yeteneklerinde aşağıdakiler gibi başka değişiklikler de yapıldı:

  • Geliştirilmiş çoklu bayt ve geniş karakter standart kütüphanede destek tanıtan <wchar.h>ve <wctype.h>aynı zamanda multi-byte I / O'yu
  • İlavesi digraphs dile
  • Operatörlerin alternatif belirtimi için standart makroların belirtimi, ör and.&&
  • Standart makronun özellikleri __STDC_VERSION__

Değişikliğe ek olarak, ISO tarafından C90 için iki teknik düzeltme yayınlandı:

  • 1994 yılında ISO/IEC 9899:1990/Cor 1:1994 TCOR1
  • ISO/IEC 9899:1990/Cor 2:1996, 1996

C95 uyumluluğu için önişlemci testi

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L

/* C95 compatible source code. */
#elif defined(__STDC__)
/* C89 compatible source code. */
#endif

C99

Mart 2000'de ANSI, ISO/IEC 9899:1999 standardını benimsedi. Bu standarda genel olarak C99 denir. Önceki standarda yapılan bazı önemli eklemeler şunları içerir:

C99 için ISO tarafından üç teknik düzeltme yayınlandı:

  • ISO/IEC 9899:1999/Cor 1:2001(E)
  • ISO/IEC 9899:1999/Cor 2:2004(E)
  • ISO / IEC 9899: 1999 / Kor 3: 2007 standart kütüphanesi işlevi kullanımdan kaldırıyor için dikkate değer (E) alır

Bu standart hem ANSI/INCITS hem de ISO/IEC tarafından C11 lehine geri çekilmiştir.

C11

C11 resmi olarak onaylandı ve 8 Aralık 2011'de yayınlandı. Kayda değer özellikler arasında geliştirilmiş Unicode desteği, yeni _Genericanahtar kelimeyi kullanan genel tür ifadeleri , platformlar arası çoklu iş parçacığı API'si ( threads.h) ve hem çekirdek dilde hem de kitaplıkta atomik tür desteği bulunur. ( stdatomic.h).

ISO tarafından C11 için bir teknik düzeltme yayınlanmıştır:

  • ISO/IEC 9899:2011/Cor 1:2012

C17

Ekim 2018 itibariyle, "C17", C programlama dili için geçerli standarttır .

C17, yeni dil özellikleri sunmadan C11'deki kusurları giderir.

C2x

C2x sonraki (sonra gayrı adıdır C17 ) majör C dili standart revizyon.

Diğer ilgili ISO yayınları

Standardizasyon sürecinin bir parçası olarak ISO , C dili ile ilgili teknik raporlar ve spesifikasyonlar da yayınlar :

  • ISO/IEC TR 19769:2004, Unicode dönüştürme biçimlerini desteklemek için kütüphane uzantıları hakkında, C11'e entegre
  • ISO/IEC TR 24731-1:2007, sınır kontrollü arabirimleri desteklemek için kitaplık uzantıları hakkında, C11'e entegre
  • ISO/IEC TR 18037:2008, gömülü C uzantılarında
  • ISO/IEC TR 24732:2009, ondalık kayan nokta aritmetiği üzerinde, yerini ISO/IEC TS 18661-2:2015 almıştır
  • ISO/IEC TR 24747:2009, özel matematiksel fonksiyonlar hakkında,
  • ISO/IEC TR 24731-2:2010, dinamik ayırma işlevlerini desteklemek için kitaplık uzantıları hakkında
  • ISO/IEC TS 17961:2013, C'de güvenli kodlama hakkında
  • ISO/IEC TS 18661-1:2014, IEC 60559:2011 uyumlu ikili kayan nokta aritmetiği üzerinde
  • ISO/IEC TS 18661-2:2015, IEC 60559:2011 uyumlu ondalık kayan nokta aritmetiği üzerinde
  • ISO/IEC TS 18661-3:2015, IEC 60559:2011 uyumlu değişim ve genişletilmiş kayan nokta türleri hakkında
  • ISO/IEC TS 18661-4:2015, IEC 60559:2011 uyumlu ek işlevlerde

TS 18661'in beşinci ve son bölümü de dahil olmak üzere, bir yazılım işlemsel bellek belirtimi ve paralel kitaplık uzantıları da dahil olmak üzere daha fazla teknik belirtim geliştirme aşamasındadır ve onay beklemektedir.

Büyük derleyicilerden destek

ANSI C artık hemen hemen tüm yaygın olarak kullanılan derleyiciler tarafından desteklenmektedir. GCC ve Clang, günümüzde popüler olan iki büyük C derleyicisidir ve her ikisi de, C17 ve C18 gibi sonraki spesifikasyonlardan yapılan değişiklikleri içeren güncellemeler içeren C11'e dayanmaktadır. Yalnızca standart C'de ve donanıma bağlı varsayımlar olmadan yazılan herhangi bir kaynak kodunun , uyumlu bir C uygulamasına sahip herhangi bir platformda doğru bir şekilde derlenmesi neredeyse garanti edilir . Bu tür önlemler olmadan, çoğu program, örneğin GUI kitaplıkları gibi standart olmayan kitaplıkların kullanımı veya derleyiciye veya platforma özgü niteliklere güvenme nedeniyle yalnızca belirli bir platformda veya belirli bir derleyiciyle derlenebilir. belirli veri türlerinin tam boyutu ve bayt endianness gibi .

Uyumluluk algılanabilirliği

K&R C ve ANSI C standardı arasındaki farkları azaltmak için __STDC__("standart c") makrosu, kodu ANSI ve K&R bölümlerine bölmek için kullanılabilir.

 #if defined(__STDC__) && __STDC__
 extern int getopt(int, char * const *, const char *);
 #else
 extern int getopt();
 #endif

Yukarıdaki örnekte, ANSI uyumlu uygulamalar için bir işlev bildiriminde bir prototip kullanılırken, aksi takdirde eskimiş bir prototip olmayan bildirim kullanılır. Bunlar, C99 itibariyle hala ANSI uyumludur. Bu kodun hem tanımı hem de değerlendirmeyi nasıl kontrol ettiğine dikkat edin: bunun nedeni, bazı uygulamaların __STDC__ANSI olmayan uyumluluğu belirtmek için sıfıra ayarlanabilmesidir .

ANSI C'yi destekleyen derleyiciler

Ayrıca bakınız

Referanslar

  1. ^ Brad Kelechava (2017-09-14). "ANSI C ve ISO C'nin Kökeni" . 2018-08-14 alındı .
  2. ^ Richard Hale Shaw (Eylül 1988). "Standart C: ANSI Taslağı Büyüyor". PC Dergisi . Cilt 7 hayır. 15. s. 116-117.
  3. ^ "Standartlar - GNU Derleyici Koleksiyonunu (GCC) Kullanma" . 2012-06-24 alındı .
  4. ^ "INCITS/ISO/IEC 9899" . www.techstreet.com . 2018-10-03 alındı .
  5. ^ "ISO/IEC 9899:1990 - Programlama Dilleri -- C" . 2012-06-24 alındı .
  6. ^ Clive DW Tüy (2010-09-12). "Normatif Ek 1'in kısa bir açıklaması" .
  7. ^ "ISO/IEC 9899:1990/Amd 1:1995" . Uluslararası Standardizasyon Örgütü. 2013-03-22.
  8. ^ "ISO/IEC 9899:1990/Kor 1:1994" . ISO . 2019-01-21 alındı .
  9. ^ "ISO/IEC 9899:1990/Kor 2:1996" . ISO . 2019-01-21 alındı .
  10. ^ 14:00-17:00. "ISO/IEC 9899:1999" . ISO . 2019-01-21 alındı .CS1 bakımı: sayısal isimler: yazar listesi ( link )
  11. ^ "INCITS/ISO/IEC 9899-2012" . ANSI.
  12. ^ "ISO/IEC 9899:1999 - Programlama Dilleri -- C" . 2012-06-24 alındı .
  13. ^ "ISO/IEC 9899:2011/Kor 1:2012" . Uluslararası Standardizasyon Örgütü.
  14. ^ "ISO/IEC 9899:2018 - Bilgi teknolojisi -- Programlama dilleri -- C" . www.iso.org .
  15. ^ "Standart - C" . www.iso-9899.info .
  16. ^ "C'nin Tarihi" . cpreference .
  17. ^ "ISO/IEC TR 19769:2004" . Uluslararası Standardizasyon Örgütü.
  18. ^ "ISO/IEC TR 24731-1:2007" . Uluslararası Standardizasyon Örgütü.
  19. ^ "ISO/IEC TR 18037:2008" . Uluslararası Standardizasyon Örgütü.
  20. ^ "ISO/IEC TR 24732:2009" . Uluslararası Standardizasyon Örgütü.
  21. ^ "ISO/IEC TR 24747:2009" . Uluslararası Standardizasyon Örgütü.
  22. ^ "ISO/IEC TR 24731-2:2010" . Uluslararası Standardizasyon Örgütü.
  23. ^ "ISO/IEC TS 17961:2013" . Uluslararası Standardizasyon Örgütü.
  24. ^ "ISO/IEC TS 18661-1:2014" . Uluslararası Standardizasyon Örgütü.
  25. ^ "ISO/IEC TS 18661-2:2015" . Uluslararası Standardizasyon Örgütü.
  26. ^ "ISO/IEC TS 18661-3:2015" . Uluslararası Standardizasyon Örgütü.
  27. ^ "ISO/IEC TS 18661-4:2015" . Uluslararası Standardizasyon Örgütü.
  28. ^ https://en.cppreference.com/w/c/experimental adresindeki listeye bakın16 Ocak 2016'da ziyaret edildi.
  29. ^ "GNU Derleyici Koleksiyonunu (GCC) Kullanmak: Standartlar" . gcc.gnu.org . 2019-02-05 alındı .
  30. ^ "Dil Uyumluluğu" . clang.llvm.org . 2019-02-05 alındı .
  31. ^ "Standart önceden tanımlanmış makro adları" . www.ibm.com . 2019-04-10 alındı .
  32. ^ "HP C/ANSI C geliştirici paketi" . 2015-07-12 alındı .
  33. ^ IBM XL C/C++ derleyicilerine eklenen ISO C11 desteği
  34. ^ Pelles C sayfalarına bağlantı

daha fazla okuma

  • Schreiner, Axel-Tobias (1993). ANSI-C ile Nesne Yönelimli Programlama . Hanser. ISBN'si 3-446-17426-5.

Dış bağlantılar