ANSI C -
ANSI C

Från Wikipedia, den fria encyklopedin

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.

Historia och utsikter

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 andfö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 _Genericsö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.

Stöd från stora kompilatorer

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.

Kompilatorer som stöder ANSI C

Se även

Referenser

  1. Brad Kelechava (2017-09-14). "Ursprunget till ANSI C och ISO C"
    . Hämtad
    2018-08-14
    .
  • "INCITS/ISO/IEC 9899" . www.techstreet.com
    . Hämtad
    2018-10-03
    .
  • Clive DW Feather (2010-09-12). "En kort beskrivning av Normative Addendum 1" .
  • "ISO/IEC 9899: 1990/ändring 1: 1995" . Internationella organisationen för standardisering. 2013-03-22.
  • "ISO/IEC 9899: 1990/Cor 1: 1994" . ISO
    . Hämtad
    2019-01-21
    .
  • "ISO/IEC 9899: 1990/Cor 2: 1996" . ISO
    . Hämtad
    2019-01-21
    .
  • 14: 00-17: 00. "ISO/IEC 9899: 1999" . ISO
    . Hämtad
    2019-01-21
    .
    CS1 -underhåll: numeriska namn: författarlista ( länk )
  • "ISO/IEC 9899: 2011/Cor 1: 2012" . Internationella organisationen för standardisering.
  • "Standarden - C" . www.iso-9899.info .
  • "C -historia" . creferens .
  • "ISO/IEC TR 19769: 2004" . Internationella organisationen för standardisering.
  • "ISO/IEC TR 24731-1: 2007" . Internationella organisationen för standardisering.
  • "ISO/IEC TR 18037: 2008" . Internationella organisationen för standardisering.
  • "ISO/IEC TR 24732: 2009" . Internationella organisationen för standardisering.
  • "ISO/IEC TR 24747: 2009" . Internationella organisationen för standardisering.
  • "ISO/IEC TR 24731-2: 2010" . Internationella organisationen för standardisering.
  • "ISO/IEC TS 17961: 2013" . Internationella organisationen för standardisering.
  • "ISO/IEC TS 18661-1: 2014" . Internationella organisationen för standardisering.
  • "ISO/IEC TS 18661-2: 2015" . Internationella organisationen för standardisering.
  • "ISO/IEC TS 18661-3: 2015" . Internationella organisationen för standardisering.
  • "ISO/IEC TS 18661-4: 2015" . Internationella organisationen för standardisering.
  • Se en lista på https://en.cppreference.com/w/c/experimental Besökte 16 januari 2016.
  • "Använda GNU Compiler Collection (GCC): Standarder" . gcc.gnu.org
    . Hämtad
    2019-02-05
    .
  • "Språkkompatibilitet" . clang.llvm.org
    . Hämtad
    2019-02-05
    .
  • "Standardfördefinierade makronamn" . www.ibm.com
    . Hämtad
    2019-04-10
    .
  • Vidare läsning

    • Schreiner, Axel-Tobias (1993). Objektorienterad programmering med ANSI-C . Hanser. ISBN 3-446-17426-5.