Что такое значение __STDC_VERSION__ для C11?

Я знаю, что компиляторы используют __STDC__, чтобы указать, что компилятор является стандартным C, и оттуда вы можете использовать __STDC_VERSION__ для определения уровня используемого вами стандарта.

Я также знаю, что C90 не имел значения, C90 поправка 1 имела 199401L, а C99 имела 199901L.

В последнем проекте C1x я просто заявляю его как 201ymmL, и я предполагаю, что он был сделан менее "неопределенным" значением в окончательном стандарте.

Я предполагаю, что это будет 201112L, так как это было, когда C11 был ратифицирован, но я хотел бы быть уверенным.

Я думал, что могу попробовать использовать gcc -std=c1x, но версия gcc, которую я запускаю, пока не поддерживает.

Кто-нибудь знает, что такое фактическое значение?

Ответ 1

С -std=c11 в gcc, 201112L используется для __STDC_VERSION__

Смотрите этот патч gcc 20 декабря 2011 года на gcc ml:

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

И обратите внимание, что, по-видимому, версия ISO C11 забыла обновить 201ymmL из черновика.

Также реализовано предполагаемое окончательное значение ____STDC_VERSION____, 201112L (редактор забыл обновить заполнители 201ymmL перед отправкой документа для публикации по ISO).

См. также DR # 411, что делает официальным, что предполагаемое значение 201112L. Редактор сказал, что "Комитет пытается как можно скорее утвердить его как TC" .. (TC = "Техническое исправление" )

EDIT (16 июля 2012 г.): Техническое исправление 1 (ISO/IEC 9899: 2011/Cor 1: 2012), выпущенный 15 июля 2012 года, исправляет __STDC_VERSION__ до 201112L.

Ответ 2

В соответствии с this сообщение в список рассылки GCC, конечное значение, как вы подозревали, 201112L.