The C standard

British Standards Institution

Mentioned 4

The definitive reference for any C programmer or for programmers needing to work with C programs. Every book written about C refers frequently to the international standard that defines the language, this will be a must-have companion volume for everyone who is serious about programming in this language. * The complete, current C standard (ISO/IEC 9899-1999) as approved by international standards bodies (BSI and ANSI) * The ONLY available bound version of the standard * Includes the C rationale which provides a valuable insight into why certain decisions were made during the creation of the language * An introductory chapter explains what the standards process is and how the reader can participate in the standards process

More on Amazon.com

Mentioned in questions and answers.

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

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.

PDF versions of the standard

As of 1st September 2014, the best locations by price for C and C++ standards documents in PDF are:

You cannot usually get old revisions of a standard (any standard) directly from the standards bodies shortly after a new edition of the standard is released. Thus, standards for C89, C90, C99, C++98, C++03 will be hard to find for purchase from a standards body. If you need an old revision of a standard, check Techstreet as one possible source. For example, it can still provide the Canadian version CAN/CSA-ISO/IEC 9899:1990 standard in PDF, for a fee.

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).

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

Standards committee draft versions

The working draft for future standards is often available from the committee websites:

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.

However, in my opinion, even though the draft versions might be very close to the final ratified versions of the standards, you should really 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. This way I was able to find the C++11 standard at reasonable price and now the C11 standard. So, as an example you search for "INCITS/ISO/IEC 9899:2011" instead of "ISO/IEC 9899:2011" on webstore.ansi.org and you will find the reasonably priced PDF version.

I'm looking for the documentation of all the syntax and built-in functions in C, but I can't find any site online which seems like an ultimate official source of standard C knowledge.

Apart from the famous book by Kernighan and Ritchie, isn't there any online C specification? Maybe there is, and I don't know how to find it. Or maybe the problem is that I don't exactly know what I'm looking for.

If what you want is the documentation for the standard library functions, then P.J. Plauger's "The Standard C Library" http://www.amazon.com/Standard-C-Library-P-J-Plauger/dp/0131315099/ref=sr_1_1?s=books&ie=UTF8&qid=1290273108&sr=1-1 is the best reference. It's got pretty extensive annotation and comentary on the why and how of the standard.

You can obtain a PDF copy of the C99 standard (ISO/IEC 9899:1999) from ANSI (and other fine standards organizations) for your private use for a modest fee - I believe it was 18 USD when I bought mine. Having that available is invaluable to me. But if you find a copy in public, then it is contraband.

You can find final committee drafts and current working documents of the C (C0x) Standard Committee at the JTC1, SC22, WG14 web site at the Open Standards Organization. (That's Joint Technical Committee 1, Sub-Committee 22, Working Group 14, I believe).

There is also a hardback book 'The C Standard: Incorporating Technical Corrigendum 1' (also including the Rationale) available for a slightly less modest 85 USD or thereabouts.

One of the best books about C is 'C: A Reference Manual' in its fifth edition. However, you asked for 'ultimate official source of standard C knowledge', and the only 'official' such source is the C standard, plus its corrigenda.

See also the material at http://www.coding-guidelines.com/ and http://c0x.coding-guidelines.com/.

I've got a warning looking like :

In file included from /[myapplication]/[myfile].h:262:9: erreur: extra ‘;’ [-Wpedantic]

However, I guess that ignoring pedantic errors is against the ISO C/C++ norm. Is it true?

EDIT : I'm editing rapidly seeing that the Stack-West here is full of downvote-happy people :

using namespace my:name:space;

namespace my
{
    namespace name
    {
        namespace space
        {

            class myclass
            {
                public:

                [Lots of code like the one below]

                /** [Comments] */

                template<class T>
                    static bool
                    getServerProxy(const std::string & p_sServerName,
                    int p_iProxyInstanceID, shared_ptr<T> &p_ServerProxy)
                {
                    return getServerProxy(p_sServerName, -1, p_iProxyInstanceID,
                    p_ServerProxy);
                }
                ; // Pedantic Error Shown here

                [Lots of code like the one up there]

                };

            }
        }
    }

However, I guess that ignoring pedantic errors is against the ISO C/C++ norm

There seems to be quite some confusion here. Let me try to break it into individual misconceptions and clear them up:

  1. There is no C/C++ ISO norm, because these are two different languages, each with their own ISO standard(s):

  2. The C++ and C standards do not distinguish between warnings and errors. What the standards require in the case of certain problematic code is called a "diagnostic message". What this message looks like is unspecified and thus a quality-of-implementation issue. Which means:

    • A compiler would be 100% standards-compliant (but still of low quality) if it just printed "X" for every kind of ill-formed code.
    • Emitting just a warning for ill-formed code is standards-compliant.
    • Standards-wise, it never matters if a warning or an error is emitted.
  3. The ignoring of an error cannot be against an ISO norm. Your code can be against an ISO norm, or your compiler (more precisely, your compiler invoked with a certain set of options) can be against an ISO norm. Whether the ISO norm is important or not is your own decision. A norm is a means to an end. Of course, if you aim for long-term compatibility and cross-platform software, then conforming to an ISO norm is certainly a good idea. By using -Wpedantic, you have effectively made up your mind: the ISO norm is important for you, so you better fix the code.