What is C17 and what changes have been made to the language?
CGccIsoC11C17C Problem Overview
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 ?
C Solutions
Solution 1 - C
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 for flag_isoc17
or any options for
>compatibility warnings; however, there is a new __STDC_VERSION__
>value, so new cpplib languages CLK_GNUC17
and CLK_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 as C18
, 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]
Solution 2 - C
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.