Où puis-je trouver les documents standards C ou C ++ actuels?

394

Pour de nombreuses questions, la réponse semble se trouver dans "la norme". Cependant, où trouvons-nous cela? De préférence en ligne.

La recherche sur Google peut parfois sembler futile, surtout pour les normes C, car elles sont noyées dans le flot des discussions sur les forums de programmation.

Pour commencer, puisque ce sont ceux que je recherche en ce moment, où existe-t-il de bonnes ressources en ligne pour:

  • C89
  • C99
  • C11
  • C ++ 98
  • C ++ 03
  • C ++ 11
  • C ++ 14
  • C ++ 17
Christoffer
la source
4
Notez la discussion sur MSO . Les réponses à cette question sont précieuses pour les programmeurs C et C ++; il devrait être laissé ouvert (notamment parce qu'il existe une norme C ++ 2014 à ajouter aux réponses, une fois qu'il a été publié - il est déjà approuvé).
Jonathan Leffler

Réponses:

439

Versions PDF de la norme

Au 1er septembre 2014, les meilleurs emplacements par prix pour les documents standards C et C ++ en PDF sont:

Vous ne pouvez généralement pas obtenir les anciennes révisions d'une norme (toute norme) directement des organismes de normalisation peu de temps après la publication d'une nouvelle édition de la norme. Ainsi, il sera difficile de trouver des normes pour C89, C90, C99, C ++ 98, C ++ 03 auprès d'un organisme de normalisation. Si vous avez besoin d'une ancienne révision d'une norme, vérifiez Techstreet comme une source possible. Par exemple, il peut toujours fournir la version canadienne CAN / CSA-ISO / IEC 9899: 1990 en format PDF, moyennant des frais.

Versions électroniques non PDF de la norme

Versions imprimées de la norme

Des exemplaires imprimés des normes sont disponibles auprès des organismes nationaux de normalisation et de l' ISO, mais sont très coûteux.

Si vous voulez une copie papier de la norme C90 pour beaucoup moins d'argent que ci-dessus, vous pourrez peut-être trouver une copie d'occasion bon marché du livre de Herb Schildt The Annotated ANSI Standard sur Amazon , qui contient le texte réel de la norme (utile) et commentaires sur la norme (moins utile - elle contient plusieurs erreurs dangereuses et trompeuses).

Les normes C99 et C ++ 03 sont disponibles sous forme de livre auprès de Wiley et du BSI (British Standards Institute):

Projets de versions du comité des normes (gratuits)

Les projets de normes futures sont souvent disponibles sur les sites web des commissions:

Si vous souhaitez obtenir des brouillons à partir des normes C / C ++ actuelles ou antérieures, certaines sont disponibles gratuitement sur Internet:

Pour C:

Pour C ++:

Notez que ces documents ne sont pas les mêmes que la norme, bien que les versions juste avant les réunions qui décident d'une norme soient généralement très proches de ce qui se trouve dans la norme finale. Les versions FCD (Final Committee Draft) sont protégées par mot de passe; vous devez faire partie du comité des normes pour les obtenir.

Même si les versions préliminaires peuvent être très proches des versions finales ratifiées des normes, certains éditeurs de ce poste vous conseillent fortement d'obtenir une copie des documents réels - surtout si vous prévoyez de les citer comme références. Bien sûr, les élèves affamés devraient continuer et utiliser les brouillons s'ils sont à court d'argent.


Il semble que, si vous êtes disposé et capable d'attendre quelques mois après la ratification d'une norme, rechercher "INCITS / ISO / IEC" au lieu de "ISO / IEC" lors de la recherche d'une norme soit la clé. Ce faisant, l'un des rédacteurs de cet article a pu trouver les normes C11 et C ++ 11 à des prix raisonnables. Par exemple, si vous recherchez «INCITS / ISO / IEC 9899: 2011» au lieu de «ISO / IEC 9899: 2011» sur webstore.ansi.org, vous trouverez la version PDF à un prix raisonnable.


Le site https://wg21.link/ fournit des liens URL courts vers le projet de travail actuel C ++ et les projets de normes et les documents de comité:


Le projet actuel de la norme est conservé en tant que sources LaTeX sur Github . Ces sources peuvent être converties en HTML à l'aide de cxxdraft-htmlgen . Les sites suivants gèrent les pages HTML ainsi générées:

Tim Song gère également les versions HTML et PDF générées des Networking TS et Ranges TS.

Michael Burr
la source
60
Le problème avec le livre de Schildt est que ses commentaires dévaluent sévèrement la norme sur laquelle il commente.
sbi
57
Très mauvaise recommandation de livre (Herb Schildt's), Voir ceci: lysator.liu.se/c/schildt.html
Wiz
11
Je suis au courant de l'examen - je ne mentionne le livre que comme un moyen possible d'obtenir la norme à peu de frais. Mais je suppose que les gens devraient également être au courant de l'examen. Je suggérerais d'ignorer la partie annotation du livre si vous voulez la copie papier standard peu coûteuse (c'est ce que je fais).
Michael Burr
37
Le livre de Schildt (qui je pense est épuisé) était beaucoup moins cher qu'une copie imprimée de la norme actuelle. Il a été suggéré que la différence de prix reflète la valeur des annotations. Chaque copie du livre doit être accompagnée d'une impression de la norme C annotée annotée de Clive DW Feather . (Notez qu'il manque du matériel d'introduction dans le livre de Schildt.)
Keith Thompson
12
@MichaelBurr, tous les standards peuvent être trouvés gratuitement sur www.open-std.org puisque vous avez la réponse acceptée, que diriez-vous de changer les liens vers les liens gratuits?
Shahbaz
429

Des versions en ligne de la norme peuvent être trouvées:

Projet de travail, norme pour le langage de programmation C ++

Voici toutes les versions préliminaires de la norme :
Toutes les versions suivantes sont téléchargeables gratuitement
(beaucoup d'entre elles peuvent être trouvées sur ce lien GitHub principal )
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
07/07/2018: N4762 git
07/05/2018: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

Cela semble être la nouvelle norme: cette
version nécessite une authentification
21/03/2017: N4660 est le projet de norme C ++ 17

Voici toutes les versions préliminaires de la norme :
Toutes les versions suivantes sont téléchargeables gratuitement
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

Cela semble être l'ancien standard C ++ 14 :
Cette version nécessite l'authentification
2014-10-07: N4140 git Essentiellement C ++ 14 avec des erreurs mineures et des fautes de frappe corrigées
2014-09-02: N4141 git Standard C ++ 14
2014- 03-02: N3937
2014-03-02: N3936 git

Voici toutes les versions préliminaires de la norme :
Toutes les versions suivantes sont téléchargeables gratuitement le
2013-10-13: N3797 git
2013-05-16: N3691
2013-05-15: N3690
2012-11-02: N3485
2012-02-28: N3376 16-01-2012
: N3337 git Essentiellement C ++ 11 avec des erreurs mineures et des fautes de frappe corrigées

Cela semble être l'ancienne norme C ++ 11 :
cette version nécessite l'authentification
2011-04-05: N3291 C ++ 11 (ou très proche)

Voici toutes les versions préliminaires de la norme :
Toutes les versions suivantes sont téléchargeables gratuitement
2011-02-28: N3242 (différences par rapport à N3291 très mineures)
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

Cela semble être l'ancien standard C ++ 03:
toutes les versions ci-dessous nécessitent une authentification
2004-11-05: N1733
2004-07-16: N1655 non officiel
2004-02-07: N1577 C ++ 03 (ou très proche)
2001 -09 à 13: N1316 Projet de rectificatif technique élargi
1997-00-00: N1117 Projet technique élargi rectificatif

Toutes les versions préliminaires suivantes de la norme :
Toutes les versions suivantes sont téléchargeables gratuitement
1996-00-00: N0836 Projet de rectificatif technique élargi
1995-00-00: N0785 Document de travail pour le projet de norme internationale proposée pour les systèmes d'information - Langage de programmation C ++

Autres articles intéressants:

2 020 / 2019 / 2018 / 2017 / 2016 / ici à 2015 / 2014 / 2013 / 2012 / 2011

Martin York
la source
1
Vous voudrez peut-être mentionner à quel niveau les liens vous mènent! Ajout également de la norme C11: open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Shahbaz
@Shahbaz: Je ne connais pas toutes les copies de la norme C (car je n'écris pas de code C (seulement C ++)). Vous pouvez commencer votre propre réponse ou éditer l'une des réponses ci-dessous qui traite explicitement du langage C (voir celle ci-dessous).
Martin York
17
+1 pour avoir tenu une liste constamment plus à jour que même le groupe de travail ISO 21 .
Lundin
5
+1 pour la liste; seulement pour ajouter que tous les brouillons sont disponibles en tant que référentiel git github.com/cplusplus/draft . Vous pouvez éventuellement ajouter le lien vers isocpp.org/std/the-standard
pepr
@ShafikYaghmour: On dirait qu'ils l'ont verrouillé (ce qui signifie généralement que c'est une version officielle). J'ai mis à jour des liens vers la version qui nécessite une authentification (c'est-à-dire que vous l'avez payée).
Martin York
64

C99 est disponible en ligne . Cité sur www.open-std.org :

La dernière version de la norme accessible au public est le combiné C99 + TC1 + TC2 + TC3, WG14 N1256 , daté du 2007-09-07. Il s'agit d'un document de travail du WG14, mais il reflète la norme consolidée au moment de la publication.

Frederico
la source
26

Projets de liens:

C ++ 11 (+ correctifs éditoriaux): N3337 HTML , PDF

C ++ 14 (+ correctifs éditoriaux): N4140 HTML , PDF

C11 N1570 ( texte )

C99 N1256

Les projets de norme sont distribués pour commentaires avant d'être ratifiés et publiés.

Notez qu'un projet de travail n'est pas la norme actuellement en vigueur, et ce n'est pas exactement la norme publiée

utilisateur1055604
la source
Le lien "N1169" mène à un document de quatre pages contenant quelques rapports de défauts. Il ne s'agit en aucun cas d'un brouillon de la norme C ++ (ou tout autre).
Gareth McCaughan
J'aime cette réponse car elle indique clairement quelle est la version la plus récente de chaque version majeure.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
12

Les normes ISO coûtent de l'argent, d'un montant modéré (pour une version PDF) à un peu plus (pour une version livre).

Bien qu'ils ne soient pas finalisés, ils peuvent généralement être consultés en ligne, sous forme de brouillons. La plupart du temps, la version finale ne diffère pas considérablement du dernier projet, donc bien qu'elle ne soit pas parfaite, elle conviendra très bien.

Pieter
la source
7

Les normes C99 et C ++ 03 sont disponibles sous forme de livre auprès de Wiley:

De plus, comme déjà mentionné, le projet de travail pour les futures normes est souvent disponible sur les sites Web des comités:

Le projet C-201x est disponible en tant que N1336 et le projet C ++ 0x en tant que N3225 .

Anthony Williams
la source
1
Juste une note sur la version imprimée de la norme C de Wiley: c'est la norme C99, pas C89 / 90.
Michael Burr,
4

Les normes ISO C et C ++ coûtent cher. En revanche, les INCITS les republient pour beaucoup moins. http://www.techstreet.com/ semble avoir le PDF pour 30 $ (recherchez INCITS / ISO / IEC 14882: 2003).

Des versions papier sont également disponibles. Recherchez les versions du British Standards Institute publiées par Wiley.

MSalters
la source
Actuellement, techstreet.com a la norme C ++ 2003 au format PDF pour 30 $ US et la norme C ++ 2011 pour 403 $ US.
Keith Thompson
Merci beaucoup pour le lien vers Techstreet. La boutique en ligne d'ANSI.org ne me vendrait pas la norme C11 (refus de la carte de crédit pour des raisons de "sécurité", c'est-à-dire aucune bonne raison), tandis que l'achat à prix équivalent (avec la même carte) chez Techstreet s'est déroulé sans heurts et sans attelage.
Arto Bendiken
4

Les documents normatifs réels ne sont peut-être pas les plus utiles. La plupart des compilateurs n'appliquent pas entièrement les normes et peuvent parfois être en conflit. Ainsi, la documentation du compilateur que vous auriez déjà sera plus utile. De plus, la documentation contiendra des remarques et des notes spécifiques à la plate-forme sur toutes les mises en garde.

Kris Kumler
la source
24
La documentation du compilateur est importante, mais connaître le langage plutôt que connaître votre implémentation est beaucoup plus.
Spidey
2
Avec la norme actuelle, vous pouvez trouver des bogues dans les compilateurs et les aider à mieux suivre la norme en les corrigeant, en soumettant des rapports de bogues ou en entrant simplement dans une salle IRC et en parlant à quelqu'un qui peut les corriger.
hdante
3
@hdante - absolument. Lorsque la norme elle-même est idéale, vous pouvez exiger la compatibilité du fournisseur. @ / all - L'intention ici n'était pas de dire que la norme n'est pas utile (FYI, en partant de la norme d'abord, c'est l'approche que j'ai adoptée dans le passé), mais que vous devez également connaître votre point de départ dans le monde réel, qui, espérons-le, est conforme aux normes.
Kris Kumler
6
De toute façon, la documentation du compilateur a tendance à laisser de côté les éléments couverts par les normes.
SamB
4

Le texte d'un projet de norme ANSI C (alias C.89) est disponible en ligne. Cela a été normalisé par le comité ANSI avant l'acceptation par la norme ISO C (C.90), de sorte que la numérotation des sections diffère (les sections ANSI 2 à 4 correspondent à peu près aux sections ISO 5 à 7), bien que le contenu soit (supposé être) largement identique.

jxh
la source
Est-ce vraiment le dernier brouillon? Une différence dont je suis conscient est que ce projet spécifie la plage de tm_sec à être [0, 60], tandis que C90 (incorrectement)[0, 61]
Cubbi
@Cubbi, puisque je ne peux pas prouver personnellement que c'est le cas, j'ai modifié le libellé. Merci.
jxh
@Cubbi: il a dit que c'était la dernière version de la norme ANSI . On dirait que quelqu'un dans le groupe de travail ISO est devenu confus et pensait que les deux secondes intercalaires possibles dans une année pourraient également se produire dans / après la même minute ... Ou ils ont obtenu l'erreur de POSIX, qui ne dit pas où ils l'ont obtenu de, seulement qu'ils l'ont fixé pour l'aligner avec C99.
SamB
K&R 2nd Ed. (ANSI C), qui est non basé sur la norme finale effective, qui ne précise tm_secest (0, 61). Je pensais que c'était pour des secondes intercalaires, c'était logique.
veganaiZe
@veganaiZe La plage est [0, 60] pour permettre les secondes intercalaires (sinon ce serait [0, 59]). [0, 61] était une erreur, impliquant qu'il serait possible d'avoir deux secondes intercalaires dans la même minute (ce n'est pas le cas).
Keith Thompson
2

Bien qu'il ne s'agisse pas d'une norme réelle, il existe un amendement à l'ISO C (C89 / 90) appelé C94 / 95, ou additif normatif 1. Il a été intégré à C99, bien que certains compilateurs tels que Clang vous permettent de spécifier -std=c94en ligne de commande. ISO / IEC 9899: 1990 / Amd 1: 1995 peuvent être achetés à un prix élevé auprès de SAI GLOBAL (PDF ou copie papier).

Un résumé du document peut être trouvé ici .

Lorsque la norme ANSI C (alors en projet) était envisagée pour l'adoption d'une norme internationale en 1990, plusieurs objections ont été formulées car elle ne traitait pas des problèmes d'internationalisation. Étant donné que la norme avait déjà été élaborée depuis plusieurs années, il a été convenu que quelques modifications seraient apportées pour fournir la base (par exemple, les fonctions du paragraphe 7.10.7 ont été ajoutées), et le travail serait effectué séparément pour fournir internationalisation appropriée de la norme. Ce travail a abouti à l'addendum normatif 1.

L'addendum normatif 1 incarne la réaction de C aux limites et aux promesses des jeux de caractères internationaux. Les digraphes et l'en-tête étaient destinés à améliorer l'apparence des programmes C écrits dans des variantes nationales de l'ISO 646 sans, par exemple, {ou} caractères. À l'autre extrémité du spectre, les installations se connectent et étendent la base à peine adéquate de l'ancienne norme en un ensemble complet et cohérent d'utilitaires pour gérer les caractères larges et les chaînes multi-octets.

Ce document résume l'addenda normatif 1. Il est destiné à informer rapidement les lecteurs qui connaissent déjà la norme; il n'introduit pas et ne peut pas introduire le sujet complexe derrière NA1, ni remplacer le document original comme manuel de référence. (Néanmoins, il essaie d'être aussi précis que possible, et son auteur aimerait connaître toute erreur ou omission.)

user3920237
la source
-6

http://c0x.coding-guidelines.com/ contient une version HTML consultable de la norme C. En fait, une version légèrement modifiée:

Ce site Web contient une version modifiée de N1256. Il comprend le libellé qui a été supprimé de C99 (c.-à-d. Sous forme barrée) et le libellé qui figurait auparavant dans C99 (c.-à-d. Sous forme soulignée).

Denilson Sá Maia
la source
2
Le site Web est inutile car la plupart des pages sont vierges.
Nisse Engström
Ce site Web est en effet une merde totale.
MD XF