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=c11ingcc,201112Lis used for__STDC_VERSION__See this
gccpatch on December 20, 2011 ongccml: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
201ymmLfrom the Draft.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__to201112L.