Jens Gustedt's Blog

April 17, 2018


Filed under: C11, C17, defects — Jens Gustedt @ 08:48

C17 is a “bugfix release” of the C standard. Whereas the intention of the C working group (WG14) has been that this release does not introduce normative changes (but one), it brings a lot of clarifications all over the place. By adopting this version, some features as implemented by some compilers may change if their interpretation of C11 was different because of an unfortunate ambiguity. The schedule for C17 is as follows:

  • Nov. 2017, adoption by WG14, subject to some minor, editorial changes
  • Dec. 2017, integration of these changes and approval by an editorial committee
  • Jan. to Mar. 2018, editorial back and forth with ISO, more editorial changes due to new requirements by ISO and their strict enforcement
  • Apr 2018, ISO sends out the FDIS (final draft international standard) to the national bodies.
  • Apr to June 2018, ballot (ongoing)
  • June or July 2018, publication (tentative)

I identified the following list of changes in C17 compared to C11. The whole process of clarifications that have been integrated is transparently documented in what we called “defect reports”. So if you urgently need to know about some of these you should look them up, there.

My intention is to write a post on most of the items to explain my POV of what happened.  In particular, I will try to cite the new versions of the changed text for reference. Because of copyright issues, I will only be able to do that once C17 has been published by ISO. So please be patient and stay tuned.

    • atomics: initialization (7.17.2, 7.31.8), coherence requirements (, 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 (, atomic_flag (7.17.18)
    • threads: spurious wakeup ( p2, p2, p3), synchronization (7.26.4 p1), thread specific storage (tss_t) and thread exit (7.26.5 p3,, 7.26.6)
    • _Generic (
    • rvalues and qualification, cast (6.5.4)
    • alignment: fundamental alignment (6.2.8), _Alignas (6.7.5), aligned_alloc (
    • 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 (
    • underspecification of realloc for size 0 (
    • 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

NB: comments are switched off for this post. Please communicate errors or imprecisions that you spotted to me directly. If on the other hand you want to discuss the future (or not) of C, there are a lot of places out there. The best that I know of is WG14 itself. So if you really care, please sign in on your committee of your national standards body for programming languages of alike, and invest yourself in the process.


Blog at