Что такое значение __STDC_VERSION__ для C11? - PullRequest
30 голосов
/ 15 февраля 2012

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

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

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

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

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

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

Ответы [ 2 ]

30 голосов
/ 15 февраля 2012

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

См. Этот патч gcc от 20 декабря 2011 г. на gcc мл:

http://www.mail-archive.com/gcc-patches@gcc.gnu.org/msg23572.html

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

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

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

РЕДАКТИРОВАТЬ (16 июля 2012 г.): Техническое исправление 1 ( ИСО / МЭК 9899: 2011 / Cor 1: 2012 )выпущенный 15 июля 2012 года исправляет __STDC_VERSION__ до 201112L.

2 голосов
/ 15 февраля 2012

Согласно этой публикации в списке рассылки GCC, окончательное значение, как вы подозревали, 201112L.

...