What is the __STDC_VERSION__ value for C11?

2020-01-31 03:19发布

问题:

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?

回答1:

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.



回答2:

According to this post to the GCC mailing list, the final value is, as you suspected, 201112L.



标签: c macros iso c11