ANSI C

Ansi c, ISO c, und Standard c sind aufeinanderfolgende Standards für die C Programmiersprache veröffentlicht von der American National Standards Institute (ANSI) und ISO/IEC JTC 1/SC 22/Wg 14 der Internationale Standardisierungsorganisation (ISO) und die Internationale Elektrotechnische Kommission (IEC). Historisch gesehen bezogen sich die Namen speziell auf die ursprüngliche und am besten unterstützte Version des Standards (bekannt als C89 oder C90). Softwareentwickler, die in C schreiben, werden ermutigt, sich den Standards anzupassen, da dies hilft Portabilität zwischen Compilern.

Geschichte und Ausblick

Der erste Standard für C wurde von ANSI veröffentlicht. Obwohl dieses Dokument anschließend von ISO/IEC übernommen wurde und nachfolgende Überarbeitungen von ISO/IEC von ANSI übernommen wurden, wird "ANSI C" immer noch verwendet, um sich auf den Standard zu beziehen.[1] Während einige Softwareentwickler den Begriff ISO C verwenden, sind andere Standards-Körper-neutral und Standard C.

Standardisierung c

1983 gründete das American National Standards Institute ein Komitee, X3J11, um eine Standardspezifikation von C. 1985 zu etablieren, wurde der erste Standardentwurf veröffentlicht, der manchmal als als bezeichnet wird C85. 1986 wurde ein weiterer Entwurfsstandard veröffentlicht, manchmal bezeichnet als als C86. Der Vorverelease -Standard C wurde 1988 veröffentlicht und manchmal als als bezeichnet C88.[2]

C89

Der ANSI-Standard wurde 1989 fertiggestellt und als ANSI X3.159-1989 "Programmiersprache C." ratifiziert. Diese Version der Sprache wird oft als "Ansi C" bezeichnet. Später wird manchmal das Etikett "C89" verwendet, um es von C90 zu unterscheiden, aber die gleiche Kennzeichnungsmethode.

C90

Der gleiche Standard wie C89 wurde durch ISO/IEC wie ISO/IEC 9899: 1990 ratifiziert, mit nur Formatierungsänderungen,[3] was manchmal als C90 bezeichnet wird. Daher beziehen sich die Begriffe "C89" und "C90" im Wesentlichen auf dieselbe Sprache.

Dieser Standard wurde sowohl von ANSI/Incits zurückgezogen[4] und ISO/IEC.[5]

C95

Im Jahr 1995 die ISO/IEC veröffentlichte eine Erweiterung namens Amendment 1 für den ANSI-C-Standard. Sein vollständiger Name war endlich ISO/IEC 9899: 1990/AMD1: 1995 oder bezeichnet C95. Abgesehen von der Fehlerkorrektur gab es weitere Änderungen der Sprachfunktionen,[6][7] wie zum Beispiel:

  • Verbessert Multi-byte und breiter Charakter Unterstützung in der Standardbibliothek einführen und ebenso gut wie Multi-byte I/o
  • Zugabe von Digraphen zur Sprache
  • Spezifikation von Standard -Makros für die alternative Spezifikation von Operatoren, z. und zum &&
  • Spezifikation des Standard -Makros __Stdc_version__

Zusätzlich zur Änderung wurden zwei technische Corrigenda von ISO für C90 veröffentlicht:

  • ISO/IEC 9899: 1990/Cor 1: 1994 TCOR1 1994[8]
  • ISO/IEC 9899: 1990/Cor 2: 1996 im Jahr 1996[9]

Präprozessor -Test für C95 -Kompatibilität

#if definiert (__ stdc_version__) && __stdc_version__> = 199409l /* C95 kompatibler Quellcode. */ #elif definiert (__ stdc__) /* C89 kompatibler Quellcode. */ #endif 

C99

Im März 2000 übernahm ANSI den Standard der ISO/IEC 9899: 1999.[10] Dieser Standard wird allgemein als C99 bezeichnet. Einige bemerkenswerte Ergänzungen zum vorherigen Standard sind:

  • Neu eingebaut Datentypen: lang Lang, _Bool, _Komplex, und _Imaginär
  • Mehrere neue Kernsprachenmerkmale, einschließlich statischer Array -Indizes, benannte Initialisierer, zusammengesetzte Literale, Arrays variabler Länge, Flexible Array -Mitglieder, Variadische Makros, und beschränken Stichwort
  • Mehrere neue Bibliothekskopfzeile, einschließlich stdint.h, , Fenv.h,
  • Verbesserte Kompatibilität mit mehreren C ++ Funktionen, einschließlich Inline -Funktionen, einzelne Zeile Kommentare mit //, mischen Erklärungen und Code und universelle Zeichennamen in Kennungen
  • Mehrere gefährliche C89 -Sprachmerkmale wie implizite Funktionserklärungen und implizit int

Drei technische Corrigenda wurden von ISO für C99 veröffentlicht:

  • ISO/IEC 9899: 1999/Cor 1: 2001 (e)
  • ISO/IEC 9899: 1999/Cor 2: 2004 (e)
  • ISO/IEC 9899: 1999/Cor 3: 2007 (e), bemerkenswert für die Abschaffung der Standardbibliotheksfunktion bekommt

Dieser Standard wurde sowohl von ANSI/Incits zurückgezogen[11] und ISO/IEC[12] zugunsten von c11.

C11

C11 wurde offiziell ratifiziert und am 8. Dezember 2011 veröffentlicht. Bemerkenswerte Merkmale sind verbessert Unicode Unterstützung, generische Ausdrücke vom Typ Typ mit dem neuen _Generisch Schlüsselwort, eine plattformübergreifende Multi-Threading API (threads.h), und Atomic Typen unterstützen sowohl in der Kernsprache als auch in der Bibliothek (Stdatomic.h).

Ein technischer Corrigendum wurde von ISO für C11 veröffentlicht:

  • ISO/IEC 9899: 2011/Cor 1: 2012[13]

C17

Ab Oktober 2018, "C17" ist der Strom Standard für die C Programmiersprache.[14]

C17 befasst sich mit Defekten in C11, ohne neue Sprachmerkmale einzuführen.[15]

C2X

C2X ist ein informeller Name für den nächsten (danach C17) Haupt C Sprache Standardrevision.[16]

Andere verwandte ISO -Veröffentlichungen

Im Rahmen des Standardisierungsprozesses veröffentlicht ISO/IEC auch Technische Berichte und Spezifikationen im Zusammenhang mit der C -Sprache:

  • ISO/IEC TR 19769: 2004,[17] Auf Bibliothekserweiterungen zur Unterstützung von Unicode -Transformationsformaten, in C11 integriert
  • ISO/IEC TR 24731-1: 2007,[18] Auf Bibliothekserweiterungen zur Unterstützung von Grenzen überprüften Schnittstellen, in C11 integriert
  • ISO/IEC TR 18037: 2008,[19] Bei eingebetteten C -Erweiterungen
  • ISO/IEC TR 24732: 2009,[20] an Dezimalerschwimmpunkt Arithmetik, abgelöst von ISO/IEC TS 18661-2: 2015
  • ISO/IEC TR 24747: 2009,[21] auf besondere mathematische Funktionen,
  • ISO/IEC TR 24731-2: 2010,[22] Auf Bibliothekserweiterungen zur Unterstützung der dynamischen Allokationsfunktionen
  • ISO/IEC TS 17961: 2013,[23] bei sicherer Codierung in C.
  • ISO/IEC TS 18661-1: 2014,[24] an IEC 60559: 2011-kompatible binäre Gleitkomma-Arithmetik
  • ISO/IEC TS 18661-2: 2015,[25] auf IEC 60559: 2011-kompatibel Dezimalerschwimmpunkt Arithmetik
  • ISO/IEC TS 18661-3: 2015,[26] Auf IEC 60559: 2011-kompatibler Austausch und erweiterte Gleitkomma-Typen
  • ISO/IEC TS 18661-4: 2015,[27] auf IEC 60559: 2011 kompatible Zusatzfunktionen

Weitere technische Spezifikationen sind in der Entwicklung und anhängig, einschließlich des fünften und letzten Teils von TS 18661, einer Software -Transaktionsspeicherspezifikation und der Parallelbibliothekserweiterungen.[28]

Unterstützung von großen Compilern

ANSI C wird jetzt von fast allen weit verbreiteten Compilern unterstützt. GCC und Clang sind zwei wichtige C -Compiler, die heute beliebt sind. Beide basieren auf dem C11 mit Aktualisierungen, einschließlich Änderungen aus späteren Spezifikationen wie C17 und C18.[29][30] Jeder Quellcode geschrieben nur in Standard C und ohne hardwareabhängige Annahmen wird praktisch garantiert, dass sie korrekt für jeden kompiliert werden Plattform mit einer konformen C -Implementierung. Ohne solche Vorsichtsmaßnahmen dürfen die meisten Programme nur auf einer bestimmten Plattform oder mit einem bestimmten Compiler zusammenstellen, beispielsweise auf die Verwendung von nicht standardmäßigen Bibliotheken wie z. GUI Bibliothek Endiangess.

Compliance -Erkennbarkeit

Um die Unterschiede zwischen zu mildern K & r c und der ANSI C Standard, die __Stdc__ ("Standard C") Makro kann verwendet werden, um Code in ANSI- und K & R -Abschnitte aufzuteilen.

 #if definiert (__ stdc__) && __stdc__  extern int Getopt(int, verkohlen * Const *, Const verkohlen *);  #anders  extern int Getopt();  #endif 

Im obigen Beispiel wird in einer Funktionserklärung für ANSI-konforme Implementierungen ein Prototyp verwendet, während sonst eine nicht-Prototyp-Deklaration verwendet wird. Diese sind nach C99 immer noch ansi-konform. Beachten Sie, wie dieser Code sowohl die Definition als auch die Bewertung überprüft: Dies liegt daran, dass einige Implementierungen festgelegt werden können __Stdc__ zu Null, um nicht-Ansi-Compliance anzuzeigen.[31]

Compiler, die ANSI C unterstützen

Siehe auch

Verweise

  1. ^ Brad Kelechava (2017-09-14). "Der Ursprung von Ansi C und Iso C". Abgerufen 2018-08-14.
  2. ^ Richard Hale Shaw (September 1988). "Standard C: Der ANSI -Entwurf wächst". PC Magazine. Vol. 7, nein. 15. S. 116–117.
  3. ^ "Standards - Verwenden der GNU Compiler Collection (GCC)". Abgerufen 2012-06-24.
  4. ^ "Incits/ISO/IEC 9899". www.techstreet.com. Abgerufen 2018-10-03.
  5. ^ "ISO/IEC 9899: 1990 - Programmiersprachen - C". Abgerufen 2012-06-24.
  6. ^ Clive D.W. Feather (2010-09-12). "Eine kurze Beschreibung des normativen Zusatzes 1".
  7. ^ "ISO/IEC 9899: 1990/AMD 1: 1995". Internationale Standardisierungsorganisation. 2013-03-22.
  8. ^ "ISO/IEC 9899: 1990/Cor 1: 1994". ISO. Abgerufen 2019-01-21.
  9. ^ "ISO/IEC 9899: 1990/Cor 2: 1996". ISO. Abgerufen 2019-01-21.
  10. ^ "ISO/IEC 9899: 1999". ISO. Abgerufen 2019-01-21.
  11. ^ "Incits/ISO/IEC 9899-2012". Ansi.
  12. ^ "ISO/IEC 9899: 1999 - Programmiersprachen - C". Abgerufen 2012-06-24.
  13. ^ "ISO/IEC 9899: 2011/Cor 1: 2012". Internationale Standardisierungsorganisation.
  14. ^ "ISO/IEC 9899: 2018 - Informationstechnologie - Programmiersprachen - C". www.iso.org.
  15. ^ "Der Standard - C". www.iso-9899.info.
  16. ^ "Geschichte von C". cppreferenz.
  17. ^ "ISO/IEC TR 19769: 2004". Internationale Standardisierungsorganisation.
  18. ^ "ISO/IEC TR 24731-1: 2007". Internationale Standardisierungsorganisation.
  19. ^ "ISO/IEC TR 18037: 2008". Internationale Standardisierungsorganisation.
  20. ^ "ISO/IEC TR 24732: 2009". Internationale Standardisierungsorganisation.
  21. ^ "ISO/IEC TR 24747: 2009". Internationale Standardisierungsorganisation.
  22. ^ "ISO/IEC TR 24731-2: 2010". Internationale Standardisierungsorganisation.
  23. ^ "ISO/IEC TS 17961: 2013". Internationale Standardisierungsorganisation.
  24. ^ "ISO/IEC TS 18661-1: 2014". Internationale Standardisierungsorganisation.
  25. ^ "ISO/IEC TS 18661-2: 2015". Internationale Standardisierungsorganisation.
  26. ^ "ISO/IEC TS 18661-3: 2015". Internationale Standardisierungsorganisation.
  27. ^ "ISO/IEC TS 18661-4: 2015". Internationale Standardisierungsorganisation.
  28. ^ Sehen Sie eine Liste bei https://en.cppreference.com/w/c/experimental Besuch am 16. Januar 2016.
  29. ^ "Verwenden der GNU Compiler Collection (GCC): Standards". gcc.gnu.org. Abgerufen 2019-02-05.
  30. ^ "Sprachkompatibilität". Clang.llvm.org. Abgerufen 2019-02-05.
  31. ^ "Standard vordefinierte Makronamen". www.ibm.com. Abgerufen 2019-04-10.
  32. ^ "HP C/ANSI C -Entwicklerbündel". Abgerufen 2015-07-12.
  33. ^ Unterstützung für ISO C11 zu IBM XL C/C ++ - Compiler hinzugefügt
  34. ^ Link zu Pelles c Seiten

Weitere Lektüre

  • Schreiner, Axel-Tobias (1993). Objektorientierte Programmierung mit ANSI-C. Hanser. ISBN 3-446-17426-5.

Externe Links