Gdzie znajdę aktualne standardowe dokumenty C lub C ++?

394

Na wiele pytań odpowiedź wydaje się znajdować w „standardzie”. Gdzie to jednak znajdujemy? Najlepiej online.

Googling może czasem wydawać się daremny, szczególnie w przypadku standardów C, ponieważ tonie w zalewie dyskusji na forach programistycznych.

Aby rozpocząć, ponieważ są to te, których teraz szukam, gdzie są dobre zasoby online dla:

  • C89
  • C99
  • C11
  • C ++ 98
  • C ++ 03
  • C ++ 11
  • C ++ 14
  • C ++ 17
Christoffer
źródło
4
Zwróć uwagę na dyskusję na temat MSO . Odpowiedzi na to pytanie są cenne dla programistów C i C ++; należy pozostawić otwarte (nie tylko dlatego, że istnieje już standard C ++ 2014, który można dodawać do odpowiedzi po opublikowaniu - jest już zatwierdzony).
Jonathan Leffler

Odpowiedzi:

439

Wersje PDF standardu

Od 1 września 2014 r. Najlepszymi lokalizacjami pod względem ceny dla dokumentów w standardzie C i C ++ w formacie PDF są:

Zwykle nie można uzyskać starych wersji standardu (dowolnego standardu) bezpośrednio od organów normalizacyjnych wkrótce po wydaniu nowej edycji standardu. Tak więc trudno będzie znaleźć standardy dla C89, C90, C99, C ++ 98, C ++ 03 w jednostce normalizacyjnej. Jeśli potrzebujesz starej wersji standardu, sprawdź Techstreet jako jedno z możliwych źródeł. Na przykład nadal może za opłatą udostępniać kanadyjską wersję standardu CAN / CSA-ISO / IEC 9899: 1990 w formacie PDF.

Wersje elektroniczne w formacie innym niż PDF

Wydrukuj wersje standardu

Wydrukowane kopie norm są dostępne w krajowych organach normalizacyjnych i ISO, ale są bardzo drogie.

Jeśli chcesz otrzymać wydruk standardu C90 za znacznie mniej pieniędzy niż powyżej, może być w stanie znaleźć tani używany egzemplarz Herb Schildt książki „s adnotacjami ANSI w Amazonii , która zawiera rzeczywistą treść standardu (przydatne) i komentarz do normy (mniej przydatny - zawiera kilka niebezpiecznych i wprowadzających w błąd błędów).

Standardy C99 i C ++ 03 są dostępne w formie książkowej od Wiley i BSI (British Standards Institute):

Wersje robocze komitetu norm (bezpłatne)

Robocze projekty przyszłych standardów są często dostępne na stronach internetowych komitetu:

Jeśli chcesz pobrać wersje robocze z obecnych lub wcześniejszych standardów C / C ++, niektóre są dostępne bezpłatnie w Internecie:

Dla C:

Dla C ++:

Pamiętaj, że te dokumenty nie są takie same jak standard, chociaż wersje tuż przed spotkaniami, które decydują o standardzie, są zwykle bardzo zbliżone do tego, co jest w ostatecznym standardzie. Wersje FCD (Final Committee Draft) są chronione hasłem; musisz być w komitecie normalizacyjnym, aby je zdobyć.

Mimo że wersje robocze mogą być bardzo zbliżone do ostatecznych ratyfikowanych wersji standardów, niektórzy redaktorzy tego postu zdecydowanie zalecają otrzymanie kopii faktycznych dokumentów - zwłaszcza jeśli planujesz cytować je jako odniesienia. Oczywiście głodni studenci powinni iść naprzód i korzystać z przeciągów, jeśli są przywiązani do gotówki.


Wygląda na to, że jeśli jesteś gotów i możesz poczekać kilka miesięcy po ratyfikacji normy, wyszukiwanie „INCITS / ISO / IEC” zamiast „ISO / IEC” w poszukiwaniu normy jest kluczem. W ten sposób jeden z redaktorów tego posta był w stanie znaleźć standardy C11 i C ++ 11 w rozsądnych cenach. Na przykład, jeśli szukasz „INCITS / ISO / IEC 9899: 2011” zamiast „ISO / IEC 9899: 2011” na stronie webstore.ansi.org , znajdziesz wersję PDF w rozsądnej cenie.


Witryna https://wg21.link/ zawiera linki z krótkimi adresami URL do aktualnego roboczego projektu i standardów C ++ oraz dokumentów komitetu:


Obecny projekt standardu jest utrzymywany jako źródła LaTeX na Github . Te źródła można przekonwertować na HTML za pomocą cxxdraft-htmlgen . Następujące strony utrzymują tak wygenerowane strony HTML:

Tim Song utrzymuje również wygenerowane wersje HTML i PDF Networking TS i Ranges TS.

Michael Burr
źródło
60
Problem z książką Schildta polega na tym, że jego komentarze poważnie dewaluują standard, który komentuje.
sbi
57
Bardzo zła rekomendacja książki (Herb Schildt's), patrz: lysator.liu.se/c/schildt.html
Wiz
11
Zdaję sobie sprawę z recenzji - wspominam o książce tylko jako możliwy sposób na uzyskanie standardu bardzo niedrogo. Ale przypuszczam, że ludzie również powinni wiedzieć o recenzji. Sugeruję, aby po prostu zignorować część adnotacji w książce, jeśli chcesz niedrogiego standardowego wydruku (to właśnie robię).
Michael Burr,
37
Książka Schildta (która, jak mi się wydaje, została wyczerpana) była znacznie tańsza niż wydrukowana kopia aktualnego standardu. Sugeruje się, że różnica cen odzwierciedla wartość adnotacji. Do każdej kopii książki należy dołączyć wydruk Clive DW Feather The Annotated Annotated C Standard . (Zwróć uwagę, że w książce Schildta brakuje niektórych materiałów wprowadzających.)
Keith Thompson,
12
@MichaelBurr, wszystkie standardy można znaleźć bezpłatnie na www.open-std.org, ponieważ masz zaakceptowaną odpowiedź, co powiesz na zmianę linków na darmowe?
Shahbaz
429

Wersje online standardu można znaleźć:

Projekt roboczy, standard języka programowania C ++

Następujące wszystkie wstępne wersje standardu :
Wszystkie poniższe można pobrać za darmo
(wiele z nich można znaleźć pod tym głównym linkiem GitHub )
2020-01-14: N4849 git
27.11.2019: N4842 git
08.10.2019: N4835 git
15.08.2019: N4830 git
17.06.2019: N4820 git
15.03.2019: N4810 git
01.01.2019: N4800 git
26.11.2018: N4791 git
08.10.2018: N4778 git
07.7.2018: N4762 git
2018-05-07:N4750 git
02.04.2018: N4741 git
12.02.2018: N4727 git
27.11.2017: N4713 git
16.10.2017: N4700 git
2017-07-30: N4687 git

Wygląda na to, że jest to nowy standard:
Ta wersja wymaga uwierzytelnienia 21.03.2017
: N4660 jest wersją roboczą C ++ 17

Następujące wszystkie wstępne wersje standardu :
Wszystkie następujące można bezpłatnie pobrać 21.03.2017
: N4659 git
2017-02-06: N4640 git 28.11.2016
: N4618 git
2016-07-12: N4606 git
2016-05 -30: N4594 git
19.03.2016: N4582 git 09.11.2015
: N4567 git
22.05.2015: N4527 git
04.04.2015: N4431 git
19.11.2014: N4296 git

Wygląda na to, że jest to stary standard C ++ 14 :
Te wersje wymagają uwierzytelnienia
2014-10-07: N4140 git Zasadniczo C ++ 14 z drobnymi błędami i literówkami poprawionymi 02.09.2014
: N4141 git Standard C ++ 14
2014- 03-02: N3937
2014-03-02: N3936 git

Następujące wszystkie wstępne wersje normy :
Wszystkie następujące można bezpłatnie pobrać
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 Zasadniczo C ++ 11 z drobnymi błędami i literówkami poprawionymi

Wygląda na to, że jest to stary standard C ++ 11 :
Ta wersja wymaga uwierzytelnienia
2011-04-05: N3291 C ++ 11 (lub bardzo blisko)

Następujące wszystkie wstępne wersje normy :
Wszystkie następujące można bezpłatnie pobrać 28.02.2011
: N3242 (różnice w stosunku do N3291 bardzo niewielkie)
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

Wygląda na to, że jest to stary standard C ++ 03:
Wszystkie poniższe wersje wymagają uwierzytelnienia
2004-11-05: N1733
2004-07-16: N1655 Nieoficjalne
2004-02-07: N1577 C ++ 03 (lub bardzo blisko)
2001 -09-13: N1316 Projekt rozszerzonej sprostowania technicznego
1997-00-00: N1117 Projekt rozszerzonej sprostowania technicznego

Wszystkie następujące wersje standardu :
Wszystkie następujące elementy można bezpłatnie pobrać
1996-00-00: N0836 Projekt rozszerzonej sprostowania technicznego
1995-00-00: N0785 Dokument roboczy dotyczący projektu proponowanej międzynarodowej normy dla systemów informatycznych - Język programowania C ++

Inne ciekawe dokumenty:

2020 / +2.019 / 2.018 / wykupu w 2017 r / 2016 / +2.015 / 2014 / 2013 / +2.012 / 2011

Martin York
źródło
1
Możesz wspomnieć o tym, do jakiego standardu prowadzą cię linki! Dodanie również standardu C11: open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
Shahbaz
@Shahbaz: Nie znam wszystkich kopii standardu C (ponieważ nie piszę kodu C (tylko C ++)). Możesz rozpocząć własną odpowiedź lub edytować jedną z poniższych odpowiedzi, która dotyczy jawnie języka C (patrz odpowiedź poniżej).
Martin York
17
+1 za utrzymanie listy, która jest zawsze bardziej aktualna niż nawet grupa robocza ISO 21 .
Lundin,
5
+1 za listę; tylko po to, aby dodać, że wszystkie wersje robocze są dostępne jako repozytorium git github.com/cplusplus/draft . Możesz dodać link do isocpp.org/std/the-standard
pepr
@ShafikYaghmour: Wygląda na to, że go zablokowali (co ogólnie oznacza oficjalne wydanie). Zaktualizowałem z linkami do wersji wymagającej uwierzytelnienia (tj. Zapłaciłeś za to).
Martin York,
64

C99 jest dostępny online . Cytat z www.open-std.org :

Ostatnią publicznie dostępną wersją standardu jest kombinacja C99 + TC1 + TC2 + TC3, WG14 N1256 , z dnia 2007-09-07. Jest to dokument roboczy WG14, ale odzwierciedla on skonsolidowany standard w momencie wydania.

Frederico
źródło
26

Projekty linków:

C ++ 11 (+ poprawki redakcyjne): N3337 HTML , PDF

C ++ 14 (+ poprawki redakcyjne): N4140 HTML , PDF

C11 N1570 ( tekst )

C99 N1256

Projekty Standardu są przekazywane do komentowania przed ratyfikacją i publikacją.

Należy zauważyć, że robocza wersja robocza nie jest obecnie obowiązującym standardem i nie jest dokładnie opublikowanym standardem

1055604
źródło
Link „N1169” prowadzi do czterostronicowego dokumentu zawierającego kilka raportów o wadach. W żadnym sensie nie jest to wersja robocza standardu C ++ (ani żadnego innego).
Gareth McCaughan
Podoba mi się ta odpowiedź, ponieważ wyjaśnia ona, jaki jest najnowszy projekt dla każdego ważnego wydania.
Ciro Santilli 14 冠状 病 六四 事件 法轮功
12

Normy ISO kosztują pieniądze, od umiarkowanej kwoty (dla wersji PDF), do nieco więcej (dla wersji książkowej).

Chociaż nie są one sfinalizowane, zwykle można je znaleźć w Internecie, jako wersje robocze. W większości przypadków ostateczna wersja nie różni się znacząco od ostatniego szkicu, więc choć nie są idealne, będą dobrze pasować.

Pieter
źródło
7

Standardy C99 i C ++ 03 są dostępne w formie książkowej od Wiley:

Ponadto, jak już wspomniano, projekt roboczy przyszłych standardów jest często dostępny na stronach internetowych komitetu:

Szkic C-201x jest dostępny jako N1336 , a szkic C ++ 0x jako N3225 .

Anthony Williams
źródło
1
Tylko uwaga na temat wersji drukowanej dla standardu C od Wiley: jest to standard C99, a nie C89 / 90.
Michael Burr
4

Standardy ISO C i C ++ są cholernie drogie. Z drugiej strony INCITS publikuje je za znacznie mniej. Wydaje się, że http://www.techstreet.com/ ma plik PDF za 30 USD (wyszukaj INCITS / ISO / IEC 14882: 2003).

Dostępne są również wersje papierowe. Poszukaj wersji British Standards Institute, opublikowanych przez Wiley.

MSalters
źródło
Obecnie techstreet.com ma standard C ++ 2003 w formacie PDF za 30 USD i standard C ++ 2011 za 403 USD.
Keith Thompson,
Wielkie dzięki za link do Techstreet. Sklep internetowy ANSI.org nie sprzedałby mi standardu C11 (odrzucanie karty kredytowej ze względów „bezpieczeństwa”, tj. Bez uzasadnionego powodu), podczas gdy zakup w równoważnej cenie (z tą samą kartą) w Techstreet poszedł gładko i bez zaczep.
Arto Bendiken
4

Faktyczne standardy dokumentów mogą nie być najbardziej przydatne. Większość kompilatorów nie wdraża w pełni standardów i czasami może faktycznie powodować konflikty. Tak więc dokumentacja kompilatora, którą już posiadasz, będzie bardziej przydatna. Dodatkowo dokumentacja będzie zawierać uwagi i uwagi dotyczące platformy dotyczące wszelkich zastrzeżeń.

Kris Kumler
źródło
24
Dokumentacja kompilatora jest ważna, ale znajomość języka jest ważniejsza niż znajomość implementacji.
Spidey
2
Przy obecnym standardzie możesz znaleźć błędy w kompilatorach i pomóc im lepiej podążać za standardem poprzez łatanie ich, przesyłanie raportów o błędach lub po prostu wejście do pokoju IRC i rozmawianie z kimś, kto może to naprawić.
hdante
3
@hdante - absolutnie. Jeśli masz sam standard jako idealny, możesz wymagać od dostawcy zgodności. @ / all - Chodziło tutaj o to, aby nie mówić, że standard nie jest przydatny (informacja o tym, że pierwsze od standardu to podejście, które podjąłem w przeszłości), ale że musisz znać również swój punkt wyjścia w prawdziwym świecie, co, mam nadzieję, jest zgodne ze standardami.
Kris Kumler
6
W każdym razie dokumentacja kompilatora pomija rzeczy objęte standardami.
SamB
4

Tekst projektu normy ANSI C (aka C.89) jest dostępny online. Zostało to znormalizowane przez komitet ANSI przed zaakceptowaniem przez normę ISO C (C.90), więc numeracja sekcji różni się (sekcje ANSI 2 do 4 odpowiadają mniej więcej sekcjom ISO 5 do 7), chociaż treść jest (przypuszczalnie być) w dużej mierze identyczne.

jxh
źródło
Czy to naprawdę ostatni szkic? Jedną z różnic, o których wiem, jest to, że ten szkic określa zakres tm_sec [0, 60], podczas gdy C90 (niepoprawnie)[0, 61]
Cubbi 16.08.13
@Cubbi, ponieważ nie mogę osobiście udowodnić, że tak jest, zmodyfikowałem sformułowanie. Dzięki.
jxh
@Cubbi: powiedział, że to ostatni szkic standardu ANSI . Wygląda na to, że ktoś w ISO WG był zdezorientowany i pomyślał, że możliwe dwie sekundy przestępne w ciągu roku mogą się wydarzyć również w / po tej samej minucie ... Albo dostał błąd od POSIX, który nie mówi, skąd go wziął z, tylko że naprawili to, aby wyrównać z C99.
SamB
K&R 2nd Ed. (ANSI C), który nie jest oparty na rzeczywistym ostatecznym standardzie, określa, że ​​tak tm_secjest (0, 61). Pomyślałem, że to przez sekundę przestępną, ma sens.
veganaiZe
@veganaiZe Zakres wynosi [0, 60], aby pozwolić na sekundy przestępne (w przeciwnym razie byłoby to [0, 59]). [0, 61] był błędem, co sugeruje, że można mieć dwie sekundy przestępne w tej samej minucie (nie jest).
Keith Thompson,
2

Chociaż nie jest to rzeczywisty standard, istnieje poprawka do ISO C (C89 / 90) o nazwie C94 / 95 lub Normative Addendum 1. Został on zintegrowany z C99, chociaż niektóre kompilatory, takie jak Clang, pozwalają -std=c94na specyfikację w wierszu poleceń. ISO / IEC 9899: 1990 / Amd 1: 1995 można kupić za wysoką cenę w SAI GLOBAL (PDF lub wersja papierowa).

Podsumowanie dokumentu można znaleźć tutaj .

Kiedy rozważano (wówczas projekt) normę ANSI C do przyjęcia normy międzynarodowej w 1990 r., Zgłoszono kilka zastrzeżeń, ponieważ nie rozwiązała ona kwestii internacjonalizacji. Ponieważ Standard był już opracowywany kilka lat, uzgodniono, że wprowadzono kilka zmian w celu zapewnienia podstawy (na przykład dodano funkcje w podpunkcie 7.10.7), a prace zostaną przeprowadzone osobno, aby zapewnić właściwa internacjonalizacja standardu. Kulminacją tej pracy jest Dodatek Normatywny 1.

Dodatek normatywny 1 ucieleśnia reakcję C zarówno na ograniczenia, jak i obietnice międzynarodowych zestawów znaków. Digraphy i nagłówek miały poprawić wygląd programów C napisanych w krajowych wariantach ISO 646 bez np. {Lub} znaków. Z drugiej strony spektrum, urządzenia połączone i rozszerzające ledwo wystarczającą podstawę starego Standardu do kompletnego i spójnego zestawu narzędzi do obsługi szerokich znaków i łańcuchów wielobajtowych.

Niniejszy dokument podsumowuje Dodatek Normatywny 1. Ma on na celu szybkie poinformowanie czytelników, którzy znają już Standard; nie wprowadza i nie może przedstawiać złożonego przedmiotu NA1, ani nie może zastąpić oryginalnego dokumentu jako podręcznika referencyjnego. (Niemniej jednak stara się być tak dokładny, jak to możliwe, a jego autor chciałby usłyszeć o wszelkich błędach lub przeoczeniach).

użytkownik3920237
źródło
-6

http://c0x.coding-guidelines.com/ zawiera przeszukiwalną, opartą na HTML wersję standardu C. W rzeczywistości nieco zmodyfikowana wersja:

Ta strona zawiera zmodyfikowaną wersję N1256. Obejmuje sformułowanie, które zostało usunięte z C99 (tj. W przekreślonym formularzu) oraz sformułowanie, które występowało w C99 (tj. W formie podkreślonej).

Denilson Sá Maia
źródło
2
Witryna jest bezużyteczna, ponieważ większość stron jest pusta.
Nisse Engström,
Ta strona jest naprawdę badziewna.
MD XF,