ANSI C - ANSI C

ANSI C , ISO C a Standard C jsou postupné normy pro programovací jazyk C publikované Americkým národním normalizačním institutem (ANSI) a Mezinárodní organizací pro normalizaci (ISO). Historicky se názvy týkaly konkrétně původní a nejlépe podporované verze standardu (známé jako C89 nebo C90 ). Softwarovým vývojářům, kteří píší v jazyce C, se doporučuje dodržovat standardy, protože to pomáhá přenositelnosti mezi kompilátory.

Historie a výhled

První standard pro C vydal ANSI. Ačkoli tento dokument byl následně přijat Mezinárodní organizací pro normalizaci (ISO) a následné revize publikované ISO byly přijaty ANSI, „ANSI C“ se stále používá k označení normy. Zatímco někteří vývojáři softwaru používají termín ISO C, jiní jsou pro tělo norem neutrální a používají standard C.

Standardizace C.

V roce 1983 vytvořil americký národní institut pro normalizaci výbor X3J11, který stanovil standardní specifikaci C. V roce 1985 byl vydán první standardní návrh, někdy označovaný jako C85 . V roce 1986 byl vydán další návrh standardu, někdy označovaný jako C86 . Předběžná verze Standard C byla vydána v roce 1988 a někdy se označuje jako C88 .

C89

Standard ANSI byl dokončen v roce 1989 a ratifikován jako ANSI X3.159-1989 "Programming Language C." Tato verze jazyka je často označována jako "ANSI C". Později se někdy používá označení „C89“ k odlišení od C90, ale se stejnou metodou označování.

C90

Stejná norma jako C89 byla ratifikována Mezinárodní organizací pro normalizaci jako ISO/IEC 9899: 1990, pouze se změnami formátování, která je někdy označována jako C90. Proto výrazy „C89“ a „C90“ označují v podstatě stejný jazyk.

Tuto normu stáhly jak ANSI/INCITS, tak ISO/IEC.

C95

V roce 1995 ISO publikovalo rozšíření nazvané Dodatek 1 pro standard ANSI-C. Jeho úplný název nakonec byl ISO/IEC 9899: 1990/AMD1: 1995 nebo přezdívaný C95 . Kromě opravy chyb došlo k dalším změnám jazykových možností, například:

  • Vylepšená podpora vícebajtových a širokých znaků ve standardní knihovně, zavádějící <wchar.h>a <wctype.h>také vícebajtové I/O
  • Přidání digrafů do jazyka
  • Specifikace standardních maker pro alternativní specifikaci operátorů, např. andPro&&
  • Specifikace standardního makra __STDC_VERSION__

Kromě dodatku byly podle ISO pro C90 zveřejněny dvě technické opravy:

  • ISO/IEC 9899: 1990/Cor 1: 1994 TCOR1 v roce 1994
  • ISO/IEC 9899: 1990/Cor 2: 1996 v roce 1996

Předprocesorový test kompatibility C95

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

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

C99

V březnu 2000 přijala ANSI normu ISO/IEC 9899: 1999. Tento standard se běžně označuje jako C99. Některé pozoruhodné dodatky k předchozí normě zahrnují:

ISO pro C99 publikovaly tři technické opravy:

  • ISO/IEC 9899: 1999/Cor 1: 2001 (E)
  • ISO/IEC 9899: 1999/Cor 2: 2004 (E)
  • ISO/IEC 9899: 1999/Cor 3: 2007 (E), pozoruhodný pro zastarávání standardní funkce knihovny dostane

Tato norma byla stažena jak ANSI/INCITS, tak ISO/IEC ve prospěch C11.

C11

C11 byla oficiálně ratifikována a publikována 8. prosince 2011. Mezi významné funkce patří vylepšená podpora Unicode , typově generické výrazy využívající nové _Genericklíčové slovo, multiplatformní vícevláknové API ( threads.h) a podpora atomových typů jak v základním jazyce, tak v knihovně ( stdatomic.h).

Jedna technická oprava byla publikována ISO pro C11:

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

C17

Od října 2018, „C17“ je současná norma pro C programovací jazyk .

C17 řeší závady v C11, aniž by zavedl nové jazykové funkce.

C2x

C2x je neformální název pro další (po C17 ) hlavní revizi standardu jazyka C.

Další související publikace ISO

Jako součást procesu normalizace vydává ISO také technické zprávy a specifikace související s jazykem C:

  • ISO/IEC TR 19769: 2004, o rozšířeních knihoven na podporu transformačních formátů Unicode, integrovaných do C11
  • ISO/IEC TR 24731-1: 2007, o rozšířeních knihoven na podporu rozhraní kontrolovaných hranicemi, integrováno do C11
  • ISO/IEC TR 18037: 2008, na vložená rozšíření C.
  • ISO/IEC TR 24732: 2009, o desítkové aritmetice s plovoucí desetinnou čárkou, nahrazeno ISO/IEC TS 18661-2: 2015
  • ISO/IEC TR 24747: 2009, o speciálních matematických funkcích,
  • ISO/IEC TR 24731-2: 2010, o rozšířeních knihoven na podporu funkcí dynamické alokace
  • ISO/IEC TS 17961: 2013, o bezpečném kódování v C
  • ISO/IEC TS 18661-1: 2014, na IEC 60559: 2011- kompatibilní binární aritmetika s pohyblivou řádovou čárkou
  • ISO/IEC TS 18661-2: 2015, na IEC 60559: 2011 kompatibilní desítková aritmetika s pohyblivou řádovou čárkou
  • ISO/IEC TS 18661-3: 2015, na IEC 60559: 2011 kompatibilní výměnné a rozšířené typy s plovoucí desetinnou čárkou
  • ISO/IEC TS 18661-4: 2015, na doplňkové funkce kompatibilní s IEC 60559: 2011

Další technické specifikace jsou ve vývoji a čekají na schválení, včetně páté a poslední části TS 18661, specifikace softwarové transakční paměti a rozšíření paralelní knihovny.

Podpora od hlavních překladačů

ANSI C nyní podporují téměř všechny široce používané kompilátory. GCC a Clang jsou dva hlavní kompilátory C dnes populární, oba jsou založeny na C11 s aktualizacemi včetně změn z pozdějších specifikací, jako jsou C17 a C18. Jakýkoli zdrojový kód napsaný pouze ve standardu C a bez jakýchkoli předpokladů závislých na hardwaru je prakticky zaručeno, že se bude správně kompilovat na jakékoli platformě s odpovídající implementací jazyka C. Bez těchto předběžných opatření lze většinu programů kompilovat pouze na určité platformě nebo s konkrétním kompilátorem, například z důvodu použití nestandardních knihoven, jako jsou knihovny GUI , nebo z důvodu spoléhání se na atributy specifické pro kompilátory nebo platformy jako je přesná velikost určitých datových typů a byte endianness .

Detekovatelnost shody

Ke zmírnění rozdílů mezi K&R C a standardem ANSI C __STDC__lze použít makro („standardní c“) k rozdělení kódu na sekce ANSI a K&R.

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

Ve výše uvedeném příkladu je prototyp použit v deklaraci funkce pro implementace kompatibilní s ANSI, zatímco zastarávající ne-prototypová deklarace je použita jinak. Ty jsou stále kompatibilní s ANSI od C99. Všimněte si, jak tento kód kontroluje jak definici, tak vyhodnocení: Důvodem je, že některé implementace mohou být nastaveny __STDC__na nulu, aby indikovaly shodu s normou ANSI.

Kompilátory podporující ANSI C

Viz také

Reference

  1. ^ Brad Kelechava (2017-09-14). „Původ ANSI C a ISO C“ . Citováno 2018-08-14 .
  2. ^ Richard Hale Shaw (září 1988). „Standard C: Návrh ANSI roste“. PC časopis . Sv. 7 č. 15. s. 116–117.
  3. ^ „Standardy - používání kolekce kompilátorů GNU (GCC)“ . Citováno 2012-06-24 .
  4. ^ "INCITS/ISO/IEC 9899" . www.techstreet.com . Citováno 2018-10-03 .
  5. ^ "ISO/IEC 9899: 1990 - Programovací jazyky - C" . Citováno 2012-06-24 .
  6. ^ Clive DW Feather (2010-09-12). „Stručný popis normativního dodatku 1“ .
  7. ^ "ISO/IEC 9899: 1990/Amd 1: 1995" . Mezinárodní organizace pro normalizaci. 2013-03-22.
  8. ^ "ISO/IEC 9899: 1990/Cor 1: 1994" . ISO . Citováno 2019-01-21 .
  9. ^ "ISO/IEC 9899: 1990/Cor 2: 1996" . ISO . Citováno 2019-01-21 .
  10. ^ 14: 00-17: 00. „ISO/IEC 9899: 1999“ . ISO . Citováno 2019-01-21 .Správa CS1: numerická jména: seznam autorů ( odkaz )
  11. ^ "INCITS/ISO/IEC 9899-2012" . ANSI.
  12. ^ "ISO/IEC 9899: 1999 - Programovací jazyky - C" . Citováno 2012-06-24 .
  13. ^ "ISO/IEC 9899: 2011/Cor 1: 2012" . Mezinárodní organizace pro normalizaci.
  14. ^ "ISO/IEC 9899: 2018 - Informační technologie - Programovací jazyky - C" . www.iso.org .
  15. ^ "Standard - C" . www.iso-9899.info .
  16. ^ „Historie C“ . cppreference .
  17. ^ "ISO/IEC TR 19769: 2004" . Mezinárodní organizace pro normalizaci.
  18. ^ "ISO/IEC TR 24731-1: 2007" . Mezinárodní organizace pro normalizaci.
  19. ^ "ISO/IEC TR 18037: 2008" . Mezinárodní organizace pro normalizaci.
  20. ^ "ISO/IEC TR 24732: 2009" . Mezinárodní organizace pro normalizaci.
  21. ^ "ISO/IEC TR 24747: 2009" . Mezinárodní organizace pro normalizaci.
  22. ^ "ISO/IEC TR 24731-2: 2010" . Mezinárodní organizace pro normalizaci.
  23. ^ "ISO/IEC TS 17961: 2013" . Mezinárodní organizace pro normalizaci.
  24. ^ "ISO/IEC TS 18661-1: 2014" . Mezinárodní organizace pro normalizaci.
  25. ^ "ISO/IEC TS 18661-2: 2015" . Mezinárodní organizace pro normalizaci.
  26. ^ "ISO/IEC TS 18661-3: 2015" . Mezinárodní organizace pro normalizaci.
  27. ^ "ISO/IEC TS 18661-4: 2015" . Mezinárodní organizace pro normalizaci.
  28. ^ Viz seznam na https://en.cppreference.com/w/c/experimental Navštíveno 16. ledna 2016.
  29. ^ "Použití kolekce kompilátorů GNU (GCC): Standardy" . gcc.gnu.org . Citováno 2019-02-05 .
  30. ^ "Jazyková kompatibilita" . clang.llvm.org . Citováno 2019-02-05 .
  31. ^ „Standardní předdefinované názvy maker“ . www.ibm.com . Citováno 2019-04-10 .
  32. ^ "Balíček vývojáře HP C/ANSI C" . Citováno 2015-07-12 .
  33. ^ Přidána podpora pro ISO C11 do kompilátorů IBM XL C/C ++
  34. ^ odkaz na stránky Pelles C.

Další čtení

  • Schreiner, Axel-Tobias (1993). Objektově orientované programování s ANSI-C . Hanser. ISBN 3-446-17426-5.

externí odkazy