What is C17 and what changes have been made to the language?
As I was checking news about GCC 8, I saw that they added support for the 2017 version of the C language (not C++17, really C17). But I can't find any information about it on Internet.
Is it a new ISO version like C11, or just a codename used by the GCC team for some corrections in their compiler ?
According to GCC reference, C17
is actually a bug-fix version of the C11
standard with DR resolutions integrated.
C17, a bug-fix version of the C11 standard with DR [Defect Report] resolutions integrated, will soon go to ballot. This patch adds corresponding options
-std=c17
,-std=gnu17
(new default version, replacing-std=gnu11
as the default),-std=iso9899:2017
. As a bug-fix version of the standard, there is no need forflag_isoc17
or any options for compatibility warnings; however, there is a new__STDC_VERSION__
value, so new cpplib languagesCLK_GNUC17
andCLK_STDC17
are added to support using that new value with the new options. (If the standard ends up being published in 2018 and being known asC18
, option aliases can be added. Note however that-std=iso9899:199409
corresponds to a__STDC_VERSION__
value rather than a publication date.)(There are a couple of DR resolutions needing implementing in GCC, but that's independent of the new options.)
So, there are no new features included in C17.
The Cppreference (History of C) says:
Future development
C17 Next minor C language standard revision, will include all accepted C11 defect reports, but no new features.
UPDATE:
- 2018: C17 (ISO/IEC 9899:2018) (ISO Store) (Final draft) Includes the deprecation of
ATOMIC_VAR_INIT
and the fixes to the following defect reports:[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
is a “bugfix release” of the C standard how "M.S Chaudhari
" noticed. However, there is very useful information prepared by Jens Gustedt
the author of "Modern C"
book.
He identified the following list of changes in C17
compared to C11
:
atomics: initialization (7.17.2, 7.31.8), coherence requirements (5.1.2.4), fences (7.17.3 p11), functions or macros (7.17.1 p6), lockfree depends on type (7.17.5 p3), compare exchange compares memory and not value (7.17.7.3), atomic_flag (7.17.18).
threads: spurious failures (7.26.3.5 p2, 7.26.3.6 p2, 7.26.4.5 p3), synchronization (7.26.4 p1), thread specific storage (
tss_t
) and thread exit (7.26.5 p3, 7.26.5.5, 7.26.6)
_Generic
(6.5.1.1), rvalues and qualification, cast (6.5.4)alignment: fundamental alignment (6.2.8),
_Alignas
(6.7.5),aligned_alloc
(7.22.3.1)sequence points: full expressions (6.8 p4), full declarators (6.7..6 p3)
infinite loops (6.8.5 p6)
reserved identifiers (7.1.3)
domain or range errors (7.12.1),
ilogb
,erfc
,lgamma
.underspecification of
clock
(7.27.2.1)underspecification of
realloc
for size 0 (7.22.3.5)Annex F:
FLT_ROUNDS
(F.2 p1)Annex 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
.
Link to the main page C17.
Also, this content will be updated by Jens
you can follow to update
here Jeans Gustedt Blog.
P.S: before posting all this stuff I received approval from the author.