Wo finde ich die aktuellen C- oder C ++ - Standarddokumente?

394

Bei vielen Fragen scheint die Antwort im "Standard" zu liegen. Wo finden wir das jedoch? Am besten online.

Googeln kann sich manchmal sinnlos anfühlen, insbesondere für die C-Standards, da sie in der Flut von Diskussionen in Programmierforen ertrinken.

Da dies die sind, nach denen ich gerade suche, gibt es gute Online-Ressourcen für:

  • C89
  • C99
  • C11
  • C ++ 98
  • C ++ 03
  • C ++ 11
  • C ++ 14
  • C ++ 17
Christoffer
quelle
4
Beachten Sie die Diskussion zu MSO . Die Antworten auf diese Frage sind für C- und C ++ - Programmierer wertvoll. Es sollte offen bleiben (nicht zuletzt, weil es einen C ++ 2014-Standard gibt, der den Antworten hinzugefügt werden kann, sobald es veröffentlicht wurde - es ist bereits genehmigt).
Jonathan Leffler

Antworten:

439

PDF-Versionen des Standards

Ab dem 1. September 2014 sind die besten Standorte nach Preis für C- und C ++ - Standarddokumente in PDF:

In der Regel können Sie alte Revisionen eines Standards (eines Standards) nicht direkt von den Normungsgremien erhalten, kurz nachdem eine neue Ausgabe des Standards veröffentlicht wurde. Daher sind Standards für C89, C90, C99, C ++ 98, C ++ 03 für den Kauf bei einem Standardisierungsgremium schwer zu finden. Wenn Sie eine alte Überarbeitung eines Standards benötigen, überprüfen Sie Techstreet als eine mögliche Quelle. Beispielsweise kann die kanadische Version CAN / CSA-ISO / IEC 9899: 1990 gegen eine Gebühr weiterhin als PDF bereitgestellt werden.

Elektronische Nicht-PDF-Versionen des Standards

Druckversionen des Standards

Druckexemplare der Normen sind bei nationalen Normungsgremien und ISO erhältlich, jedoch sehr teuer.

Wenn Sie eine Hardcopy des C90-Standards für viel weniger Geld als oben möchten, finden Sie möglicherweise eine billige gebrauchte Ausgabe von Herb Schildts Buch The Annotated ANSI Standard bei Amazon , die den eigentlichen Text des Standards enthält (nützlich). und Kommentar zum Standard (weniger nützlich - er enthält mehrere gefährliche und irreführende Fehler).

Die Standards C99 und C ++ 03 sind in Buchform bei Wiley und dem BSI (British Standards Institute) erhältlich:

Entwurfsversionen des Normungsausschusses (kostenlos)

Die Arbeitsentwürfe für zukünftige Standards sind häufig auf den Websites der Ausschüsse verfügbar:

Wenn Sie Entwürfe aus den aktuellen oder früheren C / C ++ - Standards erhalten möchten, stehen einige im Internet kostenlos zur Verfügung:

Für C:

Für C ++:

Beachten Sie, dass diese Dokumente nicht mit dem Standard identisch sind, obwohl die Versionen unmittelbar vor den Besprechungen, in denen über einen Standard entschieden wird, normalerweise sehr nahe an dem Wert des endgültigen Standards liegen. Die FCD-Versionen (Final Committee Draft) sind passwortgeschützt. Sie müssen im Normungsausschuss sein, um sie zu erhalten.

Auch wenn die Entwurfsversionen möglicherweise sehr nahe an den endgültig ratifizierten Versionen der Standards liegen, empfehlen einige Redakteure dieses Beitrags dringend, eine Kopie der tatsächlichen Dokumente zu erhalten - insbesondere, wenn Sie sie als Referenzen zitieren möchten. Natürlich sollten hungernde Schüler die Entwürfe verwenden, wenn sie Geld haben.


Es scheint, dass, wenn Sie bereit und in der Lage sind, einige Monate nach der Ratifizierung eines Standards zu warten, die Suche nach "INCITS / ISO / IEC" anstelle von "ISO / IEC" bei der Suche nach einem Standard der Schlüssel ist. Auf diese Weise konnte einer der Redakteure dieses Beitrags die Standards C11 und C ++ 11 zu angemessenen Preisen finden. Wenn Sie suchen zum Beispiel für "INCITS / ISO / IEC 9899: 2011": auf statt "2011 ISO / IEC 9899" webstore.ansi.org ist die kostengünstige PDF - Version.


Die Website https://wg21.link/ bietet Links mit kurzen URLs zum aktuellen C ++ - Arbeitsentwurf und Standardentwürfen sowie zu Ausschusspapieren:


Der aktuelle Entwurf des Standards wird als LaTeX-Quelle auf Github beibehalten . Diese Quellen können mit cxxdraft-htmlgen in HTML konvertiert werden . Die folgenden Websites verwalten die so generierten HTML-Seiten:

Tim Song verwaltet auch generierte HTML- und PDF-Versionen des Networking TS und des Ranges TS.

Michael Burr
quelle
60
Das Problem mit Schildts Buch ist, dass seine Kommentare den Standard, den er kommentiert, stark abwerten.
sbi
57
Sehr schlechte Buchempfehlung (Herb Schildt's), siehe dies: lysator.liu.se/c/schildt.html
Wiz
11
Ich bin mir der Rezension bewusst - ich erwähne das Buch nur als einen möglichen Weg, um den Standard sehr kostengünstig zu erhalten. Aber ich nehme an, dass die Leute auch über die Überprüfung Bescheid wissen sollten. Ich würde vorschlagen, dass Sie den Anmerkungsteil des Buches einfach ignorieren, wenn Sie die kostengünstige Standard-Hardcopy möchten (das ist, was ich tue).
Michael Burr
37
Schildts Buch (das meiner Meinung nach vergriffen ist) war viel billiger als eine gedruckte Ausgabe des tatsächlichen Standards. Es wurde vorgeschlagen, dass der Preisunterschied den Wert der Anmerkungen widerspiegelt. Jeder Kopie des Buches sollte ein Ausdruck von Clive DW Feathers The Annotated Annotated C Standard beigefügt sein . (Beachten Sie, dass in Schildts Buch ein Einführungsmaterial fehlt.)
Keith Thompson
12
@MichaelBurr, der gesamte Standard ist kostenlos unter www.open-std.org zu finden, da Sie die akzeptierte Antwort haben. Wie wäre es, wenn Sie die Links zu den kostenlosen ändern?
Shahbaz
429

Online-Versionen des Standards finden Sie unter:

Arbeitsentwurf, Standard für die Programmiersprache C ++

Folgende alle Entwurfsversionen des Standards :
Alle folgenden können kostenlos heruntergeladen werden
(viele davon finden Sie unter diesem GitHub-Hauptlink )
2020-01-14: N4849 git
2019-11-27: N4842 git
2019-10-08: N4835 git
2019-08-15: N4830 git
2019-06-17: N4820 git
2019-03-15: N4810 git
2019-01-21: N4800 git
2018-11-26: N4791 git
2018-10-08: N4778 git
2018-07-07: N4762 git
2018-05-07:N4750 git
2018-04-02: N4741 git
2018-02-12: N4727 git
2017-11-27: N4713 git
2017-10-16: N4700 git
2017-07-30: N4687 git

Dies scheint der neue Standard zu sein:
Diese Version erfordert Authentifizierung
2017-03-21: N4660 ist der C ++ 17 Draft Standard

Folgende alle Entwurfsversionen des Standards :
Alle folgenden sind frei herunterladbar
2017-03-21: N4659 git
2017-02-06: N4640 git
2016-11-28: N4618 git
2016-07-12: N4606 git
2016-05 -30: N4594 git
2016-03-19: N4582 git
2015-11-09: N4567 git
2015-05-22: N4527 git
2015-04-10: N4431 git
2014-11-19: N4296 git

Dies scheint der alte C ++ 14-Standard zu sein :
Diese Version erfordert Authentifizierung
2014-10-07: N4140 git Im Wesentlichen C ++ 14 mit geringfügigen Fehlern und korrigierten Tippfehlern
2014-09-02: N4141 git Standard C ++ 14
2014- 03-02: N3937
02.03.2014: N3936 git

Die folgenden Entwürfe aller Standards :
Alle folgenden können kostenlos heruntergeladen werden
2013-10-13: N3797 git
2013-05-16: N3691
2013-05-15: N3690
2012-11-02: N3485
2012-02-28: N3376
2012-01-16: N3337 git Im Wesentlichen C ++ 11 mit geringfügigen Fehlern und korrigierten Tippfehlern

Dies scheint der alte C ++ 11-Standard zu sein :
Diese Version erfordert Authentifizierung.
2011-04-05: N3291 C ++ 11 (oder sehr nah)

Folgende alle Entwurfsversionen des Standards :
Alle folgenden sind frei herunterladbar
2011-02-28: N3242 (Unterschiede zu N3291 sehr gering)
2010-11-27: N3225 2010-08-21
: N3126
2010-03-29: N3090
2010-02-16: N3035
2009-11-09: N3000
2009-09-25: N2960
2009-06-22: N2914
2009-03-23: N2857
2008-10-04: N2798
2008-08-25: N2723
2008 -06-27: N2691
2008-05-19: N2606
2008-03-17: N2588
2008-02-04: N2521
2007-10-22: N2461
2007-08-06: N2369
2007-06-25: N2315
2007-05-07: N2284
2006-11-03: N2134
2006-04-21: N2009
2005-10-19: N1905
2005 -04-27: N1804

Dies scheint der alte C ++ 03-Standard zu sein: Für
alle folgenden Versionen ist eine Authentifizierung erforderlich.
2004-11-05: N1733
2004-07-16: N1655 Inoffiziell
2004-02-07: N1577 C ++ 03 (oder sehr nah)
2001 -09-13: N1316 Entwurf einer erweiterten technischen Berichtigung
1997-00-00: N1117 Entwurf einer erweiterten technischen Berichtigung

Die folgenden Entwürfe aller Standards :
Alle folgenden sind frei herunterladbar
1996-00-00: N0836 Entwurf einer erweiterten technischen Berichtigung
1995-00-00: N0785 Arbeitspapier für den Entwurf eines vorgeschlagenen internationalen Standards für Informationssysteme - Programmiersprache C ++

Andere interessante Papiere:

- 2020 - / 2019 / 2018 / Jahr 2017 / Jahr 2016 / zum Jahr 2015 / Jahr 2014 / 2013 / 2012 / 2011

Martin York
quelle
1
Vielleicht möchten Sie erwähnen, zu welchem ​​Standard die Links Sie führen! Hinzufügen des C11-Standards: open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Shahbaz
@ Shahbaz: Ich bin nicht mit allen Kopien des C-Standards vertraut (da ich keinen C-Code schreibe (nur C ++)). Möglicherweise möchten Sie Ihre eigene Antwort starten oder eine der folgenden Antworten bearbeiten, die sich explizit mit der Sprache C befasst (siehe die unten stehende).
Martin York
17
+1 für die Aufrechterhaltung einer Liste, die ständig aktueller ist als selbst die ISO-Arbeitsgruppe 21 .
Lundin
5
+1 für die Liste; nur um hinzuzufügen, dass alle Entwürfe als Git-Repository github.com/cplusplus/draft verfügbar sind . Sie könnten möglicherweise den Link zu isocpp.org/std/the-standard
pepr
@ShafikYaghmour: Scheint, als hätten sie es gesperrt (was im Allgemeinen bedeutet, dass es sich um eine offizielle Veröffentlichung handelt). Ich habe mit Links zu der Version aktualisiert, für die eine Authentifizierung erforderlich ist (dh Sie haben dafür bezahlt).
Martin York
64

C99 ist online verfügbar . Zitiert von www.open-std.org :

Die letzte öffentlich verfügbare Version des Standards ist die kombinierte Version C99 + TC1 + TC2 + TC3, WG14 N1256 vom 07.09.2007. Dies ist ein WG14-Arbeitspapier, das jedoch den zum Zeitpunkt der Ausgabe konsolidierten Standard widerspiegelt.

Frederico
quelle
26

Entwurf von Links:

C ++ 11 (+ redaktionelle Korrekturen): N3337 HTML , PDF

C ++ 14 (+ redaktionelle Korrekturen): N4140 HTML , PDF

C11 N1570 ( Text )

C99 N1256

Entwürfe des Standards werden vor der Ratifizierung und Veröffentlichung zur Stellungnahme verteilt.

Beachten Sie, dass ein Arbeitsentwurf nicht der derzeit geltende Standard ist und nicht genau der veröffentlichte Standard

Benutzer1055604
quelle
Der Link "N1169" führt zu einem vierseitigen Dokument mit einigen Fehlerberichten. Es ist in keiner Weise ein Entwurf des C ++ (oder eines anderen) Standards.
Gareth McCaughan
Ich mag diese Antwort, weil sie klar macht, was der neueste Entwurf für jede Hauptversion ist.
Ciro Santilli 14 冠状 病 六四 事件 14
12

ISO-Standards kosten Geld, von einem moderaten Betrag (für eine PDF-Version) bis zu etwas mehr (für eine Buchversion).

Obwohl sie noch nicht fertiggestellt sind, können sie normalerweise online als Entwürfe gefunden werden. In den meisten Fällen unterscheidet sich die endgültige Version nicht wesentlich vom letzten Entwurf. Obwohl sie nicht perfekt ist, passen sie gut.

Pieter
quelle
7

Die Standards C99 und C ++ 03 sind in Buchform bei Wiley erhältlich:

Wie bereits erwähnt, ist der Arbeitsentwurf für künftige Standards häufig auf den Websites der Ausschüsse verfügbar:

Der C-201x-Entwurf ist als N1336 und der C ++ 0x-Entwurf als N3225 verfügbar .

Anthony Williams
quelle
1
Nur ein Hinweis zur Druckversion für den C-Standard von Wiley: Es ist der C99-Standard, nicht C89 / 90.
Michael Burr
4

Die ISO C- und C ++ - Standards sind verdammt teuer. Auf der anderen Seite veröffentlicht die INCITS sie für viel weniger neu. http://www.techstreet.com/ scheint das PDF für 30 US-Dollar zu haben (Suche nach INCITS / ISO / IEC 14882: 2003).

Hardcopy-Versionen sind ebenfalls verfügbar. Suchen Sie nach den von Wiley veröffentlichten Versionen des British Standards Institute.

MSalters
quelle
Derzeit bietet techstreet.com den C ++ 2003-Standard im PDF-Format für 30 US-Dollar und den C ++ 2011-Standard für 403 US-Dollar an.
Keith Thompson
Vielen Dank für den Link zur Techstreet. Der Webshop von ANSI.org würde mir den C11-Standard nicht verkaufen (die Kreditkarte aus "Sicherheitsgründen" ablehnen, dh aus keinem guten Grund), während der Kauf zu einem gleichwertigen Preis (mit derselben Karte) bei Techstreet reibungslos und ohne einen verlief Anhängerkupplung.
Arto Bendiken
4

Die tatsächlichen Standarddokumente sind möglicherweise nicht die nützlichsten. Die meisten Compiler implementieren die Standards nicht vollständig und können manchmal tatsächlich zu Konflikten führen. Die Compiler-Dokumentation, die Sie bereits haben würden, ist also nützlicher. Darüber hinaus enthält die Dokumentation plattformspezifische Anmerkungen und Hinweise zu eventuellen Einschränkungen.

Kris Kumler
quelle
24
Die Compiler-Dokumentation ist wichtig, aber es ist viel wichtiger, die Sprache zu kennen, als Ihre Implementierung zu kennen.
Spidey
2
Mit dem aktuellen Standard können Sie Fehler in den Compilern finden und ihnen helfen, dem Standard besser zu folgen, indem Sie sie patchen, Fehlerberichte einreichen oder einfach einen IRC-Raum betreten und mit jemandem sprechen, der sie beheben kann.
hdante
3
@hdante - absolut. Wenn Sie den Standard selbst als Ideal haben, können Sie vom Anbieter Kompatibilität verlangen. @ / all - Die Absicht hier war nicht zu sagen, dass der Standard nicht nützlich ist (FYI, zuerst vom Standard auszugehen, ist der Ansatz, den ich in der Vergangenheit gewählt habe), sondern dass Sie auch Ihren Ausgangspunkt in der realen Welt kennen müssen. was hoffentlich im Einklang mit den Standards steht.
Kris Kumler
6
In der Compiler-Dokumentation werden die in den Standards behandelten Themen ohnehin weggelassen.
SamB
4

Der Text eines Entwurfs des ANSI C-Standards (auch bekannt als C.89) ist online verfügbar. Dies wurde vom ANSI-Komitee vor der Annahme durch den ISO C-Standard (C.90) standardisiert, sodass die Nummerierung der Abschnitte unterschiedlich ist (ANSI-Abschnitte 2 bis 4 entsprechen ungefähr den ISO-Abschnitten 5 bis 7), obwohl der Inhalt (angenommen) ist weitgehend identisch sein.

jxh
quelle
Ist es wirklich der letzte Entwurf? Ein Unterschied, den ich kenne, ist, dass dieser Entwurf den Bereich von tm_sec angibt [0, 60], während C90 (falsch)[0, 61]
Cubbi
@Cubbi, da ich das nicht persönlich beweisen kann, habe ich den Wortlaut geändert. Vielen Dank.
JXH
@ Cubbi: Er hat gesagt, es sei der letzte Entwurf des ANSI- Standards. Klingt so, als wäre jemand in der ISO-Arbeitsgruppe verwirrt und hätte gedacht, dass die möglichen zwei Schaltsekunden in einem Jahr auch in / nach derselben Minute auftreten könnten ... Oder er hat den Fehler von POSIX erhalten, der nicht sagt, woher er ihn hat von, nur dass sie es repariert haben, um mit C99 auszurichten.
SamB
K & R 2nd Ed. (ANSI C), das nicht auf dem tatsächlichen endgültigen Standard basiert, tm_secgibt dies an (0, 61). Ich dachte das wäre für Schaltsekunden, macht Sinn.
veganaiZe
@veganaiZe Der Bereich ist [0, 60], um Schaltsekunden zu berücksichtigen (andernfalls wäre es [0, 59]). [0, 61] war ein Fehler, der implizierte, dass es möglich wäre, zwei Schaltsekunden in derselben Minute zu haben (ist es nicht).
Keith Thompson
2

Obwohl dies kein tatsächlicher Standard ist, gibt es eine Änderung an ISO C (C89 / 90) namens C94 / 95 oder Normative Addendum 1. Sie wurde in C99 integriert, obwohl einige Compiler wie Clang es Ihnen ermöglichen, in -std=c94der Befehlszeile anzugeben . ISO / IEC 9899: 1990 / Amd 1: 1995 kann bei SAI GLOBAL (PDF oder Hardcopy) zu einem hohen Preis erworben werden .

Eine Zusammenfassung des Dokuments finden Sie hier .

Als der (damalige Entwurf) des ANSI C-Standards 1990 für die Annahme eines internationalen Standards in Betracht gezogen wurde, gab es mehrere Einwände, da er sich nicht mit Fragen der Internationalisierung befasste. Da der Standard bereits seit mehreren Jahren in Arbeit ist, wurde vereinbart, dass einige Änderungen vorgenommen werden, um die Grundlage zu schaffen (zum Beispiel wurden die Funktionen in Unterabschnitt 7.10.7 hinzugefügt), und die Arbeiten werden separat durchgeführt, um sie bereitzustellen ordnungsgemäße Internationalisierung des Standards. Diese Arbeit hat ihren Höhepunkt im normativen Nachtrag 1.

Der normative Nachtrag 1 verkörpert die Reaktion von C auf die Einschränkungen und Versprechen internationaler Zeichensätze. Digraphen und der Header sollten das Erscheinungsbild von C-Programmen verbessern, die in nationalen Varianten von ISO 646 ohne z. B. {oder} Zeichen geschrieben wurden. Am anderen Ende des Spektrums verbinden und erweitern die Einrichtungen, die mit der kaum angemessenen Basis des alten Standards verbunden sind, diese zu einem vollständigen und konsistenten Satz von Dienstprogrammen für den Umgang mit breiten Zeichen und Multibyte-Zeichenfolgen.

Dieses Dokument fasst den normativen Nachtrag 1 zusammen. Es soll Leser, die bereits mit dem Standard vertraut sind, schnell informieren. Es kann und kann weder das komplexe Thema hinter NA1 einführen, noch kann es das Originaldokument als Referenzhandbuch ersetzen. (Trotzdem versucht es, so genau wie möglich zu sein, und sein Autor würde gerne von Fehlern oder Auslassungen erfahren.)

user3920237
quelle
-6

http://c0x.coding-guidelines.com/ enthält eine durchsuchbare, HTML-basierte Version des C-Standards. Eigentlich eine leicht modifizierte Version:

Diese Website enthält eine modifizierte Version von N1256. Es enthält Formulierungen, die aus C99 gelöscht wurden (dh in durchgestrichener Form), und Formulierungen, die früher in C99 erschienen sind (dh in unterstrichener Form).

Denilson Sá Maia
quelle
2
Die Website ist nutzlos, da die meisten Seiten leer sind.
Nisse Engström
Diese Website ist in der Tat völliger Mist.
MD XF