Search code examples
cmacrosisoc11

What is the __STDC_VERSION__ value for C11?


I know that compilers use __STDC__ to indicate that a compiler is standard C and, from, there, you can use __STDC_VERSION__ to figure out which level of the standard you're using.

I also know that C90 had no value, C90 amendment 1 had 199401L and C99 had 199901L.

The latest C1x draft I have simply states it as 201ymmL and I'm assuming it was made a less "vague" value in the final standard.

My guess is that it will be 201112L since that's when C11 was ratified but I'd like to be certain.

I thought I could try using gcc -std=c1x but the version of gcc I'm running doesn't support that yet.

Does anyone know what the actual value is?


Solution

  • With -std=c11 in gcc, 201112L is used for __STDC_VERSION__

    See this gcc patch on December 20, 2011 on gcc ml:

    https://www.mail-archive.com/[email protected]/msg23572.html

    And note that apparently the ISO version of C11 forgot to update the 201ymmL from the Draft.

    The intended final __STDC_VERSION__ value, 201112L, is also implemented (the editor forgot to update the 201ymmL placeholders before sending the document for publication by ISO).

    See also DR #411, which makes it official that the intended value is 201112l. The editor has said that "The committee is trying to get it approved as a TC as soon as possible.". (TC = "Technical Corrigendum")

    EDIT (July 16, 2012): Technical Corrigendum 1 (ISO/IEC 9899:2011/Cor 1:2012) released on July 15, 2012 fixes the __STDC_VERSION__ to 201112L.