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?
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/gcc-patches@gcc.gnu.org/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
.
According to this post to the GCC mailing list, the final value is, as you suspected, 201112L.