ANSI C. - ANSI C
tento článek potřebuje další citace pro ověření.Červenec 2010) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
C jazykové revize |
---|
K&R C. • ANSI C. • C99 • C11 • C17 • C2x |
ANSI C., ISO C. a Standard C. jsou po sobě následujícími normami pro Programovací jazyk C. publikoval Americký národní normalizační institut (ANSI) a Mezinárodní organizace pro normalizaci (ISO). Historicky názvy odkazovaly konkrétně na původní a nejlépe podporovanou verzi standardu (známou jako C89 nebo C90). Vývojářům softwaru, kteří píší v jazyce C, se doporučuje, aby dodržovali standardy, což jim pomáhá přenosnost mezi kompilátory.
Historie a výhled
První standard pro C byl publikován ANSI. Ačkoli tento dokument následně přijal Mezinárodní organizace pro normalizaci (ISO) a následné revize publikované ISO byly přijaty ANSI, pro označení normy se stále používá „ANSI C“.[1] Zatímco někteří vývojáři softwaru používají výraz ISO C, jiní jsou neutrální z hlediska norem a používají standard C.
C89
V roce 1983 Americký národní normalizační institut vytvořil výbor X3J11, který stanovil standardní specifikaci C. Standard byl dokončen v roce 1989 a ratifikován jako ANSI X3.159-1989 „Programovací jazyk C.“ Tato verze jazyka se často označuje jako „ANSI C“. Později se někdy používá označení „C89“ k odlišení od C90, ale za použití stejné metody označování.
C90
Stejný standard jako C89 ratifikovala Mezinárodní organizace pro normalizaci jako ISO / IEC 9899: 1990, pouze se změnami formátování,[2] který se někdy označuje jako C90. Proto výrazy „C89“ a „C90“ označují v podstatě stejný jazyk.
Tento standard byl zrušen jak ANSI / INCITS[3] a ISO / IEC.[4]
C95
V roce 1995 ISO zveřejnil rozšíření nazvané Dodatek 1 pro standard ANSI-C. Jeho celé jméno konečně bylo ISO / IEC 9899: 1990 / AMD1: 1995 nebo přezdívku C95. Kromě opravy chyb došlo k dalším změnám v jazykových schopnostech,[5][6] jako:
- Vylepšeno vícebajtový a široký znak podpora ve standardní knihovně, zavádění
<wchar.h>
a<wctype.h>
stejně jako vícebajtový I / O - Přidání digrafy do jazyka
- Specifikace standardních maker pro alternativní specifikaci operátorů, např.
a
pro&&
- Specifikace standardního makra
__STDC_VERSION__
Kromě této novely byly ISO pro C90 publikovány dvě technické opravy:
- ISO / IEC 9899: 1990 / Cor 1: 1994 TCOR1 v roce 1994[7]
- ISO / IEC 9899: 1990 / Cor 2: 1996 v roce 1996[8]
Předběžný test kompatibility s C95
#if defined (__ STDC_VERSION__) && __STDC_VERSION__> = 199409L/ * C95 kompatibilní zdrojový kód. * /#elif definováno (__ STDC__)/ * C89 kompatibilní zdrojový kód. * /#endif
C99
V březnu 2000 přijala ANSI normu ISO / IEC 9899: 1999[9] Standard. Tato norma se běžně označuje jako C99. Některé pozoruhodné dodatky k předchozímu standardu zahrnují:
- Nové integrované typy dat:
dlouho dlouho
,_Bool
,_Komplex
, a_Imaginární
- Několik nových funkcí základního jazyka, včetně indexů statického pole, určených inicializátorů, složených literálů, pole proměnné délky, členy flexibilního pole, variadická makra, a
omezit
klíčové slovo - Několik nových záhlaví knihoven, včetně
stdint.h
,<tgmath.h>
,fenv.h
,<complex.h>
- Vylepšená kompatibilita s několika C ++ funkce, včetně vložené funkce, jednořádkový komentáře s
//
, míchání prohlášení a kód a univerzální jména znaků v identifikátory - Odebráno několik nebezpečných funkcí jazyka C89, jako jsou implicitní deklarace funkcí a implicitní
int
ISO zveřejnilo tři technické opravy pro C99:
- 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ý ukončením podpory standardní funkce knihovny dostane
Tento standard byl zrušen jak ANSI / INCITS[10] a ISO / IEC[11] ve prospěch C11.
C11
C11 byla oficiálně ratifikována a zveřejněna 8. prosince 2011. Mezi významné funkce patří vylepšené Unicode podpora, typové generické výrazy pomocí nového _Obecný
klíčové slovo, více platforem vícevláknové API (vlákna.h
), a atomový podpora 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[12]
C17
Od října 2018[Aktualizace]„„ C17 “je aktuální Standard pro Programovací jazyk C..[13]
C17 řeší vady v C11 bez zavedení nových jazykových funkcí.[14]
C2x
C2x je neformální název pro další (po C17 ) hlavní, důležitý Jazyk C. standardní revize.[15] Očekává se, že se o něm bude hlasovat až v roce 2021.[16]
V rámci procesu standardizace ISO také publikuje technické zprávy a specifikace související s jazykem C:
- ISO / IEC TR 19769: 2004,[17] na rozšířeních knihoven pro podporu formátů transformace Unicode, integrovaných do C11
- ISO / IEC TR 24731-1: 2007,[18] na rozšířeních knihoven pro podporu hranic kontrolovaných rozhraní, integrovaných do C11
- ISO / IEC TR 18037: 2008,[19] na vložených rozšířeních C.
- ISO / IEC TR 24732: 2009,[20] na desetinná plovoucí desetinná čárka aritmetika, nahrazeno ISO / IEC TS 18661-2: 2015
- ISO / IEC TR 24747: 2009,[21] na speciální matematické funkce,
- ISO / IEC TR 24731-2: 2010,[22] na rozšíření knihoven pro podporu funkcí dynamického přidělování
- ISO / IEC TS 17961: 2013,[23] o bezpečném kódování v C
- ISO / IEC TS 18661-1: 2014,[24] na IEC 60559: 2011 -kompatibilní binární aritmetika s plovoucí desetinnou čárkou
- ISO / IEC TS 18661-2: 2015,[25] podle IEC 60559: 2011 kompatibilní desetinná plovoucí desetinná čárka aritmetický
- ISO / IEC TS 18661-3: 2015,[26] na výměnu kompatibilní s normou IEC 60559: 2011 a rozšířené typy s plovoucí desetinnou čárkou
- ISO / IEC TS 18661-4: 2015,[27] na doplňkových funkcích kompatibilních s normou 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 transakční paměti softwaru a rozšíření paralelní knihovny.[28]
Podpora od hlavních překladačů
ANSI C je nyní podporován téměř všemi široce používanými překladači. GCC a Clang jsou dnes dva populární kompilátory jazyka C, oba jsou založeny na C11 s aktualizacemi včetně změn z pozdějších specifikací, jako jsou C17 a C18.[29][30] Jakýkoli napsaný zdrojový kód pouze ve standardu C a bez jakýchkoli hardwarově závislých předpokladů je prakticky zaručeno, že se kompiluje správně na jakémkoli plošina s vyhovující implementací C. Bez těchto opatření se většina programů může kompilovat pouze na určité platformě nebo s konkrétním kompilátorem, například kvůli použití nestandardních knihoven, jako jsou GUI knihovny, nebo spoléhání se na atributy specifické pro kompilátor nebo platformu, jako je přesná velikost určitých datových typů a bajtů endianismus.
Zjistitelnost souladu
Zmírnit rozdíly mezi K&R C. a standard ANSI C, __STDC__
Makro („standardní c“) lze použít k rozdělení kódu do sekcí ANSI a K&R.
#if defined (__ STDC__) && __STDC__ externí int getopt(int, char * konst *, konst char *); #jiný externí int getopt(); #endif
Ve výše uvedeném příkladu se prototyp používá v deklaraci funkce pro implementace kompatibilní s ANSI, zatímco zastaralá neprototypová deklarace se používá jinak. Od C99 jsou stále kompatibilní s ANSI. Všimněte si, jak tento kód kontroluje jak definici, tak hodnocení: je to proto, že některé implementace mohou být nastaveny __STDC__
na nulu, což označuje nesoulad s ANSI.[31]
Překladače podporující ANSI C.
- Amsterdamská kompilátorová sada (C K&R a C89 / 90)
- PAŽE RealView
- Zvonit, použitím LLVM backend
- GCC (plné C89 / 90, C99 a C11)
- Kompilátor HP C / ANSI C (C89 a C99)[32]
- IBM XL C / C ++ (C11, počínaje verzí 12.1)[33]
- ICC společnosti Intel
- LabWindows / CVI
- LCC
- OpenWatcom (C89 / 90 a některé C99)
- Microsoft Visual C ++ (C89 / 90 a některé C99)
- Pelles C. (C99 a C11. Pouze Windows.)[34]
- vbcc (C89 / 90 a C99)
- Malý kompilátor C. (C89 / 90 a některé C99)
- Oracle Developer Studio
Viz také
- Jazyk popisu chování
- Kompatibilita C a C ++
- C ++ 17, C ++ 14, C ++ 11, C ++ 03, C ++ 98, verze standardu programovacího jazyka C ++
- C ++ technická zpráva 1
Reference
- ^ Brad Kelechava (2017-09-14). „Původ ANSI C a ISO C“. Citováno 2018-08-14.
- ^ „Standards - Using the GNU Compiler Collection (GCC)“. Citováno 2012-06-24.
- ^ „INCITS / ISO / IEC 9899“. www.techstreet.com. Citováno 2018-10-03.
- ^ „ISO / IEC 9899: 1990 - Programming Languages - C“. Citováno 2012-06-24.
- ^ Clive D.W. Feather (12.9.2010). „Stručný popis normativního dodatku 1“.
- ^ „ISO / IEC 9899: 1990 / Amd 1: 1995“. Mezinárodní organizace pro normalizaci. 2013-03-22.
- ^ „ISO / IEC 9899: 1990 / Cor 1: 1994“. ISO. Citováno 2019-01-21.
- ^ „ISO / IEC 9899: 1990 / Cor 2: 1996“. ISO. Citováno 2019-01-21.
- ^ 14:00-17:00. „ISO / IEC 9899: 1999“. ISO. Citováno 2019-01-21.CS1 maint: číselné názvy: seznam autorů (odkaz)
- ^ „INCITS / ISO / IEC 9899-2012“. ANSI.
- ^ „ISO / IEC 9899: 1999 - Programming Languages - C“. Citováno 2012-06-24.
- ^ „ISO / IEC 9899: 2011 / Cor 1: 2012“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC 9899: 2018 - Informační technologie - Programovací jazyky - C“. www.iso.org.
- ^ „Standard - C“. www.iso-9899.info.
- ^ "Historie C". cppreference.
- ^ Michael Larabel (2018-10-18). „Překladač GCC 9 přidává -std = c2x a -std = gnu2x pro budoucí aktualizaci jazyka C“.
- ^ „ISO / IEC TR 19769: 2004“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TR 24731-1: 2007“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TR 18037: 2008“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TR 24732: 2009“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TR 24747: 2009“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TR 24731-2: 2010“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TS 17961: 2013“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TS 18661-1: 2014“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TS 18661-2: 2015“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TS 18661-3: 2015“. Mezinárodní organizace pro normalizaci.
- ^ „ISO / IEC TS 18661-4: 2015“. Mezinárodní organizace pro normalizaci.
- ^ Viz seznam na https://en.cppreference.com/w/c/experimental Navštíveno 16. ledna 2016.
- ^ „Používání GNU Compiler Collection (GCC): Standardy“. gcc.gnu.org. Citováno 2019-02-05.
- ^ "Jazyková kompatibilita". clang.llvm.org. Citováno 2019-02-05.
- ^ "Standardní předdefinované názvy maker". www.ibm.com. Citováno 2019-04-10.
- ^ „Balíček vývojářů HP C / ANSI C“. Citováno 2015-07-12.
- ^ Do kompilátorů IBM XL C / C ++ přidána podpora ISO C11
- ^ 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
- Pracovní skupina ISO C.
- Návrh normy ANSI C. (ANSI X3J11 / 88-090) (13. května 1988), Třetí veřejný přezkum
- Návrh ANSI C Odůvodnění (ANSI X3J11 / 88-151) (18. listopadu 1988)
- C Informační bulletin č. 1 (ANSI X3J11 / 93-007) (27. května 1992)
- ANSI C Yacc gramatika
- „ISO / IEC 9899: 1999 Programming Languages - C“. Americký národní normalizační institut. Archivovány od originál dne 25. 07. 2011. Citováno 2009-08-06.
- „ANSI Standards Action Vol. 36, # 48“ (PDF). Americký národní normalizační institut. 2.12.2005. Archivovány od originál (PDF) dne 04.03.2016. Citováno 2009-08-06.