ANSI C - ANSI C
Revize jazyka 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ř.
and
Pro&&
- 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í:
- Nové vestavěné datové typy :
long long
,_Bool
,_Complex
a_Imaginary
- 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ů, polí s proměnnou délkou , flexibilních členů pole , variadických maker a
restrict
klíčových slov - Několik nových knihovny hlavičky, včetně
stdint.h
,<tgmath.h>
,fenv.h
,<complex.h>
- Vylepšená kompatibilita s několika funkcemi C ++ , včetně vložených funkcí , jednorázových komentářů s
//
, míchání deklarací a kódu a univerzální názvy znaků v identifikátorech - Odebráno několik nebezpečných funkcí jazyka C89, jako jsou implicitní deklarace funkcí a implicitní
int
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é _Generic
klíč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.
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
- Amsterdam Compiler Kit (C K&R a C89/90)
- ARM RealView
- Clang , pomocí backendu LLVM
- GCC (plné C89/90, C99 a C11)
- Kompilátor HP C/ANSI C (C89 a C99)
- IBM XL C/C ++ (C11, počínaje verzí 12.1)
- Intel ICC
- LabWindows/CVI
- LCC
- OpenWatcom (C89/90 a některé C99)
- Microsoft Visual C ++ (C89/90 a některé C99)
- Pelles C (pouze C99 a C11. Windows)
- vbcc (C89/90 a C99)
- Kompilátor Tiny C (C89/90 a některé C99)
- Oracle Developer Studio
Viz také
- Behavioral Description Language
- Kompatibilita C a C ++
- C ++ 17 , C ++ 14 , C ++ 11 , C ++ 03 , C ++ 98 , verze standardu programovacího jazyka C ++
- Technická zpráva C ++ 1
Reference
- ^ Brad Kelechava (2017-09-14). „Původ ANSI C a ISO C“ . Citováno 2018-08-14 .
- ^ Richard Hale Shaw (září 1988). „Standard C: Návrh ANSI roste“. PC časopis . Sv. 7 č. 15. s. 116–117.
- ^ „Standardy - používání kolekce kompilátorů GNU (GCC)“ . Citováno 2012-06-24 .
- ^ "INCITS/ISO/IEC 9899" . www.techstreet.com . Citováno 2018-10-03 .
- ^ "ISO/IEC 9899: 1990 - Programovací jazyky - C" . Citováno 2012-06-24 .
- ^ Clive DW Feather (2010-09-12). „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 .Správa CS1: numerická jména: seznam autorů ( odkaz )
- ^ "INCITS/ISO/IEC 9899-2012" . ANSI.
- ^ "ISO/IEC 9899: 1999 - Programovací jazyky - 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 .
- ^ "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žití kolekce kompilátorů GNU (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áře HP C/ANSI C" . Citováno 2015-07-12 .
- ^ Přidána podpora pro ISO C11 do kompilátorů IBM XL C/C ++
- ^ 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á kontrola
- Návrh odůvodnění ANSI C (ANSI X3J11/88-151) (18. listopadu 1988)
- Informační bulletin C #1 (ANSI X3J11/93-007) (27. května 1992)
- Gramatika ANSI C Yacc
- "Programovací jazyky ISO/IEC 9899: 1999 - C" . Americký národní normalizační institut. Archivovány od originálu na 2011-07-25 . Citováno 2009-08-06 .
- „ANSI Standards Action Vol. 36, #48“ (PDF) . Americký národní normalizační institut. 2005-12-02. Archivováno z originálu (PDF) dne 2016-03-04 . Citováno 2009-08-06 .