394

For many questions the answer seems to be found in "the standard". However, where do we find that? Preferably online.

Googling can sometimes feel futile, again especially for the C standards, since they are drowned in the flood of discussions on programming forums.

To get this started, since these are the ones I am searching for right now, where are there good online resources for:

  • C89
  • C99
  • C11
  • C++98
  • C++03
  • C++11
  • C++14
  • C++17
Samuel Liew
  • 76,741
  • 107
  • 159
  • 260
Christoffer
  • 12,712
  • 7
  • 37
  • 53
  • 4
    Note the discussion on [MSO](http://meta.stackoverflow.com/questions/270231/c-standard-thread-marked-as-off-topic). The answers to this question are valuable to C and C++ programmers; it should be left open (not least because there's a C++2014 standard to add to the answers, once it has been published — it's already approved). – Jonathan Leffler Aug 31 '14 at 22:11

11 Answers11

554

PDF versions of the standard

As of 1st September 2014 March 2022, the best locations by price for the official C and C++ standards documents in PDF seem to be:

Non-PDF electronic versions of the standard

Warning: most copies of standard drafts are published in PDF format, and errors may have been introduced if the text/HTML was transcribed or automatically generated from the PDF.

(The site hosting the plain text version of the C++11 working draft also has some C++14 drafts in this format. But none of them are copies of the final working draft, N4140.)

Print versions of the standard

Print copies of the standards are available from national standards bodies and ISO but are very expensive.

If you want a hardcopy of the C90 standard for much less money than above, you may be able to find a cheap used copy of Herb Schildt's book The Annotated ANSI Standard at Amazon, which contains the actual text of the standard (useful) and commentary on the standard (less useful - it contains several dangerous and misleading errors).

The C99 and C++03 standards are available in book form from Wiley and the BSI (British Standards Institute):

Standards committee draft versions (free)

The working drafts for future standards are often available from the committee websites:

If you want to get drafts from the current or earlier C/C++ standards, there are some available for free on the internet:

For C:

For C++:

Note that these documents are not the same as the standard, though the versions just prior to the meetings that decide on a standard are usually very close to what is in the final standard. The FCD (Final Committee Draft) versions are password protected; you need to be on the standards committee to get them.

Even though the draft versions might be very close to the final ratified versions of the standards, some of this post's editors would strongly advise you to get a copy of the actual documents — especially if you're planning on quoting them as references. Of course, starving students should go ahead and use the drafts if strapped for cash.


It appears that, if you are willing and able to wait a few months after ratification of a standard, to search for "INCITS/ISO/IEC" instead of "ISO/IEC" when looking for a standard is the key. By doing so, one of this post's editors was able to find the C11 and C++11 standards at reasonable prices. For example, if you search for "INCITS/ISO/IEC 9899:2011" instead of "ISO/IEC 9899:2011" on webstore.ansi.org you will find the reasonably priced PDF version.


The site https://wg21.link/ provides short-URL links to the C++ current working draft and draft standards, and committee papers:


The current draft of the standard is maintained as LaTeX sources on Github. These sources can be converted to HTML using cxxdraft-htmlgen. The following sites maintain HTML pages so generated:

Tim Song also maintains generated HTML and PDF versions of the Networking TS and Ranges TS.

POSIX extensions to the C standard

The POSIX standard (IEEE 1003.1) requires a compliant operating system to include a C compiler. This compiler must in turn be compliant with the C standard, and must also support various extensions defined in the "System Interfaces" section of POSIX (such as the off_t data type, the <aio.h> header, the clock_gettime() function and the _POSIX_C_SOURCE macro.)

So if you've tried to look up a particular function, been informed "This function is part of POSIX, not the C standard", and wondered why an operating system standard was mandating compiler features and language extensions... now you know!

  • There is a draft version of POSIX.1-2008 at http://www.open-std.org/jtc1/sc22/open/n4217.pdf.

    POSIX.1-2008 also had two technical corrigenda, the latter of the two being dated 2016. There is an online HTML version of the standard incorporating the corrigenda at https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/ - though, again, I have had situations where the site's own search box wasn't good for finding information.

  • There is an online HTML version of POSIX.1-2017 at https://pubs.opengroup.org/onlinepubs/9699919799/ - though, again, I recommend using Google instead of that site's searchbox. According to the Open Group website "IEEE 1003.1-2017 ... is a revision to the 1003.1-2008 standard to rollup the standard including its two technical corrigenda (as-is)". Linux manpages describe it as "technically identical" to POSIX.1-2008 with Technical Corrigenda 1 and 2 applied. This is therefore not a major revision and does not change the value of the _POSIX_C_SOURCE macro.

Michael Burr
  • 333,147
  • 50
  • 533
  • 760
  • 65
    The problem with Schildt's book is that his comments severely devalue the standard he comments on. – sbi Feb 03 '11 at 15:42
  • 63
    Very bad book recommendation (Herb Schildt's), See this: http://www.lysator.liu.se/c/schildt.html – Wiz Jun 03 '11 at 09:57
  • 11
    I'm aware of the review - I mention the book only as a possible way to get the standard very inexpensively. But I suppose that people should know about the review as well. I'd suggest one just ignore the annotation part of the book if you want the inexpensive standard hardcopy (that's what I do). – Michael Burr Jun 03 '11 at 14:26
  • 46
    Schildt's book (which I think is out of print) was much cheaper than a printed copy of the actual standard. It's been suggested that the price difference reflects the value of the annotations. Every copy of the book should be accompanied by a printout of Clive D.W. Feather's [The Annotated Annotated C Standard](http://www.lysator.liu.se/c/schildt.html). (Note that some introductory material is missing from Schildt's book.) – Keith Thompson Dec 09 '11 at 21:12
  • 4
    The C99 standard itself is not available online. I think ANSI charges $30 for it. But [n1256.pdf] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf), which is free, incorporates the C99 standard with the three Technical Corrigenda merged into it, marked with change bars. I find it more useful than the C99 standard itself. – Keith Thompson Dec 09 '11 at 21:14
  • The c++11 standard is now available through ANSI: http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2fIEC+14882%3a2011 But it seems to be even pricier, at $403. I was really hoping it'd be 10% of that... – matthias Dec 09 '11 at 21:45
  • 1
    The $30 prices on previous PDF versions of the standards were after INCITS ratified the standard. I have no idea why INCITS versions of the standards are so much less expensive. I also have no idea how long that'll take for the 2011 C and C++ standards (if it ever does). Don't even really know what INCITS is. – Michael Burr Jan 22 '12 at 02:39
  • 3
    The $30 INCITS version of the C++11 standard is now available. – Michael Burr Mar 08 '12 at 15:21
  • @Alek: I was just pointing out that for people who wanted a zero cost option, the freely available drafts are pretty close to the released, official documents. – Michael Burr Jun 11 '12 at 20:22
  • 14
    @MichaelBurr, all of the standard can be found free in www.open-std.org since you have the accepted answer, how about changing the links to the free ones? – Shahbaz Jun 14 '12 at 15:43
  • 1
    @MichaelBurr, INCITS is the main US organisation that feeds into ISO, it's how ANSI advises ISO JTC1, the IT arm of ISO. We've recently had to deal with them re the SQL standards stuff we do at work. Once you start to play with these guys, you realise how much of a hydra this standardisation process is :-) – paxdiablo Sep 04 '12 at 04:04
  • 3
    @0xC0000022L and Michael Burr - It might be helpful to add an actual date next to the text `As of today ...`. – Dan Nissenbaum Dec 04 '12 at 14:23
  • 1
    ISO 9899:1999 cannot be obtained free of charge. The TC3 was distributed free of charge but ISO/IEC 9899:1999:TC3 is not and has never been distributed free of charge. Note that TC1 to 9899:2011 is available free of charge here: http://webstore.iec.ch/corrigenda/iso/isoiec9899-cor1%7Bed1.0%7Den.pdf – ouah Dec 21 '12 at 23:33
  • 1
    @ouah: this is from the WG14 page linked to for the C99 standard: "The lastest publically available version of the C99 standard is the combined C99 + TC1 + TC2 + TC3, WG14 N1256 [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf], dated 2007-09-07. This is a WG14 working paper, but it reflects the consolidated standard at the time of issue" – Michael Burr Jan 22 '13 at 18:52
  • http://stackoverflow.com/questions/3038976/c-reference-book?lq=1 has some useful links also. –  Jun 04 '14 at 11:48
  • 5
    The problem with Schlidt's book is once seen it cannot be unseen. It's one of the few books I tossed. Only take that option if you really are so poverty stricken you have no choice. – Persixty Nov 28 '14 at 08:18
  • The linked website doesn't have anything resembling the latest working draft of the C++ standard... it still says n3797 is the "latest". – Ben Voigt Jan 09 '15 at 15:38
  • A $60 INCITS version of the C++14 standard is now available. – Michael Burr May 10 '16 at 14:51
  • From the criticism of Schildt's book, "The assumption that 1 byte = 8 bits occurs at several other points in the book. I won't always bother to point it out." Is a byte not always 8 bits by definition? Are there any platforms where a "byte" refers to a different number of bits? – Alex Reinking May 16 '16 at 17:39
  • 7
    @AlexReinking: the C standard doesn't require that a byte is 8-bits (basically, a byte is intended to be the smallest addressable unit of memory on the platform, but it does have to be at least 8 bits). 8 bit bytes are pretty much the norm, but I've heard of DSPs that have 16-bit bytes. In college, I worked on a Univac oddball machine that has a 9-bit byte (http://www.codingforum.org/thread7407-6.html#post50838). Note that POSIX specifies that `CHAR_BIT` be 8: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html – Michael Burr May 16 '16 at 18:11
  • @Michael Burr -- thanks for the info! Even the embedded systems I've worked with have had 8-bit bytes. I guess I always regarded them as fixed units like metric or something. – Alex Reinking May 16 '16 at 22:03
  • 1
    It may be worth noting this line from the 2018 C standard: “There are no major changes in this edition, only technical corrections and clarifications.” – Eric Postpischil Jul 30 '18 at 23:02
  • The standards can also be bought from ISO's website for a little cheaper. For example, [C17](https://www.iso.org/standard/74528.html) is 40 dollars cheaper. – MCCCS Nov 04 '18 at 11:49
  • 1
    The C89/C90, C99 and C11 standards are available here: https://stackoverflow.com/a/17015061 –  Jan 07 '19 at 16:31
  • 2
    There is a C89 draft online at https://web.archive.org/web/20161223125339/http://flash-gordon.me.uk/ansi.c.txt. Does anyone have any objection to my editing the above answer to add this link? – AJM Jan 17 '19 at 14:20
  • cppreference.com say that N4860 is the final working draft for C++20, and have posted a link to https://isocpp.org/files/papers/N4860.pdf. I haven't edited this into the above as I can't find any official announcement of this. But cppreference.com has a very good reputation and is probably correct. – AJM Nov 03 '20 at 17:15
  • Regarding the last edit - I cited Wikipedia talk page discussion as one of the reasons for changing "C18" to "C17/C18". This discussion is at https://en.wikipedia.org/wiki/Talk:C17_(C_standard_revision)#C17_vs_C18 and I may edit again to change "C17/C18" to "C17" at a later date. – AJM Dec 04 '20 at 17:59
  • 1
    Additionally, the manpage for gcc 10.2 gives the name as C17, and states that both -std=c17 and -std=c18 will result in C17 being used as the standard: 'ISO C17, the 2017 revision of the ISO C standard (published in 2018). This standard is same as C11 except for corrections of defects (all of which are also applied with -std=c11) and a new value of "__STDC_VERSION__", and so is supported to the same extent as C11.' – AJM Dec 04 '20 at 19:20
  • Where the official links are described as "the best locations by price" - I did find C++20 at the same ANSI webstore that was given as the best location for other standards (https://webstore.ansi.org/Standards/ISO/ISOIEC148822020). It was more expensive ($250) than the ISO store link, unless you were an ANSI member. I don't know how much ANSI membership costs, so left the iso.org link intact. – AJM May 05 '21 at 13:16
  • I occasionally run into situations where I try to look up a particular function in the standard and find that it's actually part of POSIX. I wonder if we ought to include POSIX standard versions in this wiki answer - anyone have any objections to my editing some in? Or do you think that goes off-topic? – AJM May 07 '21 at 11:02
  • For example, www.open-std.org/jtc1/sc22/open/n4217.pdf is almost certainly a draft of POSIX.1-2008, https://mirror.math.princeton.edu/pub/oldlinux/download/c952.pdf is POSIX.1-2001, there's an HTML version of POSIX.1-2017 hosted at http://pubs.opengroup.org/onlinepubs/9699919799/ - and those are just the ones I know about. – AJM May 07 '21 at 14:57
  • Sorry, c952.pdf in the above comment is just part of POSIX.1-2001 - replace c952 with c950, c951 or c953 to access each of the other parts. – AJM Jun 24 '21 at 15:24
  • Also, I've added the POSIX standard versions to the answer, since nobody posted any objections to my suggestions in the earlier comment. It's not just based on trying to look up an odd function and finding that it's part of POSIX, there are also data-types and headers that are "part of POSIX", plus a requirement to have a C99-compliant command line compiler (which AFAICT was never updated for C11 or C17.) – AJM Jun 24 '21 at 15:26
  • Following on from the above, there's a "C POSIX library" Wikipedia page. I won't be editing it into the answer, but I'll provide a link here: https://en.wikipedia.org/wiki/C_POSIX_library – AJM Jul 12 '21 at 14:29
  • Regarding the C89 and C90 drafts linked to above - I've found a couple more textual differences, this time in their definitions of fflush(). In particular, C89's "in which the most recent operation was output" became "in which the most recent operation was not input" in C90 and all the subsequent versions. – AJM Dec 02 '21 at 16:04
  • 1
    For ex., this one: http://port70.net/~nsz/c/c11/n1570.html. – pmor Feb 03 '22 at 22:28
  • @pmor However, without knowing how that HTML version came about, I'd advise a little wariness. Could someone have transcribed it manually and made some mistakes along the way? Could an automatic PDF->HTML convertor have altered the formatting, turning double quote marks into pairs of apostrophes, for example? There is already one link to an HTML version from that site, so I think I'll probably add the new link but also a cautionary note. – AJM Feb 07 '22 at 10:51
  • I'm seeing a lot of unsourced claims online that N1804 is the closest working draft to C++03. Does anyone have any evidence (e.g. Reddit posts by standards writers) to support/disprove this? Likewise, any information on the differences between N1804 and actual C++03 would be appreciated. – AJM Feb 07 '22 at 13:12
  • @AJM Re: "altered the formatting": the similar [situation](https://graphicdesign.stackexchange.com/q/154609/23794). – pmor Feb 07 '22 at 23:00
  • @KeithThompson "Every copy of the book should be accompanied by a printout of Clive D.W. Feather's The Annotated Annotated C Standard". Well... meh. Having just read through this "annotated annotated", some 95% of it are petty, pedantic remarks that you'll no doubt find when reading any book looking for errors. There are just a few blatant major/conceptual errors like "When static is applied to a global variable or function, it causes that variable or function to have file scope". Overall it would rather seem that there are _far_ worse, more erroneous C books such as K&R 2nd edition. – Lundin Feb 01 '23 at 15:31
  • (Like for example ranting about the book not describing the common initial sequence rule of unions. That rule remains unclear, DR:ed and poorly implemented by all compilers to this day, so I wouldn't blame any book for not mention that crap at all, in year 2023.) – Lundin Feb 01 '23 at 15:34
  • 1
    @Lundin A book that purports to annotate the C standard *should* be pedantic. And if you think that K&R2 is worse than Schildt, I just don't know what to say. – Keith Thompson Feb 01 '23 at 17:56
  • @KeithThompson I haven't read Schildt, but if this was the worst they could find, the book sounds mediocre, but not the complete disaster everyone yells about on SO. Unlike K&R which _is_ a disaster, with exotic "obfuscated C code contest" examples on every page and reliance on poorly-defined behavior in pretty much every single code example. Anyway, this is probably getting a bit off topic. – Lundin Feb 02 '23 at 07:45
  • The link to the C++03 draft (https://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/c++2003std.pdf) now denies access and asks for a username and password. I'll try to find an archived version or an alternative - EDIT: I found a Wayback Machine archived copy and will edit the link in despite the moderation strike as I think this community wiki is important enough to justify an exception. – AJM Aug 02 '23 at 16:33
461

Online versions of the standard can be found:

Working Draft, Standard for Programming Language C++

The following all draft versions of the standard:

All the following are freely downloadable
2023-08-14: N4958
2023-05-10: N4950
2023-03-22: N4944
2022-12-18: N4928
2022-09-05: N4917
2022-03-17: N4910
2021-10-22: N4901
2021-06-18: N4892
2021-03-17: N4885
2020-12-15: N4878
2020-10-18: N4868
2020-04-08: N4861

This is the C++20 Standard:
This version requires Authentication
2020-04-08: N4860

The following all draft versions of the standard:
All the following are freely downloadable
(many of these can be found at this main GitHub link)
2020-01-14: N4849
2019-11-27: N4842
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

This is the old C++17 Standard:
This version requires Authentication
2017-03-21: N4660

The following all draft versions of the standard:
All the following are freely downloadable
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

This is the old C++14 standard:
These version requires Authentication
2014-10-07: N4140 git Essentially C++14 with minor errors and typos corrected
2014-09-02: N4141 git Standard C++14
2014-03-02: N3937
2014-03-02: N3936 git

The following all draft versions of the standard:
All the following are freely downloadable
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 Essentially C++11 with minor errors and typos corrected

This is the old C++11 Standard:
This version requires Authentication
2011-04-05: N3291

The following all draft versions of the standard:
All the following are freely downloadable
2011-02-28: N3242 (differences from N3291 very minor)
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

This is the old C++03 Standard:
All the below versions require Authentication
2004-11-05: N1733
2004-07-16: N1655 Unofficial
2004-02-07: N1577 C++03 (Or Very Close)
2001-09-13: N1316 Draft Expanded Technical Corrigendum
1997-00-00: N1117 Draft Expanded Technical Corrigendum

The following all draft versions of the standard:
All the following are freely downloadable
1996-00-00: N0836 Draft Expanded Technical Corrigendum
1995-00-00: N0785 Working Paper for Draft Proposed International Standard for Information Systems - Programming Language C++

Other Interesting Papers:

2023 / 2022 / 2021 / 2020 / 2019 / 2018 / 2017 / 2016 / 2015 / 2014 / 2013 / 2012 / 2011

Martin York
  • 257,169
  • 86
  • 333
  • 562
  • 1
    You might want to mention what standard the links take you to! Also adding the C11 standard: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf – Shahbaz Jun 14 '12 at 09:11
  • @Shahbaz: I am not familiar with all the copies of the C standard (as I don't write C code (only C++)). You may want to start your own answer or edit one of the answers below that deals explicitly with the C language (See the one below this). – Martin York Jun 14 '12 at 15:32
  • 24
    +1 for keeping a list that is constantly more up-to-date than even [ISO working group 21](http://www.open-std.org/jtc1/sc22/wg21/). – Lundin Oct 25 '13 at 14:03
  • 5
    +1 for the list; only to add that all drafts are available as the git repository https://github.com/cplusplus/draft. You could possibly add the link to http://isocpp.org/std/the-standard – pepr Nov 15 '13 at 12:09
  • @ShafikYaghmour: Seems like they have locked it down (which generally means its an offical release). I have updated with links to the version that requires authentication (i.e you paid for it). – Martin York Mar 07 '14 at 01:37
  • @BЈовић: They voted on it yesterday so it is no longer a draft. As soon as they update the main ISO site I will update this page appropriately. N3797 is very close and free. N3936 is available on github follow that link. – Martin York Aug 20 '14 at 15:06
  • Looks like `4140` is the latest working draft available on [github](https://github.com/cplusplus/draft/tree/master/papers). I picked it up from the [Pre-Urbana papers list](https://isocpp.org/blog/2014/10/pre-urbana). – Shafik Yaghmour Oct 18 '14 at 02:46
  • Why are there two "This seems to be the new standard:" headers? One for C++11 and the other for C++14? It is confusing. – Ciro Santilli OurBigBook.com Jun 16 '15 at 13:34
  • @CiroSantilli六四事件法轮功纳米比亚胡海峰: There are actually three C++03 C++11 C++14. There is a new version in the works tentatively called C++17. Note: none of these breaks backwards compatibility with the previous version, but each iteration does add new features and libraries. You should learn C++14 it is the latest official version of the language. – Martin York Jun 16 '15 at 14:32
  • @LokiAstari thanks for the reply. I think I knew that already :-) But I think the format of this post is a bit confusing. Instead of "This seems to be the new standard" can we put headers saying: "C++11 and drafts", "C++14 and drafts", etc. – Ciro Santilli OurBigBook.com Jun 16 '15 at 14:39
  • 1
    @k-five: Sombody seems to have posted a version on github: https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf – Martin York May 16 '16 at 17:13
  • These links: *This seems to be the new standard: These version requires Authentication 2014-10-07: N4140 git Essentially C++14 with minor errors and typos corrected 2014-09-02: N4141 git Standard C++14 2014-03-02: N3937 2014-03-02: N3936 git* are not longer accessible. – 2501 Aug 15 '16 at 17:18
  • 1
    @LokiAstari Would it be beneficial to link to HTML versions of the working drafts, such as https://timsong-cpp.github.io/cppwp/ (not sure which draft, appears to be recent) or [n3337](https://timsong-cpp.github.io/cppwp/n3337/)? – Justin Time - Reinstate Monica Dec 04 '16 at 17:14
  • @JustinTime My /cppwp is trunk, just like http://eel.is/c++draft/. /cppwp/n3337 and /cppwp/n4140 are essentially as advertised, with a few additional editorial changes that are needed to make the tool work. (The "draft LaTeX sources" link at the top of the TOC takes you to the exact commit from which the HTML was generated.) – T.C. Dec 08 '16 at 09:24
  • Probably should note that [N4659 is the closest to the C++17 DIS](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4661.html) and that link also includes the link to the C++17 DIS which probably should be added although it is not public. – Shafik Yaghmour Dec 06 '17 at 21:41
  • I've tried to edit this to include a link to the newest C++23 working draft ([N4885](http://open-std.org/JTC1/SC22/WG21/docs/papers/2021/n4885.pdf), dated March 17 2021) but I keep getting "Your post appears to contain code that is not properly formatted as code". Can someone else edit it in? I could not work out how to resolve this. – AJM May 05 '21 at 20:49
64

C99 is available online. Quoted from www.open-std.org:

The lastest publically available version of the standard is the combined C99 + TC1 + TC2 + TC3, WG14 N1256, dated 2007-09-07. This is a WG14 working paper, but it reflects the consolidated standard at the time of issue.

Keith Thompson
  • 254,901
  • 44
  • 429
  • 631
26

Draft Links:

C++11 (+editorial fixes): N3337 HTML, PDF

C++14 (+editorial fixes): N4140 HTML, PDF

C11 N1570 (text)

C99 N1256

Drafts of the Standard are circulated for comment prior to ratification and publication.

Note that a working draft is not the standard currently in force, and it is not exactly the published standard

Community
  • 1
  • 1
user1055604
  • 1,624
  • 11
  • 28
  • The "N1169" link goes to a four-page document containing a few defect reports. It is not in any sense a draft of the C++ (or any other) standard. – Gareth McCaughan Nov 13 '12 at 11:37
12

You might find the draft international standard for C++0x useful.

fredoverflow
  • 256,549
  • 94
  • 388
  • 662
James Hopkin
  • 13,797
  • 1
  • 42
  • 71
  • The [FCD](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf) is [available now](http://herbsutter.com/2010/04/02/how-anyone-can-comment-on-the-fcd/). –  Apr 14 '10 at 17:47
11

ISO standards cost money, from a moderate amount (for a PDF version), to a bit more (for a book version).

While they aren't finalised however, they can usually be found online, as drafts. Most of the times the final version doesn't differ significantly from the last draft, so while not perfect, they'll suit just fine.

Pieter
  • 17,435
  • 8
  • 50
  • 89
6

The text of a draft of the ANSI C standard (aka C.89) is available online. This was standardized by the ANSI committee prior to acceptance by the ISO C Standard (C.90), so the numbering of the sections differ (ANSI sections 2 through 4 correspond roughly to ISO sections 5 through 7), although the content is (supposed to be) largely identical.

jxh
  • 69,070
  • 8
  • 110
  • 193
  • Is it really the last draft? One difference I am aware of is that this draft specifies the range of tm_sec to be `[0, 60]`, while C90 (incorrectly) `[0, 61]` – Cubbi Aug 16 '13 at 22:46
  • @Cubbi: he did say it was the last draft of the *ANSI* standard. Sounds like someone in the ISO WG got confused and thought that the possible two leap seconds in a year might happen in/after the same *minute*, too... Or they got the error from POSIX, who don't say where they got it from, only that they fixed it to align with C99. – SamB Mar 25 '15 at 02:54
  • K&R 2nd Ed. (ANSI C), which is _not_ based on the actual final standard, does specify that `tm_sec` is `(0, 61)`. I thought that was for leap seconds, makes sense. – veganaiZe Jun 20 '18 at 03:39
  • @veganaiZe The range is [0, 60] to allow for leap seconds (otherwise it would be [0, 59]). [0, 61] was an error, implying that it would be possible to have two leap seconds in the same minute (it isn't). – Keith Thompson Nov 08 '18 at 09:59
  • There's at least one notable difference between C89 and C90. In section 6.5.7 (previously 3.5.7), "a list" becomes "a brace-enclosed list" in C90. – AJM May 07 '21 at 11:00
6

The C99 and C++03 standards are available in book form from Wiley:

Plus, as already mentioned, the working draft for future standards is often available from the committee websites:

The C-201x draft is available as N1336, and the C++0x draft as N3225.

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
Anthony Williams
  • 66,628
  • 14
  • 133
  • 155
3

The ISO C and C++ standards are bloody expensive. On the other hand, the INCITS republishes them for a lot less. http://www.techstreet.com/ seems to have the PDF for $30 (search for INCITS/ISO/IEC 14882:2003).

Hardcopy versions are available, too. Look for the British Standards Institute versions, published by Wiley.

MSalters
  • 173,980
  • 10
  • 155
  • 350
2

The actual standards documents may not be the most useful. Most compilers do not fully implement the standards and may sometimes actually conflict. So the compiler documentation that you would already have will be more useful. Additionally, the documentation will contain platform-specific remarks and notes on any caveats.

Kris Kumler
  • 6,307
  • 3
  • 24
  • 27
  • 24
    Compiler documentation is important, but knowing the language rather than knowing your implementation is much more. – Spidey Jul 04 '12 at 16:03
  • 2
    With the actual standard you can find bugs in the compilers and help them to better follow the standard by patching them, by submitting bug reports or simply entering an IRC room and talking to someone who can fix it. – hdante Mar 01 '13 at 03:49
  • 3
    @hdante -- absolutely. When you have the standard itself as the ideal, you can demand compatibility from the vendor. @/all -- The intention here was not to say the standard is not useful (FYI, going from the standard first is the approach I have taken in the past), but that you have to know your real world starting point as well, which hopefully is in-line with the standards. – Kris Kumler Mar 01 '13 at 14:45
  • 7
    Compiler documentation tends to leave out the stuff covered in the standards, anyway. – SamB Mar 25 '15 at 02:43
1

Although not an actual standard, there is an amendment to ISO C (C89/90) called C94/95, or Normative Addendum 1. It was integrated into C99, although some compilers such as Clang allow you to specifiy -std=c94 on the command line. ISO/IEC 9899:1990/Amd 1:1995 can be purchased for a hefty price from SAI GLOBAL (PDF or hard copy).

A summary of the document can be found here.

When the (then draft) ANSI C Standard was being considered for adoption of an International Standard in 1990, there were several objections because it didn't address internationalization issues. Because the Standard had already been several years in the making, it was agreed that a few changes would be made to provide the basis (for example, the functions in subclause 7.10.7 were added), and work would be carried out separately to provide proper internationalization of the Standard. This work has culminated in Normative Addendum 1.

Normative Addendum 1 embodies C's reaction to both the limitations and promises of international character sets. Digraphs and the header were meant to improve the appearance of C programs written in national variants of ISO 646 without, e.g., { or } characters. On the other end of the spectrum, the facilities connected to and extend the old Standard's barely adequate basis into a complete and consistent set of utilities for handling wide characters and multibyte strings.

This document summarizes Normative Addendum 1. It is intended to quickly inform readers who are already familiar with the Standard; it does not, and cannot, introduce the complex subject matter behind NA1, nor can it replace the original document as a reference manual. (Nevertheless, it tries to be as accurate as possible, and its author would like to hear about any errors or omissions.)

  • The SAI Global link is no longer valid. I've checked archive.org and it did redirect at one time - based on that I THINK https://infostore.saiglobal.com/en-gb/standards/iso-iec-9899-1990-amd-1-592351_saig_iso_iso_1411932/ is the new URL to purchase NA1. – AJM Apr 12 '21 at 12:16