ANSI C - ANSI C
C språkrevisioner |
---|
ANSI C , ISO C och Standard C är successiva standarder för programmeringsspråket C som publiceras av American National Standards Institute (ANSI) och International Organization for Standardization (ISO). Historiskt sett hänvisade namnen specifikt till den ursprungliga och bäst stödda versionen av standarden (känd som C89 eller C90 ). Programutvecklare som skriver i C uppmuntras att överensstämma med standarderna, eftersom det underlättar portabilitet mellan kompilatorer.
Den första standarden för C publicerades av ANSI. Även om detta dokument sedan antogs av International Organization for Standardization (ISO) och efterföljande revisioner som publicerats av ISO har antagits av ANSI, används "ANSI C" fortfarande för att hänvisa till standarden. Medan vissa programutvecklare använder termen ISO C, är andra standardkroppsneutrala och använder standard C.
Standardisering C
År 1983 bildade American National Standards Institute en kommitté, X3J11, för att fastställa en standardspecifikation av C. 1985 släpptes det första Standardutkastet, ibland kallat C85 . 1986 släpptes ytterligare en utkaststandard, ibland kallad C86 . Förutgivningen Standard C publicerades 1988 och kallades ibland C88 .
C89
ANSI-standarden slutfördes 1989 och ratificerades som ANSI X3.159-1989 "Programmeringsspråk C." Denna version av språket kallas ofta "ANSI C". Senare används ibland etiketten "C89" för att skilja den från C90 men med samma märkningsmetod.
C90
Samma standard som C89 ratificerades av International Organization for Standardization som ISO/IEC 9899: 1990, med endast formateringsändringar, som ibland kallas C90. Därför avser termerna "C89" och "C90" i huvudsak samma språk.
Denna standard har dragits tillbaka av både ANSI/INCITS och ISO/IEC.
C95
År 1995 publicerade ISO en tillägg, kallad ändring 1, för ANSI-C-standarden. Dess fullständiga namn var slutligen ISO/IEC 9899: 1990/AMD1: 1995 eller smeknamnet C95 . Bortsett från felkorrigering skedde ytterligare ändringar av språkfunktionerna, till exempel:
- Förbättrad multi-byte och breda tecken stöd i standardbiblioteket, införa
<wchar.h>
och<wctype.h>
liksom multi-byte I / O - Tillägg av digrafer till språket
- Specifikation av standard makron för den alternativa specifikation av operatörer, till exempel
and
för&&
- Specifikation av standardmakrot
__STDC_VERSION__
Utöver ändringen publicerades två tekniska korrigeringar av ISO för C90:
- ISO/IEC 9899: 1990/Cor 1: 1994 TCOR1 1994
- ISO/IEC 9899: 1990/Cor 2: 1996 1996
Förprocessortest för C95 -kompatibilitet
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L
/* C95 compatible source code. */
#elif defined(__STDC__)
/* C89 compatible source code. */
#endif
C99
I mars 2000 antog ANSI standarden ISO/IEC 9899: 1999. Denna standard kallas vanligtvis C99. Några anmärkningsvärda tillägg till den tidigare standarden inkluderar:
- Nya inbyggda datatyper :
long long
,_Bool
,_Complex
, och_Imaginary
- Flera nya biblioteks rubriker, inklusive
stdint.h
,<tgmath.h>
,fenv.h
,<complex.h>
- Förbättrad kompatibilitet med flera C ++- funktioner, inklusive inline-funktioner , kommentarer med en rad
//
, blandning av deklarationer och kod och universella teckennamn i identifierare - Tog bort flera farliga C89 -språkfunktioner som implicita funktionsdeklarationer och implicita
int
Tre tekniska korrigeringar publicerades av ISO för 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), notable for deprecating the standard library function gets
Denna standard har dragits tillbaka av både ANSI/INCITS och ISO/IEC till förmån för C11.
C11
C11 officiellt ratificerat och publicerat den 8 december, inkluderar 2011. Noter har förbättrad Unicode -stöd, typ-generic uttryck med hjälp av nya _Generic
sökord, ett plattformsoberoende flertråds API ( threads.h
), och atomtyper stödja både huvudspråket och biblioteket ( stdatomic.h
).
En teknisk korrigering har publicerats av ISO för C11:
- ISO/IEC 9899: 2011/Cor 1: 2012
C17
Från och med oktober 2018, "C17" är den nuvarande standarden för språket C-programmering .
C17 åtgärdar defekter i C11 utan att introducera nya språkfunktioner.
C2x
C2x är ett informellt namn för nästa (efter C17 ) större C -språkstandardrevision.
Som en del av standardiseringsprocessen publicerar ISO också tekniska rapporter och specifikationer relaterade till C -språket:
- ISO/IEC TR 19769: 2004, om bibliotekstillägg för att stödja Unicode -transformationsformat, integrerat i C11
- ISO/IEC TR 24731-1: 2007, om bibliotekstillägg för att stödja gränsgranskade gränssnitt, integrerat i C11
- ISO/IEC TR 18037: 2008, på inbäddade C -tillägg
- ISO/IEC TR 24732: 2009, på decimaltal flytande räkne, ersatt av ISO/IEC TS 18661-2: 2015
- ISO/IEC TR 24747: 2009, om speciella matematiska funktioner,
- ISO/IEC TR 24731-2: 2010, om bibliotekstillägg för att stödja dynamiska tilldelningsfunktioner
- ISO/IEC TS 17961: 2013, om säker kodning i C
- ISO/IEC TS 18661-1: 2014, på IEC 60559: 2011 -kompatibel binär flytande aritmetik
- ISO/IEC TS 18661-2: 2015, på IEC 60559: 2011-kompatibel decimal flytande punkt aritmetik
- ISO/IEC TS 18661-3: 2015, på IEC 60559: 2011-kompatibel växel och utökade flytande typer
- ISO/IEC TS 18661-4: 2015, på IEC 60559: 2011-kompatibla tilläggsfunktioner
Fler tekniska specifikationer är under utveckling och väntar på godkännande, inklusive den femte och sista delen av TS 18661, en specifikation för mjukvara för transaktionsminne och parallella bibliotekstillägg.
ANSI C stöds nu av nästan alla vanliga kompilatorer. GCC och Clang är två stora C -kompilatorer populära idag, båda är baserade på C11 med uppdateringar inklusive ändringar från senare specifikationer som C17 och C18. Varje källkod som skrivs endast i standard C och utan några hårdvaruberoende antaganden garanteras praktiskt taget korrekt att kompilera korrekt på vilken plattform som helst med en anpassad C -implementering. Utan sådana försiktighetsåtgärder kan de flesta program kompileras endast på en viss plattform eller med en viss kompilator, till exempel på grund av användningen av icke-standardiserade bibliotek, t.ex. GUI- bibliotek, eller beroende av kompilator- eller plattformsspecifika attribut till exempel den exakta storleken på vissa datatyper och byte -hållbarhet .
Efterlevnad av efterlevnad
För att mildra skillnaderna mellan K&R C och ANSI C -standarden kan makrot __STDC__
("standard c") användas för att dela upp koden i ANSI- och K&R -sektioner.
#if defined(__STDC__) && __STDC__
extern int getopt(int, char * const *, const char *);
#else
extern int getopt();
#endif
I exemplet ovan används en prototyp i en funktionsdeklaration för ANSI-kompatibla implementeringar, medan en föråldrad icke-prototypdeklaration används på annat sätt. De är fortfarande ANSI-kompatibla från och med C99. Observera hur den här koden kontrollerar både definition och utvärdering: detta beror på att vissa implementeringar kan sättas __STDC__
till noll för att indikera icke-ANSI-överensstämmelse.
- Amsterdam Compiler Kit (C K&R och C89/90)
- ARM RealView
- Clang , med LLVM -backend
- GCC (fullständig C89/90, C99 och C11)
- HP C/ANSI C -kompilator (C89 och C99)
- IBM XL C/C ++ (C11, från och med version 12.1)
- Intels ICC
- LabWindows/CVI
- LCC
- OpenWatcom (C89/90 och några C99)
- Microsoft Visual C ++ (C89/90 och några C99)
- Pelles C (C99 och C11. Endast Windows.)
- vbcc (C89/90 och C99)
- Tiny C Compiler (C89/90 och några C99)
- Oracle Developer Studio
- Beteendebeskrivning Språk
- Kompatibilitet med C och C ++
- C ++ 17 , C ++ 14 , C ++ 11 , C ++ 03 , C ++ 98 , versioner av C ++ - programmeringsspråksstandarden
- C ++ Teknisk rapport 1
-
Brad Kelechava (2017-09-14). "Ursprunget till ANSI C och ISO C" . Hämtad.2018-08-14
- Schreiner, Axel-Tobias (1993). Objektorienterad programmering med ANSI-C . Hanser. ISBN 3-446-17426-5.
- ISO C arbetsgrupp
- Utkast till ANSI C-standard (ANSI X3J11/88-090) (13 maj 1988), tredje offentliga granskning
- Utkast till ANSI C-motiv (ANSI X3J11/88-151) (18 nov 1988)
- C Information Bulletin #1 (ANSI X3J11/93-007) (27 maj 1992)
- ANSI C Yacc grammatik
-
"ISO/IEC 9899: 1999 programmeringsspråk - C" . American National Standards Institute. Arkiverad från originalet 2011-07-25 . Hämtad.2009-08-06
-
"ANSI Standards Action Vol. 36, #48" (PDF). American National Standards Institute. 2005-12-02. Arkiverad från originalet(PDF)2016-03-04. Hämtad.2009-08-06