Что такое значение __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.