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:
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[aktualisieren], "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]
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
- Amsterdam Compiler Kit (C K & R und C89/90)
- ARM Realview
- Klang, verwenden Llvm Backend
- GCC (Full C89/90, C99 und C11)
- HP C/ANSI C -Compiler (C89 und C99)[32]
- IBM XL C/C ++ (C11, beginnend mit Version 12.1)[33]
- Intels ICC
- Labwindows/CVI
- LCC
- OpenWatcom (C89/90 und einige C99)
- Microsoft Visual C ++ (C89/90 und einige C99)
- Pelles C (C99 und C11. Nur Windows.)[34]
- VBCC (C89/90 und C99)
- Tiny C Compiler (C89/90 und einige C99)
- Oracle Developer Studio
Siehe auch
- Verhaltensbeschreibung Sprache
- Kompatibilität von C und C ++
- C ++ 17, C ++ 14, C ++ 11, C ++ 03, C ++ 98, Versionen des C ++ - Programmiersprachenstandards
- C ++ technischer Bericht 1
Verweise
- ^ Brad Kelechava (2017-09-14). "Der Ursprung von Ansi C und Iso C". Abgerufen 2018-08-14.
- ^ Richard Hale Shaw (September 1988). "Standard C: Der ANSI -Entwurf wächst". PC Magazine. Vol. 7, nein. 15. S. 116–117.
- ^ "Standards - Verwenden der GNU Compiler Collection (GCC)". Abgerufen 2012-06-24.
- ^ "Incits/ISO/IEC 9899". www.techstreet.com. Abgerufen 2018-10-03.
- ^ "ISO/IEC 9899: 1990 - Programmiersprachen - C". Abgerufen 2012-06-24.
- ^ Clive D.W. Feather (2010-09-12). "Eine kurze Beschreibung des normativen Zusatzes 1".
- ^ "ISO/IEC 9899: 1990/AMD 1: 1995". Internationale Standardisierungsorganisation. 2013-03-22.
- ^ "ISO/IEC 9899: 1990/Cor 1: 1994". ISO. Abgerufen 2019-01-21.
- ^ "ISO/IEC 9899: 1990/Cor 2: 1996". ISO. Abgerufen 2019-01-21.
- ^ "ISO/IEC 9899: 1999". ISO. Abgerufen 2019-01-21.
- ^ "Incits/ISO/IEC 9899-2012". Ansi.
- ^ "ISO/IEC 9899: 1999 - Programmiersprachen - C". Abgerufen 2012-06-24.
- ^ "ISO/IEC 9899: 2011/Cor 1: 2012". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC 9899: 2018 - Informationstechnologie - Programmiersprachen - C". www.iso.org.
- ^ "Der Standard - C". www.iso-9899.info.
- ^ "Geschichte von C". cppreferenz.
- ^ "ISO/IEC TR 19769: 2004". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TR 24731-1: 2007". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TR 18037: 2008". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TR 24732: 2009". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TR 24747: 2009". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TR 24731-2: 2010". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TS 17961: 2013". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TS 18661-1: 2014". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TS 18661-2: 2015". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TS 18661-3: 2015". Internationale Standardisierungsorganisation.
- ^ "ISO/IEC TS 18661-4: 2015". Internationale Standardisierungsorganisation.
- ^ Sehen Sie eine Liste bei https://en.cppreference.com/w/c/experimental Besuch am 16. Januar 2016.
- ^ "Verwenden der GNU Compiler Collection (GCC): Standards". gcc.gnu.org. Abgerufen 2019-02-05.
- ^ "Sprachkompatibilität". Clang.llvm.org. Abgerufen 2019-02-05.
- ^ "Standard vordefinierte Makronamen". www.ibm.com. Abgerufen 2019-04-10.
- ^ "HP C/ANSI C -Entwicklerbündel". Abgerufen 2015-07-12.
- ^ Unterstützung für ISO C11 zu IBM XL C/C ++ - Compiler hinzugefügt
- ^ 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
- ISO C Arbeitsgruppe
- Entwurf von ANSI C Standard (ANSI X3J11/88-090) (13. Mai 1988), Dritte öffentliche Bewertung
- Entwurf der Begründung (ANSI X3J11/88-151) (18. November 1988)
- C Information Bulletin #1 (ANSI X3J11/93-007) (27. Mai 1992)
- Ansi C yacc Grammatik
- "ISO/IEC 9899: 1999 Programmiersprachen - C". American National Standards Institute. Archiviert von das Original Am 2011-07-25. Abgerufen 2009-08-06.
- "ANSI Standards Action Vol. 36, #48" (PDF). American National Standards Institute. 2005-12-02. Archiviert von das Original (PDF) am 2016-03-04. Abgerufen 2009-08-06.