Что такое C17 и какие изменения были внесены в язык?
Когда я проверял новости о GCC 8, я увидел, что они добавили поддержку версии языка C 2017 года (не C++17, а на самом деле C17). Но я не могу найти информацию об этом в Интернете.
Это новая версия ISO, такая как C11, или просто кодовое имя, используемое командой GCC для некоторых исправлений в их компиляторе?
2 ответа
Согласно справке GCC, C17
на самом деле версия с исправлением ошибок C11
стандарт с разрешением DR.
C17, версия с исправлением ошибок стандарта C11 с интегрированными разрешениями DR, скоро пойдет на голосование. Этот патч добавляет соответствующие параметры
-std=c17
,-std=gnu17
(новая версия по умолчанию, замена-std=gnu11
по умолчанию),-std=iso9899:2017
, Как стандартная версия с исправлением ошибок, нет необходимостиflag_isoc17
или любые варианты предупреждений о совместимости; Тем не менее, есть новый__STDC_VERSION__
значение, поэтому новые языки cpplibCLK_GNUC17
а такжеCLK_STDC17
добавлены для поддержки использования этого нового значения с новыми параметрами. (Если стандарт в конечном итоге будет опубликован в 2018 году и будет известен какC18
, псевдонимы опций могут быть добавлены. Обратите внимание, что-std=iso9899:199409
соответствует__STDC_VERSION__
ценность, а не дата публикации.)(Есть несколько решений DR, которые необходимо реализовать в GCC, но это не зависит от новых опций.)
Таким образом, нет новых функций, включенных в C17.
Cppreference (История C) говорит:
Будущее развитие
C17 Следующая дополнительная редакция стандарта языка C, будет включать все принятые отчеты о дефектах C11, но без новых функций.
ОБНОВИТЬ:
- 2018: C17 (ISO / IEC 9899: 2018) ( ISO Store) ( окончательный вариант) Включает амортизацию
ATOMIC_VAR_INIT
и исправления в следующих отчетах о дефектах:[DR 400], [DR 401], [DR 402], [DR 403], [DR 404], [DR 405], [DR 406], [DR 407], [DR 410], [DR 412], [DR 414], [DR 415], [DR 416], [DR 417], [DR 419], [DR 423], [DR 426], [DR 428], [DR 429], [DR 430], [DR 431], [DR 433], [DR 434], [DR 436], [DR 437], [DR 438], [DR 439], [DR 441], [DR 444], [DR 445], [DR 447], [DR 448], [DR 450], [DR 452], [DR 453], [DR 457], [DR 458], [DR 459], [DR 460], [DR 462], [DR 464], [DR 465], [DR 468], [DR 470], [DR 471], [DR 472], [DR 473], [DR 475], [DR 477], [DR 480], [DR 481], [DR 485], [DR 487], [DR 491]
C17
является "выпуском исправления" стандарта C на языке how " M.S Chaudhari
заметил, однако, есть очень полезная информация, подготовленная Jens Gustedt
автор "Modern C"
книга.
Он определил следующий список изменений в C17
по сравнению с C11
:
атомика: инициализация (7.17.2, 7.31.8), требования согласованности (5.1.2.4), ограждения (7.17.3 p11), функции или макросы (7.17.1 p6), без блокировки зависит от типа (7.17.5 p3), сравнить обмен сравнивает память и не значение (7.17.7.3), atomic_flag (7.17.18).
потоки: ложные сбои (7.26.3.5 p2, 7.26.3.6 p2, 7.26.4.5 p3), синхронизация (7.26.4 p1), специфичное для потока хранилище (
tss_t
) и выход нити (7.26.5 p3, 7.26.5.5, 7.26.6)
_Generic
(6.5.1.1), значения и квалификация, состав исполнителей (6.5.4)выравнивание: фундаментальное выравнивание (6.2.8),
_Alignas
(6.7.5),aligned_alloc
(7.22.3.1)точки последовательности: полные выражения (6,8 стр. 4), полные деклараторы (6,7.,6 стр. 3)
бесконечные петли (6.8.5 p6)
зарезервированные идентификаторы (7.1.3)
ошибки домена или диапазона (7.12.1),
ilogb
,erfc
,lgamma
,занижение
clock
(7.27.2.1)занижение
realloc
для размера 0 (7.22.3.5)Приложение F:
FLT_ROUNDS
(F.2 p1)Приложение K:
tmpnam_s
,snprintf_s
,sprintf_s
,vsprintf_s
,get_s
,mbstowcs_s
,wcstombs_s
,snwprintf_s
,swprintf_s
,vsnwprintf_s
,vswprint_s
,mbsrtowcs_s
,wcsrtombs_s
,
Ссылка на главную страницу C17.
Кроме того, этот контент будет обновляться Jens
Вы можете следить за обновлением здесь Блог Джинса Гастдта.
P.S: before posting all this stuff I received approval from the author.