From a6a22afb6072e635230e9b07dfc142d837ec0bdc Mon Sep 17 00:00:00 2001 From: nsz Date: Sun, 24 Jul 2011 14:15:41 +0200 Subject: [PATCH] add pre.html version of n1570 --- n1548.pre.html => n1570.pre.html | 11404 +++++++++++++++-------------- pdf2html.sh | 1 + 2 files changed, 5831 insertions(+), 5574 deletions(-) rename n1548.pre.html => n1570.pre.html (79%) diff --git a/n1548.pre.html b/n1570.pre.html similarity index 79% rename from n1548.pre.html rename to n1570.pre.html index 8ef750a..6be6baf 100644 --- a/n1548.pre.html +++ b/n1570.pre.html @@ -1,5 +1,5 @@ -N1548 Committee Draft -- December 2, 2010 ISO/IEC 9899:201x
-N1548                    Committee Draft -- December 2, 2010          ISO/IEC 9899:201x
+N1570                      Committee Draft -- April 12, 2011          ISO/IEC 9899:201x
+N1570                      Committee Draft -- April 12, 2011          ISO/IEC 9899:201x
 
 
 
@@ -34,7 +34,7 @@ itself is not designed to serve as a tutorial.
 Recipients of this draft are invited to submit, with their comments, notification of any
 relevant patent rights of which they are aware and to provide supporting documentation.
 
-Changes from the previous draft (N1256) are indicated by ''diff marks'' in the right
+Changes from the previous draft (N1539) are indicated by ''diff marks'' in the right
 margin: deleted text is marked with ''*'', new or changed text with '' ''.
 
 [page i]
@@ -46,8 +46,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 Foreword       . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                 xiii
 Introduction    . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
 1. Scope       . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                   1
-2. Normative references     . . . . . . . . . . . . . . . . . . . . . . .                                  2
-3. Terms, definitions, and symbols    . . . . . . . . . . . . . . . . . . .                                 3
+2. Normative references    . . . . . . . . . . . . . . . . . . . . . . .                                   2
+3. Terms, definitions, and symbols   . . . . . . . . . . . . . . . . . . .                                  3
 4. Conformance       . . . . . . . . . . . . . . . . . . . . . . . . . .                                   8
 5. Environment    . . . . . . . . . . .       . .   .   .   .   .   .   .   .    .   .   .   .   .   .    10
    5.1 Conceptual models       . . . . . .    . .   .   .   .   .   .   .   .    .   .   .   .   .   .    10
@@ -102,126 +102,126 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
           6.5.14 Logical OR operator       . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    99
           6.5.15 Conditional operator      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   100
           6.5.16 Assignment operators . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   101
-          6.5.17 Comma operator . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   104
-     6.6 Constant expressions . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   105
-     6.7 Declarations      . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   107
-          6.7.1   Storage-class specifiers    . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   108
-          6.7.2   Type specifiers . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   109
-          6.7.3   Type qualifiers . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   120
-          6.7.4   Function specifiers     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   124
-          6.7.5   Alignment specifier . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   126
-          6.7.6   Declarators     . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   127
-          6.7.7   Type names . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   135
-          6.7.8   Type definitions      . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
-          6.7.9   Initialization    . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   138
-          6.7.10 Static assertions     . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144
-     6.8 Statements and blocks      . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
-          6.8.1   Labeled statements     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
-          6.8.2   Compound statement       . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
-          6.8.3   Expression and null statements       .   .   .   .   .   .   .   .   .   .   .   .   .   146
-          6.8.4   Selection statements     . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   147
-          6.8.5   Iteration statements . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   149
-          6.8.6   Jump statements      . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   150
-     6.9 External definitions      . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   154
-          6.9.1   Function definitions . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   155
-          6.9.2   External object definitions   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   157
-     6.10 Preprocessing directives     . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   159
-          6.10.1 Conditional inclusion     . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   161
-          6.10.2 Source file inclusion      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   163
-          6.10.3 Macro replacement . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   165
+          6.5.17 Comma operator . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   105
+     6.6 Constant expressions . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   106
+     6.7 Declarations      . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   108
+          6.7.1   Storage-class specifiers    . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   109
+          6.7.2   Type specifiers . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   111
+          6.7.3   Type qualifiers . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   121
+          6.7.4   Function specifiers     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   125
+          6.7.5   Alignment specifier . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   127
+          6.7.6   Declarators     . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   128
+          6.7.7   Type names . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   136
+          6.7.8   Type definitions      . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   137
+          6.7.9   Initialization    . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   139
+          6.7.10 Static assertions     . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
+     6.8 Statements and blocks      . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
+          6.8.1   Labeled statements     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146
+          6.8.2   Compound statement       . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   147
+          6.8.3   Expression and null statements       .   .   .   .   .   .   .   .   .   .   .   .   .   147
+          6.8.4   Selection statements     . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   148
+          6.8.5   Iteration statements . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   150
+          6.8.6   Jump statements      . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   151
+     6.9 External definitions      . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   155
+          6.9.1   Function definitions . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   156
+          6.9.2   External object definitions   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   158
+     6.10 Preprocessing directives     . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   160
+          6.10.1 Conditional inclusion     . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   162
+          6.10.2 Source file inclusion      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   164
+          6.10.3 Macro replacement . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   166
 
 [page iv]
 
-       6.10.4 Line control . . . . . .        .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   172
-       6.10.5 Error directive . . . . .       .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   173
-       6.10.6 Pragma directive . . . .        .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   173
-       6.10.7 Null directive      . . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   174
-       6.10.8 Predefined macro names .         .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   174
-       6.10.9 Pragma operator       . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   176
-  6.11 Future language directions     . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.1 Floating types      . . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.2 Linkages of identifiers . .      .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.3 External names        . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.4 Character escape sequences          .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.5 Storage-class specifiers     .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.6 Function declarators      . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.7 Function definitions . . .       .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.8 Pragma directives       . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-       6.11.9 Predefined macro names .         .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
-7. Library . . . . . . . . . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   179
-   7.1 Introduction     . . . . . . . . . . . . .             .   .   .   .   .    .   .   .   .   .   .   179
-         7.1.1 Definitions of terms . . . . . . .              .   .   .   .   .    .   .   .   .   .   .   179
-         7.1.2 Standard headers . . . . . . . .               .   .   .   .   .    .   .   .   .   .   .   180
-         7.1.3 Reserved identifiers . . . . . . .              .   .   .   .   .    .   .   .   .   .   .   181
-         7.1.4 Use of library functions    . . . . .          .   .   .   .   .    .   .   .   .   .   .   182
-   7.2 Diagnostics <assert.h>          . . . . . . .          .   .   .   .   .    .   .   .   .   .   .   185
-         7.2.1 Program diagnostics       . . . . . .          .   .   .   .   .    .   .   .   .   .   .   185
-   7.3 Complex arithmetic <complex.h>           . . .         .   .   .   .   .    .   .   .   .   .   .   187
-         7.3.1 Introduction . . . . . . . . . .               .   .   .   .   .    .   .   .   .   .   .   187
-         7.3.2 Conventions . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   188
-         7.3.3 Branch cuts . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   188
-         7.3.4 The CX_LIMITED_RANGE pragma                    .   .   .   .   .    .   .   .   .   .   .   188
-         7.3.5 Trigonometric functions . . . . .              .   .   .   .   .    .   .   .   .   .   .   189
-         7.3.6 Hyperbolic functions      . . . . . .          .   .   .   .   .    .   .   .   .   .   .   191
-         7.3.7 Exponential and logarithmic functions              .   .   .   .    .   .   .   .   .   .   193
-         7.3.8 Power and absolute-value functions             .   .   .   .   .    .   .   .   .   .   .   194
-         7.3.9 Manipulation functions      . . . . .          .   .   .   .   .    .   .   .   .   .   .   195
-   7.4 Character handling <ctype.h> . . . . .                 .   .   .   .   .    .   .   .   .   .   .   199
-         7.4.1 Character classification functions    .         .   .   .   .   .    .   .   .   .   .   .   199
-         7.4.2 Character case mapping functions     .         .   .   .   .   .    .   .   .   .   .   .   202
-   7.5 Errors <errno.h>         . . . . . . . . . .           .   .   .   .   .    .   .   .   .   .   .   204
-   7.6 Floating-point environment <fenv.h>        . .         .   .   .   .   .    .   .   .   .   .   .   205
-         7.6.1 The FENV_ACCESS pragma           . . .         .   .   .   .   .    .   .   .   .   .   .   207
-         7.6.2 Floating-point exceptions      . . . .         .   .   .   .   .    .   .   .   .   .   .   208
-         7.6.3 Rounding . . . . . . . . . . .                 .   .   .   .   .    .   .   .   .   .   .   211
-         7.6.4 Environment        . . . . . . . . .           .   .   .   .   .    .   .   .   .   .   .   212
-   7.7 Characteristics of floating types <float.h>             .   .   .   .   .    .   .   .   .   .   .   215
+       6.10.4 Line control . . . . . .        .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   173
+       6.10.5 Error directive . . . . .       .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   174
+       6.10.6 Pragma directive . . . .        .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   174
+       6.10.7 Null directive      . . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   175
+       6.10.8 Predefined macro names .         .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   175
+       6.10.9 Pragma operator       . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   178
+  6.11 Future language directions     . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.1 Floating types      . . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.2 Linkages of identifiers . .      .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.3 External names        . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.4 Character escape sequences          .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.5 Storage-class specifiers     .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.6 Function declarators      . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.7 Function definitions . . .       .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.8 Pragma directives       . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+       6.11.9 Predefined macro names .         .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   179
+7. Library . . . . . . . . . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   180
+   7.1 Introduction     . . . . . . . . . . . . .             .   .   .   .   .    .   .   .   .   .   .   180
+         7.1.1 Definitions of terms . . . . . . .              .   .   .   .   .    .   .   .   .   .   .   180
+         7.1.2 Standard headers . . . . . . . .               .   .   .   .   .    .   .   .   .   .   .   181
+         7.1.3 Reserved identifiers . . . . . . .              .   .   .   .   .    .   .   .   .   .   .   182
+         7.1.4 Use of library functions    . . . . .          .   .   .   .   .    .   .   .   .   .   .   183
+   7.2 Diagnostics <assert.h>          . . . . . . .          .   .   .   .   .    .   .   .   .   .   .   186
+         7.2.1 Program diagnostics       . . . . . .          .   .   .   .   .    .   .   .   .   .   .   186
+   7.3 Complex arithmetic <complex.h>           . . .         .   .   .   .   .    .   .   .   .   .   .   188
+         7.3.1 Introduction . . . . . . . . . .               .   .   .   .   .    .   .   .   .   .   .   188
+         7.3.2 Conventions . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   189
+         7.3.3 Branch cuts . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   189
+         7.3.4 The CX_LIMITED_RANGE pragma                    .   .   .   .   .    .   .   .   .   .   .   189
+         7.3.5 Trigonometric functions . . . . .              .   .   .   .   .    .   .   .   .   .   .   190
+         7.3.6 Hyperbolic functions      . . . . . .          .   .   .   .   .    .   .   .   .   .   .   192
+         7.3.7 Exponential and logarithmic functions              .   .   .   .    .   .   .   .   .   .   194
+         7.3.8 Power and absolute-value functions             .   .   .   .   .    .   .   .   .   .   .   195
+         7.3.9 Manipulation functions      . . . . .          .   .   .   .   .    .   .   .   .   .   .   196
+   7.4 Character handling <ctype.h> . . . . .                 .   .   .   .   .    .   .   .   .   .   .   200
+         7.4.1 Character classification functions    .         .   .   .   .   .    .   .   .   .   .   .   200
+         7.4.2 Character case mapping functions     .         .   .   .   .   .    .   .   .   .   .   .   203
+   7.5 Errors <errno.h>         . . . . . . . . . .           .   .   .   .   .    .   .   .   .   .   .   205
+   7.6 Floating-point environment <fenv.h>        . .         .   .   .   .   .    .   .   .   .   .   .   206
+         7.6.1 The FENV_ACCESS pragma           . . .         .   .   .   .   .    .   .   .   .   .   .   208
+         7.6.2 Floating-point exceptions      . . . .         .   .   .   .   .    .   .   .   .   .   .   209
+         7.6.3 Rounding . . . . . . . . . . .                 .   .   .   .   .    .   .   .   .   .   .   212
+         7.6.4 Environment        . . . . . . . . .           .   .   .   .   .    .   .   .   .   .   .   213
+   7.7 Characteristics of floating types <float.h>             .   .   .   .   .    .   .   .   .   .   .   216
 
 [page v]
 
-     7.8    Format conversion of integer types <inttypes.h> . . . .           .   .   .   .   216
-            7.8.1    Macros for format specifiers      . . . . . . . . . .     .   .   .   .   216
-            7.8.2    Functions for greatest-width integer types   . . . . .   .   .   .   .   217
-     7.9    Alternative spellings <iso646.h> . . . . . . . . . . .            .   .   .   .   220
-     7.10   Sizes of integer types <limits.h>         . . . . . . . . . .     .   .   .   .   221
-     7.11   Localization <locale.h> . . . . . . . . . . . . . .               .   .   .   .   222
-            7.11.1 Locale control . . . . . . . . . . . . . . . .             .   .   .   .   223
-            7.11.2 Numeric formatting convention inquiry . . . . . .          .   .   .   .   224
-     7.12   Mathematics <math.h> . . . . . . . . . . . . . . .                .   .   .   .   230
-            7.12.1 Treatment of error conditions . . . . . . . . . .          .   .   .   .   232
-            7.12.2 The FP_CONTRACT pragma             . . . . . . . . . .     .   .   .   .   234
-            7.12.3 Classification macros       . . . . . . . . . . . . .       .   .   .   .   234
-            7.12.4 Trigonometric functions . . . . . . . . . . . .            .   .   .   .   237
-            7.12.5 Hyperbolic functions       . . . . . . . . . . . . .       .   .   .   .   239
-            7.12.6 Exponential and logarithmic functions        . . . . . .   .   .   .   .   241
-            7.12.7 Power and absolute-value functions         . . . . . . .   .   .   .   .   246
-            7.12.8 Error and gamma functions . . . . . . . . . . .            .   .   .   .   248
-            7.12.9 Nearest integer functions . . . . . . . . . . . .          .   .   .   .   250
-            7.12.10 Remainder functions       . . . . . . . . . . . . .       .   .   .   .   253
-            7.12.11 Manipulation functions       . . . . . . . . . . . .      .   .   .   .   254
-            7.12.12 Maximum, minimum, and positive difference functions           .   .   .   256
-            7.12.13 Floating multiply-add . . . . . . . . . . . . .           .   .   .   .   257
-            7.12.14 Comparison macros . . . . . . . . . . . . . .             .   .   .   .   258
-     7.13   Nonlocal jumps <setjmp.h>            . . . . . . . . . . . .      .   .   .   .   261
-            7.13.1 Save calling environment         . . . . . . . . . . .     .   .   .   .   261
-            7.13.2 Restore calling environment        . . . . . . . . . .     .   .   .   .   262
-     7.14   Signal handling <signal.h> . . . . . . . . . . . . .              .   .   .   .   264
-            7.14.1 Specify signal handling       . . . . . . . . . . . .      .   .   .   .   265
-            7.14.2 Send signal      . . . . . . . . . . . . . . . . .         .   .   .   .   266
-     7.15   Alignment <stdalign.h>            . . . . . . . . . . . . .       .   .   .   .   267
-     7.16   Variable arguments <stdarg.h>           . . . . . . . . . . .     .   .   .   .   268
-            7.16.1 Variable argument list access macros . . . . . . .         .   .   .   .   268
-     7.17   Atomics <stdatomic.h> . . . . . . . . . . . . . .                 .   .   .   .   272
-            7.17.1 Introduction . . . . . . . . . . . . . . . . .             .   .   .   .   272
-            7.17.2 Initialization      . . . . . . . . . . . . . . . .        .   .   .   .   273
-            7.17.3 Order and consistency . . . . . . . . . . . . .            .   .   .   .   274
-            7.17.4 Fences . . . . . . . . . . . . . . . . . . .               .   .   .   .   277
-            7.17.5 Lock-free property       . . . . . . . . . . . . . .       .   .   .   .   278
-            7.17.6 Atomic integer and address types         . . . . . . . .   .   .   .   .   279
-            7.17.7 Operations on atomic types . . . . . . . . . . .           .   .   .   .   281
-            7.17.8 Atomic flag type and operations . . . . . . . . .           .   .   .   .   284
-     7.18   Boolean type and values <stdbool.h>             . . . . . . . .   .   .   .   .   286
-     7.19   Common definitions <stddef.h> . . . . . . . . . . .                .   .   .   .   287
+     7.8    Format conversion of integer types <inttypes.h> . . . .           .   .   .   .   217
+            7.8.1    Macros for format specifiers      . . . . . . . . . .     .   .   .   .   217
+            7.8.2    Functions for greatest-width integer types   . . . . .   .   .   .   .   218
+     7.9    Alternative spellings <iso646.h> . . . . . . . . . . .            .   .   .   .   221
+     7.10   Sizes of integer types <limits.h>         . . . . . . . . . .     .   .   .   .   222
+     7.11   Localization <locale.h> . . . . . . . . . . . . . .               .   .   .   .   223
+            7.11.1 Locale control . . . . . . . . . . . . . . . .             .   .   .   .   224
+            7.11.2 Numeric formatting convention inquiry . . . . . .          .   .   .   .   225
+     7.12   Mathematics <math.h> . . . . . . . . . . . . . . .                .   .   .   .   231
+            7.12.1 Treatment of error conditions . . . . . . . . . .          .   .   .   .   233
+            7.12.2 The FP_CONTRACT pragma             . . . . . . . . . .     .   .   .   .   235
+            7.12.3 Classification macros       . . . . . . . . . . . . .       .   .   .   .   235
+            7.12.4 Trigonometric functions . . . . . . . . . . . .            .   .   .   .   238
+            7.12.5 Hyperbolic functions       . . . . . . . . . . . . .       .   .   .   .   240
+            7.12.6 Exponential and logarithmic functions        . . . . . .   .   .   .   .   242
+            7.12.7 Power and absolute-value functions         . . . . . . .   .   .   .   .   247
+            7.12.8 Error and gamma functions . . . . . . . . . . .            .   .   .   .   249
+            7.12.9 Nearest integer functions . . . . . . . . . . . .          .   .   .   .   251
+            7.12.10 Remainder functions       . . . . . . . . . . . . .       .   .   .   .   254
+            7.12.11 Manipulation functions       . . . . . . . . . . . .      .   .   .   .   255
+            7.12.12 Maximum, minimum, and positive difference functions           .   .   .   257
+            7.12.13 Floating multiply-add . . . . . . . . . . . . .           .   .   .   .   258
+            7.12.14 Comparison macros . . . . . . . . . . . . . .             .   .   .   .   259
+     7.13   Nonlocal jumps <setjmp.h>            . . . . . . . . . . . .      .   .   .   .   262
+            7.13.1 Save calling environment         . . . . . . . . . . .     .   .   .   .   262
+            7.13.2 Restore calling environment        . . . . . . . . . .     .   .   .   .   263
+     7.14   Signal handling <signal.h> . . . . . . . . . . . . .              .   .   .   .   265
+            7.14.1 Specify signal handling       . . . . . . . . . . . .      .   .   .   .   266
+            7.14.2 Send signal      . . . . . . . . . . . . . . . . .         .   .   .   .   267
+     7.15   Alignment <stdalign.h>            . . . . . . . . . . . . .       .   .   .   .   268
+     7.16   Variable arguments <stdarg.h>           . . . . . . . . . . .     .   .   .   .   269
+            7.16.1 Variable argument list access macros . . . . . . .         .   .   .   .   269
+     7.17   Atomics <stdatomic.h> . . . . . . . . . . . . . .                 .   .   .   .   273
+            7.17.1 Introduction . . . . . . . . . . . . . . . . .             .   .   .   .   273
+            7.17.2 Initialization      . . . . . . . . . . . . . . . .        .   .   .   .   274
+            7.17.3 Order and consistency . . . . . . . . . . . . .            .   .   .   .   275
+            7.17.4 Fences . . . . . . . . . . . . . . . . . . .               .   .   .   .   278
+            7.17.5 Lock-free property       . . . . . . . . . . . . . .       .   .   .   .   279
+            7.17.6 Atomic integer types       . . . . . . . . . . . . .       .   .   .   .   280
+            7.17.7 Operations on atomic types . . . . . . . . . . .           .   .   .   .   282
+            7.17.8 Atomic flag type and operations . . . . . . . . .           .   .   .   .   285
+     7.18   Boolean type and values <stdbool.h>             . . . . . . . .   .   .   .   .   287
+     7.19   Common definitions <stddef.h> . . . . . . . . . . .                .   .   .   .   288
      7.20   Integer types <stdint.h> . . . . . . . . . . . . . .              .   .   .   .   289
 
 [page vi]
@@ -238,231 +238,236 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
          7.21.5 File access functions     . . . . . . . . .     .   .    .   .   .   .   .   .   304
          7.21.6 Formatted input/output functions     . . . .    .   .    .   .   .   .   .   .   309
          7.21.7 Character input/output functions . . . . .      .   .    .   .   .   .   .   .   330
-         7.21.8 Direct input/output functions    . . . . . .    .   .    .   .   .   .   .   .   334
-         7.21.9 File positioning functions     . . . . . . .    .   .    .   .   .   .   .   .   335
+         7.21.8 Direct input/output functions    . . . . . .    .   .    .   .   .   .   .   .   335
+         7.21.9 File positioning functions     . . . . . . .    .   .    .   .   .   .   .   .   336
          7.21.10 Error-handling functions . . . . . . . .       .   .    .   .   .   .   .   .   338
   7.22   General utilities <stdlib.h>        . . . . . . . .    .   .    .   .   .   .   .   .   340
          7.22.1 Numeric conversion functions . . . . . .        .   .    .   .   .   .   .   .   341
          7.22.2 Pseudo-random sequence generation functions         .    .   .   .   .   .   .   346
          7.22.3 Memory management functions . . . . .           .   .    .   .   .   .   .   .   347
-         7.22.4 Communication with the environment        . .   .   .    .   .   .   .   .   .   349
-         7.22.5 Searching and sorting utilities . . . . . .     .   .    .   .   .   .   .   .   353
-         7.22.6 Integer arithmetic functions     . . . . . .    .   .    .   .   .   .   .   .   355
-         7.22.7 Multibyte/wide character conversion functions       .    .   .   .   .   .   .   356
-         7.22.8 Multibyte/wide string conversion functions      .   .    .   .   .   .   .   .   358
-  7.23   String handling <string.h> . . . . . . . . .           .   .    .   .   .   .   .   .   360
-         7.23.1 String function conventions . . . . . . .       .   .    .   .   .   .   .   .   360
-         7.23.2 Copying functions       . . . . . . . . . .     .   .    .   .   .   .   .   .   360
-         7.23.3 Concatenation functions . . . . . . . .         .   .    .   .   .   .   .   .   362
-         7.23.4 Comparison functions . . . . . . . . .          .   .    .   .   .   .   .   .   363
-         7.23.5 Search functions      . . . . . . . . . . .     .   .    .   .   .   .   .   .   365
-         7.23.6 Miscellaneous functions . . . . . . . .         .   .    .   .   .   .   .   .   368
-  7.24   Type-generic math <tgmath.h>          . . . . . . .    .   .    .   .   .   .   .   .   370
-  7.25   Threads <threads.h>          . . . . . . . . . . .     .   .    .   .   .   .   .   .   373
-         7.25.1 Introduction . . . . . . . . . . . . .          .   .    .   .   .   .   .   .   373
-         7.25.2 Initialization functions . . . . . . . . .      .   .    .   .   .   .   .   .   375
-         7.25.3 Condition variable functions     . . . . . .    .   .    .   .   .   .   .   .   375
-         7.25.4 Mutex functions       . . . . . . . . . . .     .   .    .   .   .   .   .   .   377
-         7.25.5 Thread functions . . . . . . . . . . .          .   .    .   .   .   .   .   .   380
-         7.25.6 Thread-specific storage functions     . . . .    .   .    .   .   .   .   .   .   382
-         7.25.7 Time functions . . . . . . . . . . . .          .   .    .   .   .   .   .   .   384
-  7.26   Date and time <time.h>         . . . . . . . . . .     .   .    .   .   .   .   .   .   385
-         7.26.1 Components of time        . . . . . . . . .     .   .    .   .   .   .   .   .   385
-         7.26.2 Time manipulation functions      . . . . . .    .   .    .   .   .   .   .   .   386
-         7.26.3 Time conversion functions      . . . . . . .    .   .    .   .   .   .   .   .   388
+         7.22.4 Communication with the environment        . .   .   .    .   .   .   .   .   .   350
+         7.22.5 Searching and sorting utilities . . . . . .     .   .    .   .   .   .   .   .   354
+         7.22.6 Integer arithmetic functions     . . . . . .    .   .    .   .   .   .   .   .   356
+         7.22.7 Multibyte/wide character conversion functions       .    .   .   .   .   .   .   357
+         7.22.8 Multibyte/wide string conversion functions      .   .    .   .   .   .   .   .   359
+  7.23   _Noreturn <stdnoreturn.h>               . . . . . .    .   .    .   .   .   .   .   .   361
+  7.24   String handling <string.h> . . . . . . . . .           .   .    .   .   .   .   .   .   362
+         7.24.1 String function conventions . . . . . . .       .   .    .   .   .   .   .   .   362
+         7.24.2 Copying functions       . . . . . . . . . .     .   .    .   .   .   .   .   .   362
+         7.24.3 Concatenation functions . . . . . . . .         .   .    .   .   .   .   .   .   364
+         7.24.4 Comparison functions . . . . . . . . .          .   .    .   .   .   .   .   .   365
+         7.24.5 Search functions      . . . . . . . . . . .     .   .    .   .   .   .   .   .   367
+         7.24.6 Miscellaneous functions . . . . . . . .         .   .    .   .   .   .   .   .   371
+  7.25   Type-generic math <tgmath.h>          . . . . . . .    .   .    .   .   .   .   .   .   373
+  7.26   Threads <threads.h>          . . . . . . . . . . .     .   .    .   .   .   .   .   .   376
+         7.26.1 Introduction . . . . . . . . . . . . .          .   .    .   .   .   .   .   .   376
+         7.26.2 Initialization functions . . . . . . . . .      .   .    .   .   .   .   .   .   378
+         7.26.3 Condition variable functions     . . . . . .    .   .    .   .   .   .   .   .   378
+         7.26.4 Mutex functions       . . . . . . . . . . .     .   .    .   .   .   .   .   .   380
+         7.26.5 Thread functions . . . . . . . . . . .          .   .    .   .   .   .   .   .   383
+         7.26.6 Thread-specific storage functions     . . . .    .   .    .   .   .   .   .   .   386
+  7.27   Date and time <time.h>         . . . . . . . . . .     .   .    .   .   .   .   .   .   388
+         7.27.1 Components of time        . . . . . . . . .     .   .    .   .   .   .   .   .   388
+         7.27.2 Time manipulation functions      . . . . . .    .   .    .   .   .   .   .   .   389
+         7.27.3 Time conversion functions      . . . . . . .    .   .    .   .   .   .   .   .   392
 
 [page vii]
 
-   7.27 Unicode utilities <uchar.h> . . . . . . . . . . . . . .               . .     .   395
-        7.27.1 Restartable multibyte/wide character conversion functions        .     .   395
-   7.28 Extended multibyte and wide character utilities <wchar.h> . .         . .     .   399
-        7.28.1 Introduction . . . . . . . . . . . . . . . . . .               . .     .   399
-        7.28.2 Formatted wide character input/output functions       . . .    . .     .   400
-        7.28.3 Wide character input/output functions        . . . . . . .     . .     .   418
-        7.28.4 General wide string utilities     . . . . . . . . . . .        . .     .   422
-                 7.28.4.1 Wide string numeric conversion functions     . .    . .     .   423
-                 7.28.4.2 Wide string copying functions . . . . . . .         . .     .   427
-                 7.28.4.3 Wide string concatenation functions      . . . .    . .     .   429
-                 7.28.4.4 Wide string comparison functions      . . . . .     . .     .   430
-                 7.28.4.5 Wide string search functions      . . . . . . .     . .     .   432
-                 7.28.4.6 Miscellaneous functions      . . . . . . . . .      . .     .   436
-        7.28.5 Wide character time conversion functions       . . . . . .     . .     .   436
-        7.28.6 Extended multibyte/wide character conversion utilities .       . .     .   437
-                 7.28.6.1 Single-byte/wide character conversion functions     . .     .   438
-                 7.28.6.2 Conversion state functions     . . . . . . . .      . .     .   438
-                 7.28.6.3 Restartable multibyte/wide character conversion
-                           functions   . . . . . . . . . . . . . . .          . . . 439
-                 7.28.6.4 Restartable multibyte/wide string conversion
-                           functions   . . . . . . . . . . . . . . .          .   .   .   441
-   7.29 Wide character classification and mapping utilities <wctype.h>         .   .   .   444
-        7.29.1 Introduction . . . . . . . . . . . . . . . . . .               .   .   .   444
-        7.29.2 Wide character classification utilities . . . . . . . .         .   .   .   445
-                 7.29.2.1 Wide character classification functions     . . .    .   .   .   445
-                 7.29.2.2 Extensible wide character classification
-                           functions   . . . . . . . . . . . . . . .          . . . 448
-        7.29.3 Wide character case mapping utilities . . . . . . . .          . . . 450
-                 7.29.3.1 Wide character case mapping functions      . . .    . . . 450
-                 7.29.3.2 Extensible wide character case mapping
-                           functions   . . . . . . . . . . . . . . .          .   .   .   450
-   7.30 Future library directions    . . . . . . . . . . . . . . . .          .   .   .   452
-        7.30.1 Complex arithmetic <complex.h> . . . . . . . .                 .   .   .   452
-        7.30.2 Character handling <ctype.h>            . . . . . . . . .      .   .   .   452
-        7.30.3 Errors <errno.h>           . . . . . . . . . . . . . .         .   .   .   452
-        7.30.4 Format conversion of integer types <inttypes.h>            .   .   .   .   452
-        7.30.5 Localization <locale.h>           . . . . . . . . . . .        .   .   .   452
-        7.30.6 Signal handling <signal.h>           . . . . . . . . . .       .   .   .   452
-        7.30.7 Boolean type and values <stdbool.h>            . . . . . .     .   .   .   452
-        7.30.8 Integer types <stdint.h>          . . . . . . . . . . .        .   .   .   452
-        7.30.9 Input/output <stdio.h>          . . . . . . . . . . . .        .   .   .   453
-        7.30.10 General utilities <stdlib.h>        . . . . . . . . . .       .   .   .   453
-        7.30.11 String handling <string.h>          . . . . . . . . . .       .   .   .   453
+   7.28 Unicode utilities <uchar.h> . . . . . . . . . . . . . .               . .     .   398
+        7.28.1 Restartable multibyte/wide character conversion functions        .     .   398
+   7.29 Extended multibyte and wide character utilities <wchar.h> . .         . .     .   402
+        7.29.1 Introduction . . . . . . . . . . . . . . . . . .               . .     .   402
+        7.29.2 Formatted wide character input/output functions       . . .    . .     .   403
+        7.29.3 Wide character input/output functions        . . . . . . .     . .     .   421
+        7.29.4 General wide string utilities     . . . . . . . . . . .        . .     .   426
+                 7.29.4.1 Wide string numeric conversion functions     . .    . .     .   426
+                 7.29.4.2 Wide string copying functions . . . . . . .         . .     .   430
+                 7.29.4.3 Wide string concatenation functions      . . . .    . .     .   432
+                 7.29.4.4 Wide string comparison functions      . . . . .     . .     .   433
+                 7.29.4.5 Wide string search functions      . . . . . . .     . .     .   435
+                 7.29.4.6 Miscellaneous functions      . . . . . . . . .      . .     .   439
+        7.29.5 Wide character time conversion functions       . . . . . .     . .     .   439
+        7.29.6 Extended multibyte/wide character conversion utilities .       . .     .   440
+                 7.29.6.1 Single-byte/wide character conversion functions     . .     .   441
+                 7.29.6.2 Conversion state functions     . . . . . . . .      . .     .   441
+                 7.29.6.3 Restartable multibyte/wide character conversion
+                           functions   . . . . . . . . . . . . . . .          . . . 442
+                 7.29.6.4 Restartable multibyte/wide string conversion
+                           functions   . . . . . . . . . . . . . . .          .   .   .   444
+   7.30 Wide character classification and mapping utilities <wctype.h>         .   .   .   447
+        7.30.1 Introduction . . . . . . . . . . . . . . . . . .               .   .   .   447
+        7.30.2 Wide character classification utilities . . . . . . . .         .   .   .   448
+                 7.30.2.1 Wide character classification functions     . . .    .   .   .   448
+                 7.30.2.2 Extensible wide character classification
+                           functions   . . . . . . . . . . . . . . .          . . . 451
+        7.30.3 Wide character case mapping utilities . . . . . . . .          . . . 453
+                 7.30.3.1 Wide character case mapping functions      . . .    . . . 453
+                 7.30.3.2 Extensible wide character case mapping
+                           functions   . . . . . . . . . . . . . . .          .   .   .   453
+   7.31 Future library directions    . . . . . . . . . . . . . . . .          .   .   .   455
+        7.31.1 Complex arithmetic <complex.h> . . . . . . . .                 .   .   .   455
+        7.31.2 Character handling <ctype.h>            . . . . . . . . .      .   .   .   455
+        7.31.3 Errors <errno.h>           . . . . . . . . . . . . . .         .   .   .   455
+        7.31.4 Floating-point environment <fenv.h> . . . . . . .              .   .   .   455
+        7.31.5 Format conversion of integer types <inttypes.h>            .   .   .   .   455
+        7.31.6 Localization <locale.h>           . . . . . . . . . . .        .   .   .   455
+        7.31.7 Signal handling <signal.h>           . . . . . . . . . .       .   .   .   455
+        7.31.8 Atomics <stdatomic.h>             . . . . . . . . . . .        .   .   .   455
+        7.31.9 Boolean type and values <stdbool.h>            . . . . . .     .   .   .   456
+        7.31.10 Integer types <stdint.h>         . . . . . . . . . . .        .   .   .   456
+        7.31.11 Input/output <stdio.h>         . . . . . . . . . . . .        .   .   .   456
+        7.31.12 General utilities <stdlib.h>        . . . . . . . . . .       .   .   .   456
 
 [page viii]
 
-        7.30.12 Extended multibyte and wide character utilities
-                <wchar.h>        . . . . . . . . . . . . . . . . . . . . 453
-        7.30.13 Wide character classification and mapping utilities
-                <wctype.h> . . . . . . . . . . . . . . . . . . . . 453
-Annex A (informative) Language syntax summary   . .       .   .   .   .    .   .   .   .   .   .   454
-  A.1 Lexical grammar       . . . . . . . . . . . .       .   .   .   .    .   .   .   .   .   .   454
-  A.2 Phrase structure grammar . . . . . . . . .          .   .   .   .    .   .   .   .   .   .   461
-  A.3 Preprocessing directives    . . . . . . . . .       .   .   .   .    .   .   .   .   .   .   469
-Annex B (informative) Library summary     . . . . . . . . . . . . .                    .   .   .   471
-  B.1 Diagnostics <assert.h>          . . . . . . . . . . . . . . .                    .   .   .   471
-  B.2 Complex <complex.h> . . . . . . . . . . . . . . . .                              .   .   .   471
-  B.3 Character handling <ctype.h> . . . . . . . . . . . . .                           .   .   .   473
-  B.4 Errors <errno.h>         . . . . . . . . . . . . . . . . . .                     .   .   .   473
-  B.5 Floating-point environment <fenv.h>          . . . . . . . . . .                 .   .   .   473
-  B.6 Characteristics of floating types <float.h> . . . . . . . .                       .   .   .   474
-  B.7 Format conversion of integer types <inttypes.h> . . . . .                        .   .   .   474
-  B.8 Alternative spellings <iso646.h> . . . . . . . . . . . .                         .   .   .   475
-  B.9 Sizes of integer types <limits.h>          . . . . . . . . . . .                 .   .   .   475
-  B.10 Localization <locale.h> . . . . . . . . . . . . . . .                           .   .   .   475
-  B.11 Mathematics <math.h> . . . . . . . . . . . . . . . .                            .   .   .   475
-  B.12 Nonlocal jumps <setjmp.h>          . . . . . . . . . . . . .                    .   .   .   480
-  B.13 Signal handling <signal.h> . . . . . . . . . . . . . .                          .   .   .   480
-  B.14 Alignment <stdalign.h>           . . . . . . . . . . . . . .                    .   .   .   481
-  B.15 Variable arguments <stdarg.h>         . . . . . . . . . . . .                   .   .   .   481
-  B.16 Atomics <stdatomic.h> . . . . . . . . . . . . . . .                             .   .   .   481
-  B.17 Boolean type and values <stdbool.h>           . . . . . . . . .                 .   .   .   483
-  B.18 Common definitions <stddef.h> . . . . . . . . . . . .                            .   .   .   483
-  B.19 Integer types <stdint.h> . . . . . . . . . . . . . . .                          .   .   .   483
-  B.20 Input/output <stdio.h>         . . . . . . . . . . . . . . .                    .   .   .   484
-  B.21 General utilities <stdlib.h>       . . . . . . . . . . . . .                    .   .   .   487
-  B.22 String handling <string.h> . . . . . . . . . . . . . .                          .   .   .   489
-  B.23 Type-generic math <tgmath.h>          . . . . . . . . . . . .                   .   .   .   491
-  B.24 Threads <threads.h>          . . . . . . . . . . . . . . . .                    .   .   .   491
-  B.25 Date and time <time.h>         . . . . . . . . . . . . . . .                    .   .   .   492
-  B.26 Unicode utilities <uchar.h> . . . . . . . . . . . . . .                         .   .   .   493
-  B.27 Extended multibyte/wide character utilities <wchar.h>     . . .                 .   .   .   493
-  B.28 Wide character classification and mapping utilities <wctype.h>                   .   .   .   498
-Annex C (informative) Sequence points     . . . . . . . . . . . . . . . . . 499
-Annex D (normative) Universal character names for identifiers . . . . . . . 500
-  D.1 Ranges of characters allowed       . . . . . . . . . . . . . . . . . 500
-  D.2 Ranges of characters disallowed initially . . . . . . . . . . . . . 500
-Annex E (informative) Implementation limits        . . . . . . . . . . . . . . 501
+        7.31.13 String handling <string.h>        . . . . . . .            . . . . . . 456
+        7.31.14 Date and time <time.h>        . . . . . . . . .            . . . . . . 456
+        7.31.15 Threads <threads.h> . . . . . . . . . .                    . . . . . . 456
+        7.31.16 Extended multibyte and wide character utilities
+                <wchar.h>        . . . . . . . . . . . . . .               . . . . . . 456
+        7.31.17 Wide character classification and mapping utilities
+                <wctype.h> . . . . . . . . . . . . . .                     . . . . . . 457
+Annex A (informative) Language syntax summary   . .       .   .   .   .    .   .   .   .   .   .   458
+  A.1 Lexical grammar       . . . . . . . . . . . .       .   .   .   .    .   .   .   .   .   .   458
+  A.2 Phrase structure grammar . . . . . . . . .          .   .   .   .    .   .   .   .   .   .   465
+  A.3 Preprocessing directives    . . . . . . . . .       .   .   .   .    .   .   .   .   .   .   473
+Annex B (informative) Library summary     . . . . . . . . . . . . .                    .   .   .   475
+  B.1 Diagnostics <assert.h>          . . . . . . . . . . . . . . .                    .   .   .   475
+  B.2 Complex <complex.h> . . . . . . . . . . . . . . . .                              .   .   .   475
+  B.3 Character handling <ctype.h> . . . . . . . . . . . . .                           .   .   .   477
+  B.4 Errors <errno.h>         . . . . . . . . . . . . . . . . . .                     .   .   .   477
+  B.5 Floating-point environment <fenv.h>          . . . . . . . . . .                 .   .   .   477
+  B.6 Characteristics of floating types <float.h> . . . . . . . .                       .   .   .   478
+  B.7 Format conversion of integer types <inttypes.h> . . . . .                        .   .   .   478
+  B.8 Alternative spellings <iso646.h> . . . . . . . . . . . .                         .   .   .   479
+  B.9 Sizes of integer types <limits.h>          . . . . . . . . . . .                 .   .   .   479
+  B.10 Localization <locale.h> . . . . . . . . . . . . . . .                           .   .   .   479
+  B.11 Mathematics <math.h> . . . . . . . . . . . . . . . .                            .   .   .   479
+  B.12 Nonlocal jumps <setjmp.h>          . . . . . . . . . . . . .                    .   .   .   484
+  B.13 Signal handling <signal.h> . . . . . . . . . . . . . .                          .   .   .   484
+  B.14 Alignment <stdalign.h>           . . . . . . . . . . . . . .                    .   .   .   485
+  B.15 Variable arguments <stdarg.h>         . . . . . . . . . . . .                   .   .   .   485
+  B.16 Atomics <stdatomic.h> . . . . . . . . . . . . . . .                             .   .   .   485
+  B.17 Boolean type and values <stdbool.h>           . . . . . . . . .                 .   .   .   487
+  B.18 Common definitions <stddef.h> . . . . . . . . . . . .                            .   .   .   487
+  B.19 Integer types <stdint.h> . . . . . . . . . . . . . . .                          .   .   .   487
+  B.20 Input/output <stdio.h>         . . . . . . . . . . . . . . .                    .   .   .   488
+  B.21 General utilities <stdlib.h>       . . . . . . . . . . . . .                    .   .   .   491
+  B.22 _Noreturn <stdnoreturn.h>                 . . . . . . . . . . .                 .   .   .   493
+  B.23 String handling <string.h> . . . . . . . . . . . . . .                          .   .   .   493
+  B.24 Type-generic math <tgmath.h>          . . . . . . . . . . . .                   .   .   .   495
+  B.25 Threads <threads.h>          . . . . . . . . . . . . . . . .                    .   .   .   495
+  B.26 Date and time <time.h>         . . . . . . . . . . . . . . .                    .   .   .   496
+  B.27 Unicode utilities <uchar.h> . . . . . . . . . . . . . .                         .   .   .   497
+  B.28 Extended multibyte/wide character utilities <wchar.h>     . . .                 .   .   .   497
+  B.29 Wide character classification and mapping utilities <wctype.h>                   .   .   .   502
+Annex C (informative) Sequence points     . . . . . . . . . . . . . . . . . 503
 
 [page ix]
 
-Annex F (normative) IEC 60559 floating-point arithmetic . . . . . .          . .     .   .   503
-  F.1 Introduction      . . . . . . . . . . . . . . . . . . . .             . .     .   .   503
-  F.2 Types . . . . . . . . . . . . . . . . . . . . . . .                   . .     .   .   503
-  F.3 Operators and functions       . . . . . . . . . . . . . . .           . .     .   .   504
-  F.4 Floating to integer conversion    . . . . . . . . . . . . .           . .     .   .   506
-  F.5 Binary-decimal conversion       . . . . . . . . . . . . . .           . .     .   .   506
-  F.6 The return statement . . . . . . . . . . . . . . . .                  . .     .   .   507
-  F.7 Contracted expressions . . . . . . . . . . . . . . . .                . .     .   .   507
-  F.8 Floating-point environment      . . . . . . . . . . . . . .           . .     .   .   507
-  F.9 Optimization . . . . . . . . . . . . . . . . . . . .                  . .     .   .   510
-  F.10 Mathematics <math.h> . . . . . . . . . . . . . . .                   . .     .   .   513
-        F.10.1 Trigonometric functions . . . . . . . . . . . .              . .     .   .   514
-        F.10.2 Hyperbolic functions     . . . . . . . . . . . . .           . .     .   .   516
-        F.10.3 Exponential and logarithmic functions    . . . . . .         . .     .   .   516
-        F.10.4 Power and absolute value functions     . . . . . . .         . .     .   .   520
-        F.10.5 Error and gamma functions . . . . . . . . . . .              . .     .   .   521
-        F.10.6 Nearest integer functions . . . . . . . . . . . .            . .     .   .   522
-        F.10.7 Remainder functions      . . . . . . . . . . . . .           . .     .   .   524
-        F.10.8 Manipulation functions     . . . . . . . . . . . .           . .     .   .   525
-        F.10.9 Maximum, minimum, and positive difference functions            .     .   .   526
-        F.10.10 Floating multiply-add . . . . . . . . . . . . .             . .     .   .   526
-        F.10.11 Comparison macros . . . . . . . . . . . . . .               . .     .   .   527
-Annex G (normative) IEC 60559-compatible complex arithmetic     .   .   .   .   .   .   .   528
-  G.1 Introduction     . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   528
-  G.2 Types . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   528
-  G.3 Conventions      . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   528
-  G.4 Conversions      . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   529
-       G.4.1 Imaginary types     . . . . . . . . . . . .        .   .   .   .   .   .   .   529
-       G.4.2 Real and imaginary . . . . . . . . . . .           .   .   .   .   .   .   .   529
-       G.4.3 Imaginary and complex       . . . . . . . . .      .   .   .   .   .   .   .   529
-  G.5 Binary operators     . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   529
-       G.5.1 Multiplicative operators    . . . . . . . . .      .   .   .   .   .   .   .   530
-       G.5.2 Additive operators     . . . . . . . . . . .       .   .   .   .   .   .   .   533
-  G.6 Complex arithmetic <complex.h>         . . . . . . .      .   .   .   .   .   .   .   533
-       G.6.1 Trigonometric functions . . . . . . . . .          .   .   .   .   .   .   .   535
-       G.6.2 Hyperbolic functions     . . . . . . . . . .       .   .   .   .   .   .   .   535
-       G.6.3 Exponential and logarithmic functions     . . .    .   .   .   .   .   .   .   539
-       G.6.4 Power and absolute-value functions      . . . .    .   .   .   .   .   .   .   540
-  G.7 Type-generic math <tgmath.h>         . . . . . . . .      .   .   .   .   .   .   .   541
-Annex H (informative) Language independent arithmetic . .   .   .   .   .   .   .   .   .   542
-  H.1 Introduction     . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   542
-  H.2 Types . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   542
-  H.3 Notification      . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   546
+Annex D (normative) Universal character names for identifiers . . . . . . . 504
+  D.1 Ranges of characters allowed       . . . . . . . . . . . . . . . . . 504
+  D.2 Ranges of characters disallowed initially . . . . . . . . . . . . . 504
+Annex E (informative) Implementation limits     . . . . . . . . . . . . . . 505
+Annex F (normative) IEC 60559 floating-point arithmetic . . . . . .         . .     .   .   507
+  F.1 Introduction      . . . . . . . . . . . . . . . . . . . .            . .     .   .   507
+  F.2 Types . . . . . . . . . . . . . . . . . . . . . . .                  . .     .   .   507
+  F.3 Operators and functions       . . . . . . . . . . . . . . .          . .     .   .   508
+  F.4 Floating to integer conversion    . . . . . . . . . . . . .          . .     .   .   510
+  F.5 Binary-decimal conversion       . . . . . . . . . . . . . .          . .     .   .   510
+  F.6 The return statement . . . . . . . . . . . . . . . .                 . .     .   .   511
+  F.7 Contracted expressions . . . . . . . . . . . . . . . .               . .     .   .   511
+  F.8 Floating-point environment      . . . . . . . . . . . . . .          . .     .   .   511
+  F.9 Optimization . . . . . . . . . . . . . . . . . . . .                 . .     .   .   514
+  F.10 Mathematics <math.h> . . . . . . . . . . . . . . .                  . .     .   .   517
+        F.10.1 Trigonometric functions . . . . . . . . . . . .             . .     .   .   518
+        F.10.2 Hyperbolic functions     . . . . . . . . . . . . .          . .     .   .   520
+        F.10.3 Exponential and logarithmic functions    . . . . . .        . .     .   .   520
+        F.10.4 Power and absolute value functions     . . . . . . .        . .     .   .   524
+        F.10.5 Error and gamma functions . . . . . . . . . . .             . .     .   .   525
+        F.10.6 Nearest integer functions . . . . . . . . . . . .           . .     .   .   526
+        F.10.7 Remainder functions      . . . . . . . . . . . . .          . .     .   .   528
+        F.10.8 Manipulation functions     . . . . . . . . . . . .          . .     .   .   529
+        F.10.9 Maximum, minimum, and positive difference functions           .     .   .   530
+        F.10.10 Floating multiply-add . . . . . . . . . . . . .            . .     .   .   530
+        F.10.11 Comparison macros . . . . . . . . . . . . . .              . .     .   .   531
+Annex G (normative) IEC 60559-compatible complex arithmetic    .   .   .   .   .   .   .   532
+  G.1 Introduction     . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   532
+  G.2 Types . . . . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   .   532
+  G.3 Conventions      . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   532
+  G.4 Conversions      . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   533
+       G.4.1 Imaginary types     . . . . . . . . . . . .       .   .   .   .   .   .   .   533
+       G.4.2 Real and imaginary . . . . . . . . . . .          .   .   .   .   .   .   .   533
+       G.4.3 Imaginary and complex       . . . . . . . . .     .   .   .   .   .   .   .   533
+  G.5 Binary operators     . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   533
+       G.5.1 Multiplicative operators    . . . . . . . . .     .   .   .   .   .   .   .   534
+       G.5.2 Additive operators     . . . . . . . . . . .      .   .   .   .   .   .   .   537
+  G.6 Complex arithmetic <complex.h>         . . . . . . .     .   .   .   .   .   .   .   537
+       G.6.1 Trigonometric functions . . . . . . . . .         .   .   .   .   .   .   .   539
+       G.6.2 Hyperbolic functions     . . . . . . . . . .      .   .   .   .   .   .   .   539
+       G.6.3 Exponential and logarithmic functions     . . .   .   .   .   .   .   .   .   543
+       G.6.4 Power and absolute-value functions      . . . .   .   .   .   .   .   .   .   544
+  G.7 Type-generic math <tgmath.h>         . . . . . . . .     .   .   .   .   .   .   .   545
 
 [page x]
 
-Annex I (informative) Common warnings         . . . . . . . . . . . . . . . . 548
-Annex J (informative) Portability issues    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   550
-  J.1 Unspecified behavior . . . .           . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   550
-  J.2 Undefined behavior          . . . .    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   553
-  J.3 Implementation-defined behavior          . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   566
-  J.4 Locale-specific behavior         . .   . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   574
-  J.5 Common extensions          . . . .    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   575
-Annex K (normative) Bounds-checking interfaces . . . . . . . . . .                             .   .   .   578
-  K.1 Background       . . . . . . . . . . . . . . . . . . . . .                               .   .   .   578
-  K.2 Scope . . . . . . . . . . . . . . . . . . . . . . . .                                    .   .   .   579
-  K.3 Library     . . . . . . . . . . . . . . . . . . . . . . .                                .   .   .   579
-       K.3.1 Introduction . . . . . . . . . . . . . . . . . .                                  .   .   .   579
-                K.3.1.1 Standard headers     . . . . . . . . . . . .                           .   .   .   579
-                K.3.1.2 Reserved identifiers     . . . . . . . . . . .                          .   .   .   580
-                K.3.1.3 Use of errno . . . . . . . . . . . . . .                               .   .   .   580
-                K.3.1.4 Runtime-constraint violations     . . . . . . .                        .   .   .   580
-       K.3.2 Errors <errno.h>           . . . . . . . . . . . . . .                            .   .   .   581
-       K.3.3 Common definitions <stddef.h>               . . . . . . . .                        .   .   .   581
-       K.3.4 Integer types <stdint.h>           . . . . . . . . . . .                          .   .   .   581
-       K.3.5 Input/output <stdio.h>          . . . . . . . . . . . .                           .   .   .   582
-                K.3.5.1 Operations on files      . . . . . . . . . . .                          .   .   .   582
-                K.3.5.2 File access functions . . . . . . . . . . .                            .   .   .   584
-                K.3.5.3 Formatted input/output functions . . . . . .                           .   .   .   587
-                K.3.5.4 Character input/output functions . . . . . .                           .   .   .   598
-       K.3.6 General utilities <stdlib.h>          . . . . . . . . . .                         .   .   .   600
-                K.3.6.1 Runtime-constraint handling       . . . . . . .                        .   .   .   600
-                K.3.6.2 Communication with the environment . . . .                             .   .   .   602
-                K.3.6.3 Searching and sorting utilities . . . . . . .                          .   .   .   603
-                K.3.6.4 Multibyte/wide character conversion functions                          .   .   .   606
-                K.3.6.5 Multibyte/wide string conversion functions . .                         .   .   .   607
-       K.3.7 String handling <string.h>            . . . . . . . . . .                         .   .   .   610
-                K.3.7.1 Copying functions       . . . . . . . . . . .                          .   .   .   610
-                K.3.7.2 Concatenation functions       . . . . . . . . .                        .   .   .   613
-                K.3.7.3 Search functions     . . . . . . . . . . . .                           .   .   .   616
-                K.3.7.4 Miscellaneous functions       . . . . . . . . .                        .   .   .   617
-       K.3.8 Date and time <time.h>          . . . . . . . . . . . .                           .   .   .   620
-                K.3.8.1 Components of time . . . . . . . . . . .                               .   .   .   620
-                K.3.8.2 Time conversion functions       . . . . . . . .                        .   .   .   620
-       K.3.9 Extended multibyte and wide character utilities
-                <wchar.h>        . . . . . . . . . . . . . . . . .                             . . . 623
-                K.3.9.1 Formatted wide character input/output functions                        . . . 624
-                K.3.9.2 General wide string utilities . . . . . . . .                          . . . 635
+Annex H (informative) Language independent arithmetic . .                 .   .    .   .   .   .   .   .   546
+  H.1 Introduction     . . . . . . . . . . . . . . . .                    .   .    .   .   .   .   .   .   546
+  H.2 Types . . . . . . . . . . . . . . . . . . .                         .   .    .   .   .   .   .   .   546
+  H.3 Notification      . . . . . . . . . . . . . . . .                    .   .    .   .   .   .   .   .   550
+Annex I (informative) Common warnings         . . . . . . . . . . . . . . . . 552
+Annex J (informative) Portability issues    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   554
+  J.1 Unspecified behavior . . . .           . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   554
+  J.2 Undefined behavior          . . . .    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   557
+  J.3 Implementation-defined behavior          . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   571
+  J.4 Locale-specific behavior         . .   . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   578
+  J.5 Common extensions          . . . .    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   579
+Annex K (normative) Bounds-checking interfaces . . . . . . . . .                           .   .   .   .   582
+  K.1 Background       . . . . . . . . . . . . . . . . . . . .                             .   .   .   .   582
+  K.2 Scope . . . . . . . . . . . . . . . . . . . . . . .                                  .   .   .   .   583
+  K.3 Library     . . . . . . . . . . . . . . . . . . . . . .                              .   .   .   .   583
+       K.3.1 Introduction . . . . . . . . . . . . . . . . .                                .   .   .   .   583
+                K.3.1.1 Standard headers     . . . . . . . . . . .                         .   .   .   .   583
+                K.3.1.2 Reserved identifiers     . . . . . . . . . .                        .   .   .   .   584
+                K.3.1.3 Use of errno . . . . . . . . . . . . .                             .   .   .   .   584
+                K.3.1.4 Runtime-constraint violations     . . . . . .                      .   .   .   .   584
+       K.3.2 Errors <errno.h>           . . . . . . . . . . . . .                          .   .   .   .   585
+       K.3.3 Common definitions <stddef.h>               . . . . . . .                      .   .   .   .   585
+       K.3.4 Integer types <stdint.h>           . . . . . . . . . .                        .   .   .   .   585
+       K.3.5 Input/output <stdio.h>          . . . . . . . . . . .                         .   .   .   .   586
+                K.3.5.1 Operations on files      . . . . . . . . . .                        .   .   .   .   586
+                K.3.5.2 File access functions . . . . . . . . . .                          .   .   .   .   588
+                K.3.5.3 Formatted input/output functions . . . . .                         .   .   .   .   591
+                K.3.5.4 Character input/output functions . . . . .                         .   .   .   .   602
+       K.3.6 General utilities <stdlib.h>          . . . . . . . . .                       .   .   .   .   604
+                K.3.6.1 Runtime-constraint handling       . . . . . .                      .   .   .   .   604
+                K.3.6.2 Communication with the environment . . .                           .   .   .   .   606
+                K.3.6.3 Searching and sorting utilities . . . . . .                        .   .   .   .   607
+                K.3.6.4 Multibyte/wide character conversion functions                          .   .   .   610
+                K.3.6.5 Multibyte/wide string conversion functions .                       .   .   .   .   611
+       K.3.7 String handling <string.h>            . . . . . . . . .                       .   .   .   .   614
+                K.3.7.1 Copying functions       . . . . . . . . . .                        .   .   .   .   614
+                K.3.7.2 Concatenation functions       . . . . . . . .                      .   .   .   .   617
+                K.3.7.3 Search functions     . . . . . . . . . . .                         .   .   .   .   620
+                K.3.7.4 Miscellaneous functions       . . . . . . . .                      .   .   .   .   621
+       K.3.8 Date and time <time.h>          . . . . . . . . . . .                         .   .   .   .   624
+                K.3.8.1 Components of time . . . . . . . . . .                             .   .   .   .   624
+                K.3.8.2 Time conversion functions       . . . . . . .                      .   .   .   .   624
 
 [page xi]
 
-               K.3.9.3 Extended multibyte/wide character conversion
-                       utilities . . . . . . . . . . . . . . . . . . . 643
-Annex L (normative) Analyzability . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   648
-  L.1 Scope . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   648
-  L.2 Definitions . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   648
-  L.3 Requirements . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   649
-Bibliography   . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
-Index    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
+        K.3.9   Extended multibyte and wide character utilities
+                <wchar.h>        . . . . . . . . . . . . . . . . .                            . . . 627
+                K.3.9.1 Formatted wide character input/output functions                       . . . 628
+                K.3.9.2 General wide string utilities . . . . . . . .                         . . . 639
+                K.3.9.3 Extended multibyte/wide character conversion
+                        utilities . . . . . . . . . . . . . . . .                             . . . 647
+Annex L (normative) Analyzability . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   652
+  L.1 Scope . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   652
+  L.2 Definitions . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   652
+  L.3 Requirements . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   653
+Bibliography    . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
+Index    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
 
 [page xii] (Contents)
 
@@ -498,10 +503,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     -- conditional (optional) features (including some that were previously mandatory)
     -- support for multiple threads of execution including an improved memory sequencing
       model, atomic objects, and thread-local storage (<stdatomic.h> and
-      <threads.h>)
+      <threads.h>)
     -- additional floating-point characteristic macros (<float.h>)
     -- querying and specifying alignment of objects (<stdalign.h>, <stdlib.h>)
-    -- Unicode characters and           strings   (<uchar.h>)       (originally   specified    in
+    -- Unicode characters and           strings   (<uchar.h>)       (originally   specified    in
       ISO/IEC TR 19769:2004)
     -- type-generic expressions
 
@@ -521,7 +526,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 7   Major changes in the second edition included:
     -- restricted character set support via digraphs and <iso646.h> (originally specified
       in AMD1)
-    -- wide character library support in <wchar.h> and <wctype.h> (originally
+    -- wide character library support in <wchar.h> and <wctype.h> (originally
       specified in AMD1)
     -- more precise aliasing rules via effective type
     -- restricted pointers
@@ -529,7 +534,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     -- flexible array members
     -- static and type qualifiers in parameter array declarators
     -- complex (and imaginary) support in <complex.h>
-    -- type-generic math macros in <tgmath.h>
+    -- type-generic math macros in <tgmath.h>
     -- the long long int type and library functions
     -- increased minimum translation limits
     -- additional floating-point characteristics in <float.h>
@@ -553,7 +558,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 -- integer constant type rules
 -- integer promotion rules
 -- macros with a variable number of arguments
--- the vscanf family of functions in <stdio.h> and <wchar.h>
+-- the vscanf family of functions in <stdio.h> and <wchar.h>
 -- additional math library functions in <math.h>
 -- treatment of error conditions by math library functions (math_errhandling)
 -- floating-point environment access in <fenv.h>
@@ -583,7 +588,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     -- relaxed restrictions on portable header names
     -- return without expression not permitted in function that returns a value (and vice
       versa)
-8   Annexes D, F, G, K, and L form a normative part of this standard; annexes A, B, C, E, H, *
+8   Annexes D, F, G, K, and L form a normative part of this standard; annexes A, B, C, E, H,
     I, J, the bibliography, and the index are for information only. In accordance with Part 2 of
     the ISO/IEC Directives, this foreword, the introduction, notes, footnotes, and examples
     are also for information only.
@@ -598,7 +603,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 2   Certain features are obsolescent, which means that they may be considered for
     withdrawal in future revisions of this International Standard. They are retained because
     of their widespread use, but their use in new implementations (for implementation
-    features) or new programs (for language [6.11] or library features [7.30]) is discouraged.
+    features) or new programs (for language [6.11] or library features [7.31]) is discouraged.
 3   This International Standard is divided into four major subdivisions:
     -- preliminary elements (clauses 1-4);
     -- the characteristics of environments that translate and execute C programs (clause 5);
@@ -775,8 +780,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 
     3.7.3
 1   wide character
-    bit representation that fits in an object of type wchar_t, capable of representing any
-    character in the current locale
+    value representable by an object of type wchar_t, capable of representing any character
+    in the current locale
     3.8
 1   constraint
     restriction, either syntactic or semantic, by which the exposition of language elements is
@@ -920,13 +925,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     minimum implementation limit.
 6   The two forms of conforming implementation are hosted and freestanding. A conforming
     hosted implementation shall accept any strictly conforming program. A conforming
-    freestanding implementation shall accept any strictly conforming program that does not
-    use complex types and in which the use of the features specified in the library clause
-    (clause 7) is confined to the contents of the standard headers <float.h>,
-    <iso646.h>, <limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>,
-    <stddef.h>, and <stdint.h>. A conforming implementation may have extensions
-    (including additional library functions), provided they do not alter the behavior of any
-    strictly conforming program.4)
+    freestanding implementation shall accept any strictly conforming program in which the *
+    use of the features specified in the library clause (clause 7) is confined to the contents of
+    the standard headers <float.h>, <iso646.h>, <limits.h>, <stdalign.h>,
+    <stdarg.h>,           <stdbool.h>,           <stddef.h>,           <stdint.h>,         and
+    <stdnoreturn.h>. A conforming implementation may have extensions (including
+    additional library functions), provided they do not alter the behavior of any strictly
+    conforming program.4)
 
 
 
@@ -950,7 +955,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     characteristics of floating types <float.h> (7.7), alternative spellings <iso646.h>
     (7.9), sizes of integer types <limits.h> (7.10), alignment <stdalign.h> (7.15),
     variable arguments <stdarg.h> (7.16), boolean type and values <stdbool.h>
-    (7.18), common definitions <stddef.h> (7.19), integer types <stdint.h> (7.20).
+    (7.18), common definitions <stddef.h> (7.19), integer types <stdint.h> (7.20),
+    <stdnoreturn.h> (7.23).
 
 
 
@@ -1170,9 +1176,11 @@ preprocessing directives (6.10), trigraph sequences (6.10), trigraph sequences (page 15] (Contents)
 
+     overflow, or with overflow wrapping silently to produce the correct result, the actual execution need only
+     produce the same result, possibly omitting the promotions.
+
 12   EXAMPLE 3       Similarly, in the fragment
               float f1, f2;
               double d;
@@ -1256,10 +1265,10 @@ preprocessing directives (6.10), trigraph sequences (page 16] (Contents)
 
+     while the original expression would not; nor can the expression be rewritten either as
               a = ((a + 32765) + b);
      or
               a = (a + (b + 32765));
@@ -1281,8 +1290,8 @@ preprocessing directives (6.10), trigraph sequences (6.5), type qualifiers (6.7.3), statements (6.8), the
-     signal function (7.14), files (7.21.3).
+     Forward references: expressions (6.5), type qualifiers (6.7.3), statements (6.8), floating-
+     point environment <fenv.h> (7.6), the signal function (7.14), files (7.21.3).
      5.1.2.4 Multi-threaded executions and data races
 1    Under a hosted implementation, a program can have more than one thread of execution
      (or thread) running concurrently. The execution of each thread proceeds as defined by
@@ -1300,8 +1309,6 @@ preprocessing directives (6.10), trigraph sequences (14) The execution can usually be viewed as an interleaving of all of the threads. However, some kinds of
          atomic operations, for example, allow executions inconsistent with a simple interleaving as described
          below.
@@ -1309,7 +1316,7 @@ preprocessing directives (6.10), trigraph sequences (page 17] (Contents)
 
 5    The library defines a number of atomic operations (7.17) and operations on mutexes
-     (7.25.4) that are specially identified as synchronization operations. These operations play
+     (7.26.4) that are specially identified as synchronization operations. These operations play
      a special role in making assignments in one thread visible to another. A synchronization
      operation on one or more memory locations is either an acquire operation, a release
      operation, both an acquire and release operation, or a consume operation. A
@@ -1334,10 +1341,10 @@ preprocessing directives (6.10), trigraph sequences (6.10), trigraph sequences (16) an evaluation B if:
-     -- A performs a release operation on an atomic object M, and B performs a consume
-       operation on M and reads a value written by any side effect in the release sequence
-       headed by A, or
+     -- A performs a release operation on an atomic object M, and, in another thread, B
+       performs a consume operation on M and reads a value written by any side effect in
+       the release sequence headed by A, or
      -- for some evaluation X, A is dependency-ordered before X and X carries a
        dependency to B.
 16   An evaluation A inter-thread happens before an evaluation B if A synchronizes with B, A
@@ -1483,16 +1490,16 @@ preprocessing directives (6.10), trigraph sequences (6.10), trigraph sequences (<math.h> and <complex.h> that return floating-point results is implementation-
     defined, as is the accuracy of the conversion between floating-point internal
     representations and string representations performed by the library functions in
-    <stdio.h>, <stdlib.h>, and <wchar.h>. The implementation may state that the
+    <stdio.h>, <stdlib.h>, and <wchar.h>. The implementation may state that the
     accuracy is unknown.
 7   All integer values in the <float.h> header, except FLT_ROUNDS, shall be constant
     expressions suitable for use in #if preprocessing directives; all floating values shall be
@@ -1786,14 +1793,14 @@ preprocessing directives (6.10), trigraph sequences (24)
             -1         indeterminable;
-              0        evaluate all operations and constants just to the range and precision of the
-                       type;
-              1        evaluate operations and constants of type float and double to the
-                       range and precision of the double type, evaluate long double
-                       operations and constants to the range and precision of the long double
-                       type;
-              2        evaluate all operations and constants to the range and precision of the
-                       long double type.
+              0       evaluate all operations and constants just to the range and precision of the
+                      type;
+              1       evaluate operations and constants of type float and double to the
+                      range and precision of the double type, evaluate long double
+                      operations and constants to the range and precision of the long double
+                      type;
+              2       evaluate all operations and constants to the range and precision of the
+                      long double type.
      All other negative values for FLT_EVAL_METHOD characterize implementation-defined
      behavior.
 10   The presence or absence of subnormal numbers is characterized by the implementation-
@@ -1983,8 +1990,8 @@ example, if the widest type were to use the minimal-width IEC 60559 double-exten
 precision), then DECIMAL_DIG would be 21.
 
 Forward references:        conditional inclusion (6.10.1), complex arithmetic
-<complex.h> (7.3), extended multibyte and wide character utilities <wchar.h>
-(7.28), floating-point environment <fenv.h> (7.6), general utilities <stdlib.h>
+<complex.h> (7.3), extended multibyte and wide character utilities <wchar.h>
+(7.29), floating-point environment <fenv.h> (7.6), general utilities <stdlib.h>
 (7.22), input/output <stdio.h> (7.21), mathematics <math.h> (7.12).
 
 [page 34] (Contents)
@@ -2551,13 +2558,13 @@ Forward references:        conditional inclusion (6.10.1),
     using the _Alignas keyword.
 2   A fundamental alignment is represented by an alignment less than or equal to the greatest
     alignment supported by the implementation in all contexts, which is equal to
-    alignof(max_align_t).
+    _Alignof (max_align_t).
 3   An extended alignment is represented by an alignment greater than
-    alignof(max_align_t). It is implementation-defined whether any extended
+    _Alignof (max_align_t). It is implementation-defined whether any extended
     alignments are supported and the contexts in which they are supported. A type having an
     extended alignment requirement is an over-aligned type.57)
 4   Alignments are represented as values of the type size_t. Valid alignments include only
-    those values returned by an alignof expression for fundamental types, plus an
+    those values returned by an _Alignof expression for fundamental types, plus an
     additional implementation-defined set of values, which may be empty. Every valid
     alignment value shall be a nonnegative integral power of two.
 
@@ -2571,7 +2578,7 @@ Forward references:        conditional inclusion (6.10.1),
 5   Alignments have an order from weaker to stronger or stricter alignments. Stricter
     alignments have larger alignment values. An address that satisfies an alignment
     requirement also satisfies any weaker valid alignment requirement.
-6   The alignment requirement of a complete type can be queried using an alignof
+6   The alignment requirement of a complete type can be queried using an _Alignof
     expression. The types char, signed char, and unsigned char shall have the
     weakest alignment requirement.
 7   Comparing alignments is meaningful and provides the obvious results:
@@ -2664,8 +2671,8 @@ Forward references:        conditional inclusion (6.10.1),
     exactly, the result is either the nearest higher or nearest lower representable value, chosen
     in an implementation-defined manner. If the value being converted is outside the range of
     values that can be represented, the behavior is undefined. Results of some implicit
-    conversions (6.3.1.8, 6.8.6.4) may be represented in greater precision and range than that
-    required by the new type.
+    conversions may be represented in greater range and precision than that required by the
+    new type (see 6.3.1.8 and 6.8.6.4).
     6.3.1.5 Real floating types
 1   When a value of real floating type is converted to a real floating type, if the value being
     converted can be represented exactly in the new type, it is unchanged. If the value being
@@ -2673,8 +2680,8 @@ Forward references:        conditional inclusion (6.10.1),
     exactly, the result is either the nearest higher or nearest lower representable value, chosen
     in an implementation-defined manner. If the value being converted is outside the range of
     values that can be represented, the behavior is undefined. Results of some implicit
-    conversions (6.3.1.8, 6.8.6.4) may be represented in greater precision and range than that
-    required by the new type.
+    conversions may be represented in greater range and precision than that required by the
+    new type (see 6.3.1.8 and 6.8.6.4).
     6.3.1.6 Complex types
 1   When a value of complex type is converted to another complex type, both the real and
     imaginary parts follow the conversion rules for the corresponding real types.
@@ -2722,7 +2729,7 @@ Forward references:        conditional inclusion (6.10.1),
                   Otherwise, both operands are converted to the unsigned integer type
                   corresponding to the type of the operand with signed integer type.
 2   The values of floating operands and of the results of floating expressions may be
-    represented in greater precision and range than that required by the type; the types are not
+    represented in greater range and precision than that required by the type; the types are not
     changed thereby.63)
 
 
@@ -2744,26 +2751,26 @@ Forward references:        conditional inclusion (6.10.1),
     qualified type, and if it is a structure or union, does not have any member (including,
     recursively, any member or element of all contained aggregates or unions) with a const-
     qualified type.
-2   Except when it is the operand of the sizeof operator, the unary & operator, the ++
-    operator, the -- operator, or the left operand of the . operator or an assignment operator,
-    an lvalue that does not have array type is converted to the value stored in the designated
-    object (and is no longer an lvalue); this is called lvalue conversion. If the lvalue has
-    qualified type, the value has the unqualified version of the type of the lvalue; additionally,
-    if the lvalue has atomic type, the value has the non-atomic version of the type of the
-    lvalue; otherwise, the value has the type of the lvalue. If the lvalue has an incomplete
-    type and does not have array type, the behavior is undefined. If the lvalue designates an
-    object of automatic storage duration that could have been declared with the register
-    storage class (never had its address taken), and that object is uninitialized (not declared
-    with an initializer and no assignment to it has been performed prior to use), the behavior
-    is undefined.
-3   Except when it is the operand of the sizeof operator or the unary & operator, or is a
-    string literal used to initialize an array, an expression that has type ''array of type'' is
-    converted to an expression with type ''pointer to type'' that points to the initial element of
-    the array object and is not an lvalue. If the array object has register storage class, the
-    behavior is undefined.
+2   Except when it is the operand of the sizeof operator, the _Alignof operator, the
+    unary & operator, the ++ operator, the -- operator, or the left operand of the . operator
+    or an assignment operator, an lvalue that does not have array type is converted to the
+    value stored in the designated object (and is no longer an lvalue); this is called lvalue
+    conversion. If the lvalue has qualified type, the value has the unqualified version of the
+    type of the lvalue; additionally, if the lvalue has atomic type, the value has the non-atomic
+    version of the type of the lvalue; otherwise, the value has the type of the lvalue. If the
+    lvalue has an incomplete type and does not have array type, the behavior is undefined. If
+    the lvalue designates an object of automatic storage duration that could have been
+    declared with the register storage class (never had its address taken), and that object
+    is uninitialized (not declared with an initializer and no assignment to it has been
+    performed prior to use), the behavior is undefined.
+3   Except when it is the operand of the sizeof operator, the _Alignof operator, or the
+    unary & operator, or is a string literal used to initialize an array, an expression that has
+    type ''array of type'' is converted to an expression with type ''pointer to type'' that points
+    to the initial element of the array object and is not an lvalue. If the array object has
+    register storage class, the behavior is undefined.
 4   A function designator is an expression that has function type. Except when it is the
-    operand of the sizeof operator65) or the unary & operator, a function designator with
-    type ''function returning type'' is converted to an expression that has type ''pointer to
+    operand of the sizeof operator, the _Alignof operator,65) or the unary & operator, a
+    function designator with type ''function returning type'' is converted to an expression that
 
 
     64) The name ''lvalue'' comes originally from the assignment expression E1 = E2, in which the left
@@ -2772,17 +2779,18 @@ Forward references:        conditional inclusion (6.10.1),
         as the ''value of an expression''.
          An obvious example of an lvalue is an identifier of an object. As a further example, if E is a unary
          expression that is a pointer to an object, *E is an lvalue that designates the object to which E points.
-    65) Because this conversion does not occur, the operand of the sizeof operator remains a function
-        designator and violates the constraint in 6.5.3.4.
+    65) Because this conversion does not occur, the operand of the sizeof or _Alignof operator remains
+        a function designator and violates the constraints in 6.5.3.4.
 
 [page 54] (Contents)
 
-    function returning type''.
+    has type ''pointer to function returning type''.
     Forward references: address and indirection operators (6.5.3.2), assignment operators
     (6.5.16), common definitions <stddef.h> (7.19), initialization (6.7.9), postfix
     increment and decrement operators (6.5.2.4), prefix increment and decrement operators
-    (6.5.3.1), the sizeof operator (6.5.3.4), structure and union members (6.5.2.3).
-    6.3.2.2 void
+    (6.5.3.1), the sizeof and _Alignof operators (6.5.3.4), structure and union members
+    (6.5.2.3).
+    6.3.2.2 void
 1   The (nonexistent) value of a void expression (an expression that has type void) shall not
     be used in any way, and implicit or explicit conversions (except to void) shall not be
     applied to such an expression. If an expression of any other type is evaluated as a void
@@ -2810,8 +2818,6 @@ Forward references:        conditional inclusion (6.10.1),
     type.
 
 
-
-
     66) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.19.
     67) The mapping functions for converting a pointer to an integer or an integer to a pointer are intended to
         be consistent with the addressing structure of the execution environment.
@@ -2906,21 +2912,21 @@ Forward references:        conditional inclusion (6.10.1),
     6.4.1 Keywords
     Syntax
 1            keyword: one of
-                   alignof                         goto                         union
-                   auto                            if                           unsigned
-                   break                           inline                       void
-                   case                            int                          volatile
-                   char                            long                         while
-                   const                           register                     _Alignas
-                   continue                        restrict                     _Atomic
-                   default                         return                       _Bool
-                   do                              short                        _Complex
-                   double                          signed                       _Generic
-                   else                            sizeof                       _Imaginary
-                   enum                            static                       _Noreturn
-                   extern                          struct                       _Static_assert
-                   float                           switch                       _Thread_local
-                   for                             typedef
+                   auto                        * if                             unsigned
+                   break                         inline                         void
+                   case                          int                            volatile
+                   char                          long                           while
+                   const                         register                       _Alignas
+                   continue                      restrict                       _Alignof
+                   default                       return                         _Atomic
+                   do                            short                          _Bool
+                   double                        signed                         _Complex
+                   else                          sizeof                         _Generic
+                   enum                          static                         _Imaginary
+                   extern                        struct                         _Noreturn
+                   float                         switch                         _Static_assert
+                   for                           typedef                        _Thread_local
+                   goto                          union
     Semantics
 2   The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as
     keywords, and shall not be used otherwise. The keyword _Imaginary is reserved for
@@ -3321,7 +3327,7 @@ Forward references:        conditional inclusion (6.10.1),
 11   A wide character constant prefixed by the letter L has type wchar_t, an integer type
      defined in the <stddef.h> header; a wide character constant prefixed by the letter u or
      U has type char16_t or char32_t, respectively, unsigned integer types defined in the
-     <uchar.h> header. The value of a wide character constant containing a single
+     <uchar.h> header. The value of a wide character constant containing a single
      multibyte character that maps to a single member of the extended execution character set
      is the wide character corresponding to that multibyte character, as defined by the
      mbtowc, mbrtoc16, or mbrtoc32 function as appropriate for its type, with an
@@ -3357,7 +3363,7 @@ Forward references:        conditional inclusion (6.10.1),
      0123 and '4'.
 
      Forward references: common definitions <stddef.h> (7.19), the mbtowc function
-     (7.22.7.2), Unicode utilities <uchar.h> (7.27).
+     (7.22.7.2), Unicode utilities <uchar.h> (7.28).
      6.4.5 String literals
      Syntax
 1             string-literal:
@@ -3447,15 +3453,15 @@ Forward references:        conditional inclusion (6.10.1),
              u"abc"
 
     Forward references: common definitions <stddef.h> (7.19), the mbstowcs
-    function (7.22.8.1), Unicode utilities <uchar.h> (7.27).
+    function (7.22.8.1), Unicode utilities <uchar.h> (7.28).
     6.4.6 Punctuators
     Syntax
 1            punctuator: one of
                     [ ] ( ) { } . ->
                     ++ -- & * + - ~ !
-                    / % << >> < > <= >=                         ==    !=    ^    |   &&   ||
+                    / % << >> < > <= >=                             ==       !=    ^    |   &&   ||
                     ? : ; ...
-                    = *= /= %= += -= <<=                        >>=    &=       ^=   |=
+                    = *= /= %= += -= <<=                            >>=       &=       ^=   |=
                     , # ##
                     <: :> <% %> %: %:%:
     Semantics
@@ -3589,7 +3595,7 @@ Forward references:        conditional inclusion (6.10.1),
     subexpressions of an expression, the behavior is undefined if such an unsequenced side
     effect occurs in any of the orderings.84)
 3   The grouping of operators and operands is indicated by the syntax.85) Except as specified
-    later, side effects and value computations of subexpressions are unsequenced.86)         *
+    later, side effects and value computations of subexpressions are unsequenced.86)
 4   Some operators (the unary operator ~, and the binary operators <<, >>, &, ^, and |,
     collectively described as bitwise operators) are required to have operands that have
     integer type. These operators yield values that depend on the internal representations of
@@ -3648,13 +3654,13 @@ Forward references:        conditional inclusion (6.10.1),
     expression evaluation method.89) The FP_CONTRACT pragma in <math.h> provides a
     way to disallow contracted expressions. Otherwise, whether and how expressions are
     contracted is implementation-defined.90)
-    Forward references: the FP_CONTRACT pragma (7.12.2), copying functions (7.23.2).
+    Forward references: the FP_CONTRACT pragma (7.12.2), copying functions (7.24.2).
 
 
     87) Allocated objects have no declared type.
     88) The intent of this list is to specify those circumstances in which an object may or may not be aliased.
-    89) The intermediate operations in the contracted expression are evaluated as if to infinite precision and
-        range, while the final operation is rounded to the format determined by the expression evaluation
+    89) The intermediate operations in the contracted expression are evaluated as if to infinite range and
+        precision, while the final operation is rounded to the format determined by the expression evaluation
         method. A contracted expression might also omit the raising of floating-point exceptions.
     90) This license is specifically intended to allow implementations to exploit fast machine instructions that
         combine multiple C operators. As contractions potentially undermine predictability, and can even
@@ -3682,6 +3688,8 @@ Forward references:        conditional inclusion (6.10.1),
     those of the unparenthesized expression. It is an lvalue, a function designator, or a void
     expression if the unparenthesized expression is, respectively, an lvalue, a function
     designator, or a void expression.
+6   A generic selection is a primary expression. Its type and value depend on the selected
+    generic association, as detailed in the following subclause.
     Forward references: declarations (6.7).
     6.5.1.1 Generic selection
     Syntax
@@ -3693,14 +3701,16 @@ Forward references:        conditional inclusion (6.10.1),
              generic-association:
                     type-name : assignment-expression
                     default : assignment-expression
-    Constraints
-2   A generic selection shall have no more than one default generic association. The type
-    name in a generic association shall specify a complete object type other than a variably
+
+
 
     91) Thus, an undeclared identifier is a violation of the syntax.
 
 [page 78] (Contents)
 
+    Constraints
+2   A generic selection shall have no more than one default generic association. The type
+    name in a generic association shall specify a complete object type other than a variably
     modified type. No two generic associations in the same generic selection shall specify
     compatible types. The controlling expression of a generic selection shall have type
     compatible with at most one of the types named in its generic association list. If a
@@ -3735,12 +3745,12 @@ Forward references:        conditional inclusion (6.10.1),
                     postfix-expression --
                     ( type-name ) { initializer-list }
                     ( type-name ) { initializer-list , }
-             argument-expression-list:
-                   assignment-expression
-                   argument-expression-list , assignment-expression
 
 [page 79] (Contents)
 
+             argument-expression-list:
+                   assignment-expression
+                   argument-expression-list , assignment-expression
     6.5.2.1 Array subscripting
     Constraints
 1   One of the expressions shall have type ''pointer to complete object type'', the other
@@ -3771,18 +3781,15 @@ Forward references:        conditional inclusion (6.10.1),
 
     Forward references: additive operators (6.5.6), address and indirection operators
     (6.5.3.2), array declarators (6.7.6.2).
+
+[page 80] (Contents)
+
     6.5.2.2 Function calls
     Constraints
 1   The expression that denotes the called function92) shall have type pointer to function
     returning void or returning a complete object type other than an array type.
 2   If the expression that denotes the called function has a type that includes a prototype, the
     number of arguments shall agree with the number of parameters. Each argument shall
-
-
-    92) Most often, this is the result of converting an identifier that is a function designator.
-
-[page 80] (Contents)
-
     have a type such that its value may be assigned to an object with the unqualified version
     of the type of its corresponding parameter.
     Semantics
@@ -3794,7 +3801,7 @@ Forward references:        conditional inclusion (6.10.1),
     corresponding argument.93)
 5   If the expression that denotes the called function has type pointer to function returning an
     object type, the function call expression has the same type as that object type, and has the
-    value determined as specified in 6.8.6.4. Otherwise, the function call has type void.         *
+    value determined as specified in 6.8.6.4. Otherwise, the function call has type void.
 6   If the expression that denotes the called function has a type that does not include a
     prototype, the integer promotions are performed on each argument, and arguments that
     have type float are promoted to double. These are called the default argument
@@ -3807,17 +3814,10 @@ Forward references:        conditional inclusion (6.10.1),
     promotion, the behavior is undefined, except for the following cases:
     -- one promoted type is a signed integer type, the other promoted type is the
       corresponding unsigned integer type, and the value is representable in both types;
-    -- both types are pointers to qualified or unqualified versions of a character type or
-      void.
-7   If the expression that denotes the called function has a type that does include a prototype,
-    the arguments are implicitly converted, as if by assignment, to the types of the
-    corresponding parameters, taking the type of each parameter to be the unqualified version
-    of its declared type. The ellipsis notation in a function prototype declarator causes
-    argument type conversion to stop after the last declared parameter. The default argument
-    promotions are performed on trailing arguments.
 
 
 
+    92) Most often, this is the result of converting an identifier that is a function designator.
     93) A function may change the values of its parameters, but these changes cannot affect the values of the
         arguments. On the other hand, it is possible to pass a pointer to an object, and the function may
         change the value of the object pointed to. A parameter declared to have array or function type is
@@ -3825,6 +3825,14 @@ Forward references:        conditional inclusion (6.10.1),
 
 [page 81] (Contents)
 
+     -- both types are pointers to qualified or unqualified versions of a character type or
+       void.
+7    If the expression that denotes the called function has a type that does include a prototype,
+     the arguments are implicitly converted, as if by assignment, to the types of the
+     corresponding parameters, taking the type of each parameter to be the unqualified version
+     of its declared type. The ellipsis notation in a function prototype declarator causes
+     argument type conversion to stop after the last declared parameter. The default argument
+     promotions are performed on trailing arguments.
 8    No other conversions are performed implicitly; in particular, the number and types of
      arguments are not compared with those of the parameters in a function definition that
      does not include a function prototype declarator.
@@ -3852,20 +3860,17 @@ Forward references:        conditional inclusion (6.10.1),
 2    The first operand of the -> operator shall have type ''pointer to atomic, qualified, or
      unqualified structure'' or ''pointer to atomic, qualified, or unqualified union'', and the
      second operand shall name a member of the type pointed to.
-     Semantics
-3    A postfix expression followed by the . operator and an identifier designates a member of
-     a structure or union object. The value is that of the named member,95) and is an lvalue if
-     the first expression is an lvalue. If the first expression has qualified type, the result has
-     the so-qualified version of the type of the designated member.
+
 
      94) In other words, function executions do not ''interleave'' with each other.
-     95) If the member used to read the contents of a union object is not the same as the member last used to
-         store a value in the object, the appropriate part of the object representation of the value is reinterpreted
-         as an object representation in the new type as described in 6.2.6 (a process sometimes called ''type
-         punning''). This might be a trap representation.
 
 [page 82] (Contents)
 
+    Semantics
+3   A postfix expression followed by the . operator and an identifier designates a member of
+    a structure or union object. The value is that of the named member,95) and is an lvalue if
+    the first expression is an lvalue. If the first expression has qualified type, the result has
+    the so-qualified version of the type of the designated member.
 4   A postfix expression followed by the -> operator and an identifier designates a member
     of a structure or union object. The value is that of the named member of the object to
     which the first expression points, and is an lvalue.96) If the first expression is a pointer to
@@ -3889,16 +3894,14 @@ Forward references:        conditional inclusion (6.10.1),
              const struct s cs;
              volatile struct s vs;
     the various members have the types:
-             s.i          int
-             s.ci         const int
-             cs.i         const int
-             cs.ci        const int
-             vs.i         volatile int
-             vs.ci        volatile const int
 
 
 
 
+    95) If the member used to read the contents of a union object is not the same as the member last used to
+        store a value in the object, the appropriate part of the object representation of the value is reinterpreted
+        as an object representation in the new type as described in 6.2.6 (a process sometimes called ''type
+        punning''). This might be a trap representation.
     96) If &E is a valid pointer expression (where & is the ''address-of '' operator, which generates a pointer to
         its operand), the expression (&E)->MOS is the same as E.MOS.
     97) For example, a data race would occur if access to the entire structure or union in one thread conflicts
@@ -3907,6 +3910,13 @@ Forward references:        conditional inclusion (6.10.1),
 
 [page 83] (Contents)
 
+             s.i        int
+             s.ci       const int
+             cs.i       const int
+             cs.ci      const int
+             vs.i       volatile int
+             vs.ci      volatile const int
+
 9   EXAMPLE 3       The following is a valid fragment:
              union {
                      struct {
@@ -3977,20 +3987,21 @@ Forward references:        conditional inclusion (6.10.1),
     Semantics
 3   A postfix expression that consists of a parenthesized type name followed by a brace-
     enclosed list of initializers is a compound literal. It provides an unnamed object whose
-    value is given by the initializer list.99)
-
 
-    98) Where a pointer to an atomic object can be formed, this is equivalent to the following code sequence
-        where T is the type of E:
-                 T tmp;
-                 T result = E;
-                 do {
-                        tmp = result + 1;
-                 } while (!atomic_compare_exchange_strong(&E, &result, tmp));
-         with result being the result of the operation.
+    98) Where a pointer to an atomic object can be formed and E has integer type, E++ is equivalent to the
+        following code sequence where T is the type of E:
+                  T *addr = &E;
+                  T old = *addr;
+                  T new;
+                  do {
+                         new = old + 1;
+                  } while (!atomic_compare_exchange_strong(addr, &old, new));
+         with old being the result of the operation.
+         Special care must be taken if E has floating type; see 6.5.16.2.
 
 [page 85] (Contents)
 
+     value is given by the initializer list.99)
 4    If the type name specifies an array of unknown size, the size is determined by the
      initializer list as specified in 6.7.9, and the type of the compound literal is that of the
      completed array type. Otherwise (when the type name specifies an object type), the type
@@ -4025,7 +4036,6 @@ Forward references:        conditional inclusion (6.10.1),
      created using compound literals can be passed to functions without depending on member order:
               drawline((struct point){.x=1, .y=1},
                     (struct point){.x=3, .y=4});
-     Or, if drawline instead expected pointers to struct point:
 
 
 
@@ -4037,6 +4047,7 @@ Forward references:        conditional inclusion (6.10.1),
 
 [page 86] (Contents)
 
+     Or, if drawline instead expected pointers to struct point:
               drawline(&(struct point){.x=1, .y=1},
                     &(struct point){.x=3, .y=4});
 
@@ -4092,7 +4103,7 @@ Forward references:        conditional inclusion (6.10.1),
                     unary-operator cast-expression
                     sizeof unary-expression
                     sizeof ( type-name )
-                    alignof ( type-name )
+                    _Alignof ( type-name )
              unary-operator: one of
                     & * + - ~             !
     6.5.3.1 Prefix increment and decrement operators
@@ -4162,21 +4173,21 @@ Forward references:        conditional inclusion (6.10.1),
 
 [page 89] (Contents)
 
-    6.5.3.4 The sizeof and alignof operators
+    6.5.3.4 The sizeof and _Alignof operators
     Constraints
 1   The sizeof operator shall not be applied to an expression that has function type or an
     incomplete type, to the parenthesized name of such a type, or to an expression that
-    designates a bit-field member. The alignof operator shall not be applied to a function
-    type or an incomplete type.
+    designates a bit-field member. The _Alignof operator shall not be applied to a
+    function type or an incomplete type.
     Semantics
 2   The sizeof operator yields the size (in bytes) of its operand, which may be an
     expression or the parenthesized name of a type. The size is determined from the type of
     the operand. The result is an integer. If the type of the operand is a variable length array
     type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an
     integer constant.
-3   The alignof operator yields the alignment requirement of its operand type. The result
-    is an integer constant. When applied to an array type, the result is the alignment
-    requirement of the element type.
+3   The _Alignof operator yields the alignment requirement of its operand type. The
+    operand is not evaluated and the result is an integer constant. When applied to an array
+    type, the result is the alignment requirement of the element type.
 4   When sizeof is applied to an operand that has type char, unsigned char, or
     signed char, (or a qualified version thereof) the result is 1. When applied to an
     operand that has array type, the result is the total number of bytes in the array.103) When
@@ -4236,7 +4247,7 @@ Forward references:        conditional inclusion (6.10.1),
 5   Preceding an expression by a parenthesized type name converts the value of the
     expression to the named type. This construction is called a cast.104) A cast that specifies
     no conversion has no effect on the type or value of an expression.
-6   If the value of the expression is represented with greater precision or range than required
+6   If the value of the expression is represented with greater range or precision than required
     by the type named by the cast (6.3.1.8), then the cast specifies a conversion even if the
     type of the expression is the same as the named type and removes any extra range and
     precision.
@@ -4391,7 +4402,7 @@ Forward references:        conditional inclusion (6.10.1),
                      relational-expression   >=   shift-expression
     Constraints
 2   One of the following shall hold:
-    -- both operands have real type; or                                                            *
+    -- both operands have real type; or
     -- both operands are pointers to qualified or unqualified versions of compatible object
       types.
     Semantics
@@ -4515,9 +4526,9 @@ Forward references:        conditional inclusion (6.10.1),
 
     6.5.13 Logical AND operator
     Syntax
-1            logical-AND-expression:
-                     inclusive-OR-expression
-                     logical-AND-expression && inclusive-OR-expression
+1             logical-AND-expression:
+                      inclusive-OR-expression
+                      logical-AND-expression && inclusive-OR-expression
     Constraints
 2   Each of the operands shall have scalar type.
     Semantics
@@ -4529,9 +4540,9 @@ Forward references:        conditional inclusion (6.10.1),
     operand is not evaluated.
     6.5.14 Logical OR operator
     Syntax
-1            logical-OR-expression:
-                     logical-AND-expression
-                     logical-OR-expression || logical-AND-expression
+1             logical-OR-expression:
+                      logical-AND-expression
+                      logical-OR-expression || logical-AND-expression
     Constraints
 2   Each of the operands shall have scalar type.
     Semantics
@@ -4564,7 +4575,7 @@ Forward references:        conditional inclusion (6.10.1),
     evaluation of the second or third operand (whichever is evaluated). The second operand
     is evaluated only if the first compares unequal to 0; the third operand is evaluated only if
     the first compares equal to 0; the result is the value of the second or third operand
-    (whichever is evaluated), converted to the type described below.110)                        *
+    (whichever is evaluated), converted to the type described below.110)
 5   If both the second and third operands have arithmetic type, the result type that would be
     determined by the usual arithmetic conversions, were they applied to those two operands,
     is the type of the result. If both the operands have structure or union type, the result has
@@ -4713,9 +4724,48 @@ Forward references:        conditional inclusion (6.10.1),
 
 [page 103] (Contents)
 
-    assignment is a single evaluation. If E1 has an atomic type, compound assignment is a
-    read-modify-write operation with memory_order_seq_cst memory order
-    semantics.113)
+assignment is a single evaluation. If E1 has an atomic type, compound assignment is a
+read-modify-write operation with memory_order_seq_cst memory order
+semantics.113)
+
+
+
+
+113) Where a pointer to an atomic object can be formed and E1 and E2 have integer type, this is equivalent
+     to the following code sequence where T1 is the type of E1 and T2 is the type of E2:
+               T1 *addr = &E1;
+               T2 val = (E2);
+               T1 old = *addr;
+               T1 new;
+               do {
+                     new = old op val;
+               } while (!atomic_compare_exchange_strong(addr, &old, new));
+      with new being the result of the operation.
+      If E1 or E2 has floating type, then exceptional conditions or floating-point exceptions encountered
+      during discarded evaluations of new should also be discarded in order to satisfy the equivalence of E1
+      op = E2 and E1 = E1 op (E2). For example, if annex F is in effect, the floating types involved have
+      IEC 60559 formats, and FLT_EVAL_METHOD is 0, the equivalent code would be:
+               #include <fenv.h>
+               #pragma STDC FENV_ACCESS ON
+               /* ... */
+                       fenv_t fenv;
+                       T1 *addr = &E1;
+                       T2 val = E2;
+                       T1 old = *addr;
+                       T1 new;
+                       feholdexcept(&fenv);
+                       for (;;) {
+                             new = old op val;
+                             if (atomic_compare_exchange_strong(addr, &old, new))
+                                         break;
+                             feclearexcept(FE_ALL_EXCEPT);
+                       }
+                       feupdateenv(&fenv);
+      If FLT_EVAL_METHOD is not 0, then T2 must be a type with the range and precision to which E2 is
+      evaluated in order to satisfy the equivalence.
+
+[page 104] (Contents)
+
     6.5.17 Comma operator
     Syntax
 1            expression:
@@ -4724,12 +4774,12 @@ Forward references:        conditional inclusion (6.10.1),
     Semantics
 2   The left operand of a comma operator is evaluated as a void expression; there is a
     sequence point between its evaluation and that of the right operand. Then the right
-    operand is evaluated; the result has its type and value.114)                        *
+    operand is evaluated; the result has its type and value.114)
 3   EXAMPLE As indicated by the syntax, the comma operator (as described in this subclause) cannot
     appear in contexts where a comma is used to separate items in a list (such as arguments to functions or lists
     of initializers). On the other hand, it can be used within a parenthesized expression or within the second
     expression of a conditional operator in such contexts. In the function call
-             f(a, (t=3, t+2), c)
+              f(a, (t=3, t+2), c)
     the function has three arguments, the second of which has the value 5.
 
     Forward references: initialization (6.7.9).
@@ -4737,17 +4787,9 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-    113) Where a pointer to an atomic object can be formed, this is equivalent to the following code sequence
-         where T is the type of E1:
-                  T tmp = E1;
-                  T result;
-                  do {
-                        result = tmp op (E2);
-                  } while (!atomic_compare_exchange_strong(&E1, &tmp, result));
-          with result being the result of the operation.
     114) A comma operator does not yield an lvalue.
 
-[page 104] (Contents)
+[page 105] (Contents)
 
     6.6 Constant expressions
     Syntax
@@ -4764,22 +4806,22 @@ Forward references:        conditional inclusion (6.10.1),
     values for its type.
     Semantics
 5   An expression that evaluates to a constant is required in several contexts. If a floating
-    expression is evaluated in the translation environment, the arithmetic precision and range
+    expression is evaluated in the translation environment, the arithmetic range and precision
     shall be at least as great as if the expression were being evaluated in the execution
     environment.116)
 6   An integer constant expression117) shall have integer type and shall only have operands
     that are integer constants, enumeration constants, character constants, sizeof
-    expressions whose results are integer constants, and floating constants that are the
-    immediate operands of casts. Cast operators in an integer constant expression shall only
-    convert arithmetic types to integer types, except as part of an operand to the sizeof
-    operator.
+    expressions whose results are integer constants, _Alignof expressions, and floating
+    constants that are the immediate operands of casts. Cast operators in an integer constant
+    expression shall only convert arithmetic types to integer types, except as part of an
+    operand to the sizeof or _Alignof operator.
 7   More latitude is permitted for constant expressions in initializers. Such a constant
     expression shall be, or evaluate to, one of the following:
     -- an arithmetic constant expression,
 
 
 
-    115) The operand of a sizeof operator is usually not evaluated (6.5.3.4).
+    115) The operand of a sizeof or _Alignof operator is usually not evaluated (6.5.3.4).
     116) The use of evaluation formats as characterized by FLT_EVAL_METHOD also applies to evaluation in
          the translation environment.
     117) An integer constant expression is required in a number of contexts such as the size of a bit-field
@@ -4787,7 +4829,7 @@ Forward references:        conditional inclusion (6.10.1),
          array. Further constraints that apply to the integer constant expressions used in conditional-inclusion
          preprocessing directives are discussed in 6.10.1.
 
-[page 105] (Contents)
+[page 106] (Contents)
 
      -- a null pointer constant,
      -- an address constant, or
@@ -4795,9 +4837,10 @@ Forward references:        conditional inclusion (6.10.1),
        expression.
 8    An arithmetic constant expression shall have arithmetic type and shall only have
      operands that are integer constants, floating constants, enumeration constants, character
-     constants, and sizeof expressions. Cast operators in an arithmetic constant expression
-     shall only convert arithmetic types to arithmetic types, except as part of an operand to a
-     sizeof operator whose result is an integer constant.
+     constants, sizeof expressions whose results are integer constants, and _Alignof
+     expressions. Cast operators in an arithmetic constant expression shall only convert
+     arithmetic types to arithmetic types, except as part of an operand to a sizeof or
+     _Alignof operator.
 9    An address constant is a null pointer, a pointer to an lvalue designating an object of static
      storage duration, or a pointer to a function designator; it shall be created explicitly using
      the unary & operator or an integer constant cast to pointer type, or implicitly by the use of
@@ -4814,10 +4857,10 @@ Forward references:        conditional inclusion (6.10.1),
 
 
      118) Thus, in the following initialization,
-                    static int i = 2 || 1 / 0;
-           the expression is a valid integer constant expression with value one.
+                     static int i = 2 || 1 / 0;
+            the expression is a valid integer constant expression with value one.
 
-[page 106] (Contents)
+[page 107] (Contents)
 
     6.7 Declarations
     Syntax
@@ -4842,8 +4885,10 @@ Forward references:        conditional inclusion (6.10.1),
     the members of an enumeration.
 3   If an identifier has no linkage, there shall be no more than one declaration of the identifier
     (in a declarator or type specifier) with the same scope and in the same name space, except
-    that a typedef name can be redefined to denote the same type as it currently does and tags
-    may be redeclared as specified in 6.7.2.3.
+    that:
+    -- a typedef name may be redefined to denote the same type as it currently does,
+      provided that type is not a variably modified type;
+    -- tags may be redeclared as specified in 6.7.2.3.
 4   All declarations in the same scope that refer to the same object or function shall specify
     compatible types.
     Semantics
@@ -4852,14 +4897,10 @@ Forward references:        conditional inclusion (6.10.1),
     -- for an object, causes storage to be reserved for that object;
     -- for a function, includes the function body;119)
 
+[page 108] (Contents)
 
-
-    119) Function definitions have a different syntax, described in 6.9.1.
-
-[page 107] (Contents)
-
-    -- for an enumeration constant or typedef name, is the (only) declaration of the
-      identifier.
+    -- for an enumeration constant, is the (only) declaration of the identifier;
+    -- for a typedef name, is the first (or only) declaration of the identifier.
 6   The declaration specifiers consist of a sequence of specifiers that indicate the linkage,
     storage duration, and part of the type of the entities that the declarators denote. The init-
     declarator-list is a comma-separated sequence of declarators, each of which may have
@@ -4887,27 +4928,43 @@ Forward references:        conditional inclusion (6.10.1),
     _Thread_local, they shall also include either static or extern. If
     _Thread_local appears in any declaration of an object, it shall be present in every
     declaration of that object.
-    Semantics
-4   The typedef specifier is called a ''storage-class specifier'' for syntactic convenience
-    only; it is discussed in 6.7.8. The meanings of the various linkages and storage durations
-    were discussed in 6.2.2 and 6.2.4.
+4   _Thread_local shall not appear in the declaration specifiers of a function declaration.
+
 
 
 
+    119) Function definitions have a different syntax, described in 6.9.1.
     120) See ''future language directions'' (6.11.5).
 
-[page 108] (Contents)
+[page 109] (Contents)
 
-5   A declaration of an identifier for an object with storage-class specifier register
+    Semantics
+5   The typedef specifier is called a ''storage-class specifier'' for syntactic convenience
+    only; it is discussed in 6.7.8. The meanings of the various linkages and storage durations
+    were discussed in 6.2.2 and 6.2.4.
+6   A declaration of an identifier for an object with storage-class specifier register
     suggests that access to the object be as fast as possible. The extent to which such
     suggestions are effective is implementation-defined.121)
-6   The declaration of an identifier for a function that has block scope shall have no explicit
+7   The declaration of an identifier for a function that has block scope shall have no explicit
     storage-class specifier other than extern.
-7   If an aggregate or union object is declared with a storage-class specifier other than
+8   If an aggregate or union object is declared with a storage-class specifier other than
     typedef, the properties resulting from the storage-class specifier, except with respect to
     linkage, also apply to the members of the object, and so on recursively for any aggregate
     or union member objects.
     Forward references: type definitions (6.7.8).
+
+
+
+
+    121) The implementation may treat any register declaration simply as an auto declaration. However,
+         whether or not addressable storage is actually used, the address of any part of an object declared with
+         storage-class specifier register cannot be computed, either explicitly (by use of the unary &
+         operator as discussed in 6.5.3.2) or implicitly (by converting an array name to a pointer as discussed in
+         6.3.2.1). Thus, the only operators that can be applied to an array declared with storage-class specifier
+         register are sizeof and _Alignof.
+
+[page 110] (Contents)
+
     6.7.2 Type specifiers
     Syntax
 1            type-specifier:
@@ -4929,17 +4986,6 @@ Forward references:        conditional inclusion (6.10.1),
     Constraints
 2   At least one type specifier shall be given in the declaration specifiers in each declaration,
     and in the specifier-qualifier list in each struct declaration and type name. Each list of
-
-
-    121) The implementation may treat any register declaration simply as an auto declaration. However,
-         whether or not addressable storage is actually used, the address of any part of an object declared with
-         storage-class specifier register cannot be computed, either explicitly (by use of the unary &
-         operator as discussed in 6.5.3.2) or implicitly (by converting an array name to a pointer as discussed in
-         6.3.2.1). Thus, the only operator that can be applied to an array declared with storage-class specifier
-         register is sizeof.
-
-[page 109] (Contents)
-
     type specifiers shall be one of the following multisets (delimited by commas, when there
     is more than one multiset per item); the type specifiers may occur in any order, possibly
     intermixed with the other declaration specifiers.
@@ -4953,6 +4999,9 @@ Forward references:        conditional inclusion (6.10.1),
     -- unsigned, or unsigned int
     -- long, signed long, long int, or signed long int
     -- unsigned long, or unsigned long int
+
+[page 111] (Contents)
+
     -- long long, signed long long, long long int, or
       signed long long int
     -- unsigned long long, or unsigned long long int
@@ -4969,9 +5018,6 @@ Forward references:        conditional inclusion (6.10.1),
     -- typedef name
 3   The type specifier _Complex shall not be used if the implementation does not support
     complex types (see 6.10.8.3).
-
-[page 110] (Contents)
-
     Semantics
 4   Specifiers for structures, unions, enumerations, and atomic types are discussed in 6.7.2.1
     through 6.7.2.4. Declarations of typedef names are discussed in 6.7.8. The
@@ -4986,43 +5032,49 @@ Forward references:        conditional inclusion (6.10.1),
 1            struct-or-union-specifier:
                      struct-or-union identifieropt { struct-declaration-list }
                      struct-or-union identifier
-             struct-or-union:
-                     struct
-                     union
-             struct-declaration-list:
-                     struct-declaration
-                     struct-declaration-list struct-declaration
-             struct-declaration:
-                     specifier-qualifier-list struct-declarator-listopt ;
-                     static_assert-declaration
-             specifier-qualifier-list:
-                    type-specifier specifier-qualifier-listopt
-                    type-qualifier specifier-qualifier-listopt
-             struct-declarator-list:
-                     struct-declarator
-                     struct-declarator-list , struct-declarator
-             struct-declarator:
-                     declarator
-                     declaratoropt : constant-expression
+
+[page 112] (Contents)
+
+            struct-or-union:
+                    struct
+                    union
+            struct-declaration-list:
+                    struct-declaration
+                    struct-declaration-list struct-declaration
+            struct-declaration:
+                    specifier-qualifier-list struct-declarator-listopt ;
+                    static_assert-declaration
+            specifier-qualifier-list:
+                   type-specifier specifier-qualifier-listopt
+                   type-qualifier specifier-qualifier-listopt
+            struct-declarator-list:
+                    struct-declarator
+                    struct-declarator-list , struct-declarator
+            struct-declarator:
+                    declarator
+                    declaratoropt : constant-expression
     Constraints
 2   A struct-declaration that does not declare an anonymous structure or anonymous union
     shall contain a struct-declarator-list.
+3   A structure or union shall not contain a member with incomplete or function type (hence,
+    a structure shall not contain an instance of itself, but may contain a pointer to an instance
+    of itself), except that the last member of a structure with more than one named member
+    may have incomplete array type; such a structure (and any union containing, possibly
+    recursively, a member that is such a structure) shall not be a member of a structure or an
+    element of an array.
+4   The expression that specifies the width of a bit-field shall be an integer constant
+    expression with a nonnegative value that does not exceed the width of an object of the
+    type that would be specified were the colon and expression omitted.122) If the value is
+    zero, the declaration shall have no declarator.
+5   A bit-field shall have a type that is a qualified or unqualified version of _Bool, signed
+    int, unsigned int, or some other implementation-defined type. It is
+    implementation-defined whether atomic types are permitted.
+
+    122) While the number of bits in a _Bool object is at least CHAR_BIT, the width (number of sign and
+         value bits) of a _Bool may be just 1 bit.
 
-[page 111] (Contents)
+[page 113] (Contents)
 
-3    A structure or union shall not contain a member with incomplete or function type (hence,
-     a structure shall not contain an instance of itself, but may contain a pointer to an instance
-     of itself), except that the last member of a structure with more than one named member
-     may have incomplete array type; such a structure (and any union containing, possibly
-     recursively, a member that is such a structure) shall not be a member of a structure or an
-     element of an array.
-4    The expression that specifies the width of a bit-field shall be an integer constant
-     expression with a nonnegative value that does not exceed the width of an object of the
-     type that would be specified were the colon and expression omitted.122) If the value is
-     zero, the declaration shall have no declarator.
-5    A bit-field shall have a type that is a qualified or unqualified version of _Bool, signed
-     int, unsigned int, or some other implementation-defined type. It is
-     implementation-defined whether atomic types are permitted.
      Semantics
 6    As discussed in 6.2.5, a structure is a type consisting of a sequence of members, whose
      storage is allocated in an ordered sequence, and a union is a type consisting of a sequence
@@ -5031,26 +5083,16 @@ Forward references:        conditional inclusion (6.10.1),
      indicate that the type being specified is, respectively, a structure type or a union type.
 8    The presence of a struct-declaration-list in a struct-or-union-specifier declares a new type,
      within a translation unit. The struct-declaration-list is a sequence of declarations for the
-     members of the structure or union. If the struct-declaration-list contains no named
-     members, no anonymous structures, and no anonymous unions, the behavior is undefined.
-     The type is incomplete until immediately after the } that terminates the list, and complete
-     thereafter.
+     members of the structure or union. If the struct-declaration-list does not contain any
+     named members, either directly or via an anonymous structure or anonymous union, the
+     behavior is undefined. The type is incomplete until immediately after the } that
+     terminates the list, and complete thereafter.
 9    A member of a structure or union may have any complete object type other than a
      variably modified type.123) In addition, a member may be declared to consist of a
      specified number of bits (including a sign bit, if any). Such a member is called a
      bit-field;124) its width is preceded by a colon.
 10   A bit-field is interpreted as having a signed or unsigned integer type consisting of the
      specified number of bits.125) If the value 0 or 1 is stored into a nonzero-width bit-field of
-
-     122) While the number of bits in a _Bool object is at least CHAR_BIT, the width (number of sign and
-          value bits) of a _Bool may be just 1 bit.
-     123) A structure or union cannot contain a member with a variably modified type because member names
-          are not ordinary identifiers as defined in 6.2.3.
-     124) The unary & (address-of) operator cannot be applied to a bit-field object; thus, there are no pointers to
-          or arrays of bit-field objects.
-
-[page 112] (Contents)
-
      type _Bool, the value of the bit-field shall compare equal to the value stored; a _Bool
      bit-field has the semantics of a _Bool.
 11   An implementation may allocate any addressable storage unit large enough to hold a bit-
@@ -5062,13 +5104,26 @@ Forward references:        conditional inclusion (6.10.1),
      addressable storage unit is unspecified.
 12   A bit-field declaration with no declarator, but only a colon and a width, indicates an
      unnamed bit-field.126) As a special case, a bit-field structure member with a width of 0
+
+
+     123) A structure or union cannot contain a member with a variably modified type because member names
+          are not ordinary identifiers as defined in 6.2.3.
+     124) The unary & (address-of) operator cannot be applied to a bit-field object; thus, there are no pointers to
+          or arrays of bit-field objects.
+     125) As specified in 6.7.2 above, if the actual type specifier used is int or a typedef-name defined as int,
+          then it is implementation-defined whether the bit-field is signed or unsigned.
+     126) An unnamed bit-field structure member is useful for padding to conform to externally imposed
+          layouts.
+
+[page 114] (Contents)
+
      indicates that no further bit-field is to be packed into the unit in which the previous bit-
      field, if any, was placed.
-13   An unnamed member of structure type with no tag is called an anonymous structure; an
-     unnamed member of union type with no tag is called an anonymous union. The members
-     of an anonymous structure or union are considered to be members of the containing
-     structure or union. This applies recursively if the containing structure or union is also
-     anonymous.
+13   An unnamed member whose type specifier is a structure specifier with no tag is called an
+     anonymous structure; an unnamed member whose type specifier is a union specifier with
+     no tag is called an anonymous union. The members of an anonymous structure or union
+     are considered to be members of the containing structure or union. This applies
+     recursively if the containing structure or union is also anonymous.
 14   Each non-bit-field member of a structure or union object is aligned in an implementation-
      defined manner appropriate to its type.
 15   Within a structure object, the non-bit-field members and the units in which bit-fields
@@ -5083,15 +5138,6 @@ Forward references:        conditional inclusion (6.10.1),
 17   There may be unnamed padding at the end of a structure or union.
 18   As a special case, the last element of a structure with more than one named member may
      have an incomplete array type; this is called a flexible array member. In most situations,
-
-
-     125) As specified in 6.7.2 above, if the actual type specifier used is int or a typedef-name defined as int,
-          then it is implementation-defined whether the bit-field is signed or unsigned.
-     126) An unnamed bit-field structure member is useful for padding to conform to externally imposed
-          layouts.
-
-[page 113] (Contents)
-
      the flexible array member is ignored. In particular, the size of the structure is as if the
      flexible array member were omitted except that it may have more trailing padding than
      the omission would imply. However, when a . (or ->) operator has a left operand that is
@@ -5102,19 +5148,22 @@ Forward references:        conditional inclusion (6.10.1),
      from that of the replacement array. If this array would have no elements, it behaves as if
      it had one element but the behavior is undefined if any attempt is made to access that
      element or to generate a pointer one past it.
-19   EXAMPLE 1       The following illustrates anonymous structures and unions:
-              struct v {
-                    union {      // anonymous union
-                           struct { int i, j; };    // anonymous structure
-                           struct { long k, l; } w;
-                    };
-                    int m;
-              } v1;
+19   EXAMPLE 1    The following illustrates anonymous structures and unions:
+             struct v {
+                   union {      // anonymous union
+                          struct { int i, j; };    // anonymous structure
+                          struct { long k, l; } w;
+                   };
+                   int m;
+             } v1;
+
+[page 115] (Contents)
+
               v1.i = 2;   // valid
               v1.k = 3;   // invalid: inner structure is not anonymous
               v1.w.k = 5; // valid
 
-20   EXAMPLE 2       After the declaration:
+20   EXAMPLE 2          After the declaration:
               struct s { int n; double d[]; };
      the structure struct s has a flexible array member d. A typical way to use this is:
               int m = /* some value */;
@@ -5134,9 +5183,6 @@ Forward references:        conditional inclusion (6.10.1),
               sizeof (struct s) >= offsetof(struct s, d) + sizeof (double)
      in which case the assignment would be legitimate. Nevertheless, it cannot appear in strictly conforming
      code.
-
-[page 114] (Contents)
-
 22   After the further declaration:
               struct ss { int n; };
      the expressions:
@@ -5153,6 +5199,9 @@ Forward references:        conditional inclusion (6.10.1),
               struct { int n; double d[8]; } *s1;
               struct { int n; double d[5]; } *s2;
 24   Following the further successful assignments:
+
+[page 116] (Contents)
+
               s1 = malloc(sizeof (struct s) + 10);
               s2 = malloc(sizeof (struct s) + 6);
      they then behave as if the declarations were:
@@ -5168,25 +5217,33 @@ Forward references:        conditional inclusion (6.10.1),
      only copies the member n; if any of the array elements are within the first sizeof (struct s) bytes
      of the structure, they might be copied or simply overwritten with indeterminate values.
 
+26   EXAMPLE 3 Because members of anonymous structures and unions are considered to be members of the
+     containing structure or union, struct s in the following example has more than one named member and
+     thus the use of a flexible array member is valid:
+              struct s {
+                    struct { int i; };
+                    int a[];
+              };
+
      Forward references: declarators (6.7.6), tags (6.7.2.3).
+     6.7.2.2 Enumeration specifiers
+     Syntax
+1             enum-specifier:
+                    enum identifieropt { enumerator-list }
+                    enum identifieropt { enumerator-list , }
+                    enum identifier
+              enumerator-list:
+                    enumerator
+                    enumerator-list , enumerator
+              enumerator:
+                    enumeration-constant
+                    enumeration-constant = constant-expression
+     Constraints
+2    The expression that defines the value of an enumeration constant shall be an integer
+     constant expression that has a value representable as an int.
 
-[page 115] (Contents)
+[page 117] (Contents)
 
-    6.7.2.2 Enumeration specifiers
-    Syntax
-1            enum-specifier:
-                   enum identifieropt { enumerator-list }
-                   enum identifieropt { enumerator-list , }
-                   enum identifier
-             enumerator-list:
-                   enumerator
-                   enumerator-list , enumerator
-             enumerator:
-                   enumeration-constant
-                   enumeration-constant = constant-expression
-    Constraints
-2   The expression that defines the value of an enumeration constant shall be an integer
-    constant expression that has a value representable as an int.
     Semantics
 3   The identifiers in an enumerator list are declared as constants that have type int and
     may appear wherever such are permitted.127) An enumerator with = defines its
@@ -5201,24 +5258,13 @@ Forward references:        conditional inclusion (6.10.1),
     capable of representing the values of all the members of the enumeration. The
     enumerated type is incomplete until immediately after the } that terminates the list of
     enumerator declarations, and complete thereafter.
-
-
-
-
-    127) Thus, the identifiers of enumeration constants declared in the same scope shall all be distinct from
-         each other and from other identifiers declared in ordinary declarators.
-    128) An implementation may delay the choice of which integer type until all enumeration constants have
-         been seen.
-
-[page 116] (Contents)
-
 5   EXAMPLE       The following fragment:
-             enum hue { chartreuse, burgundy, claret=20, winedark };
-             enum hue col, *cp;
-             col = claret;
-             cp = &col;
-             if (*cp != burgundy)
-                   /* ... */
+            enum hue { chartreuse, burgundy, claret=20, winedark };
+            enum hue col, *cp;
+            col = claret;
+            cp = &col;
+            if (*cp != burgundy)
+                  /* ... */
     makes hue the tag of an enumeration, and then declares col as an object that has that type and cp as a
     pointer to an object that has that type. The enumerated values are in the set { 0, 1, 20, 21 }.
 
@@ -5231,6 +5277,15 @@ Forward references:        conditional inclusion (6.10.1),
 3   A type specifier of the form
             enum identifier
     without an enumerator list shall only appear after the type it specifies is complete.
+
+
+    127) Thus, the identifiers of enumeration constants declared in the same scope shall all be distinct from
+         each other and from other identifiers declared in ordinary declarators.
+    128) An implementation may delay the choice of which integer type until all enumeration constants have
+         been seen.
+
+[page 118] (Contents)
+
     Semantics
 4   All declarations of structure, union, or enumerated types that have the same scope and
     use the same tag declare the same type. Irrespective of whether there is a tag or what
@@ -5241,7 +5296,22 @@ Forward references:        conditional inclusion (6.10.1),
     use different tags declare distinct types. Each declaration of a structure, union, or
     enumerated type which does not include a tag declares a distinct type.
 6   A type specifier of the form
-
+             struct-or-union identifieropt { struct-declaration-list }
+    or
+             enum identifieropt { enumerator-list }
+    or
+             enum identifieropt { enumerator-list , }
+    declares a structure, union, or enumerated type. The list defines the structure content,
+    union content, or enumeration content. If an identifier is provided,130) the type specifier
+    also declares the identifier to be the tag of that type.
+7   A declaration of the form
+             struct-or-union identifier ;
+    specifies a structure or union type and declares the identifier as a tag of that type.131)
+8   If a type specifier of the form
+             struct-or-union identifier
+    occurs other than as part of one of the above forms, and no other declaration of the
+    identifier as a tag is visible, then it declares an incomplete structure or union type, and
+    declares the identifier as the tag of that type.131)
 
 
 
@@ -5249,25 +5319,14 @@ Forward references:        conditional inclusion (6.10.1),
          needed, for example, when a typedef name is declared to be a specifier for a structure or union, or
          when a pointer to or a function returning a structure or union is being declared. (See incomplete types
          in 6.2.5.) The specification has to be complete before such a function is called or defined.
+    130) If there is no identifier, the type can, within the translation unit, only be referred to by the declaration
+         of which it is a part. Of course, when the declaration is of a typedef name, subsequent declarations
+         can make use of that typedef name to declare objects having the specified structure, union, or
+         enumerated type.
+    131) A similar construction with enum does not exist.
 
-[page 117] (Contents)
+[page 119] (Contents)
 
-              struct-or-union identifieropt { struct-declaration-list }
-     or
-              enum identifieropt { enumerator-list }
-     or
-              enum identifieropt { enumerator-list , }
-     declares a structure, union, or enumerated type. The list defines the structure content,
-     union content, or enumeration content. If an identifier is provided,130) the type specifier
-     also declares the identifier to be the tag of that type.
-7    A declaration of the form
-              struct-or-union identifier ;
-     specifies a structure or union type and declares the identifier as a tag of that type.131)
-8    If a type specifier of the form
-              struct-or-union identifier
-     occurs other than as part of one of the above forms, and no other declaration of the
-     identifier as a tag is visible, then it declares an incomplete structure or union type, and
-     declares the identifier as the tag of that type.131)
 9    If a type specifier of the form
               struct-or-union identifier
      or
@@ -5282,18 +5341,6 @@ Forward references:        conditional inclusion (6.10.1),
               };
      specifies a structure that contains an integer and two pointers to objects of the same type. Once this
      declaration has been given, the declaration
-
-
-
-
-     130) If there is no identifier, the type can, within the translation unit, only be referred to by the declaration
-          of which it is a part. Of course, when the declaration is of a typedef name, subsequent declarations
-          can make use of that typedef name to declare objects having the specified structure, union, or
-          enumerated type.
-     131) A similar construction with enum does not exist.
-
-[page 118] (Contents)
-
               struct tnode s, *sp;
      declares s to be an object of the given type and sp to be a pointer to an object of the given type. With
      these declarations, the expression sp->left refers to the left struct tnode pointer of the object to
@@ -5314,27 +5361,27 @@ Forward references:        conditional inclusion (6.10.1),
      specify a pair of structures that contain pointers to each other. Note, however, that if s2 were already
      declared as a tag in an enclosing scope, the declaration D1 would refer to it, not to the tag s2 declared in
      D2. To eliminate this context sensitivity, the declaration
-              struct s2;
+             struct s2;
      may be inserted ahead of D1. This declares a new tag s2 in the inner scope; the declaration D2 then
      completes the specification of the new type.
 
      Forward references: declarators (6.7.6), type definitions (6.7.8).
-     6.7.2.4 Atomic type specifiers
-     Syntax
-1             atomic-type-specifier:
-                     _Atomic ( type-name )
-     Constraints
-2    Atomic type specifiers shall not be used if the implementation does not support atomic
-     types (see 6.10.8.3).
-3    The type name in an atomic type specifier shall not refer to an array type, a function type,
-     an atomic type, or a qualified type.
-     Semantics
-4    The properties associated with atomic types are meaningful only for expressions that are
-     lvalues. If the _Atomic keyword is immediately followed by a left parenthesis, it is
-     interpreted as a type specifier (with a type name), not as a type qualifier.
 
-[page 119] (Contents)
+[page 120] (Contents)
 
+    6.7.2.4 Atomic type specifiers
+    Syntax
+1            atomic-type-specifier:
+                    _Atomic ( type-name )
+    Constraints
+2   Atomic type specifiers shall not be used if the implementation does not support atomic
+    types (see 6.10.8.3).
+3   The type name in an atomic type specifier shall not refer to an array type, a function type,
+    an atomic type, or a qualified type.
+    Semantics
+4   The properties associated with atomic types are meaningful only for expressions that are
+    lvalues. If the _Atomic keyword is immediately followed by a left parenthesis, it is
+    interpreted as a type specifier (with a type name), not as a type qualifier.
     6.7.3 Type qualifiers
     Syntax
 1            type-qualifier:
@@ -5353,29 +5400,23 @@ Forward references:        conditional inclusion (6.10.1),
 5   If the same qualifier appears more than once in the same specifier-qualifier-list, either
     directly or via one or more typedefs, the behavior is the same as if it appeared only
     once. If other qualifiers appear along with the _Atomic qualifier in a specifier-qualifier-
-    list, the resulting type is the so-qualified atomic type.
-6   If an attempt is made to modify an object defined with a const-qualified type through use
-    of an lvalue with non-const-qualified type, the behavior is undefined. If an attempt is
-    made to refer to an object defined with a volatile-qualified type through use of an lvalue
-    with non-volatile-qualified type, the behavior is undefined.133)
-7   An object that has volatile-qualified type may be modified in ways unknown to the
-    implementation or have other unknown side effects. Therefore any expression referring
-    to such an object shall be evaluated strictly according to the rules of the abstract machine,
-    as described in 5.1.2.3. Furthermore, at every sequence point the value last stored in the
-    object shall agree with that prescribed by the abstract machine, except as modified by the
-
-
-
 
     132) The implementation may place a const object that is not volatile in a read-only region of
          storage. Moreover, the implementation need not allocate storage for such an object if its address is
          never used.
-    133) This applies to those objects that behave as if they were defined with qualified types, even if they are
-         never actually defined as objects in the program (such as an object at a memory-mapped input/output
-         address).
 
-[page 120] (Contents)
+[page 121] (Contents)
 
+     list, the resulting type is the so-qualified atomic type.
+6    If an attempt is made to modify an object defined with a const-qualified type through use
+     of an lvalue with non-const-qualified type, the behavior is undefined. If an attempt is
+     made to refer to an object defined with a volatile-qualified type through use of an lvalue
+     with non-volatile-qualified type, the behavior is undefined.133)
+7    An object that has volatile-qualified type may be modified in ways unknown to the
+     implementation or have other unknown side effects. Therefore any expression referring
+     to such an object shall be evaluated strictly according to the rules of the abstract machine,
+     as described in 5.1.2.3. Furthermore, at every sequence point the value last stored in the
+     object shall agree with that prescribed by the abstract machine, except as modified by the
      unknown factors mentioned previously.134) What constitutes an access to an object that
      has volatile-qualified type is implementation-defined.
 8    An object that is accessed through a restrict-qualified pointer has a special association
@@ -5391,27 +5432,14 @@ Forward references:        conditional inclusion (6.10.1),
 10   For two qualified types to be compatible, both shall have the identically qualified version
      of a compatible type; the order of type qualifiers within a list of specifiers or qualifiers
      does not affect the specified type.
-11   EXAMPLE 1      An object declared
-              extern const volatile int real_time_clock;
-     may be modifiable by hardware, but cannot be assigned to, incremented, or decremented.
-
-12   EXAMPLE 2 The following declarations and expressions illustrate the behavior when type qualifiers
-     modify an aggregate type:
-              const struct s { int mem; } cs = { 1 };
-              struct s ncs; // the object ncs is modifiable
-              typedef int A[2][3];
-              const A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of const int
-              int *pi;
-              const int *pci;
-              ncs = cs;            //    valid
-              cs = ncs;            //    violates modifiable lvalue constraint for =
-              pi = &ncs.mem;       //    valid
-              pi = &cs.mem;        //    violates type constraints for =
-              pci = &cs.mem;       //    valid
-              pi = a[0];           //    invalid: a[0] has type ''const int *''
+11   EXAMPLE 1       An object declared
+             extern const volatile int real_time_clock;
 
 
 
+     133) This applies to those objects that behave as if they were defined with qualified types, even if they are
+          never actually defined as objects in the program (such as an object at a memory-mapped input/output
+          address).
      134) A volatile declaration may be used to describe an object corresponding to a memory-mapped
           input/output port or an object accessed by an asynchronously interrupting function. Actions on
           objects so declared shall not be ''optimized out'' by an implementation or reordered except as
@@ -5420,7 +5448,24 @@ Forward references:        conditional inclusion (6.10.1),
           association between the allocated object and the pointer.
      136) Both of these can occur through the use of typedefs.
 
-[page 121] (Contents)
+[page 122] (Contents)
+
+     may be modifiable by hardware, but cannot be assigned to, incremented, or decremented.
+
+12   EXAMPLE 2 The following declarations and expressions illustrate the behavior when type qualifiers
+     modify an aggregate type:
+              const struct s { int mem; } cs = { 1 };
+              struct s ncs; // the object ncs is modifiable
+              typedef int A[2][3];
+              const A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of const int
+              int *pi;
+              const int *pci;
+              ncs = cs;               //   valid
+              cs = ncs;               //   violates modifiable lvalue constraint for =
+              pi = &ncs.mem;          //   valid
+              pi = &cs.mem;           //   violates type constraints for =
+              pci = &cs.mem;          //   valid
+              pi = a[0];              //   invalid: a[0] has type ''const int *''
 
 13   EXAMPLE 3       The declaration
               _Atomic volatile int *p;
@@ -5443,6 +5488,15 @@ Forward references:        conditional inclusion (6.10.1),
      used to access the value of X shall also have its address based on P. Every access that
      modifies X shall be considered also to modify P, for the purposes of this subclause. If P
      is assigned the value of a pointer expression E that is based on another restricted pointer
+
+
+     137) In other words, E depends on the value of P itself rather than on the value of an object referenced
+          indirectly through P. For example, if identifier p has type (int **restrict), then the pointer
+          expressions p and p+1 are based on the restricted pointer object designated by p, but the pointer
+          expressions *p and p[1] are not.
+
+[page 123] (Contents)
+
      object P2, associated with block B2, then either the execution of B2 shall begin before
      the execution of B, or the execution of B2 shall end prior to the assignment. If these
      requirements are not met, then the behavior is undefined.
@@ -5451,20 +5505,12 @@ Forward references:        conditional inclusion (6.10.1),
      associated with B.
 6    A translator is free to ignore any or all aliasing implications of uses of restrict.
 7    EXAMPLE 1       The file scope declarations
-              int * restrict a;
-              int * restrict b;
-              extern int c[];
+             int * restrict a;
+             int * restrict b;
+             extern int c[];
      assert that if an object is accessed using one of a, b, or c, and that object is modified anywhere in the
      program, then it is never accessed using either of the other two.
 
-
-     137) In other words, E depends on the value of P itself rather than on the value of an object referenced
-          indirectly through P. For example, if identifier p has type (int **restrict), then the pointer
-          expressions p and p+1 are based on the restricted pointer object designated by p, but the pointer
-          expressions *p and p[1] are not.
-
-[page 122] (Contents)
-
 8    EXAMPLE 2       The function parameter declarations in the following example
              void f(int n, int * restrict p, int * restrict q)
              {
@@ -5496,23 +5542,22 @@ Forward references:        conditional inclusion (6.10.1),
      are disjoint arrays, a call of the form h(100, a, b, b) has defined behavior, because array b is not
      modified within function h.
 
+[page 124] (Contents)
+
 11   EXAMPLE 4 The rule limiting assignments between restricted pointers does not distinguish between a
      function call and an equivalent nested block. With one exception, only ''outer-to-inner'' assignments
      between restricted pointers declared in nested blocks have defined behavior.
-             {
-                      int * restrict p1;
-                      int * restrict q1;
-                      p1 = q1; // undefined behavior
-                      {
-                            int * restrict p2 = p1; // valid
-                            int * restrict q2 = q1; // valid
-                            p1 = q2;                // undefined behavior
-                            p2 = q2;                // undefined behavior
-                      }
-             }
-
-[page 123] (Contents)
-
+              {
+                       int * restrict p1;
+                       int * restrict q1;
+                       p1 = q1; // undefined behavior
+                       {
+                             int * restrict p2 = p1; // valid
+                             int * restrict q2 = q1; // valid
+                             p1 = q2;                // undefined behavior
+                             p2 = q2;                // undefined behavior
+                       }
+              }
 12   The one exception allows the value of a restricted pointer to be carried out of the block in which it (or, more
      precisely, the ordinary identifier used to designate it) is declared when that block finishes execution. For
      example, this permits new_vector to return a vector.
@@ -5539,25 +5584,12 @@ Forward references:        conditional inclusion (6.10.1),
      Semantics
 5    A function specifier may appear more than once; the behavior is the same as if it
      appeared only once.
-6    A function declared with an inline function specifier is an inline function. Making a *
+6    A function declared with an inline function specifier is an inline function. Making a
      function an inline function suggests that calls to the function be as fast as possible.138)
-     The extent to which such suggestions are effective is implementation-defined.139)
 
+[page 125] (Contents)
 
-
-
-     138) By using, for example, an alternative to the usual function call mechanism, such as ''inline
-          substitution''. Inline substitution is not textual substitution, nor does it create a new function.
-          Therefore, for example, the expansion of a macro used within the body of the function uses the
-          definition it had at the point the function body appears, and not where the function is called; and
-          identifiers refer to the declarations in scope where the body occurs. Likewise, the function has a
-          single address, regardless of the number of inline definitions that occur in addition to the external
-          definition.
-     139) For example, an implementation might never perform inline substitution, or might only perform inline
-          substitutions to calls in the scope of an inline declaration.
-
-[page 124] (Contents)
-
+     The extent to which such suggestions are effective is implementation-defined.139)
 7    Any function with internal linkage can be an inline function. For a function with external
      linkage, the following restrictions apply: If a function is declared with an inline
      function specifier, then it shall also be defined in the same translation unit. If all of the
@@ -5584,6 +5616,25 @@ Forward references:        conditional inclusion (6.10.1),
                     return (5.0 * (t - 32.0)) / 9.0;
               }
               extern double fahr(double);                  // creates an external definition
+
+
+
+
+     138) By using, for example, an alternative to the usual function call mechanism, such as ''inline
+          substitution''. Inline substitution is not textual substitution, nor does it create a new function.
+          Therefore, for example, the expansion of a macro used within the body of the function uses the
+          definition it had at the point the function body appears, and not where the function is called; and
+          identifiers refer to the declarations in scope where the body occurs. Likewise, the function has a
+          single address, regardless of the number of inline definitions that occur in addition to the external
+          definition.
+     139) For example, an implementation might never perform inline substitution, or might only perform inline
+          substitutions to calls in the scope of an inline declaration.
+     140) Since an inline definition is distinct from the corresponding external definition and from any other
+          corresponding inline definitions in other translation units, all corresponding objects with static storage
+          duration are also distinct in each of the definitions.
+
+[page 126] (Contents)
+
               double convert(int is_fahr, double temp)
               {
                     /* A translator may perform inline substitutions */
@@ -5595,58 +5646,43 @@ Forward references:        conditional inclusion (6.10.1),
      definition are distinct and either may be used for the call.
 
 12   EXAMPLE 2
+              _Noreturn void f () {
+                    abort(); // ok
+              }
+              _Noreturn void g (int i) { // causes undefined behavior if i <= 0
+                    if (i > 0) abort();
+              }
 
+     Forward references: function definitions (6.9.1).
+     6.7.5 Alignment specifier
+     Syntax
+1             alignment-specifier:
+                    _Alignas ( type-name )
+                    _Alignas ( constant-expression )
+     Constraints
+2    An alignment attribute shall not be specified in a declaration of a typedef, or a bit-field, or
+     a function, or a parameter, or an object declared with the register storage-class
+     specifier.
+3    The constant expression shall be an integer constant expression. It shall evaluate to a
+     valid fundamental alignment, or to a valid extended alignment supported by the
+     implementation in the context in which it appears, or to zero.
+4    The combined effect of all alignment attributes in a declaration shall not specify an
+     alignment that is less strict than the alignment that would otherwise be required for the
+     type of the object or member being declared.
+     Semantics
+5    The first form is equivalent to _Alignas (_Alignof (type-name)).
+6    The alignment requirement of the declared object or member is taken to be the specified
+     alignment. An alignment specification of zero has no effect.141) When multiple
+     alignment specifiers occur in a declaration, the effective alignment requirement is the
+     strictest specified alignment.
 
+[page 127] (Contents)
 
-
-     140) Since an inline definition is distinct from the corresponding external definition and from any other
-          corresponding inline definitions in other translation units, all corresponding objects with static storage
-          duration are also distinct in each of the definitions.
-
-[page 125] (Contents)
-
-             _Noreturn void f () {
-                   abort(); // ok
-             }
-             _Noreturn void g (int i) { // causes undefined behavior if i <= 0
-                   if (i > 0) abort();
-             }
-
-    Forward references: function definitions (6.9.1).
-    6.7.5 Alignment specifier
-    Syntax
-1            alignment-specifier:
-                   _Alignas ( type-name )
-                   _Alignas ( constant-expression )
-    Constraints
-2   An alignment attribute shall not be specified in a declaration of a typedef, or a bit-field, or
-    a function, or a parameter, or an object declared with the register storage-class
-    specifier.
-3   The constant expression shall be an integer constant expression. It shall evaluate to a
-    valid fundamental alignment, or to a valid extended alignment supported by the
-    implementation in the context in which it appears, or to zero.
-4   The combined effect of all alignment attributes in a declaration shall not specify an
-    alignment that is less strict than the alignment that would otherwise be required for the
-    type of the object or member being declared.
-    Semantics
-5   The first form is equivalent to _Alignas(alignof(type-name)).
-6   The alignment requirement of the declared object or member is taken to be the specified
-    alignment. An alignment specification of zero has no effect.141) When multiple
-    alignment specifiers occur in a declaration, the effective alignment requirement is the
-    strictest specified alignment.
 7   If the definition of an object has an alignment specifier, any other declaration of that
     object shall either specify equivalent alignment or have no alignment specifier. If the
     definition of an object does not have an alignment specifier, any other declaration of that
     object shall also have no alignment specifier. If declarations of an object in different
     translation units have different alignment specifiers, the behavior is undefined.
-
-
-
-    141) An alignment specification of zero also does not affect other alignment specifications in the same
-         declaration.
-
-[page 126] (Contents)
-
     6.7.6 Declarators
     Syntax
 1            declarator:
@@ -5675,6 +5711,14 @@ Forward references:        conditional inclusion (6.10.1),
              parameter-declaration:
                    declaration-specifiers declarator
                    declaration-specifiers abstract-declaratoropt
+
+
+
+    141) An alignment specification of zero also does not affect other alignment specifications in the same
+         declaration.
+
+[page 128] (Contents)
+
              identifier-list:
                     identifier
                     identifier-list , identifier
@@ -5684,22 +5728,19 @@ Forward references:        conditional inclusion (6.10.1),
     scope, storage duration, and type indicated by the declaration specifiers.
 3   A full declarator is a declarator that is not part of another declarator. The end of a full
     declarator is a sequence point. If, in the nested sequence of declarators in a full
-
-[page 127] (Contents)
-
     declarator, there is a declarator specifying a variable length array type, the type specified
     by the full declarator is said to be variably modified. Furthermore, any type derived by
     declarator type derivation from a variably modified type is itself variably modified.
 4   In the following subclauses, consider a declaration
-            T D1
+             T D1
     where T contains the declaration specifiers that specify a type T (such as int) and D1 is
     a declarator that contains an identifier ident. The type specified for the identifier ident in
     the various forms of declarator is described inductively using this notation.
 5   If, in the declaration ''T D1'', D1 has the form
-            identifier
+             identifier
     then the type specified for ident is T .
 6   If, in the declaration ''T D1'', D1 has the form
-            ( D )
+             ( D )
     then ident has the type specified by the declaration ''T D''. Thus, a declarator in
     parentheses is identical to the unparenthesized declarator, but the binding of complicated
     declarators may be altered by parentheses.
@@ -5708,6 +5749,9 @@ Forward references:        conditional inclusion (6.10.1),
     function declarators that modify an arithmetic, structure, union, or void type, either
     directly or via one or more typedefs.
     Forward references: array declarators (6.7.6.2), type definitions (6.7.8).
+
+[page 129] (Contents)
+
     6.7.6.1 Pointer declarators
     Semantics
 1   If, in the declaration ''T D1'', D1 has the form
@@ -5719,19 +5763,16 @@ Forward references:        conditional inclusion (6.10.1),
     be pointers to compatible types.
 3   EXAMPLE The following pair of declarations demonstrates the difference between a ''variable pointer
     to a constant value'' and a ''constant pointer to a variable value''.
-
-[page 128] (Contents)
-
-             const int *ptr_to_constant;
-             int *const constant_ptr;
+            const int *ptr_to_constant;
+            int *const constant_ptr;
     The contents of any object pointed to by ptr_to_constant shall not be modified through that pointer,
     but ptr_to_constant itself may be changed to point to another object. Similarly, the contents of the
     int pointed to by constant_ptr may be modified, but constant_ptr itself shall always point to the
     same location.
 4   The declaration of the constant pointer constant_ptr may be clarified by including a definition for the
     type ''pointer to int''.
-             typedef int *int_ptr;
-             const int_ptr constant_ptr;
+            typedef int *int_ptr;
+            const int_ptr constant_ptr;
     declares constant_ptr as an object that has type ''const-qualified pointer to int''.
 
     6.7.6.2 Array declarators
@@ -5747,6 +5788,9 @@ Forward references:        conditional inclusion (6.10.1),
     identifier (as defined in 6.2.3), have no linkage, and have either block scope or function
     prototype scope. If an identifier is declared to be an object with static or thread storage
     duration, it shall not have a variable length array type.
+
+[page 130] (Contents)
+
     Semantics
 3   If, in the declaration ''T D1'', D1 has one of the forms:
              D[ type-qualifier-listopt assignment-expressionopt ]
@@ -5759,11 +5803,6 @@ Forward references:        conditional inclusion (6.10.1),
 4   If the size is not present, the array type is an incomplete type. If the size is * instead of
     being an expression, the array type is a variable length array type of unspecified size,
     which can only be used in declarations or type names with function prototype scope;143)
-
-    142) When several ''array of'' specifications are adjacent, a multidimensional array is declared.
-
-[page 129] (Contents)
-
     such arrays are nonetheless complete types. If the size is an integer constant expression
     and the element type has a known constant size, the array type is not a variable length
     array type; otherwise, the array type is a variable length array type. (Variable length
@@ -5785,12 +5824,21 @@ Forward references:        conditional inclusion (6.10.1),
     declares an array of float numbers and an array of pointers to float numbers.
 
 8   EXAMPLE 2       Note the distinction between the declarations
+
+
+
+
+    142) When several ''array of'' specifications are adjacent, a multidimensional array is declared.
+    143) Thus, * can be used only in function declarations that are not definitions (see 6.7.6.3).
+
+[page 131] (Contents)
+
              extern int *x;
              extern int y[];
-    The first declares x to be a pointer to int; the second declares y to be an array of int of unspecified size
-    (an incomplete type), the storage for which is defined elsewhere.
+     The first declares x to be a pointer to int; the second declares y to be an array of int of unspecified size
+     (an incomplete type), the storage for which is defined elsewhere.
 
-9   EXAMPLE 3       The following declarations demonstrate the compatibility rules for variably modified types.
+9    EXAMPLE 3      The following declarations demonstrate the compatibility rules for variably modified types.
              extern int n;
              extern int m;
              void fcompat(void)
@@ -5804,13 +5852,6 @@ Forward references:        conditional inclusion (6.10.1),
                                 // n == 6 and m == n+1
              }
 
-
-
-
-    143) Thus, * can be used only in function declarations that are not definitions (see 6.7.6.3).
-
-[page 130] (Contents)
-
 10   EXAMPLE 4 All declarations of variably modified (VM) types have to be at either block scope or
      function prototype scope. Array objects declared with the _Thread_local, static, or extern
      storage-class specifier cannot have a variable length array (VLA) type. However, an object declared with
@@ -5818,27 +5859,30 @@ Forward references:        conditional inclusion (6.10.1),
      identifiers declared with a VM type have to be ordinary identifiers and cannot, therefore, be members of
      structures or unions.
              extern int n;
-             int A[n];                                           // invalid: file scope VLA
-             extern int (*p2)[n];                                // invalid: file scope VM
-             int B[100];                                         // valid: file scope but not VM
-             void fvla(int m, int C[m][m]);                      // valid: VLA with prototype scope
-             void fvla(int m, int C[m][m])                       // valid: adjusted to auto pointer to VLA
+             int A[n];                                            // invalid: file scope VLA
+             extern int (*p2)[n];                                 // invalid: file scope VM
+             int B[100];                                          // valid: file scope but not VM
+             void fvla(int m, int C[m][m]);                       // valid: VLA with prototype scope
+             void fvla(int m, int C[m][m])                        // valid: adjusted to auto pointer to VLA
              {
-                   typedef int VLA[m][m];                        // valid: block scope typedef VLA
+                   typedef int VLA[m][m];                         // valid: block scope typedef VLA
                       struct tag {
-                            int (*y)[n];                         // invalid: y not ordinary identifier
-                            int z[n];                            // invalid: z not ordinary identifier
+                            int (*y)[n];                          // invalid: y not ordinary identifier
+                            int z[n];                             // invalid: z not ordinary identifier
                       };
-                      int D[m];                                  //   valid: auto VLA
-                      static int E[m];                           //   invalid: static block scope VLA
-                      extern int F[m];                           //   invalid: F has linkage and is VLA
-                      int (*s)[m];                               //   valid: auto pointer to VLA
-                      extern int (*r)[m];                        //   invalid: r has linkage and points to VLA
-                      static int (*q)[m] = &B;                   //   valid: q is a static block pointer to VLA
+                      int D[m];                                   //   valid: auto VLA
+                      static int E[m];                            //   invalid: static block scope VLA
+                      extern int F[m];                            //   invalid: F has linkage and is VLA
+                      int (*s)[m];                                //   valid: auto pointer to VLA
+                      extern int (*r)[m];                         //   invalid: r has linkage and points to VLA
+                      static int (*q)[m] = &B;                    //   valid: q is a static block pointer to VLA
              }
 
-     Forward references:          function declarators (6.7.6.3), function definitions (6.9.1),
+     Forward references:           function declarators (6.7.6.3), function definitions (6.9.1),
      initialization (6.7.9).
+
+[page 132] (Contents)
+
      6.7.6.3 Function declarators (including prototypes)
      Constraints
 1    A function declarator shall not specify a return type that is a function type or an array
@@ -5850,12 +5894,9 @@ Forward references:        conditional inclusion (6.10.1),
      part of a definition of that function shall not have incomplete type.
      Semantics
 5    If, in the declaration ''T D1'', D1 has the form
-
-[page 131] (Contents)
-
-            D( parameter-type-list )
+             D( parameter-type-list )
      or
-            D( identifier-listopt )
+             D( identifier-listopt )
      and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
      T '', then the type specified for ident is ''derived-declarator-type-list function returning
      T ''.
@@ -5873,6 +5914,14 @@ Forward references:        conditional inclusion (6.10.1),
      of the parameters after the comma is supplied.144)
 10   The special case of an unnamed parameter of type void as the only item in the list
      specifies that the function has no parameters.
+
+
+
+     144) The macros defined in the <stdarg.h> header (7.16) may be used to access arguments that
+          correspond to the ellipsis.
+
+[page 133] (Contents)
+
 11   If, in a parameter declaration, an identifier can be treated either as a typedef name or as a
      parameter name, it shall be taken as a typedef name.
 12   If the function declarator is not part of a definition of that function, parameters may have
@@ -5886,14 +5935,6 @@ Forward references:        conditional inclusion (6.10.1),
      function has no parameters. The empty list in a function declarator that is not part of a
      definition of that function specifies that no information about the number or types of the
      parameters is supplied.145)
-
-
-
-     144) The macros defined in the <stdarg.h> header (7.16) may be used to access arguments that
-          correspond to the ellipsis.
-
-[page 132] (Contents)
-
 15   For two function types to be compatible, both shall specify compatible return types.146)
      Moreover, the parameter type lists, if both are present, shall agree in the number of
      parameters and in use of the ellipsis terminator; corresponding parameters shall have
@@ -5917,30 +5958,30 @@ Forward references:        conditional inclusion (6.10.1),
      declaration suggests, and the same construction in an expression requires, the calling of a function fip,
      and then using indirection through the pointer result to yield an int. In the declarator (*pfi)(), the
      extra parentheses are necessary to indicate that indirection through a pointer to a function yields a function
+
+
+     145) See ''future language directions'' (6.11.6).
+     146) If both function types are ''old style'', parameter types are not compared.
+
+[page 134] (Contents)
+
      designator, which is then used to call the function; it returns an int.
 17   If the declaration occurs outside of any function, the identifiers have file scope and external linkage. If the
      declaration occurs inside a function, the identifiers of the functions f and fip have block scope and either
      internal or external linkage (depending on what file scope declarations for these identifiers are visible), and
      the identifier of the pointer pfi has block scope and no linkage.
 
-18   EXAMPLE 2       The declaration
-              int (*apfi[3])(int *x, int *y);
+18   EXAMPLE 2        The declaration
+               int (*apfi[3])(int *x, int *y);
      declares an array apfi of three pointers to functions returning int. Each of these functions has two
      parameters that are pointers to int. The identifiers x and y are declared for descriptive purposes only and
      go out of scope at the end of the declaration of apfi.
 
-19   EXAMPLE 3       The declaration
-              int (*fpfi(int (*)(long), int))(int, ...);
+19   EXAMPLE 3        The declaration
+               int (*fpfi(int (*)(long), int))(int, ...);
      declares a function fpfi that returns a pointer to a function returning an int. The function fpfi has two
      parameters: a pointer to a function returning an int (with one parameter of type long int), and an int.
      The pointer returned by fpfi points to a function that has one int parameter and accepts zero or more
-
-
-     145) See ''future language directions'' (6.11.6).
-     146) If both function types are ''old style'', parameter types are not compared.
-
-[page 133] (Contents)
-
      additional arguments of any type.
 
 20   EXAMPLE 4        The following prototype has a variably modified parameter.
@@ -5962,22 +6003,22 @@ Forward references:        conditional inclusion (6.10.1),
                }
 
 21   EXAMPLE 5        The following are all compatible function prototype declarators.
-               double    maximum(int       n,   int   m,   double   a[n][m]);
-               double    maximum(int       n,   int   m,   double   a[*][*]);
-               double    maximum(int       n,   int   m,   double   a[ ][*]);
-               double    maximum(int       n,   int   m,   double   a[ ][m]);
+               double    maximum(int       n,   int   m,   double     a[n][m]);
+               double    maximum(int       n,   int   m,   double     a[*][*]);
+               double    maximum(int       n,   int   m,   double     a[ ][*]);
+               double    maximum(int       n,   int   m,   double     a[ ][m]);
      as are:
-               void   f(double     (* restrict a)[5]);
-               void   f(double     a[restrict][5]);
-               void   f(double     a[restrict 3][5]);
-               void   f(double     a[restrict static 3][5]);
-     (Note that the last declaration also specifies that the argument corresponding to a in any call to f must be a
-     non-null pointer to the first of at least three arrays of 5 doubles, which the others do not.)
+               void   f(double      (* restrict a)[5]);
+               void   f(double      a[restrict][5]);
+               void   f(double      a[restrict 3][5]);
+               void   f(double      a[restrict static 3][5]);
 
-     Forward references: function definitions (6.9.1), type names (6.7.7).
+[page 135] (Contents)
 
-[page 134] (Contents)
+    (Note that the last declaration also specifies that the argument corresponding to a in any call to f must be a
+    non-null pointer to the first of at least three arrays of 5 doubles, which the others do not.)
 
+    Forward references: function definitions (6.9.1), type names (6.7.7).
     6.7.7 Type names
     Syntax
 1            type-name:
@@ -6011,17 +6052,16 @@ Forward references:        conditional inclusion (6.10.1),
     name respectively the types (a) int, (b) pointer to int, (c) array of three pointers to int, (d) pointer to an
     array of three ints, (e) pointer to a variable length array of an unspecified number of ints, (f) function
     with no parameter specification returning a pointer to int, (g) pointer to function with no parameters
-    returning an int, and (h) array of an unspecified number of constant pointers to functions, each with one
-    parameter that has type unsigned int and an unspecified number of other parameters, returning an
-    int.
-
-
 
 
     147) As indicated by the syntax, empty parentheses in a type name are interpreted as ''function with no
          parameter specification'', rather than redundant parentheses around the omitted identifier.
 
-[page 135] (Contents)
+[page 136] (Contents)
+
+    returning an int, and (h) array of an unspecified number of constant pointers to functions, each with one
+    parameter that has type unsigned int and an unspecified number of other parameters, returning an
+    int.
 
     6.7.8 Type definitions
     Syntax
@@ -6059,9 +6099,10 @@ Forward references:        conditional inclusion (6.10.1),
              typedef struct s1 { int x; } t1, *tp1;
              typedef struct s2 { int x; } t2, *tp2;
     type t1 and the type pointed to by tp1 are compatible. Type t1 is also compatible with type struct
-    s1, but not compatible with the types struct s2, t2, the type pointed to by tp2, or int.
 
-[page 136] (Contents)
+[page 137] (Contents)
+
+    s1, but not compatible with the types struct s2, t2, the type pointed to by tp2, or int.
 
 6   EXAMPLE 3       The following obscure constructions
              typedef signed int t;
@@ -6105,7 +6146,7 @@ Forward references:        conditional inclusion (6.10.1),
                          a[i-1] = b[i];
              }
 
-[page 137] (Contents)
+[page 138] (Contents)
 
     6.7.9 Initialization
     Syntax
@@ -6143,7 +6184,7 @@ Forward references:        conditional inclusion (6.10.1),
     then the current object (defined below) shall have structure or union type and the
     identifier shall be the name of a member of that type.
 
-[page 138] (Contents)
+[page 139] (Contents)
 
      Semantics
 8    An initializer specifies the initial value stored in an object.
@@ -6174,14 +6215,15 @@ Forward references:        conditional inclusion (6.10.1),
      terminating null character if there is room or if the array is of unknown size) initialize the
      elements of the array.
 15   An array with element type compatible with a qualified or unqualified version of
-     wchar_t may be initialized by a wide string literal, optionally enclosed in braces.
-     Successive wide characters of the wide string literal (including the terminating null wide
-     character if there is room or if the array is of unknown size) initialize the elements of the
-     array.
+     wchar_t, char16_t, or char32_t may be initialized by a wide string literal with
+     the corresponding encoding prefix (L, u, or U, respectively), optionally enclosed in
+     braces. Successive wide characters of the wide string literal (including the terminating
+     null wide character if there is room or if the array is of unknown size) initialize the
+     elements of the array.
 16   Otherwise, the initializer for an object that has aggregate or union type shall be a brace-
      enclosed list of initializers for the elements or named members.
 
-[page 139] (Contents)
+[page 140] (Contents)
 
 17   Each brace-enclosed initializer list has an associated current object. When no
      designations are present, subobjects of the current object are initialized in order according
@@ -6224,7 +6266,7 @@ Forward references:        conditional inclusion (6.10.1),
      151) Any initializer for the subobject which is overridden and so not used to initialize that subobject might
           not be evaluated at all.
 
-[page 140] (Contents)
+[page 141] (Contents)
 
 22   If an array of unknown size is initialized, its size is determined by the largest indexed
      element with an explicit initializer. The array type is completed at the end of its
@@ -6272,7 +6314,7 @@ Forward references:        conditional inclusion (6.10.1),
 
      152) In particular, the evaluation order need not be the same as the order of subobject initialization.
 
-[page 141] (Contents)
+[page 142] (Contents)
 
      structures: w[0].a[0] is 1 and w[1].a[0] is 2; all the other elements are zero.
 
@@ -6314,14 +6356,14 @@ Forward references:        conditional inclusion (6.10.1),
 
 31   EXAMPLE 7         One form of initialization that completes array types involves typedef names. Given the
      declaration
-               typedef int A[];          // OK - declared with block scope
+               typedef int A[];            // OK - declared with block scope
      the declaration
                A a = { 1, 2 }, b = { 3, 4, 5 };
      is identical to
                int a[] = { 1, 2 }, b[] = { 3, 4, 5 };
      due to the rules for incomplete types.
 
-[page 142] (Contents)
+[page 143] (Contents)
 
 32   EXAMPLE 8       The declaration
               char s[] = "abc", t[3] = "abc";
@@ -6363,7 +6405,7 @@ Forward references:        conditional inclusion (6.10.1),
 
      Forward references: common definitions <stddef.h> (7.19).
 
-[page 143] (Contents)
+[page 144] (Contents)
 
     6.7.10 Static assertions
     Syntax
@@ -6379,7 +6421,7 @@ Forward references:        conditional inclusion (6.10.1),
     character set are not required to appear in the message.
     Forward references: diagnostics (7.2).
 
-[page 144] (Contents)
+[page 145] (Contents)
 
     6.8 Statements and blocks
     Syntax
@@ -6418,7 +6460,7 @@ Forward references:        conditional inclusion (6.10.1),
 2   A case or default label shall appear only in a switch statement. Further
     constraints on such labels are discussed under the switch statement.
 
-[page 145] (Contents)
+[page 146] (Contents)
 
 3   Label names shall be unique within a function.
     Semantics
@@ -6457,7 +6499,7 @@ Forward references:        conditional inclusion (6.10.1),
 
     153) Such as assignments, and function calls which have side effects.
 
-[page 146] (Contents)
+[page 147] (Contents)
 
 5   EXAMPLE 2       In the program fragment
              char *s;
@@ -6500,7 +6542,7 @@ Forward references:        conditional inclusion (6.10.1),
 2   In both forms, the first substatement is executed if the expression compares unequal to 0.
     In the else form, the second substatement is executed if the expression compares equal
 
-[page 147] (Contents)
+[page 148] (Contents)
 
     to 0. If the first substatement is reached via a label, the second substatement is not
     executed.
@@ -6540,7 +6582,7 @@ Forward references:        conditional inclusion (6.10.1),
     154) That is, the declaration either precedes the switch statement, or it follows the last case or
          default label associated with the switch that is in the block containing the declaration.
 
-[page 148] (Contents)
+[page 149] (Contents)
 
 7   EXAMPLE        In the artificial program fragment
              switch (expr)
@@ -6583,7 +6625,7 @@ Forward references:        conditional inclusion (6.10.1),
          statement is not evaluated before entering the loop body, nor is clause-1 of a for statement.
     156) An omitted controlling expression is replaced by a nonzero constant, which is a constant expression.
 
-[page 149] (Contents)
+[page 150] (Contents)
 
     a for statement) its expression-3, may be assumed by the implementation to
     terminate.157)
@@ -6623,7 +6665,7 @@ Forward references:        conditional inclusion (6.10.1),
          such that execution of the loop continues until the expression compares equal to 0; and expression-3
          specifies an operation (such as incrementing) that is performed after each iteration.
 
-[page 150] (Contents)
+[page 151] (Contents)
 
     Semantics
 2   A jump statement causes an unconditional jump to another place.
@@ -6658,7 +6700,7 @@ Forward references:        conditional inclusion (6.10.1),
                     /* ... */
             }
 
-[page 151] (Contents)
+[page 152] (Contents)
 
 4   EXAMPLE 2 A goto statement is not allowed to jump past any declarations of objects with variably
     modified types. A jump within the scope, however, is permitted.
@@ -6701,7 +6743,7 @@ Forward references:        conditional inclusion (6.10.1),
 
     159) Following the contin: label is a null statement.
 
-[page 152] (Contents)
+[page 153] (Contents)
 
     6.8.6.4 The return statement
     Constraints
@@ -6743,7 +6785,7 @@ Forward references:        conditional inclusion (6.10.1),
          apply to the case of function return. The representation of floating-point values may have wider range
          or precision than implied by the type; a cast may be used to remove this extra range and precision.
 
-[page 153] (Contents)
+[page 154] (Contents)
 
     6.9 External definitions
     Syntax
@@ -6758,9 +6800,9 @@ Forward references:        conditional inclusion (6.10.1),
     specifiers in an external declaration.
 3   There shall be no more than one external definition for each identifier declared with
     internal linkage in a translation unit. Moreover, if an identifier declared with internal
-    linkage is used in an expression (other than as a part of the operand of a sizeof
-    operator whose result is an integer constant), there shall be exactly one external definition
-    for the identifier in the translation unit.
+    linkage is used in an expression (other than as a part of the operand of a sizeof or
+    _Alignof operator whose result is an integer constant), there shall be exactly one
+    external definition for the identifier in the translation unit.
     Semantics
 4   As discussed in 5.1.1.1, the unit of program text after preprocessing is a translation unit,
     which consists of a sequence of external declarations. These are described as ''external''
@@ -6769,10 +6811,10 @@ Forward references:        conditional inclusion (6.10.1),
     by the identifier is a definition.
 5   An external definition is an external declaration that is also a definition of a function
     (other than an inline definition) or an object. If an identifier declared with external
-    linkage is used in an expression (other than as part of the operand of a sizeof operator
-    whose result is an integer constant), somewhere in the entire program there shall be
-    exactly one external definition for the identifier; otherwise, there shall be no more than
-    one.161)
+    linkage is used in an expression (other than as part of the operand of a sizeof or
+    _Alignof operator whose result is an integer constant), somewhere in the entire
+    program there shall be exactly one external definition for the identifier; otherwise, there
+    shall be no more than one.161)
 
 
 
@@ -6780,7 +6822,7 @@ Forward references:        conditional inclusion (6.10.1),
     161) Thus, if an identifier declared with external linkage is not used in an expression, there need be no
          external definition for it.
 
-[page 154] (Contents)
+[page 155] (Contents)
 
     6.9.1 Function definitions
     Syntax
@@ -6822,7 +6864,7 @@ Forward references:        conditional inclusion (6.10.1),
                   int (*fp)(void);                              //   fp points to a function that has type F
                   F *Fp;                                        //   Fp points to a function that has type F
 
-[page 155] (Contents)
+[page 156] (Contents)
 
      Semantics
 7    The declarator in a function definition specifies the name of the function being defined
@@ -6862,7 +6904,7 @@ Forward references:        conditional inclusion (6.10.1),
      163) See ''future language directions'' (6.11.7).
      164) A parameter identifier cannot be redeclared in the function body except in an enclosed block.
 
-[page 156] (Contents)
+[page 157] (Contents)
 
               extern int max(a, b)
               int a, b;
@@ -6904,7 +6946,7 @@ Forward references:        conditional inclusion (6.10.1),
 3    If the declaration of an identifier for an object is a tentative definition and has internal
      linkage, the declared type shall not be an incomplete type.
 
-[page 157] (Contents)
+[page 158] (Contents)
 
 4   EXAMPLE 1
              int i1 = 1;                    // definition, external linkage
@@ -6928,7 +6970,7 @@ Forward references:        conditional inclusion (6.10.1),
     the array i still has incomplete type, the implicit initializer causes it to have one element, which is set to
     zero on program startup.
 
-[page 158] (Contents)
+[page 159] (Contents)
 
     6.10 Preprocessing directives
     Syntax
@@ -6952,13 +6994,13 @@ Forward references:        conditional inclusion (6.10.1),
                      elif-group
                      elif-groups elif-group
              elif-group:
-                     # elif       constant-expression new-line groupopt
+                     # elif        constant-expression new-line groupopt
              else-group:
-                     # else       new-line groupopt
+                     # else        new-line groupopt
              endif-line:
-                     # endif      new-line
+                     # endif       new-line
 
-[page 159] (Contents)
+[page 160] (Contents)
 
              control-line:
                     # include pp-tokens new-line
@@ -6999,7 +7041,7 @@ Forward references:        conditional inclusion (6.10.1),
          significance, as all white space is equivalent except in certain situations during preprocessing (see the
          # character string literal creation operator in 6.10.3.2, for example).
 
-[page 160] (Contents)
+[page 161] (Contents)
 
     invocation of a function-like macro.
 3   A text line shall not begin with a # preprocessing token. A non-directive shall not begin
@@ -7020,8 +7062,8 @@ Forward references:        conditional inclusion (6.10.1),
 7   The preprocessing tokens within a preprocessing directive are not subject to macro
     expansion unless otherwise stated.
 8   EXAMPLE        In:
-              #define EMPTY
-              EMPTY # include <file.h>
+             #define EMPTY
+             EMPTY # include <file.h>
     the sequence of preprocessing tokens on the second line is not a preprocessing directive, because it does not
     begin with a # at the start of translation phase 4, even though it will do so after the macro EMPTY has been
     replaced.
@@ -7029,7 +7071,7 @@ Forward references:        conditional inclusion (6.10.1),
     6.10.1 Conditional inclusion
     Constraints
 1   The expression that controls conditional inclusion shall be an integer constant expression
-    except that: identifiers (including those lexically identical to keywords) are interpreted as *
+    except that: identifiers (including those lexically identical to keywords) are interpreted as
     described below;166) and it may contain unary operator expressions of the form
          defined identifier
     or
@@ -7040,7 +7082,7 @@ Forward references:        conditional inclusion (6.10.1),
     166) Because the controlling constant expression is evaluated during translation phase 4, all identifiers
          either are or are not macro names -- there simply are no keywords, enumeration constants, etc.
 
-[page 161] (Contents)
+[page 162] (Contents)
 
     predefined or if it has been the subject of a #define preprocessing directive without an
     intervening #undef directive with the same subject identifier), 0 if it is not.
@@ -7079,10 +7121,10 @@ Forward references:        conditional inclusion (6.10.1),
          translation phase 7.
     168) Thus, the constant expression in the following #if directive and if statement is not guaranteed to
          evaluate to the same value in these two contexts.
-           #if 'z' - 'a' == 25
-           if ('z' - 'a' == 25)
+            #if 'z' - 'a' == 25
+            if ('z' - 'a' == 25)
 
-[page 162] (Contents)
+[page 163] (Contents)
 
 5   Preprocessing directives of the forms
        # ifdef identifier new-line groupopt
@@ -7121,7 +7163,7 @@ Forward references:        conditional inclusion (6.10.1),
          before the terminating new-line character. However, comments may appear anywhere in a source file,
          including within a preprocessing directive.
 
-[page 163] (Contents)
+[page 164] (Contents)
 
     for in an implementation-defined manner. If this search is not supported, or if the search
     fails, the directive is reprocessed as if it read
@@ -7146,8 +7188,8 @@ Forward references:        conditional inclusion (6.10.1),
     because of a #include directive in another file, up to an implementation-defined
     nesting limit (see 5.2.4.1).
 7   EXAMPLE 1       The most common uses of #include preprocessing directives are as in the following:
-             #include <stdio.h>
-             #include "myprog.h"
+              #include <stdio.h>
+              #include "myprog.h"
 
 
 
@@ -7155,17 +7197,17 @@ Forward references:        conditional inclusion (6.10.1),
     170) Note that adjacent string literals are not concatenated into a single string literal (see the translation
          phases in 5.1.1.2); thus, an expansion that results in two string literals is an invalid directive.
 
-[page 164] (Contents)
+[page 165] (Contents)
 
-8   EXAMPLE 2      This illustrates macro-replaced #include directives:
-              #if VERSION == 1
-                    #define INCFILE          "vers1.h"
-              #elif VERSION == 2
-                    #define INCFILE          "vers2.h"        // and so on
-              #else
-                     #define INCFILE         "versN.h"
-              #endif
-              #include INCFILE
+8   EXAMPLE 2     This illustrates macro-replaced #include directives:
+           #if VERSION == 1
+                 #define INCFILE            "vers1.h"
+           #elif VERSION == 2
+                 #define INCFILE            "vers2.h"        // and so on
+           #else
+                  #define INCFILE           "versN.h"
+           #endif
+           #include INCFILE
 
     Forward references: macro replacement (6.10.3).
     6.10.3 Macro replacement
@@ -7197,7 +7239,7 @@ Forward references:        conditional inclusion (6.10.1),
     name space for macro names. Any white-space characters preceding or following the
     replacement list of preprocessing tokens are not considered part of the replacement list
 
-[page 165] (Contents)
+[page 166] (Contents)
 
      for either form of macro.
 8    If a # preprocessing token, followed by an identifier, occurs lexically at the point at which
@@ -7238,7 +7280,7 @@ Forward references:        conditional inclusion (6.10.1),
           are never scanned for macro names or parameters.
      172) Despite the name, a non-directive is a preprocessing directive.
 
-[page 166] (Contents)
+[page 167] (Contents)
 
     the variable arguments. The number of arguments so combined is such that, following
     merger, the number of arguments is one more than the number of parameters in the macro
@@ -7275,7 +7317,7 @@ Forward references:        conditional inclusion (6.10.1),
     string literal corresponding to an empty argument is "". The order of evaluation of # and
     ## operators is unspecified.
 
-[page 167] (Contents)
+[page 168] (Contents)
 
     6.10.3.3 The ## operator
     Constraints
@@ -7317,7 +7359,7 @@ Forward references:        conditional inclusion (6.10.1),
     173) Placemarker preprocessing tokens do not appear in the syntax because they are temporary entities that
          exist only within translation phase 4.
 
-[page 168] (Contents)
+[page 169] (Contents)
 
     6.10.3.4 Rescanning and further replacement
 1   After all parameters in the replacement list have been substituted and # and ##
@@ -7333,43 +7375,56 @@ Forward references:        conditional inclusion (6.10.1),
 3   The resulting completely macro-replaced preprocessing token sequence is not processed
     as a preprocessing directive even if it resembles one, but all pragma unary operator
     expressions within it are then processed as specified in 6.10.9 below.
+4   EXAMPLE There are cases where it is not clear whether a replacement is nested or not. For example,
+    given the following macro definitions:
+            #define f(a) a*g
+            #define g(a) f(a)
+    the invocation
+            f(2)(9)
+    may expand to either
+            2*f(9)
+    or
+            2*9*g
+    Strictly conforming programs are not permitted to depend on such unspecified behavior.
+
     6.10.3.5 Scope of macro definitions
 1   A macro definition lasts (independent of block structure) until a corresponding #undef
     directive is encountered or (if none is encountered) until the end of the preprocessing
     translation unit. Macro definitions have no significance after translation phase 4.
 2   A preprocessing directive of the form
-       # undef identifier new-line
+         # undef identifier new-line
     causes the specified identifier no longer to be defined as a macro name. It is ignored if
     the specified identifier is not currently defined as a macro name.
-3   EXAMPLE 1      The simplest use of this facility is to define a ''manifest constant'', as in
+3   EXAMPLE 1        The simplest use of this facility is to define a ''manifest constant'', as in
             #define TABSIZE 100
-            int table[TABSIZE];
+
+[page 170] (Contents)
+
+             int table[TABSIZE];
 
 4   EXAMPLE 2 The following defines a function-like macro whose value is the maximum of its arguments.
     It has the advantages of working for any compatible types of the arguments and of generating in-line code
     without the overhead of function calling. It has the disadvantages of evaluating one or the other of its
     arguments a second time (including side effects) and generating more code than a function if invoked
     several times. It also cannot have its address taken, as it has none.
-            #define max(a, b) ((a) > (b) ? (a) : (b))
+             #define max(a, b) ((a) > (b) ? (a) : (b))
     The parentheses ensure that the arguments and the resulting expression are bound properly.
 
-[page 169] (Contents)
-
-5   EXAMPLE 3     To illustrate the rules for redefinition and reexamination, the sequence
-             #define   x         3
-             #define   f(a)      f(x * (a))
-             #undef    x
-             #define   x         2
-             #define   g         f
-             #define   z         z[0]
-             #define   h         g(~
-             #define   m(a)      a(w)
-             #define   w         0,1
-             #define   t(a)      a
-             #define   p()       int
-             #define   q(x)      x
-             #define   r(x,y)    x ## y
-             #define   str(x)    # x
+5   EXAMPLE 3      To illustrate the rules for redefinition and reexamination, the sequence
+             #define    x          3
+             #define    f(a)       f(x * (a))
+             #undef     x
+             #define    x          2
+             #define    g          f
+             #define    z          z[0]
+             #define    h          g(~
+             #define    m(a)       a(w)
+             #define    w          0,1
+             #define    t(a)       a
+             #define    p()        int
+             #define    q(x)       x
+             #define    r(x,y)     x ## y
+             #define    str(x)     # x
              f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);
              g(x+(3,4)-w) | h 5) & m
                    (f)^m(m);
@@ -7381,7 +7436,7 @@ Forward references:        conditional inclusion (6.10.1),
              int i[] = { 1, 23, 4, 5, };
              char c[2][6] = { "hello", "" };
 
-6   EXAMPLE 4     To illustrate the rules for creating character string literals and concatenating tokens, the
+6   EXAMPLE 4      To illustrate the rules for creating character string literals and concatenating tokens, the
     sequence
              #define str(s)      # s
              #define xstr(s)     str(s)
@@ -7392,6 +7447,9 @@ Forward references:        conditional inclusion (6.10.1),
              #define xglue(a, b) glue(a, b)
              #define HIGHLOW     "hello"
              #define LOW         LOW ", world"
+
+[page 171] (Contents)
+
              debug(1, 2);
              fputs(str(strncmp("abc\0d", "abc", '\4') // this goes away
                    == 0) str(: @\n), s);
@@ -7399,9 +7457,6 @@ Forward references:        conditional inclusion (6.10.1),
              glue(HIGH, LOW);
              xglue(HIGH, LOW)
     results in
-
-[page 170] (Contents)
-
              printf("x" "1" "= %d, x" "2" "= %s", x1, x2);
              fputs(
                "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0" ": @\n",
@@ -7441,6 +7496,9 @@ Forward references:        conditional inclusion (6.10.1),
              #define      FUNC_LIKE(b) ( b ) // different parameter spelling
 
 9   EXAMPLE 7        Finally, to show the variable argument list macro facilities:
+
+[page 172] (Contents)
+
              #define debug(...)       fprintf(stderr, __VA_ARGS__)
              #define showlist(...)    puts(#__VA_ARGS__)
              #define report(test, ...) ((test)?puts(#test):\
@@ -7449,9 +7507,6 @@ Forward references:        conditional inclusion (6.10.1),
              debug("X = %d\n", x);
              showlist(The first, second, and third items.);
              report(x>y, "x is %d but y is %d", x, y);
-
-[page 171] (Contents)
-
     results in
              fprintf(stderr, "Flag" );
              fprintf(stderr, "X = %d\n", x );
@@ -7484,7 +7539,7 @@ Forward references:        conditional inclusion (6.10.1),
     tokens). The directive resulting after all replacements shall match one of the two
     previous forms and is then processed as appropriate.
 
-[page 172] (Contents)
+[page 173] (Contents)
 
     6.10.5 Error directive
     Semantics
@@ -7523,7 +7578,7 @@ Forward references:        conditional inclusion (6.10.1),
          but is not required to.
     175) See ''future language directions'' (6.11.8).
 
-[page 173] (Contents)
+[page 174] (Contents)
 
     6.10.7 Null directive
     Semantics
@@ -7561,14 +7616,14 @@ Forward references:        conditional inclusion (6.10.1),
     176) See ''future language directions'' (6.11.9).
     177) The presumed source file name and line number can be changed by the #line directive.
 
-[page 174] (Contents)
+[page 175] (Contents)
 
     __STDC_VERSION__ The integer constant 201ymmL.178)
     __TIME__ The time of translation of the preprocessing translation unit: a character
                string literal of the form "hh:mm:ss" as in the time generated by the
                asctime function. If the time of translation is not available, an
                implementation-defined valid time shall be supplied.
-    Forward references: the asctime function (7.26.3.1).
+    Forward references: the asctime function (7.27.3.1).
     6.10.8.2 Environment macros
 1   The following macro names are conditionally defined by the implementation:
     __STDC_ISO_10646__ An integer constant of the form yyyymmL (for example,
@@ -7591,7 +7646,7 @@ Forward references:        conditional inclusion (6.10.1),
               char32_t are UTF-32 encoded. If some other encoding is used, the
               macro shall not be defined and the actual encoding used is implementation-
               defined.
-    Forward references: common definitions (7.19), unicode utilities (7.27).
+    Forward references: common definitions (7.19), unicode utilities (7.28).
 
 
 
@@ -7601,7 +7656,7 @@ Forward references:        conditional inclusion (6.10.1),
          remain an integer constant of type long int that is increased with each revision of this International
          Standard.
 
-[page 175] (Contents)
+[page 176] (Contents)
 
     6.10.8.3 Conditional feature macros
 1   The following macro names are conditionally defined by the implementation:
@@ -7614,47 +7669,50 @@ Forward references:        conditional inclusion (6.10.1),
               arithmetic).
     __STDC_LIB_EXT1__ The integer constant 201ymmL, intended to indicate support
               for the extensions defined in annex K (Bounds-checking interfaces).179)
+    __STDC_NO_ATOMICS__ The integer constant 1, intended to indicate that the
+              implementation does not support atomic types (including the _Atomic
+              type qualifier) and the <stdatomic.h> header.
     __STDC_NO_COMPLEX__ The integer constant 1, intended to indicate that the
               implementation does not support complex types or the <complex.h>
               header.
     __STDC_NO_THREADS__ The integer constant 1, intended to indicate that the
-              implementation does not support atomic types (including the _Atomic
-              type qualifier and the <stdatomic.h> header) or the <threads.h>
-              header.
+              implementation does not support the <threads.h> header.
     __STDC_NO_VLA__ The integer constant 1, intended to indicate that the
               implementation does not support variable length arrays or variably
               modified types.
 2   An implementation that defines __STDC_NO_COMPLEX__ shall not define
     __STDC_IEC_559_COMPLEX__.
-    6.10.9 Pragma operator
-    Semantics
-1   A unary operator expression of the form:
-       _Pragma ( string-literal )
-    is processed as follows: The string literal is destringized by deleting the L prefix, if
-    present, deleting the leading and trailing double-quotes, replacing each escape sequence
-    \" by a double-quote, and replacing each escape sequence \\ by a single backslash. The
-    resulting sequence of characters is processed through translation phase 3 to produce
-    preprocessing tokens that are executed as if they were the pp-tokens in a pragma
+
+
 
 
     179) The intention is that this will remain an integer constant of type long int that is increased with
          each revision of this International Standard.
 
-[page 176] (Contents)
+[page 177] (Contents)
 
+    6.10.9 Pragma operator
+    Semantics
+1   A unary operator expression of the form:
+       _Pragma ( string-literal )
+    is processed as follows: The string literal is destringized by deleting any encoding prefix,
+    deleting the leading and trailing double-quotes, replacing each escape sequence \" by a
+    double-quote, and replacing each escape sequence \\ by a single backslash. The
+    resulting sequence of characters is processed through translation phase 3 to produce
+    preprocessing tokens that are executed as if they were the pp-tokens in a pragma
     directive. The original four preprocessing tokens in the unary operator expression are
     removed.
 2   EXAMPLE       A directive of the form:
-              #pragma listing on "..\listing.dir"
+             #pragma listing on "..\listing.dir"
     can also be expressed as:
-              _Pragma ( "listing on \"..\\listing.dir\"" )
+             _Pragma ( "listing on \"..\\listing.dir\"" )
     The latter form is processed in the same way whether it appears literally as shown, or results from macro
     replacement, as in:
-              #define LISTING(x) PRAGMA(listing on #x)
-              #define PRAGMA(x) _Pragma(#x)
-              LISTING ( ..\listing.dir )
+             #define LISTING(x) PRAGMA(listing on #x)
+             #define PRAGMA(x) _Pragma(#x)
+             LISTING ( ..\listing.dir )
 
-[page 177] (Contents)
+[page 178] (Contents)
 
     6.11 Future language directions
     6.11.1 Floating types
@@ -7684,7 +7742,7 @@ Forward references:        conditional inclusion (6.10.1),
     6.11.9 Predefined macro names
 1   Macro names beginning with __STDC_ are reserved for future standardization.
 
-[page 178] (Contents)
+[page 179] (Contents)
 
 
     7. Library
@@ -7716,13 +7774,13 @@ Forward references:        conditional inclusion (6.10.1),
 
 
     180) The functions that make use of the decimal-point character are the numeric conversion functions
-         (7.22.1, 7.28.4.1) and the formatted input/output functions (7.21.6, 7.28.2).
+         (7.22.1, 7.29.4.1) and the formatted input/output functions (7.21.6, 7.29.2).
     181) For state-dependent encodings, the values for MB_CUR_MAX and MB_LEN_MAX shall thus be large
          enough to count all the bytes in any complete multibyte character plus at least one adjacent shift
          sequence of maximum length. Whether these counts provide for more than one shift sequence is the
          implementation's choice.
 
-[page 179] (Contents)
+[page 180] (Contents)
 
     7.1.2 Standard headers
 1   Each library function is declared, with a type that includes a prototype, in a header,182)
@@ -7731,13 +7789,16 @@ Forward references:        conditional inclusion (6.10.1),
     needed to facilitate their use. Declarations of types described in this clause shall not
     include type qualifiers, unless explicitly stated otherwise.
 2   The standard headers are183)
-           <assert.h>             <iso646.h>              <stdarg.h>              <string.h>
-           <complex.h>            <limits.h>              <stdatomic.h>           <tgmath.h>
-           <ctype.h>              <locale.h>              <stdbool.h>             <threads.h>
-           <errno.h>              <math.h>                <stddef.h>              <time.h>
-           <fenv.h>               <setjmp.h>              <stdint.h>              <uchar.h>
-           <float.h>              <signal.h>              <stdio.h>               <wchar.h>
-           <inttypes.h>           <stdalign.h>            <stdlib.h>              <wctype.h>
+           <assert.h>                     <math.h>                        <stdlib.h>
+           <complex.h>                    <setjmp.h>                      <stdnoreturn.h>
+           <ctype.h>                      <signal.h>                      <string.h>
+           <errno.h>                      <stdalign.h>                    <tgmath.h>
+           <fenv.h>                       <stdarg.h>                      <threads.h>
+           <float.h>                      <stdatomic.h>                   <time.h>
+           <inttypes.h>                   <stdbool.h>                     <uchar.h>
+           <iso646.h>                     <stddef.h>                      <wchar.h>
+           <limits.h>                     <stdint.h>                      <wctype.h>
+           <locale.h>                     <stdio.h>
 3   If a file with the same name as one of the above < and > delimited sequences, not
     provided as part of the implementation, is placed in any of the standard places that are
     searched for included source files, the behavior is undefined.
@@ -7749,23 +7810,21 @@ Forward references:        conditional inclusion (6.10.1),
     declares, or to any of the types or macros it defines. However, if an identifier is declared
     or defined in more than one header, the second and subsequent associated headers may be
     included after the initial reference to the identifier. The program shall not have any
-    macros with names lexically identical to keywords currently defined prior to the
-    inclusion.
+    macros with names lexically identical to keywords currently defined prior to the inclusion
+    of the header or when any macro defined in the header is expanded.
 5   Any definition of an object-like macro described in this clause shall expand to code that is
     fully protected by parentheses where necessary, so that it groups in an arbitrary
     expression as if it were a single identifier.
-6   Any declaration of a library function shall have external linkage.
-
-
 
 
     182) A header is not necessarily a source file, nor are the < and > delimited sequences in header names
          necessarily valid source file names.
-    183) The headers <complex.h>, <stdatomic.h>, and <threads.h> are conditional features that
+    183) The headers <complex.h>, <stdatomic.h>, and <threads.h> are conditional features that
          implementations need not support; see 6.10.8.3.
 
-[page 180] (Contents)
+[page 181] (Contents)
 
+6   Any declaration of a library function shall have external linkage.
 7   A summary of the contents of the standard headers is given in annex B.
     Forward references: diagnostics (7.2).
     7.1.3 Reserved identifiers
@@ -7798,7 +7857,7 @@ Forward references:        conditional inclusion (6.10.1),
     184) The list of reserved identifiers with external linkage includes math_errhandling, setjmp,
          va_copy, and va_end.
 
-[page 181] (Contents)
+[page 182] (Contents)
 
     7.1.4 Use of library functions
 1   Each of the following statements applies unless explicitly stated otherwise in the detailed
@@ -7833,16 +7892,16 @@ Forward references:        conditional inclusion (6.10.1),
          implementations may provide special semantics for such names. For example, the identifier
          _BUILTIN_abs could be used to indicate generation of in-line code for the abs function. Thus, the
          appropriate header could specify
-                   #define abs(x) _BUILTIN_abs(x)
-          for a compiler whose code generator will accept it.
-          In this manner, a user desiring to guarantee that a given library function such as abs will be a genuine
-          function may write
-                   #undef abs
-          whether the implementation's header provides a macro implementation of abs or a built-in
-          implementation. The prototype for the function, which precedes and is hidden by any macro
-          definition, is thereby revealed also.
+                  #define abs(x) _BUILTIN_abs(x)
+         for a compiler whose code generator will accept it.
+         In this manner, a user desiring to guarantee that a given library function such as abs will be a genuine
+         function may write
+                  #undef abs
+         whether the implementation's header provides a macro implementation of abs or a built-in
+         implementation. The prototype for the function, which precedes and is hidden by any macro
+         definition, is thereby revealed also.
 
-[page 182] (Contents)
+[page 183] (Contents)
 
     integer constant expressions shall additionally be suitable for use in #if preprocessing
     directives.
@@ -7876,10 +7935,12 @@ Forward references:        conditional inclusion (6.10.1),
     188) Thus, a signal handler cannot, in general, call standard library functions.
     189) This means, for example, that an implementation is not permitted to use a static object for internal
          purposes without synchronization because it could cause a data race even in programs that do not
-         explicitly share objects between threads.
+         explicitly share objects between threads. Similarly, an implementation of memcpy is not permitted to
+         copy bytes beyond the specified length of the destination object and then restore the original values
+         because it could cause a data race if the program shared those bytes between threads.
     190) This allows implementations to parallelize operations if there are no visible side effects.
 
-[page 183] (Contents)
+[page 184] (Contents)
 
             #include <stdlib.h>
             #undef atoi
@@ -7897,7 +7958,7 @@ Forward references:        conditional inclusion (6.10.1),
             /* ... */
             i = atoi(str);
 
-[page 184] (Contents)
+[page 185] (Contents)
 
     7.2 Diagnostics <assert.h>
 1   The header <assert.h> defines the assert and static_assert macros and
@@ -7933,15 +7994,15 @@ Forward references:        conditional inclusion (6.10.1),
 
 
     191) The message written might be of the form:
-         Assertion failed: expression, function abc, file xyz, line nnn.
+          Assertion failed: expression, function abc, file xyz, line nnn.
 
-[page 185] (Contents)
+[page 186] (Contents)
 
     Returns
 3   The assert macro returns no value.
     Forward references: the abort function (7.22.4.1).
 
-[page 186] (Contents)
+[page 187] (Contents)
 
     7.3 Complex arithmetic <complex.h>
     7.3.1 Introduction
@@ -7973,11 +8034,11 @@ Forward references:        conditional inclusion (6.10.1),
 7   Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then
     redefine the macros complex, imaginary, and I.
 
-    192) See ''future library directions'' (7.30.1).
+    192) See ''future library directions'' (7.31.1).
     193) The imaginary unit is a number i such that i 2 = -1.
     194) A specification for imaginary types is in informative annex G.
 
-[page 187] (Contents)
+[page 188] (Contents)
 
     Forward references: IEC 60559-compatible complex arithmetic (annex G).
     7.3.2 Conventions
@@ -8001,8 +8062,8 @@ Forward references:        conditional inclusion (6.10.1),
     so the cut maps to the positive imaginary axis.
     7.3.4 The CX_LIMITED_RANGE pragma
     Synopsis
-1          #include <complex.h>
-           #pragma STDC CX_LIMITED_RANGE on-off-switch
+1            #include <complex.h>
+             #pragma STDC CX_LIMITED_RANGE on-off-switch
     Description
 2   The usual mathematical formulas for complex multiply, divide, and absolute value are
     problematic because of their treatment of infinities and because of undue overflow and
@@ -8017,17 +8078,17 @@ Forward references:        conditional inclusion (6.10.1),
     compound statement), or until the end of the compound statement; at the end of a
     compound statement the state for the pragma is restored to its condition just before the
 
-[page 188] (Contents)
+[page 189] (Contents)
 
     compound statement. If this pragma is used in any other context, the behavior is
     undefined. The default state for the pragma is ''off''.
     7.3.5 Trigonometric functions
     7.3.5.1 The cacos functions
     Synopsis
-1           #include <complex.h>
-            double complex cacos(double complex z);
-            float complex cacosf(float complex z);
-            long double complex cacosl(long double complex z);
+1            #include <complex.h>
+             double complex cacos(double complex z);
+             float complex cacosf(float complex z);
+             long double complex cacosl(long double complex z);
     Description
 2   The cacos functions compute the complex arc cosine of z, with branch cuts outside the
     interval [-1, +1] along the real axis.
@@ -8037,10 +8098,10 @@ Forward references:        conditional inclusion (6.10.1),
     real axis.
     7.3.5.2 The casin functions
     Synopsis
-1           #include <complex.h>
-            double complex casin(double complex z);
-            float complex casinf(float complex z);
-            long double complex casinl(long double complex z);
+1            #include <complex.h>
+             double complex casin(double complex z);
+             float complex casinf(float complex z);
+             long double complex casinl(long double complex z);
     Description
 2   The casin functions compute the complex arc sine of z, with branch cuts outside the
     interval [-1, +1] along the real axis.
@@ -8049,21 +8110,21 @@ Forward references:        conditional inclusion (6.10.1),
     mathematically unbounded along the imaginary axis and in the interval [-pi /2, +pi /2]
 
     195) The purpose of the pragma is to allow the implementation to use the formulas:
-            (x + iy) x (u + iv) = (xu - yv) + i(yu + xv)
-            (x + iy) / (u + iv) = [(xu + yv) + i(yu - xv)]/(u2 + v 2 )
-            | x + iy | = (sqrt) x 2 + y 2
-                         -----
-         where the programmer can determine they are safe.
+             (x + iy) x (u + iv) = (xu - yv) + i(yu + xv)
+             (x + iy) / (u + iv) = [(xu + yv) + i(yu - xv)]/(u2 + v 2 )
+             | x + iy | = (sqrt) x 2 + y 2
+                          -----
+          where the programmer can determine they are safe.
 
-[page 189] (Contents)
+[page 190] (Contents)
 
     along the real axis.
     7.3.5.3 The catan functions
     Synopsis
-1          #include <complex.h>
-           double complex catan(double complex z);
-           float complex catanf(float complex z);
-           long double complex catanl(long double complex z);
+1           #include <complex.h>
+            double complex catan(double complex z);
+            float complex catanf(float complex z);
+            long double complex catanl(long double complex z);
     Description
 2   The catan functions compute the complex arc tangent of z, with branch cuts outside the
     interval [-i, +i] along the imaginary axis.
@@ -8073,33 +8134,33 @@ Forward references:        conditional inclusion (6.10.1),
     along the real axis.
     7.3.5.4 The ccos functions
     Synopsis
-1          #include <complex.h>
-           double complex ccos(double complex z);
-           float complex ccosf(float complex z);
-           long double complex ccosl(long double complex z);
+1           #include <complex.h>
+            double complex ccos(double complex z);
+            float complex ccosf(float complex z);
+            long double complex ccosl(long double complex z);
     Description
 2   The ccos functions compute the complex cosine of z.
     Returns
 3   The ccos functions return the complex cosine value.
     7.3.5.5 The csin functions
     Synopsis
-1          #include <complex.h>
-           double complex csin(double complex z);
-           float complex csinf(float complex z);
-           long double complex csinl(long double complex z);
+1           #include <complex.h>
+            double complex csin(double complex z);
+            float complex csinf(float complex z);
+            long double complex csinl(long double complex z);
     Description
 2   The csin functions compute the complex sine of z.
 
-[page 190] (Contents)
+[page 191] (Contents)
 
     Returns
 3   The csin functions return the complex sine value.
     7.3.5.6 The ctan functions
     Synopsis
-1           #include <complex.h>
-            double complex ctan(double complex z);
-            float complex ctanf(float complex z);
-            long double complex ctanl(long double complex z);
+1          #include <complex.h>
+           double complex ctan(double complex z);
+           float complex ctanf(float complex z);
+           long double complex ctanl(long double complex z);
     Description
 2   The ctan functions compute the complex tangent of z.
     Returns
@@ -8107,10 +8168,10 @@ Forward references:        conditional inclusion (6.10.1),
     7.3.6 Hyperbolic functions
     7.3.6.1 The cacosh functions
     Synopsis
-1           #include <complex.h>
-            double complex cacosh(double complex z);
-            float complex cacoshf(float complex z);
-            long double complex cacoshl(long double complex z);
+1          #include <complex.h>
+           double complex cacosh(double complex z);
+           float complex cacoshf(float complex z);
+           long double complex cacoshl(long double complex z);
     Description
 2   The cacosh functions compute the complex arc hyperbolic cosine of z, with a branch
     cut at values less than 1 along the real axis.
@@ -8120,12 +8181,12 @@ Forward references:        conditional inclusion (6.10.1),
     imaginary axis.
     7.3.6.2 The casinh functions
     Synopsis
-1           #include <complex.h>
-            double complex casinh(double complex z);
-            float complex casinhf(float complex z);
-            long double complex casinhl(long double complex z);
+1          #include <complex.h>
+           double complex casinh(double complex z);
+           float complex casinhf(float complex z);
+           long double complex casinhl(long double complex z);
 
-[page 191] (Contents)
+[page 192] (Contents)
 
     Description
 2   The casinh functions compute the complex arc hyperbolic sine of z, with branch cuts
@@ -8136,10 +8197,10 @@ Forward references:        conditional inclusion (6.10.1),
     along the imaginary axis.
     7.3.6.3 The catanh functions
     Synopsis
-1          #include <complex.h>
-           double complex catanh(double complex z);
-           float complex catanhf(float complex z);
-           long double complex catanhl(long double complex z);
+1           #include <complex.h>
+            double complex catanh(double complex z);
+            float complex catanhf(float complex z);
+            long double complex catanhl(long double complex z);
     Description
 2   The catanh functions compute the complex arc hyperbolic tangent of z, with branch
     cuts outside the interval [-1, +1] along the real axis.
@@ -8149,33 +8210,33 @@ Forward references:        conditional inclusion (6.10.1),
     along the imaginary axis.
     7.3.6.4 The ccosh functions
     Synopsis
-1          #include <complex.h>
-           double complex ccosh(double complex z);
-           float complex ccoshf(float complex z);
-           long double complex ccoshl(long double complex z);
+1           #include <complex.h>
+            double complex ccosh(double complex z);
+            float complex ccoshf(float complex z);
+            long double complex ccoshl(long double complex z);
     Description
 2   The ccosh functions compute the complex hyperbolic cosine of z.
     Returns
 3   The ccosh functions return the complex hyperbolic cosine value.
 
-[page 192] (Contents)
+[page 193] (Contents)
 
     7.3.6.5 The csinh functions
     Synopsis
-1           #include <complex.h>
-            double complex csinh(double complex z);
-            float complex csinhf(float complex z);
-            long double complex csinhl(long double complex z);
+1          #include <complex.h>
+           double complex csinh(double complex z);
+           float complex csinhf(float complex z);
+           long double complex csinhl(long double complex z);
     Description
 2   The csinh functions compute the complex hyperbolic sine of z.
     Returns
 3   The csinh functions return the complex hyperbolic sine value.
     7.3.6.6 The ctanh functions
     Synopsis
-1           #include <complex.h>
-            double complex ctanh(double complex z);
-            float complex ctanhf(float complex z);
-            long double complex ctanhl(long double complex z);
+1          #include <complex.h>
+           double complex ctanh(double complex z);
+           float complex ctanhf(float complex z);
+           long double complex ctanhl(long double complex z);
     Description
 2   The ctanh functions compute the complex hyperbolic tangent of z.
     Returns
@@ -8183,23 +8244,23 @@ Forward references:        conditional inclusion (6.10.1),
     7.3.7 Exponential and logarithmic functions
     7.3.7.1 The cexp functions
     Synopsis
-1           #include <complex.h>
-            double complex cexp(double complex z);
-            float complex cexpf(float complex z);
-            long double complex cexpl(long double complex z);
+1          #include <complex.h>
+           double complex cexp(double complex z);
+           float complex cexpf(float complex z);
+           long double complex cexpl(long double complex z);
     Description
 2   The cexp functions compute the complex base-e exponential of z.
     Returns
 3   The cexp functions return the complex base-e exponential value.
 
-[page 193] (Contents)
+[page 194] (Contents)
 
     7.3.7.2 The clog functions
     Synopsis
-1          #include <complex.h>
-           double complex clog(double complex z);
-           float complex clogf(float complex z);
-           long double complex clogl(long double complex z);
+1           #include <complex.h>
+            double complex clog(double complex z);
+            float complex clogf(float complex z);
+            long double complex clogl(long double complex z);
     Description
 2   The clog functions compute the complex natural (base-e) logarithm of z, with a branch
     cut along the negative real axis.
@@ -8210,10 +8271,10 @@ Forward references:        conditional inclusion (6.10.1),
     7.3.8 Power and absolute-value functions
     7.3.8.1 The cabs functions
     Synopsis
-1          #include <complex.h>
-           double cabs(double complex z);
-           float cabsf(float complex z);
-           long double cabsl(long double complex z);
+1           #include <complex.h>
+            double cabs(double complex z);
+            float cabsf(float complex z);
+            long double cabsl(long double complex z);
     Description
 2   The cabs functions compute the complex absolute value (also called norm, modulus, or
     magnitude) of z.
@@ -8221,13 +8282,13 @@ Forward references:        conditional inclusion (6.10.1),
 3   The cabs functions return the complex absolute value.
     7.3.8.2 The cpow functions
     Synopsis
-1          #include <complex.h>
-           double complex cpow(double complex x, double complex y);
-           float complex cpowf(float complex x, float complex y);
-           long double complex cpowl(long double complex x,
-                long double complex y);
+1           #include <complex.h>
+            double complex cpow(double complex x, double complex y);
+            float complex cpowf(float complex x, float complex y);
+            long double complex cpowl(long double complex x,
+                 long double complex y);
 
-[page 194] (Contents)
+[page 195] (Contents)
 
     Description
 2   The cpow functions compute the complex power function xy , with a branch cut for the
@@ -8236,10 +8297,10 @@ Forward references:        conditional inclusion (6.10.1),
 3   The cpow functions return the complex power function value.
     7.3.8.3 The csqrt functions
     Synopsis
-1           #include <complex.h>
-            double complex csqrt(double complex z);
-            float complex csqrtf(float complex z);
-            long double complex csqrtl(long double complex z);
+1          #include <complex.h>
+           double complex csqrt(double complex z);
+           float complex csqrtf(float complex z);
+           long double complex csqrtl(long double complex z);
     Description
 2   The csqrt functions compute the complex square root of z, with a branch cut along the
     negative real axis.
@@ -8249,64 +8310,62 @@ Forward references:        conditional inclusion (6.10.1),
     7.3.9 Manipulation functions
     7.3.9.1 The carg functions
     Synopsis
-1           #include <complex.h>
-            double carg(double complex z);
-            float cargf(float complex z);
-            long double cargl(long double complex z);
+1          #include <complex.h>
+           double carg(double complex z);
+           float cargf(float complex z);
+           long double cargl(long double complex z);
     Description
 2   The carg functions compute the argument (also called phase angle) of z, with a branch
     cut along the negative real axis.
     Returns
 3   The carg functions return the value of the argument in the interval [-pi , +pi ].
 
-[page 195] (Contents)
+[page 196] (Contents)
 
     7.3.9.2 The cimag functions
     Synopsis
-1          #include <complex.h>
-           double cimag(double complex z);
-           float cimagf(float complex z);
-           long double cimagl(long double complex z);
+1           #include <complex.h>
+            double cimag(double complex z);
+            float cimagf(float complex z);
+            long double cimagl(long double complex z);
     Description
 2   The cimag functions compute the imaginary part of z.196)
     Returns
 3   The cimag functions return the imaginary part value (as a real).
     7.3.9.3 The CMPLX macros
     Synopsis
-1          #include <complex.h>
-           double complex CMPLX(double x, double y);
-           float complex CMPLXF(float x, float y);
-           long double complex CMPLXL(long double x, long double y);
+1           #include <complex.h>
+            double complex CMPLX(double x, double y);
+            float complex CMPLXF(float x, float y);
+            long double complex CMPLXL(long double x, long double y);
     Description
 2   The CMPLX macros expand to an expression of the specified complex type, with the real
     part having the (converted) value of x and the imaginary part having the (converted)
-    value of y.
-    Recommended practice
-3   The resulting expression should be suitable for use as an initializer for an object with
-    static or thread storage duration, provided both arguments are likewise suitable.
+    value of y. The resulting expression shall be suitable for use as an initializer for an object
+    with static or thread storage duration, provided both arguments are likewise suitable.
     Returns
-4   The CMPLX macros return the complex value x + i y.
-5   NOTE    These macros act as if the implementation supported imaginary types and the definitions were:
-          #define CMPLX(x, y)  ((double complex)((double)(x) + \
-                                        _Imaginary_I * (double)(y)))
-          #define CMPLXF(x, y) ((float complex)((float)(x) + \
-                                        _Imaginary_I * (float)(y)))
-          #define CMPLXL(x, y) ((long double complex)((long double)(x) + \
-                                        _Imaginary_I * (long double)(y)))
+3   The CMPLX macros return the complex value x + i y.
+4   NOTE    These macros act as if the implementation supported imaginary types and the definitions were:
+         #define CMPLX(x, y)  ((double complex)((double)(x) + \
+                                       _Imaginary_I * (double)(y)))
+         #define CMPLXF(x, y) ((float complex)((float)(x) + \
+                                       _Imaginary_I * (float)(y)))
+         #define CMPLXL(x, y) ((long double complex)((long double)(x) + \
+                                       _Imaginary_I * (long double)(y)))
 
 
 
 
     196) For a variable z of complex type, z == creal(z) + cimag(z)*I.
 
-[page 196] (Contents)
+[page 197] (Contents)
 
     7.3.9.4 The conj functions
     Synopsis
-1           #include <complex.h>
-            double complex conj(double complex z);
-            float complex conjf(float complex z);
-            long double complex conjl(long double complex z);
+1          #include <complex.h>
+           double complex conj(double complex z);
+           float complex conjf(float complex z);
+           long double complex conjl(long double complex z);
     Description
 2   The conj functions compute the complex conjugate of z, by reversing the sign of its
     imaginary part.
@@ -8314,28 +8373,28 @@ Forward references:        conditional inclusion (6.10.1),
 3   The conj functions return the complex conjugate value.
     7.3.9.5 The cproj functions
     Synopsis
-1           #include <complex.h>
-            double complex cproj(double complex z);
-            float complex cprojf(float complex z);
-            long double complex cprojl(long double complex z);
+1          #include <complex.h>
+           double complex cproj(double complex z);
+           float complex cprojf(float complex z);
+           long double complex cprojl(long double complex z);
     Description
 2   The cproj functions compute a projection of z onto the Riemann sphere: z projects to
     z except that all complex infinities (even those with one infinite part and one NaN part)
     project to positive infinity on the real axis. If z has an infinite part, then cproj(z) is
     equivalent to
-            INFINITY + I * copysign(0.0, cimag(z))
+           INFINITY + I * copysign(0.0, cimag(z))
     Returns
 3   The cproj functions return the value of the projection onto the Riemann sphere.
     7.3.9.6 The creal functions
     Synopsis
-1           #include <complex.h>
-            double creal(double complex z);
-            float crealf(float complex z);
-            long double creall(long double complex z);
+1          #include <complex.h>
+           double creal(double complex z);
+           float crealf(float complex z);
+           long double creall(long double complex z);
     Description
 2   The creal functions compute the real part of z.197)
 
-[page 197] (Contents)
+[page 198] (Contents)
 
     Returns
 3   The creal functions return the real part value.
@@ -8345,7 +8404,7 @@ Forward references:        conditional inclusion (6.10.1),
 
     197) For a variable z of complex type, z == creal(z) + cimag(z)*I.
 
-[page 198] (Contents)
+[page 199] (Contents)
 
     7.4 Character handling <ctype.h>
 1   The header <ctype.h> declares several functions useful for classifying and mapping
@@ -8378,12 +8437,12 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-    198) See ''future library directions'' (7.30.2).
+    198) See ''future library directions'' (7.31.2).
     199) In an implementation that uses the seven-bit US ASCII character set, the printing characters are those
          whose values lie from 0x20 (space) through 0x7E (tilde); the control characters are those whose
          values lie from 0 (NUL) through 0x1F (US), and the character 0x7F (DEL).
 
-[page 199] (Contents)
+[page 200] (Contents)
 
     none of iscntrl, isdigit, ispunct, or isspace is true.200) In the "C" locale,
     isalpha returns true only for the characters for which isupper or islower is true.
@@ -8420,14 +8479,14 @@ Forward references:        conditional inclusion (6.10.1),
     200) The functions islower and isupper test true or false separately for each of these additional
          characters; all four combinations are possible.
 
-[page 200] (Contents)
+[page 201] (Contents)
 
     Description
 2   The isgraph function tests for any printing character except space (' ').
     7.4.1.7 The islower function
     Synopsis
-1           #include <ctype.h>
-            int islower(int c);
+1          #include <ctype.h>
+           int islower(int c);
     Description
 2   The islower function tests for any character that is a lowercase letter or is one of a
     locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
@@ -8435,14 +8494,14 @@ Forward references:        conditional inclusion (6.10.1),
     letters (as defined in 5.2.1).
     7.4.1.8 The isprint function
     Synopsis
-1           #include <ctype.h>
-            int isprint(int c);
+1          #include <ctype.h>
+           int isprint(int c);
     Description
 2   The isprint function tests for any printing character including space (' ').
     7.4.1.9 The ispunct function
     Synopsis
-1           #include <ctype.h>
-            int ispunct(int c);
+1          #include <ctype.h>
+           int ispunct(int c);
     Description
 2   The ispunct function tests for any printing character that is one of a locale-specific set
     of punctuation characters for which neither isspace nor isalnum is true. In the "C"
@@ -8450,21 +8509,21 @@ Forward references:        conditional inclusion (6.10.1),
     nor isalnum is true.
     7.4.1.10 The isspace function
     Synopsis
-1           #include <ctype.h>
-            int isspace(int c);
+1          #include <ctype.h>
+           int isspace(int c);
     Description
 2   The isspace function tests for any character that is a standard white-space character or
     is one of a locale-specific set of characters for which isalnum is false. The standard
 
-[page 201] (Contents)
+[page 202] (Contents)
 
     white-space characters are the following: space (' '), form feed ('\f'), new-line
     ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). In the
     "C" locale, isspace returns true only for the standard white-space characters.
     7.4.1.11 The isupper function
     Synopsis
-1          #include <ctype.h>
-           int isupper(int c);
+1           #include <ctype.h>
+            int isupper(int c);
     Description
 2   The isupper function tests for any character that is an uppercase letter or is one of a
     locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
@@ -8472,15 +8531,15 @@ Forward references:        conditional inclusion (6.10.1),
     letters (as defined in 5.2.1).
     7.4.1.12 The isxdigit function
     Synopsis
-1          #include <ctype.h>
-           int isxdigit(int c);
+1           #include <ctype.h>
+            int isxdigit(int c);
     Description
 2   The isxdigit function tests for any hexadecimal-digit character (as defined in 6.4.4.1).
     7.4.2 Character case mapping functions
     7.4.2.1 The tolower function
     Synopsis
-1          #include <ctype.h>
-           int tolower(int c);
+1           #include <ctype.h>
+            int tolower(int c);
     Description
 2   The tolower function converts an uppercase letter to a corresponding lowercase letter.
     Returns
@@ -8489,12 +8548,12 @@ Forward references:        conditional inclusion (6.10.1),
     the tolower function returns one of the corresponding characters (always the same one
     for any given locale); otherwise, the argument is returned unchanged.
 
-[page 202] (Contents)
+[page 203] (Contents)
 
     7.4.2.2 The toupper function
     Synopsis
-1           #include <ctype.h>
-            int toupper(int c);
+1          #include <ctype.h>
+           int toupper(int c);
     Description
 2   The toupper function converts a lowercase letter to a corresponding uppercase letter.
     Returns
@@ -8503,7 +8562,7 @@ Forward references:        conditional inclusion (6.10.1),
     the toupper function returns one of the corresponding characters (always the same one
     for any given locale); otherwise, the argument is returned unchanged.
 
-[page 203] (Contents)
+[page 204] (Contents)
 
     7.5 Errors <errno.h>
 1   The header <errno.h> defines several macros, all relating to the reporting of error
@@ -8536,9 +8595,9 @@ Forward references:        conditional inclusion (6.10.1),
          then inspect it before a subsequent library function call. Of course, a library function can save the
          value of errno on entry and then set it to zero, as long as the original value is restored if errno's
          value is still zero just before the return.
-    203) See ''future library directions'' (7.30.3).
+    203) See ''future library directions'' (7.31.3).
 
-[page 204] (Contents)
+[page 205] (Contents)
 
     7.6 Floating-point environment <fenv.h>
 1   The header <fenv.h> defines several macros, and declares types and functions that
@@ -8578,7 +8637,7 @@ Forward references:        conditional inclusion (6.10.1),
          unaware of them). The responsibilities associated with accessing the floating-point environment fall
          on the programmer or program that does so explicitly.
 
-[page 205] (Contents)
+[page 206] (Contents)
 
 6   Each of the macros
              FE_DIVBYZERO
@@ -8588,11 +8647,11 @@ Forward references:        conditional inclusion (6.10.1),
              FE_UNDERFLOW
     is defined if and only if the implementation supports the floating-point exception by
     means of the functions in 7.6.2.207) Additional implementation-defined floating-point
-    exceptions, with macro definitions beginning with FE_ and an uppercase letter, may also
-    be specified by the implementation. The defined macros expand to integer constant
+    exceptions, with macro definitions beginning with FE_ and an uppercase letter,208) may
+    also be specified by the implementation. The defined macros expand to integer constant
     expressions with values such that bitwise ORs of all combinations of the macros result in
     distinct values, and furthermore, bitwise ANDs of all combinations of the macros result in
-    zero.208)
+    zero.209)
 7   The macro
              FE_ALL_EXCEPT
     is simply the bitwise OR of all floating-point exception macros defined by the
@@ -8605,29 +8664,30 @@ Forward references:        conditional inclusion (6.10.1),
     is defined if and only if the implementation supports getting and setting the represented
     rounding direction by means of the fegetround and fesetround functions.
     Additional implementation-defined rounding directions, with macro definitions beginning
-    with FE_ and an uppercase letter, may also be specified by the implementation. The
+    with FE_ and an uppercase letter,210) may also be specified by the implementation. The
     defined macros expand to integer constant expressions whose values are distinct
-    nonnegative values.209)
-9   The macro
-
+    nonnegative values.211)
 
 
     207) The implementation supports a floating-point exception if there are circumstances where a call to at
          least one of the functions in 7.6.2, using the macro as the appropriate argument, will succeed. It is not
          necessary for all the functions to succeed all the time.
-    208) The macros should be distinct powers of two.
-    209) Even though the rounding direction macros may expand to constants corresponding to the values of
+    208) See ''future library directions'' (7.31.4).
+    209) The macros should be distinct powers of two.
+    210) See ''future library directions'' (7.31.4).
+    211) Even though the rounding direction macros may expand to constants corresponding to the values of
          FLT_ROUNDS, they are not required to do so.
 
-[page 206] (Contents)
+[page 207] (Contents)
 
+9    The macro
               FE_DFL_ENV
      represents the default floating-point environment -- the one installed at program startup
      -- and has type ''pointer to const-qualified fenv_t''. It can be used as an argument to
      <fenv.h> functions that manage the floating-point environment.
 10   Additional implementation-defined environments, with macro definitions beginning with
-     FE_ and an uppercase letter, and having type ''pointer to const-qualified fenv_t'', may
-     also be specified by the implementation.
+     FE_ and an uppercase letter,212) and having type ''pointer to const-qualified fenv_t'',
+     may also be specified by the implementation.
      7.6.1 The FENV_ACCESS pragma
      Synopsis
 1             #include <fenv.h>
@@ -8635,7 +8695,7 @@ Forward references:        conditional inclusion (6.10.1),
      Description
 2    The FENV_ACCESS pragma provides a means to inform the implementation when a
      program might access the floating-point environment to test floating-point status flags or
-     run under non-default floating-point control modes.210) The pragma shall occur either
+     run under non-default floating-point control modes.213) The pragma shall occur either
      outside external declarations or preceding all explicit declarations and statements inside a
      compound statement. When outside external declarations, the pragma takes effect from
      its occurrence until another FENV_ACCESS pragma is encountered, or until the end of
@@ -8654,13 +8714,13 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-
-     210) The purpose of the FENV_ACCESS pragma is to allow certain optimizations that could subvert flag
+     212) See ''future library directions'' (7.31.4).
+     213) The purpose of the FENV_ACCESS pragma is to allow certain optimizations that could subvert flag
           tests and mode changes (e.g., global common subexpression elimination, code motion, and constant
           folding). In general, if the state of FENV_ACCESS is ''off'', the translator can assume that default
           modes are in effect and the flags are not tested.
 
-[page 207] (Contents)
+[page 208] (Contents)
 
 3   EXAMPLE
             #include <fenv.h>
@@ -8676,10 +8736,10 @@ Forward references:        conditional inclusion (6.10.1),
             }
 4   If the function g might depend on status flags set as a side effect of the first x + 1, or if the second
     x + 1 might depend on control modes set as a side effect of the call to function g, then the program shall
-    contain an appropriately placed invocation of #pragma STDC FENV_ACCESS ON.211)
+    contain an appropriately placed invocation of #pragma STDC FENV_ACCESS ON.214)
 
     7.6.2 Floating-point exceptions
-1   The following functions provide access to the floating-point status flags.212) The int
+1   The following functions provide access to the floating-point status flags.215) The int
     input argument for the functions represents a subset of floating-point exceptions, and can
     be zero or the bitwise OR of one or more floating-point exception macros, for example
     FE_OVERFLOW | FE_INEXACT. For other argument values the behavior of these
@@ -8696,16 +8756,16 @@ Forward references:        conditional inclusion (6.10.1),
     the specified exceptions were successfully cleared. Otherwise, it returns a nonzero value.
 
 
-    211) The side effects impose a temporal ordering that requires two evaluations of x + 1. On the other
+    214) The side effects impose a temporal ordering that requires two evaluations of x + 1. On the other
          hand, without the #pragma STDC FENV_ACCESS ON pragma, and assuming the default state is
          ''off'', just one evaluation of x + 1 would suffice.
-    212) The functions fetestexcept, feraiseexcept, and feclearexcept support the basic
+    215) The functions fetestexcept, feraiseexcept, and feclearexcept support the basic
          abstraction of flags that are either set or clear. An implementation may endow floating-point status
          flags with more information -- for example, the address of the code which first raised the floating-
          point exception; the functions fegetexceptflag and fesetexceptflag deal with the full
          content of flags.
 
-[page 208] (Contents)
+[page 209] (Contents)
 
     7.6.2.2 The fegetexceptflag function
     Synopsis
@@ -8725,7 +8785,7 @@ Forward references:        conditional inclusion (6.10.1),
              int feraiseexcept(int excepts);
     Description
 2   The feraiseexcept function attempts to raise the supported floating-point exceptions
-    represented by its argument.213) The order in which these floating-point exceptions are
+    represented by its argument.216) The order in which these floating-point exceptions are
     raised is unspecified, except as stated in F.8.6. Whether the feraiseexcept function
     additionally raises the ''inexact'' floating-point exception whenever it raises the
     ''overflow'' or ''underflow'' floating-point exception is implementation-defined.
@@ -8736,11 +8796,11 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-    213) The effect is intended to be similar to that of floating-point exceptions raised by arithmetic operations.
+    216) The effect is intended to be similar to that of floating-point exceptions raised by arithmetic operations.
          Hence, enabled traps for floating-point exceptions raised by this function are taken. The specification
          in F.8.6 is in the same spirit.
 
-[page 209] (Contents)
+[page 210] (Contents)
 
     7.6.2.4 The fesetexceptflag function
     Synopsis
@@ -8765,7 +8825,7 @@ Forward references:        conditional inclusion (6.10.1),
     Description
 2   The fetestexcept function determines which of a specified subset of the floating-
     point exception flags are currently set. The excepts argument specifies the floating-
-    point status flags to be queried.214)
+    point status flags to be queried.217)
     Returns
 3   The fetestexcept function returns the value of the bitwise OR of the floating-point
     exception macros corresponding to the currently set floating-point exceptions included in
@@ -8775,30 +8835,30 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-    214) This mechanism allows testing several floating-point exceptions with just one function call.
+    217) This mechanism allows testing several floating-point exceptions with just one function call.
 
-[page 210] (Contents)
+[page 211] (Contents)
 
-            #include <fenv.h>
-            /* ... */
-            {
-                    #pragma STDC FENV_ACCESS ON
-                    int set_excepts;
-                    feclearexcept(FE_INVALID | FE_OVERFLOW);
-                    // maybe raise exceptions
-                    set_excepts = fetestexcept(FE_INVALID | FE_OVERFLOW);
-                    if (set_excepts & FE_INVALID) f();
-                    if (set_excepts & FE_OVERFLOW) g();
-                    /* ... */
-            }
+           #include <fenv.h>
+           /* ... */
+           {
+                   #pragma STDC FENV_ACCESS ON
+                   int set_excepts;
+                   feclearexcept(FE_INVALID | FE_OVERFLOW);
+                   // maybe raise exceptions
+                   set_excepts = fetestexcept(FE_INVALID | FE_OVERFLOW);
+                   if (set_excepts & FE_INVALID) f();
+                   if (set_excepts & FE_OVERFLOW) g();
+                   /* ... */
+           }
 
     7.6.3 Rounding
 1   The fegetround and fesetround functions provide control of rounding direction
     modes.
     7.6.3.1 The fegetround function
     Synopsis
-1           #include <fenv.h>
-            int fegetround(void);
+1          #include <fenv.h>
+           int fegetround(void);
     Description
 2   The fegetround function gets the current rounding direction.
     Returns
@@ -8807,8 +8867,8 @@ Forward references:        conditional inclusion (6.10.1),
     rounding direction macro or the current rounding direction is not determinable.
     7.6.3.2 The fesetround function
     Synopsis
-1           #include <fenv.h>
-            int fesetround(int round);
+1          #include <fenv.h>
+           int fesetround(int round);
     Description
 2   The fesetround function establishes the rounding direction represented by its
     argument round. If the argument is not equal to the value of a rounding direction macro,
@@ -8817,32 +8877,32 @@ Forward references:        conditional inclusion (6.10.1),
 3   The fesetround function returns zero if and only if the requested rounding direction
     was established.
 
-[page 211] (Contents)
+[page 212] (Contents)
 
 4   EXAMPLE Save, set, and restore the rounding direction. Report an error and abort if setting the
     rounding direction fails.
-           #include <fenv.h>
-           #include <assert.h>
-           void f(int round_dir)
-           {
-                 #pragma STDC FENV_ACCESS ON
-                 int save_round;
-                 int setround_ok;
-                 save_round = fegetround();
-                 setround_ok = fesetround(round_dir);
-                 assert(setround_ok == 0);
-                 /* ... */
-                 fesetround(save_round);
-                 /* ... */
-           }
+            #include <fenv.h>
+            #include <assert.h>
+            void f(int round_dir)
+            {
+                  #pragma STDC FENV_ACCESS ON
+                  int save_round;
+                  int setround_ok;
+                  save_round = fegetround();
+                  setround_ok = fesetround(round_dir);
+                  assert(setround_ok == 0);
+                  /* ... */
+                  fesetround(save_round);
+                  /* ... */
+            }
 
     7.6.4 Environment
 1   The functions in this section manage the floating-point environment -- status flags and
     control modes -- as one entity.
     7.6.4.1 The fegetenv function
     Synopsis
-1          #include <fenv.h>
-           int fegetenv(fenv_t *envp);
+1           #include <fenv.h>
+            int fegetenv(fenv_t *envp);
     Description
 2   The fegetenv function attempts to store the current floating-point environment in the
     object pointed to by envp.
@@ -8851,15 +8911,15 @@ Forward references:        conditional inclusion (6.10.1),
     Otherwise, it returns a nonzero value.
     7.6.4.2 The feholdexcept function
     Synopsis
-1          #include <fenv.h>
-           int feholdexcept(fenv_t *envp);
+1           #include <fenv.h>
+            int feholdexcept(fenv_t *envp);
     Description
 2   The feholdexcept function saves the current floating-point environment in the object
     pointed to by envp, clears the floating-point status flags, and then installs a non-stop
     (continue on floating-point exceptions) mode, if available, for all floating-point
-    exceptions.215)
+    exceptions.218)
 
-[page 212] (Contents)
+[page 213] (Contents)
 
     Returns
 3   The feholdexcept function returns zero if and only if non-stop floating-point
@@ -8894,32 +8954,32 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-    215) IEC 60559 systems have a default non-stop mode, and typically at least one other mode for trap
+    218) IEC 60559 systems have a default non-stop mode, and typically at least one other mode for trap
          handling or aborting; if the system provides only the non-stop mode then installing it is trivial. For
          such systems, the feholdexcept function can be used in conjunction with the feupdateenv
          function to write routines that hide spurious floating-point exceptions from their callers.
 
-[page 213] (Contents)
+[page 214] (Contents)
 
-4   EXAMPLE   Hide spurious underflow floating-point exceptions:
-          #include <fenv.h>
-          double f(double x)
-          {
-                #pragma STDC FENV_ACCESS ON
-                double result;
-                fenv_t save_env;
-                if (feholdexcept(&save_env))
-                      return /* indication of an environmental problem */;
-                // compute result
-                if (/* test spurious underflow */)
-                      if (feclearexcept(FE_UNDERFLOW))
-                               return /* indication of an environmental problem */;
-                if (feupdateenv(&save_env))
-                      return /* indication of an environmental problem */;
-                return result;
-          }
+4   EXAMPLE     Hide spurious underflow floating-point exceptions:
+            #include <fenv.h>
+            double f(double x)
+            {
+                  #pragma STDC FENV_ACCESS ON
+                  double result;
+                  fenv_t save_env;
+                  if (feholdexcept(&save_env))
+                        return /* indication of an environmental problem */;
+                  // compute result
+                  if (/* test spurious underflow */)
+                        if (feclearexcept(FE_UNDERFLOW))
+                                 return /* indication of an environmental problem */;
+                  if (feupdateenv(&save_env))
+                        return /* indication of an environmental problem */;
+                  return result;
+            }
 
-[page 214] (Contents)
+[page 215] (Contents)
 
     7.7 Characteristics of floating types <float.h>
 1   The header <float.h> defines several macros that expand to various limits and
@@ -8927,7 +8987,7 @@ Forward references:        conditional inclusion (6.10.1),
 2   The macros, their meanings, and the constraints (or restrictions) on their values are listed
     in 5.2.4.2.2.
 
-[page 215] (Contents)
+[page 216] (Contents)
 
     7.8 Format conversion of integer types <inttypes.h>
 1   The header <inttypes.h> includes the header <stdint.h> and extends it with
@@ -8937,16 +8997,16 @@ Forward references:        conditional inclusion (6.10.1),
              imaxdiv_t
     which is a structure type that is the type of the value returned by the imaxdiv function.
     For each type declared in <stdint.h>, it defines corresponding macros for conversion
-    specifiers for use with the formatted input/output functions.216)
+    specifiers for use with the formatted input/output functions.219)
     Forward references: integer types <stdint.h> (7.20), formatted input/output
-    functions (7.21.6), formatted wide character input/output functions (7.28.2).
+    functions (7.21.6), formatted wide character input/output functions (7.29.2).
     7.8.1 Macros for format specifiers
-1   Each of the following object-like macros expands to a character string literal containing a *
+1   Each of the following object-like macros expands to a character string literal containing a
     conversion specifier, possibly modified by a length modifier, suitable for use within the
     format argument of a formatted input/output function when converting the corresponding
     integer type. These macro names have the general form of PRI (character string literals
     for the fprintf and fwprintf family) or SCN (character string literals for the
-    fscanf and fwscanf family),217) followed by the conversion specifier, followed by a
+    fscanf and fwscanf family),220) followed by the conversion specifier, followed by a
     name corresponding to a similar type name in 7.20.1. In these names, N represents the
     width of the type as described in 7.20.1. For example, PRIdFAST32 can be used in a
     format string to print the value of an integer of type int_fast32_t.
@@ -8962,12 +9022,12 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-    216) See ''future library directions'' (7.30.4).
-    217) Separate macros are given for use with fprintf and fscanf functions because, in the general case,
+    219) See ''future library directions'' (7.31.5).
+    220) Separate macros are given for use with fprintf and fscanf functions because, in the general case,
          different format specifiers may be required for fprintf and fscanf, even when the type is the
          same.
 
-[page 216] (Contents)
+[page 217] (Contents)
 
            SCNdN           SCNdLEASTN               SCNdFASTN              SCNdMAX             SCNdPTR
            SCNiN           SCNiLEASTN               SCNiFASTN              SCNiMAX             SCNiPTR
@@ -8981,7 +9041,7 @@ Forward references:        conditional inclusion (6.10.1),
     the type.
 7   EXAMPLE
             #include <inttypes.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int main(void)
             {
                   uintmax_t i = UINTMAX_MAX;    // this type always exists
@@ -8997,21 +9057,21 @@ Forward references:        conditional inclusion (6.10.1),
             intmax_t imaxabs(intmax_t j);
     Description
 2   The imaxabs function computes the absolute value of an integer j. If the result cannot
-    be represented, the behavior is undefined.218)
+    be represented, the behavior is undefined.221)
     Returns
 3   The imaxabs function returns the absolute value.
 
 
 
 
-    218) The absolute value of the most negative number cannot be represented in two's complement.
+    221) The absolute value of the most negative number cannot be represented in two's complement.
 
-[page 217] (Contents)
+[page 218] (Contents)
 
     7.8.2.2 The imaxdiv function
     Synopsis
-1          #include <inttypes.h>
-           imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
+1           #include <inttypes.h>
+            imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
     Description
 2   The imaxdiv function computes numer / denom and numer % denom in a single
     operation.
@@ -9022,11 +9082,11 @@ Forward references:        conditional inclusion (6.10.1),
     either part of the result cannot be represented, the behavior is undefined.
     7.8.2.3 The strtoimax and strtoumax functions
     Synopsis
-1          #include <inttypes.h>
-           intmax_t strtoimax(const char * restrict nptr,
-                char ** restrict endptr, int base);
-           uintmax_t strtoumax(const char * restrict nptr,
-                char ** restrict endptr, int base);
+1           #include <inttypes.h>
+            intmax_t strtoimax(const char * restrict nptr,
+                 char ** restrict endptr, int base);
+            uintmax_t strtoumax(const char * restrict nptr,
+                 char ** restrict endptr, int base);
     Description
 2   The strtoimax and strtoumax functions are equivalent to the strtol, strtoll,
     strtoul, and strtoull functions, except that the initial portion of the string is
@@ -9040,16 +9100,16 @@ Forward references:        conditional inclusion (6.10.1),
     Forward references: the strtol, strtoll, strtoul, and strtoull functions
     (7.22.1.4).
 
-[page 218] (Contents)
+[page 219] (Contents)
 
     7.8.2.4 The wcstoimax and wcstoumax functions
     Synopsis
-1           #include <stddef.h>           // for wchar_t
-            #include <inttypes.h>
-            intmax_t wcstoimax(const wchar_t * restrict nptr,
-                 wchar_t ** restrict endptr, int base);
-            uintmax_t wcstoumax(const wchar_t * restrict nptr,
-                 wchar_t ** restrict endptr, int base);
+1          #include <stddef.h>           // for wchar_t
+           #include <inttypes.h>
+           intmax_t wcstoimax(const wchar_t * restrict nptr,
+                wchar_t ** restrict endptr, int base);
+           uintmax_t wcstoumax(const wchar_t * restrict nptr,
+                wchar_t ** restrict endptr, int base);
     Description
 2   The wcstoimax and wcstoumax functions are equivalent to the wcstol, wcstoll,
     wcstoul, and wcstoull functions except that the initial portion of the wide string is
@@ -9061,26 +9121,26 @@ Forward references:        conditional inclusion (6.10.1),
     return type and sign of the value, if any), and the value of the macro ERANGE is stored in
     errno.
     Forward references: the wcstol, wcstoll, wcstoul, and wcstoull functions
-    (7.28.4.1.2).
+    (7.29.4.1.2).
 
-[page 219] (Contents)
+[page 220] (Contents)
 
     7.9 Alternative spellings <iso646.h>
 1   The header <iso646.h> defines the following eleven macros (on the left) that expand
     to the corresponding tokens (on the right):
-          and           &&
-          and_eq        &=
-          bitand        &
-          bitor         |
-          compl         ~
-          not           !
-          not_eq        !=
-          or            ||
-          or_eq         |=
-          xor           ^
-          xor_eq        ^=
+            and        &&
+            and_eq     &=
+            bitand     &
+            bitor      |
+            compl      ~
+            not        !
+            not_eq     !=
+            or         ||
+            or_eq      |=
+            xor        ^
+            xor_eq     ^=
 
-[page 220] (Contents)
+[page 221] (Contents)
 
     7.10 Sizes of integer types <limits.h>
 1   The header <limits.h> defines several macros that expand to various limits and
@@ -9088,42 +9148,42 @@ Forward references:        conditional inclusion (6.10.1),
 2   The macros, their meanings, and the constraints (or restrictions) on their values are listed
     in 5.2.4.2.1.
 
-[page 221] (Contents)
+[page 222] (Contents)
 
     7.11 Localization <locale.h>
 1   The header <locale.h> declares two functions, one type, and defines several macros.
 2   The type is
-           struct lconv
+            struct lconv
     which contains members related to the formatting of numeric values. The structure shall
     contain at least the following members, in any order. The semantics of the members and
     their normal ranges are explained in 7.11.2.1. In the "C" locale, the members shall have
     the values specified in the comments.
-           char   *decimal_point;                 //   "."
-           char   *thousands_sep;                 //   ""
-           char   *grouping;                      //   ""
-           char   *mon_decimal_point;             //   ""
-           char   *mon_thousands_sep;             //   ""
-           char   *mon_grouping;                  //   ""
-           char   *positive_sign;                 //   ""
-           char   *negative_sign;                 //   ""
-           char   *currency_symbol;               //   ""
-           char   frac_digits;                    //   CHAR_MAX
-           char   p_cs_precedes;                  //   CHAR_MAX
-           char   n_cs_precedes;                  //   CHAR_MAX
-           char   p_sep_by_space;                 //   CHAR_MAX
-           char   n_sep_by_space;                 //   CHAR_MAX
-           char   p_sign_posn;                    //   CHAR_MAX
-           char   n_sign_posn;                    //   CHAR_MAX
-           char   *int_curr_symbol;               //   ""
-           char   int_frac_digits;                //   CHAR_MAX
-           char   int_p_cs_precedes;              //   CHAR_MAX
-           char   int_n_cs_precedes;              //   CHAR_MAX
-           char   int_p_sep_by_space;             //   CHAR_MAX
-           char   int_n_sep_by_space;             //   CHAR_MAX
-           char   int_p_sign_posn;                //   CHAR_MAX
-           char   int_n_sign_posn;                //   CHAR_MAX
+            char   *decimal_point;                //   "."
+            char   *thousands_sep;                //   ""
+            char   *grouping;                     //   ""
+            char   *mon_decimal_point;            //   ""
+            char   *mon_thousands_sep;            //   ""
+            char   *mon_grouping;                 //   ""
+            char   *positive_sign;                //   ""
+            char   *negative_sign;                //   ""
+            char   *currency_symbol;              //   ""
+            char   frac_digits;                   //   CHAR_MAX
+            char   p_cs_precedes;                 //   CHAR_MAX
+            char   n_cs_precedes;                 //   CHAR_MAX
+            char   p_sep_by_space;                //   CHAR_MAX
+            char   n_sep_by_space;                //   CHAR_MAX
+            char   p_sign_posn;                   //   CHAR_MAX
+            char   n_sign_posn;                   //   CHAR_MAX
+            char   *int_curr_symbol;              //   ""
+            char   int_frac_digits;               //   CHAR_MAX
+            char   int_p_cs_precedes;             //   CHAR_MAX
+            char   int_n_cs_precedes;             //   CHAR_MAX
+            char   int_p_sep_by_space;            //   CHAR_MAX
+            char   int_n_sep_by_space;            //   CHAR_MAX
+            char   int_p_sign_posn;               //   CHAR_MAX
+            char   int_n_sign_posn;               //   CHAR_MAX
 
-[page 222] (Contents)
+[page 223] (Contents)
 
 3   The macros defined are NULL (described in 7.19); and
              LC_ALL
@@ -9133,8 +9193,8 @@ Forward references:        conditional inclusion (6.10.1),
              LC_NUMERIC
              LC_TIME
     which expand to integer constant expressions with distinct values, suitable for use as the
-    first argument to the setlocale function.219) Additional macro definitions, beginning
-    with the characters LC_ and an uppercase letter,220) may also be specified by the
+    first argument to the setlocale function.222) Additional macro definitions, beginning
+    with the characters LC_ and an uppercase letter,223) may also be specified by the
     implementation.
     7.11.1 Locale control
     7.11.1.1 The setlocale function
@@ -9148,7 +9208,7 @@ Forward references:        conditional inclusion (6.10.1),
     LC_ALL for category names the program's entire locale; the other values for
     category name only a portion of the program's locale. LC_COLLATE affects the
     behavior of the strcoll and strxfrm functions. LC_CTYPE affects the behavior of
-    the character handling functions221) and the multibyte and wide character functions.
+    the character handling functions224) and the multibyte and wide character functions.
     LC_MONETARY affects the monetary formatting information returned by the
     localeconv function. LC_NUMERIC affects the decimal-point character for the
     formatted input/output functions and the string conversion functions, as well as the
@@ -9158,12 +9218,12 @@ Forward references:        conditional inclusion (6.10.1),
     of "" for locale specifies the locale-specific native environment. Other
     implementation-defined strings may be passed as the second argument to setlocale.
 
-    219) ISO/IEC 9945-2 specifies locale and charmap formats that may be used to specify locales for C.
-    220) See ''future library directions'' (7.30.5).
-    221) The only functions in 7.4 whose behavior is not affected by the current locale are isdigit and
+    222) ISO/IEC 9945-2 specifies locale and charmap formats that may be used to specify locales for C.
+    223) See ''future library directions'' (7.31.6).
+    224) The only functions in 7.4 whose behavior is not affected by the current locale are isdigit and
          isxdigit.
 
-[page 223] (Contents)
+[page 224] (Contents)
 
 4   At program startup, the equivalent of
             setlocale(LC_ALL, "C");
@@ -9178,15 +9238,15 @@ Forward references:        conditional inclusion (6.10.1),
     function returns a null pointer and the program's locale is not changed.
 7   A null pointer for locale causes the setlocale function to return a pointer to the
     string associated with the category for the program's current locale; the program's
-    locale is not changed.222)
+    locale is not changed.225)
 8   The pointer to string returned by the setlocale function is such that a subsequent call
     with that string value and its associated category will restore that part of the program's
     locale. The string pointed to shall not be modified by the program, but may be
     overwritten by a subsequent call to the setlocale function.
     Forward references: formatted input/output functions (7.21.6), multibyte/wide
     character conversion functions (7.22.7), multibyte/wide string conversion functions
-    (7.22.8), numeric conversion functions (7.22.1), the strcoll function (7.23.4.3), the
-    strftime function (7.26.3.5), the strxfrm function (7.23.4.5).
+    (7.22.8), numeric conversion functions (7.22.1), the strcoll function (7.24.4.3), the
+    strftime function (7.27.3.5), the strxfrm function (7.24.4.5).
     7.11.2 Numeric formatting convention inquiry
     7.11.2.1 The localeconv function
     Synopsis
@@ -9199,10 +9259,10 @@ Forward references:        conditional inclusion (6.10.1),
 
 
 
-    222) The implementation shall arrange to encode in a string the various categories due to a heterogeneous
+    225) The implementation shall arrange to encode in a string the various categories due to a heterogeneous
          locale when category has the value LC_ALL.
 
-[page 224] (Contents)
+[page 225] (Contents)
 
 3   The members of the structure with type char * are pointers to strings, any of which
     (except decimal_point) can point to "", to indicate that the value is not available in
@@ -9240,7 +9300,7 @@ Forward references:        conditional inclusion (6.10.1),
               Set to 1 or 0 if the currency_symbol respectively precedes or
               succeeds the value for a nonnegative locally formatted monetary quantity.
 
-[page 225] (Contents)
+[page 226] (Contents)
 
 char n_cs_precedes
           Set to 1 or 0 if the currency_symbol respectively precedes or
@@ -9281,7 +9341,7 @@ char int_p_sep_by_space
           sign string, and the value for a nonnegative internationally formatted
           monetary quantity.
 
-[page 226] (Contents)
+[page 227] (Contents)
 
     char int_n_sep_by_space
               Set to a value indicating the separation of the int_curr_symbol, the
@@ -9295,30 +9355,30 @@ char int_p_sep_by_space
               negative internationally formatted monetary quantity.
 4   The elements of grouping and mon_grouping are interpreted according to the
     following:
-    CHAR_MAX      No further grouping is to be performed.
-    0             The previous element is to be repeatedly used for the remainder of the
-                  digits.
-    other         The integer value is the number of digits that compose the current group.
-                  The next element is examined to determine the size of the next group of
-                  digits before the current group.
+    CHAR_MAX        No further grouping is to be performed.
+    0               The previous element is to be repeatedly used for the remainder of the
+                    digits.
+    other           The integer value is the number of digits that compose the current group.
+                    The next element is examined to determine the size of the next group of
+                    digits before the current group.
 5   The values of p_sep_by_space, n_sep_by_space, int_p_sep_by_space,
     and int_n_sep_by_space are interpreted according to the following:
-    0   No space separates the currency symbol and value.
-    1   If the currency symbol and sign string are adjacent, a space separates them from the
-        value; otherwise, a space separates the currency symbol from the value.
+    0     No space separates the currency symbol and value.
+    1     If the currency symbol and sign string are adjacent, a space separates them from the
+          value; otherwise, a space separates the currency symbol from the value.
     2   If the currency symbol and sign string are adjacent, a space separates them;
         otherwise, a space separates the sign string from the value.
     For int_p_sep_by_space and int_n_sep_by_space, the fourth character of
     int_curr_symbol is used instead of a space.
-6   The values of p_sign_posn, n_sign_posn, int_p_sign_posn,                            and
+6   The values of p_sign_posn, n_sign_posn, int_p_sign_posn,                              and
     int_n_sign_posn are interpreted according to the following:
-    0   Parentheses surround the quantity and currency symbol.
-    1   The sign string precedes the quantity and currency symbol.
-    2   The sign string succeeds the quantity and currency symbol.
-    3   The sign string immediately precedes the currency symbol.
-    4   The sign string immediately succeeds the currency symbol.
+    0     Parentheses surround the quantity and currency symbol.
+    1     The sign string precedes the quantity and currency symbol.
+    2     The sign string succeeds the quantity and currency symbol.
+    3     The sign string immediately precedes the currency symbol.
+    4     The sign string immediately succeeds the currency symbol.
 
-[page 227] (Contents)
+[page 228] (Contents)
 
 7    The implementation shall behave as if no library function calls the localeconv
      function.
@@ -9364,7 +9424,7 @@ char int_p_sep_by_space
      int_p_sign_posn                   1                     1                    1                   1
      int_n_sign_posn                   4                     1                    4                   2
 
-[page 228] (Contents)
+[page 229] (Contents)
 
 11   EXAMPLE 2 The following table illustrates how the cs_precedes, sep_by_space, and sign_posn members
      affect the formatted value.
@@ -9384,14 +9444,14 @@ char int_p_sep_by_space
                                           3         +$1.25             +$ 1.25             + $1.25
                                           4         $+1.25             $+ 1.25             $ +1.25
 
-[page 229] (Contents)
+[page 230] (Contents)
 
     7.12 Mathematics <math.h>
 1   The header <math.h> declares two types and many mathematical functions and defines
     several macros. Most synopses specify a family of functions consisting of a principal
     function with one or more double parameters, a double return value, or both; and
     other functions with the same name but with f and l suffixes, which are corresponding
-    functions with float and long double parameters, return values, or both.223)
+    functions with float and long double parameters, return values, or both.226)
     Integer arithmetic functions and conversion functions are discussed later.
 2   The types
             float_t
@@ -9401,14 +9461,14 @@ char int_p_sep_by_space
     float_t and double_t are float and double, respectively; if
     FLT_EVAL_METHOD equals 1, they are both double; if FLT_EVAL_METHOD equals
     2, they are both long double; and for other values of FLT_EVAL_METHOD, they are
-    otherwise implementation-defined.224)
+    otherwise implementation-defined.227)
 3   The macro
             HUGE_VAL
     expands to a positive double constant expression, not necessarily representable as a
     float. The macros
             HUGE_VALF
             HUGE_VALL
-    are respectively float and long double analogs of HUGE_VAL.225)
+    are respectively float and long double analogs of HUGE_VAL.228)
 4   The macro
             INFINITY
     expands to a constant expression of type float representing positive or unsigned
@@ -9416,17 +9476,17 @@ char int_p_sep_by_space
 
 
 
-    223) Particularly on systems with wide expression evaluation, a <math.h> function might pass arguments
+    226) Particularly on systems with wide expression evaluation, a <math.h> function might pass arguments
          and return values in wider format than the synopsis prototype indicates.
-    224) The types float_t and double_t are intended to be the implementation's most efficient types at
+    227) The types float_t and double_t are intended to be the implementation's most efficient types at
          least as wide as float and double, respectively. For FLT_EVAL_METHOD equal 0, 1, or 2, the
          type float_t is the narrowest type used by the implementation to evaluate floating expressions.
-    225) HUGE_VAL, HUGE_VALF, and HUGE_VALL can be positive infinities in an implementation that
+    228) HUGE_VAL, HUGE_VALF, and HUGE_VALL can be positive infinities in an implementation that
          supports infinities.
 
-[page 230] (Contents)
+[page 231] (Contents)
 
-    translation time.226)
+    translation time.229)
 5   The macro
              NAN
     is defined if and only if the implementation supports quiet NaNs for the float type. It
@@ -9444,7 +9504,7 @@ char int_p_sep_by_space
 7   The macro
              FP_FAST_FMA
     is optionally defined. If defined, it indicates that the fma function generally executes
-    about as fast as, or faster than, a multiply and an add of double operands.227) The
+    about as fast as, or faster than, a multiply and an add of double operands.230) The
     macros
              FP_FAST_FMAF
              FP_FAST_FMAL
@@ -9458,16 +9518,16 @@ char int_p_sep_by_space
     -INT_MAX. The value of FP_ILOGBNAN shall be either INT_MAX or INT_MIN.
 
 
-    226) In this case, using INFINITY will violate the constraint in 6.4.4 and thus require a diagnostic.
-    227) Typically, the FP_FAST_FMA macro is defined if and only if the fma function is implemented
+    229) In this case, using INFINITY will violate the constraint in 6.4.4 and thus require a diagnostic.
+    230) Typically, the FP_FAST_FMA macro is defined if and only if the fma function is implemented
          directly with a hardware multiply-add instruction. Software implementations are expected to be
          substantially slower.
 
-[page 231] (Contents)
+[page 232] (Contents)
 
 9   The macros
-            MATH_ERRNO
-            MATH_ERREXCEPT
+              MATH_ERRNO
+              MATH_ERREXCEPT
     expand to the integer constants 1 and 2, respectively; the macro
             math_errhandling
     expands to an expression that has type int and the value MATH_ERRNO,
@@ -9488,7 +9548,7 @@ char int_p_sep_by_space
 2   For all functions, a domain error occurs if an input argument is outside the domain over
     which the mathematical function is defined. The description of each function lists any
     required domain errors; an implementation may define additional domain errors, provided
-    that such errors are consistent with the mathematical definition of the function.228) On a
+    that such errors are consistent with the mathematical definition of the function.231) On a
     domain error, the function returns an implementation-defined value; if the integer
     expression math_errhandling & MATH_ERRNO is nonzero, the integer expression
     errno acquires the value EDOM; if the integer expression math_errhandling &
@@ -9501,10 +9561,10 @@ char int_p_sep_by_space
     error, the function returns an implementation-defined value; if the integer expression
 
 
-    228) In an implementation that supports infinities, this allows an infinity as an argument to be a domain
+    231) In an implementation that supports infinities, this allows an infinity as an argument to be a domain
          error if the mathematical domain of the function does not include the infinity.
 
-[page 232] (Contents)
+[page 233] (Contents)
 
     math_errhandling & MATH_ERRNO is nonzero, the integer expression errno
     acquires the value ERANGE; if the integer expression math_errhandling &
@@ -9514,7 +9574,7 @@ char int_p_sep_by_space
 5   A floating result overflows if the magnitude of the mathematical result is finite but so
     large that the mathematical result cannot be represented without extraordinary roundoff
     error in an object of the specified type. If a floating result overflows and default rounding
-    is in effect, then the function returns the value of the macro HUGE_VAL, HUGE_VALF, or *
+    is in effect, then the function returns the value of the macro HUGE_VAL, HUGE_VALF, or
     HUGE_VALL according to the return type, with the same sign as the correct value of the
     function; if the integer expression math_errhandling & MATH_ERRNO is nonzero,
     the integer expression errno acquires the value ERANGE; if the integer expression
@@ -9522,7 +9582,7 @@ char int_p_sep_by_space
     point exception is raised.
 6   The result underflows if the magnitude of the mathematical result is so small that the
     mathematical result cannot be represented, without extraordinary roundoff error, in an
-    object of the specified type.229) If the result underflows, the function returns an
+    object of the specified type.232) If the result underflows, the function returns an
     implementation-defined value whose magnitude is no greater than the smallest
     normalized positive number in the specified type; if the integer expression
     math_errhandling & MATH_ERRNO is nonzero, whether errno acquires the
@@ -9530,18 +9590,18 @@ char int_p_sep_by_space
     math_errhandling & MATH_ERREXCEPT is nonzero, whether the ''underflow''
     floating-point exception is raised is implementation-defined.
 7   If a domain, pole, or range error occurs and the integer expression
-    math_errhandling & MATH_ERRNO is zero,230) then errno shall either be set to
+    math_errhandling & MATH_ERRNO is zero,233) then errno shall either be set to
     the value corresponding to the error or left unmodified. If no such error occurs, errno
     shall be left unmodified regardless of the setting of math_errhandling.
 
 
 
 
-    229) The term underflow here is intended to encompass both ''gradual underflow'' as in IEC 60559 and
+    232) The term underflow here is intended to encompass both ''gradual underflow'' as in IEC 60559 and
          also ''flush-to-zero'' underflow.
-    230) Math errors are being indicated by the floating-point exception flags rather than by errno.
+    233) Math errors are being indicated by the floating-point exception flags rather than by errno.
 
-[page 233] (Contents)
+[page 234] (Contents)
 
     7.12.2 The FP_CONTRACT pragma
     Synopsis
@@ -9571,17 +9631,17 @@ char int_p_sep_by_space
 2   The fpclassify macro classifies its argument value as NaN, infinite, normal,
     subnormal, zero, or into another implementation-defined category. First, an argument
     represented in a format wider than its semantic type is converted to its semantic type.
-    Then classification is based on the type of the argument.231)
+    Then classification is based on the type of the argument.234)
     Returns
 3   The fpclassify macro returns the value of the number classification macro
-    appropriate to the value of its argument.                                *
+    appropriate to the value of its argument.
 
 
-    231) Since an expression can be evaluated with more range and precision than its type has, it is important to
+    234) Since an expression can be evaluated with more range and precision than its type has, it is important to
          know the type that classification is based on. For example, a normal long double value might
          become subnormal when converted to double, and zero when converted to float.
 
-[page 234] (Contents)
+[page 235] (Contents)
 
     7.12.3.2 The isfinite macro
     Synopsis
@@ -9613,13 +9673,13 @@ char int_p_sep_by_space
     Description
 2   The isnan macro determines whether its argument value is a NaN. First, an argument
     represented in a format wider than its semantic type is converted to its semantic type.
-    Then determination is based on the type of the argument.232)
+    Then determination is based on the type of the argument.235)
 
 
-    232) For the isnan macro, the type for determination does not matter unless the implementation supports
+    235) For the isnan macro, the type for determination does not matter unless the implementation supports
          NaNs in the evaluation type but not in the semantic type.
 
-[page 235] (Contents)
+[page 236] (Contents)
 
     Returns
 3   The isnan macro returns a nonzero value if and only if its argument has a NaN value.
@@ -9640,7 +9700,7 @@ char int_p_sep_by_space
 1           #include <math.h>
             int signbit(real-floating x);
     Description
-2   The signbit macro determines whether the sign of its argument value is negative.233)
+2   The signbit macro determines whether the sign of its argument value is negative.236)
     Returns
 3   The signbit macro returns a nonzero value if and only if the sign of its argument value
     is negative.
@@ -9648,18 +9708,18 @@ char int_p_sep_by_space
 
 
 
-    233) The signbit macro reports the sign of all values, including infinities, zeros, and NaNs. If zero is
+    236) The signbit macro reports the sign of all values, including infinities, zeros, and NaNs. If zero is
          unsigned, it is treated as positive.
 
-[page 236] (Contents)
+[page 237] (Contents)
 
     7.12.4 Trigonometric functions
     7.12.4.1 The acos functions
     Synopsis
-1           #include <math.h>
-            double acos(double x);
-            float acosf(float x);
-            long double acosl(long double x);
+1          #include <math.h>
+           double acos(double x);
+           float acosf(float x);
+           long double acosl(long double x);
     Description
 2   The acos functions compute the principal value of the arc cosine of x. A domain error
     occurs for arguments not in the interval [-1, +1].
@@ -9667,10 +9727,10 @@ char int_p_sep_by_space
 3   The acos functions return arccos x in the interval [0, pi ] radians.
     7.12.4.2 The asin functions
     Synopsis
-1           #include <math.h>
-            double asin(double x);
-            float asinf(float x);
-            long double asinl(long double x);
+1          #include <math.h>
+           double asin(double x);
+           float asinf(float x);
+           long double asinl(long double x);
     Description
 2   The asin functions compute the principal value of the arc sine of x. A domain error
     occurs for arguments not in the interval [-1, +1].
@@ -9678,23 +9738,23 @@ char int_p_sep_by_space
 3   The asin functions return arcsin x in the interval [-pi /2, +pi /2] radians.
     7.12.4.3 The atan functions
     Synopsis
-1           #include <math.h>
-            double atan(double x);
-            float atanf(float x);
-            long double atanl(long double x);
+1          #include <math.h>
+           double atan(double x);
+           float atanf(float x);
+           long double atanl(long double x);
     Description
 2   The atan functions compute the principal value of the arc tangent of x.
 
-[page 237] (Contents)
+[page 238] (Contents)
 
     Returns
 3   The atan functions return arctan x in the interval [-pi /2, +pi /2] radians.
     7.12.4.4 The atan2 functions
     Synopsis
-1          #include <math.h>
-           double atan2(double y, double x);
-           float atan2f(float y, float x);
-           long double atan2l(long double y, long double x);
+1           #include <math.h>
+            double atan2(double y, double x);
+            float atan2f(float y, float x);
+            long double atan2l(long double y, long double x);
     Description
 2   The atan2 functions compute the value of the arc tangent of y/x, using the signs of both
     arguments to determine the quadrant of the return value. A domain error may occur if
@@ -9703,33 +9763,33 @@ char int_p_sep_by_space
 3   The atan2 functions return arctan y/x in the interval [-pi , +pi ] radians.
     7.12.4.5 The cos functions
     Synopsis
-1          #include <math.h>
-           double cos(double x);
-           float cosf(float x);
-           long double cosl(long double x);
+1           #include <math.h>
+            double cos(double x);
+            float cosf(float x);
+            long double cosl(long double x);
     Description
 2   The cos functions compute the cosine of x (measured in radians).
     Returns
 3   The cos functions return cos x.
     7.12.4.6 The sin functions
     Synopsis
-1          #include <math.h>
-           double sin(double x);
-           float sinf(float x);
-           long double sinl(long double x);
+1           #include <math.h>
+            double sin(double x);
+            float sinf(float x);
+            long double sinl(long double x);
     Description
 2   The sin functions compute the sine of x (measured in radians).
 
-[page 238] (Contents)
+[page 239] (Contents)
 
     Returns
 3   The sin functions return sin x.
     7.12.4.7 The tan functions
     Synopsis
-1           #include <math.h>
-            double tan(double x);
-            float tanf(float x);
-            long double tanl(long double x);
+1          #include <math.h>
+           double tan(double x);
+           float tanf(float x);
+           long double tanl(long double x);
     Description
 2   The tan functions return the tangent of x (measured in radians).
     Returns
@@ -9737,10 +9797,10 @@ char int_p_sep_by_space
     7.12.5 Hyperbolic functions
     7.12.5.1 The acosh functions
     Synopsis
-1           #include <math.h>
-            double acosh(double x);
-            float acoshf(float x);
-            long double acoshl(long double x);
+1          #include <math.h>
+           double acosh(double x);
+           float acoshf(float x);
+           long double acoshl(long double x);
     Description
 2   The acosh functions compute the (nonnegative) arc hyperbolic cosine of x. A domain
     error occurs for arguments less than 1.
@@ -9748,23 +9808,23 @@ char int_p_sep_by_space
 3   The acosh functions return arcosh x in the interval [0, +(inf)].
     7.12.5.2 The asinh functions
     Synopsis
-1           #include <math.h>
-            double asinh(double x);
-            float asinhf(float x);
-            long double asinhl(long double x);
+1          #include <math.h>
+           double asinh(double x);
+           float asinhf(float x);
+           long double asinhl(long double x);
     Description
 2   The asinh functions compute the arc hyperbolic sine of x.
 
-[page 239] (Contents)
+[page 240] (Contents)
 
     Returns
 3   The asinh functions return arsinh x.
     7.12.5.3 The atanh functions
     Synopsis
-1          #include <math.h>
-           double atanh(double x);
-           float atanhf(float x);
-           long double atanhl(long double x);
+1           #include <math.h>
+            double atanh(double x);
+            float atanhf(float x);
+            long double atanhl(long double x);
     Description
 2   The atanh functions compute the arc hyperbolic tangent of x. A domain error occurs
     for arguments not in the interval [-1, +1]. A pole error may occur if the argument equals
@@ -9773,10 +9833,10 @@ char int_p_sep_by_space
 3   The atanh functions return artanh x.
     7.12.5.4 The cosh functions
     Synopsis
-1          #include <math.h>
-           double cosh(double x);
-           float coshf(float x);
-           long double coshl(long double x);
+1           #include <math.h>
+            double cosh(double x);
+            float coshf(float x);
+            long double coshl(long double x);
     Description
 2   The cosh functions compute the hyperbolic cosine of x. A range error occurs if the
     magnitude of x is too large.
@@ -9784,24 +9844,24 @@ char int_p_sep_by_space
 3   The cosh functions return cosh x.
     7.12.5.5 The sinh functions
     Synopsis
-1          #include <math.h>
-           double sinh(double x);
-           float sinhf(float x);
-           long double sinhl(long double x);
+1           #include <math.h>
+            double sinh(double x);
+            float sinhf(float x);
+            long double sinhl(long double x);
     Description
 2   The sinh functions compute the hyperbolic sine of x. A range error occurs if the
     magnitude of x is too large.
 
-[page 240] (Contents)
+[page 241] (Contents)
 
     Returns
 3   The sinh functions return sinh x.
     7.12.5.6 The tanh functions
     Synopsis
-1           #include <math.h>
-            double tanh(double x);
-            float tanhf(float x);
-            long double tanhl(long double x);
+1          #include <math.h>
+           double tanh(double x);
+           float tanhf(float x);
+           long double tanhl(long double x);
     Description
 2   The tanh functions compute the hyperbolic tangent of x.
     Returns
@@ -9809,10 +9869,10 @@ char int_p_sep_by_space
     7.12.6 Exponential and logarithmic functions
     7.12.6.1 The exp functions
     Synopsis
-1           #include <math.h>
-            double exp(double x);
-            float expf(float x);
-            long double expl(long double x);
+1          #include <math.h>
+           double exp(double x);
+           float expf(float x);
+           long double expl(long double x);
     Description
 2   The exp functions compute the base-e exponential of x. A range error occurs if the
     magnitude of x is too large.
@@ -9820,15 +9880,15 @@ char int_p_sep_by_space
 3   The exp functions return ex .
     7.12.6.2 The exp2 functions
     Synopsis
-1           #include <math.h>
-            double exp2(double x);
-            float exp2f(float x);
-            long double exp2l(long double x);
+1          #include <math.h>
+           double exp2(double x);
+           float exp2f(float x);
+           long double exp2l(long double x);
     Description
 2   The exp2 functions compute the base-2 exponential of x. A range error occurs if the
     magnitude of x is too large.
 
-[page 241] (Contents)
+[page 242] (Contents)
 
     Returns
 3   The exp2 functions return 2x .
@@ -9840,7 +9900,7 @@ char int_p_sep_by_space
             long double expm1l(long double x);
     Description
 2   The expm1 functions compute the base-e exponential of the argument, minus 1. A range
-    error occurs if x is too large.234)
+    error occurs if x is too large.237)
     Returns
 3   The expm1 functions return ex - 1.
     7.12.6.4 The frexp functions
@@ -9861,16 +9921,16 @@ char int_p_sep_by_space
 
 
 
-    234) For small magnitude x, expm1(x) is expected to be more accurate than exp(x) - 1.
+    237) For small magnitude x, expm1(x) is expected to be more accurate than exp(x) - 1.
 
-[page 242] (Contents)
+[page 243] (Contents)
 
     7.12.6.5 The ilogb functions
     Synopsis
-1           #include <math.h>
-            int ilogb(double x);
-            int ilogbf(float x);
-            int ilogbl(long double x);
+1          #include <math.h>
+           int ilogb(double x);
+           int ilogbf(float x);
+           int ilogbl(long double x);
     Description
 2   The ilogb functions extract the exponent of x as a signed int value. If x is zero they
     compute the value FP_ILOGB0; if x is infinite they compute the value INT_MAX; if x is
@@ -9883,10 +9943,10 @@ char int_p_sep_by_space
     Forward references: the logb functions (7.12.6.11).
     7.12.6.6 The ldexp functions
     Synopsis
-1           #include <math.h>
-            double ldexp(double x, int exp);
-            float ldexpf(float x, int exp);
-            long double ldexpl(long double x, int exp);
+1          #include <math.h>
+           double ldexp(double x, int exp);
+           float ldexpf(float x, int exp);
+           long double ldexpl(long double x, int exp);
     Description
 2   The ldexp functions multiply a floating-point number by an integral power of 2. A
     range error may occur.
@@ -9894,12 +9954,12 @@ char int_p_sep_by_space
 3   The ldexp functions return x x 2exp .
     7.12.6.7 The log functions
     Synopsis
-1           #include <math.h>
-            double log(double x);
-            float logf(float x);
-            long double logl(long double x);
+1          #include <math.h>
+           double log(double x);
+           float logf(float x);
+           long double logl(long double x);
 
-[page 243] (Contents)
+[page 244] (Contents)
 
     Description
 2   The log functions compute the base-e (natural) logarithm of x. A domain error occurs if
@@ -9924,7 +9984,7 @@ char int_p_sep_by_space
             float log1pf(float x);
             long double log1pl(long double x);
     Description
-2   The log1p functions compute the base-e (natural) logarithm of 1 plus the argument.235)
+2   The log1p functions compute the base-e (natural) logarithm of 1 plus the argument.238)
     A domain error occurs if the argument is less than -1. A pole error may occur if the
     argument equals -1.
     Returns
@@ -9933,16 +9993,16 @@ char int_p_sep_by_space
 
 
 
-    235) For small magnitude x, log1p(x) is expected to be more accurate than log(1 + x).
+    238) For small magnitude x, log1p(x) is expected to be more accurate than log(1 + x).
 
-[page 244] (Contents)
+[page 245] (Contents)
 
     7.12.6.10 The log2 functions
     Synopsis
-1           #include <math.h>
-            double log2(double x);
-            float log2f(float x);
-            long double log2l(long double x);
+1          #include <math.h>
+           double log2(double x);
+           float log2f(float x);
+           long double log2l(long double x);
     Description
 2   The log2 functions compute the base-2 logarithm of x. A domain error occurs if the
     argument is less than zero. A pole error may occur if the argument is zero.
@@ -9950,10 +10010,10 @@ char int_p_sep_by_space
 3   The log2 functions return log2 x.
     7.12.6.11 The logb functions
     Synopsis
-1           #include <math.h>
-            double logb(double x);
-            float logbf(float x);
-            long double logbl(long double x);
+1          #include <math.h>
+           double logb(double x);
+           float logbf(float x);
+           long double logbl(long double x);
     Description
 2   The logb functions extract the exponent of x, as a signed integer value in floating-point
     format. If x is subnormal it is treated as though it were normalized; thus, for positive
@@ -9964,28 +10024,28 @@ char int_p_sep_by_space
 3   The logb functions return the signed exponent of x.
     7.12.6.12 The modf functions
     Synopsis
-1           #include <math.h>
-            double modf(double value, double *iptr);
-            float modff(float value, float *iptr);
-            long double modfl(long double value, long double *iptr);
+1          #include <math.h>
+           double modf(double value, double *iptr);
+           float modff(float value, float *iptr);
+           long double modfl(long double value, long double *iptr);
     Description
 2   The modf functions break the argument value into integral and fractional parts, each of
     which has the same type and sign as the argument. They store the integral part (in
 
-[page 245] (Contents)
+[page 246] (Contents)
 
     floating-point format) in the object pointed to by iptr.
     Returns
 3   The modf functions return the signed fractional part of value.
     7.12.6.13 The scalbn and scalbln functions
     Synopsis
-1          #include <math.h>
-           double scalbn(double x, int n);
-           float scalbnf(float x, int n);
-           long double scalbnl(long double x, int n);
-           double scalbln(double x, long int n);
-           float scalblnf(float x, long int n);
-           long double scalblnl(long double x, long int n);
+1           #include <math.h>
+            double scalbn(double x, int n);
+            float scalbnf(float x, int n);
+            long double scalbnl(long double x, int n);
+            double scalbln(double x, long int n);
+            float scalblnf(float x, long int n);
+            long double scalblnl(long double x, long int n);
     Description
 2   The scalbn and scalbln functions compute x x FLT_RADIXn efficiently, not
     normally by computing FLT_RADIXn explicitly. A range error may occur.
@@ -9994,33 +10054,33 @@ char int_p_sep_by_space
     7.12.7 Power and absolute-value functions
     7.12.7.1 The cbrt functions
     Synopsis
-1          #include <math.h>
-           double cbrt(double x);
-           float cbrtf(float x);
-           long double cbrtl(long double x);
+1           #include <math.h>
+            double cbrt(double x);
+            float cbrtf(float x);
+            long double cbrtl(long double x);
     Description
 2   The cbrt functions compute the real cube root of x.
     Returns
 3   The cbrt functions return x1/3 .
 
-[page 246] (Contents)
+[page 247] (Contents)
 
     7.12.7.2 The fabs functions
     Synopsis
-1           #include <math.h>
-            double fabs(double x);
-            float fabsf(float x);
-            long double fabsl(long double x);
+1          #include <math.h>
+           double fabs(double x);
+           float fabsf(float x);
+           long double fabsl(long double x);
     Description
 2   The fabs functions compute the absolute value of a floating-point number x.
     Returns
 3   The fabs functions return | x |.
     7.12.7.3 The hypot functions
     Synopsis
-1           #include <math.h>
-            double hypot(double x, double y);
-            float hypotf(float x, float y);
-            long double hypotl(long double x, long double y);
+1          #include <math.h>
+           double hypot(double x, double y);
+           float hypotf(float x, float y);
+           long double hypotl(long double x, long double y);
     Description
 2   The hypot functions compute the square root of the sum of the squares of x and y,
     without undue overflow or underflow. A range error may occur.
@@ -10030,26 +10090,26 @@ char int_p_sep_by_space
                                -----
     7.12.7.4 The pow functions
     Synopsis
-1           #include <math.h>
-            double pow(double x, double y);
-            float powf(float x, float y);
-            long double powl(long double x, long double y);
+1          #include <math.h>
+           double pow(double x, double y);
+           float powf(float x, float y);
+           long double powl(long double x, long double y);
     Description
 2   The pow functions compute x raised to the power y. A domain error occurs if x is finite
     and negative and y is finite and not an integer value. A range error may occur. A domain
     error may occur if x is zero and y is zero. A domain error or pole error may occur if x is
     zero and y is less than zero.
 
-[page 247] (Contents)
+[page 248] (Contents)
 
     Returns
 3   The pow functions return xy .
     7.12.7.5 The sqrt functions
     Synopsis
-1          #include <math.h>
-           double sqrt(double x);
-           float sqrtf(float x);
-           long double sqrtl(long double x);
+1           #include <math.h>
+            double sqrt(double x);
+            float sqrtf(float x);
+            long double sqrtl(long double x);
     Description
 2   The sqrt functions compute the nonnegative square root of x. A domain error occurs if
     the argument is less than zero.
@@ -10060,10 +10120,10 @@ char int_p_sep_by_space
     7.12.8 Error and gamma functions
     7.12.8.1 The erf functions
     Synopsis
-1          #include <math.h>
-           double erf(double x);
-           float erff(float x);
-           long double erfl(long double x);
+1           #include <math.h>
+            double erf(double x);
+            float erff(float x);
+            long double erfl(long double x);
     Description
 2   The erf functions compute the error function of x.
     Returns
@@ -10077,15 +10137,15 @@ char int_p_sep_by_space
 
     7.12.8.2 The erfc functions
     Synopsis
-1          #include <math.h>
-           double erfc(double x);
-           float erfcf(float x);
-           long double erfcl(long double x);
+1           #include <math.h>
+            double erfc(double x);
+            float erfcf(float x);
+            long double erfcl(long double x);
     Description
 2   The erfc functions compute the complementary error function of x. A range error
     occurs if x is too large.
 
-[page 248] (Contents)
+[page 249] (Contents)
 
     Returns
 3                                                       2       (inf)
@@ -10098,10 +10158,10 @@ char int_p_sep_by_space
 
     7.12.8.3 The lgamma functions
     Synopsis
-1           #include <math.h>
-            double lgamma(double x);
-            float lgammaf(float x);
-            long double lgammal(long double x);
+1          #include <math.h>
+           double lgamma(double x);
+           float lgammaf(float x);
+           long double lgammal(long double x);
     Description
 2   The lgamma functions compute the natural logarithm of the absolute value of gamma of
     x. A range error occurs if x is too large. A pole error may occur if x is a negative integer
@@ -10110,10 +10170,10 @@ char int_p_sep_by_space
 3   The lgamma functions return loge | (Gamma)(x) |.
     7.12.8.4 The tgamma functions
     Synopsis
-1           #include <math.h>
-            double tgamma(double x);
-            float tgammaf(float x);
-            long double tgammal(long double x);
+1          #include <math.h>
+           double tgamma(double x);
+           float tgammaf(float x);
+           long double tgammal(long double x);
     Description
 2   The tgamma functions compute the gamma function of x. A domain error or pole error
     may occur if x is a negative integer or zero. A range error occurs if the magnitude of x is
@@ -10121,50 +10181,50 @@ char int_p_sep_by_space
     Returns
 3   The tgamma functions return (Gamma)(x).
 
-[page 249] (Contents)
+[page 250] (Contents)
 
     7.12.9 Nearest integer functions
     7.12.9.1 The ceil functions
     Synopsis
-1          #include <math.h>
-           double ceil(double x);
-           float ceilf(float x);
-           long double ceill(long double x);
+1           #include <math.h>
+            double ceil(double x);
+            float ceilf(float x);
+            long double ceill(long double x);
     Description
 2   The ceil functions compute the smallest integer value not less than x.
     Returns
 3   The ceil functions return [^x^], expressed as a floating-point number.
     7.12.9.2 The floor functions
     Synopsis
-1          #include <math.h>
-           double floor(double x);
-           float floorf(float x);
-           long double floorl(long double x);
+1           #include <math.h>
+            double floor(double x);
+            float floorf(float x);
+            long double floorl(long double x);
     Description
 2   The floor functions compute the largest integer value not greater than x.
     Returns
 3   The floor functions return [_x_], expressed as a floating-point number.
     7.12.9.3 The nearbyint functions
     Synopsis
-1          #include <math.h>
-           double nearbyint(double x);
-           float nearbyintf(float x);
-           long double nearbyintl(long double x);
+1           #include <math.h>
+            double nearbyint(double x);
+            float nearbyintf(float x);
+            long double nearbyintl(long double x);
     Description
 2   The nearbyint functions round their argument to an integer value in floating-point
     format, using the current rounding direction and without raising the ''inexact'' floating-
     point exception.
 
-[page 250] (Contents)
+[page 251] (Contents)
 
     Returns
 3   The nearbyint functions return the rounded integer value.
     7.12.9.4 The rint functions
     Synopsis
-1           #include <math.h>
-            double rint(double x);
-            float rintf(float x);
-            long double rintl(long double x);
+1          #include <math.h>
+           double rint(double x);
+           float rintf(float x);
+           long double rintl(long double x);
     Description
 2   The rint functions differ from the nearbyint functions (7.12.9.3) only in that the
     rint functions may raise the ''inexact'' floating-point exception if the result differs in
@@ -10173,13 +10233,13 @@ char int_p_sep_by_space
 3   The rint functions return the rounded integer value.
     7.12.9.5 The lrint and llrint functions
     Synopsis
-1           #include <math.h>
-            long int lrint(double x);
-            long int lrintf(float x);
-            long int lrintl(long double x);
-            long long int llrint(double x);
-            long long int llrintf(float x);
-            long long int llrintl(long double x);
+1          #include <math.h>
+           long int lrint(double x);
+           long int lrintf(float x);
+           long int lrintl(long double x);
+           long long int llrint(double x);
+           long long int llrintf(float x);
+           long long int llrintl(long double x);
     Description
 2   The lrint and llrint functions round their argument to the nearest integer value,
     rounding according to the current rounding direction. If the rounded value is outside the
@@ -10188,14 +10248,14 @@ char int_p_sep_by_space
     Returns
 3   The lrint and llrint functions return the rounded integer value.
 
-[page 251] (Contents)
+[page 252] (Contents)
 
     7.12.9.6 The round functions
     Synopsis
-1          #include <math.h>
-           double round(double x);
-           float roundf(float x);
-           long double roundl(long double x);
+1           #include <math.h>
+            double round(double x);
+            float roundf(float x);
+            long double roundl(long double x);
     Description
 2   The round functions round their argument to the nearest integer value in floating-point
     format, rounding halfway cases away from zero, regardless of the current rounding
@@ -10204,13 +10264,13 @@ char int_p_sep_by_space
 3   The round functions return the rounded integer value.
     7.12.9.7 The lround and llround functions
     Synopsis
-1          #include <math.h>
-           long int lround(double x);
-           long int lroundf(float x);
-           long int lroundl(long double x);
-           long long int llround(double x);
-           long long int llroundf(float x);
-           long long int llroundl(long double x);
+1           #include <math.h>
+            long int lround(double x);
+            long int lroundf(float x);
+            long int lroundl(long double x);
+            long long int llround(double x);
+            long long int llroundf(float x);
+            long long int llroundl(long double x);
     Description
 2   The lround and llround functions round their argument to the nearest integer value,
     rounding halfway cases away from zero, regardless of the current rounding direction. If
@@ -10220,12 +10280,12 @@ char int_p_sep_by_space
 3   The lround and llround functions return the rounded integer value.
     7.12.9.8 The trunc functions
     Synopsis
-1          #include <math.h>
-           double trunc(double x);
-           float truncf(float x);
-           long double truncl(long double x);
+1           #include <math.h>
+            double trunc(double x);
+            float truncf(float x);
+            long double truncl(long double x);
 
-[page 252] (Contents)
+[page 253] (Contents)
 
     Description
 2   The trunc functions round their argument to the integer value, in floating format,
@@ -10253,28 +10313,28 @@ char int_p_sep_by_space
              float remainderf(float x, float y);
              long double remainderl(long double x, long double y);
     Description
-2   The remainder functions compute the remainder x REM y required by IEC 60559.236)
+2   The remainder functions compute the remainder x REM y required by IEC 60559.239)
 
 
 
 
-    236) ''When y != 0, the remainder r = x REM y is defined regardless of the rounding mode by the
+    239) ''When y != 0, the remainder r = x REM y is defined regardless of the rounding mode by the
          mathematical relation r = x - ny, where n is the integer nearest the exact value of x/y; whenever
-         | n - x/y | = 1/2, then n is even. If r = 0, its sign shall be that of x.'' This definition is applicable for *
+         | n - x/y | = 1/2, then n is even. If r = 0, its sign shall be that of x.'' This definition is applicable for
          all implementations.
 
-[page 253] (Contents)
+[page 254] (Contents)
 
     Returns
 3   The remainder functions return x REM y. If y is zero, whether a domain error occurs
     or the functions return zero is implementation defined.
     7.12.10.3 The remquo functions
     Synopsis
-1          #include <math.h>
-           double remquo(double x, double y, int *quo);
-           float remquof(float x, float y, int *quo);
-           long double remquol(long double x, long double y,
-                int *quo);
+1           #include <math.h>
+            double remquo(double x, double y, int *quo);
+            float remquof(float x, float y, int *quo);
+            long double remquol(long double x, long double y,
+                 int *quo);
     Description
 2   The remquo functions compute the same remainder as the remainder functions. In
     the object pointed to by quo they store a value whose sign is the sign of x/y and whose
@@ -10287,10 +10347,10 @@ char int_p_sep_by_space
     7.12.11 Manipulation functions
     7.12.11.1 The copysign functions
     Synopsis
-1          #include <math.h>
-           double copysign(double x, double y);
-           float copysignf(float x, float y);
-           long double copysignl(long double x, long double y);
+1           #include <math.h>
+            double copysign(double x, double y);
+            float copysignf(float x, float y);
+            long double copysignl(long double x, long double y);
     Description
 2   The copysign functions produce a value with the magnitude of x and the sign of y.
     They produce a NaN (with the sign of y) if x is a NaN. On implementations that
@@ -10299,7 +10359,7 @@ char int_p_sep_by_space
     Returns
 3   The copysign functions return a value with the magnitude of x and the sign of y.
 
-[page 254] (Contents)
+[page 255] (Contents)
 
     7.12.11.2 The nan functions
     Synopsis
@@ -10327,7 +10387,7 @@ char int_p_sep_by_space
     Description
 2   The nextafter functions determine the next representable value, in the type of the
     function, after x in the direction of y, where x and y are first converted to the type of the
-    function.237) The nextafter functions return y if x equals y. A range error may occur
+    function.240) The nextafter functions return y if x equals y. A range error may occur
     if the magnitude of x is the largest finite value representable in the type and the result is
     infinite or not representable in the type.
     Returns
@@ -10335,10 +10395,10 @@ char int_p_sep_by_space
     after x in the direction of y.
 
 
-    237) The argument values are converted to the type of the function, even by a macro implementation of the
+    240) The argument values are converted to the type of the function, even by a macro implementation of the
          function.
 
-[page 255] (Contents)
+[page 256] (Contents)
 
     7.12.11.4 The nexttoward functions
     Synopsis
@@ -10349,7 +10409,7 @@ char int_p_sep_by_space
     Description
 2   The nexttoward functions are equivalent to the nextafter functions except that the
     second parameter has type long double and the functions return y converted to the
-    type of the function if x equals y.238)
+    type of the function if x equals y.241)
     7.12.12 Maximum, minimum, and positive difference functions
     7.12.12.1 The fdim functions
     Synopsis
@@ -10374,13 +10434,13 @@ char int_p_sep_by_space
 
 
 
-    238) The result of the nexttoward functions is determined in the type of the function, without loss of
+    241) The result of the nexttoward functions is determined in the type of the function, without loss of
          range or precision in a floating second argument.
 
-[page 256] (Contents)
+[page 257] (Contents)
 
     Description
-2   The fmax functions determine the maximum numeric value of their arguments.239)
+2   The fmax functions determine the maximum numeric value of their arguments.242)
     Returns
 3   The fmax functions return the maximum numeric value of their arguments.
     7.12.12.3 The fmin functions
@@ -10390,7 +10450,7 @@ char int_p_sep_by_space
             float fminf(float x, float y);
             long double fminl(long double x, long double y);
     Description
-2   The fmin functions determine the minimum numeric value of their arguments.240)
+2   The fmin functions determine the minimum numeric value of their arguments.243)
     Returns
 3   The fmin functions return the minimum numeric value of their arguments.
     7.12.13 Floating multiply-add
@@ -10411,23 +10471,23 @@ char int_p_sep_by_space
 
 
 
-    239) NaN arguments are treated as missing data: if one argument is a NaN and the other numeric, then the
+    242) NaN arguments are treated as missing data: if one argument is a NaN and the other numeric, then the
          fmax functions choose the numeric value. See F.10.9.2.
-    240) The fmin functions are analogous to the fmax functions in their treatment of NaNs.
+    243) The fmin functions are analogous to the fmax functions in their treatment of NaNs.
 
-[page 257] (Contents)
+[page 258] (Contents)
 
     7.12.14 Comparison macros
 1   The relational and equality operators support the usual mathematical relationships
     between numeric values. For any ordered pair of numeric values exactly one of the
     relationships -- less, greater, and equal -- is true. Relational operators may raise the
     ''invalid'' floating-point exception when argument values are NaNs. For a NaN and a
-    numeric value, or for two NaNs, just the unordered relationship is true.241) The following
+    numeric value, or for two NaNs, just the unordered relationship is true.244) The following
     subclauses provide macros that are quiet (non floating-point exception raising) versions
     of the relational operators, and other comparison macros that facilitate writing efficient
     code that accounts for NaNs without suffering the ''invalid'' floating-point exception. In
     the synopses in this subclause, real-floating indicates that the argument shall be an
-    expression of real floating type242) (both arguments need not have the same type).243)
+    expression of real floating type245) (both arguments need not have the same type).246)
     7.12.14.1 The isgreater macro
     Synopsis
 1            #include <math.h>
@@ -10447,15 +10507,15 @@ char int_p_sep_by_space
 
 
 
-    241) IEC 60559 requires that the built-in relational operators raise the ''invalid'' floating-point exception if
+    244) IEC 60559 requires that the built-in relational operators raise the ''invalid'' floating-point exception if
          the operands compare unordered, as an error indicator for programs written without consideration of
          NaNs; the result in these cases is false.
-    242) If any argument is of integer type, or any other type that is not a real floating type, the behavior is
+    245) If any argument is of integer type, or any other type that is not a real floating type, the behavior is
          undefined.
-    243) Whether an argument represented in a format wider than its semantic type is converted to the semantic
+    246) Whether an argument represented in a format wider than its semantic type is converted to the semantic
          type is unspecified.
 
-[page 258] (Contents)
+[page 259] (Contents)
 
     Description
 2   The isgreaterequal macro determines whether its first argument is greater than or
@@ -10466,8 +10526,8 @@ char int_p_sep_by_space
 3   The isgreaterequal macro returns the value of (x) >= (y).
     7.12.14.3 The isless macro
     Synopsis
-1           #include <math.h>
-            int isless(real-floating x, real-floating y);
+1         #include <math.h>
+          int isless(real-floating x, real-floating y);
     Description
 2   The isless macro determines whether its first argument is less than its second
     argument. The value of isless(x, y) is always equal to (x) < (y); however,
@@ -10477,8 +10537,8 @@ char int_p_sep_by_space
 3   The isless macro returns the value of (x) < (y).
     7.12.14.4 The islessequal macro
     Synopsis
-1           #include <math.h>
-            int islessequal(real-floating x, real-floating y);
+1         #include <math.h>
+          int islessequal(real-floating x, real-floating y);
     Description
 2   The islessequal macro determines whether its first argument is less than or equal to
     its second argument. The value of islessequal(x, y) is always equal to
@@ -10487,12 +10547,12 @@ char int_p_sep_by_space
     Returns
 3   The islessequal macro returns the value of (x) <= (y).
 
-[page 259] (Contents)
+[page 260] (Contents)
 
     7.12.14.5 The islessgreater macro
     Synopsis
-1          #include <math.h>
-           int islessgreater(real-floating x, real-floating y);
+1           #include <math.h>
+            int islessgreater(real-floating x, real-floating y);
     Description
 2   The islessgreater macro determines whether its first argument is less than or
     greater than its second argument. The islessgreater(x, y) macro is similar to
@@ -10503,18 +10563,18 @@ char int_p_sep_by_space
 3   The islessgreater macro returns the value of (x) < (y) || (x) > (y).
     7.12.14.6 The isunordered macro
     Synopsis
-1          #include <math.h>
-           int isunordered(real-floating x, real-floating y);
+1           #include <math.h>
+            int isunordered(real-floating x, real-floating y);
     Description
 2   The isunordered macro determines whether its arguments are unordered.
     Returns
 3   The isunordered macro returns 1 if its arguments are unordered and 0 otherwise.
 
-[page 260] (Contents)
+[page 261] (Contents)
 
     7.13 Nonlocal jumps <setjmp.h>
 1   The header <setjmp.h> defines the macro setjmp, and declares one function and
-    one type, for bypassing the normal function call and return discipline.244)
+    one type, for bypassing the normal function call and return discipline.247)
 2   The type declared is
             jmp_buf
     which is an array type suitable for holding the information needed to restore a calling
@@ -10545,10 +10605,10 @@ char int_p_sep_by_space
       constant expression, with the resulting expression being the entire controlling
 
 
-    244) These functions are useful for dealing with unusual conditions encountered in a low-level function of
+    247) These functions are useful for dealing with unusual conditions encountered in a low-level function of
          a program.
 
-[page 261] (Contents)
+[page 262] (Contents)
 
         expression of a selection or iteration statement;
     -- the operand of a unary ! operator with the resulting expression being the entire
@@ -10563,18 +10623,19 @@ char int_p_sep_by_space
     Description
 2   The longjmp function restores the environment saved by the most recent invocation of
     the setjmp macro in the same invocation of the program with the corresponding
-    jmp_buf argument. If there has been no such invocation, or if the function containing
-    the invocation of the setjmp macro has terminated execution245) in the interim, or if the
-    invocation of the setjmp macro was within the scope of an identifier with variably
-    modified type and execution has left that scope in the interim, the behavior is undefined.
-3   All accessible objects have values, and all other components of the abstract machine246)
+    jmp_buf argument. If there has been no such invocation, or if the invocation was from
+    another thread of execution, or if the function containing the invocation of the setjmp
+    macro has terminated execution248) in the interim, or if the invocation of the setjmp
+    macro was within the scope of an identifier with variably modified type and execution has
+    left that scope in the interim, the behavior is undefined.
+3   All accessible objects have values, and all other components of the abstract machine249)
     have state, as of the time the longjmp function was called, except that the values of
     objects of automatic storage duration that are local to the function containing the
     invocation of the corresponding setjmp macro that do not have volatile-qualified type
     and have been changed between the setjmp invocation and longjmp call are
     indeterminate.
     Returns
-4   After longjmp is completed, program execution continues as if the corresponding
+4   After longjmp is completed, thread execution continues as if the corresponding
     invocation of the setjmp macro had just returned the value specified by val. The
     longjmp function cannot cause the setjmp macro to return the value 0; if val is 0,
     the setjmp macro returns the value 1.
@@ -10583,36 +10644,35 @@ char int_p_sep_by_space
 
 
 
-
-    245) For example, by executing a return statement or because another longjmp call has caused a
+    248) For example, by executing a return statement or because another longjmp call has caused a
          transfer to a setjmp invocation in a function earlier in the set of nested calls.
-    246) This includes, but is not limited to, the floating-point status flags and the state of open files.
+    249) This includes, but is not limited to, the floating-point status flags and the state of open files.
 
-[page 262] (Contents)
+[page 263] (Contents)
 
-        #include <setjmp.h>
-        jmp_buf buf;
-        void g(int n);
-        void h(int n);
-        int n = 6;
-        void f(void)
-        {
-              int x[n];          // valid: f is not terminated
-              setjmp(buf);
-              g(n);
-        }
-        void g(int n)
-        {
-              int a[n];          // a may remain allocated
-              h(n);
-        }
-        void h(int n)
-        {
-              int b[n];          // b may remain allocated
-              longjmp(buf, 2);   // might cause memory loss
-        }
+      #include <setjmp.h>
+      jmp_buf buf;
+      void g(int n);
+      void h(int n);
+      int n = 6;
+      void f(void)
+      {
+            int x[n];             // valid: f is not terminated
+            setjmp(buf);
+            g(n);
+      }
+      void g(int n)
+      {
+            int a[n];             // a may remain allocated
+            h(n);
+      }
+      void h(int n)
+      {
+            int b[n];             // b may remain allocated
+            longjmp(buf, 2);      // might cause memory loss
+      }
 
-[page 263] (Contents)
+[page 264] (Contents)
 
     7.14 Signal handling <signal.h>
 1   The header <signal.h> declares a type and two functions and defines several macros,
@@ -10640,18 +10700,18 @@ char int_p_sep_by_space
 4   An implementation need not generate any of these signals, except as a result of explicit
     calls to the raise function. Additional signals and pointers to undeclarable functions,
     with macro definitions beginning, respectively, with the letters SIG and an uppercase
-    letter or with SIG_ and an uppercase letter,247) may also be specified by the
+    letter or with SIG_ and an uppercase letter,250) may also be specified by the
     implementation. The complete set of signals, their semantics, and their default handling
     is implementation-defined; all signal numbers shall be positive.
 
 
 
 
-    247) See ''future library directions'' (7.30.6). The names of the signal numbers reflect the following terms
+    250) See ''future library directions'' (7.31.7). The names of the signal numbers reflect the following terms
          (respectively): abort, floating-point exception, illegal instruction, interrupt, segmentation violation,
          and termination.
 
-[page 264] (Contents)
+[page 265] (Contents)
 
     7.14.1 Specify signal handling
     7.14.1.1 The signal function
@@ -10664,7 +10724,7 @@ char int_p_sep_by_space
     for that signal will occur. If the value of func is SIG_IGN, the signal will be ignored.
     Otherwise, func shall point to a function to be called when that signal occurs. An
     invocation of such a function because of a signal, or (recursively) of any further functions
-    called by that invocation (other than functions in the standard library),248) is called a
+    called by that invocation (other than functions in the standard library),251) is called a
     signal handler.
 3   When a signal occurs and func points to a function, it is implementation-defined
     whether the equivalent of signal(sig, SIG_DFL); is executed or the
@@ -10685,22 +10745,23 @@ char int_p_sep_by_space
     quick_exit function, or the signal function with the first argument equal to the
     signal number corresponding to the signal that caused the invocation of the handler.
     Furthermore, if such a call to the signal function results in a SIG_ERR return, the
-    value of errno is indeterminate.249)
+    value of errno is indeterminate.252)
 
 
-    248) This includes functions called indirectly via standard library functions (e.g., a SIGABRT handler
+    251) This includes functions called indirectly via standard library functions (e.g., a SIGABRT handler
          called via the abort function).
-    249) If any signal is generated by an asynchronous signal handler, the behavior is undefined.
+    252) If any signal is generated by an asynchronous signal handler, the behavior is undefined.
 
-[page 265] (Contents)
+[page 266] (Contents)
 
 6   At program startup, the equivalent of
-           signal(sig, SIG_IGN);
+            signal(sig, SIG_IGN);
     may be executed for some signals selected in an implementation-defined manner; the
     equivalent of
-           signal(sig, SIG_DFL);
+            signal(sig, SIG_DFL);
     is executed for all other signals defined by the implementation.
-7   The implementation shall behave as if no library function calls the signal function.
+7   Use of this function in a multi-threaded program results in undefined behavior. The
+    implementation shall behave as if no library function calls the signal function.
     Returns
 8   If the request can be honored, the signal function returns the value of func for the
     most recent successful call to signal for the specified signal sig. Otherwise, a value of
@@ -10710,8 +10771,8 @@ char int_p_sep_by_space
     7.14.2 Send signal
     7.14.2.1 The raise function
     Synopsis
-1          #include <signal.h>
-           int raise(int sig);
+1           #include <signal.h>
+            int raise(int sig);
     Description
 2   The raise function carries out the actions described in 7.14.1.1 for the signal sig. If a
     signal handler is called, the raise function shall not return until after the signal handler
@@ -10719,18 +10780,22 @@ char int_p_sep_by_space
     Returns
 3   The raise function returns zero if successful, nonzero if unsuccessful.
 
-[page 266] (Contents)
+[page 267] (Contents)
 
     7.15 Alignment <stdalign.h>
-1   The header <stdalign.h> defines two macros.
+1   The header <stdalign.h> defines four macros.
 2   The macro
-            alignas
-    expands to _Alignas.
-3   The remaining macro is suitable for use in #if preprocessing directives. It is
-            __alignas_is_defined
-    which expands to the integer constant 1.
+           alignas
+    expands to _Alignas; the macro
+           alignof
+    expands to _Alignof.
+3   The remaining macros are suitable for use in #if preprocessing directives. They are
+           __alignas_is_defined
+    and
+           __alignof_is_defined
+    which both expand to the integer constant 1.
 
-[page 267] (Contents)
+[page 268] (Contents)
 
     7.16 Variable arguments <stdarg.h>
 1   The header <stdarg.h> declares a type and defines four macros, for advancing
@@ -10748,7 +10813,7 @@ char int_p_sep_by_space
     subclause) having type va_list. The object ap may be passed as an argument to
     another function; if that function invokes the va_arg macro with parameter ap, the
     value of ap in the calling function is indeterminate and shall be passed to the va_end
-    macro prior to any further reference to ap.250)
+    macro prior to any further reference to ap.253)
     7.16.1 Variable argument list access macros
 1   The va_start and va_arg macros described in this subclause shall be implemented
     as macros, not functions. It is unspecified whether va_copy and va_end are macros or
@@ -10766,10 +10831,10 @@ char int_p_sep_by_space
     the next argument in the call. The parameter ap shall have been initialized by the
     va_start or va_copy macro (without an intervening invocation of the va_end
 
-    250) It is permitted to create a pointer to a va_list and pass that pointer to another function, in which
+    253) It is permitted to create a pointer to a va_list and pass that pointer to another function, in which
          case the original function may make further use of the original list after the other function returns.
 
-[page 268] (Contents)
+[page 269] (Contents)
 
     macro for the same ap). Each invocation of the va_arg macro modifies ap so that the
     values of successive arguments are returned in turn. The parameter type shall be a type
@@ -10787,8 +10852,8 @@ char int_p_sep_by_space
     values of the remaining arguments in succession.
     7.16.1.2 The va_copy macro
     Synopsis
-1           #include <stdarg.h>
-            void va_copy(va_list dest, va_list src);
+1          #include <stdarg.h>
+           void va_copy(va_list dest, va_list src);
     Description
 2   The va_copy macro initializes dest as a copy of src, as if the va_start macro had
     been applied to dest followed by the same sequence of uses of the va_arg macro as
@@ -10799,15 +10864,15 @@ char int_p_sep_by_space
 3   The va_copy macro returns no value.
     7.16.1.3 The va_end macro
     Synopsis
-1           #include <stdarg.h>
-            void va_end(va_list ap);
+1          #include <stdarg.h>
+           void va_end(va_list ap);
     Description
 2   The va_end macro facilitates a normal return from the function whose variable
     argument list was referred to by the expansion of the va_start macro, or the function
     containing the expansion of the va_copy macro, that initialized the va_list ap. The
     va_end macro may modify ap so that it is no longer usable (without being reinitialized
 
-[page 269] (Contents)
+[page 270] (Contents)
 
     by the va_start or va_copy macro). If there is no corresponding invocation of the
     va_start or va_copy macro, or if the va_end macro is not invoked before the
@@ -10841,7 +10906,7 @@ char int_p_sep_by_space
                   char *array[MAXARGS];
                   int ptr_no = 0;
 
-[page 270] (Contents)
+[page 271] (Contents)
 
                       if (n_ptrs > MAXARGS)
                             n_ptrs = MAXARGS;
@@ -10883,47 +10948,45 @@ char int_p_sep_by_space
                       f4(n_ptrs, array);
              }
 
-[page 271] (Contents)
+[page 272] (Contents)
 
     7.17 Atomics <stdatomic.h>
     7.17.1 Introduction
 1   The header <stdatomic.h> defines several macros and declares several types and
-    functions for performing atomic operations on data shared between threads.
-2   Implementations that define the macro __STDC_NO_THREADS__ need not provide
+    functions for performing atomic operations on data shared between threads.254)
+2   Implementations that define the macro __STDC_NO_ATOMICS__ need not provide
     this header nor support any of its facilities.
 3   The macros defined are the atomic lock-free macros
-           ATOMIC_CHAR_LOCK_FREE
-           ATOMIC_CHAR16_T_LOCK_FREE
-           ATOMIC_CHAR32_T_LOCK_FREE
-           ATOMIC_WCHAR_T_LOCK_FREE
-           ATOMIC_SHORT_LOCK_FREE
-           ATOMIC_INT_LOCK_FREE
-           ATOMIC_LONG_LOCK_FREE
-           ATOMIC_LLONG_LOCK_FREE
-           ATOMIC_ADDRESS_LOCK_FREE
+             ATOMIC_BOOL_LOCK_FREE
+             ATOMIC_CHAR_LOCK_FREE
+             ATOMIC_CHAR16_T_LOCK_FREE
+             ATOMIC_CHAR32_T_LOCK_FREE
+             ATOMIC_WCHAR_T_LOCK_FREE
+             ATOMIC_SHORT_LOCK_FREE
+             ATOMIC_INT_LOCK_FREE
+             ATOMIC_LONG_LOCK_FREE
+             ATOMIC_LLONG_LOCK_FREE
+             ATOMIC_POINTER_LOCK_FREE
     which indicate the lock-free property of the corresponding atomic types (both signed and
     unsigned); and
-           ATOMIC_FLAG_INIT
+             ATOMIC_FLAG_INIT
     which expands to an initializer for an object of type atomic_flag.
 4   The types include
-           memory_order
+              memory_order
     which is an enumerated type whose enumerators identify memory ordering constraints;
-           atomic_flag
-    which is a structure type representing a lock-free, primitive atomic flag;
-           atomic_bool
-    which is a structure type representing the atomic analog of the type _Bool;
-           atomic_address
-    which is a structure type representing the atomic analog of a pointer type; and several
+              atomic_flag
+    which is a structure type representing a lock-free, primitive atomic flag; and several *
     atomic analogs of integer types.
-5   In the following operation definitions:
+5   In the following synopses:
     -- An A refers to one of the atomic types.
+    -- A C refers to its corresponding non-atomic type.                                         *
+    -- An M refers to the type of the other argument for arithmetic operations. For atomic
+      integer types, M is C. For atomic pointer types, M is ptrdiff_t.
 
-[page 272] (Contents)
+    254) See ''future library directions'' (7.31.8).
+
+[page 273] (Contents)
 
-    -- A C refers to its corresponding non-atomic type. The atomic_address atomic
-      type corresponds to the void * non-atomic type.
-    -- An M refers to the type of the other argument for arithmetic operations. For atomic
-      integer types, M is C. For atomic address types, M is ptrdiff_t.
     -- The functions not ending in _explicit have the same semantics as the
       corresponding _explicit function with memory_order_seq_cst for the
       memory_order argument.
@@ -10956,28 +11019,28 @@ char int_p_sep_by_space
 2   The atomic_init generic function initializes the atomic object pointed to by obj to
     the value value, while also initializing any additional state that the implementation
     might need to carry for the atomic object.
-
-[page 273] (Contents)
-
 3   Although this function initializes an atomic object, it does not avoid data races;
     concurrent access to the variable being initialized, even via an atomic operation,
     constitutes a data race.
+
+[page 274] (Contents)
+
     Returns
 4   The atomic_init generic function returns no value.
 5   EXAMPLE
-            atomic_int guide;
-            atomic_init(&guide, 42);
+              atomic_int guide;
+              atomic_init(&guide, 42);
 
     7.17.3 Order and consistency
 1   The enumerated type memory_order specifies the detailed regular (non-atomic)
     memory synchronization operations as defined in 5.1.2.4 and may provide for operation
-    ordering. Its enumeration constants are as follows:
-            memory_order_relaxed
-            memory_order_consume
-            memory_order_acquire
-            memory_order_release
-            memory_order_acq_rel
-            memory_order_seq_cst
+    ordering. Its enumeration constants are as follows:255)
+             memory_order_relaxed
+             memory_order_consume
+             memory_order_acquire
+             memory_order_release
+             memory_order_acq_rel
+             memory_order_seq_cst
 2   For memory_order_relaxed, no operation orders memory.
 3   For       memory_order_release,       memory_order_acq_rel,             and
     memory_order_seq_cst, a store operation performs a release operation on the
@@ -10987,20 +11050,30 @@ char int_p_sep_by_space
     affected memory location.
 5   For memory_order_consume, a load operation performs a consume operation on the
     affected memory location.
-6   For memory_order_seq_cst, there shall be a single total order S on all operations,
+6   There shall be a single total order S on all memory_order_seq_cst operations,
     consistent with the ''happens before'' order and modification orders for all affected
-    locations, such that each memory_order_seq_cst operation that loads a value
-    observes either the last preceding modification according to this order S, or the result of
-    an operation that is not memory_order_seq_cst.
-7   NOTE 1 Although it is not explicitly required that S include lock operations, it can always be extended to
-    an order that does include lock and unlock operations, since the ordering between those is already included
-    in the ''happens before'' ordering.
+    locations, such that each memory_order_seq_cst operation B that loads a value
+    from an atomic object M observes one of the following values:
+    -- the result of the last modification A of M that precedes B in S, if it exists, or
+    -- if A exists, the result of some modification of M in the visible sequence of side
+      effects with respect to B that is not memory_order_seq_cst and that does not
+      happen before A, or
 
-8   NOTE 2 Atomic operations specifying memory_order_relaxed are relaxed only with respect to
-    memory ordering. Implementations must still guarantee that any given atomic access to a particular atomic
 
-[page 274] (Contents)
 
+
+    255) See ''future library directions'' (7.31.8).
+
+[page 275] (Contents)
+
+     -- if A does not exist, the result of some modification of M in the visible sequence of
+        side effects with respect to B that is not memory_order_seq_cst.
+7    NOTE 1 Although it is not explicitly required that S include lock operations, it can always be extended to
+     an order that does include lock and unlock operations, since the ordering between those is already included
+     in the ''happens before'' ordering.
+
+8    NOTE 2 Atomic operations specifying memory_order_relaxed are relaxed only with respect to
+     memory ordering. Implementations must still guarantee that any given atomic access to a particular atomic
      object be indivisible with respect to all other atomic accesses to that object.
 
 9    For an atomic operation B that reads the value of an atomic object M, if there is a
@@ -11020,7 +11093,7 @@ char int_p_sep_by_space
 13   An atomic store shall only store a value that has been computed from constants and
      program input values by a finite sequence of program evaluations, such that each
      evaluation observes the values of variables as computed by the last prior assignment in
-     the sequence.251) The ordering of evaluations in this sequence shall be such that
+     the sequence.256) The ordering of evaluations in this sequence shall be such that
      -- If an evaluation B observes a value computed by A in a different thread, then B does
        not happen before A.
      -- If an evaluation A is included in the sequence, then all evaluations that assign to the
@@ -11028,34 +11101,34 @@ char int_p_sep_by_space
 14   NOTE 3 The second requirement disallows ''out-of-thin-air'', or ''speculative'' stores of atomics when
      relaxed atomics are used. Since unordered operations are involved, evaluations may appear in this
      sequence out of thread order. For example, with x and y initially zero,
-              // Thread 1:
-              r1 = atomic_load_explicit(&y, memory_order_relaxed);
-              atomic_store_explicit(&x, r1, memory_order_relaxed);
 
-              // Thread 2:
-              r2 = atomic_load_explicit(&x, memory_order_relaxed);
-              atomic_store_explicit(&y, 42, memory_order_relaxed);
-     is allowed to produce r1 == 42 && r2 == 42. The sequence of evaluations justifying this consists of:
 
 
 
+     256) Among other implications, atomic variables shall not decay.
 
-     251) Among other implications, atomic variables shall not decay.
+[page 276] (Contents)
 
-[page 275] (Contents)
+               // Thread 1:
+               r1 = atomic_load_explicit(&y, memory_order_relaxed);
+               atomic_store_explicit(&x, r1, memory_order_relaxed);
 
-             atomic_store_explicit(&y, 42,               memory_order_relaxed);
-             r1 = atomic_load_explicit(&y,               memory_order_relaxed);
-             atomic_store_explicit(&x, r1,               memory_order_relaxed);
-             r2 = atomic_load_explicit(&x,               memory_order_relaxed);
+               // Thread 2:
+               r2 = atomic_load_explicit(&x, memory_order_relaxed);
+               atomic_store_explicit(&y, 42, memory_order_relaxed);
+     is allowed to produce r1 == 42 && r2 == 42. The sequence of evaluations justifying this consists of:
+               atomic_store_explicit(&y, 42,             memory_order_relaxed);
+               r1 = atomic_load_explicit(&y,             memory_order_relaxed);
+               atomic_store_explicit(&x, r1,             memory_order_relaxed);
+               r2 = atomic_load_explicit(&x,             memory_order_relaxed);
      On the other hand,
-             // Thread 1:
-             r1 = atomic_load_explicit(&y, memory_order_relaxed);
-             atomic_store_explicit(&x, r1, memory_order_relaxed);
+               // Thread 1:
+               r1 = atomic_load_explicit(&y, memory_order_relaxed);
+               atomic_store_explicit(&x, r1, memory_order_relaxed);
 
-             // Thread 2:
-             r2 = atomic_load_explicit(&x, memory_order_relaxed);
-             atomic_store_explicit(&y, r2, memory_order_relaxed);
+               // Thread 2:
+               r2 = atomic_load_explicit(&x, memory_order_relaxed);
+               atomic_store_explicit(&y, r2, memory_order_relaxed);
      is not allowed to produce r1 == 42 && r2 = 42, since there is no sequence of evaluations that results
      in the computation of 42. In the absence of ''relaxed'' operations and read-modify-write operations with
      weaker than memory_order_acq_rel ordering, the second requirement has no impact.
@@ -11075,16 +11148,16 @@ char int_p_sep_by_space
      However, this is not useful behavior, and implementations should not allow it.
 16   Implementations should make atomic stores visible to atomic loads within a reasonable
      amount of time.
-     7.17.3.1 The kill_dependency macro
-     Synopsis
-1            #include <stdatomic.h>
-             type kill_dependency(type y);
-     Description
-2    The kill_dependency macro terminates a dependency chain; the argument does not
-     carry a dependency to the return value.
 
-[page 276] (Contents)
+[page 277] (Contents)
 
+    7.17.3.1 The kill_dependency macro
+    Synopsis
+1          #include <stdatomic.h>
+           type kill_dependency(type y);
+    Description
+2   The kill_dependency macro terminates a dependency chain; the argument does not
+    carry a dependency to the return value.
     Returns
 3   The kill_dependency macro returns the value of y.
     7.17.4 Fences
@@ -11107,21 +11180,21 @@ char int_p_sep_by_space
     in the release sequence headed by A.
     7.17.4.1 The atomic_thread_fence function
     Synopsis
-1           #include <stdatomic.h>
-            void atomic_thread_fence(memory_order order);
+1          #include <stdatomic.h>
+           void atomic_thread_fence(memory_order order);
     Description
 2   Depending on the value of order, this operation:
     -- has no effects, if order == memory_order_relaxed;
+
+[page 278] (Contents)
+
     -- is an acquire fence, if order == memory_order_acquire or order ==
       memory_order_consume;
     -- is a release fence, if order == memory_order_release;
-    -- is both an acquire fence              and   a    release   fence,    if   order     ==
+    -- is both an acquire fence                    and     a    release    fence,     if   order        ==
       memory_order_acq_rel;
-    -- is a sequentially consistent acquire and release fence, if order                    ==
+    -- is a sequentially consistent acquire and release fence, if order                                 ==
       memory_order_seq_cst.
-
-[page 277] (Contents)
-
     Returns
 3   The atomic_thread_fence function returns no value.
     7.17.4.2 The atomic_signal_fence function
@@ -11129,8 +11202,8 @@ char int_p_sep_by_space
 1           #include <stdatomic.h>
             void atomic_signal_fence(memory_order order);
     Description
-2   Equivalent to atomic_thread_fence(order), except that ''synchronizes with''
-    relationships are established only between a thread and a signal handler executed in the
+2   Equivalent to atomic_thread_fence(order), except that the resulting ordering
+    constraints are established only between a thread and a signal handler executed in the
     same thread.
 3   NOTE 1 The atomic_signal_fence function can be used to specify the order in which actions
     performed by the thread become visible to the signal handler.
@@ -11150,83 +11223,88 @@ char int_p_sep_by_space
     depend on any per-process state. This restriction enables communication via memory mapped into a
     process more than once and memory shared between two processes.
 
+[page 279] (Contents)
+
     7.17.5.1 The atomic_is_lock_free generic function
     Synopsis
-1           #include <stdatomic.h>
-            _Bool atomic_is_lock_free(atomic_type const volatile *obj);
+1            #include <stdatomic.h>
+             _Bool atomic_is_lock_free(const volatile A *obj);
     Description
 2   The atomic_is_lock_free generic function indicates whether or not the object
-    pointed to by obj is lock-free. atomic_type can be any atomic type.
+    pointed to by obj is lock-free.                                              *
     Returns
 3   The atomic_is_lock_free generic function returns nonzero (true) if and only if the
     object's operations are lock-free. The result of a lock-free query on one object cannot be
+    inferred from the result of a lock-free query on another object.
+    7.17.6 Atomic integer types
+1   For each line in the following table,257) the atomic type name is declared as a type that
+    has the same representation and alignment requirements as the corresponding direct
+    type.258)
 
-[page 278] (Contents)
 
-    inferred from the result of a lock-free query on another object.
-    7.17.6 Atomic integer and address types
-1   For each line in the following table, the atomic type name is declared as the
-    corresponding direct type.
 
-[page 279] (Contents)
 
-               Atomic type name                              Direct type
-           atomic_char                           _Atomic    char
-           atomic_schar                          _Atomic    signed char
-           atomic_uchar                          _Atomic    unsigned char
-           atomic_short                          _Atomic    short
-           atomic_ushort                         _Atomic    unsigned short
-           atomic_int                            _Atomic    int
-           atomic_uint                           _Atomic    unsigned int
-           atomic_long                           _Atomic    long
-           atomic_ulong                          _Atomic    unsigned long
-           atomic_llong                          _Atomic    long long
-           atomic_ullong                         _Atomic    unsigned long long
-           atomic_char16_t                       _Atomic    char16_t
-           atomic_char32_t                       _Atomic    char32_t
-           atomic_wchar_t                        _Atomic    wchar_t
-           atomic_int_least8_t                   _Atomic    int_least8_t
-           atomic_uint_least8_t                  _Atomic    uint_least8_t
-           atomic_int_least16_t                  _Atomic    int_least16_t
-           atomic_uint_least16_t                 _Atomic    uint_least16_t
-           atomic_int_least32_t                  _Atomic    int_least32_t
-           atomic_uint_least32_t                 _Atomic    uint_least32_t
-           atomic_int_least64_t                  _Atomic    int_least64_t
-           atomic_uint_least64_t                 _Atomic    uint_least64_t
-           atomic_int_fast8_t                    _Atomic    int_fast8_t
-           atomic_uint_fast8_t                   _Atomic    uint_fast8_t
-           atomic_int_fast16_t                   _Atomic    int_fast16_t
-           atomic_uint_fast16_t                  _Atomic    uint_fast16_t
-           atomic_int_fast32_t                   _Atomic    int_fast32_t
-           atomic_uint_fast32_t                  _Atomic    uint_fast32_t
-           atomic_int_fast64_t                   _Atomic    int_fast64_t
-           atomic_uint_fast64_t                  _Atomic    uint_fast64_t
-           atomic_intptr_t                       _Atomic    intptr_t
-           atomic_uintptr_t                      _Atomic    uintptr_t
-           atomic_size_t                         _Atomic    size_t
-           atomic_ptrdiff_t                      _Atomic    ptrdiff_t
-           atomic_intmax_t                       _Atomic    intmax_t
-           atomic_uintmax_t                      _Atomic    uintmax_t
-2   The semantics of the operations on these types are defined in 7.17.7.
-3   The atomic_bool type provides an atomic boolean.
+    257) See ''future library directions'' (7.31.8).
+    258) The same representation and alignment requirements are meant to imply interchangeability as
+         arguments to functions, return values from functions, and members of unions.
 
 [page 280] (Contents)
 
-4   The atomic_address type provides atomic void * operations. The unit of
-    addition/subtraction shall be one byte.
-5   NOTE The representation of atomic integer and address types need not have the same size as their
-    corresponding regular types. They should have the same size whenever possible, as it eases effort required
-    to port existing code.
+                  Atomic type name                           Direct type
+              atomic_bool                        _Atomic    _Bool
+              atomic_char                        _Atomic    char
+              atomic_schar                       _Atomic    signed char
+              atomic_uchar                       _Atomic    unsigned char
+              atomic_short                       _Atomic    short
+              atomic_ushort                      _Atomic    unsigned short
+              atomic_int                         _Atomic    int
+              atomic_uint                        _Atomic    unsigned int
+              atomic_long                        _Atomic    long
+              atomic_ulong                       _Atomic    unsigned long
+              atomic_llong                       _Atomic    long long
+              atomic_ullong                      _Atomic    unsigned long long
+              atomic_char16_t                    _Atomic    char16_t
+              atomic_char32_t                    _Atomic    char32_t
+              atomic_wchar_t                     _Atomic    wchar_t
+              atomic_int_least8_t                _Atomic    int_least8_t
+              atomic_uint_least8_t               _Atomic    uint_least8_t
+              atomic_int_least16_t               _Atomic    int_least16_t
+              atomic_uint_least16_t              _Atomic    uint_least16_t
+              atomic_int_least32_t               _Atomic    int_least32_t
+              atomic_uint_least32_t              _Atomic    uint_least32_t
+              atomic_int_least64_t               _Atomic    int_least64_t
+              atomic_uint_least64_t              _Atomic    uint_least64_t
+              atomic_int_fast8_t                 _Atomic    int_fast8_t
+              atomic_uint_fast8_t                _Atomic    uint_fast8_t
+              atomic_int_fast16_t                _Atomic    int_fast16_t
+              atomic_uint_fast16_t               _Atomic    uint_fast16_t
+              atomic_int_fast32_t                _Atomic    int_fast32_t
+              atomic_uint_fast32_t               _Atomic    uint_fast32_t
+              atomic_int_fast64_t                _Atomic    int_fast64_t
+              atomic_uint_fast64_t               _Atomic    uint_fast64_t
+              atomic_intptr_t                    _Atomic    intptr_t
+              atomic_uintptr_t                   _Atomic    uintptr_t
+              atomic_size_t                      _Atomic    size_t
+              atomic_ptrdiff_t                   _Atomic    ptrdiff_t
+              atomic_intmax_t                    _Atomic    intmax_t
+              atomic_uintmax_t                   _Atomic    uintmax_t
+2   The semantics of the operations on these types are defined in 7.17.7.                       *
+
+[page 281] (Contents)
+
+3   NOTE The representation of atomic integer types need not have the same size as their corresponding
+    regular types. They should have the same size whenever possible, as it eases effort required to port existing
+    code.
 
     7.17.7 Operations on atomic types
 1   There are only a few kinds of operations on atomic types, though there are many
     instances of those kinds. This subclause specifies each general kind.
     7.17.7.1 The atomic_store generic functions
     Synopsis
-1           #include <stdatomic.h>
-            void atomic_store(volatile A *object, C desired);
-            void atomic_store_explicit(volatile A *object,
-                 C desired, memory_order order);
+1            #include <stdatomic.h>
+             void atomic_store(volatile A *object, C desired);
+             void atomic_store_explicit(volatile A *object,
+                  C desired, memory_order order);
     Description
 2   The      order      argument    shall    not    be    memory_order_acquire,
     memory_order_consume, nor memory_order_acq_rel. Atomically replace the
@@ -11236,17 +11314,17 @@ char int_p_sep_by_space
 3   The atomic_store generic functions return no value.
     7.17.7.2 The atomic_load generic functions
     Synopsis
-1           #include <stdatomic.h>
-            C atomic_load(volatile A *object);
-            C atomic_load_explicit(volatile A *object,
-                 memory_order order);
+1            #include <stdatomic.h>
+             C atomic_load(volatile A *object);
+             C atomic_load_explicit(volatile A *object,
+                  memory_order order);
     Description
 2   The order argument shall not be memory_order_release nor
     memory_order_acq_rel. Memory is affected according to the value of order.
     Returns
     Atomically returns the value pointed to by object.
 
-[page 281] (Contents)
+[page 282] (Contents)
 
     7.17.7.3 The atomic_exchange generic functions
     Synopsis
@@ -11282,17 +11360,18 @@ char int_p_sep_by_space
     object. Further, if the comparison is true, memory is affected according to the value of
     success, and if the comparison is false, memory is affected according to the value of
     failure. These operations are atomic read-modify-write operations (5.1.2.4).
-3   NOTE 1    The effect of the compare-and-exchange operations is
+3   NOTE 1    For example, the effect of atomic_compare_exchange_strong is
 
-[page 282] (Contents)
+[page 283] (Contents)
 
-             if (*object == *expected)
-                   *object = desired;
+             if (memcmp(object, expected, sizeof (*object)) == 0)
+                   memcpy(object, &desired, sizeof (*object));
              else
-                   *expected = *object;
+                   memcpy(expected, object, sizeof (*object));
 
-4   The weak compare-and-exchange operations may fail spuriously, that is, return zero
-    while leaving the value pointed to by expected unchanged.
+4   A weak compare-and-exchange operation may fail spuriously. That is, even when the
+    contents of memory referred to by expected and object are equal, it may return zero
+    and store back to expected the same memory contents that were originally there.
 5   NOTE 2 This spurious failure enables implementation of compare-and-exchange on a broader class of
     machines, e.g. load-locked store-conditional machines.
 
@@ -11310,9 +11389,9 @@ char int_p_sep_by_space
 7   The result of the comparison.
     7.17.7.5 The atomic_fetch and modify generic functions
 1   The following operations perform arithmetic and bitwise computations. All of these
-    operations are applicable to an object of any atomic integer type. Only addition and
-    subtraction are applicable to atomic_address. None of these operations is applicable
-    to atomic_bool. The key, operator, and computation correspondence is:
+    operations are applicable to an object of any atomic integer type. None of these *
+    operations is applicable to atomic_bool. The key, operator, and computation
+    correspondence is:
      key            op          computation
      add            +       addition
      sub            -       subtraction
@@ -11327,10 +11406,10 @@ char int_p_sep_by_space
     Description
 3   Atomically replaces the value pointed to by object with the result of the computation
     applied to the value pointed to by object and the given operand. Memory is affected
-    according to the value of order. These operations are atomic read-modify-write
 
-[page 283] (Contents)
+[page 284] (Contents)
 
+    according to the value of order. These operations are atomic read-modify-write
     operations (5.1.2.4). For signed integer types, arithmetic is defined to use two's
     complement representation with silent wrap-around on overflow; there are no undefined
     results. For address types, the result may be an undefined address, but the operations
@@ -11361,25 +11440,25 @@ char int_p_sep_by_space
     7.17.8.1 The atomic_flag_test_and_set functions
     Synopsis
 1           #include <stdatomic.h>
-            bool atomic_flag_test_and_set(
+            _Bool atomic_flag_test_and_set(
                  volatile atomic_flag *object);
-            bool atomic_flag_test_and_set_explicit(
+            _Bool atomic_flag_test_and_set_explicit(
                  volatile atomic_flag *object, memory_order order);
     Description
 2   Atomically sets the value pointed to by object to true. Memory is affected according
     to the value of order. These operations are atomic read-modify-write operations
     (5.1.2.4).
 
-[page 284] (Contents)
+[page 285] (Contents)
 
     Returns
 3   Atomically, the value of the object immediately before the effects.
     7.17.8.2 The atomic_flag_clear functions
     Synopsis
-1           #include <stdatomic.h>
-            void atomic_flag_clear(volatile atomic_flag *object);
-            void atomic_flag_clear_explicit(
-                 volatile atomic_flag *object, memory_order order);
+1          #include <stdatomic.h>
+           void atomic_flag_clear(volatile atomic_flag *object);
+           void atomic_flag_clear_explicit(
+                volatile atomic_flag *object, memory_order order);
     Description
 2   The order argument shall not be memory_order_acquire nor
     memory_order_acq_rel. Atomically sets the value pointed to by object to false.
@@ -11387,7 +11466,7 @@ char int_p_sep_by_space
     Returns
 3   The atomic_flag_clear functions return no value.
 
-[page 285] (Contents)
+[page 286] (Contents)
 
     7.18 Boolean type and values <stdbool.h>
 1   The header <stdbool.h> defines four macros.
@@ -11403,27 +11482,27 @@ char int_p_sep_by_space
              __bool_true_false_are_defined
     which expands to the integer constant 1.
 4   Notwithstanding the provisions of 7.1.3, a program may undefine and perhaps then
-    redefine the macros bool, true, and false.252)
+    redefine the macros bool, true, and false.259)
 
 
 
 
-    252) See ''future library directions'' (7.30.7).
+    259) See ''future library directions'' (7.31.9).
 
-[page 286] (Contents)
+[page 287] (Contents)
 
     7.19 Common definitions <stddef.h>
 1   The header <stddef.h> defines the following macros and declares the following types.
     Some are also defined in other headers, as noted in their respective subclauses.
 2   The types are
-            ptrdiff_t
+           ptrdiff_t
     which is the signed integer type of the result of subtracting two pointers;
-            size_t
+           size_t
     which is the unsigned integer type of the result of the sizeof operator;
-            max_align_t
+           max_align_t
     which is an object type whose alignment is as great as is supported by the implementation
     in all contexts; and
-            wchar_t
+           wchar_t
     which is an integer type whose range of values can represent distinct codes for all
     members of the largest extended character set specified among the supported locales; the
     null character shall have the code value zero. Each member of the basic character set
@@ -11431,30 +11510,26 @@ char int_p_sep_by_space
     character      constant     if     an      implementation      does      not      define
     __STDC_MB_MIGHT_NEQ_WC__.
 3   The macros are
-            NULL
+           NULL
     which expands to an implementation-defined null pointer constant; and
-            offsetof(type, member-designator)
+           offsetof(type, member-designator)
     which expands to an integer constant expression that has type size_t, the value of
     which is the offset in bytes, to the structure member (designated by member-designator),
     from the beginning of its structure (designated by type). The type and member designator
     shall be such that given
-            static type t;
+           static type t;
     then the expression &(t.member-designator) evaluates to an address constant. (If the
     specified member is a bit-field, the behavior is undefined.)
     Recommended practice
 4   The types used for size_t and ptrdiff_t should not have an integer conversion rank
     greater than that of signed long int unless the implementation supports objects
-    large enough to make this necessary.
-
-[page 287] (Contents)
-
-Forward references: localization (7.11).
+    large enough to make this necessary.                                               *
 
 [page 288] (Contents)
 
     7.20 Integer types <stdint.h>
 1   The header <stdint.h> declares sets of integer types having specified widths, and
-    defines corresponding sets of macros.253) It also defines macros that specify limits of
+    defines corresponding sets of macros.260) It also defines macros that specify limits of
     integer types corresponding to types defined in other standard headers.
 2   Types are defined in the following categories:
     -- integer types having certain exact widths;
@@ -11465,7 +11540,7 @@ Forward references: localization (7.11).
     (Some of these types may denote the same type.)
 3   Corresponding macros specify limits of the declared types and construct suitable
     constants.
-4   For each type described herein that the implementation provides,254) <stdint.h> shall
+4   For each type described herein that the implementation provides,261) <stdint.h> shall
     declare that typedef name and define the associated macros. Conversely, for each type
     described herein that the implementation does not provide, <stdint.h> shall not
     declare that typedef name nor shall it define the associated macros. An implementation
@@ -11481,8 +11556,8 @@ Forward references: localization (7.11).
 
 
 
-    253) See ''future library directions'' (7.30.8).
-    254) Some of these types may denote implementation-defined extended integer types.
+    260) See ''future library directions'' (7.31.10).
+    261) Some of these types may denote implementation-defined extended integer types.
 
 [page 289] (Contents)
 
@@ -11511,7 +11586,7 @@ Forward references: localization (7.11).
              int_least64_t                                     uint_least64_t
     All other types of this form are optional.
     7.20.1.3 Fastest minimum-width integer types
-1   Each of the following types designates an integer type that is usually fastest255) to operate
+1   Each of the following types designates an integer type that is usually fastest262) to operate
     with among all integer types that have at least the specified width.
 2   The typedef name int_fastN_t designates the fastest signed integer type with a width
     of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer
@@ -11520,7 +11595,7 @@ Forward references: localization (7.11).
 
 
 
-    255) The designated type is not guaranteed to be fastest for all purposes; if the implementation has no clear
+    262) The designated type is not guaranteed to be fastest for all purposes; if the implementation has no clear
          grounds for choosing one type over another, it will simply pick some integer type satisfying the
          signedness and width requirements.
 
@@ -11551,7 +11626,7 @@ Forward references: localization (7.11).
             uintmax_t
     These types are required.
     7.20.2 Limits of specified-width integer types
-1   The following object-like macros specify the minimum and maximum limits of the types *
+1   The following object-like macros specify the minimum and maximum limits of the types
     declared in <stdint.h>. Each macro name corresponds to a similar type name in
     7.20.1.
 2   Each instance of any defined macro shall be replaced by a constant expression suitable
@@ -11602,7 +11677,7 @@ Forward references: localization (7.11).
     -- maximum value of greatest-width unsigned integer type
         UINTMAX_MAX                                                   264 - 1
     7.20.3 Limits of other integer types
-1   The following object-like macros specify the minimum and maximum limits of integer *
+1   The following object-like macros specify the minimum and maximum limits of integer
     types corresponding to types defined in other standard headers.
 2   Each instance of these macros shall be replaced by a constant expression suitable for use
     in #if preprocessing directives, and this expression shall have the same type as would an
@@ -11610,7 +11685,7 @@ Forward references: localization (7.11).
     promotions. Its implementation-defined value shall be equal to or greater in magnitude
     (absolute value) than the corresponding value given below, with the same sign. An
     implementation shall define only the macros corresponding to those typedef names it
-    actually provides.256)
+    actually provides.263)
     -- limits of ptrdiff_t
         PTRDIFF_MIN                                                 -65535
         PTRDIFF_MAX                                                 +65535
@@ -11627,7 +11702,7 @@ Forward references: localization (7.11).
 
 
 
-    256) A freestanding implementation need not provide all of these types.
+    263) A freestanding implementation need not provide all of these types.
 
 [page 293] (Contents)
 
@@ -11641,13 +11716,13 @@ Forward references: localization (7.11).
 4   If wchar_t (see 7.19) is defined as a signed integer type, the value of WCHAR_MIN
     shall be no greater than -127 and the value of WCHAR_MAX shall be no less than 127;
     otherwise, wchar_t is defined as an unsigned integer type, and the value of
-    WCHAR_MIN shall be 0 and the value of WCHAR_MAX shall be no less than 255.257)
-5   If wint_t (see 7.28) is defined as a signed integer type, the value of WINT_MIN shall
+    WCHAR_MIN shall be 0 and the value of WCHAR_MAX shall be no less than 255.264)
+5   If wint_t (see 7.29) is defined as a signed integer type, the value of WINT_MIN shall
     be no greater than -32767 and the value of WINT_MAX shall be no less than 32767;
     otherwise, wint_t is defined as an unsigned integer type, and the value of WINT_MIN
     shall be 0 and the value of WINT_MAX shall be no less than 65535.
     7.20.4 Macros for integer constants
-1   The following function-like macros expand to integer constants suitable for initializing *
+1   The following function-like macros expand to integer constants suitable for initializing
     objects that have integer types corresponding to types defined in <stdint.h>. Each
     macro name corresponds to a similar type name in 7.20.1.2 or 7.20.1.5.
 2   The argument in any instance of these macros shall be an unsuffixed integer constant (as
@@ -11666,7 +11741,7 @@ Forward references: localization (7.11).
 
 
 
-    257) The values WCHAR_MIN and WCHAR_MAX do not necessarily correspond to members of the extended
+    264) The values WCHAR_MIN and WCHAR_MAX do not necessarily correspond to members of the extended
          character set.
 
 [page 294] (Contents)
@@ -11716,7 +11791,7 @@ Forward references: localization (7.11).
 
 [page 296] (Contents)
 
-    guarantees can be opened;258)
+    guarantees can be opened;265)
             L_tmpnam
     which expands to an integer constant expression that is the size needed for an array of
     char large enough to hold a temporary file name string generated by the tmpnam
@@ -11734,22 +11809,22 @@ Forward references: localization (7.11).
             stdout
     which are expressions of type ''pointer to FILE'' that point to the FILE objects
     associated, respectively, with the standard error, input, and output streams.
-4   The header <wchar.h> declares a number of functions useful for wide character input
+4   The header <wchar.h> declares a number of functions useful for wide character input
     and output. The wide character input/output functions described in that subclause
     provide operations analogous to most of those described here, except that the
     fundamental units internal to the program are wide characters. The external
     representation (in the file) is a sequence of ''generalized'' multibyte characters, as
     described further in 7.21.3.
 5   The input/output functions are given the following collective terms:
-    -- The wide character input functions -- those functions described in 7.28 that perform
+    -- The wide character input functions -- those functions described in 7.29 that perform
       input into wide characters and wide strings: fgetwc, fgetws, getwc, getwchar,
       fwscanf, wscanf, vfwscanf, and vwscanf.
-    -- The wide character output functions -- those functions described in 7.28 that perform
+    -- The wide character output functions -- those functions described in 7.29 that perform
       output from wide characters and wide strings: fputwc, fputws, putwc,
       putwchar, fwprintf, wprintf, vfwprintf, and vwprintf.
 
 
-    258) If the implementation imposes no practical limit on the length of file name strings, the value of
+    265) If the implementation imposes no practical limit on the length of file name strings, the value of
          FILENAME_MAX should instead be the recommended size of an array intended to hold a file name
          string. Of course, file name string contents are subject to other system-specific constraints; therefore
          all possible strings of length FILENAME_MAX cannot be expected to be opened successfully.
@@ -11760,16 +11835,16 @@ Forward references: localization (7.11).
       wide character input functions, and the wide character output functions.
     -- The byte input/output functions -- those functions described in this subclause that
       perform input/output: fgetc, fgets, fprintf, fputc, fputs, fread,
-      fscanf, fwrite, getc, getchar, printf, putc, putchar, puts, scanf, *
+      fscanf, fwrite, getc, getchar, printf, putc, putchar, puts, scanf,
       ungetc, vfprintf, vfscanf, vprintf, and vscanf.
     Forward references: files (7.21.3), the fseek function (7.21.9.2), streams (7.21.2), the
-    tmpnam function (7.21.4.4), <wchar.h> (7.28).
+    tmpnam function (7.21.4.4), <wchar.h> (7.29).
     7.21.2 Streams
 1   Input and output, whether to or from physical devices such as terminals and tape drives,
     or whether to or from files supported on structured storage devices, are mapped into
     logical data streams, whose properties are more uniform than their various inputs and
     outputs. Two forms of mapping are supported, for text streams and for binary
-    streams.259)
+    streams.266)
 2   A text stream is an ordered sequence of characters composed into lines, each line
     consisting of zero or more characters plus a terminating new-line character. Whether the
     last line requires a terminating new-line character is implementation-defined. Characters
@@ -11792,7 +11867,7 @@ Forward references: localization (7.11).
     character input/output function has been applied to a stream without orientation, the
 
 
-    259) An implementation need not distinguish between text streams and binary streams. In such an
+    266) An implementation need not distinguish between text streams and binary streams. In such an
          implementation, there need be no new-line characters in a text stream nor any limit to the length of a
          line.
 
@@ -11801,7 +11876,7 @@ Forward references: localization (7.11).
     stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
     been applied to a stream without orientation, the stream becomes a byte-oriented stream.
     Only a call to the freopen function or the fwide function can otherwise alter the
-    orientation of a stream. (A successful call to freopen removes any orientation.)260)
+    orientation of a stream. (A successful call to freopen removes any orientation.)267)
 5   Byte input/output functions shall not be applied to a wide-oriented stream and wide
     character input/output functions shall not be applied to a byte-oriented stream. The
     remaining stream operations do not affect, and are not affected by, a stream's orientation,
@@ -11817,18 +11892,25 @@ Forward references: localization (7.11).
     value of this mbstate_t object as part of the value of the fpos_t object. A later
     successful call to fsetpos using the same stored fpos_t value restores the value of
     the associated mbstate_t object as well as the position within the controlled stream.
+7   Each stream has an associated lock that is used to prevent data races when multiple
+    threads of execution access a stream, and to restrict the interleaving of stream operations
+    performed by multiple threads. Only one thread may hold this lock at a time. The lock is
+    reentrant: a single thread may hold the lock multiple times at a given time.
+8   All functions that read, write, position, or query the position of a stream lock the stream
+    before accessing it. They release the lock associated with the stream when the access is
+    complete.
     Environmental limits
-7   An implementation shall support text files with lines containing at least 254 characters,
+9   An implementation shall support text files with lines containing at least 254 characters,
     including the terminating new-line character. The value of the macro BUFSIZ shall be at
     least 256.
-    Forward references: the freopen function (7.21.5.4), the fwide function (7.28.3.5),
-    mbstate_t (7.29.1), the fgetpos function (7.21.9.1), the fsetpos function
+    Forward references: the freopen function (7.21.5.4), the fwide function (7.29.3.5),
+    mbstate_t (7.30.1), the fgetpos function (7.21.9.1), the fsetpos function
     (7.21.9.3).
 
 
 
 
-    260) The three predefined streams stdin, stdout, and stderr are unoriented at program startup.
+    267) The three predefined streams stdin, stdout, and stderr are unoriented at program startup.
 
 [page 299] (Contents)
 
@@ -11887,7 +11969,7 @@ Forward references: localization (7.11).
      multibyte characters, generalized as follows:
      -- Multibyte encodings within files may contain embedded null bytes (unlike multibyte
        encodings valid for use internal to the program).
-     -- A file need not begin nor end in the initial shift state.261)
+     -- A file need not begin nor end in the initial shift state.268)
 10   Moreover, the encodings used for multibyte characters may differ among files. Both the
      nature and choice of such encodings are implementation-defined.
 11   The wide character input functions read multibyte characters from the stream and convert
@@ -11908,7 +11990,7 @@ Forward references: localization (7.11).
      value passed to the underlying wcrtomb does not correspond to a valid (generalized)
 
 
-     261) Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has
+     268) Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has
           undefined behavior for a binary stream (because of possible trailing null characters) or for any stream
           with state-dependent encoding that does not assuredly end in the initial shift state.
 
@@ -11922,9 +12004,9 @@ Forward references: localization (7.11).
      streams.
      Forward references: the exit function (7.22.4.4), the fgetc function (7.21.7.1), the
      fopen function (7.21.5.3), the fputc function (7.21.7.3), the setbuf function
-     (7.21.5.5), the setvbuf function (7.21.5.6), the fgetwc function (7.28.3.1), the
-     fputwc function (7.28.3.3), conversion state (7.28.6), the mbrtowc function
-     (7.28.6.3.2), the wcrtomb function (7.28.6.3.3).
+     (7.21.5.5), the setvbuf function (7.21.5.6), the fgetwc function (7.29.3.1), the
+     fputwc function (7.29.3.3), conversion state (7.29.6), the mbrtowc function
+     (7.29.6.3.2), the wcrtomb function (7.29.6.3.3).
      7.21.4 Operations on files
      7.21.4.1 The remove function
      Synopsis
@@ -11950,7 +12032,7 @@ Forward references: localization (7.11).
 [page 302] (Contents)
 
     Returns
-3   The rename function returns zero if the operation succeeds, nonzero if it fails,262) in
+3   The rename function returns zero if the operation succeeds, nonzero if it fails,269) in
     which case if the file existed previously it is still known by its original name.
     7.21.4.3 The tmpfile function
     Synopsis
@@ -11976,12 +12058,12 @@ Forward references: localization (7.11).
             char *tmpnam(char *s);
     Description
 2   The tmpnam function generates a string that is a valid file name and that is not the same
-    as the name of an existing file.263) The function is potentially capable of generating at
+    as the name of an existing file.270) The function is potentially capable of generating at
 
 
-    262) Among the reasons the implementation may cause the rename function to fail are that the file is open
+    269) Among the reasons the implementation may cause the rename function to fail are that the file is open
          or that it is necessary to copy its contents to effectuate its renaming.
-    263) Files created using strings generated by the tmpnam function are temporary only in the sense that
+    270) Files created using strings generated by the tmpnam function are temporary only in the sense that
          their names should not collide with those generated by conventional naming rules for the
          implementation. It is still necessary to use the remove function to remove such files when their use
          is ended, and before program termination.
@@ -12045,7 +12127,7 @@ Forward references: localization (7.11).
 2   The fopen function opens the file whose name is the string pointed to by filename,
     and associates a stream with it.
 3   The argument mode points to a string. If the string is one of the following, the file is
-    open in the indicated mode. Otherwise, the behavior is undefined.264)
+    open in the indicated mode. Otherwise, the behavior is undefined.271)
     r                     open text file for reading
     w                     truncate to zero length or create text file for writing
     wx                    create text file for writing
@@ -12054,7 +12136,7 @@ Forward references: localization (7.11).
     wb                    truncate to zero length or create binary file for writing
 
 
-    264) If the string begins with one of the above sequences, the implementation might choose to ignore the
+    271) If the string begins with one of the above sequences, the implementation might choose to ignore the
          remaining characters, or it might use them to select different kinds of a file (some of which might not
          conform to the properties in 7.21.2).
 
@@ -12108,7 +12190,7 @@ Forward references: localization (7.11).
     Description
 2   The freopen function opens the file whose name is the string pointed to by filename
     and associates the stream pointed to by stream with it. The mode argument is used just
-    as in the fopen function.265)
+    as in the fopen function.272)
 3   If filename is a null pointer, the freopen function attempts to change the mode of
     the stream to that specified by mode, as if the name of the file currently associated with
     the stream had been used. It is implementation-defined which changes of mode are
@@ -12132,7 +12214,7 @@ Forward references: localization (7.11).
 
 
 
-    265) The primary use of the freopen function is to change the file associated with a standard text stream
+    272) The primary use of the freopen function is to change the file associated with a standard text stream
          (stderr, stdin, or stdout), as those identifiers need not be modifiable lvalues to which the value
          returned by the fopen function may be assigned.
 
@@ -12154,7 +12236,7 @@ Forward references: localization (7.11).
     determines how stream will be buffered, as follows: _IOFBF causes input/output to be
     fully buffered; _IOLBF causes input/output to be line buffered; _IONBF causes
     input/output to be unbuffered. If buf is not a null pointer, the array it points to may be
-    used instead of a buffer allocated by the setvbuf function266) and the argument size
+    used instead of a buffer allocated by the setvbuf function273) and the argument size
     specifies the size of the array; otherwise, size may determine the size of a buffer
     allocated by the setvbuf function. The contents of the array at any time are
     indeterminate.
@@ -12165,14 +12247,14 @@ Forward references: localization (7.11).
 
 
 
-    266) The buffer has to have a lifetime at least as great as the open stream, so the stream should be closed
+    273) The buffer has to have a lifetime at least as great as the open stream, so the stream should be closed
          before a buffer that has automatic storage duration is deallocated upon block exit.
 
 [page 308] (Contents)
 
     7.21.6 Formatted input/output functions
 1   The formatted input/output functions shall behave as if there is a sequence point after the
-    actions associated with each specifier.267)
+    actions associated with each specifier.274)
     7.21.6.1 The fprintf function
     Synopsis
 1            #include <stdio.h>
@@ -12198,15 +12280,15 @@ Forward references: localization (7.11).
     -- An optional minimum field width. If the converted value has fewer characters than the
       field width, it is padded with spaces (by default) on the left (or right, if the left
       adjustment flag, described later, has been given) to the field width. The field width
-      takes the form of an asterisk * (described later) or a nonnegative decimal integer.268)
+      takes the form of an asterisk * (described later) or a nonnegative decimal integer.275)
     -- An optional precision that gives the minimum number of digits to appear for the d, i,
       o, u, x, and X conversions, the number of digits to appear after the decimal-point
       character for a, A, e, E, f, and F conversions, the maximum number of significant
       digits for the g and G conversions, or the maximum number of bytes to be written for
 
 
-    267) The fprintf functions perform writes to memory for the %n specifier.
-    268) Note that 0 is taken as a flag, not as the beginning of a field width.
+    274) The fprintf functions perform writes to memory for the %n specifier.
+    275) Note that 0 is taken as a flag, not as the beginning of a field width.
 
 [page 309] (Contents)
 
@@ -12227,7 +12309,7 @@ Forward references: localization (7.11).
             this flag is not specified.)
     +       The result of a signed conversion always begins with a plus or minus sign. (It
             begins with a sign only when a negative value is converted if this flag is not
-            specified.)269)
+            specified.)276)
     space If the first character of a signed conversion is not a sign, or if a signed conversion
           results in no characters, a space is prefixed to the result. If the space and + flags
           both appear, the space flag is ignored.
@@ -12246,7 +12328,7 @@ Forward references: localization (7.11).
             0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X
 
 
-    269) The results of all floating conversions of a negative zero, and of negative values that round to zero,
+    276) The results of all floating conversions of a negative zero, and of negative values that round to zero,
          include a minus sign.
 
 [page 310] (Contents)
@@ -12321,14 +12403,14 @@ Forward references: localization (7.11).
                  [-]nan or [-]nan(n-char-sequence) -- which style, and the meaning of
                  any n-char-sequence, is implementation-defined. The F conversion specifier
                  produces INF, INFINITY, or NAN instead of inf, infinity, or nan,
-                 respectively.270)
+                 respectively.277)
     e,E          A double argument representing a floating-point number is converted in the
                  style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
                  argument is nonzero) before the decimal-point character and the number of
                  digits after it is equal to the precision; if the precision is missing, it is taken as
 
 
-    270) When applied to infinite and NaN values, the -, +, and space flag characters have their usual meaning;
+    277) When applied to infinite and NaN values, the -, +, and space flag characters have their usual meaning;
          the # and 0 flag characters have no effect.
 
 [page 312] (Contents)
@@ -12357,7 +12439,7 @@ g,G           A double argument representing a floating-point number is converte
 a,A           A double argument representing a floating-point number is converted in the
               style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
               nonzero if the argument is a normalized floating-point number and is
-              otherwise unspecified) before the decimal-point character271) and the number
+              otherwise unspecified) before the decimal-point character278) and the number
               of hexadecimal digits after it is equal to the precision; if the precision is
               missing and FLT_RADIX is a power of 2, then the precision is sufficient for
               an exact representation of the value; if the precision is missing and
@@ -12366,12 +12448,12 @@ a,A           A double argument representing a floating-point number is converte
 
 
 
-271) Binary implementations can choose the hexadecimal digit to the left of the decimal-point character so
+278) Binary implementations can choose the hexadecimal digit to the left of the decimal-point character so
      that subsequent digits align to nibble (4-bit) boundaries.
 
 [page 313] (Contents)
 
-              distinguish272) values of type double, except that trailing zeros may be
+              distinguish279) values of type double, except that trailing zeros may be
               omitted; if the precision is zero and the # flag is not specified, no decimal-
               point character appears. The letters abcdef are used for a conversion and
               the letters ABCDEF for A conversion. The A conversion specifier produces a
@@ -12388,7 +12470,7 @@ c             If no l length modifier is present, the int argument is converted
               containing the wint_t argument to the lc conversion specification and the
               second a null wide character.
 s             If no l length modifier is present, the argument shall be a pointer to the initial
-              element of an array of character type.273) Characters from the array are
+              element of an array of character type.280) Characters from the array are
               written up to (but not including) the terminating null character. If the
               precision is specified, no more than that many bytes are written. If the
               precision is not specified or is greater than the size of the array, the array shall
@@ -12405,16 +12487,16 @@ s             If no l length modifier is present, the argument shall be a pointe
               written (including shift sequences, if any), and the array shall contain a null
               wide character if, to equal the multibyte character sequence length given by
 
-272) The precision p is sufficient to distinguish values of the source type if 16 p-1 > b n where b is
+279) The precision p is sufficient to distinguish values of the source type if 16 p-1 > b n where b is
      FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
      might suffice depending on the implementation's scheme for determining the digit to the left of the
      decimal-point character.
-273) No special provisions are made for multibyte characters.
+280) No special provisions are made for multibyte characters.
 
 [page 314] (Contents)
 
                     the precision, the function would need to access a wide character one past the
-                    end of the array. In no case is a partial multibyte character written.274)
+                    end of the array. In no case is a partial multibyte character written.281)
      p              The argument shall be a pointer to void. The value of the pointer is
                     converted to a sequence of printing characters, in an implementation-defined
                     manner.
@@ -12425,7 +12507,7 @@ s             If no l length modifier is present, the argument shall be a pointe
                     undefined.
      %              A % character is written. No argument is converted. The complete
                     conversion specification shall be %%.
-9    If a conversion specification is invalid, the behavior is undefined.275) If any argument is
+9    If a conversion specification is invalid, the behavior is undefined.282) If any argument is
      not the correct type for the corresponding conversion specification, the behavior is
      undefined.
 10   In no case does a nonexistent or small field width cause truncation of a field; if the result
@@ -12439,16 +12521,16 @@ s             If no l length modifier is present, the argument shall be a pointe
      in hexadecimal floating style with the given precision, with the extra stipulation that the
      error should have a correct sign for the current rounding direction.
 13   For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
-     DECIMAL_DIG, then the result should be correctly rounded.276) If the number of
+     DECIMAL_DIG, then the result should be correctly rounded.283) If the number of
      significant decimal digits is more than DECIMAL_DIG but the source value is exactly
      representable with DECIMAL_DIG digits, then the result should be an exact
      representation with trailing zeros. Otherwise, the source value is bounded by two
      adjacent decimal strings L < U, both having DECIMAL_DIG significant digits; the value
 
 
-     274) Redundant shift sequences may result if multibyte characters have a state-dependent encoding.
-     275) See ''future library directions'' (7.30.9).
-     276) For binary-to-decimal conversion, the result format's values are the numbers representable with the
+     281) Redundant shift sequences may result if multibyte characters have a state-dependent encoding.
+     282) See ''future library directions'' (7.31.11).
+     283) For binary-to-decimal conversion, the result format's values are the numbers representable with the
           given format specifier. The number of significant digits is determined by the format specifier, and in
           the case of fixed-point conversion by the source value as well.
 
@@ -12495,7 +12577,7 @@ s             If no l length modifier is present, the argument shall be a pointe
               |      abc Z W|
               |            Z|
 
-     Forward references: conversion state (7.28.6), the wcrtomb function (7.28.6.3.3).
+     Forward references: conversion state (7.29.6), the wcrtomb function (7.29.6.3.3).
 
 [page 316] (Contents)
 
@@ -12527,7 +12609,7 @@ s             If no l length modifier is present, the argument shall be a pointe
     unavailability of input characters), or matching failures (due to inappropriate input).
 5   A directive composed of white-space character(s) is executed by reading input up to the
     first non-white-space character (which remains unread), or until no more characters can
-    be read.
+    be read. The directive never fails.
 6   A directive that is an ordinary multibyte character is executed by reading the next
     characters of the stream. If any of those characters differ from the ones composing the
     directive, the directive fails and the differing and subsequent characters remain unread.
@@ -12540,10 +12622,10 @@ s             If no l length modifier is present, the argument shall be a pointe
 
      following steps:
 8    Input white-space characters (as specified by the isspace function) are skipped, unless
-     the specification includes a [, c, or n specifier.277)
+     the specification includes a [, c, or n specifier.284)
 9    An input item is read from the stream, unless the specification includes an n specifier. An
      input item is defined as the longest sequence of input characters which does not exceed
-     any specified field width and which is, or is a prefix of, a matching input sequence.278)
+     any specified field width and which is, or is a prefix of, a matching input sequence.285)
      The first character, if any, after the input item remains unread. If the length of the input
      item is zero, the execution of the directive fails; this condition is a matching failure unless
      end-of-file, an encoding error, or a read error prevented input from the stream, in which
@@ -12573,8 +12655,8 @@ s             If no l length modifier is present, the argument shall be a pointe
 
 
 
-     277) These white-space characters are not counted against a specified field width.
-     278) fscanf pushes back at most one input character onto the input stream. Therefore, some sequences
+     284) These white-space characters are not counted against a specified field width.
+     285) fscanf pushes back at most one input character onto the input stream. Therefore, some sequences
           that are acceptable to strtod, strtol, etc., are unacceptable to fscanf.
 
 [page 318] (Contents)
@@ -12619,7 +12701,7 @@ s             If no l length modifier is present, the argument shall be a pointe
 [page 319] (Contents)
 
 c             Matches a sequence of characters of exactly the number specified by the field
-              width (1 if no field width is present in the directive).279)
+              width (1 if no field width is present in the directive).286)
               If no l length modifier is present, the corresponding argument shall be a
               pointer to the initial element of a character array large enough to accept the
               sequence. No null character is added.
@@ -12631,7 +12713,7 @@ c             Matches a sequence of characters of exactly the number specified b
               corresponding argument shall be a pointer to the initial element of an array of
               wchar_t large enough to accept the resulting sequence of wide characters.
               No null wide character is added.
-s             Matches a sequence of non-white-space characters.279)
+s             Matches a sequence of non-white-space characters.286)
               If no l length modifier is present, the corresponding argument shall be a
               pointer to the initial element of a character array large enough to accept the
               sequence and a terminating null character, which will be added automatically.
@@ -12644,7 +12726,7 @@ s             Matches a sequence of non-white-space characters.279)
               to accept the sequence and the terminating null wide character, which will be
               added automatically.
 [             Matches a nonempty sequence of characters from a set of expected characters
-              (the scanset).279)
+              (the scanset).286)
               If no l length modifier is present, the corresponding argument shall be a
               pointer to the initial element of a character array large enough to accept the
               sequence and a terminating null character, which will be added automatically.
@@ -12653,7 +12735,7 @@ s             Matches a sequence of non-white-space characters.279)
               converted to a wide character as if by a call to the mbrtowc function, with
               the conversion state described by an mbstate_t object initialized to zero
 
-279) No special provisions are made for multibyte characters in the matching rules used by the c, s, and [
+286) No special provisions are made for multibyte characters in the matching rules used by the c, s, and [
      conversion specifiers -- the extent of the input field is determined on a byte-by-byte basis. The
      resulting field is nevertheless a sequence of multibyte characters that begins in the initial shift state.
 
@@ -12691,13 +12773,13 @@ s             Matches a sequence of non-white-space characters.279)
                     suppressing character or a field width, the behavior is undefined.
      %              Matches a single % character; no conversion or assignment occurs. The
                     complete conversion specification shall be %%.
-13   If a conversion specification is invalid, the behavior is undefined.280)
+13   If a conversion specification is invalid, the behavior is undefined.287)
 14   The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
      respectively, a, e, f, g, and x.
 
 
 
-     280) See ''future library directions'' (7.30.9).
+     287) See ''future library directions'' (7.31.11).
 
 [page 321] (Contents)
 
@@ -12763,15 +12845,23 @@ s             Matches a sequence of non-white-space characters.279)
                /* ... */
                int d1, d2, n1, n2, i;
                i = sscanf("123", "%d%n%n%d", &d1, &n1, &n2, &d2);
-     the value 123 is assigned to d1 and the value 3 to n1. Because %n can never get an input failure the value
+     the value 123 is assigned to d1 and the value 3 to n1. Because %n can never get an input failure, the value
      of 3 is also assigned to n2. The value of d2 is not affected. The value 1 is assigned to i.
 
-22   EXAMPLE 5 In these examples, multibyte characters do have a state-dependent encoding, and the
+22   EXAMPLE 5         The call:
+               #include <stdio.h>
+               /* ... */
+               int n, i;
+               n = sscanf("foo %            bar    42", "foo%%bar%d", &i);
+     will assign to n the value 1 and to i the value 42 because input white-space characters are skipped for both
+     the % and d conversion specifiers.
+
+23   EXAMPLE 6 In these examples, multibyte characters do have a state-dependent encoding, and the
      members of the extended character set that consist of more than one byte each consist of exactly two bytes,
      the first of which is denoted here by a and the second by an uppercase letter, but are only recognized as
      such when in the alternate shift state. The shift sequences are denoted by (uparrow) and (downarrow), in which the first causes
      entry into the alternate shift state.
-23   After the call:
+24   After the call:
                #include <stdio.h>
                /* ... */
                char str[50];
@@ -12780,18 +12870,18 @@ s             Matches a sequence of non-white-space characters.279)
                a(uparrow) X Y(downarrow) bc
      str will contain (uparrow) X Y(downarrow)\0 assuming that none of the bytes of the shift sequences (or of the multibyte
      characters, in the more general case) appears to be a single-byte white-space character.
-24   In contrast, after the call:
-               #include <stdio.h>
-               #include <stddef.h>
-               /* ... */
-               wchar_t wstr[50];
-               fscanf(stdin, "a%ls", wstr);
-     with the same input line, wstr will contain the two wide characters that correspond to X and Y and a
-     terminating null wide character.
-25   However, the call:
+25   In contrast, after the call:
 
 [page 323] (Contents)
 
+             #include <stdio.h>
+             #include <stddef.h>
+             /* ... */
+             wchar_t wstr[50];
+             fscanf(stdin, "a%ls", wstr);
+     with the same input line, wstr will contain the two wide characters that correspond to X and Y and a
+     terminating null wide character.
+26   However, the call:
              #include <stdio.h>
              #include <stddef.h>
              /* ... */
@@ -12799,7 +12889,7 @@ s             Matches a sequence of non-white-space characters.279)
              fscanf(stdin, "a(uparrow) X(downarrow)%ls", wstr);
      with the same input line will return zero due to a matching failure against the (downarrow) sequence in the format
      string.
-26   Assuming that the first byte of the multibyte character X is the same as the first byte of the multibyte
+27   Assuming that the first byte of the multibyte character X is the same as the first byte of the multibyte
      character Y, after the call:
              #include <stdio.h>
              #include <stddef.h>
@@ -12811,7 +12901,7 @@ s             Matches a sequence of non-white-space characters.279)
 
      Forward references: the strtod, strtof, and strtold functions (7.22.1.3), the
      strtol, strtoll, strtoul, and strtoull functions (7.22.1.4), conversion state
-     (7.28.6), the wcrtomb function (7.28.6.3.3).
+     (7.29.6), the wcrtomb function (7.29.6.3.3).
      7.21.6.3 The printf function
      Synopsis
 1            #include <stdio.h>
@@ -12822,16 +12912,16 @@ s             Matches a sequence of non-white-space characters.279)
      Returns
 3    The printf function returns the number of characters transmitted, or a negative value if
      an output or encoding error occurred.
-     7.21.6.4 The scanf function
-     Synopsis
-1            #include <stdio.h>
-             int scanf(const char * restrict format, ...);
-     Description
-2    The scanf function is equivalent to fscanf with the argument stdin interposed
-     before the arguments to scanf.
 
 [page 324] (Contents)
 
+    7.21.6.4 The scanf function
+    Synopsis
+1           #include <stdio.h>
+            int scanf(const char * restrict format, ...);
+    Description
+2   The scanf function is equivalent to fscanf with the argument stdin interposed
+    before the arguments to scanf.
     Returns
 3   The scanf function returns the value of the macro EOF if an input failure occurs before
     the first conversion (if any) has completed. Otherwise, the scanf function returns the
@@ -12859,6 +12949,9 @@ s             Matches a sequence of non-white-space characters.279)
 1           #include <stdio.h>
             int sprintf(char * restrict s,
                  const char * restrict format, ...);
+
+[page 325] (Contents)
+
     Description
 2   The sprintf function is equivalent to fprintf, except that the output is written into
     an array (specified by the argument s) rather than to a stream. A null character is written
@@ -12867,9 +12960,6 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The sprintf function returns the number of characters written in the array, not
     counting the terminating null character, or a negative value if an encoding error occurred.
-
-[page 325] (Contents)
-
     7.21.6.7 The sscanf function
     Synopsis
 1          #include <stdio.h>
@@ -12896,31 +12986,25 @@ s             Matches a sequence of non-white-space characters.279)
 2   The vfprintf function is equivalent to fprintf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vfprintf function does not invoke the
-    va_end macro.281)
-    Returns
-3   The vfprintf function returns the number of characters transmitted, or a negative
-    value if an output or encoding error occurred.
-4   EXAMPLE       The following shows the use of the vfprintf function in a general error-reporting routine.
-
-
-
-
-    281) As the functions vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf, and
-         vsscanf invoke the va_arg macro, the value of arg after the return is indeterminate.
 
 [page 326] (Contents)
 
+    va_end macro.288)
+    Returns
+3   The vfprintf function returns the number of characters transmitted, or a negative
+    value if an output or encoding error occurred.
+4   EXAMPLE       The following shows the use of the vfprintf function in a general error-reporting routine.
             #include <stdarg.h>
             #include <stdio.h>
             void error(char *function_name, char *format, ...)
             {
                   va_list args;
-                  va_start(args, format);
-                  // print out name of function causing error
-                  fprintf(stderr, "ERROR in %s: ", function_name);
-                  // print out remainder of message
-                  vfprintf(stderr, format, args);
-                  va_end(args);
+                    va_start(args, format);
+                    // print out name of function causing error
+                    fprintf(stderr, "ERROR in %s: ", function_name);
+                    // print out remainder of message
+                    vfprintf(stderr, format, args);
+                    va_end(args);
             }
 
     7.21.6.9 The vfscanf function
@@ -12934,26 +13018,31 @@ s             Matches a sequence of non-white-space characters.279)
 2   The vfscanf function is equivalent to fscanf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vfscanf function does not invoke the
-    va_end macro.281)
+    va_end macro.288)
     Returns
 3   The vfscanf function returns the value of the macro EOF if an input failure occurs
     before the first conversion (if any) has completed. Otherwise, the vfscanf function
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
+
+
+
+    288) As the functions vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf, and
+         vsscanf invoke the va_arg macro, the value of arg after the return is indeterminate.
+
+[page 327] (Contents)
+
     7.21.6.10 The vprintf function
     Synopsis
-1           #include <stdarg.h>
-            #include <stdio.h>
-            int vprintf(const char * restrict format,
-                 va_list arg);
+1          #include <stdarg.h>
+           #include <stdio.h>
+           int vprintf(const char * restrict format,
+                va_list arg);
     Description
 2   The vprintf function is equivalent to printf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
-
-[page 327] (Contents)
-
     possibly subsequent va_arg calls). The vprintf function does not invoke the
-    va_end macro.281)
+    va_end macro.288)
     Returns
 3   The vprintf function returns the number of characters transmitted, or a negative value
     if an output or encoding error occurred.
@@ -12967,28 +13056,28 @@ s             Matches a sequence of non-white-space characters.279)
 2   The vscanf function is equivalent to scanf, with the variable argument list replaced
     by arg, which shall have been initialized by the va_start macro (and possibly
     subsequent va_arg calls). The vscanf function does not invoke the va_end
-    macro.281)
+    macro.288)
     Returns
 3   The vscanf function returns the value of the macro EOF if an input failure occurs
     before the first conversion (if any) has completed. Otherwise, the vscanf function
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
+
+[page 328] (Contents)
+
     7.21.6.12 The vsnprintf function
     Synopsis
-1          #include <stdarg.h>
-           #include <stdio.h>
-           int vsnprintf(char * restrict s, size_t n,
-                const char * restrict format,
-                va_list arg);
+1           #include <stdarg.h>
+            #include <stdio.h>
+            int vsnprintf(char * restrict s, size_t n,
+                 const char * restrict format,
+                 va_list arg);
     Description
 2   The vsnprintf function is equivalent to snprintf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vsnprintf function does not invoke the
-    va_end macro.281) If copying takes place between objects that overlap, the behavior is
+    va_end macro.288) If copying takes place between objects that overlap, the behavior is
     undefined.
-
-[page 328] (Contents)
-
     Returns
 3   The vsnprintf function returns the number of characters that would have been written
     had n been sufficiently large, not counting the terminating null character, or a negative
@@ -13005,11 +13094,14 @@ s             Matches a sequence of non-white-space characters.279)
 2   The vsprintf function is equivalent to sprintf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vsprintf function does not invoke the
-    va_end macro.281) If copying takes place between objects that overlap, the behavior is
+    va_end macro.288) If copying takes place between objects that overlap, the behavior is
     undefined.
     Returns
 3   The vsprintf function returns the number of characters written in the array, not
     counting the terminating null character, or a negative value if an encoding error occurred.
+
+[page 329] (Contents)
+
     7.21.6.14 The vsscanf function
     Synopsis
 1           #include <stdarg.h>
@@ -13021,13 +13113,10 @@ s             Matches a sequence of non-white-space characters.279)
 2   The vsscanf function is equivalent to sscanf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vsscanf function does not invoke the
-    va_end macro.281)
+    va_end macro.288)
     Returns
 3   The vsscanf function returns the value of the macro EOF if an input failure occurs
     before the first conversion (if any) has completed. Otherwise, the vsscanf function
-
-[page 329] (Contents)
-
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
     7.21.7 Character input/output functions
@@ -13045,7 +13134,13 @@ s             Matches a sequence of non-white-space characters.279)
     of-file indicator for the stream is set and the fgetc function returns EOF. Otherwise, the
     fgetc function returns the next character from the input stream pointed to by stream.
     If a read error occurs, the error indicator for the stream is set and the fgetc function
-    returns EOF.282)
+    returns EOF.289)
+
+
+    289) An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
+
+[page 330] (Contents)
+
     7.21.7.2 The fgets function
     Synopsis
 1           #include <stdio.h>
@@ -13061,11 +13156,6 @@ s             Matches a sequence of non-white-space characters.279)
     characters have been read into the array, the contents of the array remain unchanged and a
     null pointer is returned. If a read error occurs during the operation, the array contents are
     indeterminate and a null pointer is returned.
-
-    282) An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
-
-[page 330] (Contents)
-
     7.21.7.3 The fputc function
     Synopsis
 1           #include <stdio.h>
@@ -13084,6 +13174,9 @@ s             Matches a sequence of non-white-space characters.279)
 1           #include <stdio.h>
             int fputs(const char * restrict s,
                  FILE * restrict stream);
+
+[page 331] (Contents)
+
     Description
 2   The fputs function writes the string pointed to by s to the stream pointed to by
     stream. The terminating null character is not written.
@@ -13092,15 +13185,12 @@ s             Matches a sequence of non-white-space characters.279)
     nonnegative value.
     7.21.7.5 The getc function
     Synopsis
-1           #include <stdio.h>
-            int getc(FILE *stream);
+1          #include <stdio.h>
+           int getc(FILE *stream);
     Description
 2   The getc function is equivalent to fgetc, except that if it is implemented as a macro, it
     may evaluate stream more than once, so the argument should never be an expression
     with side effects.
-
-[page 331] (Contents)
-
     Returns
 3   The getc function returns the next character from the input stream pointed to by
     stream. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
@@ -13116,11 +13206,14 @@ s             Matches a sequence of non-white-space characters.279)
 3   The getchar function returns the next character from the input stream pointed to by
     stdin. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
     getchar returns EOF. If a read error occurs, the error indicator for the stream is set and
-    getchar returns EOF.                                                                       *
+    getchar returns EOF.
+
+[page 332] (Contents)
+
     7.21.7.7 The putc function
     Synopsis
-1          #include <stdio.h>
-           int putc(int c, FILE *stream);
+1           #include <stdio.h>
+            int putc(int c, FILE *stream);
     Description
 2   The putc function is equivalent to fputc, except that if it is implemented as a macro, it
     may evaluate stream more than once, so that argument should never be an expression
@@ -13130,13 +13223,10 @@ s             Matches a sequence of non-white-space characters.279)
     indicator for the stream is set and putc returns EOF.
     7.21.7.8 The putchar function
     Synopsis
-1          #include <stdio.h>
-           int putchar(int c);
+1           #include <stdio.h>
+            int putchar(int c);
     Description
 2   The putchar function is equivalent to putc with the second argument stdout.
-
-[page 332] (Contents)
-
     Returns
 3   The putchar function returns the character written. If a write error occurs, the error
     indicator for the stream is set and putchar returns EOF.
@@ -13151,10 +13241,13 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The puts function returns EOF if a write error occurs; otherwise it returns a nonnegative
     value.
+
+[page 333] (Contents)
+
     7.21.7.10 The ungetc function
     Synopsis
-1           #include <stdio.h>
-            int ungetc(int c, FILE *stream);
+1            #include <stdio.h>
+             int ungetc(int c, FILE *stream);
     Description
 2   The ungetc function pushes the character specified by c (converted to an unsigned
     char) back onto the input stream pointed to by stream. Pushed-back characters will be
@@ -13172,23 +13265,28 @@ s             Matches a sequence of non-white-space characters.279)
     pushed-back characters shall be the same as it was before the characters were pushed
     back. For a text stream, the value of its file position indicator after a successful call to the
     ungetc function is unspecified until all pushed-back characters are read or discarded.
-
-[page 333] (Contents)
-
     For a binary stream, its file position indicator is decremented by each successful call to
     the ungetc function; if its value was zero before a call, it is indeterminate after the
-    call.283)
+    call.290)
     Returns
 6   The ungetc function returns the character pushed back after conversion, or EOF if the
     operation fails.
     Forward references: file positioning functions (7.21.9).
+
+
+
+
+    290) See ''future library directions'' (7.31.11).
+
+[page 334] (Contents)
+
     7.21.8 Direct input/output functions
     7.21.8.1 The fread function
     Synopsis
-1            #include <stdio.h>
-             size_t fread(void * restrict ptr,
-                  size_t size, size_t nmemb,
-                  FILE * restrict stream);
+1           #include <stdio.h>
+            size_t fread(void * restrict ptr,
+                 size_t size, size_t nmemb,
+                 FILE * restrict stream);
     Description
 2   The fread function reads, into the array pointed to by ptr, up to nmemb elements
     whose size is specified by size, from the stream pointed to by stream. For each
@@ -13202,14 +13300,6 @@ s             Matches a sequence of non-white-space characters.279)
     less than nmemb if a read error or end-of-file is encountered. If size or nmemb is zero,
     fread returns zero and the contents of the array and the state of the stream remain
     unchanged.
-
-
-
-
-    283) See ''future library directions'' (7.30.9).
-
-[page 334] (Contents)
-
     7.21.8.2 The fwrite function
     Synopsis
 1           #include <stdio.h>
@@ -13224,6 +13314,9 @@ s             Matches a sequence of non-white-space characters.279)
     stream (if defined) is advanced by the number of characters successfully written. If an
     error occurs, the resulting value of the file position indicator for the stream is
     indeterminate.
+
+[page 335] (Contents)
+
     Returns
 3   The fwrite function returns the number of elements successfully written, which will be
     less than nmemb only if a write error is encountered. If size or nmemb is zero,
@@ -13231,9 +13324,9 @@ s             Matches a sequence of non-white-space characters.279)
     7.21.9 File positioning functions
     7.21.9.1 The fgetpos function
     Synopsis
-1           #include <stdio.h>
-            int fgetpos(FILE * restrict stream,
-                 fpos_t * restrict pos);
+1          #include <stdio.h>
+           int fgetpos(FILE * restrict stream,
+                fpos_t * restrict pos);
     Description
 2   The fgetpos function stores the current values of the parse state (if any) and file
     position indicator for the stream pointed to by stream in the object pointed to by pos.
@@ -13243,9 +13336,6 @@ s             Matches a sequence of non-white-space characters.279)
 3   If successful, the fgetpos function returns zero; on failure, the fgetpos function
     returns nonzero and stores an implementation-defined positive value in errno.
     Forward references: the fsetpos function (7.21.9.3).
-
-[page 335] (Contents)
-
     7.21.9.2 The fseek function
     Synopsis
 1          #include <stdio.h>
@@ -13261,6 +13351,9 @@ s             Matches a sequence of non-white-space characters.279)
 4   For a text stream, either offset shall be zero, or offset shall be a value returned by
     an earlier successful call to the ftell function on a stream associated with the same file
     and whence shall be SEEK_SET.
+
+[page 336] (Contents)
+
 5   After determining the new position, a successful call to the fseek function undoes any
     effects of the ungetc function on the stream, clears the end-of-file indicator for the
     stream, and then establishes the new position. After a successful fseek call, the next
@@ -13270,8 +13363,8 @@ s             Matches a sequence of non-white-space characters.279)
     Forward references: the ftell function (7.21.9.4).
     7.21.9.3 The fsetpos function
     Synopsis
-1          #include <stdio.h>
-           int fsetpos(FILE *stream, const fpos_t *pos);
+1           #include <stdio.h>
+            int fsetpos(FILE *stream, const fpos_t *pos);
     Description
 2   The fsetpos function sets the mbstate_t object (if any) and file position indicator
     for the stream pointed to by stream according to the value of the object pointed to by
@@ -13281,9 +13374,6 @@ s             Matches a sequence of non-white-space characters.279)
 3   A successful call to the fsetpos function undoes any effects of the ungetc function
     on the stream, clears the end-of-file indicator for the stream, and then establishes the new
     parse state and position. After a successful fsetpos call, the next operation on an
-
-[page 336] (Contents)
-
     update stream may be either input or output.
     Returns
 4   If successful, the fsetpos function returns zero; on failure, the fsetpos function
@@ -13299,6 +13389,9 @@ s             Matches a sequence of non-white-space characters.279)
     information, usable by the fseek function for returning the file position indicator for the
     stream to its position at the time of the ftell call; the difference between two such
     return values is not necessarily a meaningful measure of the number of characters written
+
+[page 337] (Contents)
+
     or read.
     Returns
 3   If successful, the ftell function returns the current value of the file position indicator
@@ -13306,18 +13399,15 @@ s             Matches a sequence of non-white-space characters.279)
     implementation-defined positive value in errno.
     7.21.9.5 The rewind function
     Synopsis
-1           #include <stdio.h>
-            void rewind(FILE *stream);
+1          #include <stdio.h>
+           void rewind(FILE *stream);
     Description
 2   The rewind function sets the file position indicator for the stream pointed to by
     stream to the beginning of the file. It is equivalent to
-            (void)fseek(stream, 0L, SEEK_SET)
+           (void)fseek(stream, 0L, SEEK_SET)
     except that the error indicator for the stream is also cleared.
     Returns
 3   The rewind function returns no value.
-
-[page 337] (Contents)
-
     7.21.10 Error-handling functions
     7.21.10.1 The clearerr function
     Synopsis
@@ -13328,10 +13418,13 @@ s             Matches a sequence of non-white-space characters.279)
     to by stream.
     Returns
 3   The clearerr function returns no value.
+
+[page 338] (Contents)
+
     7.21.10.2 The feof function
     Synopsis
-1          #include <stdio.h>
-           int feof(FILE *stream);
+1           #include <stdio.h>
+            int feof(FILE *stream);
     Description
 2   The feof function tests the end-of-file indicator for the stream pointed to by stream.
     Returns
@@ -13339,16 +13432,13 @@ s             Matches a sequence of non-white-space characters.279)
     stream.
     7.21.10.3 The ferror function
     Synopsis
-1          #include <stdio.h>
-           int ferror(FILE *stream);
+1           #include <stdio.h>
+            int ferror(FILE *stream);
     Description
 2   The ferror function tests the error indicator for the stream pointed to by stream.
     Returns
 3   The ferror function returns nonzero if and only if the error indicator is set for
     stream.
-
-[page 338] (Contents)
-
     7.21.10.4 The perror function
     Synopsis
 1           #include <stdio.h>
@@ -13362,13 +13452,13 @@ s             Matches a sequence of non-white-space characters.279)
     strings are the same as those returned by the strerror function with argument errno.
     Returns
 3   The perror function returns no value.
-    Forward references: the strerror function (7.23.6.2).
+    Forward references: the strerror function (7.24.6.2).
 
 [page 339] (Contents)
 
     7.22 General utilities <stdlib.h>
 1   The header <stdlib.h> declares five types and several functions of general utility, and
-    defines several macros.284)
+    defines several macros.291)
 2   The types declared are size_t and wchar_t (both described in 7.19),
              div_t
     which is a structure type that is the type of the value returned by the div function,
@@ -13394,7 +13484,7 @@ s             Matches a sequence of non-white-space characters.279)
 
 
 
-    284) See ''future library directions'' (7.30.10).
+    291) See ''future library directions'' (7.31.12).
 
 [page 340] (Contents)
 
@@ -13477,12 +13567,12 @@ s             Matches a sequence of non-white-space characters.279)
     nor a decimal-point character appears in a decimal floating point number, or if a binary
     exponent part does not appear in a hexadecimal floating point number, an exponent part
     of the appropriate type with value zero is assumed to follow the last digit in the string. If
-    the subject sequence begins with a minus sign, the sequence is interpreted as negated.285)
+    the subject sequence begins with a minus sign, the sequence is interpreted as negated.292)
     A character sequence INF or INFINITY is interpreted as an infinity, if representable in
     the return type, else like a floating constant that is too large for the range of the return
-    type. A character sequence NAN or NAN(n-char-sequenceopt), is interpreted as a quiet
+    type. A character sequence NAN or NAN(n-char-sequenceopt) is interpreted as a quiet
     NaN, if supported in the return type, else like a subject sequence part that does not have
-    the expected form; the meaning of the n-char sequences is implementation-defined.286) A
+    the expected form; the meaning of the n-char sequence is implementation-defined.293) A
     pointer to the final string is stored in the object pointed to by endptr, provided that
     endptr is not a null pointer.
 5   If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
@@ -13506,17 +13596,17 @@ s             Matches a sequence of non-white-space characters.279)
     The result should be one of the (equal or adjacent) values that would be obtained by
     correctly rounding L and U according to the current rounding direction, with the extra
 
-    285) It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
+    292) It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
          negating the value resulting from converting the corresponding unsigned sequence (see F.5); the two
          methods may yield different results if rounding is toward positive or negative infinity. In either case,
          the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
-    286) An implementation may use the n-char sequence to determine extra information to be represented in
+    293) An implementation may use the n-char sequence to determine extra information to be represented in
          the NaN's significand.
 
 [page 343] (Contents)
 
      stipulation that the error with respect to D should have a correct sign for the current
-     rounding direction.287)
+     rounding direction.294)
      Returns
 10   The functions return the converted value, if any. If no conversion could be performed,
      zero is returned. If the correct value overflows and default rounding is in effect (7.12.1),
@@ -13552,7 +13642,7 @@ s             Matches a sequence of non-white-space characters.279)
      white-space characters (as specified by the isspace function), a subject sequence
 
 
-     287) DECIMAL_DIG, defined in <float.h>, should be sufficiently large that L and U will usually round
+     294) DECIMAL_DIG, defined in <float.h>, should be sufficiently large that L and U will usually round
           to the same internal floating value, but if not will round to adjacent values.
 
 [page 344] (Contents)
@@ -13603,9 +13693,10 @@ s             Matches a sequence of non-white-space characters.279)
             int rand(void);
     Description
 2   The rand function computes a sequence of pseudo-random integers in the range 0 to
-    RAND_MAX.288)
-3   The rand function is not required to avoid data races. The implementation shall behave
-    as if no library function calls the rand function.
+    RAND_MAX.295)
+3   The rand function is not required to avoid data races with other calls to pseudo-random
+    sequence generation functions. The implementation shall behave as if no library function
+    calls the rand function.
     Returns
 4   The rand function returns a pseudo-random integer.
     Environmental limits
@@ -13620,20 +13711,22 @@ s             Matches a sequence of non-white-space characters.279)
     same seed value, the sequence of pseudo-random numbers shall be repeated. If rand is
     called before any calls to srand have been made, the same sequence shall be generated
     as when srand is first called with a seed value of 1.
-3   The implementation shall behave as if no library function calls the srand function.
-    Returns
-4   The srand function returns no value.
+3   The srand function is not required to avoid data races with other calls to pseudo-
+    random sequence generation functions. The implementation shall behave as if no library
+    function calls the srand function.
 
 
 
 
-    288) There are no guarantees as to the quality of the random sequence produced and some implementations
+    295) There are no guarantees as to the quality of the random sequence produced and some implementations
          are known to produce sequences with distressingly non-random low-order bits. Applications with
          particular requirements should use a generator that is known to be sufficient for their needs.
 
 [page 346] (Contents)
 
-5   EXAMPLE       The following functions define a portable implementation of rand and srand.
+    Returns
+4   The srand function returns no value.
+5   EXAMPLE     The following functions define a portable implementation of rand and srand.
             static unsigned long int next = 1;
             int rand(void)   // RAND_MAX assumed to be 32767
             {
@@ -13658,10 +13751,20 @@ s             Matches a sequence of non-white-space characters.279)
     the space requested is zero, the behavior is implementation-defined: either a null pointer
     is returned, or the behavior is as if the size were some nonzero value, except that the
     returned pointer shall not be used to access an object.
+2   For purposes of determining the existence of a data race, memory allocation functions
+    behave as though they accessed only memory locations accessible through their
+    arguments and not other static duration storage. These functions may, however, visibly
+    modify the storage that they allocate or deallocate. A call to free or realloc that
+    deallocates a region p of memory synchronizes with any allocation call that allocates all
+    or part of the region p. This synchronization occurs after any access of p by the
+    deallocating function, and before any such access by the allocating function.
     7.22.3.1 The aligned_alloc function
     Synopsis
 1           #include <stdlib.h>
             void *aligned_alloc(size_t alignment, size_t size);
+
+[page 347] (Contents)
+
     Description
 2   The aligned_alloc function allocates space for an object whose alignment is
     specified by alignment, whose size is specified by size, and whose value is
@@ -13670,16 +13773,13 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The aligned_alloc function returns either a null pointer or a pointer to the allocated
     space.
-
-[page 347] (Contents)
-
     7.22.3.2 The calloc function
     Synopsis
 1           #include <stdlib.h>
             void *calloc(size_t nmemb, size_t size);
     Description
 2   The calloc function allocates space for an array of nmemb objects, each of whose size
-    is size. The space is initialized to all bits zero.289)
+    is size. The space is initialized to all bits zero.296)
     Returns
 3   The calloc function returns either a null pointer or a pointer to the allocated space.
     7.22.3.3 The free function
@@ -13694,22 +13794,22 @@ s             Matches a sequence of non-white-space characters.279)
     behavior is undefined.
     Returns
 3   The free function returns no value.
-    7.22.3.4 The malloc function
-    Synopsis
-1           #include <stdlib.h>
-            void *malloc(size_t size);
-    Description
-2   The malloc function allocates space for an object whose size is specified by size and
-    whose value is indeterminate.
 
 
 
 
-    289) Note that this need not be the same as the representation of floating-point zero or a null pointer
+    296) Note that this need not be the same as the representation of floating-point zero or a null pointer
          constant.
 
 [page 348] (Contents)
 
+    7.22.3.4 The malloc function
+    Synopsis
+1           #include <stdlib.h>
+            void *malloc(size_t size);
+    Description
+2   The malloc function allocates space for an object whose size is specified by size and
+    whose value is indeterminate.
     Returns
 3   The malloc function returns either a null pointer or a pointer to the allocated space.
     7.22.3.5 The realloc function
@@ -13731,11 +13831,14 @@ s             Matches a sequence of non-white-space characters.279)
 4   The realloc function returns a pointer to the new object (which may have the same
     value as a pointer to the old object), or a null pointer if the new object could not be
     allocated.
+
+[page 349] (Contents)
+
     7.22.4 Communication with the environment
     7.22.4.1 The abort function
     Synopsis
-1           #include <stdlib.h>
-            _Noreturn void abort(void);
+1          #include <stdlib.h>
+           _Noreturn void abort(void);
     Description
 2   The abort function causes abnormal program termination to occur, unless the signal
     SIGABRT is being caught and the signal handler does not return. Whether open streams
@@ -13743,9 +13846,6 @@ s             Matches a sequence of non-white-space characters.279)
     removed is implementation-defined. An implementation-defined form of the status
     unsuccessful termination is returned to the host environment by means of the function
     call raise(SIGABRT).
-
-[page 349] (Contents)
-
     Returns
 3   The abort function does not return to its caller.
     7.22.4.2 The atexit function
@@ -13754,35 +13854,38 @@ s             Matches a sequence of non-white-space characters.279)
            int atexit(void (*func)(void));
     Description
 2   The atexit function registers the function pointed to by func, to be called without
-    arguments at normal program termination.290)
+    arguments at normal program termination.297) It is unspecified whether a call to the
+    atexit function that does not happen before the exit function is called will succeed.
     Environmental limits
 3   The implementation shall support the registration of at least 32 functions.
     Returns
 4   The atexit function returns zero if the registration succeeds, nonzero if it fails.
     Forward references: the at_quick_exit function (7.22.4.3), the exit function
     (7.22.4.4).
+
+
+
+
+    297) The atexit function registrations are distinct from the at_quick_exit registrations, so
+         applications may need to call both registration functions with the same argument.
+
+[page 350] (Contents)
+
     7.22.4.3 The at_quick_exit function
     Synopsis
-1          #include <stdlib.h>
-           int at_quick_exit(void (*func)(void));
+1           #include <stdlib.h>
+            int at_quick_exit(void (*func)(void));
     Description
 2   The at_quick_exit function registers the function pointed to by func, to be called
-    without arguments should quick_exit be called.291)
+    without arguments should quick_exit be called.298) It is unspecified whether a call to
+    the at_quick_exit function that does not happen before the quick_exit function
+    is called will succeed.
     Environmental limits
 3   The implementation shall support the registration of at least 32 functions.
     Returns
 4   The at_quick_exit function returns zero if the registration succeeds, nonzero if it
     fails.
     Forward references: the quick_exit function (7.22.4.7).
-
-
-    290) The atexit function registrations are distinct from the at_quick_exit registrations, so
-         applications may need to call both registration functions with the same argument.
-    291) The at_quick_exit function registrations are distinct from the atexit registrations, so
-         applications may need to call both registration functions with the same argument.
-
-[page 350] (Contents)
-
     7.22.4.4 The exit function
     Synopsis
 1           #include <stdlib.h>
@@ -13793,10 +13896,20 @@ s             Matches a sequence of non-white-space characters.279)
     more than once, or calls the quick_exit function in addition to the exit function, the
     behavior is undefined.
 3   First, all functions registered by the atexit function are called, in the reverse order of
-    their registration,292) except that a function is called after any previously registered
+    their registration,299) except that a function is called after any previously registered
     functions that had already been called at the time it was registered. If, during the call to
     any such function, a call to the longjmp function is made that would terminate the call
     to the registered function, the behavior is undefined.
+
+
+
+    298) The at_quick_exit function registrations are distinct from the atexit registrations, so
+         applications may need to call both registration functions with the same argument.
+    299) Each function is called as many times as it was registered, and in the correct order with respect to
+         other registered functions.
+
+[page 351] (Contents)
+
 4   Next, all open streams with unwritten buffered data are flushed, all open streams are
     closed, and all files created by the tmpfile function are removed.
 5   Finally, control is returned to the host environment. If the value of status is zero or
@@ -13815,13 +13928,6 @@ s             Matches a sequence of non-white-space characters.279)
     returned to the host environment. No functions registered by the atexit function, the
     at_quick_exit function, or signal handlers registered by the signal function are
     called. The status returned to the host environment is determined in the same way as for
-
-
-    292) Each function is called as many times as it was registered, and in the correct order with respect to
-         other registered functions.
-
-[page 351] (Contents)
-
     the exit function (7.22.4.4). Whether open streams with unwritten buffered data are
     flushed, open streams are closed, or temporary files are removed is implementation-
     defined.
@@ -13836,7 +13942,12 @@ s             Matches a sequence of non-white-space characters.279)
     for a string that matches the string pointed to by name. The set of environment names
     and the method for altering the environment list are implementation-defined. The
     getenv function need not avoid data races with other threads of execution that modify
-    the environment list.293)
+    the environment list.300)
+
+    300) Many implementations provide non-standard functions that modify the environment list.
+
+[page 352] (Contents)
+
 3   The implementation shall behave as if no library function calls the getenv function.
     Returns
 4   The getenv function returns a pointer to a string associated with the matched list
@@ -13851,15 +13962,10 @@ s             Matches a sequence of non-white-space characters.279)
 2   The quick_exit function causes normal program termination to occur. No functions
     registered by the atexit function or signal handlers registered by the signal function
     are called. If a program calls the quick_exit function more than once, or calls the
-    exit function in addition to the quick_exit function, the behavior is undefined.
+    exit function in addition to the quick_exit function, the behavior is undefined. If a
+    signal is raised while the quick_exit function is executing, the behavior is undefined.
 3   The quick_exit function first calls all functions registered by the at_quick_exit
-    function, in the reverse order of their registration,294) except that a function is called after
-
-
-    293) Many implementations provide non-standard functions that modify the environment list.
-
-[page 352] (Contents)
-
+    function, in the reverse order of their registration,301) except that a function is called after
     any previously registered functions that had already been called at the time it was
     registered. If, during the call to any such function, a call to the longjmp function is
     made that would terminate the call to the registered function, the behavior is undefined.
@@ -13874,6 +13980,12 @@ s             Matches a sequence of non-white-space characters.279)
     Description
 2   If string is a null pointer, the system function determines whether the host
     environment has a command processor. If string is not a null pointer, the system
+
+    301) Each function is called as many times as it was registered, and in the correct order with respect to
+         other registered functions.
+
+[page 353] (Contents)
+
     function passes the string pointed to by string to that command processor to be
     executed in a manner which the implementation shall document; this might then cause the
     program calling system to behave in a non-conforming manner or to terminate.
@@ -13890,16 +14002,8 @@ s             Matches a sequence of non-white-space characters.279)
     in 7.1.4.
 2   The implementation shall ensure that the second argument of the comparison function
     (when called from bsearch), or both arguments (when called from qsort), are
-    pointers to elements of the array.295) The first argument when called from bsearch
+    pointers to elements of the array.302) The first argument when called from bsearch
     shall equal key.
-
-
-
-    294) Each function is called as many times as it was registered, and in the correct order with respect to
-         other registered functions.
-
-[page 353] (Contents)
-
 3   The comparison function shall not alter the contents of the array. The implementation
     may reorder elements of the array between calls to the comparison function, but shall not
     alter the contents of any individual element.
@@ -13911,6 +14015,17 @@ s             Matches a sequence of non-white-space characters.279)
 5   A sequence point occurs immediately before and immediately after each call to the
     comparison function, and also between any call to the comparison function and any
     movement of the objects passed as arguments to that call.
+
+
+
+
+    302) That is, if the value passed is p, then the following expressions are always nonzero:
+                  ((char *)p - (char *)base) % size == 0
+                  (char *)p >= (char *)base
+                  (char *)p < (char *)base + nmemb * size
+
+[page 354] (Contents)
+
     7.22.5.1 The bsearch function
     Synopsis
 1            #include <stdlib.h>
@@ -13926,27 +14041,16 @@ s             Matches a sequence of non-white-space characters.279)
     integer less than, equal to, or greater than zero if the key object is considered,
     respectively, to be less than, to match, or to be greater than the array element. The array
     shall consist of: all the elements that compare less than, all the elements that compare
-    equal to, and all the elements that compare greater than the key object, in that order.296)
+    equal to, and all the elements that compare greater than the key object, in that order.303)
     Returns
 4   The bsearch function returns a pointer to a matching element of the array, or a null
     pointer if no match is found. If two elements compare as equal, which element is
-
-
-    295) That is, if the value passed is p, then the following expressions are always nonzero:
-                  ((char *)p - (char *)base) % size == 0
-                  (char *)p >= (char *)base
-                  (char *)p < (char *)base + nmemb * size
-
-    296) In practice, the entire array is sorted according to the comparison function.
-
-[page 354] (Contents)
-
     matched is unspecified.
     7.22.5.2 The qsort function
     Synopsis
-1           #include <stdlib.h>
-            void qsort(void *base, size_t nmemb, size_t size,
-                 int (*compar)(const void *, const void *));
+1            #include <stdlib.h>
+             void qsort(void *base, size_t nmemb, size_t size,
+                  int (*compar)(const void *, const void *));
     Description
 2   The qsort function sorts an array of nmemb objects, the initial element of which is
     pointed to by base. The size of each object is specified by size.
@@ -13955,6 +14059,12 @@ s             Matches a sequence of non-white-space characters.279)
     objects being compared. The function shall return an integer less than, equal to, or
     greater than zero if the first argument is considered to be respectively less than, equal to,
     or greater than the second.
+
+
+    303) In practice, the entire array is sorted according to the comparison function.
+
+[page 355] (Contents)
+
 4   If two elements compare as equal, their order in the resulting sorted array is unspecified.
     Returns
 5   The qsort function returns no value.
@@ -13967,23 +14077,15 @@ s             Matches a sequence of non-white-space characters.279)
             long long int llabs(long long int j);
     Description
 2   The abs, labs, and llabs functions compute the absolute value of an integer j. If the
-    result cannot be represented, the behavior is undefined.297)
+    result cannot be represented, the behavior is undefined.304)
     Returns
 3   The abs, labs, and llabs, functions return the absolute value.
-
-
-
-
-    297) The absolute value of the most negative number cannot be represented in two's complement.
-
-[page 355] (Contents)
-
     7.22.6.2 The div, ldiv, and lldiv functions
     Synopsis
-1            #include <stdlib.h>
-             div_t div(int numer, int denom);
-             ldiv_t ldiv(long int numer, long int denom);
-             lldiv_t lldiv(long long int numer, long long int denom);
+1           #include <stdlib.h>
+            div_t div(int numer, int denom);
+            ldiv_t ldiv(long int numer, long int denom);
+            lldiv_t lldiv(long long int numer, long long int denom);
     Description
 2   The div, ldiv, and lldiv, functions compute numer / denom and numer %
     denom in a single operation.
@@ -13993,6 +14095,14 @@ s             Matches a sequence of non-white-space characters.279)
     shall contain (in either order) the members quot (the quotient) and rem (the remainder),
     each of which has the same type as the arguments numer and denom. If either part of
     the result cannot be represented, the behavior is undefined.
+
+
+
+
+    304) The absolute value of the most negative number cannot be represented in two's complement.
+
+[page 356] (Contents)
+
     7.22.7 Multibyte/wide character conversion functions
 1   The behavior of the multibyte character functions is affected by the LC_CTYPE category
     of the current locale. For a state-dependent encoding, each function is placed into its
@@ -14000,24 +14110,16 @@ s             Matches a sequence of non-white-space characters.279)
     which its character pointer argument, s, is a null pointer. Subsequent calls with s as
     other than a null pointer cause the internal conversion state of the function to be altered as
     necessary. A call with s as a null pointer causes these functions to return a nonzero value
-    if encodings have state dependency, and zero otherwise.298) Changing the LC_CTYPE
+    if encodings have state dependency, and zero otherwise.305) Changing the LC_CTYPE
     category causes the conversion state of these functions to be indeterminate.
     7.22.7.1 The mblen function
     Synopsis
-1            #include <stdlib.h>
-             int mblen(const char *s, size_t n);
+1           #include <stdlib.h>
+            int mblen(const char *s, size_t n);
     Description
 2   If s is not a null pointer, the mblen function determines the number of bytes contained
     in the multibyte character pointed to by s. Except that the conversion state of the
     mbtowc function is not affected, it is equivalent to
-
-
-
-    298) If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
-         character codes, but are grouped with an adjacent multibyte character.
-
-[page 356] (Contents)
-
             mbtowc((wchar_t *)0, (const char *)0, 0);
             mbtowc((wchar_t *)0, s, n);
 3   The implementation shall behave as if no library function calls the mblen function.
@@ -14029,12 +14131,21 @@ s             Matches a sequence of non-white-space characters.279)
     or fewer bytes form a valid multibyte character), or returns -1 (if they do not form a valid
     multibyte character).
     Forward references: the mbtowc function (7.22.7.2).
+
+
+
+
+    305) If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
+         character codes, but are grouped with an adjacent multibyte character.
+
+[page 357] (Contents)
+
     7.22.7.2 The mbtowc function
     Synopsis
-1           #include <stdlib.h>
-            int mbtowc(wchar_t * restrict pwc,
-                 const char * restrict s,
-                 size_t n);
+1          #include <stdlib.h>
+           int mbtowc(wchar_t * restrict pwc,
+                const char * restrict s,
+                size_t n);
     Description
 2   If s is not a null pointer, the mbtowc function inspects at most n bytes beginning with
     the byte pointed to by s to determine the number of bytes needed to complete the next
@@ -14053,9 +14164,6 @@ s             Matches a sequence of non-white-space characters.279)
     form a valid multibyte character).
 5   In no case will the value returned be greater than n or the value of the MB_CUR_MAX
     macro.
-
-[page 357] (Contents)
-
     7.22.7.3 The wctomb function
     Synopsis
 1          #include <stdlib.h>
@@ -14068,6 +14176,9 @@ s             Matches a sequence of non-white-space characters.279)
     are stored. If wc is a null wide character, a null byte is stored, preceded by any shift
     sequence needed to restore the initial shift state, and the function is left in the initial
     conversion state.
+
+[page 358] (Contents)
+
 3   The implementation shall behave as if no library function calls the wctomb function.
     Returns
 4   If s is a null pointer, the wctomb function returns a nonzero or zero value, if multibyte
@@ -14081,10 +14192,10 @@ s             Matches a sequence of non-white-space characters.279)
     the current locale.
     7.22.8.1 The mbstowcs function
     Synopsis
-1          #include <stdlib.h>
-           size_t mbstowcs(wchar_t * restrict pwcs,
-                const char * restrict s,
-                size_t n);
+1            #include <stdlib.h>
+             size_t mbstowcs(wchar_t * restrict pwcs,
+                  const char * restrict s,
+                  size_t n);
     Description
 2   The mbstowcs function converts a sequence of multibyte characters that begins in the
     initial shift state from the array pointed to by s into a sequence of corresponding wide
@@ -14092,22 +14203,27 @@ s             Matches a sequence of non-white-space characters.279)
     No multibyte characters that follow a null character (which is converted into a null wide
     character) will be examined or converted. Each multibyte character is converted as if by
     a call to the mbtowc function, except that the conversion state of the mbtowc function is
-
-[page 358] (Contents)
-
     not affected.
 3   No more than n elements will be modified in the array pointed to by pwcs. If copying
     takes place between objects that overlap, the behavior is undefined.
     Returns
 4   If an invalid multibyte character is encountered, the mbstowcs function returns
     (size_t)(-1). Otherwise, the mbstowcs function returns the number of array
-    elements modified, not including a terminating null wide character, if any.299)
+    elements modified, not including a terminating null wide character, if any.306)
+
+
+
+
+    306) The array will not be null-terminated if the value returned is n.
+
+[page 359] (Contents)
+
     7.22.8.2 The wcstombs function
     Synopsis
-1            #include <stdlib.h>
-             size_t wcstombs(char * restrict s,
-                  const wchar_t * restrict pwcs,
-                  size_t n);
+1          #include <stdlib.h>
+           size_t wcstombs(char * restrict s,
+                const wchar_t * restrict pwcs,
+                size_t n);
     Description
 2   The wcstombs function converts a sequence of wide characters from the array pointed
     to by pwcs into a sequence of corresponding multibyte characters that begins in the
@@ -14121,20 +14237,22 @@ s             Matches a sequence of non-white-space characters.279)
 4   If a wide character is encountered that does not correspond to a valid multibyte character,
     the wcstombs function returns (size_t)(-1). Otherwise, the wcstombs function
     returns the number of bytes modified, not including a terminating null character, if
-    any.299)
-
-
+    any.306)
 
+[page 360] (Contents)
 
-    299) The array will not be null-terminated if the value returned is n.
+    7.23 _Noreturn <stdnoreturn.h>
+1   The header <stdnoreturn.h> defines the macro
+            noreturn
+    which expands to _Noreturn.
 
-[page 359] (Contents)
+[page 361] (Contents)
 
-    7.23 String handling <string.h>
-    7.23.1 String function conventions
-1   The header <string.h> declares one type and several functions, and defines one
+    7.24 String handling <string.h>
+    7.24.1 String function conventions
+1   The header <string.h> declares one type and several functions, and defines one
     macro useful for manipulating arrays of character type and other objects treated as arrays
-    of character type.300) The type is size_t and the macro is NULL (both described in
+    of character type.307) The type is size_t and the macro is NULL (both described in
     7.19). Various methods are used for determining the lengths of the arrays, but in all cases
     a char * or void * argument points to the initial (lowest addressed) character of the
     array. If an array is accessed beyond the end of an object, the behavior is undefined.
@@ -14148,10 +14266,10 @@ s             Matches a sequence of non-white-space characters.279)
 3   For all functions in this subclause, each character shall be interpreted as if it had the type
     unsigned char (and therefore every possible object representation is valid and has a
     different value).
-    7.23.2 Copying functions
-    7.23.2.1 The memcpy function
+    7.24.2 Copying functions
+    7.24.2.1 The memcpy function
     Synopsis
-1            #include <string.h>
+1            #include <string.h>
              void *memcpy(void * restrict s1,
                   const void * restrict s2,
                   size_t n);
@@ -14165,13 +14283,13 @@ s             Matches a sequence of non-white-space characters.279)
 
 
 
-    300) See ''future library directions'' (7.30.11).
+    307) See ''future library directions'' (7.31.13).
 
-[page 360] (Contents)
+[page 362] (Contents)
 
-    7.23.2.2 The memmove function
+    7.24.2.2 The memmove function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             void *memmove(void *s1, const void *s2, size_t n);
     Description
 2   The memmove function copies n characters from the object pointed to by s2 into the
@@ -14181,9 +14299,9 @@ s             Matches a sequence of non-white-space characters.279)
     temporary array are copied into the object pointed to by s1.
     Returns
 3   The memmove function returns the value of s1.
-    7.23.2.3 The strcpy function
+    7.24.2.3 The strcpy function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             char *strcpy(char * restrict s1,
                  const char * restrict s2);
     Description
@@ -14192,9 +14310,9 @@ s             Matches a sequence of non-white-space characters.279)
     overlap, the behavior is undefined.
     Returns
 3   The strcpy function returns the value of s1.
-    7.23.2.4 The strncpy function
+    7.24.2.4 The strncpy function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             char *strncpy(char * restrict s1,
                  const char * restrict s2,
                  size_t n);
@@ -14202,18 +14320,18 @@ s             Matches a sequence of non-white-space characters.279)
 2   The strncpy function copies not more than n characters (characters that follow a null
     character are not copied) from the array pointed to by s2 to the array pointed to by
 
-[page 361] (Contents)
+[page 363] (Contents)
 
-    s1.301) If copying takes place between objects that overlap, the behavior is undefined.
+    s1.308) If copying takes place between objects that overlap, the behavior is undefined.
 3   If the array pointed to by s2 is a string that is shorter than n characters, null characters
     are appended to the copy in the array pointed to by s1, until n characters in all have been
     written.
     Returns
 4   The strncpy function returns the value of s1.
-    7.23.3 Concatenation functions
-    7.23.3.1 The strcat function
+    7.24.3 Concatenation functions
+    7.24.3.1 The strcat function
     Synopsis
-1            #include <string.h>
+1            #include <string.h>
              char *strcat(char * restrict s1,
                   const char * restrict s2);
     Description
@@ -14223,9 +14341,9 @@ s             Matches a sequence of non-white-space characters.279)
     objects that overlap, the behavior is undefined.
     Returns
 3   The strcat function returns the value of s1.
-    7.23.3.2 The strncat function
+    7.24.3.2 The strncat function
     Synopsis
-1            #include <string.h>
+1            #include <string.h>
              char *strncat(char * restrict s1,
                   const char * restrict s2,
                   size_t n);
@@ -14233,38 +14351,38 @@ s             Matches a sequence of non-white-space characters.279)
 2   The strncat function appends not more than n characters (a null character and
     characters that follow it are not appended) from the array pointed to by s2 to the end of
     the string pointed to by s1. The initial character of s2 overwrites the null character at the
-    end of s1. A terminating null character is always appended to the result.302) If copying
+    end of s1. A terminating null character is always appended to the result.309) If copying
 
-    301) Thus, if there is no null character in the first n characters of the array pointed to by s2, the result will
+    308) Thus, if there is no null character in the first n characters of the array pointed to by s2, the result will
          not be null-terminated.
-    302) Thus, the maximum number of characters that can end up in the array pointed to by s1 is
+    309) Thus, the maximum number of characters that can end up in the array pointed to by s1 is
          strlen(s1)+n+1.
 
-[page 362] (Contents)
+[page 364] (Contents)
 
     takes place between objects that overlap, the behavior is undefined.
     Returns
 3   The strncat function returns the value of s1.
-    Forward references: the strlen function (7.23.6.3).
-    7.23.4 Comparison functions
+    Forward references: the strlen function (7.24.6.3).
+    7.24.4 Comparison functions
 1   The sign of a nonzero value returned by the comparison functions memcmp, strcmp,
     and strncmp is determined by the sign of the difference between the values of the first
     pair of characters (both interpreted as unsigned char) that differ in the objects being
     compared.
-    7.23.4.1 The memcmp function
+    7.24.4.1 The memcmp function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             int memcmp(const void *s1, const void *s2, size_t n);
     Description
 2   The memcmp function compares the first n characters of the object pointed to by s1 to
-    the first n characters of the object pointed to by s2.303)
+    the first n characters of the object pointed to by s2.310)
     Returns
 3   The memcmp function returns an integer greater than, equal to, or less than zero,
     accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
     pointed to by s2.
-    7.23.4.2 The strcmp function
+    7.24.4.2 The strcmp function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             int strcmp(const char *s1, const char *s2);
     Description
 2   The strcmp function compares the string pointed to by s1 to the string pointed to by
@@ -14273,16 +14391,16 @@ s             Matches a sequence of non-white-space characters.279)
 3   The strcmp function returns an integer greater than, equal to, or less than zero,
     accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
 
-    303) The contents of ''holes'' used as padding for purposes of alignment within structure objects are
+    310) The contents of ''holes'' used as padding for purposes of alignment within structure objects are
          indeterminate. Strings shorter than their allocated space and unions may also cause problems in
          comparison.
 
-[page 363] (Contents)
+[page 365] (Contents)
 
     pointed to by s2.
-    7.23.4.3 The strcoll function
+    7.24.4.3 The strcoll function
     Synopsis
-1          #include <string.h>
+1          #include <string.h>
            int strcoll(const char *s1, const char *s2);
     Description
 2   The strcoll function compares the string pointed to by s1 to the string pointed to by
@@ -14291,9 +14409,9 @@ s             Matches a sequence of non-white-space characters.279)
 3   The strcoll function returns an integer greater than, equal to, or less than zero,
     accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
     pointed to by s2 when both are interpreted as appropriate to the current locale.
-    7.23.4.4 The strncmp function
+    7.24.4.4 The strncmp function
     Synopsis
-1          #include <string.h>
+1          #include <string.h>
            int strncmp(const char *s1, const char *s2, size_t n);
     Description
 2   The strncmp function compares not more than n characters (characters that follow a
@@ -14303,9 +14421,9 @@ s             Matches a sequence of non-white-space characters.279)
 3   The strncmp function returns an integer greater than, equal to, or less than zero,
     accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
     to, or less than the possibly null-terminated array pointed to by s2.
-    7.23.4.5 The strxfrm function
+    7.24.4.5 The strxfrm function
     Synopsis
-1          #include <string.h>
+1          #include <string.h>
            size_t strxfrm(char * restrict s1,
                 const char * restrict s2,
                 size_t n);
@@ -14314,7 +14432,7 @@ s             Matches a sequence of non-white-space characters.279)
     string into the array pointed to by s1. The transformation is such that if the strcmp
     function is applied to two transformed strings, it returns a value greater than, equal to, or
 
-[page 364] (Contents)
+[page 366] (Contents)
 
     less than zero, corresponding to the result of the strcoll function applied to the same
     two original strings. No more than n characters are placed into the resulting array
@@ -14329,10 +14447,10 @@ s             Matches a sequence of non-white-space characters.279)
     transformation of the string pointed to by s.
             1 + strxfrm(NULL, s, 0)
 
-    7.23.5 Search functions
-    7.23.5.1 The memchr function
+    7.24.5 Search functions
+    7.24.5.1 The memchr function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             void *memchr(const void *s, int c, size_t n);
     Description
 2   The memchr function locates the first occurrence of c (converted to an unsigned
@@ -14342,23 +14460,23 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The memchr function returns a pointer to the located character, or a null pointer if the
     character does not occur in the object.
-    7.23.5.2 The strchr function
+    7.24.5.2 The strchr function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             char *strchr(const char *s, int c);
     Description
 2   The strchr function locates the first occurrence of c (converted to a char) in the
     string pointed to by s. The terminating null character is considered to be part of the
     string.
 
-[page 365] (Contents)
+[page 367] (Contents)
 
     Returns
 3   The strchr function returns a pointer to the located character, or a null pointer if the
     character does not occur in the string.
-    7.23.5.3 The strcspn function
+    7.24.5.3 The strcspn function
     Synopsis
-1          #include <string.h>
+1          #include <string.h>
            size_t strcspn(const char *s1, const char *s2);
     Description
 2   The strcspn function computes the length of the maximum initial segment of the string
@@ -14366,9 +14484,9 @@ s             Matches a sequence of non-white-space characters.279)
     s2.
     Returns
 3   The strcspn function returns the length of the segment.
-    7.23.5.4 The strpbrk function
+    7.24.5.4 The strpbrk function
     Synopsis
-1          #include <string.h>
+1          #include <string.h>
            char *strpbrk(const char *s1, const char *s2);
     Description
 2   The strpbrk function locates the first occurrence in the string pointed to by s1 of any
@@ -14376,32 +14494,32 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The strpbrk function returns a pointer to the character, or a null pointer if no character
     from s2 occurs in s1.
-    7.23.5.5 The strrchr function
+    7.24.5.5 The strrchr function
     Synopsis
-1          #include <string.h>
+1          #include <string.h>
            char *strrchr(const char *s, int c);
     Description
 2   The strrchr function locates the last occurrence of c (converted to a char) in the
     string pointed to by s. The terminating null character is considered to be part of the
     string.
 
-[page 366] (Contents)
+[page 368] (Contents)
 
     Returns
 3   The strrchr function returns a pointer to the character, or a null pointer if c does not
     occur in the string.
-    7.23.5.6 The strspn function
+    7.24.5.6 The strspn function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             size_t strspn(const char *s1, const char *s2);
     Description
 2   The strspn function computes the length of the maximum initial segment of the string
     pointed to by s1 which consists entirely of characters from the string pointed to by s2.
     Returns
 3   The strspn function returns the length of the segment.
-    7.23.5.7 The strstr function
+    7.24.5.7 The strstr function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             char *strstr(const char *s1, const char *s2);
     Description
 2   The strstr function locates the first occurrence in the string pointed to by s1 of the
@@ -14410,9 +14528,9 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The strstr function returns a pointer to the located string, or a null pointer if the string
     is not found. If s2 points to a string with zero length, the function returns s1.
-    7.23.5.8 The strtok function
+    7.24.5.8 The strtok function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             char *strtok(char * restrict s1,
                  const char * restrict s2);
     Description
@@ -14422,7 +14540,7 @@ s             Matches a sequence of non-white-space characters.279)
     sequence have a null first argument. The separator string pointed to by s2 may be
     different from call to call.
 
-[page 367] (Contents)
+[page 369] (Contents)
 
 3   The first call in the sequence searches the string pointed to by s1 for the first character
     that is not contained in the current separator string pointed to by s2. If no such character
@@ -14436,69 +14554,86 @@ s             Matches a sequence of non-white-space characters.279)
     character, from which the next search for a token will start.
 5   Each subsequent call, with a null pointer as the value of the first argument, starts
     searching from the saved pointer and behaves as described above.
-6   The strtok function is not required to avoid data races. The implementation shall
-    behave as if no library function calls the strtok function.
+6   The strtok function is not required to avoid data races with other calls to the strtok
+    function.311) The implementation shall behave as if no library function calls the strtok
+    function.
     Returns
 7   The strtok function returns a pointer to the first character of a token, or a null pointer
     if there is no token.
 8   EXAMPLE
-           #include <string.h>
-           static char str[] = "?a???b,,,#c";
-           char *t;
-           t   =   strtok(str, "?");      //   t   points to the token "a"
-           t   =   strtok(NULL, ",");     //   t   points to the token "??b"
-           t   =   strtok(NULL, "#,");    //   t   points to the token "c"
-           t   =   strtok(NULL, "?");     //   t   is a null pointer
+            #include <string.h>
+            static char str[] = "?a???b,,,#c";
+            char *t;
+            t   =   strtok(str, "?");         //   t   points to the token "a"
+            t   =   strtok(NULL, ",");        //   t   points to the token "??b"
+            t   =   strtok(NULL, "#,");       //   t   points to the token "c"
+            t   =   strtok(NULL, "?");        //   t   is a null pointer
+
+    Forward references: The strtok_s function (K.3.7.3.1).
+
+
+
 
-    7.23.6 Miscellaneous functions
-    7.23.6.1 The memset function
+    311) The strtok_s function can be used instead to avoid data races.
+
+[page 370] (Contents)
+
+    7.24.6 Miscellaneous functions
+    7.24.6.1 The memset function
     Synopsis
-1          #include <string.h>
-           void *memset(void *s, int c, size_t n);
+1           #include <string.h>
+            void *memset(void *s, int c, size_t n);
     Description
 2   The memset function copies the value of c (converted to an unsigned char) into
     each of the first n characters of the object pointed to by s.
     Returns
 3   The memset function returns the value of s.
-
-[page 368] (Contents)
-
-    7.23.6.2 The strerror function
+    7.24.6.2 The strerror function
     Synopsis
-1           #include <string.h>
+1           #include <string.h>
             char *strerror(int errnum);
     Description
 2   The strerror function maps the number in errnum to a message string. Typically,
     the values for errnum come from errno, but strerror shall map any value of type
     int to a message.
-3   The strerror function is not required to avoid data races. The implementation shall
-    behave as if no library function calls the strerror function.
+3   The strerror function is not required to avoid data races with other calls to the
+    strerror function.312) The implementation shall behave as if no library function calls
+    the strerror function.
     Returns
 4   The strerror function returns a pointer to the string, the contents of which are locale-
     specific. The array pointed to shall not be modified by the program, but may be
     overwritten by a subsequent call to the strerror function.
-    7.23.6.3 The strlen function
+    Forward references: The strerror_s function (K.3.7.4.2).
+
+
+
+
+    312) The strerror_s function can be used instead to avoid data races.
+
+[page 371] (Contents)
+
+    7.24.6.3 The strlen function
     Synopsis
-1           #include <string.h>
-            size_t strlen(const char *s);
+1          #include <string.h>
+           size_t strlen(const char *s);
     Description
 2   The strlen function computes the length of the string pointed to by s.
     Returns
 3   The strlen function returns the number of characters that precede the terminating null
     character.
 
-[page 369] (Contents)
+[page 372] (Contents)
 
-    7.24 Type-generic math <tgmath.h>
-1   The header <tgmath.h> includes the headers <math.h> and <complex.h> and
+    7.25 Type-generic math <tgmath.h>
+1   The header <tgmath.h> includes the headers <math.h> and <complex.h> and
     defines several type-generic macros.
 2   Of the <math.h> and <complex.h> functions without an f (float) or l (long
     double) suffix, several have one or more parameters whose corresponding real type is
     double. For each such function, except modf, there is a corresponding type-generic
-    macro.304) The parameters whose corresponding real type is double in the function
+    macro.313) The parameters whose corresponding real type is double in the function
     synopsis are generic parameters. Use of the macro invokes a function whose
     corresponding real type and type domain are determined by the arguments for the generic
-    parameters.305)
+    parameters.314)
 3   Use of the macro invokes a function whose generic parameters have the corresponding
     real type determined as follows:
     -- First, if any argument for generic parameters has type long double, the type
@@ -14514,60 +14649,60 @@ s             Matches a sequence of non-white-space characters.279)
 
 
 
-    304) Like other function-like macros in Standard libraries, each type-generic macro can be suppressed to
+    313) Like other function-like macros in Standard libraries, each type-generic macro can be suppressed to
          make available the corresponding ordinary function.
-    305) If the type of the argument is not compatible with the type of the parameter for the selected function,
+    314) If the type of the argument is not compatible with the type of the parameter for the selected function,
          the behavior is undefined.
 
-[page 370] (Contents)
+[page 373] (Contents)
 
-             <math.h>         <complex.h>              type-generic
-              function           function                 macro
-               acos              cacos                   acos
-               asin              casin                   asin
-               atan              catan                   atan
-               acosh             cacosh                  acosh
-               asinh             casinh                  asinh
-               atanh             catanh                  atanh
-               cos               ccos                    cos
-               sin               csin                    sin
-               tan               ctan                    tan
-               cosh              ccosh                   cosh
-               sinh              csinh                   sinh
-               tanh              ctanh                   tanh
-               exp               cexp                    exp
-               log               clog                    log
-               pow               cpow                    pow
-               sqrt              csqrt                   sqrt
-               fabs              cabs                    fabs
+            <math.h>          <complex.h>              type-generic
+             function            function                 macro
+             acos               cacos                    acos
+             asin               casin                    asin
+             atan               catan                    atan
+             acosh              cacosh                   acosh
+             asinh              casinh                   asinh
+             atanh              catanh                   atanh
+             cos                ccos                     cos
+             sin                csin                     sin
+             tan                ctan                     tan
+             cosh               ccosh                    cosh
+             sinh               csinh                    sinh
+             tanh               ctanh                    tanh
+             exp                cexp                     exp
+             log                clog                     log
+             pow                cpow                     pow
+             sqrt               csqrt                    sqrt
+             fabs               cabs                     fabs
     If at least one argument for a generic parameter is complex, then use of the macro invokes
     a complex function; otherwise, use of the macro invokes a real function.
 5   For each unsuffixed function in <math.h> without a c-prefixed counterpart in
     <complex.h> (except modf), the corresponding type-generic macro has the same
     name as the function. These type-generic macros are:
-            atan2              fma                  llround              remainder
-            cbrt               fmax                 log10                remquo
-            ceil               fmin                 log1p                rint
-            copysign           fmod                 log2                 round
-            erf                frexp                logb                 scalbn
-            erfc               hypot                lrint                scalbln
-            exp2               ilogb                lround               tgamma
-            expm1              ldexp                nearbyint            trunc
-            fdim               lgamma               nextafter
-            floor              llrint               nexttoward
+          atan2                fma                  llround              remainder
+          cbrt                 fmax                 log10                remquo
+          ceil                 fmin                 log1p                rint
+          copysign             fmod                 log2                 round
+          erf                  frexp                logb                 scalbn
+          erfc                 hypot                lrint                scalbln
+          exp2                 ilogb                lround               tgamma
+          expm1                ldexp                nearbyint            trunc
+          fdim                 lgamma               nextafter
+          floor                llrint               nexttoward
     If all arguments for generic parameters are real, then use of the macro invokes a real
     function; otherwise, use of the macro results in undefined behavior.
 
-[page 371] (Contents)
+[page 374] (Contents)
 
 6   For each unsuffixed function in <complex.h> that is not a c-prefixed counterpart to a
     function in <math.h>, the corresponding type-generic macro has the same name as the
     function. These type-generic macros are:
-           carg                     conj                     creal
-           cimag                    cproj
+            carg                    conj                     creal
+            cimag                   cproj
     Use of the macro with any real or complex argument invokes a complex function.
 7   EXAMPLE       With the declarations
-            #include <tgmath.h>
+            #include <tgmath.h>
             int n;
             float f;
             double d;
@@ -14599,78 +14734,79 @@ s             Matches a sequence of non-white-space characters.279)
                 carg(dc)                            carg(dc), the function
                 cproj(ldc)                          cprojl(ldc)
 
-[page 372] (Contents)
+[page 375] (Contents)
 
-    7.25 Threads <threads.h>
-    7.25.1 Introduction
-1   The header <threads.h> defines macros, and declares types, enumeration constants,
-    and functions that support multiple threads of execution.
+    7.26 Threads <threads.h>
+    7.26.1 Introduction
+1   The header <threads.h> includes the header <time.h>, defines macros, and
+    declares types, enumeration constants, and functions that support multiple threads of
+    execution.315)
 2   Implementations that define the macro __STDC_NO_THREADS__ need not provide
     this header nor support any of its facilities.
 3   The macros are
-            ONCE_FLAG_INIT
+             thread_local
+    which expands to _Thread_local;
+             ONCE_FLAG_INIT
     which expands to a value that can be used to initialize an object of type once_flag;
     and
-            TSS_DTOR_ITERATIONS
+             TSS_DTOR_ITERATIONS
     which expands to an integer constant expression representing the maximum number of
     times that destructors will be called when a thread terminates.
 4   The types are
-            cnd_t
+             cnd_t
     which is a complete object type that holds an identifier for a condition variable;
-            thrd_t
+             thrd_t
     which is a complete object type that holds an identifier for a thread;
-            tss_t
+             tss_t
     which is a complete object type that holds an identifier for a thread-specific storage
     pointer;
-            mtx_t
+             mtx_t
     which is a complete object type that holds an identifier for a mutex;
-            tss_dtor_t
+             tss_dtor_t
     which is the function pointer type void (*)(void*), used for a destructor for a
     thread-specific storage pointer;
-            thrd_start_t
-    which is the function pointer type int (*)(void*) that is passed to thrd_create
-    to create a new thread;
-            once_flag
-    which is a complete object type that holds a flag for use by call_once; and
 
-[page 373] (Contents)
 
-           xtime
-    which is a structure type that holds a time specified in seconds and nanoseconds. The
-    structure shall contain at least the following members, in any order.
-           time_t sec;
-           long nsec;
+
+    315) See ''future library directions'' (7.31.15).
+
+[page 376] (Contents)
+
+            thrd_start_t
+    which is the function pointer type int (*)(void*) that is passed to thrd_create
+    to create a new thread; and
+              once_flag
+    which is a complete object type that holds a flag for use by call_once.
 5   The enumeration constants are
-           mtx_plain
+            mtx_plain
     which is passed to mtx_init to create a mutex object that supports neither timeout nor
     test and return;
-           mtx_recursive
+              mtx_recursive
     which is passed to mtx_init to create a mutex object that supports recursive locking;
-           mtx_timed
+              mtx_timed
     which is passed to mtx_init to create a mutex object that supports timeout;
-           mtx_try
-    which is passed to mtx_init to create a mutex object that supports test and return;
-           thrd_timeout
+            thrd_timedout
     which is returned by a timed wait function to indicate that the time specified in the call
     was reached without acquiring the requested resource;
-           thrd_success
+            thrd_success
     which is returned by a function to indicate that the requested operation succeeded;
-           thrd_busy
+            thrd_busy
     which is returned by a function to indicate that the requested operation failed because a
     resource requested by a test and return function is already in use;
-           thrd_error
+            thrd_error
     which is returned by a function to indicate that the requested operation failed; and
-           thrd_nomem
+            thrd_nomem
     which is returned by a function to indicate that the requested operation failed because it
     was unable to allocate memory.
+    Forward references: date and time (7.27).
 
-[page 374] (Contents)
+[page 377] (Contents)
 
-    7.25.2 Initialization functions
-    7.25.2.1 The call_once function
+    7.26.2 Initialization functions
+    7.26.2.1 The call_once function
     Synopsis
-1           #include <threads.h>
-            void call_once(once_flag *flag, void (*func)(void));
+1          #include <threads.h>
+           void call_once(once_flag *flag, void (*func)(void));
     Description
 2   The call_once function uses the once_flag pointed to by flag to ensure that
     func is called exactly once, the first time the call_once function is called with that
@@ -14678,11 +14814,11 @@ s             Matches a sequence of non-white-space characters.279)
     with all subsequent calls to the call_once function with the same value of flag.
     Returns
 3   The call_once function returns no value.
-    7.25.3 Condition variable functions
-    7.25.3.1 The cnd_broadcast function
+    7.26.3 Condition variable functions
+    7.26.3.1 The cnd_broadcast function
     Synopsis
-1           #include <threads.h>
-            int cnd_broadcast(cnd_t *cond);
+1          #include <threads.h>
+           int cnd_broadcast(cnd_t *cond);
     Description
 2   The cnd_broadcast function unblocks all of the threads that are blocked on the
     condition variable pointed to by cond at the time of the call. If no threads are blocked
@@ -14691,23 +14827,23 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The cnd_broadcast function returns thrd_success on success, or thrd_error
     if the request could not be honored.
-    7.25.3.2 The cnd_destroy function
+    7.26.3.2 The cnd_destroy function
     Synopsis
-1           #include <threads.h>
-            void cnd_destroy(cnd_t *cond);
+1          #include <threads.h>
+           void cnd_destroy(cnd_t *cond);
     Description
 2   The cnd_destroy function releases all resources used by the condition variable
     pointed to by cond. The cnd_destroy function requires that no threads be blocked
     waiting for the condition variable pointed to by cond.
 
-[page 375] (Contents)
+[page 378] (Contents)
 
     Returns
 3   The cnd_destroy function returns no value.
-    7.25.3.3 The cnd_init function
+    7.26.3.3 The cnd_init function
     Synopsis
-1          #include <threads.h>
-           int cnd_init(cnd_t *cond);
+1           #include <threads.h>
+            int cnd_init(cnd_t *cond);
     Description
 2   The cnd_init function creates a condition variable. If it succeeds it sets the variable
     pointed to by cond to a value that uniquely identifies the newly created condition
@@ -14717,10 +14853,10 @@ s             Matches a sequence of non-white-space characters.279)
 3   The cnd_init function returns thrd_success on success, or thrd_nomem if no
     memory could be allocated for the newly created condition, or thrd_error if the
     request could not be honored.
-    7.25.3.4 The cnd_signal function
+    7.26.3.4 The cnd_signal function
     Synopsis
-1          #include <threads.h>
-           int cnd_signal(cnd_t *cond);
+1           #include <threads.h>
+            int cnd_signal(cnd_t *cond);
     Description
 2   The cnd_signal function unblocks one of the threads that are blocked on the
     condition variable pointed to by cond at the time of the call. If no threads are blocked
@@ -14729,131 +14865,127 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The cnd_signal function returns thrd_success on success or thrd_error if
     the request could not be honored.
-    7.25.3.5 The cnd_timedwait function
+    7.26.3.5 The cnd_timedwait function
     Synopsis
-1          #include <threads.h>
-           int cnd_timedwait(cnd_t *cond, mtx_t *mtx,
-                const xtime *xt);
+1           #include <threads.h>
+            int cnd_timedwait(cnd_t *restrict cond,
+                 mtx_t *restrict mtx,
+                 const struct timespec *restrict ts);
 
-[page 376] (Contents)
+[page 379] (Contents)
 
     Description
 2   The cnd_timedwait function atomically unlocks the mutex pointed to by mtx and
     endeavors to block until the condition variable pointed to by cond is signaled by a call to
-    cnd_signal or to cnd_broadcast, or until after the time specified by the xtime
-    object pointed to by xt. When the calling thread becomes unblocked it locks the variable
+    cnd_signal or to cnd_broadcast, or until after the TIME_UTC-based calendar
+    time pointed to by ts. When the calling thread becomes unblocked it locks the variable
     pointed to by mtx before it returns. The cnd_timedwait function requires that the
     mutex pointed to by mtx be locked by the calling thread.
     Returns
 3   The cnd_timedwait function returns thrd_success upon success, or
-    thrd_timeout if the time specified in the call was reached without acquiring the
+    thrd_timedout if the time specified in the call was reached without acquiring the
     requested resource, or thrd_error if the request could not be honored.
-    7.25.3.6 The cnd_wait function
+    7.26.3.6 The cnd_wait function
     Synopsis
-1           #include <threads.h>
-            int cnd_wait(cnd_t *cond, mtx_t *mtx);
+1          #include <threads.h>
+           int cnd_wait(cnd_t *cond, mtx_t *mtx);
     Description
 2   The cnd_wait function atomically unlocks the mutex pointed to by mtx and endeavors
     to block until the condition variable pointed to by cond is signaled by a call to
     cnd_signal or to cnd_broadcast. When the calling thread becomes unblocked it
-    locks the mutex pointed to by mtx before it returns. If the mutex pointed to by mtx is
-    not locked by the calling thread, the cnd_wait function will act as if the abort
-    function is called.
+    locks the mutex pointed to by mtx before it returns. The cnd_wait function requires
+    that the mutex pointed to by mtx be locked by the calling thread.
     Returns
 3   The cnd_wait function returns thrd_success on success or thrd_error if the
     request could not be honored.
-    7.25.4 Mutex functions
-    7.25.4.1 The mtx_destroy function
+    7.26.4 Mutex functions
+    7.26.4.1 The mtx_destroy function
     Synopsis
-1           #include <threads.h>
-            void mtx_destroy(mtx_t *mtx);
+1          #include <threads.h>
+           void mtx_destroy(mtx_t *mtx);
     Description
 2   The mtx_destroy function releases any resources used by the mutex pointed to by
     mtx. No threads can be blocked waiting for the mutex pointed to by mtx.
-
-[page 377] (Contents)
-
     Returns
 3   The mtx_destroy function returns no value.
-    7.25.4.2 The mtx_init function
+
+[page 380] (Contents)
+
+    7.26.4.2 The mtx_init function
     Synopsis
-1          #include <threads.h>
-           int mtx_init(mtx_t *mtx, int type);
+1           #include <threads.h>
+            int mtx_init(mtx_t *mtx, int type);
     Description
 2   The mtx_init function creates a mutex object with properties indicated by type,
     which must have one of the six values:
     mtx_plain for a simple non-recursive mutex,
-    mtx_timed for a non-recursive mutex that supports timeout,
-    mtx_try      for a non-recursive mutex that supports test and return,
-    mtx_plain | mtx_recursive for a simple recursive mutex,
-    mtx_timed | mtx_recursive for a recursive mutex that supports timeout, or
-    mtx_try | mtx_recursive for a recursive mutex that supports test and return.
+    mtx_timed for a non-recursive mutex that supports timeout,                      *
+    mtx_plain | mtx_recursive for a simple recursive mutex, or
+    mtx_timed | mtx_recursive for a recursive mutex that supports timeout.
 3   If the mtx_init function succeeds, it sets the mutex pointed to by mtx to a value that
     uniquely identifies the newly created mutex.
     Returns
 4   The mtx_init function returns thrd_success on success, or thrd_error if the
     request could not be honored.
-    7.25.4.3 The mtx_lock function
+    7.26.4.3 The mtx_lock function
     Synopsis
-1          #include <threads.h>
-           int mtx_lock(mtx_t *mtx);
+1           #include <threads.h>
+            int mtx_lock(mtx_t *mtx);
     Description
 2   The mtx_lock function blocks until it locks the mutex pointed to by mtx. If the mutex
     is non-recursive, it shall not be locked by the calling thread. Prior calls to mtx_unlock
     on the same mutex shall synchronize with this operation.
     Returns
-3   The mtx_lock function returns thrd_success on success, or thrd_busy if the
-    resource requested is already in use, or thrd_error if the request could not be
-    honored.
+3   The mtx_lock function returns thrd_success on success, or thrd_error if the *
+    request could not be honored.
+    7.26.4.4 The mtx_timedlock function
+    Synopsis
+1           #include <threads.h>
+            int mtx_timedlock(mtx_t *restrict mtx,
+                 const struct timespec *restrict ts);
 
-[page 378] (Contents)
+[page 381] (Contents)
 
-    7.25.4.4 The mtx_timedlock function
-    Synopsis
-1           #include <threads.h>
-            int mtx_timedlock(mtx_t *mtx, const xtime *xt);
     Description
 2   The mtx_timedlock function endeavors to block until it locks the mutex pointed to by
-    mtx or until the time specified by the xtime object xt has passed. The specified mutex
-    shall support timeout. If the operation succeeds, prior calls to mtx_unlock on the same
-    mutex shall synchronize with this operation.
+    mtx or until after the TIME_UTC-based calendar time pointed to by ts. The specified
+    mutex shall support timeout. If the operation succeeds, prior calls to mtx_unlock on
+    the same mutex shall synchronize with this operation.
     Returns
-3   The mtx_timedlock function returns thrd_success on success, or thrd_busy
-    if the resource requested is already in use, or thrd_timeout if the time specified was
-    reached without acquiring the requested resource, or thrd_error if the request could
-    not be honored.
-    7.25.4.5 The mtx_trylock function
+3   The mtx_timedlock function returns thrd_success on success, or
+    thrd_timedout if the time specified was reached without acquiring the requested
+    resource, or thrd_error if the request could not be honored.
+    7.26.4.5 The mtx_trylock function
     Synopsis
-1           #include <threads.h>
-            int mtx_trylock(mtx_t *mtx);
+1          #include <threads.h>
+           int mtx_trylock(mtx_t *mtx);
     Description
-2   The mtx_trylock function endeavors to lock the mutex pointed to by mtx. The
-    specified mutex shall support either test and return or timeout. If the mutex is already
-    locked, the function returns without blocking. If the operation succeeds, prior calls to
-    mtx_unlock on the same mutex shall synchronize with this operation.
+2   The mtx_trylock function endeavors to lock the mutex pointed to by mtx. If the *
+    mutex is already locked, the function returns without blocking. If the operation succeeds,
+    prior calls to mtx_unlock on the same mutex shall synchronize with this operation.
     Returns
 3   The mtx_trylock function returns thrd_success on success, or thrd_busy if
     the resource requested is already in use, or thrd_error if the request could not be
     honored.
-    7.25.4.6 The mtx_unlock function
+    7.26.4.6 The mtx_unlock function
     Synopsis
-1           #include <threads.h>
-            int mtx_unlock(mtx_t *mtx);
+1          #include <threads.h>
+           int mtx_unlock(mtx_t *mtx);
     Description
 2   The mtx_unlock function unlocks the mutex pointed to by mtx. The mutex pointed to
     by mtx shall be locked by the calling thread.
-
-[page 379] (Contents)
-
     Returns
 3   The mtx_unlock function returns thrd_success on success or thrd_error if
     the request could not be honored.
-    7.25.5 Thread functions
-    7.25.5.1 The thrd_create function
+
+[page 382] (Contents)
+
+    7.26.5 Thread functions
+    7.26.5.1 The thrd_create function
     Synopsis
-1          #include <threads.h>
-           int thrd_create(thrd_t *thr, thrd_start_t func,
-                void *arg);
+1           #include <threads.h>
+            int thrd_create(thrd_t *thr, thrd_start_t func,
+                 void *arg);
     Description
 2   The thrd_create function creates a new thread executing func(arg). If the
     thrd_create function succeeds, it sets the object pointed to by thr to the identifier of
@@ -14865,172 +14997,187 @@ s             Matches a sequence of non-white-space characters.279)
 3   The thrd_create function returns thrd_success on success, or thrd_nomem if
     no memory could be allocated for the thread requested, or thrd_error if the request
     could not be honored.
-    7.25.5.2 The thrd_current function
+    7.26.5.2 The thrd_current function
     Synopsis
-1          #include <threads.h>
-           thrd_t thrd_current(void);
+1           #include <threads.h>
+            thrd_t thrd_current(void);
     Description
 2   The thrd_current function identifies the thread that called it.
     Returns
 3   The thrd_current function returns the identifier of the thread that called it.
-    7.25.5.3 The thrd_detach function
+    7.26.5.3 The thrd_detach function
     Synopsis
-1          #include <threads.h>
-           int thrd_detach(thrd_t thr);
-
-[page 380] (Contents)
-
+1           #include <threads.h>
+            int thrd_detach(thrd_t thr);
     Description
 2   The thrd_detach function tells the operating system to dispose of any resources
     allocated to the thread identified by thr when that thread terminates. The thread
     identified by thr shall not have been previously detached or joined with another thread.
+
+[page 383] (Contents)
+
     Returns
 3   The thrd_detach function returns thrd_success on success or thrd_error if
     the request could not be honored.
-    7.25.5.4 The thrd_equal function
+    7.26.5.4 The thrd_equal function
     Synopsis
-1           #include <threads.h>
-            int thrd_equal(thrd_t thr0, thrd_t thr1);
+1          #include <threads.h>
+           int thrd_equal(thrd_t thr0, thrd_t thr1);
     Description
 2   The thrd_equal function will determine whether the thread identified by thr0 refers
     to the thread identified by thr1.
     Returns
 3   The thrd_equal function returns zero if the thread thr0 and the thread thr1 refer to
     different threads. Otherwise the thrd_equal function returns a nonzero value.
-    7.25.5.5 The thrd_exit function
+    7.26.5.5 The thrd_exit function
     Synopsis
-1           #include <threads.h>
-            void thrd_exit(int res);
+1          #include <threads.h>
+           _Noreturn void thrd_exit(int res);
     Description
 2   The thrd_exit function terminates execution of the calling thread and sets its result
     code to res.
+3   The program shall terminate normally after the last thread has been terminated. The
+    behavior shall be as if the program called the exit function with the status
+    EXIT_SUCCESS at thread termination time.
     Returns
-3   The thrd_exit function returns no value.
-    7.25.5.6 The thrd_join function
+4   The thrd_exit function returns no value.
+    7.26.5.6 The thrd_join function
     Synopsis
-1           #include <threads.h>
-            int thrd_join(thrd_t thr, int *res);
+1          #include <threads.h>
+           int thrd_join(thrd_t thr, int *res);
     Description
 2   The thrd_join function joins the thread identified by thr with the current thread by
     blocking until the other thread has terminated. If the parameter res is not a null pointer,
+    it stores the thread's result code in the integer pointed to by res. The termination of the
 
-[page 381] (Contents)
+[page 384] (Contents)
 
-    it stores the thread's result code in the integer pointed to by res. The termination of the
     other thread synchronizes with the completion of the thrd_join function. The thread
     identified by thr shall not have been previously detached or joined with another thread.
     Returns
 3   The thrd_join function returns thrd_success on success or thrd_error if the
     request could not be honored.
-    7.25.5.7 The thrd_sleep function
-    Synopsis
-1          #include <threads.h>
-           void thrd_sleep(const xtime *xt);
-    Description
-2   The thrd_sleep function suspends execution of the calling thread until after the time
-    specified by the xtime object pointed to by xt.
-    Returns
-3   The thrd_sleep function returns no value.
-    7.25.5.8 The thrd_yield function
-    Synopsis
-1          #include <threads.h>
-           void thrd_yield(void);
+    7.26.5.7 The thrd_sleep function
+    Synopsis
+1           #include <threads.h>
+            int thrd_sleep(const struct timespec *duration,
+                 struct timespec *remaining);
+    Description
+2   The thrd_sleep function suspends execution of the calling thread until either the
+    interval specified by duration has elapsed or a signal which is not being ignored is
+    received. If interrupted by a signal and the remaining argument is not null, the
+    amount of time remaining (the requested interval minus the time actually slept) is stored
+    in the interval it points to. The duration and remaining arguments may point to the
+    same object.
+3   The suspension time may be longer than requested because the interval is rounded up to
+    an integer multiple of the sleep resolution or because of the scheduling of other activity
+    by the system. But, except for the case of being interrupted by a signal, the suspension
+    time shall not be less than that specified, as measured by the system clock TIME_UTC.
+    Returns
+4   The thrd_sleep function returns zero if the requested time has elapsed, -1 if it has
+    been interrupted by a signal, or a negative value if it fails.
+    7.26.5.8 The thrd_yield function
+    Synopsis
+1           #include <threads.h>
+            void thrd_yield(void);
     Description
 2   The thrd_yield function endeavors to permit other threads to run, even if the current
     thread would ordinarily continue to run.
     Returns
 3   The thrd_yield function returns no value.
-    7.25.6 Thread-specific storage functions
-    7.25.6.1 The tss_create function
+
+[page 385] (Contents)
+
+    7.26.6 Thread-specific storage functions
+    7.26.6.1 The tss_create function
     Synopsis
-1          #include <threads.h>
+1          #include <threads.h>
            int tss_create(tss_t *key, tss_dtor_t dtor);
     Description
 2   The tss_create function creates a thread-specific storage pointer with destructor
     dtor, which may be null.
-
-[page 382] (Contents)
-
     Returns
 3   If the tss_create function is successful, it sets the thread-specific storage pointed to
     by key to a value that uniquely identifies the newly created pointer and returns
     thrd_success; otherwise, thrd_error is returned and the thread-specific storage
     pointed to by key is set to an undefined value.
-    7.25.6.2 The tss_delete function
+    7.26.6.2 The tss_delete function
     Synopsis
-1           #include <threads.h>
-            void tss_delete(tss_t key);
+1          #include <threads.h>
+           void tss_delete(tss_t key);
     Description
 2   The tss_delete function releases any resources used by the thread-specific storage
     identified by key.
     Returns
 3   The tss_delete function returns no value.
-    7.25.6.3 The tss_get function
+    7.26.6.3 The tss_get function
     Synopsis
-1           #include <threads.h>
-            void *tss_get(tss_t key);
+1          #include <threads.h>
+           void *tss_get(tss_t key);
     Description
 2   The tss_get function returns the value for the current thread held in the thread-specific
     storage identified by key.
     Returns
 3   The tss_get function returns the value for the current thread if successful, or zero if
     unsuccessful.
-    7.25.6.4 The tss_set function
+
+[page 386] (Contents)
+
+    7.26.6.4 The tss_set function
     Synopsis
-1           #include <threads.h>
+1           #include <threads.h>
             int tss_set(tss_t key, void *val);
     Description
 2   The tss_set function sets the value for the current thread held in the thread-specific
     storage identified by key to val.
-
-[page 383] (Contents)
-
     Returns
 3   The tss_set function returns thrd_success on success or thrd_error if the
-    request could not be honored.
-    7.25.7 Time functions
-    7.25.7.1 The xtime_get function
-    Synopsis
-1           #include <threads.h>
-            int xtime_get(xtime *xt, int base);
-    Description
-2   The xtime_get function sets the xtime object pointed to by xt to hold the current
-    time based on the time base base.
-    Returns
-3   If the xtime_get function is successful it returns the nonzero value base, which must
-    be TIME_UTC; otherwise, it returns zero.306)
+    request could not be honored.                                             *
 
+[page 387] (Contents)
 
-
-
-    306) Although an xtime object describes times with nanosecond resolution, the actual resolution in an
-         xtime object is system dependent.
-
-[page 384] (Contents)
-
-    7.26 Date and time <time.h>
-    7.26.1 Components of time
-1   The header <time.h> defines two macros, and declares several types and functions for
+    7.27 Date and time <time.h>
+    7.27.1 Components of time
+1   The header <time.h> defines two macros, and declares several types and functions for
     manipulating time. Many functions deal with a calendar time that represents the current
     date (according to the Gregorian calendar) and time. Some functions deal with local
     time, which is the calendar time expressed for some specific time zone, and with Daylight
     Saving Time, which is a temporary change in the algorithm for determining local time.
     The local time zone and Daylight Saving Time are implementation-defined.
-2   The macros defined are NULL (described in 7.19); and
+2   The macros defined are NULL (described in 7.19);                                                            *
             CLOCKS_PER_SEC
     which expands to an expression with type clock_t (described below) that is the
-    number per second of the value returned by the clock function.
+    number per second of the value returned by the clock function; and
+            TIME_UTC
+    which expands to an integer constant greater than 0 that designates the UTC time
+    base.316)
 3   The types declared are size_t (described in 7.19);
             clock_t
     and
             time_t
-    which are arithmetic types capable of representing times; and
+    which are real types capable of representing times;
+            struct timespec
+    which holds an interval specified in seconds and nanoseconds (which may represent a
+    calendar time based on a particular epoch); and
             struct tm
     which holds the components of a calendar time, called the broken-down time.
 4   The range and precision of times representable in clock_t and time_t are
-    implementation-defined. The tm structure shall contain at least the following members,
-    in any order. The semantics of the members and their normal ranges are expressed in the
-    comments.307)
+    implementation-defined. The timespec structure shall contain at least the following
+    members, in any order.317)
+
+
+
+    316) Implementations may define additional time bases, but are only required to support a real time clock
+         based on UTC.
+    317) The tv_sec member is a linear count of seconds and may not have the normal semantics of a
+         time_t. The semantics of the members and their normal ranges are expressed in the comments.
+
+[page 388] (Contents)
+
+            time_t tv_sec; // whole seconds -- >= 0
+            long   tv_nsec; // nanoseconds -- [0, 999999999]
+    The tm structure shall contain at least the following members, in any order. The
+    semantics of the members and their normal ranges are expressed in the comments.318)
             int    tm_sec;           //   seconds after the minute -- [0, 60]
             int    tm_min;           //   minutes after the hour -- [0, 59]
             int    tm_hour;          //   hours since midnight -- [0, 23]
@@ -15040,19 +15187,12 @@ s             Matches a sequence of non-white-space characters.279)
             int    tm_wday;          //   days since Sunday -- [0, 6]
             int    tm_yday;          //   days since January 1 -- [0, 365]
             int    tm_isdst;         //   Daylight Saving Time flag
-
-
-
-    307) The range [0, 60] for tm_sec allows for a positive leap second.
-
-[page 385] (Contents)
-
     The value of tm_isdst is positive if Daylight Saving Time is in effect, zero if Daylight
     Saving Time is not in effect, and negative if the information is not available.
-    7.26.2 Time manipulation functions
-    7.26.2.1 The clock function
+    7.27.2 Time manipulation functions
+    7.27.2.1 The clock function
     Synopsis
-1           #include <time.h>
+1           #include <time.h>
             clock_t clock(void);
     Description
 2   The clock function determines the processor time used.
@@ -15062,35 +15202,36 @@ s             Matches a sequence of non-white-space characters.279)
     only to the program invocation. To determine the time in seconds, the value returned by
     the clock function should be divided by the value of the macro CLOCKS_PER_SEC. If
     the processor time used is not available or its value cannot be represented, the function
-    returns the value (clock_t)(-1).308)
-    7.26.2.2 The difftime function
-    Synopsis
-1           #include <time.h>
-            double difftime(time_t time1, time_t time0);
-    Description
-2   The difftime function computes the difference between two calendar times: time1 -
-    time0.
-    Returns
-3   The difftime function returns the difference expressed in seconds as a double.
+    returns the value (clock_t)(-1).319)
 
 
 
 
-    308) In order to measure the time spent in a program, the clock function should be called at the start of
+    318) The range [0, 60] for tm_sec allows for a positive leap second.
+    319) In order to measure the time spent in a program, the clock function should be called at the start of
          the program and its return value subtracted from the value returned by subsequent calls.
 
-[page 386] (Contents)
+[page 389] (Contents)
 
-    7.26.2.3 The mktime function
+    7.27.2.2 The difftime function
+    Synopsis
+1           #include <time.h>
+            double difftime(time_t time1, time_t time0);
+    Description
+2   The difftime function computes the difference between two calendar times: time1 -
+    time0.
+    Returns
+3   The difftime function returns the difference expressed in seconds as a double.
+    7.27.2.3 The mktime function
     Synopsis
-1           #include <time.h>
+1           #include <time.h>
             time_t mktime(struct tm *timeptr);
     Description
 2   The mktime function converts the broken-down time, expressed as local time, in the
     structure pointed to by timeptr into a calendar time value with the same encoding as
     that of the values returned by the time function. The original values of the tm_wday
     and tm_yday components of the structure are ignored, and the original values of the
-    other components are not restricted to the ranges indicated above.309) On successful
+    other components are not restricted to the ranges indicated above.320) On successful
     completion, the values of the tm_wday and tm_yday components of the structure are
     set appropriately, and the other components are set to represent the specified calendar
     time, but with their values forced to the ranges indicated above; the final value of
@@ -15100,39 +15241,39 @@ s             Matches a sequence of non-white-space characters.279)
     time_t. If the calendar time cannot be represented, the function returns the value
     (time_t)(-1).
 4   EXAMPLE       What day of the week is July 4, 2001?
-            #include <stdio.h>
-            #include <time.h>
-            static const char *const wday[] = {
-                    "Sunday", "Monday", "Tuesday", "Wednesday",
-                    "Thursday", "Friday", "Saturday", "-unknown-"
-            };
-            struct tm time_str;
-            /* ... */
 
 
 
 
-    309) Thus, a positive or zero value for tm_isdst causes the mktime function to presume initially that
+    320) Thus, a positive or zero value for tm_isdst causes the mktime function to presume initially that
          Daylight Saving Time, respectively, is or is not in effect for the specified time. A negative value
          causes it to attempt to determine whether Daylight Saving Time is in effect for the specified time.
 
-[page 387] (Contents)
-
-           time_str.tm_year   = 2001 - 1900;
-           time_str.tm_mon    = 7 - 1;
-           time_str.tm_mday   = 4;
-           time_str.tm_hour   = 0;
-           time_str.tm_min    = 0;
-           time_str.tm_sec    = 1;
-           time_str.tm_isdst = -1;
-           if (mktime(&time_str) == (time_t)(-1))
-                 time_str.tm_wday = 7;
-           printf("%s\n", wday[time_str.tm_wday]);
+[page 390] (Contents)
 
-    7.26.2.4 The time function
-    Synopsis
-1          #include <time.h>
-           time_t time(time_t *timer);
+            #include <stdio.h>
+            #include <time.h>
+            static const char *const wday[] = {
+                    "Sunday", "Monday", "Tuesday", "Wednesday",
+                    "Thursday", "Friday", "Saturday", "-unknown-"
+            };
+            struct tm time_str;
+            /* ... */
+            time_str.tm_year   = 2001 - 1900;
+            time_str.tm_mon    = 7 - 1;
+            time_str.tm_mday   = 4;
+            time_str.tm_hour   = 0;
+            time_str.tm_min    = 0;
+            time_str.tm_sec    = 1;
+            time_str.tm_isdst = -1;
+            if (mktime(&time_str) == (time_t)(-1))
+                  time_str.tm_wday = 7;
+            printf("%s\n", wday[time_str.tm_wday]);
+
+    7.27.2.4 The time function
+    Synopsis
+1           #include <time.h>
+            time_t time(time_t *timer);
     Description
 2   The time function determines the current calendar time. The encoding of the value is
     unspecified.
@@ -15141,24 +15282,39 @@ s             Matches a sequence of non-white-space characters.279)
     calendar time. The value (time_t)(-1) is returned if the calendar time is not
     available. If timer is not a null pointer, the return value is also assigned to the object it
     points to.
-    7.26.3 Time conversion functions
+    7.27.2.5 The timespec_get function
+    Synopsis
+1           #include <time.h>
+            int timespec_get(struct timespec *ts, int base);
+    Description
+2   The timespec_get function sets the interval pointed to by ts to hold the current
+    calendar time based on the specified time base.
+3   If base is TIME_UTC, the tv_sec member is set to the number of seconds since an
+    implementation defined epoch, truncated to a whole value and the tv_nsec member is
+    set to the integral number of nanoseconds, rounded to the resolution of the system
+
+[page 391] (Contents)
+
+    clock.321)
+    Returns
+4   If the timespec_get function is successful it returns the nonzero value base;
+    otherwise, it returns zero.
+    7.27.3 Time conversion functions
 1   Except for the strftime function, these functions each return a pointer to one of two
     types of static objects: a broken-down time structure or an array of char. Execution of
     any of the functions that return a pointer to one of these object types may overwrite the
     information in any object of the same type pointed to by the value returned from any
-    previous call to any of them and the functions are not required to avoid data races. The
-    implementation shall behave as if no other library functions call these functions.
-    7.26.3.1 The asctime function
+    previous call to any of them and the functions are not required to avoid data races with
+    each other.322) The implementation shall behave as if no other library functions call these
+    functions.
+    7.27.3.1 The asctime function
     Synopsis
-1          #include <time.h>
-           char *asctime(const struct tm *timeptr);
+1            #include <time.h>
+             char *asctime(const struct tm *timeptr);
     Description
 2   The asctime function converts the broken-down time in the structure pointed to by
     timeptr into a string in the form
-           Sun Sep 16 01:03:52 1973\n\0
-
-[page 388] (Contents)
-
+             Sun Sep 16 01:03:52 1973\n\0
     using the equivalent of the following algorithm.
     char *asctime(const struct tm *timeptr)
     {
@@ -15170,6 +15326,15 @@ s             Matches a sequence of non-white-space characters.279)
               "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
          };
          static char result[26];
+
+
+
+    321) Although a struct timespec object describes times with nanosecond resolution, the available
+         resolution is system dependent and may even be greater than 1 second.
+    322) Alternative time conversion functions that do avoid data races are specified in K.3.8.2.
+
+[page 392] (Contents)
+
             sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
                  wday_name[timeptr->tm_wday],
                  mon_name[timeptr->tm_mon],
@@ -15178,44 +15343,45 @@ s             Matches a sequence of non-white-space characters.279)
                  1900 + timeptr->tm_year);
             return result;
     }
-3   If any of the fields of the broken-down time contain values that are outside their normal
-    ranges,310) the behavior of the asctime function is undefined. Likewise, if the
+3   If any of the members of the broken-down time contain values that are outside their
+    normal ranges,323) the behavior of the asctime function is undefined. Likewise, if the
     calculated year exceeds four digits or is less than the year 1000, the behavior is
     undefined.
     Returns
 4   The asctime function returns a pointer to the string.
-    7.26.3.2 The ctime function
+    7.27.3.2 The ctime function
     Synopsis
-1           #include <time.h>
+1           #include <time.h>
             char *ctime(const time_t *timer);
     Description
 2   The ctime function converts the calendar time pointed to by timer to local time in the
     form of a string. It is equivalent to
             asctime(localtime(timer))
+    Returns
+3   The ctime function returns the pointer returned by the asctime function with that
+    broken-down time as argument.
+    Forward references: the localtime function (7.27.3.4).
+    7.27.3.3 The gmtime function
+    Synopsis
+1           #include <time.h>
+            struct tm *gmtime(const time_t *timer);
 
 
 
-    310) See 7.26.1.
 
-[page 389] (Contents)
+    323) See 7.27.1.
+
+[page 393] (Contents)
 
-    Returns
-3   The ctime function returns the pointer returned by the asctime function with that
-    broken-down time as argument.
-    Forward references: the localtime function (7.26.3.4).
-    7.26.3.3 The gmtime function
-    Synopsis
-1          #include <time.h>
-           struct tm *gmtime(const time_t *timer);
     Description
 2   The gmtime function converts the calendar time pointed to by timer into a broken-
     down time, expressed as UTC.
     Returns
 3   The gmtime function returns a pointer to the broken-down time, or a null pointer if the
     specified time cannot be converted to UTC.
-    7.26.3.4 The localtime function
+    7.27.3.4 The localtime function
     Synopsis
-1          #include <time.h>
+1          #include <time.h>
            struct tm *localtime(const time_t *timer);
     Description
 2   The localtime function converts the calendar time pointed to by timer into a
@@ -15223,16 +15389,13 @@ s             Matches a sequence of non-white-space characters.279)
     Returns
 3   The localtime function returns a pointer to the broken-down time, or a null pointer if
     the specified time cannot be converted to local time.
-    7.26.3.5 The strftime function
+    7.27.3.5 The strftime function
     Synopsis
-1          #include <time.h>
+1          #include <time.h>
            size_t strftime(char * restrict s,
                 size_t maxsize,
                 const char * restrict format,
                 const struct tm * restrict timeptr);
-
-[page 390] (Contents)
-
     Description
 2   The strftime function places characters into the array pointed to by s as controlled by
     the string pointed to by format. The format shall be a multibyte character sequence,
@@ -15245,57 +15408,60 @@ s             Matches a sequence of non-white-space characters.279)
     behavior is undefined. No more than maxsize characters are placed into the array.
 3   Each conversion specifier is replaced by appropriate characters as described in the
     following list. The appropriate characters are determined using the LC_TIME category
-    of the current locale and by the values of zero or more members of the broken-down time
-    structure pointed to by timeptr, as specified in brackets in the description. If any of
-    the specified values is outside the normal range, the characters stored are unspecified.
-    %a   is replaced by the locale's abbreviated weekday name. [tm_wday]
-    %A   is replaced by the locale's full weekday name. [tm_wday]
-    %b   is replaced by the locale's abbreviated month name. [tm_mon]
-    %B   is replaced by the locale's full month name. [tm_mon]
-    %c   is replaced by the locale's appropriate date and time representation. [all specified
-         in 7.26.1]
-    %C   is replaced by the year divided by 100 and truncated to an integer, as a decimal
-         number (00-99). [tm_year]
-    %d   is replaced by the day of the month as a decimal number (01-31). [tm_mday]
-    %D   is equivalent to ''%m/%d/%y''. [tm_mon, tm_mday, tm_year]
-    %e   is replaced by the day of the month as a decimal number (1-31); a single digit is
-         preceded by a space. [tm_mday]
-    %F   is equivalent to ''%Y-%m-%d'' (the ISO 8601 date format). [tm_year, tm_mon,
-         tm_mday]
-    %g   is replaced by the last 2 digits of the week-based year (see below) as a decimal
-         number (00-99). [tm_year, tm_wday, tm_yday]
-    %G   is replaced by the week-based year (see below) as a decimal number (e.g., 1997).
-         [tm_year, tm_wday, tm_yday]
-    %h   is equivalent to ''%b''. [tm_mon]
-    %H   is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour]
-    %I   is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour]
-    %j   is replaced by the day of the year as a decimal number (001-366). [tm_yday]
-    %m   is replaced by the month as a decimal number (01-12). [tm_mon]
-    %M   is replaced by the minute as a decimal number (00-59). [tm_min]
-    %n   is replaced by a new-line character.
 
-[page 391] (Contents)
+[page 394] (Contents)
+
+of the current locale and by the values of zero or more members of the broken-down time
+structure pointed to by timeptr, as specified in brackets in the description. If any of
+the specified values is outside the normal range, the characters stored are unspecified.
+%a   is replaced by the locale's abbreviated weekday name. [tm_wday]
+%A   is replaced by the locale's full weekday name. [tm_wday]
+%b   is replaced by the locale's abbreviated month name. [tm_mon]
+%B   is replaced by the locale's full month name. [tm_mon]
+%c   is replaced by the locale's appropriate date and time representation. [all specified
+     in 7.27.1]
+%C   is replaced by the year divided by 100 and truncated to an integer, as a decimal
+     number (00-99). [tm_year]
+%d   is replaced by the day of the month as a decimal number (01-31). [tm_mday]
+%D   is equivalent to ''%m/%d/%y''. [tm_mon, tm_mday, tm_year]
+%e   is replaced by the day of the month as a decimal number (1-31); a single digit is
+     preceded by a space. [tm_mday]
+%F   is equivalent to ''%Y-%m-%d'' (the ISO 8601 date format). [tm_year, tm_mon,
+     tm_mday]
+%g   is replaced by the last 2 digits of the week-based year (see below) as a decimal
+     number (00-99). [tm_year, tm_wday, tm_yday]
+%G   is replaced by the week-based year (see below) as a decimal number (e.g., 1997).
+     [tm_year, tm_wday, tm_yday]
+%h   is equivalent to ''%b''. [tm_mon]
+%H   is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour]
+%I   is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour]
+%j   is replaced by the day of the year as a decimal number (001-366). [tm_yday]
+%m   is replaced by the month as a decimal number (01-12). [tm_mon]
+%M   is replaced by the minute as a decimal number (00-59). [tm_min]
+%n   is replaced by a new-line character.
+%p   is replaced by the locale's equivalent of the AM/PM designations associated with a
+     12-hour clock. [tm_hour]
+%r   is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec]
+%R   is equivalent to ''%H:%M''. [tm_hour, tm_min]
+%S   is replaced by the second as a decimal number (00-60). [tm_sec]
+%t   is replaced by a horizontal-tab character.
+%T   is equivalent to ''%H:%M:%S'' (the ISO 8601 time format). [tm_hour, tm_min,
+     tm_sec]
+%u   is replaced by the ISO 8601 weekday as a decimal number (1-7), where Monday
+     is 1. [tm_wday]
+%U   is replaced by the week number of the year (the first Sunday as the first day of week
+     1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
+%V   is replaced by the ISO 8601 week number (see below) as a decimal number
+
+[page 395] (Contents)
 
-    %p    is replaced by the locale's equivalent of the AM/PM designations associated with a
-          12-hour clock. [tm_hour]
-    %r    is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec]
-    %R    is equivalent to ''%H:%M''. [tm_hour, tm_min]
-    %S    is replaced by the second as a decimal number (00-60). [tm_sec]
-    %t    is replaced by a horizontal-tab character.
-    %T    is equivalent to ''%H:%M:%S'' (the ISO 8601 time format). [tm_hour, tm_min,
-          tm_sec]
-    %u    is replaced by the ISO 8601 weekday as a decimal number (1-7), where Monday
-          is 1. [tm_wday]
-    %U    is replaced by the week number of the year (the first Sunday as the first day of week
-          1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
-    %V    is replaced by the ISO 8601 week number (see below) as a decimal number
           (01-53). [tm_year, tm_wday, tm_yday]
     %w    is replaced by the weekday as a decimal number (0-6), where Sunday is 0.
           [tm_wday]
     %W    is replaced by the week number of the year (the first Monday as the first day of
           week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
-    %x    is replaced by the locale's appropriate date representation. [all specified in 7.26.1]
-    %X    is replaced by the locale's appropriate time representation. [all specified in 7.26.1]
+    %x    is replaced by the locale's appropriate date representation. [all specified in 7.27.1]
+    %X    is replaced by the locale's appropriate time representation. [all specified in 7.27.1]
     %y    is replaced by the last 2 digits of the year as a decimal number (00-99).
           [tm_year]
     %Y    is replaced by the year as a decimal number (e.g., 1997). [tm_year]
@@ -15316,9 +15482,6 @@ s             Matches a sequence of non-white-space characters.279)
     %Ey is replaced by the offset from %EC (year only) in the locale's alternative
         representation.
     %EY is replaced by the locale's full alternative year representation.
-
-[page 392] (Contents)
-
     %Od is replaced by the day of the month, using the locale's alternative numeric symbols
         (filled as needed with leading zeros, or with leading spaces if there is no alternative
         symbol for zero).
@@ -15332,6 +15495,9 @@ s             Matches a sequence of non-white-space characters.279)
     %OM is replaced by the minutes, using the locale's alternative numeric symbols.
     %OS is replaced by the seconds, using the locale's alternative numeric symbols.
     %Ou is replaced by the ISO 8601 weekday as a number in the locale's alternative
+
+[page 396] (Contents)
+
         representation, where Monday is 1.
     %OU is replaced by the week number, using the locale's alternative numeric symbols.
     %OV is replaced by the ISO 8601 week number, using the locale's alternative numeric
@@ -15354,14 +15520,11 @@ s             Matches a sequence of non-white-space characters.279)
 6   If a conversion specifier is not one of the above, the behavior is undefined.
 7   In the "C" locale, the E and O modifiers are ignored and the replacement strings for the
     following specifiers are:
-    %a the first three characters of %A.
-    %A one of ''Sunday'', ''Monday'', ... , ''Saturday''.
-    %b the first three characters of %B.
-    %B one of ''January'', ''February'', ... , ''December''.
-    %c equivalent to ''%a %b %e %T %Y''.
-
-[page 393] (Contents)
-
+    %a    the first three characters of %A.
+    %A    one of ''Sunday'', ''Monday'', ... , ''Saturday''.
+    %b    the first three characters of %B.
+    %B    one of ''January'', ''February'', ... , ''December''.
+    %c    equivalent to ''%a %b %e %T %Y''.
     %p    one of ''AM'' or ''PM''.
     %r    equivalent to ''%I:%M:%S %p''.
     %x    equivalent to ''%m/%d/%y''.
@@ -15373,33 +15536,33 @@ s             Matches a sequence of non-white-space characters.279)
     into the array pointed to by s not including the terminating null character. Otherwise,
     zero is returned and the contents of the array are indeterminate.
 
-[page 394] (Contents)
+[page 397] (Contents)
 
-    7.27 Unicode utilities <uchar.h>
-1   The header <uchar.h> declares types and functions for manipulating Unicode
+    7.28 Unicode utilities <uchar.h>
+1   The header <uchar.h> declares types and functions for manipulating Unicode
     characters.
-2   The types declared are mbstate_t (described in 7.29.1) and size_t (described in
+2   The types declared are mbstate_t (described in 7.30.1) and size_t (described in
     7.19);
-            char16_t
+           char16_t
     which is an unsigned integer type used for 16-bit characters and is the same type as
     uint_least16_t (described in 7.20.1.2); and
-            char32_t
+           char32_t
     which is an unsigned integer type used for 32-bit characters and is the same type as
     uint_least32_t (also described in 7.20.1.2).
-    7.27.1 Restartable multibyte/wide character conversion functions
+    7.28.1 Restartable multibyte/wide character conversion functions
 1   These functions have a parameter, ps, of type pointer to mbstate_t that points to an
     object that can completely describe the current conversion state of the associated
     multibyte character sequence, which the functions alter as necessary. If ps is a null
     pointer, each function uses its own internal mbstate_t object instead, which is
     initialized at program startup to the initial conversion state; the functions are not required
-    to avoid data races in this case. The implementation behaves as if no library function
-    calls these functions with a null pointer for ps.
-    7.27.1.1 The mbrtoc16 function
+    to avoid data races with other calls to the same function in this case. The implementation
+    behaves as if no library function calls these functions with a null pointer for ps.
+    7.28.1.1 The mbrtoc16 function
     Synopsis
-1           #include <uchar.h>
-            size_t mbrtoc16(char16_t * restrict pc16,
-                 const char * restrict s, size_t n,
-                 mbstate_t * restrict ps);
+1          #include <uchar.h>
+           size_t mbrtoc16(char16_t * restrict pc16,
+                const char * restrict s, size_t n,
+                mbstate_t * restrict ps);
     Description
 2   If s is a null pointer, the mbrtoc16 function is equivalent to the call:
                    mbrtoc16(NULL, "", 1, ps)
@@ -15411,7 +15574,7 @@ s             Matches a sequence of non-white-space characters.279)
     corresponding wide characters and then, if pc16 is not a null pointer, stores the value of
     the first (or only) such character in the object pointed to by pc16. Subsequent calls will
 
-[page 395] (Contents)
+[page 398] (Contents)
 
     store successive wide characters without consuming any additional input until all the
     characters have been stored. If the corresponding wide character is the null wide
@@ -15428,14 +15591,14 @@ s             Matches a sequence of non-white-space characters.279)
                  bytes from the input have been consumed by this call).
     (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
                  multibyte character, and all n bytes have been processed (no value is
-                 stored).311)
+                 stored).324)
     (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
                  do not contribute to a complete and valid multibyte character (no
                  value is stored); the value of the macro EILSEQ is stored in errno,
                  and the conversion state is unspecified.
-    7.27.1.2 The c16rtomb function
+    7.28.1.2 The c16rtomb function
     Synopsis
-1           #include <uchar.h>
+1           #include <uchar.h>
             size_t c16rtomb(char * restrict s, char16_t c16,
                  mbstate_t * restrict ps);
     Description
@@ -15446,11 +15609,10 @@ s             Matches a sequence of non-white-space characters.279)
     to represent the multibyte character that corresponds to the wide character given by c16
     (including any shift sequences), and stores the multibyte character representation in the
 
-
-    311) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
+    324) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
          sequence of redundant shift sequences (for implementations with state-dependent encodings).
 
-[page 396] (Contents)
+[page 399] (Contents)
 
     array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
     c16 is a null wide character, a null byte is stored, preceded by any shift sequence needed
@@ -15460,9 +15622,9 @@ s             Matches a sequence of non-white-space characters.279)
     any shift sequences). When c16 is not a valid wide character, an encoding error occurs:
     the function stores the value of the macro EILSEQ in errno and returns
     (size_t)(-1); the conversion state is unspecified.
-    7.27.1.3 The mbrtoc32 function
+    7.28.1.3 The mbrtoc32 function
     Synopsis
-1           #include <uchar.h>
+1           #include <uchar.h>
             size_t mbrtoc32(char32_t * restrict pc32,
                  const char * restrict s, size_t n,
                  mbstate_t * restrict ps);
@@ -15488,20 +15650,20 @@ s             Matches a sequence of non-white-space characters.279)
                        character (which is the value stored); the value returned is the number
                        of bytes that complete the multibyte character.
 
-[page 397] (Contents)
+[page 400] (Contents)
 
     (size_t)(-3) if the next character resulting from a previous call has been stored (no
                  bytes from the input have been consumed by this call).
     (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
                  multibyte character, and all n bytes have been processed (no value is
-                 stored).312)
+                 stored).325)
     (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
                  do not contribute to a complete and valid multibyte character (no
                  value is stored); the value of the macro EILSEQ is stored in errno,
                  and the conversion state is unspecified.
-    7.27.1.4 The c32rtomb function
+    7.28.1.4 The c32rtomb function
     Synopsis
-1           #include <uchar.h>
+1           #include <uchar.h>
             size_t c32rtomb(char * restrict s, char32_t c32,
                  mbstate_t * restrict ps);
     Description
@@ -15523,17 +15685,17 @@ s             Matches a sequence of non-white-space characters.279)
 
 
 
-    312) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
+    325) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
          sequence of redundant shift sequences (for implementations with state-dependent encodings).
 
-[page 398] (Contents)
+[page 401] (Contents)
 
-    7.28 Extended multibyte and wide character utilities <wchar.h>
-    7.28.1 Introduction
-1   The header <wchar.h> defines four macros, and declares four data types, one tag, and
-    many functions.313)
+    7.29 Extended multibyte and wide character utilities <wchar.h>
+    7.29.1 Introduction
+1   The header <wchar.h> defines four macros, and declares four data types, one tag, and
+    many functions.326)
 2   The types declared are wchar_t and size_t (both described in 7.19);
-              mbstate_t
+             mbstate_t
     which is a complete object type other than an array type that can hold the conversion state
     information necessary to convert between sequences of multibyte characters and wide
     characters;
@@ -15541,14 +15703,14 @@ s             Matches a sequence of non-white-space characters.279)
     which is an integer type unchanged by default argument promotions that can hold any
     value corresponding to members of the extended character set, as well as at least one
     value that does not correspond to any member of the extended character set (see WEOF
-    below);314) and
+    below);327) and
              struct tm
-    which is declared as an incomplete structure type (the contents are described in 7.26.1).
+    which is declared as an incomplete structure type (the contents are described in 7.27.1).
 3   The macros defined are NULL (described in 7.19); WCHAR_MIN and WCHAR_MAX
     (described in 7.20.3); and
              WEOF
     which expands to a constant expression of type wint_t whose value does not
-    correspond to any member of the extended character set.315) It is accepted (and returned)
+    correspond to any member of the extended character set.328) It is accepted (and returned)
     by several functions in this subclause to indicate end-of-file, that is, no more input from a
     stream. It is also used as a wide character value that does not correspond to any member
     of the extended character set.
@@ -15559,25 +15721,31 @@ s             Matches a sequence of non-white-space characters.279)
     -- Functions that perform general wide string manipulation;
 
 
-    313) See ''future library directions'' (7.30.12).
-    314) wchar_t and wint_t can be the same integer type.
-    315) The value of the macro WEOF may differ from that of EOF and need not be negative.
+    326) See ''future library directions'' (7.31.16).
+    327) wchar_t and wint_t can be the same integer type.
+    328) The value of the macro WEOF may differ from that of EOF and need not be negative.
 
-[page 399] (Contents)
+[page 402] (Contents)
 
     -- Functions for wide string date and time conversion; and
     -- Functions that provide extended capabilities for conversion between multibyte and
       wide character sequences.
-5   Unless explicitly stated otherwise, if the execution of a function described in this
+5   Arguments to the functions in this subclause may point to arrays containing wchar_t
+    values that do not correspond to members of the extended character set. Such values
+    shall be processed according to the specified semantics, except that it is unspecified
+    whether an encoding error occurs if such a value appears in the format string for a
+    function in 7.29.2 or 7.29.5 and the specified semantics do not require that value to be
+    processed by wcrtomb.
+6   Unless explicitly stated otherwise, if the execution of a function described in this
     subclause causes copying to take place between objects that overlap, the behavior is
     undefined.
-    7.28.2 Formatted wide character input/output functions
+    7.29.2 Formatted wide character input/output functions
 1   The formatted wide character input/output functions shall behave as if there is a sequence
-    point after the actions associated with each specifier.316)
-    7.28.2.1 The fwprintf function
+    point after the actions associated with each specifier.329)
+    7.29.2.1 The fwprintf function
     Synopsis
 1           #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int fwprintf(FILE * restrict stream,
                  const wchar_t * restrict format, ...);
     Description
@@ -15592,21 +15760,22 @@ s             Matches a sequence of non-white-space characters.279)
     which results in fetching zero or more subsequent arguments, converting them, if
     applicable, according to the corresponding conversion specifier, and then writing the
     result to the output stream.
+
+
+
+    329) The fwprintf functions perform writes to memory for the %n specifier.
+
+[page 403] (Contents)
+
 4   Each conversion specification is introduced by the wide character %. After the %, the
     following appear in sequence:
     -- Zero or more flags (in any order) that modify the meaning of the conversion
       specification.
     -- An optional minimum field width. If the converted value has fewer wide characters
       than the field width, it is padded with spaces (by default) on the left (or right, if the
-
-
-    316) The fwprintf functions perform writes to memory for the %n specifier.
-
-[page 400] (Contents)
-
-        left adjustment flag, described later, has been given) to the field width. The field
-        width takes the form of an asterisk * (described later) or a nonnegative decimal
-        integer.317)
+      left adjustment flag, described later, has been given) to the field width. The field
+      width takes the form of an asterisk * (described later) or a nonnegative decimal
+      integer.330)
     -- An optional precision that gives the minimum number of digits to appear for the d, i,
       o, u, x, and X conversions, the number of digits to appear after the decimal-point
       wide character for a, A, e, E, f, and F conversions, the maximum number of
@@ -15629,22 +15798,22 @@ s             Matches a sequence of non-white-space characters.279)
              this flag is not specified.)
     +        The result of a signed conversion always begins with a plus or minus sign. (It
              begins with a sign only when a negative value is converted if this flag is not
-             specified.)318)
-    space If the first wide character of a signed conversion is not a sign, or if a signed
-          conversion results in no wide characters, a space is prefixed to the result. If the
-          space and + flags both appear, the space flag is ignored.
-    #        The result is converted to an ''alternative form''. For o conversion, it increases
-             the precision, if and only if necessary, to force the first digit of the result to be a
-             zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
-             conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,
 
 
-    317) Note that 0 is taken as a flag, not as the beginning of a field width.
-    318) The results of all floating conversions of a negative zero, and of negative values that round to zero,
-         include a minus sign.
 
-[page 401] (Contents)
 
+    330) Note that 0 is taken as a flag, not as the beginning of a field width.
+
+[page 404] (Contents)
+
+              specified.)331)
+    space If the first wide character of a signed conversion is not a sign, or if a signed
+          conversion results in no wide characters, a space is prefixed to the result. If the
+          space and + flags both appear, the space flag is ignored.
+    #         The result is converted to an ''alternative form''. For o conversion, it increases
+              the precision, if and only if necessary, to force the first digit of the result to be a
+              zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
+              conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,
               and G conversions, the result of converting a floating-point number always
               contains a decimal-point wide character, even if no digits follow it. (Normally, a
               decimal-point wide character appears in the result of these conversions only if a
@@ -15672,20 +15841,24 @@ s             Matches a sequence of non-white-space characters.279)
     l (ell)        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
                    long int or unsigned long int argument; that a following n
                    conversion specifier applies to a pointer to a long int argument; that a
-                   following c conversion specifier applies to a wint_t argument; that a
-                   following s conversion specifier applies to a pointer to a wchar_t
-                   argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
-                   specifier.
+
+
+    331) The results of all floating conversions of a negative zero, and of negative values that round to zero,
+         include a minus sign.
+
+[page 405] (Contents)
+
+                 following c conversion specifier applies to a wint_t argument; that a
+                 following s conversion specifier applies to a pointer to a wchar_t
+                 argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
+                 specifier.
     ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
                  long long int or unsigned long long int argument; or that a
                  following n conversion specifier applies to a pointer to a long long int
                  argument.
-    j              Specifies that a following d, i, o, u, x, or X conversion specifier applies to
-                   an intmax_t or uintmax_t argument; or that a following n conversion
-                   specifier applies to a pointer to an intmax_t argument.
-
-[page 402] (Contents)
-
+    j            Specifies that a following d, i, o, u, x, or X conversion specifier applies to
+                 an intmax_t or uintmax_t argument; or that a following n conversion
+                 specifier applies to a pointer to an intmax_t argument.
     z            Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
                  size_t or the corresponding signed integer type argument; or that a
                  following n conversion specifier applies to a pointer to a signed integer type
@@ -15711,23 +15884,23 @@ s             Matches a sequence of non-white-space characters.279)
             if the value being converted can be represented in fewer digits, it is expanded
             with leading zeros. The default precision is 1. The result of converting a
             zero value with a precision of zero is no wide characters.
-    f,F         A double argument representing a floating-point number is converted to
-                decimal notation in the style [-]ddd.ddd, where the number of digits after
-                the decimal-point wide character is equal to the precision specification. If the
-                precision is missing, it is taken as 6; if the precision is zero and the # flag is
-                not specified, no decimal-point wide character appears. If a decimal-point
-                wide character appears, at least one digit appears before it. The value is
-                rounded to the appropriate number of digits.
-                A double argument representing an infinity is converted in one of the styles
-                [-]inf or [-]infinity -- which style is implementation-defined. A
-                double argument representing a NaN is converted in one of the styles
-                [-]nan or [-]nan(n-wchar-sequence) -- which style, and the meaning of
-                any n-wchar-sequence, is implementation-defined. The F conversion
-                specifier produces INF, INFINITY, or NAN instead of inf, infinity, or
 
-[page 403] (Contents)
+[page 406] (Contents)
 
-             nan, respectively.319)
+f,F          A double argument representing a floating-point number is converted to
+             decimal notation in the style [-]ddd.ddd, where the number of digits after
+             the decimal-point wide character is equal to the precision specification. If the
+             precision is missing, it is taken as 6; if the precision is zero and the # flag is
+             not specified, no decimal-point wide character appears. If a decimal-point
+             wide character appears, at least one digit appears before it. The value is
+             rounded to the appropriate number of digits.
+             A double argument representing an infinity is converted in one of the styles
+             [-]inf or [-]infinity -- which style is implementation-defined. A
+             double argument representing a NaN is converted in one of the styles
+             [-]nan or [-]nan(n-wchar-sequence) -- which style, and the meaning of
+             any n-wchar-sequence, is implementation-defined. The F conversion
+             specifier produces INF, INFINITY, or NAN instead of inf, infinity, or
+             nan, respectively.332)
 e,E          A double argument representing a floating-point number is converted in the
              style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
              argument is nonzero) before the decimal-point wide character and the number
@@ -15749,6 +15922,13 @@ g,G          A double argument representing a floating-point number is converted
                P - (X + 1).
              -- otherwise, the conversion is with style e (or E) and precision P - 1.
              Finally, unless the # flag is used, any trailing zeros are removed from the
+
+
+332) When applied to infinite and NaN values, the -, +, and space flag wide characters have their usual
+     meaning; the # and 0 flag wide characters have no effect.
+
+[page 407] (Contents)
+
              fractional portion of the result and the decimal-point wide character is
              removed if there is no fractional portion remaining.
              A double argument representing an infinity or NaN is converted in the style
@@ -15756,21 +15936,12 @@ g,G          A double argument representing a floating-point number is converted
 a,A          A double argument representing a floating-point number is converted in the
              style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
              nonzero if the argument is a normalized floating-point number and is
-             otherwise unspecified) before the decimal-point wide character320) and the
+             otherwise unspecified) before the decimal-point wide character333) and the
              number of hexadecimal digits after it is equal to the precision; if the precision
              is missing and FLT_RADIX is a power of 2, then the precision is sufficient
-
-
-319) When applied to infinite and NaN values, the -, +, and space flag wide characters have their usual
-     meaning; the # and 0 flag wide characters have no effect.
-320) Binary implementations can choose the hexadecimal digit to the left of the decimal-point wide
-     character so that subsequent digits align to nibble (4-bit) boundaries.
-
-[page 404] (Contents)
-
              for an exact representation of the value; if the precision is missing and
              FLT_RADIX is not a power of 2, then the precision is sufficient to
-             distinguish321) values of type double, except that trailing zeros may be
+             distinguish334) values of type double, except that trailing zeros may be
              omitted; if the precision is zero and the # flag is not specified, no decimal-
              point wide character appears. The letters abcdef are used for a conversion
              and the letters ABCDEF for A conversion. The A conversion specifier
@@ -15790,26 +15961,28 @@ s            If no l length modifier is present, the argument shall be a pointer
              if by repeated calls to the mbrtowc function, with the conversion state
              described by an mbstate_t object initialized to zero before the first
              multibyte character is converted, and written up to (but not including) the
-             terminating null wide character. If the precision is specified, no more than
-             that many wide characters are written. If the precision is not specified or is
-             greater than the size of the converted array, the converted array shall contain a
-             null wide character.
-             If an l length modifier is present, the argument shall be a pointer to the initial
-             element of an array of wchar_t type. Wide characters from the array are
-             written up to (but not including) a terminating null wide character. If the
-             precision is specified, no more than that many wide characters are written. If
-             the precision is not specified or is greater than the size of the array, the array
-             shall contain a null wide character.
-p            The argument shall be a pointer to void. The value of the pointer is
-             converted to a sequence of printing wide characters, in an implementation-
-
-321) The precision p is sufficient to distinguish values of the source type if 16 p-1 > b n where b is
+
+333) Binary implementations can choose the hexadecimal digit to the left of the decimal-point wide
+     character so that subsequent digits align to nibble (4-bit) boundaries.
+334) The precision p is sufficient to distinguish values of the source type if 16 p-1 > b n where b is
      FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
      might suffice depending on the implementation's scheme for determining the digit to the left of the
      decimal-point wide character.
 
-[page 405] (Contents)
+[page 408] (Contents)
 
+                    terminating null wide character. If the precision is specified, no more than
+                    that many wide characters are written. If the precision is not specified or is
+                    greater than the size of the converted array, the converted array shall contain a
+                    null wide character.
+                    If an l length modifier is present, the argument shall be a pointer to the initial
+                    element of an array of wchar_t type. Wide characters from the array are
+                    written up to (but not including) a terminating null wide character. If the
+                    precision is specified, no more than that many wide characters are written. If
+                    the precision is not specified or is greater than the size of the array, the array
+                    shall contain a null wide character.
+     p              The argument shall be a pointer to void. The value of the pointer is
+                    converted to a sequence of printing wide characters, in an implementation-
                     defined manner.
      n              The argument shall be a pointer to signed integer into which is written the
                     number of wide characters written to the output stream so far by this call to
@@ -15818,7 +15991,7 @@ p            The argument shall be a pointer to void. The value of the pointer i
                     behavior is undefined.
      %              A % wide character is written. No argument is converted. The complete
                     conversion specification shall be %%.
-9    If a conversion specification is invalid, the behavior is undefined.322) If any argument is
+9    If a conversion specification is invalid, the behavior is undefined.335) If any argument is
      not the correct type for the corresponding conversion specification, the behavior is
      undefined.
 10   In no case does a nonexistent or small field width cause truncation of a field; if the result
@@ -15832,7 +16005,12 @@ p            The argument shall be a pointer to void. The value of the pointer i
      in hexadecimal floating style with the given precision, with the extra stipulation that the
      error should have a correct sign for the current rounding direction.
 13   For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
-     DECIMAL_DIG, then the result should be correctly rounded.323) If the number of
+     DECIMAL_DIG, then the result should be correctly rounded.336) If the number of
+
+     335) See ''future library directions'' (7.31.16).
+
+[page 409] (Contents)
+
      significant decimal digits is more than DECIMAL_DIG but the source value is exactly
      representable with DECIMAL_DIG digits, then the result should be an exact
      representation with trailing zeros. Otherwise, the source value is bounded by two
@@ -15842,14 +16020,6 @@ p            The argument shall be a pointer to void. The value of the pointer i
      Returns
 14   The fwprintf function returns the number of wide characters transmitted, or a negative
      value if an output or encoding error occurred.
-
-     322) See ''future library directions'' (7.30.12).
-     323) For binary-to-decimal conversion, the result format's values are the numbers representable with the
-          given format specifier. The number of significant digits is determined by the format specifier, and in
-          the case of fixed-point conversion by the source value as well.
-
-[page 406] (Contents)
-
      Environmental limits
 15   The number of wide characters that can be produced by any single conversion shall be at
      least 4095.
@@ -15857,7 +16027,7 @@ p            The argument shall be a pointer to void. The value of the pointer i
      places:
              #include <math.h>
              #include <stdio.h>
-             #include <wchar.h>
+             #include <wchar.h>
              /* ... */
              wchar_t *weekday, *month; // pointers to wide strings
              int day, hour, min;
@@ -15865,56 +16035,66 @@ p            The argument shall be a pointer to void. The value of the pointer i
                      weekday, month, day, hour, min);
              fwprintf(stdout, L"pi = %.5f\n", 4 * atan(1.0));
 
-     Forward references:          the btowc function (7.28.6.1.1), the mbrtowc function
-     (7.28.6.3.2).
-     7.28.2.2 The fwscanf function
+     Forward references:          the btowc function (7.29.6.1.1), the mbrtowc function
+     (7.29.6.3.2).
+     7.29.2.2 The fwscanf function
      Synopsis
 1            #include <stdio.h>
-             #include <wchar.h>
+             #include <wchar.h>
              int fwscanf(FILE * restrict stream,
                   const wchar_t * restrict format, ...);
      Description
 2    The fwscanf function reads input from the stream pointed to by stream, under
      control of the wide string pointed to by format that specifies the admissible input
      sequences and how they are to be converted for assignment, using subsequent arguments
-     as pointers to the objects to receive the converted input. If there are insufficient
-     arguments for the format, the behavior is undefined. If the format is exhausted while
-     arguments remain, the excess arguments are evaluated (as always) but are otherwise
-     ignored.
-3    The format is composed of zero or more directives: one or more white-space wide
-     characters, an ordinary wide character (neither % nor a white-space wide character), or a
-     conversion specification. Each conversion specification is introduced by the wide
-     character %. After the %, the following appear in sequence:
-     -- An optional assignment-suppressing wide character *.
-     -- An optional decimal integer greater than zero that specifies the maximum field width
-       (in wide characters).
 
-[page 407] (Contents)
+     336) For binary-to-decimal conversion, the result format's values are the numbers representable with the
+          given format specifier. The number of significant digits is determined by the format specifier, and in
+          the case of fixed-point conversion by the source value as well.
 
-     -- An optional length modifier that specifies the size of the receiving object.
-     -- A conversion specifier wide character that specifies the type of conversion to be
-       applied.
-4    The fwscanf function executes each directive of the format in turn. When all directives
-     have been executed, or if a directive fails (as detailed below), the function returns.
-     Failures are described as input failures (due to the occurrence of an encoding error or the
-     unavailability of input characters), or matching failures (due to inappropriate input).
-5    A directive composed of white-space wide character(s) is executed by reading input up to
-     the first non-white-space wide character (which remains unread), or until no more wide
-     characters can be read.
-6    A directive that is an ordinary wide character is executed by reading the next wide
-     character of the stream. If that wide character differs from the directive, the directive
-     fails and the differing and subsequent wide characters remain unread. Similarly, if end-
-     of-file, an encoding error, or a read error prevents a wide character from being read, the
-     directive fails.
-7    A directive that is a conversion specification defines a set of matching input sequences, as
-     described below for each specifier. A conversion specification is executed in the
-     following steps:
-8    Input white-space wide characters (as specified by the iswspace function) are skipped,
-     unless the specification includes a [, c, or n specifier.324)
-9    An input item is read from the stream, unless the specification includes an n specifier. An
-     input item is defined as the longest sequence of input wide characters which does not
-     exceed any specified field width and which is, or is a prefix of, a matching input
-     sequence.325) The first wide character, if any, after the input item remains unread. If the
+[page 410] (Contents)
+
+    as pointers to the objects to receive the converted input. If there are insufficient
+    arguments for the format, the behavior is undefined. If the format is exhausted while
+    arguments remain, the excess arguments are evaluated (as always) but are otherwise
+    ignored.
+3   The format is composed of zero or more directives: one or more white-space wide
+    characters, an ordinary wide character (neither % nor a white-space wide character), or a
+    conversion specification. Each conversion specification is introduced by the wide
+    character %. After the %, the following appear in sequence:
+    -- An optional assignment-suppressing wide character *.
+    -- An optional decimal integer greater than zero that specifies the maximum field width
+      (in wide characters).
+    -- An optional length modifier that specifies the size of the receiving object.
+    -- A conversion specifier wide character that specifies the type of conversion to be
+      applied.
+4   The fwscanf function executes each directive of the format in turn. When all directives
+    have been executed, or if a directive fails (as detailed below), the function returns.
+    Failures are described as input failures (due to the occurrence of an encoding error or the
+    unavailability of input characters), or matching failures (due to inappropriate input).
+5   A directive composed of white-space wide character(s) is executed by reading input up to
+    the first non-white-space wide character (which remains unread), or until no more wide
+    characters can be read. The directive never fails.
+6   A directive that is an ordinary wide character is executed by reading the next wide
+    character of the stream. If that wide character differs from the directive, the directive
+    fails and the differing and subsequent wide characters remain unread. Similarly, if end-
+    of-file, an encoding error, or a read error prevents a wide character from being read, the
+    directive fails.
+7   A directive that is a conversion specification defines a set of matching input sequences, as
+    described below for each specifier. A conversion specification is executed in the
+    following steps:
+8   Input white-space wide characters (as specified by the iswspace function) are skipped,
+    unless the specification includes a [, c, or n specifier.337)
+9   An input item is read from the stream, unless the specification includes an n specifier. An
+    input item is defined as the longest sequence of input wide characters which does not
+    exceed any specified field width and which is, or is a prefix of, a matching input
+
+
+    337) These white-space wide characters are not counted against a specified field width.
+
+[page 411] (Contents)
+
+     sequence.338) The first wide character, if any, after the input item remains unread. If the
      length of the input item is zero, the execution of the directive fails; this condition is a
      matching failure unless end-of-file, an encoding error, or a read error prevented input
      from the stream, in which case it is an input failure.
@@ -15924,14 +16104,6 @@ p            The argument shall be a pointer to void. The value of the pointer i
      this condition is a matching failure. Unless assignment suppression was indicated by a *,
      the result of the conversion is placed in the object pointed to by the first argument
      following the format argument that has not already received a conversion result. If this
-
-
-     324) These white-space wide characters are not counted against a specified field width.
-     325) fwscanf pushes back at most one input wide character onto the input stream. Therefore, some
-          sequences that are acceptable to wcstod, wcstol, etc., are unacceptable to fwscanf.
-
-[page 408] (Contents)
-
      object does not have an appropriate type, or if the result of the conversion cannot be
      represented in the object, the behavior is undefined.
 11   The length modifiers and their meanings are:
@@ -15956,6 +16128,13 @@ p            The argument shall be a pointer to void. The value of the pointer i
      t            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
                   to an argument with type pointer to ptrdiff_t or the corresponding
                   unsigned integer type.
+
+
+     338) fwscanf pushes back at most one input wide character onto the input stream. Therefore, some
+          sequences that are acceptable to wcstod, wcstol, etc., are unacceptable to fwscanf.
+
+[page 412] (Contents)
+
      L            Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
                   applies to an argument with type pointer to long double.
      If a length modifier appears with any conversion specifier other than as specified above,
@@ -15968,97 +16147,94 @@ p            The argument shall be a pointer to void. The value of the pointer i
      i           Matches an optionally signed integer, whose format is the same as expected
                  for the subject sequence of the wcstol function with the value 0 for the
                  base argument. The corresponding argument shall be a pointer to signed
+                 integer.
+     o           Matches an optionally signed octal integer, whose format is the same as
+                 expected for the subject sequence of the wcstoul function with the value 8
+                 for the base argument. The corresponding argument shall be a pointer to
+                 unsigned integer.
+     u           Matches an optionally signed decimal integer, whose format is the same as
+                 expected for the subject sequence of the wcstoul function with the value 10
+                 for the base argument. The corresponding argument shall be a pointer to
+                 unsigned integer.
+     x           Matches an optionally signed hexadecimal integer, whose format is the same
+                 as expected for the subject sequence of the wcstoul function with the value
+                 16 for the base argument. The corresponding argument shall be a pointer to
+                 unsigned integer.
+     a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
+             format is the same as expected for the subject sequence of the wcstod
+             function. The corresponding argument shall be a pointer to floating.
+     c           Matches a sequence of wide characters of exactly the number specified by the
+                 field width (1 if no field width is present in the directive).
+                 If no l length modifier is present, characters from the input field are
+                 converted as if by repeated calls to the wcrtomb function, with the
+                 conversion state described by an mbstate_t object initialized to zero
+                 before the first wide character is converted. The corresponding argument
+                 shall be a pointer to the initial element of a character array large enough to
+                 accept the sequence. No null character is added.
+                 If an l length modifier is present, the corresponding argument shall be a
 
-[page 409] (Contents)
-
-          integer.
-o         Matches an optionally signed octal integer, whose format is the same as
-          expected for the subject sequence of the wcstoul function with the value 8
-          for the base argument. The corresponding argument shall be a pointer to
-          unsigned integer.
-u         Matches an optionally signed decimal integer, whose format is the same as
-          expected for the subject sequence of the wcstoul function with the value 10
-          for the base argument. The corresponding argument shall be a pointer to
-          unsigned integer.
-x         Matches an optionally signed hexadecimal integer, whose format is the same
-          as expected for the subject sequence of the wcstoul function with the value
-          16 for the base argument. The corresponding argument shall be a pointer to
-          unsigned integer.
-a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
-        format is the same as expected for the subject sequence of the wcstod
-        function. The corresponding argument shall be a pointer to floating.
-c         Matches a sequence of wide characters of exactly the number specified by the
-          field width (1 if no field width is present in the directive).
-          If no l length modifier is present, characters from the input field are
-          converted as if by repeated calls to the wcrtomb function, with the
-          conversion state described by an mbstate_t object initialized to zero
-          before the first wide character is converted. The corresponding argument
-          shall be a pointer to the initial element of a character array large enough to
-          accept the sequence. No null character is added.
-          If an l length modifier is present, the corresponding argument shall be a
-          pointer to the initial element of an array of wchar_t large enough to accept
-          the sequence. No null wide character is added.
-s         Matches a sequence of non-white-space wide characters.
-          If no l length modifier is present, characters from the input field are
-          converted as if by repeated calls to the wcrtomb function, with the
-          conversion state described by an mbstate_t object initialized to zero
-          before the first wide character is converted. The corresponding argument
-          shall be a pointer to the initial element of a character array large enough to
-          accept the sequence and a terminating null character, which will be added
-          automatically.
-          If an l length modifier is present, the corresponding argument shall be a
-          pointer to the initial element of an array of wchar_t large enough to accept
-
-[page 410] (Contents)
+[page 413] (Contents)
 
-            the sequence and the terminating null wide character, which will be added
-            automatically.
-[           Matches a nonempty sequence of wide characters from a set of expected
-            characters (the scanset).
-            If no l length modifier is present, characters from the input field are
-            converted as if by repeated calls to the wcrtomb function, with the
-            conversion state described by an mbstate_t object initialized to zero
-            before the first wide character is converted. The corresponding argument
-            shall be a pointer to the initial element of a character array large enough to
-            accept the sequence and a terminating null character, which will be added
-            automatically.
-            If an l length modifier is present, the corresponding argument shall be a
-            pointer to the initial element of an array of wchar_t large enough to accept
-            the sequence and the terminating null wide character, which will be added
-            automatically.
-            The conversion specifier includes all subsequent wide characters in the
-            format string, up to and including the matching right bracket (]). The wide
-            characters between the brackets (the scanlist) compose the scanset, unless the
-            wide character after the left bracket is a circumflex (^), in which case the
-            scanset contains all wide characters that do not appear in the scanlist between
-            the circumflex and the right bracket. If the conversion specifier begins with
-            [] or [^], the right bracket wide character is in the scanlist and the next
-            following right bracket wide character is the matching right bracket that ends
-            the specification; otherwise the first following right bracket wide character is
-            the one that ends the specification. If a - wide character is in the scanlist and
-            is not the first, nor the second where the first wide character is a ^, nor the
-            last character, the behavior is implementation-defined.
-p           Matches an implementation-defined set of sequences, which should be the
-            same as the set of sequences that may be produced by the %p conversion of
-            the fwprintf function. The corresponding argument shall be a pointer to a
-            pointer to void. The input item is converted to a pointer value in an
-            implementation-defined manner. If the input item is a value converted earlier
-            during the same program execution, the pointer that results shall compare
-            equal to that value; otherwise the behavior of the %p conversion is undefined.
-n           No input is consumed. The corresponding argument shall be a pointer to
-            signed integer into which is to be written the number of wide characters read
-            from the input stream so far by this call to the fwscanf function. Execution
-            of a %n directive does not increment the assignment count returned at the
-            completion of execution of the fwscanf function. No argument is
+         pointer to the initial element of an array of wchar_t large enough to accept
+         the sequence. No null wide character is added.
+s        Matches a sequence of non-white-space wide characters.
+         If no l length modifier is present, characters from the input field are
+         converted as if by repeated calls to the wcrtomb function, with the
+         conversion state described by an mbstate_t object initialized to zero
+         before the first wide character is converted. The corresponding argument
+         shall be a pointer to the initial element of a character array large enough to
+         accept the sequence and a terminating null character, which will be added
+         automatically.
+         If an l length modifier is present, the corresponding argument shall be a
+         pointer to the initial element of an array of wchar_t large enough to accept
+         the sequence and the terminating null wide character, which will be added
+         automatically.
+[        Matches a nonempty sequence of wide characters from a set of expected
+         characters (the scanset).
+         If no l length modifier is present, characters from the input field are
+         converted as if by repeated calls to the wcrtomb function, with the
+         conversion state described by an mbstate_t object initialized to zero
+         before the first wide character is converted. The corresponding argument
+         shall be a pointer to the initial element of a character array large enough to
+         accept the sequence and a terminating null character, which will be added
+         automatically.
+         If an l length modifier is present, the corresponding argument shall be a
+         pointer to the initial element of an array of wchar_t large enough to accept
+         the sequence and the terminating null wide character, which will be added
+         automatically.
+         The conversion specifier includes all subsequent wide characters in the
+         format string, up to and including the matching right bracket (]). The wide
+         characters between the brackets (the scanlist) compose the scanset, unless the
+         wide character after the left bracket is a circumflex (^), in which case the
+         scanset contains all wide characters that do not appear in the scanlist between
+         the circumflex and the right bracket. If the conversion specifier begins with
+         [] or [^], the right bracket wide character is in the scanlist and the next
+         following right bracket wide character is the matching right bracket that ends
+         the specification; otherwise the first following right bracket wide character is
+         the one that ends the specification. If a - wide character is in the scanlist and
+         is not the first, nor the second where the first wide character is a ^, nor the
 
-[page 411] (Contents)
+[page 414] (Contents)
 
+                    last character, the behavior is implementation-defined.
+     p              Matches an implementation-defined set of sequences, which should be the
+                    same as the set of sequences that may be produced by the %p conversion of
+                    the fwprintf function. The corresponding argument shall be a pointer to a
+                    pointer to void. The input item is converted to a pointer value in an
+                    implementation-defined manner. If the input item is a value converted earlier
+                    during the same program execution, the pointer that results shall compare
+                    equal to that value; otherwise the behavior of the %p conversion is undefined.
+     n              No input is consumed. The corresponding argument shall be a pointer to
+                    signed integer into which is to be written the number of wide characters read
+                    from the input stream so far by this call to the fwscanf function. Execution
+                    of a %n directive does not increment the assignment count returned at the
+                    completion of execution of the fwscanf function. No argument is
                     converted, but one is consumed. If the conversion specification includes an
                     assignment-suppressing wide character or a field width, the behavior is
                     undefined.
      %              Matches a single % wide character; no conversion or assignment occurs. The
                     complete conversion specification shall be %%.
-13   If a conversion specification is invalid, the behavior is undefined.326)
+13   If a conversion specification is invalid, the behavior is undefined.339)
 14   The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
      respectively, a, e, f, g, and x.
 15   Trailing white space (including new-line wide characters) is left unread unless matched
@@ -16069,12 +16245,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
      before the first conversion (if any) has completed. Otherwise, the function returns the
      number of input items assigned, which can be fewer than provided for, or even zero, in
      the event of an early matching failure.
-17   EXAMPLE 1        The call:
+17   EXAMPLE 1       The call:
               #include <stdio.h>
-              #include <wchar.h>
+              #include <wchar.h>
               /* ... */
               int n, i; float x; wchar_t name[50];
               n = fwscanf(stdin, L"%d%f%ls", &i, &x, name);
+
+
+
+     339) See ''future library directions'' (7.31.16).
+
+[page 415] (Contents)
+
      with the input line:
               25 54.32E-1 thompson
      will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
@@ -16082,7 +16265,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 18   EXAMPLE 2        The call:
               #include <stdio.h>
-              #include <wchar.h>
+              #include <wchar.h>
               /* ... */
               int i; float x; double y;
               fwscanf(stdin, L"%2d%f%*d %lf", &i, &x, &y);
@@ -16091,32 +16274,30 @@ n           No input is consumed. The corresponding argument shall be a pointer
      will assign to i the value 56 and to x the value 789.0, will skip past 0123, and will assign to y the value
      56.0. The next wide character read from the input stream will be a.
 
+     Forward references: the wcstod, wcstof, and wcstold functions (7.29.4.1.1), the
+     wcstol, wcstoll, wcstoul, and wcstoull functions (7.29.4.1.2), the wcrtomb
+     function (7.29.6.3.3).
+     7.29.2.3 The swprintf function
+     Synopsis
+1             #include <wchar.h>
+              int swprintf(wchar_t * restrict s,
+                   size_t n,
+                   const wchar_t * restrict format, ...);
+     Description
+2    The swprintf function is equivalent to fwprintf, except that the argument s
+     specifies an array of wide characters into which the generated output is to be written,
+     rather than written to a stream. No more than n wide characters are written, including a
+     terminating null wide character, which is always added (unless n is zero).
+     Returns
+3    The swprintf function returns the number of wide characters written in the array, not
+     counting the terminating null wide character, or a negative value if an encoding error
+     occurred or if n or more wide characters were requested to be written.
 
-     326) See ''future library directions'' (7.30.12).
-
-[page 412] (Contents)
+[page 416] (Contents)
 
-    Forward references: the wcstod, wcstof, and wcstold functions (7.28.4.1.1), the
-    wcstol, wcstoll, wcstoul, and wcstoull functions (7.28.4.1.2), the wcrtomb
-    function (7.28.6.3.3).
-    7.28.2.3 The swprintf function
+    7.29.2.4 The swscanf function
     Synopsis
-1           #include <wchar.h>
-            int swprintf(wchar_t * restrict s,
-                 size_t n,
-                 const wchar_t * restrict format, ...);
-    Description
-2   The swprintf function is equivalent to fwprintf, except that the argument s
-    specifies an array of wide characters into which the generated output is to be written,
-    rather than written to a stream. No more than n wide characters are written, including a
-    terminating null wide character, which is always added (unless n is zero).
-    Returns
-3   The swprintf function returns the number of wide characters written in the array, not
-    counting the terminating null wide character, or a negative value if an encoding error
-    occurred or if n or more wide characters were requested to be written.
-    7.28.2.4 The swscanf function
-    Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             int swscanf(const wchar_t * restrict s,
                  const wchar_t * restrict format, ...);
     Description
@@ -16129,30 +16310,36 @@ n           No input is consumed. The corresponding argument shall be a pointer
     before the first conversion (if any) has completed. Otherwise, the swscanf function
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
-
-[page 413] (Contents)
-
-    7.28.2.5 The vfwprintf function
+    7.29.2.5 The vfwprintf function
     Synopsis
-1          #include <stdarg.h>
-           #include <stdio.h>
-           #include <wchar.h>
-           int vfwprintf(FILE * restrict stream,
-                const wchar_t * restrict format,
-                va_list arg);
+1           #include <stdarg.h>
+            #include <stdio.h>
+            #include <wchar.h>
+            int vfwprintf(FILE * restrict stream,
+                 const wchar_t * restrict format,
+                 va_list arg);
     Description
 2   The vfwprintf function is equivalent to fwprintf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vfwprintf function does not invoke the
-    va_end macro.327)
+    va_end macro.340)
     Returns
 3   The vfwprintf function returns the number of wide characters transmitted, or a
     negative value if an output or encoding error occurred.
+
+
+
+
+    340) As the functions vfwprintf, vswprintf, vfwscanf, vwprintf, vwscanf, and vswscanf
+         invoke the va_arg macro, the value of arg after the return is indeterminate.
+
+[page 417] (Contents)
+
 4   EXAMPLE       The following shows the use of the vfwprintf function in a general error-reporting
     routine.
            #include <stdarg.h>
            #include <stdio.h>
-           #include <wchar.h>
+           #include <wchar.h>
            void error(char *function_name, wchar_t *format, ...)
            {
                  va_list args;
@@ -16160,40 +16347,35 @@ n           No input is consumed. The corresponding argument shall be a pointer
                     // print out name of function causing error
                     fwprintf(stderr, L"ERROR in %s: ", function_name);
                     // print out remainder of message
-                    vfwprintf(stderr, format, args);
-                    va_end(args);
-           }
-
-
-
-
-    327) As the functions vfwprintf, vswprintf, vfwscanf, vwprintf, vwscanf, and vswscanf
-         invoke the va_arg macro, the value of arg after the return is indeterminate.
-
-[page 414] (Contents)
+                    vfwprintf(stderr, format, args);
+                    va_end(args);
+           }
 
-    7.28.2.6 The vfwscanf function
+    7.29.2.6 The vfwscanf function
     Synopsis
-1           #include <stdarg.h>
-            #include <stdio.h>
-            #include <wchar.h>
-            int vfwscanf(FILE * restrict stream,
-                 const wchar_t * restrict format,
-                 va_list arg);
+1          #include <stdarg.h>
+           #include <stdio.h>
+           #include <wchar.h>
+           int vfwscanf(FILE * restrict stream,
+                const wchar_t * restrict format,
+                va_list arg);
     Description
 2   The vfwscanf function is equivalent to fwscanf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vfwscanf function does not invoke the
-    va_end macro.327)
+    va_end macro.340)
     Returns
 3   The vfwscanf function returns the value of the macro EOF if an input failure occurs
     before the first conversion (if any) has completed. Otherwise, the vfwscanf function
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
-    7.28.2.7 The vswprintf function
+
+[page 418] (Contents)
+
+    7.29.2.7 The vswprintf function
     Synopsis
 1           #include <stdarg.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vswprintf(wchar_t * restrict s,
                  size_t n,
                  const wchar_t * restrict format,
@@ -16202,67 +16384,67 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   The vswprintf function is equivalent to swprintf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vswprintf function does not invoke the
-    va_end macro.327)
+    va_end macro.340)
     Returns
 3   The vswprintf function returns the number of wide characters written in the array, not
     counting the terminating null wide character, or a negative value if an encoding error
     occurred or if n or more wide characters were requested to be generated.
-
-[page 415] (Contents)
-
-    7.28.2.8 The vswscanf function
+    7.29.2.8 The vswscanf function
     Synopsis
-1          #include <stdarg.h>
-           #include <wchar.h>
-           int vswscanf(const wchar_t * restrict s,
-                const wchar_t * restrict format,
-                va_list arg);
+1           #include <stdarg.h>
+            #include <wchar.h>
+            int vswscanf(const wchar_t * restrict s,
+                 const wchar_t * restrict format,
+                 va_list arg);
     Description
 2   The vswscanf function is equivalent to swscanf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vswscanf function does not invoke the
-    va_end macro.327)
+    va_end macro.340)
     Returns
 3   The vswscanf function returns the value of the macro EOF if an input failure occurs
     before the first conversion (if any) has completed. Otherwise, the vswscanf function
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
-    7.28.2.9 The vwprintf function
+
+[page 419] (Contents)
+
+    7.29.2.9 The vwprintf function
     Synopsis
 1          #include <stdarg.h>
-           #include <wchar.h>
+           #include <wchar.h>
            int vwprintf(const wchar_t * restrict format,
                 va_list arg);
     Description
 2   The vwprintf function is equivalent to wprintf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vwprintf function does not invoke the
-    va_end macro.327)
+    va_end macro.340)
     Returns
 3   The vwprintf function returns the number of wide characters transmitted, or a negative
     value if an output or encoding error occurred.
-
-[page 416] (Contents)
-
-    7.28.2.10 The vwscanf function
+    7.29.2.10 The vwscanf function
     Synopsis
-1           #include <stdarg.h>
-            #include <wchar.h>
-            int vwscanf(const wchar_t * restrict format,
-                 va_list arg);
+1          #include <stdarg.h>
+           #include <wchar.h>
+           int vwscanf(const wchar_t * restrict format,
+                va_list arg);
     Description
 2   The vwscanf function is equivalent to wscanf, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vwscanf function does not invoke the
-    va_end macro.327)
+    va_end macro.340)
     Returns
 3   The vwscanf function returns the value of the macro EOF if an input failure occurs
     before the first conversion (if any) has completed. Otherwise, the vwscanf function
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
-    7.28.2.11 The wprintf function
+
+[page 420] (Contents)
+
+    7.29.2.11 The wprintf function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             int wprintf(const wchar_t * restrict format, ...);
     Description
 2   The wprintf function is equivalent to fwprintf with the argument stdout
@@ -16270,55 +16452,48 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Returns
 3   The wprintf function returns the number of wide characters transmitted, or a negative
     value if an output or encoding error occurred.
-    7.28.2.12 The wscanf function
+    7.29.2.12 The wscanf function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             int wscanf(const wchar_t * restrict format, ...);
     Description
 2   The wscanf function is equivalent to fwscanf with the argument stdin interposed
     before the arguments to wscanf.
-
-[page 417] (Contents)
-
     Returns
 3   The wscanf function returns the value of the macro EOF if an input failure occurs
     before the first conversion (if any) has completed. Otherwise, the wscanf function
     returns the number of input items assigned, which can be fewer than provided for, or even
     zero, in the event of an early matching failure.
-    7.28.3 Wide character input/output functions
-    7.28.3.1 The fgetwc function
+    7.29.3 Wide character input/output functions
+    7.29.3.1 The fgetwc function
     Synopsis
 1           #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             wint_t fgetwc(FILE *stream);
     Description
 2   If the end-of-file indicator for the input stream pointed to by stream is not set and a
     next wide character is present, the fgetwc function obtains that wide character as a
     wchar_t converted to a wint_t and advances the associated file position indicator for
     the stream (if defined).
+
+[page 421] (Contents)
+
     Returns
 3   If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-
     of-file indicator for the stream is set and the fgetwc function returns WEOF. Otherwise,
     the fgetwc function returns the next wide character from the input stream pointed to by
     stream. If a read error occurs, the error indicator for the stream is set and the fgetwc
     function returns WEOF. If an encoding error occurs (including too few bytes), the value of
-    the macro EILSEQ is stored in errno and the fgetwc function returns WEOF.328)
-    7.28.3.2 The fgetws function
+    the macro EILSEQ is stored in errno and the fgetwc function returns WEOF.341)
+    7.29.3.2 The fgetws function
     Synopsis
 1           #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             wchar_t *fgetws(wchar_t * restrict s,
                  int n, FILE * restrict stream);
     Description
 2   The fgetws function reads at most one less than the number of wide characters
     specified by n from the stream pointed to by stream into the array pointed to by s. No
-
-
-    328) An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
-         Also, errno will be set to EILSEQ by input/output functions only if an encoding error occurs.
-
-[page 418] (Contents)
-
     additional wide characters are read after a new-line wide character (which is retained) or
     after end-of-file. A null wide character is written immediately after the last wide
     character read into the array.
@@ -16327,25 +16502,31 @@ n           No input is consumed. The corresponding argument shall be a pointer
     characters have been read into the array, the contents of the array remain unchanged and a
     null pointer is returned. If a read or encoding error occurs during the operation, the array
     contents are indeterminate and a null pointer is returned.
-    7.28.3.3 The fputwc function
+    7.29.3.3 The fputwc function
     Synopsis
 1           #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             wint_t fputwc(wchar_t c, FILE *stream);
     Description
 2   The fputwc function writes the wide character specified by c to the output stream
     pointed to by stream, at the position indicated by the associated file position indicator
     for the stream (if defined), and advances the indicator appropriately. If the file cannot
+
+    341) An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
+         Also, errno will be set to EILSEQ by input/output functions only if an encoding error occurs.
+
+[page 422] (Contents)
+
     support positioning requests, or if the stream was opened with append mode, the
     character is appended to the output stream.
     Returns
 3   The fputwc function returns the wide character written. If a write error occurs, the
     error indicator for the stream is set and fputwc returns WEOF. If an encoding error
     occurs, the value of the macro EILSEQ is stored in errno and fputwc returns WEOF.
-    7.28.3.4 The fputws function
+    7.29.3.4 The fputws function
     Synopsis
 1           #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int fputws(const wchar_t * restrict s,
                  FILE * restrict stream);
     Description
@@ -16354,28 +16535,31 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Returns
 3   The fputws function returns EOF if a write or encoding error occurs; otherwise, it
     returns a nonnegative value.
-
-[page 419] (Contents)
-
-    7.28.3.5 The fwide function
+    7.29.3.5 The fwide function
     Synopsis
 1           #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int fwide(FILE *stream, int mode);
     Description
 2   The fwide function determines the orientation of the stream pointed to by stream. If
     mode is greater than zero, the function first attempts to make the stream wide oriented. If
-    mode is less than zero, the function first attempts to make the stream byte oriented.329)
+    mode is less than zero, the function first attempts to make the stream byte oriented.342)
     Otherwise, mode is zero and the function does not alter the orientation of the stream.
     Returns
 3   The fwide function returns a value greater than zero if, after the call, the stream has
     wide orientation, a value less than zero if the stream has byte orientation, or zero if the
     stream has no orientation.
-    7.28.3.6 The getwc function
+
+
+    342) If the orientation of the stream has already been determined, fwide does not change it.
+
+[page 423] (Contents)
+
+    7.29.3.6 The getwc function
     Synopsis
-1           #include <stdio.h>
-            #include <wchar.h>
-            wint_t getwc(FILE *stream);
+1          #include <stdio.h>
+           #include <wchar.h>
+           wint_t getwc(FILE *stream);
     Description
 2   The getwc function is equivalent to fgetwc, except that if it is implemented as a
     macro, it may evaluate stream more than once, so the argument should never be an
@@ -16383,54 +16567,46 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Returns
 3   The getwc function returns the next wide character from the input stream pointed to by
     stream, or WEOF.
-    7.28.3.7 The getwchar function
+    7.29.3.7 The getwchar function
     Synopsis
-1           #include <wchar.h>
-            wint_t getwchar(void);
-
-
-
-
-    329) If the orientation of the stream has already been determined, fwide does not change it.
-
-[page 420] (Contents)
-
+1          #include <wchar.h>
+           wint_t getwchar(void);
     Description
 2   The getwchar function is equivalent to getwc with the argument stdin.
     Returns
 3   The getwchar function returns the next wide character from the input stream pointed to
     by stdin, or WEOF.
-    7.28.3.8 The putwc function
+    7.29.3.8 The putwc function
     Synopsis
-1           #include <stdio.h>
-            #include <wchar.h>
-            wint_t putwc(wchar_t c, FILE *stream);
+1          #include <stdio.h>
+           #include <wchar.h>
+           wint_t putwc(wchar_t c, FILE *stream);
     Description
 2   The putwc function is equivalent to fputwc, except that if it is implemented as a
     macro, it may evaluate stream more than once, so that argument should never be an
     expression with side effects.
     Returns
 3   The putwc function returns the wide character written, or WEOF.
-    7.28.3.9 The putwchar function
+
+[page 424] (Contents)
+
+    7.29.3.9 The putwchar function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             wint_t putwchar(wchar_t c);
     Description
 2   The putwchar function is equivalent to putwc with the second argument stdout.
     Returns
 3   The putwchar function returns the character written, or WEOF.
-    7.28.3.10 The ungetwc function
+    7.29.3.10 The ungetwc function
     Synopsis
 1           #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             wint_t ungetwc(wint_t c, FILE *stream);
     Description
 2   The ungetwc function pushes the wide character specified by c back onto the input
     stream pointed to by stream. Pushed-back wide characters will be returned by
     subsequent reads on that stream in the reverse order of their pushing. A successful
-
-[page 421] (Contents)
-
     intervening call (with the stream pointed to by stream) to a file positioning function
     (fseek, fsetpos, or rewind) discards any pushed-back wide characters for the
     stream. The external storage corresponding to the stream is unchanged.
@@ -16447,11 +16623,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
     back. For a text or binary stream, the value of its file position indicator after a successful
     call to the ungetwc function is unspecified until all pushed-back wide characters are
     read or discarded.
+
+[page 425] (Contents)
+
     Returns
 6   The ungetwc function returns the wide character pushed back, or WEOF if the operation
     fails.
-    7.28.4 General wide string utilities
-1   The header <wchar.h> declares a number of functions useful for wide string
+    7.29.4 General wide string utilities
+1   The header <wchar.h> declares a number of functions useful for wide string
     manipulation. Various methods are used for determining the lengths of the arrays, but in
     all cases a wchar_t * argument points to the initial (lowest addressed) element of the
     array. If an array is accessed beyond the end of an object, the behavior is undefined.
@@ -16462,19 +16641,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
     function that locates a wide character finds no occurrence, a function that compares two
     wide character sequences returns zero, and a function that copies wide characters copies
     zero wide characters.
-
-[page 422] (Contents)
-
-    7.28.4.1 Wide string numeric conversion functions
-    7.28.4.1.1 The wcstod, wcstof, and wcstold functions
+    7.29.4.1 Wide string numeric conversion functions
+    7.29.4.1.1 The wcstod, wcstof, and wcstold functions
     Synopsis
-1           #include <wchar.h>
-            double wcstod(const wchar_t * restrict nptr,
-                 wchar_t ** restrict endptr);
-            float wcstof(const wchar_t * restrict nptr,
-                 wchar_t ** restrict endptr);
-            long double wcstold(const wchar_t * restrict nptr,
-                 wchar_t ** restrict endptr);
+1          #include <wchar.h>
+           double wcstod(const wchar_t * restrict nptr,
+                wchar_t ** restrict endptr);
+           float wcstof(const wchar_t * restrict nptr,
+                wchar_t ** restrict endptr);
+           long double wcstold(const wchar_t * restrict nptr,
+                wchar_t ** restrict endptr);
     Description
 2   The wcstod, wcstof, and wcstold functions convert the initial portion of the wide
     string pointed to by nptr to double, float, and long double representation,
@@ -16486,6 +16662,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
     to convert the subject sequence to a floating-point number, and return the result.
 3   The expected form of the subject sequence is an optional plus or minus sign, then one of
     the following:
+
+[page 426] (Contents)
+
     -- a nonempty sequence of decimal digits optionally containing a decimal-point wide
       character, then an optional exponent part as defined for the corresponding single-byte
       characters in 6.4.4.2;
@@ -16495,16 +16674,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- INF or INFINITY, or any other wide string equivalent except for case
     -- NAN or NAN(n-wchar-sequenceopt), or any other wide string equivalent except for
       case in the NAN part, where:
-               n-wchar-sequence:
-                     digit
-                     nondigit
-                     n-wchar-sequence digit
-                     n-wchar-sequence nondigit
+                 n-wchar-sequence:
+                       digit
+                       nondigit
+                       n-wchar-sequence digit
+                       n-wchar-sequence nondigit
     The subject sequence is defined as the longest initial subsequence of the input wide
     string, starting with the first non-white-space wide character, that is of the expected form.
-
-[page 423] (Contents)
-
     The subject sequence contains no wide characters if the input wide string is not of the
     expected form.
 4   If the subject sequence has the expected form for a floating-point number, the sequence of
@@ -16515,39 +16691,37 @@ n           No input is consumed. The corresponding argument shall be a pointer
     floating point number, or if a binary exponent part does not appear in a hexadecimal
     floating point number, an exponent part of the appropriate type with value zero is
     assumed to follow the last digit in the string. If the subject sequence begins with a minus
-    sign, the sequence is interpreted as negated.330) A wide character sequence INF or
+    sign, the sequence is interpreted as negated.343) A wide character sequence INF or
     INFINITY is interpreted as an infinity, if representable in the return type, else like a
     floating constant that is too large for the range of the return type. A wide character
     sequence NAN or NAN(n-wchar-sequenceopt) is interpreted as a quiet NaN, if supported
     in the return type, else like a subject sequence part that does not have the expected form;
-    the meaning of the n-wchar sequences is implementation-defined.331) A pointer to the
-    final wide string is stored in the object pointed to by endptr, provided that endptr is
-    not a null pointer.
-5   If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
-    value resulting from the conversion is correctly rounded.
-6   In other than the "C" locale, additional locale-specific subject sequence forms may be
-    accepted.
-7   If the subject sequence is empty or does not have the expected form, no conversion is
-    performed; the value of nptr is stored in the object pointed to by endptr, provided
-    that endptr is not a null pointer.
-    Recommended practice
-8   If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
-    the result is not exactly representable, the result should be one of the two numbers in the
-    appropriate internal format that are adjacent to the hexadecimal floating source value,
-    with the extra stipulation that the error should have a correct sign for the current rounding
-    direction.
+    the meaning of the n-wchar sequence is implementation-defined.344) A pointer to the
 
-
-
-    330) It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
+    343) It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
          negating the value resulting from converting the corresponding unsigned sequence (see F.5); the two
          methods may yield different results if rounding is toward positive or negative infinity. In either case,
          the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
-    331) An implementation may use the n-wchar sequence to determine extra information to be represented in
+    344) An implementation may use the n-wchar sequence to determine extra information to be represented in
          the NaN's significand.
 
-[page 424] (Contents)
+[page 427] (Contents)
 
+     final wide string is stored in the object pointed to by endptr, provided that endptr is
+     not a null pointer.
+5    If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
+     value resulting from the conversion is correctly rounded.
+6    In other than the "C" locale, additional locale-specific subject sequence forms may be
+     accepted.
+7    If the subject sequence is empty or does not have the expected form, no conversion is
+     performed; the value of nptr is stored in the object pointed to by endptr, provided
+     that endptr is not a null pointer.
+     Recommended practice
+8    If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
+     the result is not exactly representable, the result should be one of the two numbers in the
+     appropriate internal format that are adjacent to the hexadecimal floating source value,
+     with the extra stipulation that the error should have a correct sign for the current rounding
+     direction.
 9    If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in
      <float.h>) significant digits, the result should be correctly rounded. If the subject
      sequence D has the decimal form and more than DECIMAL_DIG significant digits,
@@ -16556,7 +16730,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      The result should be one of the (equal or adjacent) values that would be obtained by
      correctly rounding L and U according to the current rounding direction, with the extra
      stipulation that the error with respect to D should have a correct sign for the current
-     rounding direction.332)
+     rounding direction.345)
      Returns
 10   The functions return the converted value, if any. If no conversion could be performed,
      zero is returned. If the correct value overflows and default rounding is in effect (7.12.1),
@@ -16569,30 +16743,30 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-     332) DECIMAL_DIG, defined in <float.h>, should be sufficiently large that L and U will usually round
+     345) DECIMAL_DIG, defined in <float.h>, should be sufficiently large that L and U will usually round
           to the same internal floating value, but if not will round to adjacent values.
 
-[page 425] (Contents)
+[page 428] (Contents)
 
-    7.28.4.1.2 The wcstol, wcstoll, wcstoul, and wcstoull functions
-    Synopsis
-1          #include <wchar.h>
-           long int wcstol(
-                const wchar_t * restrict nptr,
-                wchar_t ** restrict endptr,
-                int base);
-           long long int wcstoll(
-                const wchar_t * restrict nptr,
-                wchar_t ** restrict endptr,
-                int base);
-           unsigned long int wcstoul(
-                const wchar_t * restrict nptr,
-                wchar_t ** restrict endptr,
-                int base);
-           unsigned long long int wcstoull(
-                const wchar_t * restrict nptr,
-                wchar_t ** restrict endptr,
-                int base);
+    7.29.4.1.2 The wcstol, wcstoll, wcstoul, and wcstoull functions
+    Synopsis
+1           #include <wchar.h>
+            long int wcstol(
+                 const wchar_t * restrict nptr,
+                 wchar_t ** restrict endptr,
+                 int base);
+            long long int wcstoll(
+                 const wchar_t * restrict nptr,
+                 wchar_t ** restrict endptr,
+                 int base);
+            unsigned long int wcstoul(
+                 const wchar_t * restrict nptr,
+                 wchar_t ** restrict endptr,
+                 int base);
+            unsigned long long int wcstoull(
+                 const wchar_t * restrict nptr,
+                 wchar_t ** restrict endptr,
+                 int base);
     Description
 2   The wcstol, wcstoll, wcstoul, and wcstoull functions convert the initial
     portion of the wide string pointed to by nptr to long int, long long int,
@@ -16614,7 +16788,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     value of base is 16, the wide characters 0x or 0X may optionally precede the sequence
     of letters and digits, following the sign if present.
 
-[page 426] (Contents)
+[page 429] (Contents)
 
 4   The subject sequence is defined as the longest initial subsequence of the input wide
     string, starting with the first non-white-space wide character, that is of the expected form.
@@ -16640,38 +16814,38 @@ n           No input is consumed. The corresponding argument shall be a pointer
     is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
     LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
     sign of the value, if any), and the value of the macro ERANGE is stored in errno.
-    7.28.4.2 Wide string copying functions
-    7.28.4.2.1 The wcscpy function
+    7.29.4.2 Wide string copying functions
+    7.29.4.2.1 The wcscpy function
     Synopsis
-1           #include <wchar.h>
-            wchar_t *wcscpy(wchar_t * restrict s1,
-                 const wchar_t * restrict s2);
+1          #include <wchar.h>
+           wchar_t *wcscpy(wchar_t * restrict s1,
+                const wchar_t * restrict s2);
     Description
 2   The wcscpy function copies the wide string pointed to by s2 (including the terminating
     null wide character) into the array pointed to by s1.
     Returns
 3   The wcscpy function returns the value of s1.
 
-[page 427] (Contents)
+[page 430] (Contents)
 
-    7.28.4.2.2 The wcsncpy function
+    7.29.4.2.2 The wcsncpy function
     Synopsis
-1            #include <wchar.h>
+1            #include <wchar.h>
              wchar_t *wcsncpy(wchar_t * restrict s1,
                   const wchar_t * restrict s2,
                   size_t n);
     Description
 2   The wcsncpy function copies not more than n wide characters (those that follow a null
     wide character are not copied) from the array pointed to by s2 to the array pointed to by
-    s1.333)
+    s1.346)
 3   If the array pointed to by s2 is a wide string that is shorter than n wide characters, null
     wide characters are appended to the copy in the array pointed to by s1, until n wide
     characters in all have been written.
     Returns
 4   The wcsncpy function returns the value of s1.
-    7.28.4.2.3 The wmemcpy function
+    7.29.4.2.3 The wmemcpy function
     Synopsis
-1            #include <wchar.h>
+1            #include <wchar.h>
              wchar_t *wmemcpy(wchar_t * restrict s1,
                   const wchar_t * restrict s2,
                   size_t n);
@@ -16684,16 +16858,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    333) Thus, if there is no null wide character in the first n wide characters of the array pointed to by s2, the
+    346) Thus, if there is no null wide character in the first n wide characters of the array pointed to by s2, the
          result will not be null-terminated.
 
-[page 428] (Contents)
+[page 431] (Contents)
 
-    7.28.4.2.4 The wmemmove function
+    7.29.4.2.4 The wmemmove function
     Synopsis
-1           #include <wchar.h>
-            wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
-                 size_t n);
+1          #include <wchar.h>
+           wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
+                size_t n);
     Description
 2   The wmemmove function copies n wide characters from the object pointed to by s2 to
     the object pointed to by s1. Copying takes place as if the n wide characters from the
@@ -16702,42 +16876,42 @@ n           No input is consumed. The corresponding argument shall be a pointer
     the temporary array are copied into the object pointed to by s1.
     Returns
 3   The wmemmove function returns the value of s1.
-    7.28.4.3 Wide string concatenation functions
-    7.28.4.3.1 The wcscat function
+    7.29.4.3 Wide string concatenation functions
+    7.29.4.3.1 The wcscat function
     Synopsis
-1           #include <wchar.h>
-            wchar_t *wcscat(wchar_t * restrict s1,
-                 const wchar_t * restrict s2);
+1          #include <wchar.h>
+           wchar_t *wcscat(wchar_t * restrict s1,
+                const wchar_t * restrict s2);
     Description
 2   The wcscat function appends a copy of the wide string pointed to by s2 (including the
     terminating null wide character) to the end of the wide string pointed to by s1. The initial
     wide character of s2 overwrites the null wide character at the end of s1.
     Returns
 3   The wcscat function returns the value of s1.
-    7.28.4.3.2 The wcsncat function
+    7.29.4.3.2 The wcsncat function
     Synopsis
-1           #include <wchar.h>
-            wchar_t *wcsncat(wchar_t * restrict s1,
-                 const wchar_t * restrict s2,
-                 size_t n);
+1          #include <wchar.h>
+           wchar_t *wcsncat(wchar_t * restrict s1,
+                const wchar_t * restrict s2,
+                size_t n);
     Description
 2   The wcsncat function appends not more than n wide characters (a null wide character
     and those that follow it are not appended) from the array pointed to by s2 to the end of
 
-[page 429] (Contents)
+[page 432] (Contents)
 
     the wide string pointed to by s1. The initial wide character of s2 overwrites the null
     wide character at the end of s1. A terminating null wide character is always appended to
-    the result.334)
+    the result.347)
     Returns
 3   The wcsncat function returns the value of s1.
-    7.28.4.4 Wide string comparison functions
+    7.29.4.4 Wide string comparison functions
 1   Unless explicitly stated otherwise, the functions described in this subclause order two
     wide characters the same way as two integers of the underlying integer type designated
     by wchar_t.
-    7.28.4.4.1 The wcscmp function
+    7.29.4.4.1 The wcscmp function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             int wcscmp(const wchar_t *s1, const wchar_t *s2);
     Description
 2   The wcscmp function compares the wide string pointed to by s1 to the wide string
@@ -16746,9 +16920,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The wcscmp function returns an integer greater than, equal to, or less than zero,
     accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
     wide string pointed to by s2.
-    7.28.4.4.2 The wcscoll function
+    7.29.4.4.2 The wcscoll function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             int wcscoll(const wchar_t *s1, const wchar_t *s2);
     Description
 2   The wcscoll function compares the wide string pointed to by s1 to the wide string
@@ -16759,18 +16933,18 @@ n           No input is consumed. The corresponding argument shall be a pointer
     accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
 
 
-    334) Thus, the maximum number of wide characters that can end up in the array pointed to by s1 is
+    347) Thus, the maximum number of wide characters that can end up in the array pointed to by s1 is
          wcslen(s1)+n+1.
 
-[page 430] (Contents)
+[page 433] (Contents)
 
     wide string pointed to by s2 when both are interpreted as appropriate to the current
     locale.
-    7.28.4.4.3 The wcsncmp function
+    7.29.4.4.3 The wcsncmp function
     Synopsis
-1           #include <wchar.h>
-            int wcsncmp(const wchar_t *s1, const wchar_t *s2,
-                 size_t n);
+1          #include <wchar.h>
+           int wcsncmp(const wchar_t *s1, const wchar_t *s2,
+                size_t n);
     Description
 2   The wcsncmp function compares not more than n wide characters (those that follow a
     null wide character are not compared) from the array pointed to by s1 to the array
@@ -16779,12 +16953,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The wcsncmp function returns an integer greater than, equal to, or less than zero,
     accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
     to, or less than the possibly null-terminated array pointed to by s2.
-    7.28.4.4.4 The wcsxfrm function
+    7.29.4.4.4 The wcsxfrm function
     Synopsis
-1           #include <wchar.h>
-            size_t wcsxfrm(wchar_t * restrict s1,
-                 const wchar_t * restrict s2,
-                 size_t n);
+1          #include <wchar.h>
+           size_t wcsxfrm(wchar_t * restrict s1,
+                const wchar_t * restrict s2,
+                size_t n);
     Description
 2   The wcsxfrm function transforms the wide string pointed to by s2 and places the
     resulting wide string into the array pointed to by s1. The transformation is such that if
@@ -16800,15 +16974,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   EXAMPLE The value of the following expression is the length of the array needed to hold the
     transformation of the wide string pointed to by s:
 
-[page 431] (Contents)
+[page 434] (Contents)
 
-           1 + wcsxfrm(NULL, s, 0)
+            1 + wcsxfrm(NULL, s, 0)
 
-    7.28.4.4.5 The wmemcmp function
+    7.29.4.4.5 The wmemcmp function
     Synopsis
-1          #include <wchar.h>
-           int wmemcmp(const wchar_t *s1, const wchar_t *s2,
-                size_t n);
+1           #include <wchar.h>
+            int wmemcmp(const wchar_t *s1, const wchar_t *s2,
+                 size_t n);
     Description
 2   The wmemcmp function compares the first n wide characters of the object pointed to by
     s1 to the first n wide characters of the object pointed to by s2.
@@ -16816,54 +16990,54 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The wmemcmp function returns an integer greater than, equal to, or less than zero,
     accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
     pointed to by s2.
-    7.28.4.5 Wide string search functions
-    7.28.4.5.1 The wcschr function
+    7.29.4.5 Wide string search functions
+    7.29.4.5.1 The wcschr function
     Synopsis
-1          #include <wchar.h>
-           wchar_t *wcschr(const wchar_t *s, wchar_t c);
+1           #include <wchar.h>
+            wchar_t *wcschr(const wchar_t *s, wchar_t c);
     Description
 2   The wcschr function locates the first occurrence of c in the wide string pointed to by s.
     The terminating null wide character is considered to be part of the wide string.
     Returns
 3   The wcschr function returns a pointer to the located wide character, or a null pointer if
     the wide character does not occur in the wide string.
-    7.28.4.5.2 The wcscspn function
+    7.29.4.5.2 The wcscspn function
     Synopsis
-1          #include <wchar.h>
-           size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
+1           #include <wchar.h>
+            size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
     Description
 2   The wcscspn function computes the length of the maximum initial segment of the wide
     string pointed to by s1 which consists entirely of wide characters not from the wide
     string pointed to by s2.
 
-[page 432] (Contents)
+[page 435] (Contents)
 
     Returns
 3   The wcscspn function returns the length of the segment.
-    7.28.4.5.3 The wcspbrk function
+    7.29.4.5.3 The wcspbrk function
     Synopsis
-1           #include <wchar.h>
-            wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);
+1          #include <wchar.h>
+           wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);
     Description
 2   The wcspbrk function locates the first occurrence in the wide string pointed to by s1 of
     any wide character from the wide string pointed to by s2.
     Returns
 3   The wcspbrk function returns a pointer to the wide character in s1, or a null pointer if
     no wide character from s2 occurs in s1.
-    7.28.4.5.4 The wcsrchr function
+    7.29.4.5.4 The wcsrchr function
     Synopsis
-1           #include <wchar.h>
-            wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
+1          #include <wchar.h>
+           wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
     Description
 2   The wcsrchr function locates the last occurrence of c in the wide string pointed to by
     s. The terminating null wide character is considered to be part of the wide string.
     Returns
 3   The wcsrchr function returns a pointer to the wide character, or a null pointer if c does
     not occur in the wide string.
-    7.28.4.5.5 The wcsspn function
+    7.29.4.5.5 The wcsspn function
     Synopsis
-1           #include <wchar.h>
-            size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
+1          #include <wchar.h>
+           size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
     Description
 2   The wcsspn function computes the length of the maximum initial segment of the wide
     string pointed to by s1 which consists entirely of wide characters from the wide string
@@ -16871,12 +17045,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Returns
 3   The wcsspn function returns the length of the segment.
 
-[page 433] (Contents)
+[page 436] (Contents)
 
-    7.28.4.5.6 The wcsstr function
+    7.29.4.5.6 The wcsstr function
     Synopsis
-1          #include <wchar.h>
-           wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
+1           #include <wchar.h>
+            wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
     Description
 2   The wcsstr function locates the first occurrence in the wide string pointed to by s1 of
     the sequence of wide characters (excluding the terminating null wide character) in the
@@ -16885,12 +17059,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The wcsstr function returns a pointer to the located wide string, or a null pointer if the
     wide string is not found. If s2 points to a wide string with zero length, the function
     returns s1.
-    7.28.4.5.7 The wcstok function
+    7.29.4.5.7 The wcstok function
     Synopsis
-1          #include <wchar.h>
-           wchar_t *wcstok(wchar_t * restrict s1,
-                const wchar_t * restrict s2,
-                wchar_t ** restrict ptr);
+1           #include <wchar.h>
+            wchar_t *wcstok(wchar_t * restrict s1,
+                 const wchar_t * restrict s2,
+                 wchar_t ** restrict ptr);
     Description
 2   A sequence of calls to the wcstok function breaks the wide string pointed to by s1 into
     a sequence of tokens, each of which is delimited by a wide character from the wide string
@@ -16910,7 +17084,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 5   The wcstok function then searches from there for a wide character that is contained in
     the current separator wide string. If no such wide character is found, the current token
 
-[page 434] (Contents)
+[page 437] (Contents)
 
     extends to the end of the wide string pointed to by s1, and subsequent searches in the
     same wide string for a token return a null pointer. If such a wide character is found, it is
@@ -16923,21 +17097,21 @@ n           No input is consumed. The corresponding argument shall be a pointer
 7   The wcstok function returns a pointer to the first wide character of a token, or a null
     pointer if there is no token.
 8   EXAMPLE
-            #include <wchar.h>
-            static wchar_t str1[] = L"?a???b,,,#c";
-            static wchar_t str2[] = L"\t \t";
-            wchar_t *t, *ptr1, *ptr2;
-            t   =   wcstok(str1,   L"?", &ptr1);         //   t   points to the token L"a"
-            t   =   wcstok(NULL,   L",", &ptr1);         //   t   points to the token L"??b"
-            t   =   wcstok(str2,   L" \t", &ptr2);       //   t   is a null pointer
-            t   =   wcstok(NULL,   L"#,", &ptr1);        //   t   points to the token L"c"
-            t   =   wcstok(NULL,   L"?", &ptr1);         //   t   is a null pointer
-
-    7.28.4.5.8 The wmemchr function
-    Synopsis
-1           #include <wchar.h>
-            wchar_t *wmemchr(const wchar_t *s, wchar_t c,
-                 size_t n);
+           #include <wchar.h>
+           static wchar_t str1[] = L"?a???b,,,#c";
+           static wchar_t str2[] = L"\t \t";
+           wchar_t *t, *ptr1, *ptr2;
+           t   =   wcstok(str1,   L"?", &ptr1);          //   t   points to the token L"a"
+           t   =   wcstok(NULL,   L",", &ptr1);          //   t   points to the token L"??b"
+           t   =   wcstok(str2,   L" \t", &ptr2);        //   t   is a null pointer
+           t   =   wcstok(NULL,   L"#,", &ptr1);         //   t   points to the token L"c"
+           t   =   wcstok(NULL,   L"?", &ptr1);          //   t   is a null pointer
+
+    7.29.4.5.8 The wmemchr function
+    Synopsis
+1          #include <wchar.h>
+           wchar_t *wmemchr(const wchar_t *s, wchar_t c,
+                size_t n);
     Description
 2   The wmemchr function locates the first occurrence of c in the initial n wide characters of
     the object pointed to by s.
@@ -16945,42 +17119,42 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The wmemchr function returns a pointer to the located wide character, or a null pointer if
     the wide character does not occur in the object.
 
-[page 435] (Contents)
+[page 438] (Contents)
 
-    7.28.4.6 Miscellaneous functions
-    7.28.4.6.1 The wcslen function
+    7.29.4.6 Miscellaneous functions
+    7.29.4.6.1 The wcslen function
     Synopsis
-1          #include <wchar.h>
-           size_t wcslen(const wchar_t *s);
+1           #include <wchar.h>
+            size_t wcslen(const wchar_t *s);
     Description
 2   The wcslen function computes the length of the wide string pointed to by s.
     Returns
 3   The wcslen function returns the number of wide characters that precede the terminating
     null wide character.
-    7.28.4.6.2 The wmemset function
+    7.29.4.6.2 The wmemset function
     Synopsis
-1          #include <wchar.h>
-           wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);
+1           #include <wchar.h>
+            wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);
     Description
 2   The wmemset function copies the value of c into each of the first n wide characters of
     the object pointed to by s.
     Returns
 3   The wmemset function returns the value of s.
-    7.28.5 Wide character time conversion functions
-    7.28.5.1 The wcsftime function
+    7.29.5 Wide character time conversion functions
+    7.29.5.1 The wcsftime function
     Synopsis
-1          #include <time.h>
-           #include <wchar.h>
-           size_t wcsftime(wchar_t * restrict s,
-                size_t maxsize,
-                const wchar_t * restrict format,
-                const struct tm * restrict timeptr);
+1           #include <time.h>
+            #include <wchar.h>
+            size_t wcsftime(wchar_t * restrict s,
+                 size_t maxsize,
+                 const wchar_t * restrict format,
+                 const struct tm * restrict timeptr);
     Description
 2   The wcsftime function is equivalent to the strftime function, except that:
     -- The argument s points to the initial element of an array of wide characters into which
       the generated output is to be placed.
 
-[page 436] (Contents)
+[page 439] (Contents)
 
     -- The argument maxsize indicates the limiting number of wide characters.
     -- The argument format is a wide string and the conversion specifiers are replaced by
@@ -16992,11 +17166,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
     wide characters placed into the array pointed to by s not including the terminating null
     wide character. Otherwise, zero is returned and the contents of the array are
     indeterminate.
-    7.28.6 Extended multibyte/wide character conversion utilities
-1   The header <wchar.h> declares an extended set of functions useful for conversion
+    7.29.6 Extended multibyte/wide character conversion utilities
+1   The header <wchar.h> declares an extended set of functions useful for conversion
     between multibyte characters and wide characters.
-2   Most of the following functions -- those that are listed as ''restartable'', 7.28.6.3 and
-    7.28.6.4 -- take as a last argument a pointer to an object of type mbstate_t that is used
+2   Most of the following functions -- those that are listed as ''restartable'', 7.29.6.3 and
+    7.29.6.4 -- take as a last argument a pointer to an object of type mbstate_t that is used
     to describe the current conversion state from a particular multibyte character sequence to
     a wide character sequence (or the reverse) under the rules of a particular setting for the
     LC_CTYPE category of the current locale.
@@ -17008,7 +17182,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     been altered by any of the functions described in this subclause, and is then used with a
     different multibyte character sequence, or in the other conversion direction, or with a
     different LC_CTYPE category setting than on earlier function calls, the behavior is
-    undefined.335)
+    undefined.348)
 4   On entry, each function takes the described conversion state (either internal or pointed to
     by an argument) as current. The conversion state described by the referenced object is
     altered as needed to track the shift state, and the position within a multibyte character, for
@@ -17017,17 +17191,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    335) Thus, a particular mbstate_t object can be used, for example, with both the mbrtowc and
+    348) Thus, a particular mbstate_t object can be used, for example, with both the mbrtowc and
          mbsrtowcs functions as long as they are used to step sequentially through the same multibyte
          character string.
 
-[page 437] (Contents)
+[page 440] (Contents)
 
-    7.28.6.1 Single-byte/wide character conversion functions
-    7.28.6.1.1 The btowc function
+    7.29.6.1 Single-byte/wide character conversion functions
+    7.29.6.1.1 The btowc function
     Synopsis
-1          #include <wchar.h>                                                                        *
-           wint_t btowc(int c);
+1           #include <wchar.h>
+            wint_t btowc(int c);
     Description
 2   The btowc function determines whether c constitutes a valid single-byte character in the
     initial shift state.
@@ -17035,10 +17209,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The btowc function returns WEOF if c has the value EOF or if (unsigned char)c
     does not constitute a valid single-byte character in the initial shift state. Otherwise, it
     returns the wide character representation of that character.
-    7.28.6.1.2 The wctob function
+    7.29.6.1.2 The wctob function
     Synopsis
-1          #include <wchar.h>                                                                        *
-           int wctob(wint_t c);
+1           #include <wchar.h>
+            int wctob(wint_t c);
     Description
 2   The wctob function determines whether c corresponds to a member of the extended
     character set whose multibyte character representation is a single byte when in the initial
@@ -17047,52 +17221,52 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The wctob function returns EOF if c does not correspond to a multibyte character with
     length one in the initial shift state. Otherwise, it returns the single-byte representation of
     that character as an unsigned char converted to an int.
-    7.28.6.2 Conversion state functions
-    7.28.6.2.1 The mbsinit function
+    7.29.6.2 Conversion state functions
+    7.29.6.2.1 The mbsinit function
     Synopsis
-1          #include <wchar.h>
-           int mbsinit(const mbstate_t *ps);
+1           #include <wchar.h>
+            int mbsinit(const mbstate_t *ps);
     Description
 2   If ps is not a null pointer, the mbsinit function determines whether the referenced
     mbstate_t object describes an initial conversion state.
 
-[page 438] (Contents)
+[page 441] (Contents)
 
     Returns
 3   The mbsinit function returns nonzero if ps is a null pointer or if the referenced object
     describes an initial conversion state; otherwise, it returns zero.
-    7.28.6.3 Restartable multibyte/wide character conversion functions
+    7.29.6.3 Restartable multibyte/wide character conversion functions
 1   These functions differ from the corresponding multibyte character functions of 7.22.7
     (mblen, mbtowc, and wctomb) in that they have an extra parameter, ps, of type
     pointer to mbstate_t that points to an object that can completely describe the current
     conversion state of the associated multibyte character sequence. If ps is a null pointer,
     each function uses its own internal mbstate_t object instead, which is initialized at
     program startup to the initial conversion state; the functions are not required to avoid data
-    races in this case. The implementation behaves as if no library function calls these
-    functions with a null pointer for ps.
+    races with other calls to the same function in this case. The implementation behaves as if
+    no library function calls these functions with a null pointer for ps.
 2   Also unlike their corresponding functions, the return value does not represent whether the
     encoding is state-dependent.
-    7.28.6.3.1 The mbrlen function
+    7.29.6.3.1 The mbrlen function
     Synopsis
-1           #include <wchar.h>
-            size_t mbrlen(const char * restrict s,
-                 size_t n,
-                 mbstate_t * restrict ps);
+1          #include <wchar.h>
+           size_t mbrlen(const char * restrict s,
+                size_t n,
+                mbstate_t * restrict ps);
     Description
 2   The mbrlen function is equivalent to the call:
-            mbrtowc(NULL, s, n, ps != NULL ? ps : &internal)
+           mbrtowc(NULL, s, n, ps != NULL ? ps : &internal)
     where internal is the mbstate_t object for the mbrlen function, except that the
     expression designated by ps is evaluated only once.
     Returns
 3   The mbrlen function returns a value between zero and n, inclusive, (size_t)(-2),
     or (size_t)(-1).
-    Forward references: the mbrtowc function (7.28.6.3.2).
+    Forward references: the mbrtowc function (7.29.6.3.2).
 
-[page 439] (Contents)
+[page 442] (Contents)
 
-    7.28.6.3.2 The mbrtowc function
+    7.29.6.3.2 The mbrtowc function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             size_t mbrtowc(wchar_t * restrict pwc,
                  const char * restrict s,
                  size_t n,
@@ -17118,20 +17292,20 @@ n           No input is consumed. The corresponding argument shall be a pointer
                        of bytes that complete the multibyte character.
     (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
                  multibyte character, and all n bytes have been processed (no value is
-                 stored).336)
+                 stored).349)
     (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
                  do not contribute to a complete and valid multibyte character (no
                  value is stored); the value of the macro EILSEQ is stored in errno,
                  and the conversion state is unspecified.
 
-    336) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
+    349) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
          sequence of redundant shift sequences (for implementations with state-dependent encodings).
 
-[page 440] (Contents)
+[page 443] (Contents)
 
-    7.28.6.3.3 The wcrtomb function
+    7.29.6.3.3 The wcrtomb function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             size_t wcrtomb(char * restrict s,
                  wchar_t wc,
                  mbstate_t * restrict ps);
@@ -17150,25 +17324,25 @@ n           No input is consumed. The corresponding argument shall be a pointer
     any shift sequences). When wc is not a valid wide character, an encoding error occurs:
     the function stores the value of the macro EILSEQ in errno and returns
     (size_t)(-1); the conversion state is unspecified.
-    7.28.6.4 Restartable multibyte/wide string conversion functions
+    7.29.6.4 Restartable multibyte/wide string conversion functions
 1   These functions differ from the corresponding multibyte string functions of 7.22.8
     (mbstowcs and wcstombs) in that they have an extra parameter, ps, of type pointer to
     mbstate_t that points to an object that can completely describe the current conversion
     state of the associated multibyte character sequence. If ps is a null pointer, each function
     uses its own internal mbstate_t object instead, which is initialized at program startup
-    to the initial conversion state; the functions are not required to avoid data races in this
-    case. The implementation behaves as if no library function calls these functions with a
-    null pointer for ps.
+    to the initial conversion state; the functions are not required to avoid data races with other
+    calls to the same function in this case. The implementation behaves as if no library
+    function calls these functions with a null pointer for ps.
 2   Also unlike their corresponding functions, the conversion source parameter, src, has a
     pointer-to-pointer type. When the function is storing the results of conversions (that is,
     when dst is not a null pointer), the pointer object pointed to by this parameter is updated
     to reflect the amount of the source processed by that invocation.
 
-[page 441] (Contents)
+[page 444] (Contents)
 
-    7.28.6.4.1 The mbsrtowcs function
+    7.29.6.4.1 The mbsrtowcs function
     Synopsis
-1            #include <wchar.h>
+1            #include <wchar.h>
              size_t mbsrtowcs(wchar_t * restrict dst,
                   const char ** restrict src,
                   size_t len,
@@ -17181,7 +17355,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     continues up to and including a terminating null character, which is also stored.
     Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
     not form a valid multibyte character, or (if dst is not a null pointer) when len wide
-    characters have been stored into the array pointed to by dst.337) Each conversion takes
+    characters have been stored into the array pointed to by dst.350) Each conversion takes
     place as if by a call to the mbrtowc function.
 3   If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
     pointer (if conversion stopped due to reaching a terminating null character) or the address
@@ -17198,13 +17372,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    337) Thus, the value of len is ignored if dst is a null pointer.
+    350) Thus, the value of len is ignored if dst is a null pointer.
 
-[page 442] (Contents)
+[page 445] (Contents)
 
-    7.28.6.4.2 The wcsrtombs function
+    7.29.6.4.2 The wcsrtombs function
     Synopsis
-1           #include <wchar.h>
+1           #include <wchar.h>
             size_t wcsrtombs(char * restrict dst,
                  const wchar_t ** restrict src,
                  size_t len,
@@ -17219,7 +17393,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     not correspond to a valid multibyte character, or (if dst is not a null pointer) when the
     next multibyte character would exceed the limit of len total bytes to be stored into the
     array pointed to by dst. Each conversion takes place as if by a call to the wcrtomb
-    function.338)
+    function.351)
 3   If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
     pointer (if conversion stopped due to reaching a terminating null wide character) or the
     address just past the last wide character converted (if any). If conversion stopped due to
@@ -17235,25 +17409,25 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    338) If conversion stops because a terminating null wide character has been reached, the bytes stored
+    351) If conversion stops because a terminating null wide character has been reached, the bytes stored
          include those necessary to reach the initial shift state immediately before the null byte.
 
-[page 443] (Contents)
+[page 446] (Contents)
 
-    7.29 Wide character classification and mapping utilities <wctype.h>
-    7.29.1 Introduction
-1   The header <wctype.h> defines one macro, and declares three data types and many
-    functions.339)
+    7.30 Wide character classification and mapping utilities <wctype.h>
+    7.30.1 Introduction
+1   The header <wctype.h> defines one macro, and declares three data types and many
+    functions.352)
 2   The types declared are
-             wint_t
-    described in 7.28.1;
-             wctrans_t
+              wint_t
+    described in 7.29.1;
+              wctrans_t
     which is a scalar type that can hold values which represent locale-specific character
     mappings; and
-             wctype_t
+              wctype_t
     which is a scalar type that can hold values which represent locale-specific character
     classifications.
-3   The macro defined is WEOF (described in 7.28.1).
+3   The macro defined is WEOF (described in 7.29.1).
 4   The functions declared are grouped as follows:
     -- Functions that provide wide character classification;
     -- Extensible functions that provide wide character classification;
@@ -17268,53 +17442,53 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    339) See ''future library directions'' (7.30.13).
+    352) See ''future library directions'' (7.31.17).
 
-[page 444] (Contents)
+[page 447] (Contents)
 
-    7.29.2 Wide character classification utilities
-1   The header <wctype.h> declares several functions useful for classifying wide
+    7.30.2 Wide character classification utilities
+1   The header <wctype.h> declares several functions useful for classifying wide
     characters.
 2   The term printing wide character refers to a member of a locale-specific set of wide
     characters, each of which occupies at least one printing position on a display device. The
     term control wide character refers to a member of a locale-specific set of wide characters
     that are not printing wide characters.
-    7.29.2.1 Wide character classification functions
+    7.30.2.1 Wide character classification functions
 1   The functions in this subclause return nonzero (true) if and only if the value of the
     argument wc conforms to that in the description of the function.
 2   Each of the following functions returns true for each wide character that corresponds (as
     if by a call to the wctob function) to a single-byte character for which the corresponding
     character classification function from 7.4.1 returns true, except that the iswgraph and
     iswpunct functions may differ with respect to wide characters other than L' ' that are
-    both printing and white-space wide characters.340)
-    Forward references: the wctob function (7.28.6.1.2).
-    7.29.2.1.1 The iswalnum function
+    both printing and white-space wide characters.353)
+    Forward references: the wctob function (7.29.6.1.2).
+    7.30.2.1.1 The iswalnum function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswalnum(wint_t wc);
     Description
 2   The iswalnum function tests for any wide character for which iswalpha or
     iswdigit is true.
-    7.29.2.1.2 The iswalpha function
+    7.30.2.1.2 The iswalpha function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswalpha(wint_t wc);
     Description
 2   The iswalpha function tests for any wide character for which iswupper or
     iswlower is true, or any wide character that is one of a locale-specific set of alphabetic
 
-    340) For example, if the expression isalpha(wctob(wc)) evaluates to true, then the call
+    353) For example, if the expression isalpha(wctob(wc)) evaluates to true, then the call
          iswalpha(wc) also returns true. But, if the expression isgraph(wctob(wc)) evaluates to true
          (which cannot occur for wc == L' ' of course), then either iswgraph(wc) or iswprint(wc)
          && iswspace(wc) is true, but not both.
 
-[page 445] (Contents)
+[page 448] (Contents)
 
     wide characters for which none of iswcntrl, iswdigit, iswpunct, or iswspace
-    is true.341)
-    7.29.2.1.3 The iswblank function
+    is true.354)
+    7.30.2.1.3 The iswblank function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswblank(wint_t wc);
     Description
 2   The iswblank function tests for any wide character that is a standard blank wide
@@ -17322,127 +17496,127 @@ n           No input is consumed. The corresponding argument shall be a pointer
     and that is used to separate words within a line of text. The standard blank wide
     characters are the following: space (L' '), and horizontal tab (L'\t'). In the "C"
     locale, iswblank returns true only for the standard blank characters.
-    7.29.2.1.4 The iswcntrl function
+    7.30.2.1.4 The iswcntrl function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswcntrl(wint_t wc);
     Description
 2   The iswcntrl function tests for any control wide character.
-    7.29.2.1.5 The iswdigit function
+    7.30.2.1.5 The iswdigit function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswdigit(wint_t wc);
     Description
 2   The iswdigit function tests for any wide character that corresponds to a decimal-digit
     character (as defined in 5.2.1).
-    7.29.2.1.6 The iswgraph function
+    7.30.2.1.6 The iswgraph function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswgraph(wint_t wc);
 
 
 
 
-    341) The functions iswlower and iswupper test true or false separately for each of these additional
+    354) The functions iswlower and iswupper test true or false separately for each of these additional
          wide characters; all four combinations are possible.
 
-[page 446] (Contents)
+[page 449] (Contents)
 
     Description
 2   The iswgraph function tests for any wide character for which iswprint is true and
-    iswspace is false.342)
-    7.29.2.1.7 The iswlower function
+    iswspace is false.355)
+    7.30.2.1.7 The iswlower function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswlower(wint_t wc);
     Description
 2   The iswlower function tests for any wide character that corresponds to a lowercase
     letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
     iswdigit, iswpunct, or iswspace is true.
-    7.29.2.1.8 The iswprint function
+    7.30.2.1.8 The iswprint function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswprint(wint_t wc);
     Description
 2   The iswprint function tests for any printing wide character.
-    7.29.2.1.9 The iswpunct function
+    7.30.2.1.9 The iswpunct function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswpunct(wint_t wc);
     Description
 2   The iswpunct function tests for any printing wide character that is one of a locale-
     specific set of punctuation wide characters for which neither iswspace nor iswalnum
-    is true.342)
-    7.29.2.1.10 The iswspace function
+    is true.355)
+    7.30.2.1.10 The iswspace function
     Synopsis
-1           #include <wctype.h>
+1           #include <wctype.h>
             int iswspace(wint_t wc);
 
 
 
-    342) Note that the behavior of the iswgraph and iswpunct functions may differ from their
+    355) Note that the behavior of the iswgraph and iswpunct functions may differ from their
          corresponding functions in 7.4.1 with respect to printing, white-space, single-byte execution
          characters other than ' '.
 
-[page 447] (Contents)
+[page 450] (Contents)
 
     Description
 2   The iswspace function tests for any wide character that corresponds to a locale-specific
     set of white-space wide characters for which none of iswalnum, iswgraph, or
     iswpunct is true.
-    7.29.2.1.11 The iswupper function
+    7.30.2.1.11 The iswupper function
     Synopsis
-1          #include <wctype.h>
-           int iswupper(wint_t wc);
+1           #include <wctype.h>
+            int iswupper(wint_t wc);
     Description
 2   The iswupper function tests for any wide character that corresponds to an uppercase
     letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
     iswdigit, iswpunct, or iswspace is true.
-    7.29.2.1.12 The iswxdigit function
+    7.30.2.1.12 The iswxdigit function
     Synopsis
-1          #include <wctype.h>
-           int iswxdigit(wint_t wc);
+1           #include <wctype.h>
+            int iswxdigit(wint_t wc);
     Description
 2   The iswxdigit function tests for any wide character that corresponds to a
     hexadecimal-digit character (as defined in 6.4.4.1).
-    7.29.2.2 Extensible wide character classification functions
+    7.30.2.2 Extensible wide character classification functions
 1   The functions wctype and iswctype provide extensible wide character classification
     as well as testing equivalent to that performed by the functions described in the previous
-    subclause (7.29.2.1).
-    7.29.2.2.1 The iswctype function
+    subclause (7.30.2.1).
+    7.30.2.2.1 The iswctype function
     Synopsis
-1          #include <wctype.h>
-           int iswctype(wint_t wc, wctype_t desc);
+1           #include <wctype.h>
+            int iswctype(wint_t wc, wctype_t desc);
     Description
 2   The iswctype function determines whether the wide character wc has the property
     described by desc. The current setting of the LC_CTYPE category shall be the same as
     during the call to wctype that returned the value desc.
 3   Each of the following expressions has a truth-value equivalent to the call to the wide
-    character classification function (7.29.2.1) in the comment that follows the expression:
+    character classification function (7.30.2.1) in the comment that follows the expression:
 
-[page 448] (Contents)
+[page 451] (Contents)
 
-            iswctype(wc,      wctype("alnum"))              //   iswalnum(wc)
-            iswctype(wc,      wctype("alpha"))              //   iswalpha(wc)
-            iswctype(wc,      wctype("blank"))              //   iswblank(wc)
-            iswctype(wc,      wctype("cntrl"))              //   iswcntrl(wc)
-            iswctype(wc,      wctype("digit"))              //   iswdigit(wc)
-            iswctype(wc,      wctype("graph"))              //   iswgraph(wc)
-            iswctype(wc,      wctype("lower"))              //   iswlower(wc)
-            iswctype(wc,      wctype("print"))              //   iswprint(wc)
-            iswctype(wc,      wctype("punct"))              //   iswpunct(wc)
-            iswctype(wc,      wctype("space"))              //   iswspace(wc)
-            iswctype(wc,      wctype("upper"))              //   iswupper(wc)
-            iswctype(wc,      wctype("xdigit"))             //   iswxdigit(wc)
+           iswctype(wc,       wctype("alnum"))              //   iswalnum(wc)
+           iswctype(wc,       wctype("alpha"))              //   iswalpha(wc)
+           iswctype(wc,       wctype("blank"))              //   iswblank(wc)
+           iswctype(wc,       wctype("cntrl"))              //   iswcntrl(wc)
+           iswctype(wc,       wctype("digit"))              //   iswdigit(wc)
+           iswctype(wc,       wctype("graph"))              //   iswgraph(wc)
+           iswctype(wc,       wctype("lower"))              //   iswlower(wc)
+           iswctype(wc,       wctype("print"))              //   iswprint(wc)
+           iswctype(wc,       wctype("punct"))              //   iswpunct(wc)
+           iswctype(wc,       wctype("space"))              //   iswspace(wc)
+           iswctype(wc,       wctype("upper"))              //   iswupper(wc)
+           iswctype(wc,       wctype("xdigit"))             //   iswxdigit(wc)
     Returns
 4   The iswctype function returns nonzero (true) if and only if the value of the wide
     character wc has the property described by desc. If desc is zero, the iswctype
     function returns zero (false).
-    Forward references: the wctype function (7.29.2.2.2).
-    7.29.2.2.2 The wctype function
+    Forward references: the wctype function (7.30.2.2.2).
+    7.30.2.2.2 The wctype function
     Synopsis
-1           #include <wctype.h>
-            wctype_t wctype(const char *property);
+1          #include <wctype.h>
+           wctype_t wctype(const char *property);
     Description
 2   The wctype function constructs a value with type wctype_t that describes a class of
     wide characters identified by the string argument property.
@@ -17453,15 +17627,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
     category of the current locale, the wctype function returns a nonzero value that is valid
     as the second argument to the iswctype function; otherwise, it returns zero.
 
-[page 449] (Contents)
+[page 452] (Contents)
 
-    7.29.3 Wide character case mapping utilities
-1   The header <wctype.h> declares several functions useful for mapping wide characters.
-    7.29.3.1 Wide character case mapping functions
-    7.29.3.1.1 The towlower function
+    7.30.3 Wide character case mapping utilities
+1   The header <wctype.h> declares several functions useful for mapping wide characters.
+    7.30.3.1 Wide character case mapping functions
+    7.30.3.1.1 The towlower function
     Synopsis
-1          #include <wctype.h>
-           wint_t towlower(wint_t wc);
+1           #include <wctype.h>
+            wint_t towlower(wint_t wc);
     Description
 2   The towlower function converts an uppercase letter to a corresponding lowercase letter.
     Returns
@@ -17470,10 +17644,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
     iswlower is true, the towlower function returns one of the corresponding wide
     characters (always the same one for any given locale); otherwise, the argument is
     returned unchanged.
-    7.29.3.1.2 The towupper function
+    7.30.3.1.2 The towupper function
     Synopsis
-1          #include <wctype.h>
-           wint_t towupper(wint_t wc);
+1           #include <wctype.h>
+            wint_t towupper(wint_t wc);
     Description
 2   The towupper function converts a lowercase letter to a corresponding uppercase letter.
     Returns
@@ -17482,32 +17656,32 @@ n           No input is consumed. The corresponding argument shall be a pointer
     iswupper is true, the towupper function returns one of the corresponding wide
     characters (always the same one for any given locale); otherwise, the argument is
     returned unchanged.
-    7.29.3.2 Extensible wide character case mapping functions
+    7.30.3.2 Extensible wide character case mapping functions
 1   The functions wctrans and towctrans provide extensible wide character mapping as
     well as case mapping equivalent to that performed by the functions described in the
-    previous subclause (7.29.3.1).
+    previous subclause (7.30.3.1).
 
-[page 450] (Contents)
+[page 453] (Contents)
 
-    7.29.3.2.1 The towctrans function
+    7.30.3.2.1 The towctrans function
     Synopsis
-1           #include <wctype.h>
-            wint_t towctrans(wint_t wc, wctrans_t desc);
+1          #include <wctype.h>
+           wint_t towctrans(wint_t wc, wctrans_t desc);
     Description
 2   The towctrans function maps the wide character wc using the mapping described by
     desc. The current setting of the LC_CTYPE category shall be the same as during the call
     to wctrans that returned the value desc.
 3   Each of the following expressions behaves the same as the call to the wide character case
-    mapping function (7.29.3.1) in the comment that follows the expression:
-            towctrans(wc, wctrans("tolower"))                     // towlower(wc)
-            towctrans(wc, wctrans("toupper"))                     // towupper(wc)
+    mapping function (7.30.3.1) in the comment that follows the expression:
+           towctrans(wc, wctrans("tolower"))                      // towlower(wc)
+           towctrans(wc, wctrans("toupper"))                      // towupper(wc)
     Returns
 4   The towctrans function returns the mapped value of wc using the mapping described
     by desc. If desc is zero, the towctrans function returns the value of wc.
-    7.29.3.2.2 The wctrans function
+    7.30.3.2.2 The wctrans function
     Synopsis
-1           #include <wctype.h>
-            wctrans_t wctrans(const char *property);
+1          #include <wctype.h>
+           wctrans_t wctrans(const char *property);
     Description
 2   The wctrans function constructs a value with type wctrans_t that describes a
     mapping between wide characters identified by the string argument property.
@@ -17518,66 +17692,87 @@ n           No input is consumed. The corresponding argument shall be a pointer
     category of the current locale, the wctrans function returns a nonzero value that is valid
     as the second argument to the towctrans function; otherwise, it returns zero.
 
-[page 451] (Contents)
+[page 454] (Contents)
 
-    7.30 Future library directions
+    7.31 Future library directions
 1   The following names are grouped under individual headers for convenience. All external
     names described below are reserved no matter what headers are included by the program.
-    7.30.1 Complex arithmetic <complex.h>
+    7.31.1 Complex arithmetic <complex.h>
 1   The function names
-          cerf               cexpm1              clog2
-          cerfc              clog10              clgamma
-          cexp2              clog1p              ctgamma
+         cerf                cexpm1              clog2
+         cerfc               clog10              clgamma
+         cexp2               clog1p              ctgamma
     and the same names suffixed with f or l may be added to the declarations in the
     <complex.h> header.
-    7.30.2 Character handling <ctype.h>
+    7.31.2 Character handling <ctype.h>
 1   Function names that begin with either is or to, and a lowercase letter may be added to
     the declarations in the <ctype.h> header.
-    7.30.3 Errors <errno.h>
+    7.31.3 Errors <errno.h>
 1   Macros that begin with E and a digit or E and an uppercase letter may be added to the
-    declarations in the <errno.h> header.
-    7.30.4 Format conversion of integer types <inttypes.h>
-1   Macro names beginning with PRI or SCN followed by any lowercase letter or X may be
+    macros defined in the <errno.h> header.
+    7.31.4 Floating-point environment <fenv.h>
+1   Macros that begin with FE_ and an uppercase letter may be added to the macros defined
+    in the <fenv.h> header.
+    7.31.5 Format conversion of integer types <inttypes.h>
+1   Macros that begin with either PRI or SCN, and either a lowercase letter or X may be
     added to the macros defined in the <inttypes.h> header.
-    7.30.5 Localization <locale.h>
-1   Macros that begin with LC_ and an uppercase letter may be added to the definitions in
-    the <locale.h> header.
-    7.30.6 Signal handling <signal.h>
+    7.31.6 Localization <locale.h>
+1   Macros that begin with LC_ and an uppercase letter may be added to the macros defined
+    in the <locale.h> header.
+    7.31.7 Signal handling <signal.h>
 1   Macros that begin with either SIG and an uppercase letter or SIG_ and an uppercase
-    letter may be added to the definitions in the <signal.h> header.
-    7.30.7 Boolean type and values <stdbool.h>
+    letter may be added to the macros defined in the <signal.h> header.
+    7.31.8 Atomics <stdatomic.h>
+1   Macros that begin with ATOMIC_ and an uppercase letter may be added to the macros
+    defined in the <stdatomic.h> header. Typedef names that begin with either
+    atomic_ or memory_, and a lowercase letter may be added to the declarations in the
+    <stdatomic.h> header. Enumeration constants that begin with memory_order_
+
+[page 455] (Contents)
+
+    and a lowercase letter may be added to the definition of the memory_order type in the
+    <stdatomic.h> header. Function names that begin with atomic_ and a lowercase
+    letter may be added to the declarations in the <stdatomic.h> header.
+    7.31.9 Boolean type and values <stdbool.h>
 1   The ability to undefine and perhaps then redefine the macros bool, true, and false is
     an obsolescent feature.
-    7.30.8 Integer types <stdint.h>
+    7.31.10 Integer types <stdint.h>
 1   Typedef names beginning with int or uint and ending with _t may be added to the
     types defined in the <stdint.h> header. Macro names beginning with INT or UINT
     and ending with _MAX, _MIN, or _C may be added to the macros defined in the
     <stdint.h> header.
-
-[page 452] (Contents)
-
-    7.30.9 Input/output <stdio.h>
+    7.31.11 Input/output <stdio.h>
 1   Lowercase letters may be added to the conversion specifiers and length modifiers in
     fprintf and fscanf. Other characters may be used in extensions.
-2   The use of ungetc on a binary stream where the file position indicator is zero prior to *
+2   The use of ungetc on a binary stream where the file position indicator is zero prior to
     the call is an obsolescent feature.
-    7.30.10 General utilities <stdlib.h>
+    7.31.12 General utilities <stdlib.h>
 1   Function names that begin with str and a lowercase letter may be added to the
     declarations in the <stdlib.h> header.
-    7.30.11 String handling <string.h>
+    7.31.13 String handling <string.h>
 1   Function names that begin with str, mem, or wcs and a lowercase letter may be added
-    to the declarations in the <string.h> header.
-    7.30.12 Extended multibyte and wide character utilities <wchar.h>
+    to the declarations in the <string.h> header.
+    7.31.14 Date and time <time.h>
+    Macros beginning with TIME_ and an uppercase letter may be added to the macros in the
+    <time.h> header.
+    7.31.15 Threads <threads.h>
+1   Function names, type names, and enumeration constants that begin with either cnd_,
+    mtx_, thrd_, or tss_, and a lowercase letter may be added to the declarations in the
+    <threads.h> header.
+    7.31.16 Extended multibyte and wide character utilities <wchar.h>
 1   Function names that begin with wcs and a lowercase letter may be added to the
-    declarations in the <wchar.h> header.
+    declarations in the <wchar.h> header.
 2   Lowercase letters may be added to the conversion specifiers and length modifiers in
     fwprintf and fwscanf. Other characters may be used in extensions.
-    7.30.13 Wide character classification and mapping utilities
-    <wctype.h>
+
+[page 456] (Contents)
+
+    7.31.17 Wide character classification and mapping utilities
+    <wctype.h>
 1   Function names that begin with is or to and a lowercase letter may be added to the
-    declarations in the <wctype.h> header.
+    declarations in the <wctype.h> header.
 
-[page 453] (Contents)
+[page 457] (Contents)
 
                                                  Annex A
                                                (informative)
@@ -17601,25 +17796,25 @@ n           No input is consumed. The corresponding argument shall be a pointer
                   punctuator
                   each non-white-space character that cannot be one of the above
 
-[page 454] (Contents)
+[page 458] (Contents)
 
 A.1.2 Keywords
 (6.4.1) keyword: one of
-              alignof                     goto                  union
-              auto                        if                    unsigned
-              break                       inline                void
-              case                        int                   volatile
-              char                        long                  while
-              const                       register              _Alignas
-              continue                    restrict              _Atomic
-              default                     return                _Bool
-              do                          short                 _Complex
-              double                      signed                _Generic
-              else                        sizeof                _Imaginary
-              enum                        static                _Noreturn
-              extern                      struct                _Static_assert
-              float                       switch                _Thread_local
-              for                         typedef
+              auto                     * if                     unsigned
+              break                      inline                 void
+              case                       int                    volatile
+              char                       long                   while
+              const                      register               _Alignas
+              continue                   restrict               _Alignof
+              default                    return                 _Atomic
+              do                         short                  _Bool
+              double                     signed                 _Complex
+              else                       sizeof                 _Generic
+              enum                       static                 _Imaginary
+              extern                     struct                 _Noreturn
+              float                      switch                 _Static_assert
+              for                        typedef                _Thread_local
+              goto                       union
 A.1.3 Identifiers
 (6.4.2.1) identifier:
                identifier-nondigit
@@ -17630,14 +17825,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
                universal-character-name
                other implementation-defined characters
 (6.4.2.1) nondigit: one of
-              _ a b          c    d   e    f   g   h    i   j   k   l   m
-                   n o       p    q   r    s   t   u    v   w   x   y   z
-                   A B       C    D   E    F   G   H    I   J   K   L   M
-                   N O       P    Q   R    S   T   U    V   W   X   Y   Z
+              _ a b           c    d   e   f   g   h    i   j   k   l   m
+                   n o        p    q   r   s   t   u    v   w   x   y   z
+                   A B        C    D   E   F   G   H    I   J   K   L   M
+                   N O        P    Q   R   S   T   U    V   W   X   Y   Z
 (6.4.2.1) digit: one of
-               0 1 2         3    4   5    6   7   8    9
+               0 1 2          3    4   5   6   7   8    9
 
-[page 455] (Contents)
+[page 459] (Contents)
 
 A.1.4 Universal character names
 (6.4.3) universal-character-name:
@@ -17672,7 +17867,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 (6.4.4.1) octal-digit: one of
                0 1 2 3           4   5      6   7
 
-[page 456] (Contents)
+[page 460] (Contents)
 
 (6.4.4.1) hexadecimal-digit: one of
               0 1 2 3 4 5                6    7    8   9
@@ -17709,7 +17904,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 (6.4.4.2) sign: one of
                + -
 
-[page 457] (Contents)
+[page 461] (Contents)
 
 (6.4.4.2) digit-sequence:
                digit
@@ -17746,7 +17941,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
               hexadecimal-escape-sequence
               universal-character-name
 
-[page 458] (Contents)
+[page 462] (Contents)
 
 (6.4.4.4) simple-escape-sequence: one of
               \' \" \? \\
@@ -17777,13 +17972,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
 (6.4.6) punctuator: one of
               [ ] ( ) { } . ->
               ++ -- & * + - ~ !
-              / % << >> < > <= >=                      ==    !=    ^    |   &&   ||
+              / % << >> < > <= >=                      ==     !=    ^    |   &&   ||
               ? : ; ...
-              = *= /= %= += -= <<=                     >>=    &=       ^=   |=
+              = *= /= %= += -= <<=                     >>=     &=       ^=   |=
               , # ##
               <: :> <% %> %: %:%:
 
-[page 459] (Contents)
+[page 463] (Contents)
 
 A.1.8 Header names
 (6.4.7) header-name:
@@ -17813,7 +18008,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
               pp-number   P sign
               pp-number   .
 
-[page 460] (Contents)
+[page 464] (Contents)
 
 A.2 Phrase structure grammar
 A.2.1 Expressions
@@ -17851,9 +18046,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
               unary-operator cast-expression
               sizeof unary-expression
               sizeof ( type-name )
-              alignof ( type-name )
+              _Alignof ( type-name )
 
-[page 461] (Contents)
+[page 465] (Contents)
 
 (6.5.3) unary-operator: one of
               & * + - ~                !
@@ -17890,7 +18085,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
               AND-expression
               exclusive-OR-expression ^ AND-expression
 
-[page 462] (Contents)
+[page 466] (Contents)
 
 (6.5.12) inclusive-OR-expression:
                exclusive-OR-expression
@@ -17928,7 +18123,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                init-declarator
                init-declarator-list , init-declarator
 
-[page 463] (Contents)
+[page 467] (Contents)
 
 (6.7) init-declarator:
                declarator
@@ -17969,7 +18164,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                specifier-qualifier-list struct-declarator-listopt ;
                static_assert-declaration
 
-[page 464] (Contents)
+[page 468] (Contents)
 
 (6.7.2.1) specifier-qualifier-list:
                type-specifier specifier-qualifier-listopt
@@ -18006,7 +18201,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 (6.7.6) declarator:
               pointeropt direct-declarator
 
-[page 465] (Contents)
+[page 469] (Contents)
 
 (6.7.6) direct-declarator:
                identifier
@@ -18041,7 +18236,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
               pointer
               pointeropt direct-abstract-declarator
 
-[page 466] (Contents)
+[page 470] (Contents)
 
 (6.7.7) direct-abstract-declarator:
                ( abstract-declarator )
@@ -18073,7 +18268,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 (6.7.10) static_assert-declaration:
                _Static_assert ( constant-expression , string-literal ) ;
 
-[page 467] (Contents)
+[page 471] (Contents)
 
 A.2.3 Statements
 (6.8) statement:
@@ -18112,7 +18307,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
               break ;
               return expressionopt ;
 
-[page 468] (Contents)
+[page 472] (Contents)
 
 A.2.4 External definitions
 (6.9) translation-unit:
@@ -18147,9 +18342,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
                elif-group
                elif-groups elif-group
 (6.10) elif-group:
-               # elif       constant-expression new-line groupopt
+               # elif        constant-expression new-line groupopt
 
-[page 469] (Contents)
+[page 473] (Contents)
 
 (6.10) else-group:
                # else        new-line groupopt
@@ -18182,19 +18377,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
 (6.10) new-line:
               the new-line character
 
-[page 470] (Contents)
+[page 474] (Contents)
 
-                               Annex B
-                             (informative)
-                         Library summary
+                                  Annex B
+                                (informative)
+                            Library summary
 B.1 Diagnostics <assert.h>
         NDEBUG
         static_assert
         void assert(scalar expression);
 B.2 Complex <complex.h>
-        __STDC_NO_COMPLEX__           imaginary
-        complex                         _Imaginary_I
-        _Complex_I                      I
+        __STDC_NO_COMPLEX__              imaginary
+        complex                            _Imaginary_I
+        _Complex_I                         I
         #pragma STDC CX_LIMITED_RANGE on-off-switch
         double complex cacos(double complex z);
         float complex cacosf(float complex z);
@@ -18221,7 +18416,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
         float complex casinhf(float complex z);
         long double complex casinhl(long double complex z);
 
-[page 471] (Contents)
+[page 475] (Contents)
 
       double complex catanh(double complex z);
       float complex catanhf(float complex z);
@@ -18265,7 +18460,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       long double complex conjl(long double complex z);
       double complex cproj(double complex z);
 
-[page 472] (Contents)
+[page 476] (Contents)
 
         float complex cprojf(float complex z);
         long double complex cprojl(long double complex z);
@@ -18288,13 +18483,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
         int   tolower(int c);
         int   toupper(int c);
 B.4 Errors <errno.h>
-        EDOM           EILSEQ            ERANGE           errno
+        EDOM           EILSEQ             ERANGE          errno
         __STDC_WANT_LIB_EXT1__
         errno_t
 B.5 Floating-point environment <fenv.h>
-        fenv_t               FE_OVERFLOW             FE_TOWARDZERO
-        fexcept_t            FE_UNDERFLOW            FE_UPWARD
-        FE_DIVBYZERO         FE_ALL_EXCEPT           FE_DFL_ENV
+        fenv_t               FE_OVERFLOW              FE_TOWARDZERO
+        fexcept_t            FE_UNDERFLOW             FE_UPWARD
+        FE_DIVBYZERO         FE_ALL_EXCEPT            FE_DFL_ENV
         FE_INEXACT           FE_DOWNWARD
         FE_INVALID           FE_TONEAREST
         #pragma STDC FENV_ACCESS on-off-switch
@@ -18305,7 +18500,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
              int excepts);
         int fetestexcept(int excepts);
 
-[page 473] (Contents)
+[page 477] (Contents)
 
       int   fegetround(void);
       int   fesetround(int round);
@@ -18314,39 +18509,39 @@ n           No input is consumed. The corresponding argument shall be a pointer
       int   fesetenv(const fenv_t *envp);
       int   feupdateenv(const fenv_t *envp);
 B.6 Characteristics of floating types <float.h>
-      FLT_ROUNDS              DBL_DIG                 FLT_MAX
-      FLT_EVAL_METHOD         LDBL_DIG                DBL_MAX
-      FLT_HAS_SUBNORM         FLT_MIN_EXP             LDBL_MAX
-      DBL_HAS_SUBNORM         DBL_MIN_EXP             FLT_EPSILON
-      LDBL_HAS_SUBNORM        LDBL_MIN_EXP            DBL_EPSILON
-      FLT_RADIX               FLT_MIN_10_EXP          LDBL_EPSILON
-      FLT_MANT_DIG            DBL_MIN_10_EXP          FLT_MIN
-      DBL_MANT_DIG            LDBL_MIN_10_EXP         DBL_MIN
-      LDBL_MANT_DIG           FLT_MAX_EXP             LDBL_MIN
-      FLT_DECIMAL_DIG         DBL_MAX_EXP             FLT_TRUE_MIN
-      DBL_DECIMAL_DIG         LDBL_MAX_EXP            DBL_TRUE_MIN
-      LDBL_DECIMAL_DIG        FLT_MAX_10_EXP          LDBL_TRUE_MIN
-      DECIMAL_DIG             DBL_MAX_10_EXP
-      FLT_DIG                 LDBL_MAX_10_EXP
+      FLT_ROUNDS             DBL_DIG                  FLT_MAX
+      FLT_EVAL_METHOD        LDBL_DIG                 DBL_MAX
+      FLT_HAS_SUBNORM        FLT_MIN_EXP              LDBL_MAX
+      DBL_HAS_SUBNORM        DBL_MIN_EXP              FLT_EPSILON
+      LDBL_HAS_SUBNORM       LDBL_MIN_EXP             DBL_EPSILON
+      FLT_RADIX              FLT_MIN_10_EXP           LDBL_EPSILON
+      FLT_MANT_DIG           DBL_MIN_10_EXP           FLT_MIN
+      DBL_MANT_DIG           LDBL_MIN_10_EXP          DBL_MIN
+      LDBL_MANT_DIG          FLT_MAX_EXP              LDBL_MIN
+      FLT_DECIMAL_DIG        DBL_MAX_EXP              FLT_TRUE_MIN
+      DBL_DECIMAL_DIG        LDBL_MAX_EXP             DBL_TRUE_MIN
+      LDBL_DECIMAL_DIG       FLT_MAX_10_EXP           LDBL_TRUE_MIN
+      DECIMAL_DIG            DBL_MAX_10_EXP
+      FLT_DIG                LDBL_MAX_10_EXP
 B.7 Format conversion of integer types <inttypes.h>
       imaxdiv_t
-      PRIdN         PRIdLEASTN       PRIdFASTN        PRIdMAX    PRIdPTR
-      PRIiN         PRIiLEASTN       PRIiFASTN        PRIiMAX    PRIiPTR
-      PRIoN         PRIoLEASTN       PRIoFASTN        PRIoMAX    PRIoPTR
-      PRIuN         PRIuLEASTN       PRIuFASTN        PRIuMAX    PRIuPTR
-      PRIxN         PRIxLEASTN       PRIxFASTN        PRIxMAX    PRIxPTR
-      PRIXN         PRIXLEASTN       PRIXFASTN        PRIXMAX    PRIXPTR
-      SCNdN         SCNdLEASTN       SCNdFASTN        SCNdMAX    SCNdPTR
-      SCNiN         SCNiLEASTN       SCNiFASTN        SCNiMAX    SCNiPTR
-      SCNoN         SCNoLEASTN       SCNoFASTN        SCNoMAX    SCNoPTR
-      SCNuN         SCNuLEASTN       SCNuFASTN        SCNuMAX    SCNuPTR
-      SCNxN         SCNxLEASTN       SCNxFASTN        SCNxMAX    SCNxPTR
+      PRIdN         PRIdLEASTN       PRIdFASTN            PRIdMAX   PRIdPTR
+      PRIiN         PRIiLEASTN       PRIiFASTN            PRIiMAX   PRIiPTR
+      PRIoN         PRIoLEASTN       PRIoFASTN            PRIoMAX   PRIoPTR
+      PRIuN         PRIuLEASTN       PRIuFASTN            PRIuMAX   PRIuPTR
+      PRIxN         PRIxLEASTN       PRIxFASTN            PRIxMAX   PRIxPTR
+      PRIXN         PRIXLEASTN       PRIXFASTN            PRIXMAX   PRIXPTR
+      SCNdN         SCNdLEASTN       SCNdFASTN            SCNdMAX   SCNdPTR
+      SCNiN         SCNiLEASTN       SCNiFASTN            SCNiMAX   SCNiPTR
+      SCNoN         SCNoLEASTN       SCNoFASTN            SCNoMAX   SCNoPTR
+      SCNuN         SCNuLEASTN       SCNuFASTN            SCNuMAX   SCNuPTR
+      SCNxN         SCNxLEASTN       SCNxFASTN            SCNxMAX   SCNxPTR
       intmax_t imaxabs(intmax_t j);
       imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
       intmax_t strtoimax(const char * restrict nptr,
               char ** restrict endptr, int base);
 
-[page 474] (Contents)
+[page 478] (Contents)
 
         uintmax_t strtoumax(const char * restrict nptr,
                 char ** restrict endptr, int base);
@@ -18355,27 +18550,27 @@ n           No input is consumed. The corresponding argument shall be a pointer
         uintmax_t wcstoumax(const wchar_t * restrict nptr,
                 wchar_t ** restrict endptr, int base);
 B.8 Alternative spellings <iso646.h>
-        and            bitor             not_eq           xor
-        and_eq         compl             or               xor_eq
-        bitand         not               or_eq
+        and            bitor              not_eq          xor
+        and_eq         compl              or              xor_eq
+        bitand         not                or_eq
 B.9 Sizes of integer types <limits.h>
-        CHAR_BIT       CHAR_MAX          INT_MIN          ULONG_MAX
-        SCHAR_MIN      MB_LEN_MAX        INT_MAX          LLONG_MIN
-        SCHAR_MAX      SHRT_MIN          UINT_MAX         LLONG_MAX
-        UCHAR_MAX      SHRT_MAX          LONG_MIN         ULLONG_MAX
-        CHAR_MIN       USHRT_MAX         LONG_MAX
+        CHAR_BIT       CHAR_MAX           INT_MIN         ULONG_MAX
+        SCHAR_MIN      MB_LEN_MAX         INT_MAX         LLONG_MIN
+        SCHAR_MAX      SHRT_MIN           UINT_MAX        LLONG_MAX
+        UCHAR_MAX      SHRT_MAX           LONG_MIN        ULLONG_MAX
+        CHAR_MIN       USHRT_MAX          LONG_MAX
 B.10 Localization <locale.h>
-        struct lconv   LC_ALL            LC_CTYPE         LC_NUMERIC
-        NULL           LC_COLLATE        LC_MONETARY      LC_TIME
+        struct lconv   LC_ALL             LC_CTYPE        LC_NUMERIC
+        NULL           LC_COLLATE         LC_MONETARY     LC_TIME
         char *setlocale(int category, const char *locale);
         struct lconv *localeconv(void);
 B.11 Mathematics <math.h>
-        float_t              FP_INFINITE             FP_FAST_FMAL
-        double_t             FP_NAN                  FP_ILOGB0
-        HUGE_VAL             FP_NORMAL               FP_ILOGBNAN
-        HUGE_VALF            FP_SUBNORMAL            MATH_ERRNO
-        HUGE_VALL            FP_ZERO                 MATH_ERREXCEPT
-        INFINITY             FP_FAST_FMA             math_errhandling
+        float_t              FP_INFINITE              FP_FAST_FMAL
+        double_t             FP_NAN                   FP_ILOGB0
+        HUGE_VAL             FP_NORMAL                FP_ILOGBNAN
+        HUGE_VALF            FP_SUBNORMAL             MATH_ERRNO
+        HUGE_VALL            FP_ZERO                  MATH_ERREXCEPT
+        INFINITY             FP_FAST_FMA              math_errhandling
         NAN                  FP_FAST_FMAF
         #pragma STDC FP_CONTRACT on-off-switch
         int fpclassify(real-floating x);
@@ -18385,7 +18580,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
         int isnormal(real-floating x);
         int signbit(real-floating x);
 
-[page 475] (Contents)
+[page 479] (Contents)
 
       double acos(double x);
       float acosf(float x);
@@ -18429,7 +18624,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       double exp(double x);
       float expf(float x);
 
-[page 476] (Contents)
+[page 480] (Contents)
 
         long double expl(long double x);
         double exp2(double x);
@@ -18473,7 +18668,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
         long double scalblnl(long double x, long int n);
         double cbrt(double x);
 
-[page 477] (Contents)
+[page 481] (Contents)
 
       float cbrtf(float x);
       long double cbrtl(long double x);
@@ -18517,7 +18712,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       long int lrintf(float x);
       long int lrintl(long double x);
 
-[page 478] (Contents)
+[page 482] (Contents)
 
         long long int llrint(double x);
         long long int llrintf(float x);
@@ -18561,7 +18756,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
         long double fdiml(long double x, long double y);
         double fmax(double x, double y);
 
-[page 479] (Contents)
+[page 483] (Contents)
 
       float fmaxf(float x, float y);
       long double fmaxl(long double x, long double y);
@@ -18583,13 +18778,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
       int setjmp(jmp_buf env);
       _Noreturn void longjmp(jmp_buf env, int val);
 B.13 Signal handling <signal.h>
-      sig_atomic_t    SIG_IGN           SIGILL           SIGTERM
-      SIG_DFL         SIGABRT           SIGINT
-      SIG_ERR         SIGFPE            SIGSEGV
+      sig_atomic_t   SIG_IGN            SIGILL          SIGTERM
+      SIG_DFL        SIGABRT            SIGINT
+      SIG_ERR        SIGFPE             SIGSEGV
       void (*signal(int sig, void (*func)(int)))(int);
       int raise(int sig);
 
-[page 480] (Contents)
+[page 484] (Contents)
 
 B.14 Alignment <stdalign.h>
         alignas
@@ -18601,43 +18796,43 @@ n           No input is consumed. The corresponding argument shall be a pointer
         void va_end(va_list ap);
         void va_start(va_list ap, parmN);
 B.16 Atomics <stdatomic.h>
-        ATOMIC_CHAR_LOCK_FREE           atomic_uint
-        ATOMIC_CHAR16_T_LOCK_FREE       atomic_long
-        ATOMIC_CHAR32_T_LOCK_FREE       atomic_ulong
-        ATOMIC_WCHAR_T_LOCK_FREE        atomic_llong
-        ATOMIC_SHORT_LOCK_FREE          atomic_ullong
-        ATOMIC_INT_LOCK_FREE            atomic_char16_t
-        ATOMIC_LONG_LOCK_FREE           atomic_char32_t
-        ATOMIC_LLONG_LOCK_FREE          atomic_wchar_t
-        ATOMIC_ADDRESS_LOCK_FREE        atomic_int_least8_t
-        ATOMIC_FLAG_INIT                atomic_uint_least8_t
-        memory_order                    atomic_int_least16_t
-        atomic_flag                     atomic_uint_least16_t
-        atomic_bool                     atomic_int_least32_t
-        atomic_address                  atomic_uint_least32_t
-        memory_order_relaxed            atomic_int_least64_t
-        memory_order_consume            atomic_uint_least64_t
-        memory_order_acquire            atomic_int_fast8_t
-        memory_order_release            atomic_uint_fast8_t
-        memory_order_acq_rel            atomic_int_fast16_t
-        memory_order_seq_cst            atomic_uint_fast16_t
-        atomic_char                     atomic_int_fast32_t
-        atomic_schar                    atomic_uint_fast32_t
-        atomic_uchar                    atomic_int_fast64_t
-        atomic_short                    atomic_uint_fast64_t
-        atomic_ushort                   atomic_intptr_t
-        atomic_int                      atomic_uintptr_t
+        ATOMIC_BOOL_LOCK_FREE       atomic_uint
+        ATOMIC_CHAR_LOCK_FREE       atomic_long
+        ATOMIC_CHAR16_T_LOCK_FREE   atomic_ulong
+        ATOMIC_CHAR32_T_LOCK_FREE   atomic_llong
+        ATOMIC_WCHAR_T_LOCK_FREE    atomic_ullong
+        ATOMIC_SHORT_LOCK_FREE      atomic_char16_t
+        ATOMIC_INT_LOCK_FREE        atomic_char32_t
+        ATOMIC_LONG_LOCK_FREE       atomic_wchar_t
+        ATOMIC_LLONG_LOCK_FREE      atomic_int_least8_t
+        ATOMIC_POINTER_LOCK_FREE    atomic_uint_least8_t
+        ATOMIC_FLAG_INIT            atomic_int_least16_t
+        memory_order                atomic_uint_least16_t
+        atomic_flag                 atomic_int_least32_t
+        memory_order_relaxed      * atomic_uint_least32_t
+        memory_order_consume        atomic_int_least64_t
+        memory_order_acquire        atomic_uint_least64_t
+        memory_order_release        atomic_int_fast8_t
+        memory_order_acq_rel        atomic_uint_fast8_t
+        memory_order_seq_cst        atomic_int_fast16_t
+        atomic_bool                 atomic_uint_fast16_t
+        atomic_char                 atomic_int_fast32_t
+        atomic_schar                atomic_uint_fast32_t
+        atomic_uchar                atomic_int_fast64_t
+        atomic_short                atomic_uint_fast64_t
+        atomic_ushort               atomic_intptr_t
+        atomic_int                  atomic_uintptr_t
 
-[page 481] (Contents)
+[page 485] (Contents)
 
-      atomic_size_t                     atomic_intmax_t
-      atomic_ptrdiff_t                  atomic_uintmax_t
+      atomic_size_t                    atomic_intmax_t
+      atomic_ptrdiff_t                 atomic_uintmax_t
       #define ATOMIC_VAR_INIT(C value)
       void atomic_init(volatile A *obj, C value);
       type kill_dependency(type y);
       void atomic_thread_fence(memory_order order);
       void atomic_signal_fence(memory_order order);
-      _Bool atomic_is_lock_free(atomic_type const volatile *obj);
+      _Bool atomic_is_lock_free(const volatile A *obj);
       void atomic_store(volatile A *object, C desired);
       void atomic_store_explicit(volatile A *object,
             C desired, memory_order order);
@@ -18660,15 +18855,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
       C atomic_fetch_key(volatile A *object, M operand);
       C atomic_fetch_key_explicit(volatile A *object,
             M operand, memory_order order);
-      bool atomic_flag_test_and_set(
+      _Bool atomic_flag_test_and_set(
             volatile atomic_flag *object);
-      bool atomic_flag_test_and_set_explicit(
+      _Bool atomic_flag_test_and_set_explicit(
             volatile atomic_flag *object, memory_order order);
       void atomic_flag_clear(volatile atomic_flag *object);
       void atomic_flag_clear_explicit(
             volatile atomic_flag *object, memory_order order);
 
-[page 482] (Contents)
+[page 486] (Contents)
 
 B.17 Boolean type and values <stdbool.h>
         bool
@@ -18676,36 +18871,36 @@ n           No input is consumed. The corresponding argument shall be a pointer
         false
         __bool_true_false_are_defined
 B.18 Common definitions <stddef.h>
-        ptrdiff_t       max_align_t       NULL
+        ptrdiff_t       max_align_t        NULL
         size_t          wchar_t
         offsetof(type, member-designator)
         __STDC_WANT_LIB_EXT1__
         rsize_t
 B.19 Integer types <stdint.h>
-        intN_t                INT_LEASTN_MIN          PTRDIFF_MAX
-        uintN_t               INT_LEASTN_MAX          SIG_ATOMIC_MIN
-        int_leastN_t          UINT_LEASTN_MAX         SIG_ATOMIC_MAX
-        uint_leastN_t         INT_FASTN_MIN           SIZE_MAX
-        int_fastN_t           INT_FASTN_MAX           WCHAR_MIN
-        uint_fastN_t          UINT_FASTN_MAX          WCHAR_MAX
-        intptr_t              INTPTR_MIN              WINT_MIN
-        uintptr_t             INTPTR_MAX              WINT_MAX
-        intmax_t              UINTPTR_MAX             INTN_C(value)
-        uintmax_t             INTMAX_MIN              UINTN_C(value)
-        INTN_MIN              INTMAX_MAX              INTMAX_C(value)
-        INTN_MAX              UINTMAX_MAX             UINTMAX_C(value)
+        intN_t                INT_LEASTN_MIN           PTRDIFF_MAX
+        uintN_t               INT_LEASTN_MAX           SIG_ATOMIC_MIN
+        int_leastN_t          UINT_LEASTN_MAX          SIG_ATOMIC_MAX
+        uint_leastN_t         INT_FASTN_MIN            SIZE_MAX
+        int_fastN_t           INT_FASTN_MAX            WCHAR_MIN
+        uint_fastN_t          UINT_FASTN_MAX           WCHAR_MAX
+        intptr_t              INTPTR_MIN               WINT_MIN
+        uintptr_t             INTPTR_MAX               WINT_MAX
+        intmax_t              UINTPTR_MAX              INTN_C(value)
+        uintmax_t             INTMAX_MIN               UINTN_C(value)
+        INTN_MIN              INTMAX_MAX               INTMAX_C(value)
+        INTN_MAX              UINTMAX_MAX              UINTMAX_C(value)
         UINTN_MAX             PTRDIFF_MIN
         __STDC_WANT_LIB_EXT1__
         RSIZE_MAX
 
-[page 483] (Contents)
+[page 487] (Contents)
 
 B.20 Input/output <stdio.h>
-      size_t          _IOLBF            FILENAME_MAX     TMP_MAX
-      FILE            _IONBF            L_tmpnam         stderr
-      fpos_t          BUFSIZ            SEEK_CUR         stdin
-      NULL            EOF               SEEK_END         stdout
-      _IOFBF          FOPEN_MAX         SEEK_SET
+      size_t        _IOLBF             FILENAME_MAX    TMP_MAX
+      FILE          _IONBF             L_tmpnam        stderr
+      fpos_t        BUFSIZ             SEEK_CUR        stdin
+      NULL          EOF                SEEK_END        stdout
+      _IOFBF        FOPEN_MAX          SEEK_SET
       int remove(const char *filename);
       int rename(const char *old, const char *new);
       FILE *tmpfile(void);
@@ -18741,7 +18936,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       int vprintf(const char * restrict format, va_list arg);
       int vscanf(const char * restrict format, va_list arg);
 
-[page 484] (Contents)
+[page 488] (Contents)
 
         int vsnprintf(char * restrict s, size_t n,
              const char * restrict format, va_list arg);
@@ -18757,7 +18952,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
              FILE * restrict stream);
         int getc(FILE *stream);
         int getchar(void);
-        int putc(int c, FILE *stream);                                       *
+        int putc(int c, FILE *stream);
         int putchar(int c);
         int puts(const char *s);
         int ungetc(int c, FILE *stream);
@@ -18778,11 +18973,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
         int ferror(FILE *stream);
         void perror(const char *s);
         __STDC_WANT_LIB_EXT1__
-        L_tmpnam_s    TMP_MAX_S         errno_t          rsize_t
+        L_tmpnam_s    TMP_MAX_S         errno_t         rsize_t
         errno_t tmpfile_s(FILE * restrict * restrict streamptr);
         errno_t tmpnam_s(char *s, rsize_t maxsize);
 
-[page 485] (Contents)
+[page 489] (Contents)
 
       errno_t fopen_s(FILE * restrict * restrict streamptr,
            const char * restrict filename,
@@ -18824,12 +19019,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
            va_list arg);
       char *gets_s(char *s, rsize_t n);
 
-[page 486] (Contents)
+[page 490] (Contents)
 
 B.21 General utilities <stdlib.h>
-        size_t       ldiv_t            EXIT_FAILURE     MB_CUR_MAX
-        wchar_t      lldiv_t           EXIT_SUCCESS
-        div_t        NULL              RAND_MAX
+        size_t       ldiv_t             EXIT_FAILURE    MB_CUR_MAX
+        wchar_t      lldiv_t            EXIT_SUCCESS
+        div_t        NULL               RAND_MAX
         double atof(const char *nptr);
         int atoi(const char *nptr);
         long int atol(const char *nptr);
@@ -18866,7 +19061,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
         _Noreturn void quick_exit(int status);
         int system(const char *string);
 
-[page 487] (Contents)
+[page 491] (Contents)
 
       void *bsearch(const void *key, const void *base,
            size_t nmemb, size_t size,
@@ -18906,7 +19101,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                 char * restrict value, rsize_t maxsize,
                 const char * restrict name);
 
-[page 488] (Contents)
+[page 492] (Contents)
 
         void *bsearch_s(const void *key, const void *base,
              rsize_t nmemb, rsize_t size,
@@ -18927,30 +19122,32 @@ n           No input is consumed. The corresponding argument shall be a pointer
         errno_t wcstombs_s(size_t * restrict retval,
              char * restrict dst, rsize_t dstmax,
              const wchar_t * restrict src, rsize_t len);
-B.22 String handling <string.h>
+B.22 _Noreturn <stdnoreturn.h>
+        noreturn
+B.23 String handling <string.h>
         size_t
         NULL
-        void *memcpy(void * restrict s1,
-             const void * restrict s2, size_t n);
-        void *memmove(void *s1, const void *s2, size_t n);
-        char *strcpy(char * restrict s1,
-             const char * restrict s2);
-        char *strncpy(char * restrict s1,
-             const char * restrict s2, size_t n);
-        char *strcat(char * restrict s1,
-             const char * restrict s2);
-        char *strncat(char * restrict s1,
-             const char * restrict s2, size_t n);
-        int memcmp(const void *s1, const void *s2, size_t n);
-        int strcmp(const char *s1, const char *s2);
-        int strcoll(const char *s1, const char *s2);
-        int strncmp(const char *s1, const char *s2, size_t n);
-        size_t strxfrm(char * restrict s1,
-             const char * restrict s2, size_t n);
-        void *memchr(const void *s, int c, size_t n);
+      void *memcpy(void * restrict s1,
+           const void * restrict s2, size_t n);
+      void *memmove(void *s1, const void *s2, size_t n);
+      char *strcpy(char * restrict s1,
+           const char * restrict s2);
+      char *strncpy(char * restrict s1,
+           const char * restrict s2, size_t n);
+      char *strcat(char * restrict s1,
+           const char * restrict s2);
+      char *strncat(char * restrict s1,
+           const char * restrict s2, size_t n);
+      int memcmp(const void *s1, const void *s2, size_t n);
+      int strcmp(const char *s1, const char *s2);
+      int strcoll(const char *s1, const char *s2);
+      int strncmp(const char *s1, const char *s2, size_t n);
 
-[page 489] (Contents)
+[page 493] (Contents)
 
+      size_t strxfrm(char * restrict s1,
+           const char * restrict s2, size_t n);
+      void *memchr(const void *s, int c, size_t n);
       char *strchr(const char *s, int c);
       size_t strcspn(const char *s1, const char *s2);
       char *strpbrk(const char *s1, const char *s2);
@@ -18988,55 +19185,56 @@ n           No input is consumed. The corresponding argument shall be a pointer
            const char * restrict s2,
            char ** restrict ptr);
       errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n)
-      errno_t strerror_s(char *s, rsize_t maxsize,
-           errno_t errnum);
-      size_t strerrorlen_s(errno_t errnum);
 
-[page 490] (Contents)
+[page 494] (Contents)
 
+        errno_t strerror_s(char *s, rsize_t maxsize,
+             errno_t errnum);
+        size_t strerrorlen_s(errno_t errnum);
         size_t strnlen_s(const char *s, size_t maxsize);
-B.23 Type-generic math <tgmath.h>
-        acos         sqrt              fmod             nextafter
-        asin         fabs              frexp            nexttoward
-        atan         atan2             hypot            remainder
-        acosh        cbrt              ilogb            remquo
-        asinh        ceil              ldexp            rint
-        atanh        copysign          lgamma           round
-        cos          erf               llrint           scalbn
-        sin          erfc              llround          scalbln
-        tan          exp2              log10            tgamma
-        cosh         expm1             log1p            trunc
-        sinh         fdim              log2             carg
-        tanh         floor             logb             cimag
-        exp          fma               lrint            conj
-        log          fmax              lround           cproj
-        pow          fmin              nearbyint        creal
-B.24 Threads <threads.h>
-        ONCE_FLAG_INIT                 mtx_plain
-        TSS_DTOR_ITERATIONS            mtx_recursive
-        cnd_t                          mtx_timed
-        thrd_t                         mtx_try
-        tss_t                          thrd_timeout
-        mtx_t                          thrd_success
-        tss_dtor_t                     thrd_busy
-        thrd_start_t                   thrd_error
-        once_flag                      thrd_nomem
-        xtime
+B.24 Type-generic math <tgmath.h>
+        acos         sqrt               fmod            nextafter
+        asin         fabs               frexp           nexttoward
+        atan         atan2              hypot           remainder
+        acosh        cbrt               ilogb           remquo
+        asinh        ceil               ldexp           rint
+        atanh        copysign           lgamma          round
+        cos          erf                llrint          scalbn
+        sin          erfc               llround         scalbln
+        tan          exp2               log10           tgamma
+        cosh         expm1              log1p           trunc
+        sinh         fdim               log2            carg
+        tanh         floor              logb            cimag
+        exp          fma                lrint           conj
+        log          fmax               lround          cproj
+        pow          fmin               nearbyint       creal
+B.25 Threads <threads.h>
+        thread_local                    once_flag
+        ONCE_FLAG_INIT                  mtx_plain                     *
+        TSS_DTOR_ITERATIONS             mtx_recursive
+        cnd_t                           mtx_timed
+        thrd_t                          thrd_timedout
+        tss_t                           thrd_success
+        mtx_t                           thrd_busy
+        tss_dtor_t                      thrd_error
+        thrd_start_t                    thrd_nomem
       void call_once(once_flag *flag, void (*func)(void));
       int cnd_broadcast(cnd_t *cond);
       void cnd_destroy(cnd_t *cond);
       int cnd_init(cnd_t *cond);
       int cnd_signal(cnd_t *cond);
-      int cnd_timedwait(cnd_t *cond, mtx_t *mtx,
-           const xtime *xt);
+      int cnd_timedwait(cnd_t *restrict cond,
+           mtx_t *restrict mtx,
+           const struct timespec *restrict ts);
       int cnd_wait(cnd_t *cond, mtx_t *mtx);
+
+[page 495] (Contents)
+
       void mtx_destroy(mtx_t *mtx);
       int mtx_init(mtx_t *mtx, int type);
       int mtx_lock(mtx_t *mtx);
-
-[page 491] (Contents)
-
-      int mtx_timedlock(mtx_t *mtx, const xtime *xt);
+      int mtx_timedlock(mtx_t *restrict mtx,
+           const struct timespec *restrict ts);
       int mtx_trylock(mtx_t *mtx);
       int mtx_unlock(mtx_t *mtx);
       int thrd_create(thrd_t *thr, thrd_start_t func,
@@ -19044,22 +19242,24 @@ n           No input is consumed. The corresponding argument shall be a pointer
       thrd_t thrd_current(void);
       int thrd_detach(thrd_t thr);
       int thrd_equal(thrd_t thr0, thrd_t thr1);
-      void thrd_exit(int res);
+      _Noreturn void thrd_exit(int res);
       int thrd_join(thrd_t thr, int *res);
-      void thrd_sleep(const xtime *xt);
+      int thrd_sleep(const struct timespec *duration,
+           struct timespec *remaining);
       void thrd_yield(void);
       int tss_create(tss_t *key, tss_dtor_t dtor);
       void tss_delete(tss_t key);
       void *tss_get(tss_t key);
       int tss_set(tss_t key, void *val);
-      int xtime_get(xtime *xt, int base);
-B.25 Date and time <time.h>
-      NULL                  size_t                  time_t
-      CLOCKS_PER_SEC        clock_t                 struct tm
+B.26 Date and time <time.h>
+      NULL                size_t                   struct timespec
+      CLOCKS_PER_SEC      clock_t                  struct tm
+      TIME_UTC            time_t
       clock_t clock(void);
       double difftime(time_t time1, time_t time0);
       time_t mktime(struct tm *timeptr);
       time_t time(time_t *timer);
+      int timespec_get(timespec *ts, int base);
       char *asctime(const struct tm *timeptr);
       char *ctime(const time_t *timer);
       struct tm *gmtime(const time_t *timer);
@@ -19069,21 +19269,21 @@ n           No input is consumed. The corresponding argument shall be a pointer
            const char * restrict format,
            const struct tm * restrict timeptr);
       __STDC_WANT_LIB_EXT1__
-      errno_t
-      rsize_t
-      errno_t asctime_s(char *s, rsize_t maxsize,
-           const struct tm *timeptr);
 
-[page 492] (Contents)
+[page 496] (Contents)
 
+        errno_t
+        rsize_t
+        errno_t asctime_s(char *s, rsize_t maxsize,
+             const struct tm *timeptr);
         errno_t ctime_s(char *s, rsize_t maxsize,
              const time_t *timer);
         struct tm *gmtime_s(const time_t * restrict timer,
              struct tm * restrict result);
         struct tm *localtime_s(const time_t * restrict timer,
              struct tm * restrict result);
-B.26 Unicode utilities <uchar.h>
-        mbstate_t     size_t            char16_t         char32_t
+B.27 Unicode utilities <uchar.h>
+        mbstate_t    size_t             char16_t        char32_t
         size_t mbrtoc16(char16_t * restrict pc16,
              const char * restrict s, size_t n,
              mbstate_t * restrict ps);
@@ -19094,10 +19294,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
              mbstate_t * restrict ps);
         size_t c32rtomb(char * restrict s, char32_t c32,
              mbstate_t * restrict ps);
-B.27 Extended multibyte/wide character utilities <wchar.h>
-        wchar_t             wint_t                  WCHAR_MAX
-        size_t              struct tm               WCHAR_MIN
-        mbstate_t           NULL                    WEOF
+B.28 Extended multibyte/wide character utilities <wchar.h>
+        wchar_t            wint_t                   WCHAR_MAX
+        size_t             struct tm                WCHAR_MIN
+        mbstate_t          NULL                     WEOF
         int fwprintf(FILE * restrict stream,
              const wchar_t * restrict format, ...);
         int fwscanf(FILE * restrict stream,
@@ -19108,13 +19308,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
              const wchar_t * restrict format, ...);
         int vfwprintf(FILE * restrict stream,
              const wchar_t * restrict format, va_list arg);
-        int vfwscanf(FILE * restrict stream,
-             const wchar_t * restrict format, va_list arg);
-        int vswprintf(wchar_t * restrict s, size_t n,
-             const wchar_t * restrict format, va_list arg);
 
-[page 493] (Contents)
+[page 497] (Contents)
 
+      int vfwscanf(FILE * restrict stream,
+           const wchar_t * restrict format, va_list arg);
+      int vswprintf(wchar_t * restrict s, size_t n,
+           const wchar_t * restrict format, va_list arg);
       int vswscanf(const wchar_t * restrict s,
            const wchar_t * restrict format, va_list arg);
       int vwprintf(const wchar_t * restrict format,
@@ -19150,13 +19350,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
       unsigned long long int wcstoull(
            const wchar_t * restrict nptr,
            wchar_t ** restrict endptr, int base);
-      wchar_t *wcscpy(wchar_t * restrict s1,
-           const wchar_t * restrict s2);
-      wchar_t *wcsncpy(wchar_t * restrict s1,
-           const wchar_t * restrict s2, size_t n);
 
-[page 494] (Contents)
+[page 498] (Contents)
 
+        wchar_t *wcscpy(wchar_t * restrict s1,
+             const wchar_t * restrict s2);
+        wchar_t *wcsncpy(wchar_t * restrict s1,
+             const wchar_t * restrict s2, size_t n);
         wchar_t *wmemcpy(wchar_t * restrict s1,
              const wchar_t * restrict s2, size_t n);
         wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
@@ -19193,12 +19393,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
         int mbsinit(const mbstate_t *ps);
         size_t mbrlen(const char * restrict s, size_t n,
              mbstate_t * restrict ps);
-        size_t mbrtowc(wchar_t * restrict pwc,
-             const char * restrict s, size_t n,
-             mbstate_t * restrict ps);
 
-[page 495] (Contents)
+[page 499] (Contents)
 
+      size_t mbrtowc(wchar_t * restrict pwc,
+           const char * restrict s, size_t n,
+           mbstate_t * restrict ps);
       size_t wcrtomb(char * restrict s, wchar_t wc,
            mbstate_t * restrict ps);
       size_t mbsrtowcs(wchar_t * restrict dst,
@@ -19234,12 +19434,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
            rsize_t n,
            const wchar_t * restrict format,
            va_list arg);
-      int vswscanf_s(const wchar_t * restrict s,
-           const wchar_t * restrict format,
-           va_list arg);
 
-[page 496] (Contents)
+[page 500] (Contents)
 
+        int vswscanf_s(const wchar_t * restrict s,
+             const wchar_t * restrict format,
+             va_list arg);
         int vwprintf_s(const wchar_t * restrict format,
              va_list arg);
         int vwscanf_s(const wchar_t * restrict format,
@@ -19274,19 +19474,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
         errno_t wcrtomb_s(size_t * restrict retval,
              char * restrict s, rsize_t smax,
              wchar_t wc, mbstate_t * restrict ps);
-        errno_t mbsrtowcs_s(size_t * restrict retval,
-             wchar_t * restrict dst, rsize_t dstmax,
-             const char ** restrict src, rsize_t len,
-             mbstate_t * restrict ps);
 
-[page 497] (Contents)
+[page 501] (Contents)
 
+      errno_t mbsrtowcs_s(size_t * restrict retval,
+           wchar_t * restrict dst, rsize_t dstmax,
+           const char ** restrict src, rsize_t len,
+           mbstate_t * restrict ps);
       errno_t wcsrtombs_s(size_t * restrict retval,
            char * restrict dst, rsize_t dstmax,
            const wchar_t ** restrict src, rsize_t len,
            mbstate_t * restrict ps);
-B.28 Wide character classification and mapping utilities <wctype.h>
-      wint_t          wctrans_t         wctype_t         WEOF
+B.29 Wide character classification and mapping utilities <wctype.h>
+      wint_t         wctrans_t         wctype_t        WEOF
       int iswalnum(wint_t wc);
       int iswalpha(wint_t wc);
       int iswblank(wint_t wc);
@@ -19306,7 +19506,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       wint_t towctrans(wint_t wc, wctrans_t desc);
       wctrans_t wctrans(const char *property);
 
-[page 498] (Contents)
+[page 502] (Contents)
 
                                           Annex C
                                         (informative)
@@ -19315,7 +19515,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- Between the evaluations of the function designator and actual arguments in a function
       call and the actual call. (6.5.2.2).
     -- Between the evaluations of the first and second operands of the following operators:
-      logical AND && (6.5.13); logical OR || (6.5.14); comma , (6.5.17).                  *
+      logical AND && (6.5.13); logical OR || (6.5.14); comma , (6.5.17).
     -- Between the evaluations of the first operand of the conditional ? : operator and
       whichever of the second and third operands is evaluated (6.5.15).
     -- The end of a full declarator: declarators (6.7.6);
@@ -19328,12 +19528,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
       statement (6.8.6.4).
     -- Immediately before a library function returns (7.1.4).
     -- After the actions associated with each formatted input/output function conversion
-      specifier (7.21.6, 7.28.2).
+      specifier (7.21.6, 7.29.2).
     -- Immediately before and immediately after each call to a comparison function, and
       also between any call to a comparison function and any movement of the objects
       passed as arguments to that call (7.22.5).
 
-[page 499] (Contents)
+[page 503] (Contents)
 
                                          Annex D
                                         (normative)
@@ -19355,7 +19555,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     D.2 Ranges of characters disallowed initially
 1   0300-036F, 1DC0-1DFF, 20D0-20FF, FE20-FE2F
 
-[page 500] (Contents)
+[page 504] (Contents)
 
                                          Annex E
                                        (informative)
@@ -19395,7 +19595,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     constant expressions that are greater or equal in magnitude (absolute value) to those
     shown, with the same sign:
 
-[page 501] (Contents)
+[page 505] (Contents)
 
            #define    DLB_DECIMAL_DIG                                10
            #define    DBL_DIG                                        10
@@ -19422,19 +19622,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
            #define    LDBL_MIN_EXP
 5   The values given in the following list shall be replaced by implementation-defined
     constant expressions with values that are greater than or equal to those shown:
-           #define DBL_MAX                                      1E+37
-           #define FLT_MAX                                      1E+37
-           #define LDBL_MAX                                     1E+37
+           #define DBL_MAX                                       1E+37
+           #define FLT_MAX                                       1E+37
+           #define LDBL_MAX                                      1E+37
 6   The values given in the following list shall be replaced by implementation-defined
     constant expressions with (positive) values that are less than or equal to those shown:
-           #define    DBL_EPSILON                                1E-9
-           #define    DBL_MIN                                   1E-37
-           #define    FLT_EPSILON                                1E-5
-           #define    FLT_MIN                                   1E-37
-           #define    LDBL_EPSILON                               1E-9
-           #define    LDBL_MIN                                  1E-37
+           #define    DBL_EPSILON                                 1E-9
+           #define    DBL_MIN                                    1E-37
+           #define    FLT_EPSILON                                 1E-5
+           #define    FLT_MIN                                    1E-37
+           #define    LDBL_EPSILON                                1E-9
+           #define    LDBL_MIN                                   1E-37
 
-[page 502] (Contents)
+[page 506] (Contents)
 
                                                Annex F
                                               (normative)
@@ -19448,7 +19648,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Arithmetic (ANSI/IEEE 854-1987) generalizes the binary standard to remove
     dependencies on radix and word length. IEC 60559 generally refers to the floating-point
     standard, as in IEC 60559 operation, IEC 60559 format, etc. An implementation that
-    defines __STDC_IEC_559__ shall conform to the specifications in this annex.343)
+    defines __STDC_IEC_559__ shall conform to the specifications in this annex.356)
     Where a binding between the C language and IEC 60559 is indicated, the
     IEC 60559-specified behavior is adopted by reference, unless stated otherwise. Since
     negative and positive infinity are representable in IEC 60559 formats, all real numbers lie
@@ -19457,27 +19657,27 @@ n           No input is consumed. The corresponding argument shall be a pointer
 1   The C floating types match the IEC 60559 formats as follows:
     -- The float type matches the IEC 60559 single format.
     -- The double type matches the IEC 60559 double format.
-    -- The long double type matches an IEC 60559 extended format,344) else a
+    -- The long double type matches an IEC 60559 extended format,357) else a
       non-IEC 60559 extended format, else the IEC 60559 double format.
     Any non-IEC 60559 extended format used for the long double type shall have more
-    precision than IEC 60559 double and at least the range of IEC 60559 double.345)
+    precision than IEC 60559 double and at least the range of IEC 60559 double.358)
 
 
 
 
-    343) Implementations that do not define __STDC_IEC_559__ are not required to conform to these
+    356) Implementations that do not define __STDC_IEC_559__ are not required to conform to these
          specifications.
-    344) ''Extended'' is IEC 60559's double-extended data format. Extended refers to both the common 80-bit
+    357) ''Extended'' is IEC 60559's double-extended data format. Extended refers to both the common 80-bit
          and quadruple 128-bit IEC 60559 formats.
-    345) A non-IEC 60559 long double type is required to provide infinity and NaNs, as its values include
+    358) A non-IEC 60559 long double type is required to provide infinity and NaNs, as its values include
          all double values.
 
-[page 503] (Contents)
+[page 507] (Contents)
 
     Recommended practice
 2   The long double type should match an IEC 60559 extended format.
     F.2.1 Infinities, signed zeros, and NaNs
-1   This specification does not define the behavior of signaling NaNs.346) It generally uses
+1   This specification does not define the behavior of signaling NaNs.359) It generally uses
     the term NaN to denote quiet NaNs. The NAN and INFINITY macros and the nan
     functions in <math.h> provide designations for IEC 60559 NaNs and infinities.
     F.3 Operators and functions
@@ -19508,12 +19708,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
       strtold, fprintf, fscanf, and related library functions in <stdlib.h>,
 
 
-    346) Since NaNs created by IEC 60559 operations are always quiet, quiet NaNs (along with infinities) are
+    359) Since NaNs created by IEC 60559 operations are always quiet, quiet NaNs (along with infinities) are
          sufficient for closure of the arithmetic.
 
-[page 504] (Contents)
+[page 508] (Contents)
 
-   <stdio.h>, and <wchar.h> provide IEC 60559 binary-decimal conversions. The
+   <stdio.h>, and <wchar.h> provide IEC 60559 binary-decimal conversions. The
    strtold function in <stdlib.h> provides the conv function recommended in the
    Appendix to ANSI/IEEE 854.
 -- The relational and equality operators provide IEC 60559 comparisons. IEC 60559
@@ -19551,7 +19751,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- The nextafter and nexttoward functions in <math.h> provide the nextafter
   function recommended in the Appendix to IEC 60559 (but with a minor change to
 
-[page 505] (Contents)
+[page 509] (Contents)
 
         better handle signed zeros).
     -- The isfinite macro in <math.h> provides the finite function recommended in
@@ -19571,10 +19771,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
     value is determined by 6.3.1.4. Conversion of an integral floating value that does not
     exceed the range of the integer type raises no floating-point exceptions; whether
     conversion of a non-integral floating value raises the ''inexact'' floating-point exception is
-    unspecified.347)
+    unspecified.360)
     F.5 Binary-decimal conversion
 1   Conversion from the widest supported IEC 60559 format to decimal with
-    DECIMAL_DIG digits and back is the identity function.348)
+    DECIMAL_DIG digits and back is the identity function.361)
 2   Conversions involving IEC 60559 formats follow all pertinent recommended practice. In
     particular, conversion between any supported IEC 60559 format and decimal with
     DECIMAL_DIG or fewer significant digits is correctly rounded (honoring the current
@@ -19583,17 +19783,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    347) ANSI/IEEE 854, but not IEC 60559 (ANSI/IEEE 754), directly specifies that floating-to-integer
+    360) ANSI/IEEE 854, but not IEC 60559 (ANSI/IEEE 754), directly specifies that floating-to-integer
          conversions raise the ''inexact'' floating-point exception for non-integer in-range values. In those
          cases where it matters, library functions can be used to effect such conversions with or without raising
          the ''inexact'' floating-point exception. See rint, lrint, llrint, and nearbyint in
          <math.h>.
-    348) If the minimum-width IEC 60559 extended format (64 bits of precision) is supported,
+    361) If the minimum-width IEC 60559 extended format (64 bits of precision) is supported,
          DECIMAL_DIG shall be at least 21. If IEC 60559 double (53 bits of precision) is the widest
          IEC 60559 format supported, then DECIMAL_DIG shall be at least 17. (By contrast, LDBL_DIG and
          DBL_DIG are 18 and 15, respectively, for these formats.)
 
-[page 506] (Contents)
+[page 510] (Contents)
 
 3   Functions such as strtod that convert character sequences to floating types honor the
     rounding direction. Hence, if the rounding direction might be upward or downward, the
@@ -19601,7 +19801,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     unsigned sequence.
     F.6 The return statement
     If the return expression is evaluated in a floating-point format different from the return
-    type, the expression is converted as if by assignment349) to the return type of the function
+    type, the expression is converted as if by assignment362) to the return type of the function
     and the resulting value is returned to the caller.
     F.7 Contracted expressions
 1   A contracted expression is correctly rounded (once) and treats infinities, NaNs, signed
@@ -19609,29 +19809,29 @@ n           No input is consumed. The corresponding argument shall be a pointer
     arithmetic operations covered by IEC 60559.
     Recommended practice
 2   A contracted expression should raise floating-point exceptions in a manner generally
-    consistent with the basic arithmetic operations.                                    *
+    consistent with the basic arithmetic operations.
     F.8 Floating-point environment
 1   The floating-point environment defined in <fenv.h> includes the IEC 60559 floating-
     point exception status flags and directed-rounding control modes. It includes also
     IEC 60559 dynamic rounding precision and trap enablement modes, if the
-    implementation supports them.350)
+    implementation supports them.363)
     F.8.1 Environment management
 1   IEC 60559 requires that floating-point operations implicitly raise floating-point exception
     status flags, and that rounding control modes can be set explicitly to affect result values of
     floating-point operations. When the state for the FENV_ACCESS pragma (defined in
     <fenv.h>) is ''on'', these changes to the floating-point state are treated as side effects
-    which respect sequence points.351)
+    which respect sequence points.364)
 
 
 
 
-    349) Assignment removes any extra range and precision.
-    350) This specification does not require dynamic rounding precision nor trap enablement modes.
-    351) If the state for the FENV_ACCESS pragma is ''off'', the implementation is free to assume the floating-
+    362) Assignment removes any extra range and precision.
+    363) This specification does not require dynamic rounding precision nor trap enablement modes.
+    364) If the state for the FENV_ACCESS pragma is ''off'', the implementation is free to assume the floating-
          point control modes will be the default ones and the floating-point status flags will not be tested,
          which allows certain optimizations (see F.9).
 
-[page 507] (Contents)
+[page 511] (Contents)
 
     F.8.2 Translation
 1   During translation the IEC 60559 default modes are in effect:
@@ -19640,7 +19840,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- Trapping or stopping (if supported) is disabled on all floating-point exceptions.
     Recommended practice
 2   The implementation should produce a diagnostic message for each translation-time
-    floating-point exception, other than ''inexact'';352) the implementation should then
+    floating-point exception, other than ''inexact'';365) the implementation should then
     proceed with the translation of the program.
     F.8.3 Execution
 1   At program startup the floating-point environment is initialized as prescribed by
@@ -19655,22 +19855,22 @@ n           No input is consumed. The corresponding argument shall be a pointer
     object that has static or thread storage duration, is evaluated (as if) during execution; thus,
     it is affected by any operative floating-point control modes and raises floating-point
     exceptions as required by IEC 60559 (provided the state for the FENV_ACCESS pragma
-    is ''on'').353)
+    is ''on'').366)
 2   EXAMPLE
 
 
 
-    352) As floating constants are converted to appropriate internal representations at translation time, their
+    365) As floating constants are converted to appropriate internal representations at translation time, their
          conversion is subject to default rounding modes and raises no execution-time floating-point exceptions
          (even where the state of the FENV_ACCESS pragma is ''on''). Library functions, for example
          strtod, provide execution-time conversion of numeric strings.
-    353) Where the state for the FENV_ACCESS pragma is ''on'', results of inexact expressions like 1.0/3.0
+    366) Where the state for the FENV_ACCESS pragma is ''on'', results of inexact expressions like 1.0/3.0
          are affected by rounding modes set at execution time, and expressions such as 0.0/0.0 and
          1.0/0.0 generate execution-time floating-point exceptions. The programmer can achieve the
          efficiency of translation-time evaluation through static initialization, such as
                   const static double one_third = 1.0/3.0;
 
-[page 508] (Contents)
+[page 512] (Contents)
 
              #include <fenv.h>
              #pragma STDC FENV_ACCESS ON
@@ -19709,18 +19909,18 @@ n           No input is consumed. The corresponding argument shall be a pointer
     done at translation time. The automatic initialization of u and w require an execution-time conversion to
     float of the wider value 1.1e75, which raises floating-point exceptions. The automatic initializations
     of x and y entail execution-time conversion; however, in some expression evaluation methods, the
-    conversions is not to a narrower format, in which case no floating-point exception is raised.354) The
+    conversions is not to a narrower format, in which case no floating-point exception is raised.367) The
     automatic initialization of z entails execution-time conversion, but not to a narrower format, so no floating-
     point exception is raised. Note that the conversions of the floating constants 1.1e75 and 1.1e75f to
 
 
 
-    354) Use of float_t and double_t variables increases the likelihood of translation-time computation.
+    367) Use of float_t and double_t variables increases the likelihood of translation-time computation.
          For example, the automatic initialization
                   double_t x = 1.1e75;
          could be done at translation time, regardless of the expression evaluation method.
 
-[page 509] (Contents)
+[page 513] (Contents)
 
     their internal representations occur at translation time in all cases.
 
@@ -19761,7 +19961,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     floating-point exceptions need not be precise: the actual order and number of occurrences
     of floating-point exceptions (> 1) may vary from what the source code expresses. Thus,
 
-[page 510] (Contents)
+[page 514] (Contents)
 
     the preceding loop could be treated as
              if (0 < n) x + 1;
@@ -19771,13 +19971,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
                            constants are exact then such transformations can be made on
                            IEC 60559 machines and others that round perfectly.
     1 x x and x/1 -> x The expressions 1 x x, x/1, and x are equivalent (on IEC 60559
-                      machines, among others).355)
+                      machines, among others).368)
     x/x -> 1.0             The expressions x/x and 1.0 are not equivalent if x can be zero,
                            infinite, or NaN.
     x - y <-> x + (-y)       The expressions x - y, x + (-y), and (-y) + x are equivalent (on
                            IEC 60559 machines, among others).
     x - y <-> -(y - x)       The expressions x - y and -(y - x) are not equivalent because 1 - 1
-                           is +0 but -(1 - 1) is -0 (in the default rounding direction).356)
+                           is +0 but -(1 - 1) is -0 (in the default rounding direction).369)
     x - x -> 0.0           The expressions x - x and 0.0 are not equivalent if x is a NaN or
                            infinite.
     0 x x -> 0.0           The expressions 0 x x and 0.0 are not equivalent if x is a NaN,
@@ -19792,16 +19992,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
                            -(+0) yields -0, but 0 - (+0) yields +0 (unless rounding is
                            downward).
 
-    355) Strict support for signaling NaNs -- not required by this specification -- would invalidate these and
+    368) Strict support for signaling NaNs -- not required by this specification -- would invalidate these and
          other transformations that remove arithmetic operators.
-    356) IEC 60559 prescribes a signed zero to preserve mathematical identities across certain discontinuities.
+    369) IEC 60559 prescribes a signed zero to preserve mathematical identities across certain discontinuities.
          Examples include:
             1/(1/ (+-) (inf)) is (+-) (inf)
          and
             conj(csqrt(z)) is csqrt(conj(z)),
          for complex z.
 
-[page 511] (Contents)
+[page 515] (Contents)
 
     F.9.3 Relational operators
 1   x != x -> false           The expression x != x is true if x is a NaN.
@@ -19841,7 +20041,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                      g();
     but is equivalent to
 
-[page 512] (Contents)
+[page 516] (Contents)
 
             if (!(a < b))
                   g();
@@ -19854,7 +20054,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     and F.8.5.) An operation on constants that raises no floating-point exception can be
     folded during translation, except, if the state of the FENV_ACCESS pragma is ''on'', a
     further check is required to assure that changing the rounding direction to downward does
-    not alter the sign of the result,357) and implementations that support dynamic rounding
+    not alter the sign of the result,370) and implementations that support dynamic rounding
     precision modes shall assure further that the result of the operation raises no floating-
     point exception when converted to the semantic type of the operation.
     F.10 Mathematics <math.h>
@@ -19876,19 +20076,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
     rounding direction, a maximal-magnitude finite number -- is returned in lieu of a value
     whose magnitude is too large.
 7   The ''underflow'' floating-point exception is raised whenever a result is tiny (essentially
-    subnormal or zero) and suffers loss of accuracy.358)
+    subnormal or zero) and suffers loss of accuracy.371)
 
 
-    357) 0 - 0 yields -0 instead of +0 just when the rounding direction is downward.
-    358) IEC 60559 allows different definitions of underflow. They all result in the same values, but differ on
+    370) 0 - 0 yields -0 instead of +0 just when the rounding direction is downward.
+    371) IEC 60559 allows different definitions of underflow. They all result in the same values, but differ on
          when the floating-point exception is raised.
 
-[page 513] (Contents)
+[page 517] (Contents)
 
 8    Whether or when library functions raise the ''inexact'' floating-point exception is
      unspecified, unless explicitly specified otherwise.
 9    Whether or when library functions raise an undeserved ''underflow'' floating-point
-     exception is unspecified.359) Otherwise, as implied by F.8.6, the <math.h> functions do
+     exception is unspecified.372) Otherwise, as implied by F.8.6, the <math.h> functions do
      not raise spurious floating-point exceptions (detectable by the user), other than the
      ''inexact'' floating-point exception.
 10   Whether the functions honor the rounding direction mode is implementation-defined,
@@ -19916,16 +20116,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-     359) It is intended that undeserved ''underflow'' and ''inexact'' floating-point exceptions are raised only if
+     372) It is intended that undeserved ''underflow'' and ''inexact'' floating-point exceptions are raised only if
           avoiding them would be too costly.
 
-[page 514] (Contents)
+[page 518] (Contents)
 
     F.10.1.3 The atan functions
 1   -- atan((+-)0) returns (+-)0.
     -- atan((+-)(inf)) returns (+-)pi /2.
     F.10.1.4 The atan2 functions
-1   -- atan2((+-)0, -0) returns (+-)pi .360)
+1   -- atan2((+-)0, -0) returns (+-)pi .373)
     -- atan2((+-)0, +0) returns (+-)0.
     -- atan2((+-)0, x) returns (+-)pi for x < 0.
     -- atan2((+-)0, x) returns (+-)0 for x > 0.
@@ -19949,10 +20149,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    360) atan2(0, 0) does not raise the ''invalid'' floating-point exception, nor does atan2( y , 0) raise
+    373) atan2(0, 0) does not raise the ''invalid'' floating-point exception, nor does atan2( y , 0) raise
          the ''divide-by-zero'' floating-point exception.
 
-[page 515] (Contents)
+[page 519] (Contents)
 
     F.10.2 Hyperbolic functions
     F.10.2.1 The acosh functions
@@ -19982,7 +20182,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- exp(-(inf)) returns +0.
     -- exp(+(inf)) returns +(inf).
 
-[page 516] (Contents)
+[page 520] (Contents)
 
     F.10.3.2 The exp2 functions
 1   -- exp2((+-)0) returns 1.
@@ -20011,8 +20211,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
     is exact and is independent of the current rounding direction mode.
 2   If the correct result is outside the range of the return type, the numeric result is
     unspecified and the ''invalid'' floating-point exception is raised.
+3   ilogb(x), for x zero, infinite, or NaN, raises the ''invalid'' floating-point exception and
+    returns the value specified in 7.12.6.5.
 
-[page 517] (Contents)
+[page 521] (Contents)
 
     F.10.3.6 The ldexp functions
 1   On a binary system, ldexp(x, exp) is equivalent to scalbn(x, exp).
@@ -20042,7 +20244,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- logb((+-)(inf)) returns +(inf).
 2   The returned value is exact and is independent of the current rounding direction mode.
 
-[page 518] (Contents)
+[page 522] (Contents)
 
     F.10.3.12 The modf functions
 1   -- modf((+-)x, iptr) returns a result with the same sign as x.
@@ -20072,7 +20274,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   If the calculation does not overflow or underflow, the returned value is exact and
     independent of the current rounding direction mode.
 
-[page 519] (Contents)
+[page 523] (Contents)
 
     F.10.4 Power and absolute value functions
     F.10.4.1 The cbrt functions
@@ -20105,7 +20307,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- pow(x, +(inf)) returns +0 for | x | < 1.
     -- pow(x, +(inf)) returns +(inf) for | x | > 1.
 
-[page 520] (Contents)
+[page 524] (Contents)
 
     -- pow(-(inf), y) returns -0 for y an odd integer < 0.
     -- pow(-(inf), y) returns +0 for y < 0 and not an odd integer.
@@ -20137,7 +20339,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- tgamma(-(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
     -- tgamma(+(inf)) returns +(inf).
 
-[page 521] (Contents)
+[page 525] (Contents)
 
     F.10.6 Nearest integer functions
     F.10.6.1 The ceil functions
@@ -20173,7 +20375,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- nearbyint((+-)0) returns (+-)0 (for all rounding directions).
     -- nearbyint((+-)(inf)) returns (+-)(inf) (for all rounding directions).
 
-[page 522] (Contents)
+[page 526] (Contents)
 
     F.10.6.4 The rint functions
 1   The rint functions differ from the nearbyint functions only in that they do raise the
@@ -20209,7 +20411,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     The round functions may, but are not required to, raise the ''inexact'' floating-point
     exception for finite non-integer numeric arguments, as this implementation does.
 
-[page 523] (Contents)
+[page 527] (Contents)
 
     F.10.6.7 The lround and llround functions
 1   The lround and llround functions differ from the lrint and llrint functions
@@ -20244,7 +20446,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                 return copysign(result, x);
            }
 
-[page 524] (Contents)
+[page 528] (Contents)
 
     F.10.7.2 The remainder functions
 1   The remainder functions are fully specified as a basic arithmetic operation in
@@ -20275,7 +20477,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   Even though underflow or overflow can occur, the returned value is independent of the
     current rounding direction mode.
 
-[page 525] (Contents)
+[page 529] (Contents)
 
     F.10.9 Maximum, minimum, and positive difference functions
     F.10.9.1 The fdim functions
@@ -20284,7 +20486,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 1   If just one argument is a NaN, the fmax functions return the other argument (if both
     arguments are NaNs, the functions return a NaN).
 2   The returned value is exact and is independent of the current rounding direction mode.
-3   The body of the fmax function might be361)
+3   The body of the fmax function might be374)
            { return (isgreaterequal(x, y) ||
                 isnan(y)) ? x : y; }
     F.10.9.3 The fmin functions
@@ -20303,10 +20505,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    361) Ideally, fmax would be sensitive to the sign of zero, for example fmax(-0.0, +0.0) would
+    374) Ideally, fmax would be sensitive to the sign of zero, for example fmax(-0.0, +0.0) would
          return +0; however, implementation in software might be impractical.
 
-[page 526] (Contents)
+[page 530] (Contents)
 
     F.10.11 Comparison macros
 1   Relational operators and their corresponding comparison macros (7.12.14) produce
@@ -20317,15 +20519,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
     characterized by FLT_EVAL_METHOD equal to 1 or 2 (5.2.4.2.2), do not convert
     operands of relational operators to their semantic types.
 
-[page 527] (Contents)
+[page 531] (Contents)
 
                                            Annex G
                                           (normative)
                    IEC 60559-compatible complex arithmetic
     G.1 Introduction
 1   This annex supplements annex F to specify complex arithmetic for compatibility with
-    IEC 60559 real floating-point arithmetic. An implementation that defines *
-    __STDC_IEC_559_COMPLEX__ shall conform to the specifications in this annex.362)
+    IEC 60559 real floating-point arithmetic. An implementation that defines
+    __STDC_IEC_559_COMPLEX__ shall conform to the specifications in this annex.375)
     G.2 Types
 1   There is a new keyword _Imaginary, which is used to specify imaginary types. It is
     used as a type specifier within declaration specifiers in the same way as _Complex is
@@ -20348,17 +20550,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    362) Implementations that do not define __STDC_IEC_559_COMPLEX__ are not required to conform
+    375) Implementations that do not define __STDC_IEC_559_COMPLEX__ are not required to conform
          to these specifications.
 
-[page 528] (Contents)
+[page 532] (Contents)
 
     G.4 Conversions
     G.4.1 Imaginary types
 1   Conversions among imaginary types follow rules analogous to those for real floating
     types.
     G.4.2 Real and imaginary
-1   When a value of imaginary type is converted to a real type other than _Bool,363) the
+1   When a value of imaginary type is converted to a real type other than _Bool,376) the
     result is a positive zero.
 2   When a value of real type is converted to an imaginary type, the result is a positive
     imaginary zero.
@@ -20382,9 +20584,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    363) See 6.3.1.2.
+    376) See 6.3.1.2.
 
-[page 529] (Contents)
+[page 533] (Contents)
 
     G.5.1 Multiplicative operators
     Semantics
@@ -20410,7 +20612,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
            x + iy       (x/u) + i(y/u)        (y/v) + i(-x/v)
 4   The * and / operators satisfy the following infinity properties for all real, imaginary, and
-    complex operands:364)
+    complex operands:377)
     -- if one operand is an infinity and the other operand is a nonzero finite number or an
       infinity, then the result of the * operator is an infinity;
     -- if the first operand is an infinity and the second operand is a finite number, then the
@@ -20421,10 +20623,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    364) These properties are already implied for those cases covered in the tables, but are required for all cases
+    377) These properties are already implied for those cases covered in the tables, but are required for all cases
          (at least where the state for CX_LIMITED_RANGE is ''off'').
 
-[page 530] (Contents)
+[page 534] (Contents)
 
     -- if the first operand is a nonzero finite number or an infinity and the second operand is
       a zero, then the result of the / operator is an infinity.
@@ -20448,7 +20650,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                     if (isnan(x) && isnan(y)) {
                             /* Recover infinities that computed as NaN+iNaN ... */
                             int recalc = 0;
-                            if ( isinf(a) || isinf(b) ) { // z is infinite
+                            if (isinf(a) || isinf(b)) { // z is infinite
                                     /* "Box" the infinity and change NaNs in the other factor to 0 */
                                     a = copysign(isinf(a) ? 1.0 : 0.0, a);
                                     b = copysign(isinf(b) ? 1.0 : 0.0, b);
@@ -20456,7 +20658,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                                     if (isnan(d)) d = copysign(0.0, d);
                                     recalc = 1;
                             }
-                            if ( isinf(c) || isinf(d) ) { // w is infinite
+                            if (isinf(c) || isinf(d)) { // w is infinite
                                     /* "Box" the infinity and change NaNs in the other factor to 0 */
                                     c = copysign(isinf(c) ? 1.0 : 0.0, c);
                                     d = copysign(isinf(d) ? 1.0 : 0.0, d);
@@ -20475,7 +20677,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                             }
                             if (recalc) {
 
-[page 531] (Contents)
+[page 535] (Contents)
 
                                       x = INFINITY * ( a * c - b * d );
                                       y = INFINITY * ( a * d + b * c );
@@ -20498,7 +20700,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                    a = creal(z); b = cimag(z);
                    c = creal(w); d = cimag(w);
                    logbw = logb(fmax(fabs(c), fabs(d)));
-                   if (logbw == INFINITY) {
+                   if (isfinite(logbw)) {
                           ilogbw = (int)logbw;
                           c = scalbn(c, -ilogbw); d = scalbn(d, -ilogbw);
                    }
@@ -20520,14 +20722,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
                                  x = INFINITY * ( a * c + b * d );
                                  y = INFINITY * ( b * c - a * d );
                            }
-                           else if (isinf(logbw) &&
+                           else if ((logbw == INFINITY) &&
                                  isfinite(a) && isfinite(b)) {
                                  c = copysign(isinf(c) ? 1.0 : 0.0,                        c);
                                  d = copysign(isinf(d) ? 1.0 : 0.0,                        d);
                                  x = 0.0 * ( a * c + b * d );
                                  y = 0.0 * ( b * c - a * d );
 
-[page 532] (Contents)
+[page 536] (Contents)
 
                            }
                      }
@@ -20567,7 +20769,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     particularly suited to IEC 60559 implementations. For families of functions, the
     specifications apply to all of the functions even though only the principal function is
 
-[page 533] (Contents)
+[page 537] (Contents)
 
     shown. Unless otherwise specified, where the symbol ''(+-)'' occurs in both an argument
     and the result, the result has the same sign as the argument.
@@ -20576,7 +20778,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   Since complex and imaginary values are composed of real values, each function may be
     regarded as computing real values from real values. Except as noted, the functions treat
     real infinities, NaNs, signed zeros, subnormals, and the floating-point exception flags in a
-    manner consistent with the specifications for real functions in F.10.365)
+    manner consistent with the specifications for real functions in F.10.378)
 5   The functions cimag, conj, cproj, and creal are fully specified for all
     implementations, including IEC 60559 ones, in 7.3.9. These functions raise no floating-
     point exceptions.
@@ -20603,10 +20805,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    365) As noted in G.3, a complex value with at least one infinite part is regarded as an infinity even if its
+    378) As noted in G.3, a complex value with at least one infinite part is regarded as an infinity even if its
          other part is a NaN.
 
-[page 534] (Contents)
+[page 538] (Contents)
 
     G.6.1 Trigonometric functions
     G.6.1.1 The cacos functions
@@ -20639,7 +20841,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- cacosh(+(inf) + i (inf)) returns +(inf) + ipi /4.
     -- cacosh((+-)(inf) + iNaN) returns +(inf) + iNaN.
 
-[page 535] (Contents)
+[page 539] (Contents)
 
     -- cacosh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
       floating-point exception, for finite y.
@@ -20673,7 +20875,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- catanh(+(inf) + i (inf)) returns +0 + ipi /2.
     -- catanh(+(inf) + iNaN) returns +0 + iNaN.
 
-[page 536] (Contents)
+[page 540] (Contents)
 
     -- catanh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
       floating-point exception, for finite y.
@@ -20709,7 +20911,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- csinh(+0 + iNaN) returns (+-)0 + iNaN (where the sign of the real part of the result is
       unspecified).
 
-[page 537] (Contents)
+[page 541] (Contents)
 
     -- csinh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
       exception, for positive finite x.
@@ -20742,7 +20944,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       point exception, for all nonzero numbers y.
     -- ctanh(NaN + iNaN) returns NaN + iNaN.
 
-[page 538] (Contents)
+[page 542] (Contents)
 
     G.6.3 Exponential and logarithmic functions
     G.6.3.1 The cexp functions
@@ -20777,7 +20979,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- clog(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
       point exception, for finite x.
 
-[page 539] (Contents)
+[page 543] (Contents)
 
     -- clog(-(inf) + iy) returns +(inf) + ipi , for finite positive-signed y.
     -- clog(+(inf) + iy) returns +(inf) + i0, for finite positive-signed y.
@@ -20791,7 +20993,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     G.6.4 Power and absolute-value functions
     G.6.4.1 The cpow functions
 1   The cpow functions raise floating-point exceptions if appropriate for the calculation of
-    the parts of the result, and may also raise spurious floating-point exceptions.366)
+    the parts of the result, and may also raise spurious floating-point exceptions.379)
     G.6.4.2 The csqrt functions
 1   -- csqrt(conj(z)) = conj(csqrt(z)).
     -- csqrt((+-)0 + i0) returns +0 + i0.
@@ -20810,10 +21012,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    366) This allows cpow( z , c ) to be implemented as cexp(c      clog( z )) without precluding
+    379) This allows cpow( z , c ) to be implemented as cexp(c      clog( z )) without precluding
          implementations that treat special cases more carefully.
 
-[page 540] (Contents)
+[page 544] (Contents)
 
     G.7 Type-generic math <tgmath.h>
 1   Type-generic macros that accept complex arguments also accept imaginary arguments. If
@@ -20836,7 +21038,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
             asinh(iy)   =   i asin(y)
             atanh(iy)   =   i atan(y)
 
-[page 541] (Contents)
+[page 545] (Contents)
 
                                           Annex H
                                         (informative)
@@ -20867,7 +21069,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 3   The parameter ''bounded'' is always true, and is not provided. The parameter ''minint''
     is always 0 for the unsigned types, and is not provided for those types.
 
-[page 542] (Contents)
+[page 546] (Contents)
 
     H.2.2.1 Integer operations
 1   The integer operations on integer types are the following:
@@ -20900,7 +21102,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     emin           FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP
 2   The derived constants for the floating point types are accessed by the following:
 
-[page 543] (Contents)
+[page 547] (Contents)
 
     fmax          FLT_MAX, DBL_MAX, LDBL_MAX
     fminN         FLT_MIN, DBL_MIN, LDBL_MIN
@@ -20933,7 +21135,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   The FLT_ROUNDS parameter can be used to indicate the LIA-1 rounding styles:
     truncate      FLT_ROUNDS == 0
 
-[page 544] (Contents)
+[page 548] (Contents)
 
     nearest       FLT_ROUNDS == 1
     other         FLT_ROUNDS != 0 && FLT_ROUNDS != 1
@@ -20968,7 +21170,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 5   C's conversions (casts) from integer to floating-point can meet LIA-1 requirements if an
     implementation uses round-to-nearest.
 
-[page 545] (Contents)
+[page 549] (Contents)
 
     H.3 Notification
 1   Notification is the process by which a user or program is informed that an exceptional
@@ -21005,7 +21207,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   C allows an implementation to provide the following LIA-1 required behavior: at
     program termination if any indicator is set the implementation shall send an unambiguous
 
-[page 546] (Contents)
+[page 550] (Contents)
 
     and ''hard to ignore'' message (see LIA-1 subclause 6.1.2)
 5   LIA-1 does not make the distinction between floating-point and integer for ''undefined''.
@@ -21024,7 +21226,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     allows trap-and-terminate (either default implementation behavior or user replacement for
     it) or trap-and-resume, at the programmer's option.
 
-[page 547] (Contents)
+[page 551] (Contents)
 
                                            Annex I
                                         (informative)
@@ -21060,17 +21262,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- A constant expression is used as the controlling expression of a selection statement
       (6.8.4).
 
-[page 548] (Contents)
+[page 552] (Contents)
 
 -- An incorrectly formed preprocessing group is encountered while skipping a
   preprocessing group (6.10.1).
 -- An unrecognized #pragma directive is encountered (6.10.6).
 
-[page 549] (Contents)
+[page 553] (Contents)
 
-                                            Annex J
-                                         (informative)
-                                      Portability issues
+                                           Annex J
+                                        (informative)
+                                     Portability issues
 1   This annex collects some information about portability that appears in this International
     Standard.
     J.1 Unspecified behavior
@@ -21078,6 +21280,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- The manner and timing of static initialization (5.1.2).
     -- The termination status returned to the hosted environment if the return type of main
       is not compatible with int (5.1.2.2.3).
+    -- The values of objects that are neither lock-free atomic objects nor of type volatile
+      sig_atomic_t and the state of the floating-point environment, when the
+      processing of the abstract machine is interrupted by receipt of a signal (5.1.2.3).
     -- The behavior of the display device if a printing character is written when the active
       position is at the final position of a line (5.2.2).
     -- The behavior of the display device if a backspace character is written when the active
@@ -21097,13 +21302,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- The values of any padding bits in integer representations (6.2.6.2).
     -- Whether certain operators can generate negative zeros and whether a negative zero
       becomes a normal zero when stored in an object (6.2.6.2).
-    -- Whether two string literals result in distinct arrays (6.4.5).
-    -- The order in which subexpressions are evaluated and the order in which side effects
-      take place, except as specified for the function-call (), &&, ||, ? :, and comma
 
-[page 550] (Contents)
+[page 554] (Contents)
 
-   operators (6.5).
+-- Whether two string literals result in distinct arrays (6.4.5).
+-- The order in which subexpressions are evaluated and the order in which side effects
+  take place, except as specified for the function-call (), &&, ||, ? :, and comma
+  operators (6.5).
 -- The order in which the function designator, arguments, and subexpressions within the
   arguments are evaluated in a function call (6.5.2.2).
 -- The order of side effects among compound literal initialization list expressions
@@ -21125,7 +21330,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
   is considered a nested replacement (6.10.3).
 -- The order in which # and ## operations are evaluated during macro substitution
   (6.10.3.2, 6.10.3.3).
--- The state of the floating-point status flags when execution passes from a part of the *
+-- The state of the floating-point status flags when execution passes from a part of the
   program translated with FENV_ACCESS ''off'' to a part translated with
   FENV_ACCESS ''on'' (7.6.1).
 -- The order in which feraiseexcept raises floating-point exceptions, except as
@@ -21134,12 +21339,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
   (7.12).
 -- The results of the frexp functions when the specified value is not a floating-point
   number (7.12.6.4).
+
+[page 555] (Contents)
+
 -- The numeric result of the ilogb functions when the correct value is outside the
   range of the return type (7.12.6.5, F.10.3.5).
 -- The result of rounding when the value is out of range (7.12.9.5, 7.12.9.7, F.10.6.5).
-
-[page 551] (Contents)
-
 -- The value stored by the remquo functions in the object pointed to by quo when y is
   zero (7.12.10.3).
 -- Whether a comparison macro argument that is represented in a format wider than its
@@ -21148,34 +21353,42 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- Whether va_copy and va_end are macros or identifiers with external linkage
   (7.16.1).
 -- The hexadecimal digit before the decimal point when a non-normalized floating-point
-  number is printed with an a or A conversion specifier (7.21.6.1, 7.28.2.1).
+  number is printed with an a or A conversion specifier (7.21.6.1, 7.29.2.1).
 -- The value of the file position indicator after a successful call to the ungetc function
   for a text stream, or the ungetwc function for any stream, until all pushed-back
-  characters are read or discarded (7.21.7.10, 7.28.3.10).
+  characters are read or discarded (7.21.7.10, 7.29.3.10).
 -- The details of the value stored by the fgetpos function (7.21.9.1).
 -- The details of the value returned by the ftell function for a text stream (7.21.9.4).
 -- Whether the strtod, strtof, strtold, wcstod, wcstof, and wcstold
   functions convert a minus-signed sequence to a negative number directly or by
   negating the value resulting from converting the corresponding unsigned sequence
-  (7.22.1.3, 7.28.4.1.1).
+  (7.22.1.3, 7.29.4.1.1).
 -- The order and contiguity of storage allocated by successive calls to the calloc,
   malloc, and realloc functions (7.22.3).
 -- The amount of storage allocated by a successful call to the calloc, malloc, or
   realloc function when 0 bytes was requested (7.22.3).
+-- Whether a call to the atexit function that does not happen before the exit
+  function is called will succeed (7.22.4.2).
+-- Whether a call to the at_quick_exit function that does not happen before the
+  quick_exit function is called will succeed (7.22.4.3).
 -- Which of two elements that compare as equal is matched by the bsearch function
   (7.22.5.1).
 -- The order of two elements that compare as equal in an array sorted by the qsort
   function (7.22.5.2).
--- The encoding of the calendar time returned by the time function (7.26.2.4).
--- The characters stored by the strftime or wcsftime function if any of the time
-  values being converted is outside the normal range (7.26.3.5, 7.28.5.1).
--- The conversion state after an encoding error occurs (7.28.6.3.2, 7.28.6.3.3, 7.28.6.4.1,
-  7.28.6.4.2,
--- The resulting value when the ''invalid'' floating-point exception is raised during
-  IEC 60559 floating to integer conversion (F.4).
 
-[page 552] (Contents)
+[page 556] (Contents)
 
+    -- The encoding of the calendar time returned by the time function (7.27.2.4).
+    -- The characters stored by the strftime or wcsftime function if any of the time
+      values being converted is outside the normal range (7.27.3.5, 7.29.5.1).
+    -- Whether an encoding error occurs if a wchar_t value that does not correspond to a
+      member of the extended character set appears in the format string for a function in
+      7.29.2 or 7.29.5 and the specified semantics do not require that value to be processed
+      by wcrtomb (7.29.1).
+    -- The conversion state after an encoding error occurs (7.29.6.3.2, 7.29.6.3.3, 7.29.6.4.1,
+      7.29.6.4.2,
+    -- The resulting value when the ''invalid'' floating-point exception is raised during
+      IEC 60559 floating to integer conversion (F.4).
     -- Whether conversion of non-integer IEC 60559 floating values to integer raises the
       ''inexact'' floating-point exception (F.4).
     -- Whether or when library functions in <math.h> raise the ''inexact'' floating-point
@@ -21200,18 +21413,18 @@ n           No input is consumed. The corresponding argument shall be a pointer
       universal character name (5.1.1.2).
     -- A program in a hosted environment does not define a function named main using one
       of the specified forms (5.1.2.2.1).
-    -- The execution of a program contains a data race (5.1.2.4).
-    -- A character not in the basic source character set is encountered in a source file, except
-      in an identifier, a character constant, a string literal, a header name, a comment, or a
-      preprocessing token that is never converted to a token (5.2.1).
-    -- An identifier, comment, string literal, character constant, or header name contains an
-      invalid multibyte character or does not begin and end in the initial shift state (5.2.1.2).
-    -- The same identifier has both internal and external linkage in the same translation unit
-      (6.2.2).
-    -- An object is referred to outside of its lifetime (6.2.4).
 
-[page 553] (Contents)
+[page 557] (Contents)
 
+-- The execution of a program contains a data race (5.1.2.4).
+-- A character not in the basic source character set is encountered in a source file, except
+  in an identifier, a character constant, a string literal, a header name, a comment, or a
+  preprocessing token that is never converted to a token (5.2.1).
+-- An identifier, comment, string literal, character constant, or header name contains an
+  invalid multibyte character or does not begin and end in the initial shift state (5.2.1.2).
+-- The same identifier has both internal and external linkage in the same translation unit
+  (6.2.2).
+-- An object is referred to outside of its lifetime (6.2.4).
 -- The value of a pointer to an object whose lifetime has ended is used (6.2.4).
 -- The value of an object with automatic storage duration is used while it is
   indeterminate (6.2.4, 6.7.9, 6.8).
@@ -21237,6 +21450,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
   of the designated object, but the object is uninitialized. (6.3.2.1).
 -- An lvalue having array type is converted to a pointer to the initial element of the
   array, and the array object has register storage class (6.3.2.1).
+
+[page 558] (Contents)
+
 -- An attempt is made to use the value of a void expression, or an implicit or explicit
   conversion (except to void) is applied to a void expression (6.3.2.2).
 -- Conversion of a pointer to an integer type produces a value outside the range that can
@@ -21245,9 +21461,6 @@ n           No input is consumed. The corresponding argument shall be a pointer
   (6.3.2.3).
 -- A pointer is used to call a function whose type is not compatible with the referenced
   type (6.3.2.3).
-
-[page 554] (Contents)
-
 -- An unmatched ' or " character is encountered on a logical source line during
   tokenization (6.4).
 -- A reserved keyword token is used in translation phase 7 or 8 for some purpose other
@@ -21268,12 +21481,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- An exceptional condition occurs during the evaluation of an expression (6.5).
 -- An object has its stored value accessed other than by an lvalue of an allowable type
   (6.5).
--- For a call to a function without a function prototype in scope, the number of *
+-- For a call to a function without a function prototype in scope, the number of
   arguments does not equal the number of parameters (6.5.2.2).
 -- For call to a function without a function prototype in scope where the function is
   defined with a function prototype, either the prototype ends with an ellipsis or the
   types of the arguments after promotion are not compatible with the types of the
   parameters (6.5.2.2).
+
+[page 559] (Contents)
+
 -- For a call to a function without a function prototype in scope where the function is not
   defined with a function prototype, the types of the arguments after promotion are not
   compatible with those of the parameters after promotion (with certain exceptions)
@@ -21282,9 +21498,6 @@ n           No input is consumed. The corresponding argument shall be a pointer
   expression) pointed to by the expression that denotes the called function (6.5.2.2).
 -- A member of an atomic structure or union is accessed (6.5.2.3).
 -- The operand of the unary * operator has an invalid value (6.5.3.2).
-
-[page 555] (Contents)
-
 -- A pointer is converted to other than an integer or pointer type (6.5.4).
 -- The value of the second operand of the / or % operator is zero (6.5.5).
 -- Addition or subtraction of a pointer into, or just beyond, an array object and an
@@ -21311,20 +21524,22 @@ n           No input is consumed. The corresponding argument shall be a pointer
   object with incompatible type (6.5.16.1).
 -- An expression that is required to be an integer constant expression does not have an
   integer type; has operands that are not integer constants, enumeration constants,
-  character constants, sizeof expressions whose results are integer constants, or
-  immediately-cast floating constants; or contains casts (outside operands to sizeof
-  operators) other than conversions of arithmetic types to integer types (6.6).
+  character constants, sizeof expressions whose results are integer constants,
+
+[page 560] (Contents)
+
+   _Alignof expressions, or immediately-cast floating constants; or contains casts
+   (outside operands to sizeof and _Alignof operators) other than conversions of
+   arithmetic types to integer types (6.6).
 -- A constant expression in an initializer is not, or does not evaluate to, one of the
   following: an arithmetic constant expression, a null pointer constant, an address
   constant, or an address constant for a complete object type plus or minus an integer
   constant expression (6.6).
 -- An arithmetic constant expression does not have arithmetic type; has operands that
   are not integer constants, floating constants, enumeration constants, character
-  constants, or sizeof expressions; or contains casts (outside operands to sizeof
-
-[page 556] (Contents)
-
-   operators) other than conversions of arithmetic types to arithmetic types (6.6).
+  constants, sizeof expressions whose results are integer constants, or _Alignof
+  expressions; or contains casts (outside operands to sizeof or _Alignof operators)
+  other than conversions of arithmetic types to arithmetic types (6.6).
 -- The value of an object is accessed by an array-subscript [], member-access . or ->,
   address &, or indirection * operator or a pointer cast in creating an address constant
   (6.6).
@@ -21332,8 +21547,8 @@ n           No input is consumed. The corresponding argument shall be a pointer
   incomplete after its declarator, or after its init-declarator if it has an initializer (6.7).
 -- A function is declared at block scope with an explicit storage-class specifier other
   than extern (6.7.1).
--- A structure or union is defined as containing no named members, no anonymous
-  structures, and no anonymous unions (6.7.2.1).
+-- A structure or union is defined without any named members (including those
+  specified indirectly via anonymous structures and unions) (6.7.2.1).
 -- An attempt is made to access, or generate a pointer to just past, a flexible array
   member of a structure when the referenced object provides no elements for that array
   (6.7.2.1).
@@ -21344,12 +21559,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
   use of an lvalue with non-const-qualified type (6.7.3).
 -- An attempt is made to refer to an object defined with a volatile-qualified type through
   use of an lvalue with non-volatile-qualified type (6.7.3).
--- The specification of a function type includes any type qualifiers (6.7.3).                        *
+-- The specification of a function type includes any type qualifiers (6.7.3).
 -- Two qualified types that are required to be compatible do not have the identically
   qualified version of a compatible type (6.7.3).
 -- An object which has been modified is accessed through a restrict-qualified pointer to
   a const-qualified type, or through a restrict-qualified pointer and another pointer that
-  are not both based on the same object (6.7.3.1).
+
+[page 561] (Contents)
+
+   are not both based on the same object (6.7.3.1).
 -- A restrict-qualified pointer is assigned a value based on another restricted pointer
   whose associated block neither began execution before the block associated with this
   pointer, nor ended before the assignment (6.7.3.1).
@@ -21358,9 +21576,6 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- A function declared with a _Noreturn function specifier returns to its caller (6.7.4).
 -- The definition of an object has an alignment specifier and another declaration of that
   object has a different alignment specifier (6.7.5).
-
-[page 557] (Contents)
-
 -- Declarations of an object in different translation units have different alignment
   specifiers (6.7.5).
 -- Two pointer types that are required to be compatible are not identically qualified, or
@@ -21387,6 +21602,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
   type (6.7.9).
 -- The initializer for an aggregate or union, other than an array initialized by a string
   literal, is not a brace-enclosed list of initializers for its elements or members (6.7.9).
+
+[page 562] (Contents)
+
 -- An identifier with external linkage is used, but in the program there does not exist
   exactly one external definition for the identifier, or the identifier is not used and there
   exist multiple external definitions for the identifier (6.9).
@@ -21396,9 +21614,6 @@ n           No input is consumed. The corresponding argument shall be a pointer
   (6.9.1).
 -- A function that accepts a variable number of arguments is defined without a
   parameter type list that ends with the ellipsis notation (6.9.1).
-
-[page 558] (Contents)
-
 -- The } that terminates a function is reached, and the value of the function call is used
   by the caller (6.9.1).
 -- An identifier for an object with internal linkage and an incomplete type is declared
@@ -21425,6 +21640,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
   forms (6.10.6).
 -- The name of a predefined macro, or the identifier defined, is the subject of a
   #define or #undef preprocessing directive (6.10.8).
+
+[page 563] (Contents)
+
 -- An attempt is made to copy an object to an overlapping object by use of a library
   function, other than as explicitly allowed (e.g., memmove) (clause 7).
 -- A file with the same name as one of the standard headers, not provided as part of the
@@ -21434,9 +21652,6 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- A function, object, type, or macro that is specified as being declared or defined by
   some standard header is used before any header that declares or defines it is included
   (7.1.2).
-
-[page 559] (Contents)
-
 -- A standard header is included while a macro is defined with the same name as a
   keyword (7.1.2).
 -- The program attempts to declare a library function itself, rather than via a standard
@@ -21462,6 +21677,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- Part of the program tests floating-point status flags, sets floating-point control modes,
   or runs under non-default mode settings, but was translated with the state for the
   FENV_ACCESS pragma ''off'' (7.6.1).
+
+[page 564] (Contents)
+
 -- The exception-mask argument for one of the functions that provide access to the
   floating-point status flags has a nonzero value not obtained by bitwise OR of the
   floating-point exception macros (7.6.2).
@@ -21472,9 +21690,6 @@ n           No input is consumed. The corresponding argument shall be a pointer
   fegetenv or feholdexcept, nor is it an environment macro (7.6.4.3, 7.6.4.4).
 -- The value of the result of an integer arithmetic or conversion function cannot be
   represented (7.8.2.1, 7.8.2.2, 7.8.2.3, 7.8.2.4, 7.22.6.1, 7.22.6.2, 7.22.1).
-
-[page 560] (Contents)
-
 -- The program modifies the string pointed to by the value returned by the setlocale
   function (7.11.1.1).
 -- The program modifies the structure pointed to by the value returned by the
@@ -21495,8 +21710,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- The program specifies an invalid pointer to a signal handler function (7.14.1.1).
 -- A signal handler returns when the signal corresponded to a computational exception
   (7.14.1.1).
+-- A signal handler called in response to SIGFPE, SIGILL, SIGSEGV, or any other
+  implementation-defined value corresponding to a computational exception returns
+  (7.14.1.1).
 -- A signal occurs as the result of calling the abort or raise function, and the signal
   handler calls the raise function (7.14.1.1).
+
+[page 565] (Contents)
+
 -- A signal occurs other than as the result of calling the abort or raise function, and
   the signal handler refers to an object with static or thread storage duration that is not a
   lock-free atomic object other than by assigning a value to an object declared as
@@ -21507,12 +21728,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
   calling the abort or raise function and the corresponding signal handler obtained
   a SIG_ERR return from a call to the signal function (7.14.1.1).
 -- A signal is generated by an asynchronous signal handler (7.14.1.1).
+-- The signal function is used in a multi-threaded program (7.14.1.1).
 -- A function with a variable number of arguments attempts to access its varying
   arguments other than through a properly declared and initialized va_list object, or
   before the va_start macro is invoked (7.16, 7.16.1.1, 7.16.1.4).
-
-[page 561] (Contents)
-
 -- The macro va_arg is invoked using the parameter ap that was passed to a function
   that invoked the macro va_arg with the same parameter (7.16).
 -- A macro definition of va_start, va_arg, va_copy, or va_end is suppressed in
@@ -21534,6 +21753,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
   the type that results after application of the default argument promotions (7.16.1.4).
 -- The member designator parameter of an offsetof macro is an invalid right
   operand of the . operator for the type parameter, or designates a bit-field (7.19).
+
+[page 566] (Contents)
+
 -- The argument in an instance of one of the integer-constant macros is not a decimal,
   octal, or hexadecimal constant, or it has a value that exceeds the limits for the
   corresponding type (7.20.4).
@@ -21548,68 +21770,71 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- The string pointed to by the mode argument in a call to the fopen function does not
   exactly match one of the specified character sequences (7.21.5.3).
 -- An output operation on an update stream is followed by an input operation without an
-    intervening call to the fflush function or a file positioning function, or an input
-
-[page 562] (Contents)
-
-   operation on an update stream is followed by an output operation with an intervening
-   call to a file positioning function (7.21.5.3).
+  intervening call to the fflush function or a file positioning function, or an input
+  operation on an update stream is followed by an output operation with an intervening
+  call to a file positioning function (7.21.5.3).
 -- An attempt is made to use the contents of the array that was supplied in a call to the
   setvbuf function (7.21.5.6).
 -- There are insufficient arguments for the format in a call to one of the formatted
   input/output functions, or an argument does not have an appropriate type (7.21.6.1,
-  7.21.6.2, 7.28.2.1, 7.28.2.2).
+  7.21.6.2, 7.29.2.1, 7.29.2.2).
 -- The format in a call to one of the formatted input/output functions or to the
   strftime or wcsftime function is not a valid multibyte character sequence that
-  begins and ends in its initial shift state (7.21.6.1, 7.21.6.2, 7.26.3.5, 7.28.2.1, 7.28.2.2,
-  7.28.5.1).
+  begins and ends in its initial shift state (7.21.6.1, 7.21.6.2, 7.27.3.5, 7.29.2.1, 7.29.2.2,
+  7.29.5.1).
 -- In a call to one of the formatted output functions, a precision appears with a
-  conversion specifier other than those described (7.21.6.1, 7.28.2.1).
+  conversion specifier other than those described (7.21.6.1, 7.29.2.1).
 -- A conversion specification for a formatted output function uses an asterisk to denote
   an argument-supplied field width or precision, but the corresponding argument is not
-  provided (7.21.6.1, 7.28.2.1).
+  provided (7.21.6.1, 7.29.2.1).
 -- A conversion specification for a formatted output function uses a # or 0 flag with a
-  conversion specifier other than those described (7.21.6.1, 7.28.2.1).
+  conversion specifier other than those described (7.21.6.1, 7.29.2.1).
 -- A conversion specification for one of the formatted input/output functions uses a
   length modifier with a conversion specifier other than those described (7.21.6.1,
-  7.21.6.2, 7.28.2.1, 7.28.2.2).
+  7.21.6.2, 7.29.2.1, 7.29.2.2).
+
+[page 567] (Contents)
+
 -- An s conversion specifier is encountered by one of the formatted output functions,
   and the argument is missing the null terminator (unless a precision is specified that
-  does not require null termination) (7.21.6.1, 7.28.2.1).
+  does not require null termination) (7.21.6.1, 7.29.2.1).
 -- An n conversion specification for one of the formatted input/output functions includes
   any flags, an assignment-suppressing character, a field width, or a precision (7.21.6.1,
-  7.21.6.2, 7.28.2.1, 7.28.2.2).
+  7.21.6.2, 7.29.2.1, 7.29.2.2).
 -- A % conversion specifier is encountered by one of the formatted input/output
   functions, but the complete conversion specification is not exactly %% (7.21.6.1,
-  7.21.6.2, 7.28.2.1, 7.28.2.2).
+  7.21.6.2, 7.29.2.1, 7.29.2.2).
 -- An invalid conversion specification is found in the format for one of the formatted
   input/output functions, or the strftime or wcsftime function (7.21.6.1, 7.21.6.2,
-  7.26.3.5, 7.28.2.1, 7.28.2.2, 7.28.5.1).
--- The number of characters transmitted by a formatted output function is greater than
-  INT_MAX (7.21.6.1, 7.21.6.3, 7.21.6.8, 7.21.6.10).
-
-[page 563] (Contents)
-
+  7.27.3.5, 7.29.2.1, 7.29.2.2, 7.29.5.1).
+-- The number of characters or wide characters transmitted by a formatted output
+  function (or written to an array, or that would have been written to an array) is greater
+  than INT_MAX (7.21.6.1, 7.29.2.1).
+-- The number of input items assigned by a formatted input function is greater than
+  INT_MAX (7.21.6.2, 7.29.2.2).
 -- The result of a conversion by one of the formatted input functions cannot be
   represented in the corresponding object, or the receiving object does not have an
-  appropriate type (7.21.6.2, 7.28.2.2).
+  appropriate type (7.21.6.2, 7.29.2.2).
 -- A c, s, or [ conversion specifier is encountered by one of the formatted input
   functions, and the array pointed to by the corresponding argument is not large enough
   to accept the input sequence (and a null terminator if the conversion specifier is s or
-  [) (7.21.6.2, 7.28.2.2).
+  [) (7.21.6.2, 7.29.2.2).
 -- A c, s, or [ conversion specifier with an l qualifier is encountered by one of the
   formatted input functions, but the input is not a valid multibyte character sequence
-  that begins in the initial shift state (7.21.6.2, 7.28.2.2).
+  that begins in the initial shift state (7.21.6.2, 7.29.2.2).
 -- The input item for a %p conversion by one of the formatted input functions is not a
-  value converted earlier during the same program execution (7.21.6.2, 7.28.2.2).
+  value converted earlier during the same program execution (7.21.6.2, 7.29.2.2).
 -- The vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf,
   vsscanf, vfwprintf, vfwscanf, vswprintf, vswscanf, vwprintf, or
   vwscanf function is called with an improperly initialized va_list argument, or
   the argument is used (other than in an invocation of va_end) after the function
   returns (7.21.6.8, 7.21.6.9, 7.21.6.10, 7.21.6.11, 7.21.6.12, 7.21.6.13, 7.21.6.14,
-  7.28.2.5, 7.28.2.6, 7.28.2.7, 7.28.2.8, 7.28.2.9, 7.28.2.10).
+  7.29.2.5, 7.29.2.6, 7.29.2.7, 7.29.2.8, 7.29.2.9, 7.29.2.10).
 -- The contents of the array supplied in a call to the fgets or fgetws function are
-  used after a read error occurred (7.21.7.2, 7.28.3.2).
+  used after a read error occurred (7.21.7.2, 7.29.3.2).
+
+[page 568] (Contents)
+
 -- The file position indicator for a binary stream is used after a call to the ungetc
   function where its value was zero before the call (7.21.7.10).
 -- The file position indicator for a stream is used after an error occurred during a call to
@@ -21625,9 +21850,6 @@ n           No input is consumed. The corresponding argument shall be a pointer
   with a zero requested size is used to access an object (7.22.3).
 -- The value of a pointer that refers to space deallocated by a call to the free or
   realloc function is used (7.22.3).
-
-[page 564] (Contents)
-
 -- The alignment requested of the aligned_alloc function is not valid or not
   supported by the implementation, or the size requested is not an integral multiple of
   the alignment (7.22.3.1).
@@ -21643,9 +21865,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
   function, a call is made to the longjmp function that would terminate the call to the
   registered function (7.22.4.4, 7.22.4.7).
 -- The string set up by the getenv or strerror function is modified by the program
-  (7.22.4.6, 7.23.6.2).
+  (7.22.4.6, 7.24.6.2).
+-- A signal is raised while the quick_exit function is executing (7.22.4.7).
 -- A command is executed through the system function in a way that is documented as
   causing termination or some other form of undefined behavior (7.22.4.8).
+
+[page 569] (Contents)
+
 -- A searching or sorting utility function is called with an invalid pointer argument, even
   if the number of elements is zero (7.22.5).
 -- The comparison function called by a searching or sorting utility function alters the
@@ -21656,46 +21882,43 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- The current conversion state is used by a multibyte/wide character conversion
   function after changing the LC_CTYPE category (7.22.7).
 -- A string or wide string utility function is instructed to access an array beyond the end
-  of an object (7.23.1, 7.28.4).
+  of an object (7.24.1, 7.29.4).
 -- A string or wide string utility function is called with an invalid pointer argument, even
-  if the length is zero (7.23.1, 7.28.4).
+  if the length is zero (7.24.1, 7.29.4).
 -- The contents of the destination array are used after a call to the strxfrm,
   strftime, wcsxfrm, or wcsftime function in which the specified length was
-  too small to hold the entire null-terminated result (7.23.4.5, 7.26.3.5, 7.28.4.4.4,
-  7.28.5.1).
+  too small to hold the entire null-terminated result (7.24.4.5, 7.27.3.5, 7.29.4.4.4,
+  7.29.5.1).
+-- The first argument in the very first call to the strtok or wcstok is a null pointer
+  (7.24.5.8, 7.29.4.5.7).
+-- The type of an argument to a type-generic macro is not compatible with the type of
+  the corresponding parameter of the selected function (7.25).
+-- A complex argument is supplied for a generic parameter of a type-generic macro that
+  has no corresponding complex function (7.25).
+-- At least one member of the broken-down time passed to asctime contains a value
+  outside its normal range, or the calculated year exceeds four digits or is less than the
+  year 1000 (7.27.3.1).
+-- The argument corresponding to an s specifier without an l qualifier in a call to the
+  fwprintf function does not point to a valid multibyte character sequence that
+  begins in the initial shift state (7.29.2.11).
+-- In a call to the wcstok function, the object pointed to by ptr does not have the
+  value stored by the previous call for the same wide string (7.29.4.5.7).
+-- An mbstate_t object is used inappropriately (7.29.6).
+-- The value of an argument of type wint_t to a wide character classification or case
+  mapping function is neither equal to the value of WEOF nor representable as a
+  wchar_t (7.30.1).
 
-[page 565] (Contents)
+[page 570] (Contents)
 
-    -- The first argument in the very first call to the strtok or wcstok is a null pointer
-      (7.23.5.8, 7.28.4.5.7).
-    -- The type of an argument to a type-generic macro is not compatible with the type of
-      the corresponding parameter of the selected function (7.24).
-    -- A complex argument is supplied for a generic parameter of a type-generic macro that
-      has no corresponding complex function (7.24).
-    -- At least one field of the broken-down time passed to asctime contains a value
-      outside its normal range, or the calculated year exceeds four digits or is less than the
-      year 1000 (7.26.3.1).
-    -- The argument corresponding to an s specifier without an l qualifier in a call to the
-      fwprintf function does not point to a valid multibyte character sequence that
-      begins in the initial shift state (7.28.2.11).
-    -- In a call to the wcstok function, the object pointed to by ptr does not have the
-      value stored by the previous call for the same wide string (7.28.4.5.7).
-    -- An mbstate_t object is used inappropriately (7.28.6).
-    -- The value of an argument of type wint_t to a wide character classification or case
-      mapping function is neither equal to the value of WEOF nor representable as a
-      wchar_t (7.29.1).
     -- The iswctype function is called using a different LC_CTYPE category from the
       one in effect for the call to the wctype function that returned the description
-      (7.29.2.2.1).
+      (7.30.2.2.1).
     -- The towctrans function is called using a different LC_CTYPE category from the
       one in effect for the call to the wctrans function that returned the description
-      (7.29.3.2.1).
+      (7.30.3.2.1).
     J.3 Implementation-defined behavior
 1   A conforming implementation is required to document its choice of behavior in each of
     the areas listed in this subclause. The following are implementation-defined:
-
-[page 566] (Contents)
-
     J.3.1 Translation
 1   -- How a diagnostic is identified (3.10, 5.1.1.3).
     -- Whether each nonempty sequence of white-space characters other than new-line is
@@ -21719,13 +21942,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- The set of environment names and the method for altering the environment list used
       by the getenv function (7.22.4.6).
     -- The manner of execution of the string by the system function (7.22.4.8).
+
+[page 571] (Contents)
+
     J.3.3 Identifiers
 1   -- Which additional multibyte characters may appear in identifiers and their
       correspondence to universal character names (6.4.2).
     -- The number of significant initial characters in an identifier (5.2.4.1, 6.4.2).
-
-[page 567] (Contents)
-
     J.3.4 Characters
 1   -- The number of bits in a byte (3.6).
     -- The values of the members of the execution character set (5.2.1).
@@ -21757,7 +21980,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       corresponding  standard   encoding macro      (__STDC_ISO_10646__,
       __STDC_UTF_16__, or __STDC_UTF_32__) is not defined (6.10.8.2).
 
-[page 568] (Contents)
+[page 572] (Contents)
 
     J.3.5 Integers
 1   -- Any extended integer types that exist in the implementation (6.2.5).
@@ -21774,7 +21997,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       <math.h> and <complex.h> that return floating-point results (5.2.4.2.2).
     -- The accuracy of the conversions between floating-point internal representations and
       string representations performed by the library functions in <stdio.h>,
-      <stdlib.h>, and <wchar.h> (5.2.4.2.2).
+      <stdlib.h>, and <wchar.h> (5.2.4.2.2).
     -- The rounding behaviors characterized by non-standard values of FLT_ROUNDS
       (5.2.4.2.2).
     -- The evaluation methods characterized by non-standard negative values of
@@ -21793,7 +22016,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       classifications, and their macro names (7.6, 7.12).
     -- The default state for the FP_CONTRACT pragma (7.12.2).
 
-[page 569] (Contents)
+[page 573] (Contents)
 
     J.3.7 Arrays and pointers
 1   -- The result of converting a pointer to an integer or vice versa (6.3.2.3).
@@ -21828,7 +22051,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- Whether the value of a single-character character constant in a constant expression
       that controls conditional inclusion may have a negative value (6.10.1).
 
-[page 570] (Contents)
+[page 574] (Contents)
 
     -- The places that are searched for an included < > delimited header, and how the places
       are specified or the header is identified (6.10.2).
@@ -21865,7 +22088,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
       floating-point exception is raised when the integer expression math_errhandling
       & MATH_ERREXCEPT is nonzero. (7.12.1).
 
-[page 571] (Contents)
+[page 575] (Contents)
 
 -- Whether a domain error occurs or zero is returned when an fmod function has a
   second argument of zero (7.12.10.1).
@@ -21901,24 +22124,24 @@ n           No input is consumed. The corresponding argument shall be a pointer
 -- Which changes of mode are permitted (if any), and under what circumstances
   (7.21.5.4).
 
-[page 572] (Contents)
+[page 576] (Contents)
 
 -- The style used to print an infinity or NaN, and the meaning of any n-char or n-wchar
-  sequence printed for a NaN (7.21.6.1, 7.28.2.1).
+  sequence printed for a NaN (7.21.6.1, 7.29.2.1).
 -- The output for %p conversion in the fprintf or fwprintf function (7.21.6.1,
-  7.28.2.1).
+  7.29.2.1).
 -- The interpretation of a - character that is neither the first nor the last character, nor
   the second where a ^ character is the first, in the scanlist for %[ conversion in the
-  fscanf or fwscanf function (7.21.6.2, 7.28.2.1).
+  fscanf or fwscanf function (7.21.6.2, 7.29.2.1).
 -- The set of sequences matched by a %p conversion and the interpretation of the
-  corresponding input item in the fscanf or fwscanf function (7.21.6.2, 7.28.2.2).
+  corresponding input item in the fscanf or fwscanf function (7.21.6.2, 7.29.2.2).
 -- The value to which the macro errno is set by the fgetpos, fsetpos, or ftell
   functions on failure (7.21.9.1, 7.21.9.3, 7.21.9.4).
 -- The meaning of any n-char or n-wchar sequence in a string representing a NaN that is
   converted by the strtod, strtof, strtold, wcstod, wcstof, or wcstold
-  function (7.22.1.3, 7.28.4.1.1).
+  function (7.22.1.3, 7.29.4.1.1).
 -- Whether or not the strtod, strtof, strtold, wcstod, wcstof, or wcstold
-  function sets errno to ERANGE when underflow occurs (7.22.1.3, 7.28.4.1.1).
+  function sets errno to ERANGE when underflow occurs (7.22.1.3, 7.29.4.1.1).
 -- Whether the calloc, malloc, and realloc functions return a null pointer or a
   pointer to an allocated object when the size requested is zero (7.22.3).
 -- Whether open streams with unwritten buffered data are flushed, open streams are
@@ -21928,15 +22151,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
   _Exit, or quick_exit function (7.22.4.1, 7.22.4.4, 7.22.4.5, 7.22.4.7).
 -- The value returned by the system function when its argument is not a null pointer
   (7.22.4.8).
--- The local time zone and Daylight Saving Time (7.26.1).
--- The range and precision of times representable in clock_t and time_t (7.26).
--- The era for the clock function (7.26.2.1).
+-- The range and precision of times representable in clock_t and time_t (7.27).               *
+-- The local time zone and Daylight Saving Time (7.27.1).
+-- The era for the clock function (7.27.2.1).
+-- The TIME_UTC epoch (7.27.2.5).
 -- The replacement string for the %Z specifier to the strftime, and wcsftime
-  functions in the "C" locale (7.26.3.5, 7.28.5.1).
+  functions in the "C" locale (7.27.3.5, 7.29.5.1).
 -- Whether the functions in <math.h> honor the rounding direction mode in an
   IEC 60559 conformant implementation, unless explicitly specified otherwise (F.10).
 
-[page 573] (Contents)
+[page 577] (Contents)
 
     J.3.13 Architecture
 1   -- The values or expressions assigned to the macros specified in the headers
@@ -21947,9 +22171,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
       in this International Standard) (6.2.6.1).
     -- Whether any extended alignments are supported and the contexts in which they are
       supported (6.2.8).
-    -- Valid alignment values other than those returned by an alignof expression for
+    -- Valid alignment values other than those returned by an _Alignof expression for
       fundamental types, if any (6.2.8).
-    -- The value of the result of the sizeof and alignof operators (6.5.3.4).
+    -- The value of the result of the sizeof and _Alignof operators (6.5.3.4).
     J.4 Locale-specific behavior
 1   The following characteristics of a hosted environment are locale-specific and are required
     to be documented by the implementation:
@@ -21960,24 +22184,24 @@ n           No input is consumed. The corresponding argument shall be a pointer
     -- The shift states used for the encoding of multibyte characters (5.2.1.2).
     -- The direction of writing of successive printing characters (5.2.2).
     -- The decimal-point character (7.1.1).
-    -- The set of printing characters (7.4, 7.29.2).
-    -- The set of control characters (7.4, 7.29.2).
+    -- The set of printing characters (7.4, 7.30.2).
+    -- The set of control characters (7.4, 7.30.2).
     -- The sets of characters tested for by the isalpha, isblank, islower, ispunct,
       isspace, isupper, iswalpha, iswblank, iswlower, iswpunct,
       iswspace, or iswupper functions (7.4.1.2, 7.4.1.3, 7.4.1.7, 7.4.1.9, 7.4.1.10,
-      7.4.1.11, 7.29.2.1.2, 7.29.2.1.3, 7.29.2.1.7, 7.29.2.1.9, 7.29.2.1.10, 7.29.2.1.11).
+      7.4.1.11, 7.30.2.1.2, 7.30.2.1.3, 7.30.2.1.7, 7.30.2.1.9, 7.30.2.1.10, 7.30.2.1.11).
     -- The native environment (7.11.1.1).
     -- Additional subject sequences accepted by the numeric conversion functions (7.22.1,
-      7.28.4.1).
-    -- The collation sequence of the execution character set (7.23.4.3, 7.28.4.4.2).
+      7.29.4.1).
+    -- The collation sequence of the execution character set (7.24.4.3, 7.29.4.4.2).
 
-[page 574] (Contents)
+[page 578] (Contents)
 
     -- The contents of the error message strings set up by the strerror function
-      (7.23.6.2).
-    -- The formats for time and date (7.26.3.5, 7.28.5.1).
-    -- Character mappings that are supported by the towctrans function (7.29.1).
-    -- Character classifications that are supported by the iswctype function (7.29.1).
+      (7.24.6.2).
+    -- The formats for time and date (7.27.3.5, 7.29.5.1).
+    -- Character mappings that are supported by the towctrans function (7.30.1).
+    -- Character classifications that are supported by the iswctype function (7.30.1).
     J.5 Common extensions
 1   The following extensions are widely used in many systems, but are not portable to all
     implementations. The inclusion of any extension that may cause a strictly conforming
@@ -22002,13 +22226,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
 1   String literals are modifiable (in which case, identical string literals should denote distinct
     objects) (6.4.5).
 
-[page 575] (Contents)
+[page 579] (Contents)
 
     J.5.6 Other arithmetic types
 1   Additional arithmetic types, such as __int128 or double double, and their
     appropriate conversions are defined (6.2.5, 6.3.1). Additional floating types may have
     more range or precision than long double, may be used for evaluating expressions of
-    other floating types, and may be used to define float_t or double_t.
+    other floating types, and may be used to define float_t or double_t. Additional
+    floating types may also have less range or precision than float.
     J.5.7 Function pointer casts
 1   A pointer to an object or to void may be cast to a pointer to a function, allowing data to
     be invoked as a function (6.5.4).
@@ -22029,13 +22254,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
 1   There may be more than one external definition for the identifier of an object, with or
     without the explicit use of the keyword extern; if the definitions disagree, or more than
     one is initialized, the behavior is undefined (6.9.2).
+
+[page 580] (Contents)
+
     J.5.12 Predefined macro names
 1   Macro names that do not begin with an underscore, describing the translation and
     execution environments, are defined by the implementation before translation begins
     (6.10.8).
-
-[page 576] (Contents)
-
     J.5.13 Floating-point status flags
 1   If any floating-point status flags are set on normal termination after all calls to functions
     registered by the atexit function have been made (see 7.22.4.4), the implementation
@@ -22050,13 +22275,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
     J.5.16 Defined file position indicator
 1   The file position indicator is decremented by each successful call to the ungetc or
     ungetwc function for a text stream, except if its value was zero before a call (7.21.7.10,
-    7.28.3.10).
+    7.29.3.10).
     J.5.17 Math error reporting
 1   Functions declared in <complex.h> and <math.h> raise SIGFPE to report errors
     instead of, or in addition to, setting errno or raising floating-point exceptions (7.3,
     7.12).
 
-[page 577] (Contents)
+[page 581] (Contents)
 
                                            Annex K
                                           (normative)
@@ -22088,14 +22313,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
     function. Such functions can be troublesome since a previously returned result can
     change if the function is called again, perhaps by another thread.
 
-[page 578] (Contents)
+[page 582] (Contents)
 
     K.2 Scope
 1   This annex specifies a series of optional extensions that can be useful in the mitigation of
     security vulnerabilities in programs, and comprise new functions, macros, and types
     declared or defined in existing standard headers.
 2   An implementation that defines __STDC_LIB_EXT1__ shall conform to the
-    specifications in this annex.367)
+    specifications in this annex.380)
 3   Subclause K.3 should be read as if it were merged into the parallel structure of named
     subclauses of clause 7.
     K.3 Library
@@ -22108,28 +22333,28 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   The functions, macros, and types declared or defined in K.3 and its subclauses are
     declared and defined by their respective headers if __STDC_WANT_LIB_EXT1__ is
     defined as a macro which expands to the integer constant 1 at the point in the source file
-    where the appropriate header is first included.368)
+    where the appropriate header is first included.381)
 3   It is implementation-defined whether the functions, macros, and types declared or defined
     in K.3 and its subclauses are declared or defined by their respective headers if
     __STDC_WANT_LIB_EXT1__ is not defined as a macro at the point in the source file
-    where the appropriate header is first included.369)
+    where the appropriate header is first included.382)
 4   Within a preprocessing translation unit, __STDC_WANT_LIB_EXT1__ shall be
     defined identically for all inclusions of any headers from subclause K.3. If
     __STDC_WANT_LIB_EXT1__ is defined differently for any such inclusion, the
     implementation shall issue a diagnostic as if a preprocessor error directive were used.
 
 
-    367) Implementations that do not define __STDC_LIB_EXT1__ are not required to conform to these
+    380) Implementations that do not define __STDC_LIB_EXT1__ are not required to conform to these
          specifications.
-    368) Future revisions of this International Standard may define meanings for other values of
+    381) Future revisions of this International Standard may define meanings for other values of
          __STDC_WANT_LIB_EXT1__.
-    369) Subclause 7.1.3 reserves certain names and patterns of names that an implementation may use in
+    382) Subclause 7.1.3 reserves certain names and patterns of names that an implementation may use in
          headers. All other names are not reserved, and a conforming implementation is not permitted to use
          them. While some of the names defined in K.3 and its subclauses are reserved, others are not. If an
          unreserved name is defined in a header when __STDC_WANT_LIB_EXT1__ is defined as 0, the
          implementation is not conforming.
 
-[page 579] (Contents)
+[page 583] (Contents)
 
     K.3.1.2 Reserved identifiers
 1   Each macro name in any of the following subclauses is reserved for use as specified if it
@@ -22147,7 +22372,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.1.4 Runtime-constraint violations
 1   Most functions in this annex include as part of their specification a list of runtime-
     constraints. These runtime-constraints are requirements on the program using the
-    library.370)
+    library.383)
 2   Implementations shall verify that the runtime-constraints for a function are not violated
     by the program. If a runtime-constraint is violated, the implementation shall call the
     currently registered runtime-constraint handler (see set_constraint_handler_s
@@ -22165,28 +22390,28 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    370) Although runtime-constraints replace many cases of undefined behavior, undefined behavior still
+    383) Although runtime-constraints replace many cases of undefined behavior, undefined behavior still
          exists in this annex. Implementations are free to detect any case of undefined behavior and treat it as a
          runtime-constraint violation by calling the runtime-constraint handler. This license comes directly
          from the definition of undefined behavior.
 
-[page 580] (Contents)
+[page 584] (Contents)
 
     K.3.2 Errors <errno.h>
 1   The header <errno.h> defines a type.
 2   The type is
              errno_t
-    which is type int.371)
+    which is type int.384)
     K.3.3 Common definitions <stddef.h>
 1   The header <stddef.h> defines a type.
 2   The type is
              rsize_t
-    which is the type size_t.372)
+    which is the type size_t.385)
     K.3.4 Integer types <stdint.h>
 1   The header <stdint.h> defines a macro.
 2   The macro is
              RSIZE_MAX
-    which expands to a value373) of type size_t. Functions that have parameters of type
+    which expands to a value386) of type size_t. Functions that have parameters of type
     rsize_t consider it a runtime-constraint violation if the values of those parameters are
     greater than RSIZE_MAX.
     Recommended practice
@@ -22201,13 +22426,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
     some legitimate, but very large, objects. Implementations targeting machines with small
     address spaces may wish to define RSIZE_MAX as SIZE_MAX, which means that there
 
-    371) As a matter of programming style, errno_t may be used as the type of something that deals only
+    384) As a matter of programming style, errno_t may be used as the type of something that deals only
          with the values that might be found in errno. For example, a function which returns the value of
          errno might be declared as having the return type errno_t.
-    372) See the description of the RSIZE_MAX macro in <stdint.h>.
-    373) The macro RSIZE_MAX need not expand to a constant expression.
+    385) See the description of the RSIZE_MAX macro in <stdint.h>.
+    386) The macro RSIZE_MAX need not expand to a constant expression.
 
-[page 581] (Contents)
+[page 585] (Contents)
 
     is no object size that is considered a runtime-constraint violation.
     K.3.5 Input/output <stdio.h>
@@ -22242,7 +22467,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     with the meaning that mode has in the fopen_s function (including the mode's effect
     on exclusive access and file permissions).
 
-[page 582] (Contents)
+[page 586] (Contents)
 
 5   If the file was created successfully, then the pointer to FILE pointed to by streamptr
     will be set to the pointer to the object controlling the opened file. Otherwise, the pointer
@@ -22265,7 +22490,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     maxsize shall be greater than the length of the generated file name string.
     Description
 3   The tmpnam_s function generates a string that is a valid file name and that is not the
-    same as the name of an existing file.374) The function is potentially capable of generating
+    same as the name of an existing file.387) The function is potentially capable of generating
     TMP_MAX_S different strings, but any or all of them may already be in use by existing
     files and thus not be suitable return values. The lengths of these strings shall be less than
     the value of the L_tmpnam_s macro.
@@ -22275,7 +22500,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    374) Files created using strings generated by the tmpnam_s function are temporary only in the sense that
+    387) Files created using strings generated by the tmpnam_s function are temporary only in the sense that
          their names should not collide with those generated by conventional naming rules for the
          implementation. It is still necessary to use the remove function to remove such files when their use
          is ended, and before program termination. Implementations should take care in choosing the patterns
@@ -22283,10 +22508,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
          race condition and possible conflict when multiple programs run simultaneously by the same user
          generate the same temporary file names.
 
-[page 583] (Contents)
+[page 587] (Contents)
 
 6    The implementation shall behave as if no library function except tmpnam calls the
-     tmpnam_s function.375)
+     tmpnam_s function.388)
      Recommended practice
 7    After a program obtains a file name using the tmpnam_s function and before the
      program creates a file with that name, the possibility exists that someone else may create
@@ -22319,10 +22544,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-     375) An implementation may have tmpnam call tmpnam_s (perhaps so there is only one naming
+     388) An implementation may have tmpnam call tmpnam_s (perhaps so there is only one naming
           convention for temporary files), but this is not required.
 
-[page 584] (Contents)
+[page 588] (Contents)
 
     Description
 4   The fopen_s function opens the file whose name is the string pointed to by
@@ -22357,14 +22582,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
     underlying system supports it, the file shall have a file permission that prevents other
     users on the system from accessing the file. If the file is being created and first character
     of the mode string is 'u', then by the time the file has been closed, it shall have the
-    system default file access permissions.376)
+    system default file access permissions.389)
 8   If the file was opened successfully, then the pointer to FILE pointed to by streamptr
     will be set to the pointer to the object controlling the opened file. Otherwise, the pointer
 
 
-    376) These are the same permissions that the file would have been created with by fopen.
+    389) These are the same permissions that the file would have been created with by fopen.
 
-[page 585] (Contents)
+[page 589] (Contents)
 
     to FILE pointed to by streamptr will be set to a null pointer.
     Returns
@@ -22402,7 +22627,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 8   The freopen_s function returns zero if it opened the file. If it did not open the file or
     there was a runtime-constraint violation, freopen_s returns a nonzero value.
 
-[page 586] (Contents)
+[page 590] (Contents)
 
     K.3.5.3 Formatted input/output functions
 1   Unless explicitly stated otherwise, if the execution of a function described in this
@@ -22415,11 +22640,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
              int fprintf_s(FILE * restrict stream,
                   const char * restrict format, ...);
     Runtime-constraints
-2   Neither stream nor format shall be a null pointer. The %n specifier377) (modified or
+2   Neither stream nor format shall be a null pointer. The %n specifier390) (modified or
     not by flags, field width, or precision) shall not appear in the string pointed to by
     format. Any argument to fprintf_s corresponding to a %s specifier shall not be a
     null pointer.
-3   If there is a runtime-constraint violation,378) the fprintf_s function does not attempt
+3   If there is a runtime-constraint violation,391) the fprintf_s function does not attempt
     to produce further output, and it is unspecified to what extent fprintf_s produced
     output before discovering the runtime-constraint violation.
     Description
@@ -22432,14 +22657,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    377) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    390) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
-    378) Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
+    391) Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
          implementation may treat any unsupported specifiers in the string pointed to by format as a runtime-
          constraint violation.
 
-[page 587] (Contents)
+[page 591] (Contents)
 
     K.3.5.3.2 The fscanf_s function
     Synopsis
@@ -22450,7 +22675,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Runtime-constraints
 2   Neither stream nor format shall be a null pointer. Any argument indirected though in
     order to store converted input shall not be a null pointer.
-3   If there is a runtime-constraint violation,379) the fscanf_s function does not attempt to
+3   If there is a runtime-constraint violation,392) the fscanf_s function does not attempt to
     perform further input, and it is unspecified to what extent fscanf_s performed input
     before discovering the runtime-constraint violation.
     Description
@@ -22460,17 +22685,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
     immediately followed in the argument list by the second argument, which has type
     rsize_t and gives the number of elements in the array pointed to by the first argument
     of the pair. If the first argument points to a scalar object, it is considered to be an array of
-    one element.380)
+    one element.393)
 5   A matching failure occurs if the number of elements in a receiving object is insufficient to
     hold the converted input (including any trailing null character).
     Returns
 6   The fscanf_s function returns the value of the macro EOF if an input failure occurs
     before any conversion or if there is a runtime-constraint violation. Otherwise, the
 
-    379) Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
+    392) Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
          implementation may treat any unsupported specifiers in the string pointed to by format as a runtime-
          constraint violation.
-    380) If the format is known at translation time, an implementation may issue a diagnostic for any argument
+    393) If the format is known at translation time, an implementation may issue a diagnostic for any argument
          used to store the result from a c, s, or [ conversion specifier if that argument is not followed by an
          argument of a type compatible with rsize_t. A limited amount of checking may be done if even if
          the format is not known at translation time. For example, an implementation may issue a diagnostic
@@ -22481,7 +22706,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
          diagnostic could flag any non-pointer argument following format that did not have a type
          compatible with rsize_t.
 
-[page 588] (Contents)
+[page 592] (Contents)
 
     fscanf_s function returns the number of input items assigned, which can be fewer than
     provided for, or even zero, in the event of an early matching failure.
@@ -22513,7 +22738,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
              #include <stdio.h>
              int printf_s(const char * restrict format, ...);
     Runtime-constraints
-2   format shall not be a null pointer. The %n specifier381) (modified or not by flags, field
+2   format shall not be a null pointer. The %n specifier394) (modified or not by flags, field
     width, or precision) shall not appear in the string pointed to by format. Any argument
     to printf_s corresponding to a %s specifier shall not be a null pointer.
 3   If there is a runtime-constraint violation, the printf_s function does not attempt to
@@ -22521,11 +22746,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
     before discovering the runtime-constraint violation.
 
 
-    381) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    394) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
 
-[page 589] (Contents)
+[page 593] (Contents)
 
     Description
 4   The printf_s function is equivalent to the printf function except for the explicit
@@ -22560,10 +22785,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
                 const char * restrict format, ...);
     Runtime-constraints
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
-    than RSIZE_MAX. The %n specifier382) (modified or not by flags, field width, or
+    than RSIZE_MAX. The %n specifier395) (modified or not by flags, field width, or
     precision) shall not appear in the string pointed to by format. Any argument to
 
-[page 590] (Contents)
+[page 594] (Contents)
 
     snprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
     error shall occur.
@@ -22591,20 +22816,20 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
     than RSIZE_MAX. The number of characters (including the trailing null) required for the
     result to be written to the array pointed to by s shall not be greater than n. The %n
-    specifier383) (modified or not by flags, field width, or precision) shall not appear in the
+    specifier396) (modified or not by flags, field width, or precision) shall not appear in the
     string pointed to by format. Any argument to sprintf_s corresponding to a %s
     specifier shall not be a null pointer. No encoding error shall occur.
 
 
 
-    382) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    395) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
-    383) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    396) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
 
-[page 591] (Contents)
+[page 595] (Contents)
 
 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
     than zero and less than RSIZE_MAX, then the sprintf_s function sets s[0] to the
@@ -22642,7 +22867,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     sscanf_s function returns the number of input items assigned, which can be fewer than
     provided for, or even zero, in the event of an early matching failure.
 
-[page 592] (Contents)
+[page 596] (Contents)
 
     K.3.5.3.8 The vfprintf_s function
     Synopsis
@@ -22653,7 +22878,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                   const char * restrict format,
                   va_list arg);
     Runtime-constraints
-2   Neither stream nor format shall be a null pointer. The %n specifier384) (modified or
+2   Neither stream nor format shall be a null pointer. The %n specifier397) (modified or
     not by flags, field width, or precision) shall not appear in the string pointed to by
     format. Any argument to vfprintf_s corresponding to a %s specifier shall not be a
     null pointer.
@@ -22678,11 +22903,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    384) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    397) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
 
-[page 593] (Contents)
+[page 597] (Contents)
 
     Runtime-constraints
 2   Neither stream nor format shall be a null pointer. Any argument indirected though in
@@ -22694,7 +22919,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   The vfscanf_s function is equivalent to fscanf_s, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vfscanf_s function does not invoke the
-    va_end macro.385)
+    va_end macro.398)
     Returns
 5   The vfscanf_s function returns the value of the macro EOF if an input failure occurs
     before any conversion or if there is a runtime-constraint violation. Otherwise, the
@@ -22708,21 +22933,21 @@ n           No input is consumed. The corresponding argument shall be a pointer
              int vprintf_s(const char * restrict format,
                   va_list arg);
     Runtime-constraints
-2   format shall not be a null pointer. The %n specifier386) (modified or not by flags, field
+2   format shall not be a null pointer. The %n specifier399) (modified or not by flags, field
     width, or precision) shall not appear in the string pointed to by format. Any argument
     to vprintf_s corresponding to a %s specifier shall not be a null pointer.
 3   If there is a runtime-constraint violation, the vprintf_s function does not attempt to
     produce further output, and it is unspecified to what extent vprintf_s produced output
     before discovering the runtime-constraint violation.
 
-    385) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
+    398) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
          vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
          indeterminate.
-    386) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    399) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
 
-[page 594] (Contents)
+[page 598] (Contents)
 
     Description
 4   The vprintf_s function is equivalent to the vprintf function except for the explicit
@@ -22747,7 +22972,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   The vscanf_s function is equivalent to scanf_s, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vscanf_s function does not invoke the
-    va_end macro.387)
+    va_end macro.400)
     Returns
 5   The vscanf_s function returns the value of the macro EOF if an input failure occurs
     before any conversion or if there is a runtime-constraint violation. Otherwise, the
@@ -22757,11 +22982,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    387) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
+    400) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
          vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
          indeterminate.
 
-[page 595] (Contents)
+[page 599] (Contents)
 
     K.3.5.3.12 The vsnprintf_s function
     Synopsis
@@ -22773,7 +22998,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
                   va_list arg);
     Runtime-constraints
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
-    than RSIZE_MAX. The %n specifier388) (modified or not by flags, field width, or
+    than RSIZE_MAX. The %n specifier401) (modified or not by flags, field width, or
     precision) shall not appear in the string pointed to by format. Any argument to
     vsnprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
     error shall occur.
@@ -22795,11 +23020,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    388) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    401) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
 
-[page 596] (Contents)
+[page 600] (Contents)
 
     K.3.5.3.13 The vsprintf_s function
     Synopsis
@@ -22813,7 +23038,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
     than RSIZE_MAX. The number of characters (including the trailing null) required for the
     result to be written to the array pointed to by s shall not be greater than n. The %n
-    specifier389) (modified or not by flags, field width, or precision) shall not appear in the
+    specifier402) (modified or not by flags, field width, or precision) shall not appear in the
     string pointed to by format. Any argument to vsprintf_s corresponding to a %s
     specifier shall not be a null pointer. No encoding error shall occur.
 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
@@ -22833,11 +23058,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    389) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
+    402) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
          format string was %%n.
 
-[page 597] (Contents)
+[page 601] (Contents)
 
     K.3.5.3.14 The vsscanf_s function
     Synopsis
@@ -22857,7 +23082,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   The vsscanf_s function is equivalent to sscanf_s, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vsscanf_s function does not invoke the
-    va_end macro.390)
+    va_end macro.403)
     Returns
 5   The vsscanf_s function returns the value of the macro EOF if an input failure occurs
     before any conversion or if there is a runtime-constraint violation. Otherwise, the
@@ -22873,16 +23098,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    390) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
+    403) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
          vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
          indeterminate.
 
-[page 598] (Contents)
+[page 602] (Contents)
 
     Runtime-constraints
 2   s shall not be a null pointer. n shall neither be equal to zero nor be greater than
     RSIZE_MAX. A new-line character, end-of-file, or read error shall occur within reading
-    n-1 characters from stdin.391)
+    n-1 characters from stdin.404)
 3   If there is a runtime-constraint violation, s[0] is set to the null character, and characters
     are read and discarded from stdin until a new-line character is read, or end-of-file or a
     read error occurs.
@@ -22909,12 +23134,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    391) The gets_s function, unlike the historical gets function, makes it a runtime-constraint violation for
+    404) The gets_s function, unlike the historical gets function, makes it a runtime-constraint violation for
          a line of input to overflow the buffer to store it. Unlike the fgets function, gets_s maintains a
          one-to-one relationship between input lines and successful calls to gets_s. Programs that use gets
          expect such a relationship.
 
-[page 599] (Contents)
+[page 603] (Contents)
 
     K.3.6 General utilities <stdlib.h>
 1   The header <stdlib.h> defines three types.
@@ -22949,7 +23174,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
             return value of the function is passed. Otherwise, a positive value of type
             errno_t is passed.
 
-[page 600] (Contents)
+[page 604] (Contents)
 
 4   The implementation has a default constraint handler that is used if no calls to the
     set_constraint_handler_s function have been made. The behavior of the
@@ -22958,7 +23183,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     implementation default handler becomes the current constraint handler.
     Returns
 6   The set_constraint_handler_s function returns a pointer to the previously
-    registered handler.392)
+    registered handler.405)
     K.3.6.1.2 The abort_handler_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
@@ -22972,41 +23197,41 @@ n           No input is consumed. The corresponding argument shall be a pointer
     set_constraint_handler_s function.
 3   The abort_handler_s function writes a message on the standard error stream in an
     implementation-defined format. The message shall include the string pointed to by msg.
-    The abort_handler_s function then calls the abort function.393)
+    The abort_handler_s function then calls the abort function.406)
     Returns
 4   The abort_handler_s function does not return to its caller.
 
 
 
 
-    392) If the previous handler was registered by calling set_constraint_handler_s with a null
+    405) If the previous handler was registered by calling set_constraint_handler_s with a null
          pointer argument, a pointer to the implementation default handler is returned (not NULL).
-    393) Many implementations invoke a debugger when the abort function is called.
+    406) Many implementations invoke a debugger when the abort function is called.
 
-[page 601] (Contents)
+[page 605] (Contents)
 
     K.3.6.1.3 The ignore_handler_s function
     Synopsis
-1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <stdlib.h>
-            void ignore_handler_s(
-                 const char * restrict msg,
-                 void * restrict ptr,
-                 errno_t error);
+1            #define __STDC_WANT_LIB_EXT1__ 1
+             #include <stdlib.h>
+             void ignore_handler_s(
+                  const char * restrict msg,
+                  void * restrict ptr,
+                  errno_t error);
     Description
 2   A pointer to the ignore_handler_s function shall be a suitable argument to the
     set_constraint_handler_s function.
-3   The ignore_handler_s function simply returns to its caller.394)
+3   The ignore_handler_s function simply returns to its caller.407)
     Returns
 4   The ignore_handler_s function returns no value.
     K.3.6.2 Communication with the environment
     K.3.6.2.1 The getenv_s function
     Synopsis
-1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <stdlib.h>
-            errno_t getenv_s(size_t * restrict len,
-                       char * restrict value, rsize_t maxsize,
-                       const char * restrict name);
+1            #define __STDC_WANT_LIB_EXT1__ 1
+             #include <stdlib.h>
+             errno_t getenv_s(size_t * restrict len,
+                        char * restrict value, rsize_t maxsize,
+                        const char * restrict name);
     Runtime-constraints
 2   name shall not be a null pointer. maxsize shall neither equal zero nor be greater than
     RSIZE_MAX. If maxsize is not equal to zero, then value shall not be a null pointer.
@@ -23017,12 +23242,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
     for a string that matches the string pointed to by name.
 
 
-    394) If the runtime-constraint handler is set to the ignore_handler_s function, any library function in
+    407) If the runtime-constraint handler is set to the ignore_handler_s function, any library function in
          which a runtime-constraint violation occurs will return to its caller. The caller can determine whether
          a runtime-constraint violation occurred based on the library function's specification (usually, the
          library function returns a nonzero errno_t).
 
-[page 602] (Contents)
+[page 606] (Contents)
 
 5   If that name is found then getenv_s performs the following actions. If len is not a
     null pointer, the length of the string associated with the matched list member is stored in
@@ -23032,7 +23257,8 @@ n           No input is consumed. The corresponding argument shall be a pointer
     a null pointer, zero is stored in the integer pointed to by len. If maxsize is greater than
     zero, then value[0] is set to the null character.
 7   The set of environment names and the method for altering the environment list are
-    implementation-defined.
+    implementation-defined. The getenv_s function need not avoid data races with other
+    threads of execution that modify the environment list.408)
     Returns
 8   The getenv_s function returns zero if the specified name is found and the associated
     string was successfully stored in value. Otherwise, a nonzero value is returned.
@@ -23044,7 +23270,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     rearrangement, and the pointer to the array may be null.
 2   The implementation shall ensure that the second argument of the comparison function
     (when called from bsearch_s), or both arguments (when called from qsort_s), are
-    pointers to elements of the array.395) The first argument when called from bsearch_s
+    pointers to elements of the array.409) The first argument when called from bsearch_s
     shall equal key.
 3   The comparison function shall not alter the contents of either the array or search key. The
     implementation may reorder elements of the array between calls to the comparison
@@ -23055,15 +23281,13 @@ n           No input is consumed. The corresponding argument shall be a pointer
     the array, and for bsearch_s the same object shall always compare the same way with
     the key.
 
-
-
-
-    395) That is, if the value passed is p, then the following expressions are always valid and nonzero:
+    408) Many implementations provide non-standard functions that modify the environment list.
+    409) That is, if the value passed is p, then the following expressions are always valid and nonzero:
                   ((char *)p - (char *)base) % size == 0
                   (char *)p >= (char *)base
                   (char *)p < (char *)base + nmemb * size
 
-[page 603] (Contents)
+[page 607] (Contents)
 
 5   A sequence point occurs immediately before and immediately after each call to the
     comparison function, and also between any call to the comparison function and any
@@ -23091,19 +23315,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
     return an integer less than, equal to, or greater than zero if the key object is considered,
     respectively, to be less than, to match, or to be greater than the array element. The array
     shall consist of: all the elements that compare less than, all the elements that compare
-    equal to, and all the elements that compare greater than the key object, in that order.396)
+    equal to, and all the elements that compare greater than the key object, in that order.410)
     The third argument to the comparison function is the context argument passed to
     bsearch_s. The sole use of context by bsearch_s is to pass it to the comparison
-    function.397)
+    function.411)
 
 
 
 
-    396) In practice, this means that the entire array has been sorted according to the comparison function.
-    397) The context argument is for the use of the comparison function in performing its duties. For
+    410) In practice, this means that the entire array has been sorted according to the comparison function.
+    411) The context argument is for the use of the comparison function in performing its duties. For
          example, it might specify a collating sequence used by the comparison function.
 
-[page 604] (Contents)
+[page 608] (Contents)
 
     Returns
 6   The bsearch_s function returns a pointer to a matching element of the array, or a null
@@ -23130,7 +23354,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     to, or greater than zero if the first argument is considered to be respectively less than,
     equal to, or greater than the second. The third argument to the comparison function is the
     context argument passed to qsort_s. The sole use of context by qsort_s is to
-    pass it to the comparison function.398)
+    pass it to the comparison function.412)
 6   If two elements compare as equal, their relative order in the resulting sorted array is
     unspecified.
     Returns
@@ -23140,10 +23364,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    398) The context argument is for the use of the comparison function in performing its duties. For
+    412) The context argument is for the use of the comparison function in performing its duties. For
          example, it might specify a collating sequence used by the comparison function.
 
-[page 605] (Contents)
+[page 609] (Contents)
 
     K.3.6.4 Multibyte/wide character conversion functions
 1   The behavior of the multibyte character functions is affected by the LC_CTYPE category
@@ -23152,7 +23376,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     pointer. Subsequent calls with s as other than a null pointer cause the internal conversion
     state of the function to be altered as necessary. A call with s as a null pointer causes
     these functions to set the int pointed to by their status argument to a nonzero value if
-    encodings have state dependency, and zero otherwise.399) Changing the LC_CTYPE
+    encodings have state dependency, and zero otherwise.413) Changing the LC_CTYPE
     category causes the conversion state of these functions to be indeterminate.
     K.3.6.4.1 The wctomb_s function
     Synopsis
@@ -23180,11 +23404,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-
-    399) If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
+    413) If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
          character codes, but are grouped with an adjacent multibyte character.
 
-[page 606] (Contents)
+[page 610] (Contents)
 
 7    If s is a null pointer, the wctomb_s function stores into the int pointed to by status a
      nonzero or zero value, if multibyte character encodings, respectively, do or do not have
@@ -23223,11 +23446,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
      array pointed to by dst. Conversion continues up to and including a terminating null
      character, which is also stored. Conversion stops earlier in two cases: when a sequence of
 
-[page 607] (Contents)
+[page 611] (Contents)
 
     bytes is encountered that does not form a valid multibyte character, or (if dst is not a
     null pointer) when len wide characters have been stored into the array pointed to by
-    dst.400) If dst is not a null pointer and no null wide character was stored into the array
+    dst.414) If dst is not a null pointer and no null wide character was stored into the array
     pointed to by dst, then dst[len] is set to the null wide character. Each conversion
     takes place as if by a call to the mbrtowc function.
 5   Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
@@ -23237,7 +23460,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     characters successfully converted, not including the terminating null character (if any).
 6   All elements following the terminating null wide character (if any) written by
     mbstowcs_s in the array of dstmax wide characters pointed to by dst take
-    unspecified values when mbstowcs_s returns.401)
+    unspecified values when mbstowcs_s returns.415)
 7   If copying takes place between objects that overlap, the objects take on unspecified
     values.
     Returns
@@ -23260,11 +23483,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    400) Thus, the value of len is ignored if dst is a null pointer.
-    401) This allows an implementation to attempt converting the multibyte string before discovering a
+    414) Thus, the value of len is ignored if dst is a null pointer.
+    415) This allows an implementation to attempt converting the multibyte string before discovering a
          terminating null character did not occur where required.
 
-[page 608] (Contents)
+[page 612] (Contents)
 
 3   If there is a runtime-constraint violation, then wcstombs_s does the following. If
     retval is not a null pointer, then wcstombs_s sets *retval to (size_t)(-1). If
@@ -23285,7 +23508,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     If the conversion stops without converting a null wide character and dst is not a null
     pointer, then a null character is stored into the array pointed to by dst immediately
     following any multibyte characters already stored. Each conversion takes place as if by a
-    call to the wcrtomb function.402)
+    call to the wcrtomb function.416)
 5   Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
     wide character that does not correspond to a valid multibyte character, an encoding error
     occurs: the wcstombs_s function stores the value (size_t)(-1) into *retval.
@@ -23294,25 +23517,25 @@ n           No input is consumed. The corresponding argument shall be a pointer
     any).
 6   All elements following the terminating null character (if any) written by wcstombs_s
     in the array of dstmax elements pointed to by dst take unspecified values when
-    wcstombs_s returns.403)
+    wcstombs_s returns.417)
 7   If copying takes place between objects that overlap, the objects take on unspecified
     values.
 
 
-    402) If conversion stops because a terminating null wide character has been reached, the bytes stored
+    416) If conversion stops because a terminating null wide character has been reached, the bytes stored
          include those necessary to reach the initial shift state immediately before the null byte. However, if
          the conversion stops before a terminating null wide character has been reached, the result will be null
          terminated, but might not end in the initial shift state.
-    403) When len is not less than dstmax, the implementation might fill the array before discovering a
+    417) When len is not less than dstmax, the implementation might fill the array before discovering a
          runtime-constraint violation.
 
-[page 609] (Contents)
+[page 613] (Contents)
 
     Returns
 8   The wcstombs_s function returns zero if no runtime-constraint violation and no
     encoding error occurred. Otherwise, a nonzero value is returned.
     K.3.7 String handling <string.h>
-1   The header <string.h> defines two types.
+1   The header <string.h> defines two types.
 2   The types are
            errno_t
     which is type int; and
@@ -23322,7 +23545,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.7.1.1 The memcpy_s function
     Synopsis
 1          #define __STDC_WANT_LIB_EXT1__ 1
-           #include <string.h>
+           #include <string.h>
            errno_t memcpy_s(void * restrict s1, rsize_t s1max,
                 const void * restrict s2, rsize_t n);
     Runtime-constraints
@@ -23339,12 +23562,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
 5   The memcpy_s function returns zero if there was no runtime-constraint violation.
     Otherwise, a nonzero value is returned.
 
-[page 610] (Contents)
+[page 614] (Contents)
 
     K.3.7.1.2 The memmove_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             errno_t memmove_s(void *s1, rsize_t s1max,
                  const void *s2, rsize_t n);
     Runtime-constraints
@@ -23365,7 +23588,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.7.1.3 The strcpy_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             errno_t strcpy_s(char * restrict s1,
                  rsize_t s1max,
                  const char * restrict s2);
@@ -23377,21 +23600,21 @@ n           No input is consumed. The corresponding argument shall be a pointer
     greater than zero and not greater than RSIZE_MAX, then strcpy_s sets s1[0] to the
     null character.
 
-[page 611] (Contents)
+[page 615] (Contents)
 
     Description
 4   The strcpy_s function copies the string pointed to by s2 (including the terminating
     null character) into the array pointed to by s1.
 5   All elements following the terminating null character (if any) written by strcpy_s in
     the array of s1max characters pointed to by s1 take unspecified values when
-    strcpy_s returns.404)
+    strcpy_s returns.418)
     Returns
-6   The strcpy_s function returns zero405) if there was no runtime-constraint violation.
+6   The strcpy_s function returns zero419) if there was no runtime-constraint violation.
     Otherwise, a nonzero value is returned.
     K.3.7.1.4 The strncpy_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             errno_t strncpy_s(char * restrict s1,
                  rsize_t s1max,
                  const char * restrict s2,
@@ -23411,24 +23634,24 @@ n           No input is consumed. The corresponding argument shall be a pointer
     character.
 
 
-    404) This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
+    418) This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
          any of those characters are null. Such an approach might write a character to every element of s1
          before discovering that the first element should be set to the null character.
-    405) A zero return value implies that all of the requested characters from the string pointed to by s2 fit
+    419) A zero return value implies that all of the requested characters from the string pointed to by s2 fit
          within the array pointed to by s1 and that the result in s1 is null terminated.
 
-[page 612] (Contents)
+[page 616] (Contents)
 
 5   All elements following the terminating null character (if any) written by strncpy_s in
     the array of s1max characters pointed to by s1 take unspecified values when
-    strncpy_s returns.406)
+    strncpy_s returns.420)
     Returns
-6   The strncpy_s function returns zero407) if there was no runtime-constraint violation.
+6   The strncpy_s function returns zero421) if there was no runtime-constraint violation.
     Otherwise, a nonzero value is returned.
 7   EXAMPLE 1 The strncpy_s function can be used to copy a string without the danger that the result
     will not be null terminated or that characters will be written past the end of the destination array.
             #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             /* ... */
             char src1[100] = "hello";
             char src2[7] = {'g', 'o', 'o', 'd', 'b', 'y', 'e'};
@@ -23445,7 +23668,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.7.2.1 The strcat_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             errno_t strcat_s(char * restrict s1,
                  rsize_t s1max,
                  const char * restrict s2);
@@ -23456,16 +23679,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    406) This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
+    420) This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
          any of those characters are null. Such an approach might write a character to every element of s1
          before discovering that the first element should be set to the null character.
-    407) A zero return value implies that all of the requested characters from the string pointed to by s2 fit
+    421) A zero return value implies that all of the requested characters from the string pointed to by s2 fit
          within the array pointed to by s1 and that the result in s1 is null terminated.
 
-[page 613] (Contents)
+[page 617] (Contents)
 
 3   Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
-    s1max shall not equal zero. m shall not equal zero.408) m shall be greater than
+    s1max shall not equal zero. m shall not equal zero.422) m shall be greater than
     strnlen_s(s2, m). Copying shall not take place between objects that overlap.
 4   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
     greater than zero and not greater than RSIZE_MAX, then strcat_s sets s1[0] to the
@@ -23476,14 +23699,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
     from s2 overwrites the null character at the end of s1.
 6   All elements following the terminating null character (if any) written by strcat_s in
     the array of s1max characters pointed to by s1 take unspecified values when
-    strcat_s returns.409)
+    strcat_s returns.423)
     Returns
-7   The strcat_s function returns zero410) if there was no runtime-constraint violation.
+7   The strcat_s function returns zero424) if there was no runtime-constraint violation.
     Otherwise, a nonzero value is returned.
     K.3.7.2.2 The strncat_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             errno_t strncat_s(char * restrict s1,
                  rsize_t s1max,
                  const char * restrict s2,
@@ -23492,17 +23715,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   Let m denote the value s1max - strnlen_s(s1, s1max) upon entry to
     strncat_s.
 3   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
-    RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.411) If n is not less
+    RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.425) If n is not less
 
 
-    408) Zero means that s1 was not null terminated upon entry to strcat_s.
-    409) This allows an implementation to append characters from s2 to s1 while simultaneously checking if
+    422) Zero means that s1 was not null terminated upon entry to strcat_s.
+    423) This allows an implementation to append characters from s2 to s1 while simultaneously checking if
          any of those characters are null. Such an approach might write a character to every element of s1
          before discovering that the first element should be set to the null character.
-    410) A zero return value implies that all of the requested characters from the string pointed to by s2 were
+    424) A zero return value implies that all of the requested characters from the string pointed to by s2 were
          appended to the string pointed to by s1 and that the result in s1 is null terminated.
 
-[page 614] (Contents)
+[page 618] (Contents)
 
     than m, then m shall be greater than strnlen_s(s2, m). Copying shall not take
     place between objects that overlap.
@@ -23517,14 +23740,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
     a null character.
 6   All elements following the terminating null character (if any) written by strncat_s in
     the array of s1max characters pointed to by s1 take unspecified values when
-    strncat_s returns.412)
+    strncat_s returns.426)
     Returns
-7   The strncat_s function returns zero413) if there was no runtime-constraint violation.
+7   The strncat_s function returns zero427) if there was no runtime-constraint violation.
     Otherwise, a nonzero value is returned.
 8   EXAMPLE 1 The strncat_s function can be used to copy a string without the danger that the result
     will not be null terminated or that characters will be written past the end of the destination array.
             #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             /* ... */
             char s1[100] = "good";
             char s2[6] = "hello";
@@ -23540,14 +23763,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    411) Zero means that s1 was not null terminated upon entry to strncat_s.
-    412) This allows an implementation to append characters from s2 to s1 while simultaneously checking if
+    425) Zero means that s1 was not null terminated upon entry to strncat_s.
+    426) This allows an implementation to append characters from s2 to s1 while simultaneously checking if
          any of those characters are null. Such an approach might write a character to every element of s1
          before discovering that the first element should be set to the null character.
-    413) A zero return value implies that all of the requested characters from the string pointed to by s2 were
+    427) A zero return value implies that all of the requested characters from the string pointed to by s2 were
          appended to the string pointed to by s1 and that the result in s1 is null terminated.
 
-[page 615] (Contents)
+[page 619] (Contents)
 
     After the second call r2 will have the value zero and s2 will contain the sequence hello\0.
     After the third call r3 will have a nonzero value and s3 will contain the sequence \0.
@@ -23557,7 +23780,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.7.3.1 The strtok_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             char *strtok_s(char * restrict s1,
                  rsize_t * restrict s1max,
                  const char * restrict s2,
@@ -23589,7 +23812,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     is found, then there are no tokens in the string pointed to by s1 and the strtok_s
     function returns a null pointer. If such a character is found, it is the start of the first token.
 
-[page 616] (Contents)
+[page 620] (Contents)
 
 7    The strtok_s function then searches from there for the first character in s1 that is
      contained in the current separator string. If no such character is found, the current token
@@ -23605,12 +23828,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
      pointer if there is no token or there is a runtime-constraint violation.
 10   EXAMPLE
              #define __STDC_WANT_LIB_EXT1__ 1
-             #include <string.h>
+             #include <string.h>
              static char str1[] = "?a???b,,,#c";
              static char str2[] = "\t \t";
              char *t, *ptr1, *ptr2;
-             rsize_t max1 = sizeof(str1);
-             rsize_t max2 = sizeof(str2);
+             rsize_t max1 = sizeof (str1);
+             rsize_t max2 = sizeof (str2);
              t   =   strtok_s(str1,   &max1,   "?", &ptr1);        //   t   points to the token "a"
              t   =   strtok_s(NULL,   &max1,   ",", &ptr1);        //   t   points to the token "??b"
              t   =   strtok_s(str2,   &max2,   " \t", &ptr2);      //   t   is a null pointer
@@ -23621,7 +23844,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      K.3.7.4.1 The memset_s function
      Synopsis
 1            #define __STDC_WANT_LIB_EXT1__ 1
-             #include <string.h>
+             #include <string.h>
              errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n)
      Runtime-constraints
 2    s shall not be a null pointer. Neither smax nor n shall be greater than RSIZE_MAX. n
@@ -23630,7 +23853,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      greater than RSIZE_MAX, the memset_s function stores the value of c (converted to an
      unsigned char) into each of the first smax characters of the object pointed to by s.
 
-[page 617] (Contents)
+[page 621] (Contents)
 
     Description
 4   The memset_s function copies the value of c (converted to an unsigned char) into
@@ -23645,7 +23868,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.7.4.2 The strerror_s function
     Synopsis
 1          #define __STDC_WANT_LIB_EXT1__ 1
-           #include <string.h>
+           #include <string.h>
            errno_t strerror_s(char *s, rsize_t maxsize,
                 errno_t errnum);
     Runtime-constraints
@@ -23668,12 +23891,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
     maxsize and there was no runtime-constraint violation. Otherwise, the strerror_s
     function returns a nonzero value.
 
-[page 618] (Contents)
+[page 622] (Contents)
 
     K.3.7.4.3 The strerrorlen_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             size_t strerrorlen_s(errno_t errnum);
     Description
 2   The strerrorlen_s function calculates the length of the (untruncated) locale-specific
@@ -23684,12 +23907,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.7.4.4 The strnlen_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <string.h>
+            #include <string.h>
             size_t strnlen_s(const char *s, size_t maxsize);
     Description
 2   The strnlen_s function computes the length of the string pointed to by s.
     Returns
-3   If s is a null pointer,414) then the strnlen_s function returns zero.
+3   If s is a null pointer,428) then the strnlen_s function returns zero.
 4   Otherwise, the strnlen_s function returns the number of characters that precede the
     terminating null character. If there is no null character in the first maxsize characters of
     s then strnlen_s returns maxsize. At most the first maxsize characters of s shall
@@ -23698,14 +23921,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    414) Note that the strnlen_s function has no runtime-constraints. This lack of runtime-constraints
+    428) Note that the strnlen_s function has no runtime-constraints. This lack of runtime-constraints
          along with the values returned for a null pointer or an unterminated string argument make
          strnlen_s useful in algorithms that gracefully handle such exceptional data.
 
-[page 619] (Contents)
+[page 623] (Contents)
 
     K.3.8 Date and time <time.h>
-1   The header <time.h> defines two types.
+1   The header <time.h> defines two types.
 2   The types are
             errno_t
     which is type int; and
@@ -23713,14 +23936,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
     which is the type size_t.
     K.3.8.1 Components of time
 1   A broken-down time is normalized if the values of the members of the tm structure are in
-    their normal rages.415)
+    their normal rages.429)
     K.3.8.2 Time conversion functions
 1   Like the strftime function, the asctime_s and ctime_s functions do not return a
     pointer to a static object, and other library functions are permitted to call them.
     K.3.8.2.1 The asctime_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <time.h>
+            #include <time.h>
             errno_t asctime_s(char *s, rsize_t maxsize,
                  const struct tm *timeptr);
     Runtime-constraints
@@ -23737,9 +23960,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
     pointed to by timeptr into a 26 character (including the null character) string in the
 
 
-    415) The normal ranges are defined in 7.26.1.
+    429) The normal ranges are defined in 7.27.1.
 
-[page 620] (Contents)
+[page 624] (Contents)
 
     form
             Sun Sep 16 01:03:52 1973\n\0
@@ -23775,12 +23998,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
 5   The asctime_s function returns zero if the time was successfully converted and stored
     into the array pointed to by s. Otherwise, it returns a nonzero value.
 
-[page 621] (Contents)
+[page 625] (Contents)
 
     K.3.8.2.2 The ctime_s function
     Synopsis
 1          #define __STDC_WANT_LIB_EXT1__ 1
-           #include <time.h>
+           #include <time.h>
            errno_t ctime_s(char *s, rsize_t maxsize,
                 const time_t *timer);
     Runtime-constraints
@@ -23802,7 +24025,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.8.2.3 The gmtime_s function
     Synopsis
 1          #define __STDC_WANT_LIB_EXT1__ 1
-           #include <time.h>
+           #include <time.h>
            struct tm *gmtime_s(const time_t * restrict timer,
                 struct tm * restrict result);
     Runtime-constraints
@@ -23812,7 +24035,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   The gmtime_s function converts the calendar time pointed to by timer into a broken-
     down time, expressed as UTC. The broken-down time is stored in the structure pointed
 
-[page 622] (Contents)
+[page 626] (Contents)
 
     to by result.
     Returns
@@ -23821,7 +24044,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.8.2.4 The localtime_s function
     Synopsis
 1            #define __STDC_WANT_LIB_EXT1__ 1
-             #include <time.h>
+             #include <time.h>
              struct tm *localtime_s(const time_t * restrict timer,
                   struct tm * restrict result);
     Runtime-constraints
@@ -23835,7 +24058,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 5   The localtime_s function returns result, or a null pointer if the specified time
     cannot be converted to local time or there is a runtime-constraint violation.
     K.3.9 Extended multibyte and wide character utilities <wchar.h>
-1   The header <wchar.h> defines two types.
+1   The header <wchar.h> defines two types.
 2   The types are
              errno_t
     which is type int; and
@@ -23845,17 +24068,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
     subclause causes copying to take place between objects that overlap, the objects take on
     unspecified values.
 
-[page 623] (Contents)
+[page 627] (Contents)
 
     K.3.9.1 Formatted wide character input/output functions
     K.3.9.1.1 The fwprintf_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             int fwprintf_s(FILE * restrict stream,
                  const wchar_t * restrict format, ...);
     Runtime-constraints
-2   Neither stream nor format shall be a null pointer. The %n specifier416) (modified or
+2   Neither stream nor format shall be a null pointer. The %n specifier430) (modified or
     not by flags, field width, or precision) shall not appear in the wide string pointed to by
     format. Any argument to fwprintf_s corresponding to a %s specifier shall not be a
     null pointer.
@@ -23872,7 +24095,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int fwscanf_s(FILE * restrict stream,
                  const wchar_t * restrict format, ...);
     Runtime-constraints
@@ -23880,11 +24103,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
     order to store converted input shall not be a null pointer.
 
 
-    416) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    430) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
 
-[page 624] (Contents)
+[page 628] (Contents)
 
 3   If there is a runtime-constraint violation, the fwscanf_s function does not attempt to
     perform further input, and it is unspecified to what extent fwscanf_s performed input
@@ -23896,7 +24119,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     argument is immediately followed in the argument list by the second argument, which has
     type size_t and gives the number of elements in the array pointed to by the first
     argument of the pair. If the first argument points to a scalar object, it is considered to be
-    an array of one element.417)
+    an array of one element.431)
 5   A matching failure occurs if the number of elements in a receiving object is insufficient to
     hold the converted input (including any trailing null character).
     Returns
@@ -23907,15 +24130,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.9.1.3 The snwprintf_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             int snwprintf_s(wchar_t * restrict s,
                  rsize_t n,
                  const wchar_t * restrict format, ...);
     Runtime-constraints
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
-    than RSIZE_MAX. The %n specifier418) (modified or not by flags, field width, or
+    than RSIZE_MAX. The %n specifier432) (modified or not by flags, field width, or
 
-    417) If the format is known at translation time, an implementation may issue a diagnostic for any argument
+    431) If the format is known at translation time, an implementation may issue a diagnostic for any argument
          used to store the result from a c, s, or [ conversion specifier if that argument is not followed by an
          argument of a type compatible with rsize_t. A limited amount of checking may be done if even if
          the format is not known at translation time. For example, an implementation may issue a diagnostic
@@ -23926,7 +24149,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
          diagnostic could flag any non-pointer argument following format that did not have a type
          compatible with rsize_t.
 
-[page 625] (Contents)
+[page 629] (Contents)
 
     precision) shall not appear in the wide string pointed to by format. Any argument to
     snwprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
@@ -23948,26 +24171,26 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.9.1.4 The swprintf_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             int swprintf_s(wchar_t * restrict s, rsize_t n,
                  const wchar_t * restrict format, ...);
     Runtime-constraints
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
     than RSIZE_MAX. The number of wide characters (including the trailing null) required
     for the result to be written to the array pointed to by s shall not be greater than n. The %n
-    specifier419) (modified or not by flags, field width, or precision) shall not appear in the
+    specifier433) (modified or not by flags, field width, or precision) shall not appear in the
     wide string pointed to by format. Any argument to swprintf_s corresponding to a
     %s specifier shall not be a null pointer. No encoding error shall occur.
 
 
-    418) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    432) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
-    419) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    433) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
 
-[page 626] (Contents)
+[page 630] (Contents)
 
 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
     than zero and less than RSIZE_MAX, then the swprintf_s function sets s[0] to the
@@ -23986,7 +24209,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.9.1.5 The swscanf_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             int swscanf_s(const wchar_t * restrict s,
                  const wchar_t * restrict format, ...);
     Runtime-constraints
@@ -24006,19 +24229,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
     swscanf_s function returns the number of input items assigned, which can be fewer
     than provided for, or even zero, in the event of an early matching failure.
 
-[page 627] (Contents)
+[page 631] (Contents)
 
     K.3.9.1.6 The vfwprintf_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdarg.h>
             #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vfwprintf_s(FILE * restrict stream,
                  const wchar_t * restrict format,
                  va_list arg);
     Runtime-constraints
-2   Neither stream nor format shall be a null pointer. The %n specifier420) (modified or
+2   Neither stream nor format shall be a null pointer. The %n specifier434) (modified or
     not by flags, field width, or precision) shall not appear in the wide string pointed to by
     format. Any argument to vfwprintf_s corresponding to a %s specifier shall not be
     a null pointer.
@@ -24036,17 +24259,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdarg.h>
             #include <stdio.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vfwscanf_s(FILE * restrict stream,
                  const wchar_t * restrict format, va_list arg);
 
 
 
-    420) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    434) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
 
-[page 628] (Contents)
+[page 632] (Contents)
 
     Runtime-constraints
 2   Neither stream nor format shall be a null pointer. Any argument indirected though in
@@ -24058,7 +24281,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   The vfwscanf_s function is equivalent to fwscanf_s, with the variable argument
     list replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vfwscanf_s function does not invoke the
-    va_end macro.421)
+    va_end macro.435)
     Returns
 5   The vfwscanf_s function returns the value of the macro EOF if an input failure occurs
     before any conversion or if there is a runtime-constraint violation. Otherwise, the
@@ -24068,25 +24291,25 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdarg.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vsnwprintf_s(wchar_t * restrict s,
                  rsize_t n,
                  const wchar_t * restrict format,
                  va_list arg);
     Runtime-constraints
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
-    than RSIZE_MAX. The %n specifier422) (modified or not by flags, field width, or
+    than RSIZE_MAX. The %n specifier436) (modified or not by flags, field width, or
     precision) shall not appear in the wide string pointed to by format. Any argument to
     vsnwprintf_s corresponding to a %s specifier shall not be a null pointer. No
     encoding error shall occur.
 
-    421) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
+    435) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
          value of arg after the return is indeterminate.
-    422) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    436) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
 
-[page 629] (Contents)
+[page 633] (Contents)
 
 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
     than zero and less than RSIZE_MAX, then the vsnwprintf_s function sets s[0] to
@@ -24106,7 +24329,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdarg.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vswprintf_s(wchar_t * restrict s,
                  rsize_t n,
                  const wchar_t * restrict format,
@@ -24115,18 +24338,18 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
     than RSIZE_MAX. The number of wide characters (including the trailing null) required
     for the result to be written to the array pointed to by s shall not be greater than n. The %n
-    specifier423) (modified or not by flags, field width, or precision) shall not appear in the
+    specifier437) (modified or not by flags, field width, or precision) shall not appear in the
     wide string pointed to by format. Any argument to vswprintf_s corresponding to a
     %s specifier shall not be a null pointer. No encoding error shall occur.
 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
     than zero and less than RSIZE_MAX, then the vswprintf_s function sets s[0] to the
     null wide character.
 
-    423) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    437) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
 
-[page 630] (Contents)
+[page 634] (Contents)
 
     Description
 4   The vswprintf_s function is equivalent to the vswprintf function except for the
@@ -24143,7 +24366,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdarg.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vswscanf_s(const wchar_t * restrict s,
                  const wchar_t * restrict format,
                  va_list arg);
@@ -24157,15 +24380,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   The vswscanf_s function is equivalent to swscanf_s, with the variable argument
     list replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vswscanf_s function does not invoke the
-    va_end macro.424)
+    va_end macro.438)
 
 
 
 
-    424) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
+    438) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
          value of arg after the return is indeterminate.
 
-[page 631] (Contents)
+[page 635] (Contents)
 
     Returns
 5   The vswscanf_s function returns the value of the macro EOF if an input failure occurs
@@ -24176,11 +24399,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdarg.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vwprintf_s(const wchar_t * restrict format,
                  va_list arg);
     Runtime-constraints
-2   format shall not be a null pointer. The %n specifier425) (modified or not by flags, field
+2   format shall not be a null pointer. The %n specifier439) (modified or not by flags, field
     width, or precision) shall not appear in the wide string pointed to by format. Any
     argument to vwprintf_s corresponding to a %s specifier shall not be a null pointer.
 3   If there is a runtime-constraint violation, the vwprintf_s function does not attempt to
@@ -24196,17 +24419,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    425) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    439) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
 
-[page 632] (Contents)
+[page 636] (Contents)
 
     K.3.9.1.12 The vwscanf_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
             #include <stdarg.h>
-            #include <wchar.h>
+            #include <wchar.h>
             int vwscanf_s(const wchar_t * restrict format,
                  va_list arg);
     Runtime-constraints
@@ -24219,7 +24442,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
 4   The vwscanf_s function is equivalent to wscanf_s, with the variable argument list
     replaced by arg, which shall have been initialized by the va_start macro (and
     possibly subsequent va_arg calls). The vwscanf_s function does not invoke the
-    va_end macro.426)
+    va_end macro.440)
     Returns
 5   The vwscanf_s function returns the value of the macro EOF if an input failure occurs
     before any conversion or if there is a runtime-constraint violation. Otherwise, the
@@ -24228,18 +24451,18 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.9.1.13 The wprintf_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             int wprintf_s(const wchar_t * restrict format, ...);
     Runtime-constraints
-2   format shall not be a null pointer. The %n specifier427) (modified or not by flags, field
+2   format shall not be a null pointer. The %n specifier441) (modified or not by flags, field
 
-    426) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
+    440) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
          value of arg after the return is indeterminate.
-    427) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
+    441) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
          example, if the entire format string was L"%%n".
 
-[page 633] (Contents)
+[page 637] (Contents)
 
     width, or precision) shall not appear in the wide string pointed to by format. Any
     argument to wprintf_s corresponding to a %s specifier shall not be a null pointer.
@@ -24255,7 +24478,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     K.3.9.1.14 The wscanf_s function
     Synopsis
 1          #define __STDC_WANT_LIB_EXT1__ 1
-           #include <wchar.h>
+           #include <wchar.h>
            int wscanf_s(const wchar_t * restrict format, ...);
     Runtime-constraints
 2   format shall not be a null pointer. Any argument indirected though in order to store
@@ -24272,14 +24495,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
     wscanf_s function returns the number of input items assigned, which can be fewer than
     provided for, or even zero, in the event of an early matching failure.
 
-[page 634] (Contents)
+[page 638] (Contents)
 
     K.3.9.2 General wide string utilities
     K.3.9.2.1 Wide string copying functions
     K.3.9.2.1.1 The wcscpy_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             errno_t wcscpy_s(wchar_t * restrict s1,
                  rsize_t s1max,
                  const wchar_t * restrict s2);
@@ -24295,26 +24518,26 @@ n           No input is consumed. The corresponding argument shall be a pointer
     terminating null wide character) into the array pointed to by s1.
 5   All elements following the terminating null wide character (if any) written by
     wcscpy_s in the array of s1max wide characters pointed to by s1 take unspecified
-    values when wcscpy_s returns.428)
+    values when wcscpy_s returns.442)
     Returns
-6   The wcscpy_s function returns zero429) if there was no runtime-constraint violation.
+6   The wcscpy_s function returns zero443) if there was no runtime-constraint violation.
     Otherwise, a nonzero value is returned.
 
 
 
 
-    428) This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
+    442) This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
          if any of those wide characters are null. Such an approach might write a wide character to every
          element of s1 before discovering that the first element should be set to the null wide character.
-    429) A zero return value implies that all of the requested wide characters from the string pointed to by s2
+    443) A zero return value implies that all of the requested wide characters from the string pointed to by s2
          fit within the array pointed to by s1 and that the result in s1 is null terminated.
 
-[page 635] (Contents)
+[page 639] (Contents)
 
      K.3.9.2.1.2 The wcsncpy_s function
      Synopsis
 7            #define __STDC_WANT_LIB_EXT1__ 1
-             #include <wchar.h>
+             #include <wchar.h>
              errno_t wcsncpy_s(wchar_t * restrict s1,
                   rsize_t s1max,
                   const wchar_t * restrict s2,
@@ -24334,9 +24557,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
      s1[n] is set to a null wide character.
 11   All elements following the terminating null wide character (if any) written by
      wcsncpy_s in the array of s1max wide characters pointed to by s1 take unspecified
-     values when wcsncpy_s returns.430)
+     values when wcsncpy_s returns.444)
      Returns
-12   The wcsncpy_s function returns zero431) if there was no runtime-constraint violation.
+12   The wcsncpy_s function returns zero445) if there was no runtime-constraint violation.
      Otherwise, a nonzero value is returned.
 13   EXAMPLE 1 The wcsncpy_s function can be used to copy a wide string without the danger that the
      result will not be null terminated or that wide characters will be written past the end of the destination
@@ -24345,16 +24568,16 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-     430) This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
+     444) This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
           if any of those wide characters are null. Such an approach might write a wide character to every
           element of s1 before discovering that the first element should be set to the null wide character.
-     431) A zero return value implies that all of the requested wide characters from the string pointed to by s2
+     445) A zero return value implies that all of the requested wide characters from the string pointed to by s2
           fit within the array pointed to by s1 and that the result in s1 is null terminated.
 
-[page 636] (Contents)
+[page 640] (Contents)
 
              #define __STDC_WANT_LIB_EXT1__ 1
-             #include <wchar.h>
+             #include <wchar.h>
              /* ... */
              wchar_t src1[100] = L"hello";
              wchar_t src2[7] = {L'g', L'o', L'o', L'd', L'b', L'y', L'e'};
@@ -24370,7 +24593,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      K.3.9.2.1.3 The wmemcpy_s function
      Synopsis
 14           #define __STDC_WANT_LIB_EXT1__ 1
-             #include <wchar.h>
+             #include <wchar.h>
              errno_t wmemcpy_s(wchar_t * restrict s1,
                   rsize_t s1max,
                   const wchar_t * restrict s2,
@@ -24389,12 +24612,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
 18   The wmemcpy_s function returns zero if there was no runtime-constraint violation.
      Otherwise, a nonzero value is returned.
 
-[page 637] (Contents)
+[page 641] (Contents)
 
      K.3.9.2.1.4 The wmemmove_s function
      Synopsis
 19          #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             errno_t wmemmove_s(wchar_t *s1, rsize_t s1max,
                  const wchar_t *s2, rsize_t n);
      Runtime-constraints
@@ -24416,7 +24639,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      K.3.9.2.2.1 The wcscat_s function
      Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             errno_t wcscat_s(wchar_t * restrict s1,
                  rsize_t s1max,
                  const wchar_t * restrict s2);
@@ -24424,10 +24647,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2    Let m denote the value s1max - wcsnlen_s(s1, s1max) upon entry to
      wcscat_s.
 3    Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
-     s1max shall not equal zero. m shall not equal zero.432) m shall be greater than
+     s1max shall not equal zero. m shall not equal zero.446) m shall be greater than
      wcsnlen_s(s2, m). Copying shall not take place between objects that overlap.
 
-[page 638] (Contents)
+[page 642] (Contents)
 
 4    If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
      greater than zero and not greater than RSIZE_MAX, then wcscat_s sets s1[0] to the
@@ -24438,14 +24661,14 @@ n           No input is consumed. The corresponding argument shall be a pointer
      initial wide character from s2 overwrites the null wide character at the end of s1.
 6    All elements following the terminating null wide character (if any) written by
      wcscat_s in the array of s1max wide characters pointed to by s1 take unspecified
-     values when wcscat_s returns.433)
+     values when wcscat_s returns.447)
      Returns
-7    The wcscat_s function returns zero434) if there was no runtime-constraint violation.
+7    The wcscat_s function returns zero448) if there was no runtime-constraint violation.
      Otherwise, a nonzero value is returned.
      K.3.9.2.2.2 The wcsncat_s function
      Synopsis
 8             #define __STDC_WANT_LIB_EXT1__ 1
-              #include <wchar.h>
+              #include <wchar.h>
               errno_t wcsncat_s(wchar_t * restrict s1,
                    rsize_t s1max,
                    const wchar_t * restrict s2,
@@ -24454,20 +24677,20 @@ n           No input is consumed. The corresponding argument shall be a pointer
 9    Let m denote the value s1max - wcsnlen_s(s1, s1max) upon entry to
      wcsncat_s.
 10   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
-     RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.435) If n is not less
+     RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.449) If n is not less
      than m, then m shall be greater than wcsnlen_s(s2, m). Copying shall not take
      place between objects that overlap.
 
 
-     432) Zero means that s1 was not null terminated upon entry to wcscat_s.
-     433) This allows an implementation to append wide characters from s2 to s1 while simultaneously
+     446) Zero means that s1 was not null terminated upon entry to wcscat_s.
+     447) This allows an implementation to append wide characters from s2 to s1 while simultaneously
           checking if any of those wide characters are null. Such an approach might write a wide character to
           every element of s1 before discovering that the first element should be set to the null wide character.
-     434) A zero return value implies that all of the requested wide characters from the wide string pointed to by
+     448) A zero return value implies that all of the requested wide characters from the wide string pointed to by
           s2 were appended to the wide string pointed to by s1 and that the result in s1 is null terminated.
-     435) Zero means that s1 was not null terminated upon entry to wcsncat_s.
+     449) Zero means that s1 was not null terminated upon entry to wcsncat_s.
 
-[page 639] (Contents)
+[page 643] (Contents)
 
 11   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
      greater than zero and not greater than RSIZE_MAX, then wcsncat_s sets s1[0] to the
@@ -24480,15 +24703,15 @@ n           No input is consumed. The corresponding argument shall be a pointer
      from s2, then s1[s1max-m+n] is set to a null wide character.
 13   All elements following the terminating null wide character (if any) written by
      wcsncat_s in the array of s1max wide characters pointed to by s1 take unspecified
-     values when wcsncat_s returns.436)
+     values when wcsncat_s returns.450)
      Returns
-14   The wcsncat_s function returns zero437) if there was no runtime-constraint violation.
+14   The wcsncat_s function returns zero451) if there was no runtime-constraint violation.
      Otherwise, a nonzero value is returned.
 15   EXAMPLE 1 The wcsncat_s function can be used to copy a wide string without the danger that the
      result will not be null terminated or that wide characters will be written past the end of the destination
      array.
               #define __STDC_WANT_LIB_EXT1__ 1
-              #include <wchar.h>
+              #include <wchar.h>
               /* ... */
               wchar_t s1[100] = L"good";
               wchar_t s2[6] = L"hello";
@@ -24508,19 +24731,19 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-     436) This allows an implementation to append wide characters from s2 to s1 while simultaneously
+     450) This allows an implementation to append wide characters from s2 to s1 while simultaneously
           checking if any of those wide characters are null. Such an approach might write a wide character to
           every element of s1 before discovering that the first element should be set to the null wide character.
-     437) A zero return value implies that all of the requested wide characters from the wide string pointed to by
+     451) A zero return value implies that all of the requested wide characters from the wide string pointed to by
           s2 were appended to the wide string pointed to by s1 and that the result in s1 is null terminated.
 
-[page 640] (Contents)
+[page 644] (Contents)
 
     K.3.9.2.3 Wide string search functions
     K.3.9.2.3.1 The wcstok_s function
     Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             wchar_t *wcstok_s(wchar_t * restrict s1,
                  rsize_t * restrict s1max,
                  const wchar_t * restrict s2,
@@ -24553,7 +24776,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     and the wcstok_s function returns a null pointer. If such a wide character is found, it is
     the start of the first token.
 
-[page 641] (Contents)
+[page 645] (Contents)
 
 7    The wcstok_s function then searches from there for the first wide character in s1 that
      is contained in the current separator wide string. If no such wide character is found, the
@@ -24569,7 +24792,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      pointer if there is no token or there is a runtime-constraint violation.
 10   EXAMPLE
             #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             static wchar_t str1[] = L"?a???b,,,#c";
             static wchar_t str2[] = L"\t \t";
             wchar_t *t, *ptr1, *ptr2;
@@ -24585,17 +24808,17 @@ n           No input is consumed. The corresponding argument shall be a pointer
      K.3.9.2.4.1 The wcsnlen_s function
      Synopsis
 1           #define __STDC_WANT_LIB_EXT1__ 1
-            #include <wchar.h>
+            #include <wchar.h>
             size_t wcsnlen_s(const wchar_t *s, size_t maxsize);
      Description
 2    The wcsnlen_s function computes the length of the wide string pointed to by s.
      Returns
-3    If s is a null pointer,438) then the wcsnlen_s function returns zero.
+3    If s is a null pointer,452) then the wcsnlen_s function returns zero.
 4    Otherwise, the wcsnlen_s function returns the number of wide characters that precede
      the terminating null wide character. If there is no null wide character in the first
      maxsize wide characters of s then wcsnlen_s returns maxsize. At most the first
 
-[page 642] (Contents)
+[page 646] (Contents)
 
     maxsize wide characters of s shall be accessed by wcsnlen_s.
     K.3.9.3 Extended multibyte/wide character conversion utilities
@@ -24604,7 +24827,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     conversion state) to be a null pointer.
     K.3.9.3.1.1 The wcrtomb_s function
     Synopsis
-2           #include <wchar.h>
+2           #include <wchar.h>
             errno_t wcrtomb_s(size_t * restrict retval,
                  char * restrict s, rsize_t smax,
                  wchar_t wc, mbstate_t * restrict ps);
@@ -24630,11 +24853,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
     sequence needed to restore the initial shift state; the resulting state described is the initial
     conversion state.
 
-    438) Note that the wcsnlen_s function has no runtime-constraints. This lack of runtime-constraints
+    452) Note that the wcsnlen_s function has no runtime-constraints. This lack of runtime-constraints
          along with the values returned for a null pointer or an unterminated wide string argument make
          wcsnlen_s useful in algorithms that gracefully handle such exceptional data.
 
-[page 643] (Contents)
+[page 647] (Contents)
 
 7   If wc does not correspond to a valid multibyte character, an encoding error occurs: the
     wcrtomb_s function stores the value (size_t)(-1) into *retval and the
@@ -24649,7 +24872,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     permit the ps parameter (the pointer to the conversion state) to be a null pointer.
     K.3.9.3.2.1 The mbsrtowcs_s function
     Synopsis
-2          #include <wchar.h>
+2          #include <wchar.h>
            errno_t mbsrtowcs_s(size_t * restrict retval,
                 wchar_t * restrict dst, rsize_t dstmax,
                 const char ** restrict src, rsize_t len,
@@ -24674,9 +24897,9 @@ n           No input is consumed. The corresponding argument shall be a pointer
     Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
     not form a valid multibyte character, or (if dst is not a null pointer) when len wide
 
-[page 644] (Contents)
+[page 648] (Contents)
 
-     characters have been stored into the array pointed to by dst.439) If dst is not a null
+     characters have been stored into the array pointed to by dst.453) If dst is not a null
      pointer and no null wide character was stored into the array pointed to by dst, then
      dst[len] is set to the null wide character. Each conversion takes place as if by a call
      to the mbrtowc function.
@@ -24693,7 +24916,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      terminating null character (if any).
 8    All elements following the terminating null wide character (if any) written by
      mbsrtowcs_s in the array of dstmax wide characters pointed to by dst take
-     unspecified values when mbsrtowcs_s returns.440)
+     unspecified values when mbsrtowcs_s returns.454)
 9    If copying takes place between objects that overlap, the objects take on unspecified
      values.
      Returns
@@ -24701,7 +24924,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      encoding error occurred. Otherwise, a nonzero value is returned.
      K.3.9.3.2.2 The wcsrtombs_s function
      Synopsis
-11            #include <wchar.h>
+11            #include <wchar.h>
               errno_t wcsrtombs_s(size_t * restrict retval,
                    char * restrict dst, rsize_t dstmax,
                    const wchar_t ** restrict src, rsize_t len,
@@ -24710,11 +24933,11 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-     439) Thus, the value of len is ignored if dst is a null pointer.
-     440) This allows an implementation to attempt converting the multibyte string before discovering a
+     453) Thus, the value of len is ignored if dst is a null pointer.
+     454) This allows an implementation to attempt converting the multibyte string before discovering a
           terminating null character did not occur where required.
 
-[page 645] (Contents)
+[page 649] (Contents)
 
      Runtime-constraints
 12   None of retval, src, *src, or ps shall be null pointers. If dst is not a null pointer,
@@ -24743,7 +24966,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      If the conversion stops without converting a null wide character and dst is not a null
      pointer, then a null character is stored into the array pointed to by dst immediately
      following any multibyte characters already stored. Each conversion takes place as if by a
-     call to the wcrtomb function.441)
+     call to the wcrtomb function.455)
 15   If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
      pointer (if conversion stopped due to reaching a terminating null wide character) or the
      address just past the last wide character converted (if any). If conversion stopped due to
@@ -24751,12 +24974,12 @@ n           No input is consumed. The corresponding argument shall be a pointer
      conversion state.
 
 
-     441) If conversion stops because a terminating null wide character has been reached, the bytes stored
+     455) If conversion stops because a terminating null wide character has been reached, the bytes stored
           include those necessary to reach the initial shift state immediately before the null byte. However, if
           the conversion stops before a terminating null wide character has been reached, the result will be null
           terminated, but might not end in the initial shift state.
 
-[page 646] (Contents)
+[page 650] (Contents)
 
 16   Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
      wide character that does not correspond to a valid multibyte character, an encoding error
@@ -24766,7 +24989,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
      including the terminating null character (if any).
 17   All elements following the terminating null character (if any) written by wcsrtombs_s
      in the array of dstmax elements pointed to by dst take unspecified values when
-     wcsrtombs_s returns.442)
+     wcsrtombs_s returns.456)
 18   If copying takes place between objects that overlap, the objects take on unspecified
      values.
      Returns
@@ -24776,10 +24999,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-     442) When len is not less than dstmax, the implementation might fill the array before discovering a
+     456) When len is not less than dstmax, the implementation might fill the array before discovering a
           runtime-constraint violation.
 
-[page 647] (Contents)
+[page 651] (Contents)
 
                                                 Annex L
                                                (normative)
@@ -24787,7 +25010,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
     L.1 Scope
 1   This annex specifies optional behavior that can aid in the analyzability of C programs.
 2   An implementation that defines __STDC_ANALYZABLE__ shall conform to the
-    specifications in this annex.443)
+    specifications in this annex.457)
     L.2 Definitions
     L.2.1
 1   out-of-bounds store
@@ -24809,10 +25032,10 @@ n           No input is consumed. The corresponding argument shall be a pointer
 
 
 
-    443) Implementations that do not define __STDC_ANALYZABLE__ are not required to conform to these
+    457) Implementations that do not define __STDC_ANALYZABLE__ are not required to conform to these
          specifications.
 
-[page 648] (Contents)
+[page 652] (Contents)
 
     L.3 Requirements
 1   If the program performs a trap (3.19.5), the implementation is permitted to invoke a
@@ -24820,21 +25043,31 @@ n           No input is consumed. The corresponding argument shall be a pointer
 2   All undefined behavior shall be limited to bounded undefined behavior, except for the
     following which are permitted to result in critical undefined behavior:
     -- An object is referred to outside of its lifetime (6.2.4).
-    -- An lvalue does not designate an object when evaluated (6.3.2.1).
+    -- A store is performed to an object that has two incompatible declarations (6.2.7),
     -- A pointer is used to call a function whose type is not compatible with the referenced
-      type (6.3.2.3).
+      type (6.2.7, 6.3.2.3, 6.5.2.2).
+    -- An lvalue does not designate an object when evaluated (6.3.2.1).
+    -- The program attempts to modify a string literal (6.4.5).
     -- The operand of the unary * operator has an invalid value (6.5.3.2).
     -- Addition or subtraction of a pointer into, or just beyond, an array object and an
       integer type produces a result that points just beyond the array object and is used as
       the operand of a unary * operator that is evaluated (6.5.6).
-    -- An argument to a library function has an invalid value or a type not expected by a
-      function with variable number of arguments (7.1.4).
+    -- An attempt is made to modify an object defined with a const-qualified type through
+      use of an lvalue with non-const-qualified type (6.7.3).
+    -- An argument to a function or macro defined in the standard library has an invalid
+      value or a type not expected by a function with variable number of arguments (7.1.4).
+    -- The longjmp function is called with a jmp_buf argument where the most recent
+      invocation of the setjmp macro in the same invocation of the program with the
+      corresponding jmp_buf argument is nonexistent, or the invocation was from another
+      thread of execution, or the function containing the invocation has terminated
+      execution in the interim, or the invocation was within the scope of an identifier with
+      variably modified type and execution has left that scope in the interim (7.13.2.1).
     -- The value of a pointer that refers to space deallocated by a call to the free or realloc
       function is used (7.22.3).
-    -- A string or wide string utility function is instructed to access an array beyond the end
-      of an object (7.23.1, 7.28.4).
+    -- A string or wide string utility function accesses an array beyond the end of an object
+      (7.24.1, 7.29.4).
 
-[page 649] (Contents)
+[page 653] (Contents)
 
 
                                   Bibliography
@@ -24869,7 +25102,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
  18.   ISO/IEC 9899:1999/Cor.2:2004, Technical Corrigendum 2.
  19.   ISO/IEC 9899:1999/Cor.3:2007, Technical Corrigendum 3.
 
-[page 650] (Contents)
+[page 654] (Contents)
 
  20.    ISO/IEC 9945-2:1993, Information technology -- Portable Operating System
         Interface (POSIX) -- Part 2: Shell and Utilities.
@@ -24905,7 +25138,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
  37.    ISO/IEC 10967-1:1994, Information technology -- Language independent
         arithmetic -- Part 1: Integer and floating point arithmetic.
 
-[page 651] (Contents)
+[page 655] (Contents)
 
  38.   ISO/IEC TR 19769:2004, Information technology -- Programming languages,
        their environments and system software interfaces -- Extensions for the
@@ -24914,7 +25147,7 @@ n           No input is consumed. The corresponding argument shall be a pointer
        their environments and system software interfaces -- Extensions to the C library
        -- Part 1: Bounds-checking interfaces.
 
-[page 652] (Contents)
+[page 656] (Contents)
 
 
 Index
@@ -24947,475 +25180,499 @@ n           No input is consumed. The corresponding argument shall be a pointer
 %:%: (alternative spelling of ##), 6.4.6                       <= (less-than-or-equal-to operator), 6.5.8
 %= (remainder assignment operator), 6.5.16.2                   <assert.h> header, 7.2
 %> (alternative spelling of }), 6.4.6                          <complex.h> header, 5.2.4.2.2, 6.10.8.3, 7.1.2,
-& (address operator), 6.3.2.1, 6.5.3.2                              7.3, 7.24, 7.30.1, G.6, J.5.17
-& (bitwise AND operator), 6.2.6.2, 6.5.10                      <ctype.h> header, 7.4, 7.30.2
-&& (logical AND operator), 5.1.2.4, 6.5.13                     <errno.h> header, 7.5, 7.30.3, K.3.2
-&= (bitwise AND assignment operator), 6.5.16.2                 <fenv.h> header, 5.1.2.3, 5.2.4.2.2, 7.6, 7.12, F,
-' ' (space character), 5.1.1.2, 5.2.1, 6.4, 7.4.1.3,                H
-     7.4.1.10, 7.29.2.1.3                                      <float.h> header, 4, 5.2.4.2.2, 7.7, 7.22.1.3,
-( ) (cast operator), 6.5.4                                          7.28.4.1.1
-( ) (function-call operator), 6.5.2.2                          <inttypes.h> header, 7.8, 7.30.4
+& (address operator), 6.3.2.1, 6.5.3.2                              7.3, 7.25, 7.31.1, G.6, J.5.17
+& (bitwise AND operator), 6.2.6.2, 6.5.10                      <ctype.h> header, 7.4, 7.31.2
+&& (logical AND operator), 5.1.2.4, 6.5.13                     <errno.h> header, 7.5, 7.31.3, K.3.2
+&= (bitwise AND assignment operator), 6.5.16.2                 <fenv.h> header, 5.1.2.3, 5.2.4.2.2, 7.6, 7.12,
+' ' (space character), 5.1.1.2, 5.2.1, 6.4, 7.4.1.3,                7.31.4, F, H
+     7.4.1.10, 7.30.2.1.3                                      <float.h> header, 4, 5.2.4.2.2, 7.7, 7.22.1.3,
+( ) (cast operator), 6.5.4                                          7.29.4.1.1
+( ) (function-call operator), 6.5.2.2                          <inttypes.h> header, 7.8, 7.31.5
 ( ) (parentheses punctuator), 6.7.6.3, 6.8.4, 6.8.5            <iso646.h> header, 4, 7.9
 ( ){ } (compound-literal operator), 6.5.2.5                    <limits.h> header, 4, 5.2.4.2.1, 6.2.5, 7.10
-* (asterisk punctuator), 6.7.6.1, 6.7.6.2                      <locale.h> header, 7.11, 7.30.5
-* (indirection operator), 6.5.2.1, 6.5.3.2                     <math.h> header, 5.2.4.2.2, 6.5, 7.12, 7.24, F,
+* (asterisk punctuator), 6.7.6.1, 6.7.6.2                      <locale.h> header, 7.11, 7.31.6
+* (indirection operator), 6.5.2.1, 6.5.3.2                     <math.h> header, 5.2.4.2.2, 6.5, 7.12, 7.25, F,
 * (multiplication operator), 6.2.6.2, 6.5.5, F.3,                   F.10, J.5.17
      G.5.1                                                     <setjmp.h> header, 7.13
-*= (multiplication assignment operator), 6.5.16.2              <signal.h> header, 7.14, 7.30.6
+*= (multiplication assignment operator), 6.5.16.2              <signal.h> header, 7.14, 7.31.7
 + (addition operator), 6.2.6.2, 6.5.2.1, 6.5.3.2,              <stdalign.h> header, 4, 7.15
      6.5.6, F.3, G.5.2                                         <stdarg.h> header, 4, 6.7.6.3, 7.16
-+ (unary plus operator), 6.5.3.3                               <stdatomic.h> header, 6.10.8.3, 7.1.2, 7.17
-++ (postfix increment operator), 6.3.2.1, 6.5.2.4               <stdbool.h> header, 4, 7.18, 7.30.7, H
-++ (prefix increment operator), 6.3.2.1, 6.5.3.1                <stddef.h> header, 4, 6.3.2.1, 6.3.2.3, 6.4.4.4,
++ (unary plus operator), 6.5.3.3                               <stdatomic.h> header, 6.10.8.3, 7.1.2, 7.17,
+++ (postfix increment operator), 6.3.2.1, 6.5.2.4                    7.31.8
+++ (prefix increment operator), 6.3.2.1, 6.5.3.1                <stdbool.h> header, 4, 7.18, 7.31.9, H
 += (addition assignment operator), 6.5.16.2
 
-[page 653] (Contents)
+[page 657] (Contents)
 
-     6.4.5, 6.5.3.4, 6.5.6, 7.19, K.3.3                      \x hexadecimal digits (hexadecimal-character
-<stdint.h> header, 4, 5.2.4.2, 6.10.1, 7.8,                       escape sequence), 6.4.4.4
-     7.20, 7.30.8, K.3.3, K.3.4                              ^ (bitwise exclusive OR operator), 6.2.6.2, 6.5.11
-<stdio.h> header, 5.2.4.2.2, 7.21, 7.30.9, F,                ^= (bitwise exclusive OR assignment operator),
-     K.3.5                                                        6.5.16.2
-<stdlib.h> header, 5.2.4.2.2, 7.22, 7.30.10, F,              __alignas_is_defined macro, 7.15
-     K.3.1.4, K.3.6                                          __bool_true_false_are_defined
-<string.h> header, 7.23, 7.30.11, K.3.7                           macro, 7.18
-<tgmath.h> header, 7.24, G.7                                 __cplusplus macro, 6.10.8
-<threads.h> header, 6.10.8.3, 7.1.2, 7.25                    __DATE__ macro, 6.10.8.1
-<time.h> header, 7.26, K.3.8                                 __FILE__ macro, 6.10.8.1, 7.2.1.1
-<uchar.h> header, 6.4.4.4, 6.4.5, 7.27                       __func__ identifier, 6.4.2.2, 7.2.1.1
-<wchar.h> header, 5.2.4.2.2, 7.21.1, 7.28,                   __LINE__ macro, 6.10.8.1, 7.2.1.1
-     7.30.12, F, K.3.9                                       __STDC_, 6.11.9
-<wctype.h> header, 7.29, 7.30.13                             __STDC__ macro, 6.10.8.1
-= (equal-sign punctuator), 6.7, 6.7.2.2, 6.7.9               __STDC_ANALYZABLE__ macro, 6.10.8.3, L.1
-= (simple assignment operator), 6.5.16.1                     __STDC_HOSTED__ macro, 6.10.8.1
-== (equality operator), 6.5.9                                __STDC_IEC_559__ macro, 6.10.8.3, F.1
-> (greater-than operator), 6.5.8                             __STDC_IEC_559_COMPLEX__ macro,
->= (greater-than-or-equal-to operator), 6.5.8                     6.10.8.3, G.1
->> (right-shift operator), 6.2.6.2, 6.5.7                    __STDC_ISO_10646__ macro, 6.10.8.2
->>= (right-shift assignment operator), 6.5.16.2              __STDC_LIB_EXT1__ macro, 6.10.8.3, K.2
-? : (conditional operator), 5.1.2.4, 6.5.15                  __STDC_MB_MIGHT_NEQ_WC__ macro,
-?? (trigraph sequences), 5.2.1.1                                  6.10.8.2, 7.19
-[ ] (array subscript operator), 6.5.2.1, 6.5.3.2             __STDC_NO_COMPLEX__ macro, 6.10.8.3,
-[ ] (brackets punctuator), 6.7.6.2, 6.7.9                         7.3.1
-\ (backslash character), 5.1.1.2, 5.2.1, 6.4.4.4             __STDC_NO_THREADS__ macro, 6.10.8.3,
-\ (escape character), 6.4.4.4                                     7.17.1, 7.25.1
-\" (double-quote escape sequence), 6.4.4.4,                  __STDC_NO_VLA__ macro, 6.10.8.3
-     6.4.5, 6.10.9                                           __STDC_UTF_16__ macro, 6.10.8.2
-\\ (backslash escape sequence), 6.4.4.4, 6.10.9              __STDC_UTF_32__ macro, 6.10.8.2
-\' (single-quote escape sequence), 6.4.4.4, 6.4.5            __STDC_VERSION__ macro, 6.10.8.1
-\0 (null character), 5.2.1, 6.4.4.4, 6.4.5                   __STDC_WANT_LIB_EXT1__ macro, K.3.1.1
-  padding of binary stream, 7.21.2                           __TIME__ macro, 6.10.8.1
-\? (question-mark escape sequence), 6.4.4.4                  __VA_ARGS__ identifier, 6.10.3, 6.10.3.1
-\a (alert escape sequence), 5.2.2, 6.4.4.4                   _Alignas, 6.7.5
-\b (backspace escape sequence), 5.2.2, 6.4.4.4               _Atomic type qualifier, 6.7.3
-\f (form-feed escape sequence), 5.2.2, 6.4.4.4,              _Bool type, 6.2.5, 6.3.1.1, 6.3.1.2, 6.7.2, 7.17.1,
-     7.4.1.10                                                     F.4
-\n (new-line escape sequence), 5.2.2, 6.4.4.4,               _Bool type conversions, 6.3.1.2
-     7.4.1.10                                                _Complex types, 6.2.5, 6.7.2, 7.3.1, G
-\octal digits (octal-character escape sequence),             _Complex_I macro, 7.3.1
-     6.4.4.4                                                 _Exit function, 7.22.4.5, 7.22.4.7
-\r (carriage-return escape sequence), 5.2.2,                 _Imaginary keyword, G.2
-     6.4.4.4, 7.4.1.10                                       _Imaginary types, 7.3.1, G
-\t (horizontal-tab escape sequence), 5.2.2,                  _Imaginary_I macro, 7.3.1, G.6
-     6.4.4.4, 7.4.1.3, 7.4.1.10, 7.29.2.1.3                  _IOFBF macro, 7.21.1, 7.21.5.5, 7.21.5.6
-\U (universal character names), 6.4.3                        _IOLBF macro, 7.21.1, 7.21.5.6
-\u (universal character names), 6.4.3                        _IONBF macro, 7.21.1, 7.21.5.5, 7.21.5.6
-\v (vertical-tab escape sequence), 5.2.2, 6.4.4.4,           _Noreturn, 6.7.4
-     7.4.1.10                                                _Pragma operator, 5.1.1.2, 6.10.9
+<stddef.h> header, 4, 6.3.2.1, 6.3.2.3, 6.4.4.4,            \u (universal character names), 6.4.3
+     6.4.5, 6.5.3.4, 6.5.6, 7.19, K.3.3                     \v (vertical-tab escape sequence), 5.2.2, 6.4.4.4,
+<stdint.h> header, 4, 5.2.4.2, 6.10.1, 7.8,                      7.4.1.10
+     7.20, 7.31.10, K.3.3, K.3.4                            \x hexadecimal digits (hexadecimal-character
+<stdio.h> header, 5.2.4.2.2, 7.21, 7.31.11, F,                   escape sequence), 6.4.4.4
+     K.3.5                                                  ^ (bitwise exclusive OR operator), 6.2.6.2, 6.5.11
+<stdlib.h> header, 5.2.4.2.2, 7.22, 7.31.12, F,             ^= (bitwise exclusive OR assignment operator),
+     K.3.1.4, K.3.6                                              6.5.16.2
+<stdnoreturn.h> header, 4, 7.23                             __alignas_is_defined macro, 7.15
+<string.h> header, 7.24, 7.31.13, K.3.7                     __alignof_is_defined macro, 7.15
+<tgmath.h> header, 7.25, G.7                                __bool_true_false_are_defined
+<threads.h> header, 6.10.8.3, 7.1.2, 7.26,                       macro, 7.18
+     7.31.15                                                __cplusplus macro, 6.10.8
+<time.h> header, 7.26.1, 7.27, 7.31.14, K.3.8               __DATE__ macro, 6.10.8.1
+<uchar.h> header, 6.4.4.4, 6.4.5, 7.28                      __FILE__ macro, 6.10.8.1, 7.2.1.1
+<wchar.h> header, 5.2.4.2.2, 7.21.1, 7.29,                  __func__ identifier, 6.4.2.2, 7.2.1.1
+     7.31.16, F, K.3.9                                      __LINE__ macro, 6.10.8.1, 7.2.1.1
+<wctype.h> header, 7.30, 7.31.17                            __STDC_, 6.11.9
+= (equal-sign punctuator), 6.7, 6.7.2.2, 6.7.9              __STDC__ macro, 6.10.8.1
+= (simple assignment operator), 6.5.16.1                    __STDC_ANALYZABLE__ macro, 6.10.8.3, L.1
+== (equality operator), 6.5.9                               __STDC_HOSTED__ macro, 6.10.8.1
+> (greater-than operator), 6.5.8                            __STDC_IEC_559__ macro, 6.10.8.3, F.1
+>= (greater-than-or-equal-to operator), 6.5.8               __STDC_IEC_559_COMPLEX__ macro,
+>> (right-shift operator), 6.2.6.2, 6.5.7                        6.10.8.3, G.1
+>>= (right-shift assignment operator), 6.5.16.2             __STDC_ISO_10646__ macro, 6.10.8.2
+? : (conditional operator), 5.1.2.4, 6.5.15                 __STDC_LIB_EXT1__ macro, 6.10.8.3, K.2
+?? (trigraph sequences), 5.2.1.1                            __STDC_MB_MIGHT_NEQ_WC__ macro,
+[ ] (array subscript operator), 6.5.2.1, 6.5.3.2                 6.10.8.2, 7.19
+[ ] (brackets punctuator), 6.7.6.2, 6.7.9                   __STDC_NO_ATOMICS__ macro, 6.10.8.3,
+\ (backslash character), 5.1.1.2, 5.2.1, 6.4.4.4                 7.17.1
+\ (escape character), 6.4.4.4                               __STDC_NO_COMPLEX__ macro, 6.10.8.3,
+\" (double-quote escape sequence), 6.4.4.4,                      7.3.1
+     6.4.5, 6.10.9                                          __STDC_NO_THREADS__ macro, 6.10.8.3,
+\\ (backslash escape sequence), 6.4.4.4, 6.10.9                  7.26.1
+\' (single-quote escape sequence), 6.4.4.4, 6.4.5           __STDC_NO_VLA__ macro, 6.10.8.3
+\0 (null character), 5.2.1, 6.4.4.4, 6.4.5                  __STDC_UTF_16__ macro, 6.10.8.2
+  padding of binary stream, 7.21.2                          __STDC_UTF_32__ macro, 6.10.8.2
+\? (question-mark escape sequence), 6.4.4.4                 __STDC_VERSION__ macro, 6.10.8.1
+\a (alert escape sequence), 5.2.2, 6.4.4.4                  __STDC_WANT_LIB_EXT1__ macro, K.3.1.1
+\b (backspace escape sequence), 5.2.2, 6.4.4.4              __TIME__ macro, 6.10.8.1
+\f (form-feed escape sequence), 5.2.2, 6.4.4.4,             __VA_ARGS__ identifier, 6.10.3, 6.10.3.1
+     7.4.1.10                                               _Alignas, 6.7.5
+\n (new-line escape sequence), 5.2.2, 6.4.4.4,              _Alignof operator, 6.3.2.1, 6.5.3, 6.5.3.4
+     7.4.1.10                                               _Atomic type qualifier, 6.7.3
+\octal digits (octal-character escape sequence),            _Atomic type specifier, 6.7.2.4
+     6.4.4.4                                                _Bool type, 6.2.5, 6.3.1.1, 6.3.1.2, 6.7.2, F.4
+\r (carriage-return escape sequence), 5.2.2,                _Bool type conversions, 6.3.1.2
+     6.4.4.4, 7.4.1.10                                      _Complex types, 6.2.5, 6.7.2, 7.3.1, G
+\t (horizontal-tab escape sequence), 5.2.2,                 _Complex_I macro, 7.3.1
+     6.4.4.4, 7.4.1.3, 7.4.1.10, 7.30.2.1.3                 _Exit function, 7.22.4.5, 7.22.4.7
+\U (universal character names), 6.4.3                       _Imaginary keyword, G.2
 
-[page 654] (Contents)
+[page 658] (Contents)
 
-_Static_assert, 6.7.10, 7.2                                  allocated storage, order and contiguity, 7.22.3
-_Thread_local storage-class specifier, 6.2.4,                 and macro, 7.9
-     6.7.1                                                   AND operators
-{ } (braces punctuator), 6.7.2.2, 6.7.2.3, 6.7.9,               bitwise (&), 6.2.6.2, 6.5.10
-     6.8.2                                                      bitwise assignment (&=), 6.5.16.2
-{ } (compound-literal operator), 6.5.2.5                        logical (&&), 5.1.2.4, 6.5.13
-| (bitwise inclusive OR operator), 6.2.6.2, 6.5.12           and_eq macro, 7.9
-|= (bitwise inclusive OR assignment operator),               anonymous structure, 6.7.2.1
-     6.5.16.2                                                anonymous union, 6.7.2.1
-|| (logical OR operator), 5.1.2.4, 6.5.14                    ANSI/IEEE 754, F.1
-~ (bitwise complement operator), 6.2.6.2, 6.5.3.3            ANSI/IEEE 854, F.1
-                                                             argc (main function parameter), 5.1.2.2.1
-abort function, 7.2.1.1, 7.14.1.1, 7.21.3,                   argument, 3.3
-      7.22.4.1, 7.25.3.6, K.3.6.1.2                             array, 6.9.1
-abort_handler_s function, K.3.6.1.2                             default promotions, 6.5.2.2
-abs function, 7.22.6.1                                          function, 6.5.2.2, 6.9.1
-absolute-value functions                                        macro, substitution, 6.10.3.1
-   complex, 7.3.8, G.6.4                                     argument, complex, 7.3.9.1
-   integer, 7.8.2.1, 7.22.6.1                                argv (main function parameter), 5.1.2.2.1
-   real, 7.12.7, F.10.4                                      arithmetic constant expression, 6.6
-abstract declarator, 6.7.7                                   arithmetic conversions, usual, see usual arithmetic
-abstract machine, 5.1.2.3                                          conversions
-access, 3.1, 6.7.3, L.2.1                                    arithmetic operators
-accuracy, see floating-point accuracy                            additive, 6.2.6.2, 6.5.6, G.5.2
-acos functions, 7.12.4.1, F.10.1.1                              bitwise, 6.2.6.2, 6.5.3.3, 6.5.10, 6.5.11, 6.5.12
-acos type-generic macro, 7.24                                   increment and decrement, 6.5.2.4, 6.5.3.1
-acosh functions, 7.12.5.1, F.10.2.1                             multiplicative, 6.2.6.2, 6.5.5, G.5.1
-acosh type-generic macro, 7.24                                  shift, 6.2.6.2, 6.5.7
-acquire fence, 7.17.4                                           unary, 6.5.3.3
-acquire operation, 5.1.2.4                                   arithmetic types, 6.2.5
-active position, 5.2.2                                       arithmetic, pointer, 6.5.6
-actual argument, 3.3                                         array
-actual parameter (deprecated), 3.3                              argument, 6.9.1
-addition assignment operator (+=), 6.5.16.2                     declarator, 6.7.6.2
-addition operator (+), 6.2.6.2, 6.5.2.1, 6.5.3.2,               initialization, 6.7.9
-      6.5.6, F.3, G.5.2                                         multidimensional, 6.5.2.1
-additive expressions, 6.5.6, G.5.2                              parameter, 6.9.1
-address constant, 6.6                                           storage order, 6.5.2.1
-address operator (&), 6.3.2.1, 6.5.3.2                          subscript operator ([ ]), 6.5.2.1, 6.5.3.2
-address-free, 7.17.5                                            subscripting, 6.5.2.1
-aggregate initialization, 6.7.9                                 type, 6.2.5
-aggregate types, 6.2.5                                          type conversion, 6.3.2.1
-alert escape sequence (\a), 5.2.2, 6.4.4.4                      variable length, 6.7.6, 6.7.6.2, 6.10.8.3
-aliasing, 6.5                                                arrow operator (->), 6.5.2.3
-alignas macro, 7.15                                          as-if rule, 5.1.2.3
-aligned_alloc function, 7.22.3, 7.22.3.1                     ASCII code set, 5.2.1.1
-alignment, 3.2, 6.2.8, 7.22.3.1                              asctime function, 7.26.3.1
-   pointer, 6.2.5, 6.3.2.3                                   asctime_s function, K.3.8.2, K.3.8.2.1
-   structure/union member, 6.7.2.1                           asin functions, 7.12.4.2, F.10.1.2
-alignment specifier, 6.7.5                                    asin type-generic macro, 7.24, G.7
-alignof operator, 6.5.3, 6.5.3.4                             asinh functions, 7.12.5.2, F.10.2.2
+_Imaginary types, 7.3.1, G                                   aliasing, 6.5
+_Imaginary_I macro, 7.3.1, G.6                               alignas macro, 7.15
+_IOFBF macro, 7.21.1, 7.21.5.5, 7.21.5.6                     aligned_alloc function, 7.22.3, 7.22.3.1
+_IOLBF macro, 7.21.1, 7.21.5.6                               alignment, 3.2, 6.2.8, 7.22.3.1
+_IONBF macro, 7.21.1, 7.21.5.5, 7.21.5.6                        pointer, 6.2.5, 6.3.2.3
+_Noreturn, 6.7.4                                                structure/union member, 6.7.2.1
+_Noreturn header, 7.23                                       alignment header, 7.15
+_Pragma operator, 5.1.1.2, 6.10.9                            alignment specifier, 6.7.5
+_Static_assert, 6.7.10, 7.2                                  alignof macro, 7.15
+_Thread_local storage-class specifier, 6.2.4,                 allocated storage, order and contiguity, 7.22.3
+     6.7.1, 7.26.1                                           alternative spellings header, 7.9
+{ } (braces punctuator), 6.7.2.2, 6.7.2.3, 6.7.9,            and macro, 7.9
+     6.8.2                                                   AND operators
+{ } (compound-literal operator), 6.5.2.5                        bitwise (&), 6.2.6.2, 6.5.10
+| (bitwise inclusive OR operator), 6.2.6.2, 6.5.12              bitwise assignment (&=), 6.5.16.2
+|= (bitwise inclusive OR assignment operator),                  logical (&&), 5.1.2.4, 6.5.13
+     6.5.16.2                                                and_eq macro, 7.9
+|| (logical OR operator), 5.1.2.4, 6.5.14                    anonymous structure, 6.7.2.1
+~ (bitwise complement operator), 6.2.6.2, 6.5.3.3            anonymous union, 6.7.2.1
+                                                             ANSI/IEEE 754, F.1
+abort function, 7.2.1.1, 7.14.1.1, 7.21.3,                   ANSI/IEEE 854, F.1
+      7.22.4.1, K.3.6.1.2                                    argc (main function parameter), 5.1.2.2.1
+abort_handler_s function, K.3.6.1.2                          argument, 3.3
+abs function, 7.22.6.1                                          array, 6.9.1
+absolute-value functions                                        default promotions, 6.5.2.2
+   complex, 7.3.8, G.6.4                                        function, 6.5.2.2, 6.9.1
+   integer, 7.8.2.1, 7.22.6.1                                   macro, substitution, 6.10.3.1
+   real, 7.12.7, F.10.4                                      argument, complex, 7.3.9.1
+abstract declarator, 6.7.7                                   argv (main function parameter), 5.1.2.2.1
+abstract machine, 5.1.2.3                                    arithmetic constant expression, 6.6
+access, 3.1, 6.7.3, L.2.1                                    arithmetic conversions, usual, see usual arithmetic
+accuracy, see floating-point accuracy                               conversions
+acos functions, 7.12.4.1, F.10.1.1                           arithmetic operators
+acos type-generic macro, 7.25                                   additive, 6.2.6.2, 6.5.6, G.5.2
+acosh functions, 7.12.5.1, F.10.2.1                             bitwise, 6.2.6.2, 6.5.3.3, 6.5.10, 6.5.11, 6.5.12
+acosh type-generic macro, 7.25                                  increment and decrement, 6.5.2.4, 6.5.3.1
+acquire fence, 7.17.4                                           multiplicative, 6.2.6.2, 6.5.5, G.5.1
+acquire operation, 5.1.2.4                                      shift, 6.2.6.2, 6.5.7
+active position, 5.2.2                                          unary, 6.5.3.3
+actual argument, 3.3                                         arithmetic types, 6.2.5
+actual parameter (deprecated), 3.3                           arithmetic, pointer, 6.5.6
+addition assignment operator (+=), 6.5.16.2                  array
+addition operator (+), 6.2.6.2, 6.5.2.1, 6.5.3.2,               argument, 6.9.1
+      6.5.6, F.3, G.5.2                                         declarator, 6.7.6.2
+additive expressions, 6.5.6, G.5.2                              initialization, 6.7.9
+address constant, 6.6                                           multidimensional, 6.5.2.1
+address operator (&), 6.3.2.1, 6.5.3.2                          parameter, 6.9.1
+address-free, 7.17.5                                            storage order, 6.5.2.1
+aggregate initialization, 6.7.9                                 subscript operator ([ ]), 6.5.2.1, 6.5.3.2
+aggregate types, 6.2.5                                          subscripting, 6.5.2.1
+alert escape sequence (\a), 5.2.2, 6.4.4.4                      type, 6.2.5
 
-[page 655] (Contents)
+[page 659] (Contents)
 
-asinh type-generic macro, 7.24, G.7                           atomic_is_lock_free generic function,
-asm keyword, J.5.10                                               7.17.5.1
-assert macro, 7.2.1.1                                         ATOMIC_LLONG_LOCK_FREE macro, 7.17.1
-assert.h header, 7.2                                          atomic_load generic functions, 7.17.7.2
-assignment                                                    ATOMIC_LONG_LOCK_FREE macro, 7.17.1
-   compound, 6.5.16.2                                         ATOMIC_SHORT_LOCK_FREE macro, 7.17.1
-   conversion, 6.5.16.1                                       atomic_signal_fence function, 7.17.4.2
-   expression, 6.5.16                                         atomic_store generic functions, 7.17.7.1
-   operators, 6.3.2.1, 6.5.16                                 atomic_thread_fence function, 7.17.4.1
-   simple, 6.5.16.1                                           ATOMIC_VAR_INIT macro, 7.17.2.1
-associativity of operators, 6.5                               ATOMIC_WCHAR_T_LOCK_FREE macro, 7.17.1
-asterisk punctuator (*), 6.7.6.1, 6.7.6.2                     atomics header, 7.17
-at_quick_exit function, 7.22.4.2, 7.22.4.3,                   auto storage-class specifier, 6.7.1, 6.9
-     7.22.4.4, 7.22.4.5, 7.22.4.7                             automatic storage duration, 5.2.3, 6.2.4
-atan functions, 7.12.4.3, F.10.1.3
-atan type-generic macro, 7.24, G.7                            backslash character (\), 5.1.1.2, 5.2.1, 6.4.4.4
-atan2 functions, 7.12.4.4, F.10.1.4                           backslash escape sequence (\\), 6.4.4.4, 6.10.9
-atan2 type-generic macro, 7.24                                backspace escape sequence (\b), 5.2.2, 6.4.4.4
-atanh functions, 7.12.5.3, F.10.2.3                           basic character set, 3.6, 3.7.2, 5.2.1
-atanh type-generic macro, 7.24, G.7                           basic types, 6.2.5
-atexit function, 7.22.4.2, 7.22.4.3, 7.22.4.4,                behavior, 3.4
-     7.22.4.5, 7.22.4.7, J.5.13                               binary streams, 7.21.2, 7.21.7.10, 7.21.9.2,
-atof function, 7.22.1, 7.22.1.1                                     7.21.9.4
-atoi function, 7.22.1, 7.22.1.2                               bit, 3.5
-atol function, 7.22.1, 7.22.1.2                                  high order, 3.6
-atoll function, 7.22.1, 7.22.1.2                                 low order, 3.6
-atomic lock-free macros, 7.17.1, 7.17.5                       bit-field, 6.7.2.1
-atomic operations, 5.1.2.4                                    bitand macro, 7.9
-atomic types, 5.1.2.3, 6.2.5, 6.2.6.1, 6.3.2.1,               bitor macro, 7.9
-     6.5.2.3, 6.5.2.4, 6.5.16.2, 6.7.2.4, 6.10.8.3,           bitwise operators, 6.5
-     7.17.6                                                      AND, 6.2.6.2, 6.5.10
-atomic_address type, 7.17.1, 7.17.6                              AND assignment (&=), 6.5.16.2
-ATOMIC_ADDRESS_LOCK_FREE macro, 7.17.1                           complement (~), 6.2.6.2, 6.5.3.3
-atomic_bool type, 7.17.1, 7.17.6                                 exclusive OR, 6.2.6.2, 6.5.11
-ATOMIC_CHAR16_T_LOCK_FREE macro,                                 exclusive OR assignment (^=), 6.5.16.2
-     7.17.1                                                      inclusive OR, 6.2.6.2, 6.5.12
-ATOMIC_CHAR32_T_LOCK_FREE macro,                                 inclusive OR assignment (|=), 6.5.16.2
-     7.17.1                                                      shift, 6.2.6.2, 6.5.7
-ATOMIC_CHAR_LOCK_FREE macro, 7.17.1                           blank character, 7.4.1.3
-atomic_compare_exchange generic                               block, 6.8, 6.8.2, 6.8.4, 6.8.5
-     functions, 7.17.7.4                                      block scope, 6.2.1
-atomic_exchange generic functions, 7.17.7.3                   block structure, 6.2.1
-atomic_fetch and modify generic functions,                    bold type convention, 6.1
-     7.17.7.5                                                 bool macro, 7.18
-atomic_flag type, 7.17.1, 7.17.8                              boolean type, 6.3.1.2
-atomic_flag_clear functions, 7.17.8.2                         boolean type conversion, 6.3.1.1, 6.3.1.2
-ATOMIC_FLAG_INIT macro, 7.17.1, 7.17.8                        bounded undefined behavior, L.2.2
-atomic_flag_test_and_set functions,                           braces punctuator ({ }), 6.7.2.2, 6.7.2.3, 6.7.9,
-     7.17.8.1                                                       6.8.2
-atomic_init generic function, 7.17.2.2                        brackets operator ([ ]), 6.5.2.1, 6.5.3.2
-ATOMIC_INT_LOCK_FREE macro, 7.17.1                            brackets punctuator ([ ]), 6.7.6.2, 6.7.9
+   type conversion, 6.3.2.1                                       7.17.7.5
+   variable length, 6.7.6, 6.7.6.2, 6.10.8.3                  atomic_flag type, 7.17.1, 7.17.8
+arrow operator (->), 6.5.2.3                                  atomic_flag_clear functions, 7.17.8.2
+as-if rule, 5.1.2.3                                           ATOMIC_FLAG_INIT macro, 7.17.1, 7.17.8
+ASCII code set, 5.2.1.1                                       atomic_flag_test_and_set functions,
+asctime function, 7.27.3.1                                        7.17.8.1
+asctime_s function, K.3.8.2, K.3.8.2.1                        atomic_init generic function, 7.17.2.2
+asin functions, 7.12.4.2, F.10.1.2                            ATOMIC_INT_LOCK_FREE macro, 7.17.1
+asin type-generic macro, 7.25, G.7                            atomic_is_lock_free generic function,
+asinh functions, 7.12.5.2, F.10.2.2                               7.17.5.1
+asinh type-generic macro, 7.25, G.7                           ATOMIC_LLONG_LOCK_FREE macro, 7.17.1
+asm keyword, J.5.10                                           atomic_load generic functions, 7.17.7.2
+assert macro, 7.2.1.1                                         ATOMIC_LONG_LOCK_FREE macro, 7.17.1
+assert.h header, 7.2                                          ATOMIC_LLONG_LOCK_FREE macro, 7.17.1
+assignment                                                    ATOMIC_SHORT_LOCK_FREE macro, 7.17.1
+   compound, 6.5.16.2                                         atomic_signal_fence function, 7.17.4.2
+   conversion, 6.5.16.1                                       atomic_store generic functions, 7.17.7.1
+   expression, 6.5.16                                         atomic_thread_fence function, 7.17.4.1
+   operators, 6.3.2.1, 6.5.16                                 ATOMIC_VAR_INIT macro, 7.17.2.1
+   simple, 6.5.16.1                                           ATOMIC_WCHAR_T_LOCK_FREE macro, 7.17.1
+associativity of operators, 6.5                               atomics header, 7.17, 7.31.8
+asterisk punctuator (*), 6.7.6.1, 6.7.6.2                     auto storage-class specifier, 6.7.1, 6.9
+at_quick_exit function, 7.22.4.2, 7.22.4.3,                   automatic storage duration, 5.2.3, 6.2.4
+     7.22.4.4, 7.22.4.5, 7.22.4.7
+atan functions, 7.12.4.3, F.10.1.3                            backslash character (\), 5.1.1.2, 5.2.1, 6.4.4.4
+atan type-generic macro, 7.25, G.7                            backslash escape sequence (\\), 6.4.4.4, 6.10.9
+atan2 functions, 7.12.4.4, F.10.1.4                           backspace escape sequence (\b), 5.2.2, 6.4.4.4
+atan2 type-generic macro, 7.25                                basic character set, 3.6, 3.7.2, 5.2.1
+atanh functions, 7.12.5.3, F.10.2.3                           basic types, 6.2.5
+atanh type-generic macro, 7.25, G.7                           behavior, 3.4
+atexit function, 7.22.4.2, 7.22.4.3, 7.22.4.4,                binary streams, 7.21.2, 7.21.7.10, 7.21.9.2,
+     7.22.4.5, 7.22.4.7, J.5.13                                     7.21.9.4
+atof function, 7.22.1, 7.22.1.1                               bit, 3.5
+atoi function, 7.22.1, 7.22.1.2                                  high order, 3.6
+atol function, 7.22.1, 7.22.1.2                                  low order, 3.6
+atoll function, 7.22.1, 7.22.1.2                              bit-field, 6.7.2.1
+atomic lock-free macros, 7.17.1, 7.17.5                       bitand macro, 7.9
+atomic operations, 5.1.2.4                                    bitor macro, 7.9
+atomic types, 5.1.2.3, 6.2.5, 6.2.6.1, 6.3.2.1,               bitwise operators, 6.5
+     6.5.2.3, 6.5.2.4, 6.5.16.2, 6.7.2.4, 6.10.8.3,              AND, 6.2.6.2, 6.5.10
+     7.17.6                                                      AND assignment (&=), 6.5.16.2
+ATOMIC_CHAR_LOCK_FREE macro, 7.17.1                              complement (~), 6.2.6.2, 6.5.3.3
+ATOMIC_CHAR16_T_LOCK_FREE macro,                                 exclusive OR, 6.2.6.2, 6.5.11
+     7.17.1                                                      exclusive OR assignment (^=), 6.5.16.2
+ATOMIC_CHAR32_T_LOCK_FREE macro,                                 inclusive OR, 6.2.6.2, 6.5.12
+     7.17.1                                                      inclusive OR assignment (|=), 6.5.16.2
+ATOMIC_CHAR_LOCK_FREE macro, 7.17.1                              shift, 6.2.6.2, 6.5.7
+atomic_compare_exchange generic                               blank character, 7.4.1.3
+     functions, 7.17.7.4                                      block, 6.8, 6.8.2, 6.8.4, 6.8.5
+atomic_exchange generic functions, 7.17.7.3                   block scope, 6.2.1
+atomic_fetch and modify generic functions,                    block structure, 6.2.1
 
-[page 656] (Contents)
+[page 660] (Contents)
 
-branch cuts, 7.3.3                                                type-generic macro for, 7.24
+bold type convention, 6.1                                        type-generic macro for, 7.25
+bool macro, 7.18                                               cast expression, 6.5.4
+boolean type, 6.3.1.2                                          cast operator (( )), 6.5.4
+boolean type and values header, 7.18, 7.31.9                   catan functions, 7.3.5.3, G.6
+boolean type conversion, 6.3.1.1, 6.3.1.2                        type-generic macro for, 7.25
+bounded undefined behavior, L.2.2                               catanh functions, 7.3.6.3, G.6.2.3
+braces punctuator ({ }), 6.7.2.2, 6.7.2.3, 6.7.9,                type-generic macro for, 7.25
+     6.8.2                                                     cbrt functions, 7.12.7.1, F.10.4.1
+brackets operator ([ ]), 6.5.2.1, 6.5.3.2                      cbrt type-generic macro, 7.25
+brackets punctuator ([ ]), 6.7.6.2, 6.7.9                      ccos functions, 7.3.5.4, G.6
+branch cuts, 7.3.3                                               type-generic macro for, 7.25
 break statement, 6.8.6.3                                       ccosh functions, 7.3.6.4, G.6.2.4
-broken-down time, 7.26.1, 7.26.2.3, 7.26.3,                       type-generic macro for, 7.24
-     7.26.3.1, 7.26.3.3, 7.26.3.4, 7.26.3.5,                   ceil functions, 7.12.9.1, F.10.6.1
-     K.3.8.2.1, K.3.8.2.3, K.3.8.2.4                           ceil type-generic macro, 7.24
-bsearch function, 7.22.5, 7.22.5.1                             cerf function, 7.30.1
-bsearch_s function, K.3.6.3, K.3.6.3.1                         cerfc function, 7.30.1
-btowc function, 7.28.6.1.1                                     cexp functions, 7.3.7.1, G.6.3.1
-BUFSIZ macro, 7.21.1, 7.21.2, 7.21.5.5                            type-generic macro for, 7.24
-byte, 3.6, 6.5.3.4                                             cexp2 function, 7.30.1
-byte input/output functions, 7.21.1                            cexpm1 function, 7.30.1
+broken-down time, 7.27.1, 7.27.2.3, 7.27.3,                      type-generic macro for, 7.25
+     7.27.3.1, 7.27.3.3, 7.27.3.4, 7.27.3.5,                   ceil functions, 7.12.9.1, F.10.6.1
+     K.3.8.2.1, K.3.8.2.3, K.3.8.2.4                           ceil type-generic macro, 7.25
+bsearch function, 7.22.5, 7.22.5.1                             cerf function, 7.31.1
+bsearch_s function, K.3.6.3, K.3.6.3.1                         cerfc function, 7.31.1
+btowc function, 7.29.6.1.1                                     cexp functions, 7.3.7.1, G.6.3.1
+BUFSIZ macro, 7.21.1, 7.21.2, 7.21.5.5                           type-generic macro for, 7.25
+byte, 3.6, 6.5.3.4                                             cexp2 function, 7.31.1
+byte input/output functions, 7.21.1                            cexpm1 function, 7.31.1
 byte-oriented stream, 7.21.2                                   char type, 6.2.5, 6.3.1.1, 6.7.2, K.3.5.3.2,
-                                                                     K.3.9.1.2
+                                                                    K.3.9.1.2
 C program, 5.1.1.1                                             char type conversion, 6.3.1.1, 6.3.1.3, 6.3.1.4,
-c16rtomb function, 7.27.1.2                                          6.3.1.8
-c32rtomb function, 7.27.1.4                                    char16_t type, 6.4.4.4, 6.4.5, 6.10.8.2, 7.27
-cabs functions, 7.3.8.1, G.6                                   char32_t type, 6.4.4.4, 6.4.5, 6.10.8.2, 7.27
-  type-generic macro for, 7.24                                 CHAR_BIT macro, 5.2.4.2.1, 6.7.2.1
-cacos functions, 7.3.5.1, G.6.1.1                              CHAR_MAX macro, 5.2.4.2.1, 7.11.2.1
-  type-generic macro for, 7.24                                 CHAR_MIN macro, 5.2.4.2.1
-cacosh functions, 7.3.6.1, G.6.2.1                             character, 3.7, 3.7.1
-  type-generic macro for, 7.24                                 character array initialization, 6.7.9
-calendar time, 7.26.1, 7.26.2.2, 7.26.2.3, 7.26.2.4,           character case mapping functions, 7.4.2
-      7.26.3.2, 7.26.3.3, 7.26.3.4, K.3.8.2.2,                    wide character, 7.29.3.1
-      K.3.8.2.3, K.3.8.2.4                                           extensible, 7.29.3.2
-call by value, 6.5.2.2                                         character classification functions, 7.4.1
-call_once function, 7.25.1, 7.25.2.1                              wide character, 7.29.2.1
-calloc function, 7.22.3, 7.22.3.2                                    extensible, 7.29.2.2
-carg functions, 7.3.9.1, G.6                                   character constant, 5.1.1.2, 5.2.1, 6.4.4.4
-carg type-generic macro, 7.24, G.7                             character display semantics, 5.2.2
-carriage-return escape sequence (\r), 5.2.2,                   character handling header, 7.4, 7.11.1.1
-      6.4.4.4, 7.4.1.10                                        character input/output functions, 7.21.7, K.3.5.4
-carries a dependency, 5.1.2.4                                     wide character, 7.28.3
-case label, 6.8.1, 6.8.4.2                                     character sets, 5.2.1
-case mapping functions                                         character string literal, see string literal
-  character, 7.4.2                                             character type conversion, 6.3.1.1
-  wide character, 7.29.3.1                                     character types, 6.2.5, 6.7.9
-      extensible, 7.29.3.2                                     cimag functions, 7.3.9.2, 7.3.9.5, G.6
-casin functions, 7.3.5.2, G.6                                  cimag type-generic macro, 7.24, G.7
-  type-generic macro for, 7.24                                 cis function, G.6
-casinh functions, 7.3.6.2, G.6.2.2                             classification functions
-  type-generic macro for, 7.24                                    character, 7.4.1
-cast expression, 6.5.4                                            floating-point, 7.12.3
-cast operator (( )), 6.5.4                                        wide character, 7.29.2.1
-catan functions, 7.3.5.3, G.6                                        extensible, 7.29.2.2
-  type-generic macro for, 7.24                                 clearerr function, 7.21.10.1
-catanh functions, 7.3.6.3, G.6.2.3                             clgamma function, 7.30.1
-  type-generic macro for, 7.24                                 clock function, 7.26.2.1
-cbrt functions, 7.12.7.1, F.10.4.1                             clock_t type, 7.26.1, 7.26.2.1
-cbrt type-generic macro, 7.24                                  CLOCKS_PER_SEC macro, 7.26.1, 7.26.2.1
-ccos functions, 7.3.5.4, G.6                                   clog functions, 7.3.7.2, G.6.3.2
+c16rtomb function, 7.28.1.2                                         6.3.1.8
+c32rtomb function, 7.28.1.4                                    char16_t type, 6.4.4.4, 6.4.5, 6.7.9, 6.10.8.2,
+cabs functions, 7.3.8.1, G.6                                        7.28
+  type-generic macro for, 7.25                                 char32_t type, 6.4.4.4, 6.4.5, 6.7.9, 6.10.8.2,
+cacos functions, 7.3.5.1, G.6.1.1                                   7.28
+  type-generic macro for, 7.25                                 CHAR_BIT macro, 5.2.4.2.1, 6.7.2.1
+cacosh functions, 7.3.6.1, G.6.2.1                             CHAR_MAX macro, 5.2.4.2.1, 7.11.2.1
+  type-generic macro for, 7.25                                 CHAR_MIN macro, 5.2.4.2.1
+calendar time, 7.27.1, 7.27.2.2, 7.27.2.3, 7.27.2.4,           character, 3.7, 3.7.1
+      7.27.3.2, 7.27.3.3, 7.27.3.4, K.3.8.2.2,                 character array initialization, 6.7.9
+      K.3.8.2.3, K.3.8.2.4                                     character case mapping functions, 7.4.2
+call by value, 6.5.2.2                                           wide character, 7.30.3.1
+call_once function, 7.26.1, 7.26.2.1                                extensible, 7.30.3.2
+calloc function, 7.22.3, 7.22.3.2                              character classification functions, 7.4.1
+carg functions, 7.3.9.1, G.6                                     wide character, 7.30.2.1
+carg type-generic macro, 7.25, G.7                                  extensible, 7.30.2.2
+carriage-return escape sequence (\r), 5.2.2,                   character constant, 5.1.1.2, 5.2.1, 6.4.4.4
+      6.4.4.4, 7.4.1.10                                        character display semantics, 5.2.2
+carries a dependency, 5.1.2.4                                  character handling header, 7.4, 7.11.1.1, 7.31.2
+case label, 6.8.1, 6.8.4.2                                     character input/output functions, 7.21.7, K.3.5.4
+case mapping functions                                           wide character, 7.29.3
+  character, 7.4.2                                             character sets, 5.2.1
+  wide character, 7.30.3.1                                     character string literal, see string literal
+      extensible, 7.30.3.2                                     character type conversion, 6.3.1.1
+casin functions, 7.3.5.2, G.6                                  character types, 6.2.5, 6.7.9
+  type-generic macro for, 7.25                                 characteristics of floating types header, 7.7
+casinh functions, 7.3.6.2, G.6.2.2                             cimag functions, 7.3.9.2, 7.3.9.5, G.6
 
-[page 657] (Contents)
+[page 661] (Contents)
 
-  type-generic macro for, 7.24                                  string, 7.23.3, K.3.7.2
-clog10 function, 7.30.1                                         wide string, 7.28.4.3, K.3.9.2.2
-clog1p function, 7.30.1                                       concatenation, preprocessing, see preprocessing
-clog2 function, 7.30.1                                             concatenation
-CMPLX macros, 7.3.9.3                                         conceptual models, 5.1
-cnd_broadcast function, 7.25.3.1, 7.25.3.5,                   conditional features, 4, 6.2.5, 6.7.6.2, 6.10.8.3,
-     7.25.3.6                                                      7.1.2, F.1, G.1, K.2, L.1
-cnd_destroy function, 7.25.3.2                                conditional inclusion, 6.10.1
-cnd_init function, 7.25.3.3                                   conditional operator (? :), 5.1.2.4, 6.5.15
-cnd_signal function, 7.25.3.4, 7.25.3.5,                      conflict, 5.1.2.4
-     7.25.3.6                                                 conformance, 4
-cnd_t type, 7.25.1                                            conj functions, 7.3.9.4, G.6
-cnd_timedwait function, 7.25.3.5                              conj type-generic macro, 7.24
-cnd_wait function, 7.25.3.3, 7.25.3.6                         const type qualifier, 6.7.3
-collating sequences, 5.2.1                                    const-qualified type, 6.2.5, 6.3.2.1, 6.7.3
-colon punctuator (:), 6.7.2.1                                 constant expression, 6.6, F.8.4
-comma operator (,), 5.1.2.4, 6.5.17                           constants, 6.4.4
-comma punctuator (,), 6.5.2, 6.7, 6.7.2.1, 6.7.2.2,             as primary expression, 6.5.1
-     6.7.2.3, 6.7.9                                             character, 6.4.4.4
-command processor, 7.22.4.8                                     enumeration, 6.2.1, 6.4.4.3
-comment delimiters (/* */ and //), 6.4.9                        floating, 6.4.4.2
-comments, 5.1.1.2, 6.4, 6.4.9                                   hexadecimal, 6.4.4.1
-common extensions, J.5                                          integer, 6.4.4.1
-common initial sequence, 6.5.2.3                                octal, 6.4.4.1
-common real type, 6.3.1.8                                     constraint, 3.8, 4
-common warnings, I                                            constraint_handler_t type, K.3.6
-comparison functions, 7.22.5, 7.22.5.1, 7.22.5.2,             consume operation, 5.1.2.4
-     K.3.6.3, K.3.6.3.1, K.3.6.3.2                            content of structure/union/enumeration, 6.7.2.3
-  string, 7.23.4                                              contiguity of allocated storage, 7.22.3
-  wide string, 7.28.4.4                                       continue statement, 6.8.6.2
-comparison macros, 7.12.14                                    contracted expression, 6.5, 7.12.2, F.7
-comparison, pointer, 6.5.8                                    control character, 5.2.1, 7.4
-compatible type, 6.2.7, 6.7.2, 6.7.3, 6.7.6                   control wide character, 7.29.2
-compl macro, 7.9                                              conversion, 6.3
-complement operator (~), 6.2.6.2, 6.5.3.3                       arithmetic operands, 6.3.1
-complete type, 6.2.5                                            array argument, 6.9.1
-complex macro, 7.3.1                                            array parameter, 6.9.1
-complex numbers, 6.2.5, G                                       arrays, 6.3.2.1
-complex type conversion, 6.3.1.6, 6.3.1.7                       boolean, 6.3.1.2
-complex type domain, 6.2.5                                      boolean, characters, and integers, 6.3.1.1
-complex types, 6.2.5, 6.7.2, 6.10.8.3, G                        by assignment, 6.5.16.1
-complex.h header, 5.2.4.2.2, 6.10.8.3, 7.1.2,                   by return statement, 6.8.6.4
-     7.3, 7.24, 7.30.1, G.6, J.5.17                             complex types, 6.3.1.6
-compliance, see conformance                                     explicit, 6.3
-components of time, 7.26.1, K.3.8.1                             function, 6.3.2.1
-composite type, 6.2.7                                           function argument, 6.5.2.2, 6.9.1
-compound assignment, 6.5.16.2                                   function designators, 6.3.2.1
-compound literals, 6.5.2.5                                      function parameter, 6.9.1
-compound statement, 6.8.2                                       imaginary, G.4.1
-compound-literal operator (( ){ }), 6.5.2.5                     imaginary and complex, G.4.3
-concatenation functions                                         implicit, 6.3
+cimag type-generic macro, 7.25, G.7                           complex macro, 7.3.1
+cis function, G.6                                             complex numbers, 6.2.5, G
+classification functions                                       complex type conversion, 6.3.1.6, 6.3.1.7
+   character, 7.4.1                                           complex type domain, 6.2.5
+   floating-point, 7.12.3                                      complex types, 6.2.5, 6.7.2, 6.10.8.3, G
+   wide character, 7.30.2.1                                   complex.h header, 5.2.4.2.2, 6.10.8.3, 7.1.2,
+      extensible, 7.30.2.2                                         7.3, 7.25, 7.31.1, G.6, J.5.17
+clearerr function, 7.21.10.1                                  compliance, see conformance
+clgamma function, 7.31.1                                      components of time, 7.27.1, K.3.8.1
+clock function, 7.27.2.1                                      composite type, 6.2.7
+clock_t type, 7.27.1, 7.27.2.1                                compound assignment, 6.5.16.2
+CLOCKS_PER_SEC macro, 7.27.1, 7.27.2.1                        compound literals, 6.5.2.5
+clog functions, 7.3.7.2, G.6.3.2                              compound statement, 6.8.2
+   type-generic macro for, 7.25                               compound-literal operator (( ){ }), 6.5.2.5
+clog10 function, 7.31.1                                       concatenation functions
+clog1p function, 7.31.1                                         string, 7.24.3, K.3.7.2
+clog2 function, 7.31.1                                          wide string, 7.29.4.3, K.3.9.2.2
+CMPLX macros, 7.3.9.3                                         concatenation, preprocessing, see preprocessing
+cnd_broadcast function, 7.26.3.1, 7.26.3.5,                        concatenation
+      7.26.3.6                                                conceptual models, 5.1
+cnd_destroy function, 7.26.3.2                                conditional features, 4, 6.2.5, 6.7.6.2, 6.10.8.3,
+cnd_init function, 7.26.3.3                                        7.1.2, F.1, G.1, K.2, L.1
+cnd_signal function, 7.26.3.4, 7.26.3.5,                      conditional inclusion, 6.10.1
+      7.26.3.6                                                conditional operator (? :), 5.1.2.4, 6.5.15
+cnd_t type, 7.26.1                                            conflict, 5.1.2.4
+cnd_timedwait function, 7.26.3.5                              conformance, 4
+cnd_wait function, 7.26.3.3, 7.26.3.6                         conj functions, 7.3.9.4, G.6
+collating sequences, 5.2.1                                    conj type-generic macro, 7.25
+colon punctuator (:), 6.7.2.1                                 const type qualifier, 6.7.3
+comma operator (,), 5.1.2.4, 6.5.17                           const-qualified type, 6.2.5, 6.3.2.1, 6.7.3
+comma punctuator (,), 6.5.2, 6.7, 6.7.2.1, 6.7.2.2,           constant expression, 6.6, F.8.4
+      6.7.2.3, 6.7.9                                          constants, 6.4.4
+command processor, 7.22.4.8                                     as primary expression, 6.5.1
+comment delimiters (/* */ and //), 6.4.9                        character, 6.4.4.4
+comments, 5.1.1.2, 6.4, 6.4.9                                   enumeration, 6.2.1, 6.4.4.3
+common definitions header, 7.19                                  floating, 6.4.4.2
+common extensions, J.5                                          hexadecimal, 6.4.4.1
+common initial sequence, 6.5.2.3                                integer, 6.4.4.1
+common real type, 6.3.1.8                                       octal, 6.4.4.1
+common warnings, I                                            constraint, 3.8, 4
+comparison functions, 7.22.5, 7.22.5.1, 7.22.5.2,             constraint_handler_t type, K.3.6
+      K.3.6.3, K.3.6.3.1, K.3.6.3.2                           consume operation, 5.1.2.4
+   string, 7.24.4                                             content of structure/union/enumeration, 6.7.2.3
+   wide string, 7.29.4.4                                      contiguity of allocated storage, 7.22.3
+comparison macros, 7.12.14                                    continue statement, 6.8.6.2
+comparison, pointer, 6.5.8                                    contracted expression, 6.5, 7.12.2, F.7
+compatible type, 6.2.7, 6.7.2, 6.7.3, 6.7.6                   control character, 5.2.1, 7.4
+compl macro, 7.9                                              control wide character, 7.30.2
+complement operator (~), 6.2.6.2, 6.5.3.3                     conversion, 6.3
+complete type, 6.2.5                                            arithmetic operands, 6.3.1
+complex arithmetic header, 7.3, 7.31.1                          array argument, 6.9.1
 
-[page 658] (Contents)
+[page 662] (Contents)
 
-   lvalues, 6.3.2.1                                             csinh functions, 7.3.6.5, G.6.2.5
-   pointer, 6.3.2.1, 6.3.2.3                                      type-generic macro for, 7.24
-   real and complex, 6.3.1.7                                    csqrt functions, 7.3.8.3, G.6.4.2
-   real and imaginary, G.4.2                                      type-generic macro for, 7.24
-   real floating and integer, 6.3.1.4, F.3, F.4                  ctan functions, 7.3.5.6, G.6
-   real floating types, 6.3.1.5, F.3                               type-generic macro for, 7.24
-   signed and unsigned integers, 6.3.1.3                        ctanh functions, 7.3.6.6, G.6.2.6
-   usual arithmetic, see usual arithmetic                         type-generic macro for, 7.24
-         conversions                                            ctgamma function, 7.30.1
-   void type, 6.3.2.2                                           ctime function, 7.26.3.2
-conversion functions                                            ctime_s function, K.3.8.2, K.3.8.2.2
-   multibyte/wide character, 7.22.7, K.3.6.4                    ctype.h header, 7.4, 7.30.2
-      extended, 7.28.6, K.3.9.3                                 current object, 6.7.9
-      restartable, 7.27.1, 7.28.6.3, K.3.9.3.1                  CX_LIMITED_RANGE pragma, 6.10.6, 7.3.4
-   multibyte/wide string, 7.22.8, K.3.6.5
-      restartable, 7.28.6.4, K.3.9.3.2                          data race, 5.1.2.4, 7.1.4, 7.22.2.1, 7.22.4.6,
-   numeric, 7.8.2.3, 7.22.1                                          7.23.5.8, 7.23.6.2, 7.26.3, 7.27.1, 7.28.6.3,
-      wide string, 7.8.2.4, 7.28.4.1                                 7.28.6.4
-   single byte/wide character, 7.28.6.1                         data stream, see streams
-   time, 7.26.3, K.3.8.2                                        date and time header, 7.26, K.3.8
-      wide character, 7.28.5                                    Daylight Saving Time, 7.26.1
-conversion specifier, 7.21.6.1, 7.21.6.2, 7.28.2.1,              DBL_DECIMAL_DIG macro, 5.2.4.2.2
-      7.28.2.2                                                  DBL_DIG macro, 5.2.4.2.2
-conversion state, 7.22.7, 7.27.1, 7.27.1.1,                     DBL_EPSILON macro, 5.2.4.2.2
-      7.27.1.2, 7.27.1.3, 7.27.1.4, 7.28.6,                     DBL_HAS_SUBNORM macro, 5.2.4.2.2
-      7.28.6.2.1, 7.28.6.3, 7.28.6.3.2, 7.28.6.3.3,             DBL_MANT_DIG macro, 5.2.4.2.2
-      7.28.6.4, 7.28.6.4.1, 7.28.6.4.2, K.3.6.4,                DBL_MAX macro, 5.2.4.2.2
-      K.3.9.3.1, K.3.9.3.1.1, K.3.9.3.2, K.3.9.3.2.1,           DBL_MAX_10_EXP macro, 5.2.4.2.2
-      K.3.9.3.2.2                                               DBL_MAX_EXP macro, 5.2.4.2.2
-conversion state functions, 7.28.6.2                            DBL_MIN macro, 5.2.4.2.2
-copying functions                                               DBL_MIN_10_EXP macro, 5.2.4.2.2
-   string, 7.23.2, K.3.7.1                                      DBL_MIN_EXP macro, 5.2.4.2.2
-   wide string, 7.28.4.2, K.3.9.2.1                             DBL_TRUE_MIN macro, 5.2.4.2.2
-copysign functions, 7.3.9.5, 7.12.11.1, F.3,                    decimal constant, 6.4.4.1
-      F.10.8.1                                                  decimal digit, 5.2.1
-copysign type-generic macro, 7.24                               decimal-point character, 7.1.1, 7.11.2.1
-correctly rounded result, 3.9                                   DECIMAL_DIG macro, 5.2.4.2.2, 7.21.6.1,
-corresponding real type, 6.2.5                                       7.22.1.3, 7.28.2.1, 7.28.4.1.1, F.5
-cos functions, 7.12.4.5, F.10.1.5                               declaration specifiers, 6.7
-cos type-generic macro, 7.24, G.7                               declarations, 6.7
-cosh functions, 7.12.5.4, F.10.2.4                                function, 6.7.6.3
-cosh type-generic macro, 7.24, G.7                                pointer, 6.7.6.1
-cpow functions, 7.3.8.2, G.6.4.1                                  structure/union, 6.7.2.1
-   type-generic macro for, 7.24                                   typedef, 6.7.8
-cproj functions, 7.3.9.5, G.6                                   declarator, 6.7.6
-cproj type-generic macro, 7.24                                    abstract, 6.7.7
-creal functions, 7.3.9.6, G.6                                   declarator type derivation, 6.2.5, 6.7.6
-creal type-generic macro, 7.24, G.7                             decrement operators, see arithmetic operators,
-critical undefined behavior, L.2.3                                    increment and decrement
-csin functions, 7.3.5.5, G.6                                    default argument promotions, 6.5.2.2
-   type-generic macro for, 7.24                                 default initialization, 6.7.9
+  array parameter, 6.9.1                                       correctly rounded result, 3.9
+  arrays, 6.3.2.1                                              corresponding real type, 6.2.5
+  boolean, 6.3.1.2                                             cos functions, 7.12.4.5, F.10.1.5
+  boolean, characters, and integers, 6.3.1.1                   cos type-generic macro, 7.25, G.7
+  by assignment, 6.5.16.1                                      cosh functions, 7.12.5.4, F.10.2.4
+  by return statement, 6.8.6.4                                 cosh type-generic macro, 7.25, G.7
+  complex types, 6.3.1.6                                       cpow functions, 7.3.8.2, G.6.4.1
+  explicit, 6.3                                                   type-generic macro for, 7.25
+  function, 6.3.2.1                                            cproj functions, 7.3.9.5, G.6
+  function argument, 6.5.2.2, 6.9.1                            cproj type-generic macro, 7.25
+  function designators, 6.3.2.1                                creal functions, 7.3.9.6, G.6
+  function parameter, 6.9.1                                    creal type-generic macro, 7.25, G.7
+  imaginary, G.4.1                                             critical undefined behavior, L.2.3
+  imaginary and complex, G.4.3                                 csin functions, 7.3.5.5, G.6
+  implicit, 6.3                                                   type-generic macro for, 7.25
+  lvalues, 6.3.2.1                                             csinh functions, 7.3.6.5, G.6.2.5
+  pointer, 6.3.2.1, 6.3.2.3                                       type-generic macro for, 7.25
+  real and complex, 6.3.1.7                                    csqrt functions, 7.3.8.3, G.6.4.2
+  real and imaginary, G.4.2                                       type-generic macro for, 7.25
+  real floating and integer, 6.3.1.4, F.3, F.4                  ctan functions, 7.3.5.6, G.6
+  real floating types, 6.3.1.5, F.3                                type-generic macro for, 7.25
+  signed and unsigned integers, 6.3.1.3                        ctanh functions, 7.3.6.6, G.6.2.6
+  usual arithmetic, see usual arithmetic                          type-generic macro for, 7.25
+        conversions                                            ctgamma function, 7.31.1
+  void type, 6.3.2.2                                           ctime function, 7.27.3.2
+conversion functions                                           ctime_s function, K.3.8.2, K.3.8.2.2
+  multibyte/wide character, 7.22.7, K.3.6.4                    ctype.h header, 7.4, 7.31.2
+     extended, 7.29.6, K.3.9.3                                 current object, 6.7.9
+     restartable, 7.28.1, 7.29.6.3, K.3.9.3.1                  CX_LIMITED_RANGE pragma, 6.10.6, 7.3.4
+  multibyte/wide string, 7.22.8, K.3.6.5
+     restartable, 7.29.6.4, K.3.9.3.2                          data race, 5.1.2.4, 7.1.4, 7.22.2.1, 7.22.2.2, 7.22.3,
+  numeric, 7.8.2.3, 7.22.1                                          7.22.4.6, 7.24.5.8, 7.24.6.2, 7.27.3, 7.28.1,
+     wide string, 7.8.2.4, 7.29.4.1                                 7.29.6.3, 7.29.6.4, K.3.6.2.1
+  single byte/wide character, 7.29.6.1                         data stream, see streams
+  time, 7.27.3, K.3.8.2                                        date and time header, 7.26.1, 7.27, 7.31.14, K.3.8
+     wide character, 7.29.5                                    Daylight Saving Time, 7.27.1
+conversion specifier, 7.21.6.1, 7.21.6.2, 7.29.2.1,             DBL_DECIMAL_DIG macro, 5.2.4.2.2
+     7.29.2.2                                                  DBL_DIG macro, 5.2.4.2.2
+conversion state, 7.22.7, 7.28.1, 7.28.1.1,                    DBL_EPSILON macro, 5.2.4.2.2
+     7.28.1.2, 7.28.1.3, 7.28.1.4, 7.29.6,                     DBL_HAS_SUBNORM macro, 5.2.4.2.2
+     7.29.6.2.1, 7.29.6.3, 7.29.6.3.2, 7.29.6.3.3,             DBL_MANT_DIG macro, 5.2.4.2.2
+     7.29.6.4, 7.29.6.4.1, 7.29.6.4.2, K.3.6.4,                DBL_MAX macro, 5.2.4.2.2
+     K.3.9.3.1, K.3.9.3.1.1, K.3.9.3.2, K.3.9.3.2.1,           DBL_MAX_10_EXP macro, 5.2.4.2.2
+     K.3.9.3.2.2                                               DBL_MAX_EXP macro, 5.2.4.2.2
+conversion state functions, 7.29.6.2                           DBL_MIN macro, 5.2.4.2.2
+copying functions                                              DBL_MIN_10_EXP macro, 5.2.4.2.2
+  string, 7.24.2, K.3.7.1                                      DBL_MIN_EXP macro, 5.2.4.2.2
+  wide string, 7.29.4.2, K.3.9.2.1                             DBL_TRUE_MIN macro, 5.2.4.2.2
+copysign functions, 7.3.9.5, 7.12.11.1, F.3,                   decimal constant, 6.4.4.1
+     F.10.8.1                                                  decimal digit, 5.2.1
+copysign type-generic macro, 7.25                              decimal-point character, 7.1.1, 7.11.2.1
 
-[page 659] (Contents)
+[page 663] (Contents)
 
-default label, 6.8.1, 6.8.4.2                                  elif preprocessing directive, 6.10.1
-define preprocessing directive, 6.10.3                         ellipsis punctuator (...), 6.5.2.2, 6.7.6.3, 6.10.3
-defined operator, 6.10.1, 6.10.8                               else preprocessing directive, 6.10.1
-definition, 6.7                                                 else statement, 6.8.4.1
-   function, 6.9.1                                             empty statement, 6.8.3
-dependency-ordered before, 5.1.2.4                             encoding error, 7.21.3, 7.27.1.1, 7.27.1.2,
-derived declarator types, 6.2.5                                      7.27.1.3, 7.27.1.4, 7.28.3.1, 7.28.3.3,
-derived types, 6.2.5                                                 7.28.6.3.2, 7.28.6.3.3, 7.28.6.4.1, 7.28.6.4.2,
-designated initializer, 6.7.9                                        K.3.6.5.1, K.3.6.5.2, K.3.9.3.1.1, K.3.9.3.2.1,
-destringizing, 6.10.9                                                K.3.9.3.2.2
-device input/output, 5.1.2.3                                   end-of-file, 7.28.1
-diagnostic message, 3.10, 5.1.1.3                              end-of-file indicator, 7.21.1, 7.21.5.3, 7.21.7.1,
-diagnostics, 5.1.1.3                                                 7.21.7.5, 7.21.7.6, 7.21.7.10, 7.21.9.2,
-diagnostics header, 7.2                                              7.21.9.3, 7.21.10.1, 7.21.10.2, 7.28.3.1,
-difftime function, 7.26.2.2                                          7.28.3.10
-digit, 5.2.1, 7.4                                              end-of-file macro, see EOF macro
-digraphs, 6.4.6                                                end-of-line indicator, 5.2.1
-direct input/output functions, 7.21.8                          endif preprocessing directive, 6.10.1
-display device, 5.2.2                                          enum type, 6.2.5, 6.7.2, 6.7.2.2
-div function, 7.22.6.2                                         enumerated type, 6.2.5
-div_t type, 7.22                                               enumeration, 6.2.5, 6.7.2.2
-division assignment operator (/=), 6.5.16.2                    enumeration constant, 6.2.1, 6.4.4.3
-division operator (/), 6.2.6.2, 6.5.5, F.3, G.5.1              enumeration content, 6.7.2.3
-do statement, 6.8.5.2                                          enumeration members, 6.7.2.2
-documentation of implementation, 4                             enumeration specifiers, 6.7.2.2
-domain error, 7.12.1, 7.12.4.1, 7.12.4.2, 7.12.4.4,            enumeration tag, 6.2.3, 6.7.2.3
-      7.12.5.1, 7.12.5.3, 7.12.6.5, 7.12.6.7,                  enumerator, 6.7.2.2
-      7.12.6.8, 7.12.6.9, 7.12.6.10, 7.12.6.11,                environment, 5
-      7.12.7.4, 7.12.7.5, 7.12.8.4, 7.12.9.5,                  environment functions, 7.22.4, K.3.6.2
-      7.12.9.7, 7.12.10.1, 7.12.10.2, 7.12.10.3                environment list, 7.22.4.6, K.3.6.2.1
-dot operator (.), 6.5.2.3                                      environmental considerations, 5.2
-double _Complex type, 6.2.5                                    environmental limits, 5.2.4, 7.13.1.1, 7.21.2,
-double _Complex type conversion, 6.3.1.6,                            7.21.3, 7.21.4.4, 7.21.6.1, 7.22.2.1, 7.22.4.2,
-      6.3.1.7, 6.3.1.8                                               7.22.4.3, 7.28.2.1, K.3.5.1.2
-double _Imaginary type, G.2                                    EOF macro, 7.4, 7.21.1, 7.21.5.1, 7.21.5.2,
-double type, 6.2.5, 6.4.4.2, 6.7.2, 7.21.6.2,                        7.21.6.2, 7.21.6.7, 7.21.6.9, 7.21.6.11,
-      7.28.2.2, F.2                                                  7.21.6.14, 7.21.7.1, 7.21.7.3, 7.21.7.4,
-double type conversion, 6.3.1.4, 6.3.1.5, 6.3.1.7,                   7.21.7.5, 7.21.7.6, 7.21.7.8, 7.21.7.9,
-      6.3.1.8                                                        7.21.7.10, 7.28.1, 7.28.2.2, 7.28.2.4,
-double-precision arithmetic, 5.1.2.3                                 7.28.2.6, 7.28.2.8, 7.28.2.10, 7.28.2.12,
-double-quote escape sequence (\"), 6.4.4.4,                          7.28.3.4, 7.28.6.1.1, 7.28.6.1.2, K.3.5.3.7,
-      6.4.5, 6.10.9                                                  K.3.5.3.9, K.3.5.3.11, K.3.5.3.14, K.3.9.1.2,
-double_t type, 7.12, J.5.6                                           K.3.9.1.5, K.3.9.1.7, K.3.9.1.10, K.3.9.1.12,
-                                                                     K.3.9.1.14
-EDOM macro, 7.5, 7.12.1, see also domain error                 equal-sign punctuator (=), 6.7, 6.7.2.2, 6.7.9
-effective type, 6.5                                            equal-to operator, see equality operator
-EILSEQ macro, 7.5, 7.21.3, 7.27.1.1, 7.27.1.2,                 equality expressions, 6.5.9
-     7.27.1.3, 7.27.1.4, 7.28.3.1, 7.28.3.3,                   equality operator (==), 6.5.9
-     7.28.6.3.2, 7.28.6.3.3, 7.28.6.4.1, 7.28.6.4.2,           ERANGE macro, 7.5, 7.8.2.3, 7.8.2.4, 7.12.1,
-     see also encoding error                                         7.22.1.3, 7.22.1.4, 7.28.4.1.1, 7.28.4.1.2, see
-element type, 6.2.5                                                  also range error, pole error
+DECIMAL_DIG macro, 5.2.4.2.2, 7.21.6.1,                           7.29.2.2, F.2
+      7.22.1.3, 7.29.2.1, 7.29.4.1.1, F.5                     double type conversion, 6.3.1.4, 6.3.1.5, 6.3.1.7,
+declaration specifiers, 6.7                                        6.3.1.8
+declarations, 6.7                                             double-precision arithmetic, 5.1.2.3
+   function, 6.7.6.3                                          double-quote escape sequence (\"), 6.4.4.4,
+   pointer, 6.7.6.1                                               6.4.5, 6.10.9
+   structure/union, 6.7.2.1                                   double_t type, 7.12
+   typedef, 6.7.8
+declarator, 6.7.6                                             EDOM macro, 7.5, 7.12.1, see also domain error
+   abstract, 6.7.7                                            effective type, 6.5
+declarator type derivation, 6.2.5, 6.7.6                      EILSEQ macro, 7.5, 7.21.3, 7.28.1.1, 7.28.1.2,
+decrement operators, see arithmetic operators,                      7.28.1.3, 7.28.1.4, 7.29.3.1, 7.29.3.3,
+      increment and decrement                                       7.29.6.3.2, 7.29.6.3.3, 7.29.6.4.1, 7.29.6.4.2,
+default argument promotions, 6.5.2.2                                see also encoding error
+default initialization, 6.7.9                                 element type, 6.2.5
+default label, 6.8.1, 6.8.4.2                                 elif preprocessing directive, 6.10.1
+define preprocessing directive, 6.10.3                        ellipsis punctuator (...), 6.5.2.2, 6.7.6.3, 6.10.3
+defined operator, 6.10.1, 6.10.8                              else preprocessing directive, 6.10.1
+definition, 6.7                                                else statement, 6.8.4.1
+   function, 6.9.1                                            empty statement, 6.8.3
+dependency-ordered before, 5.1.2.4                            encoding error, 7.21.3, 7.21.6.1, 7.21.6.2,
+derived declarator types, 6.2.5                                     7.21.6.3, 7.21.6.5, 7.21.6.6, 7.21.6.8,
+derived types, 6.2.5                                                7.21.6.10, 7.21.6.12, 7.21.6.13, 7.28.1.1,
+designated initializer, 6.7.9                                       7.28.1.2, 7.28.1.3, 7.28.1.4, 7.29.1, 7.29.2.1,
+destringizing, 6.10.9                                               7.29.2.2, 7.29.2.3, 7.29.2.5, 7.29.2.7,
+device input/output, 5.1.2.3                                        7.29.2.9, 7.29.2.11, 7.29.3.1, 7.29.3.2,
+diagnostic message, 3.10, 5.1.1.3                                   7.29.3.3, 7.29.3.4, 7.29.6.3.2, 7.29.6.3.3,
+diagnostics, 5.1.1.3                                                7.29.6.4.1, 7.29.6.4.2, K.3.6.5.1, K.3.6.5.2,
+diagnostics header, 7.2                                             K.3.9.3.1.1, K.3.9.3.2.1, K.3.9.3.2.2
+difftime function, 7.27.2.2                                   end-of-file, 7.29.1
+digit, 5.2.1, 7.4                                             end-of-file indicator, 7.21.1, 7.21.5.3, 7.21.7.1,
+digraphs, 6.4.6                                                     7.21.7.5, 7.21.7.6, 7.21.7.10, 7.21.9.2,
+direct input/output functions, 7.21.8                               7.21.9.3, 7.21.10.1, 7.21.10.2, 7.29.3.1,
+display device, 5.2.2                                               7.29.3.10
+div function, 7.22.6.2                                        end-of-file macro, see EOF macro
+div_t type, 7.22                                              end-of-line indicator, 5.2.1
+division assignment operator (/=), 6.5.16.2                   endif preprocessing directive, 6.10.1
+division operator (/), 6.2.6.2, 6.5.5, F.3, G.5.1             enum type, 6.2.5, 6.7.2, 6.7.2.2
+do statement, 6.8.5.2                                         enumerated type, 6.2.5
+documentation of implementation, 4                            enumeration, 6.2.5, 6.7.2.2
+domain error, 7.12.1, 7.12.4.1, 7.12.4.2, 7.12.4.4,           enumeration constant, 6.2.1, 6.4.4.3
+      7.12.5.1, 7.12.5.3, 7.12.6.5, 7.12.6.7,                 enumeration content, 6.7.2.3
+      7.12.6.8, 7.12.6.9, 7.12.6.10, 7.12.6.11,               enumeration members, 6.7.2.2
+      7.12.7.4, 7.12.7.5, 7.12.8.4, 7.12.9.5,                 enumeration specifiers, 6.7.2.2
+      7.12.9.7, 7.12.10.1, 7.12.10.2, 7.12.10.3               enumeration tag, 6.2.3, 6.7.2.3
+dot operator (.), 6.5.2.3                                     enumerator, 6.7.2.2
+double _Complex type, 6.2.5                                   environment, 5
+double _Complex type conversion, 6.3.1.6,                     environment functions, 7.22.4, K.3.6.2
+      6.3.1.7, 6.3.1.8                                        environment list, 7.22.4.6, K.3.6.2.1
+double _Imaginary type, G.2                                   environmental considerations, 5.2
+double type, 6.2.5, 6.4.4.2, 6.7.2, 7.21.6.2,                 environmental limits, 5.2.4, 7.13.1.1, 7.21.2,
 
-[page 660] (Contents)
+[page 664] (Contents)
 
-erf functions, 7.12.8.1, F.10.5.1                               exp2 functions, 7.12.6.2, F.10.3.2
-erf type-generic macro, 7.24                                    exp2 type-generic macro, 7.24
-erfc functions, 7.12.8.2, F.10.5.2                              explicit conversion, 6.3
-erfc type-generic macro, 7.24                                   expm1 functions, 7.12.6.3, F.10.3.3
-errno macro, 7.1.3, 7.3.2, 7.5, 7.8.2.3, 7.8.2.4,               expm1 type-generic macro, 7.24
-      7.12.1, 7.14.1.1, 7.21.3, 7.21.9.3, 7.21.10.4,            exponent part, 6.4.4.2
-      7.22.1, 7.22.1.3, 7.22.1.4, 7.23.6.2, 7.27.1.1,           exponential functions
-      7.27.1.2, 7.27.1.3, 7.27.1.4, 7.28.3.1,                     complex, 7.3.7, G.6.3
-      7.28.3.3, 7.28.4.1.1, 7.28.4.1.2, 7.28.6.3.2,               real, 7.12.6, F.10.3
-      7.28.6.3.3, 7.28.6.4.1, 7.28.6.4.2, J.5.17,               expression, 6.5
-      K.3.1.3, K.3.7.4.2                                          assignment, 6.5.16
-errno.h header, 7.5, 7.30.3, K.3.2                                cast, 6.5.4
-errno_t type, K.3.2, K.3.5, K.3.6, K.3.6.1.1,                     constant, 6.6
-      K.3.7, K.3.8, K.3.9                                         evaluation, 5.1.2.3
-error                                                             full, 6.8
-   domain, see domain error                                       order of evaluation, see order of evaluation
-   encoding, see encoding error                                   parenthesized, 6.5.1
-   pole, see pole error                                           primary, 6.5.1
-   range, see range error                                         unary, 6.5.3
-error conditions, 7.12.1                                        expression statement, 6.8.3
-error functions, 7.12.8, F.10.5                                 extended alignment, 6.2.8
-error indicator, 7.21.1, 7.21.5.3, 7.21.7.1,                    extended character set, 3.7.2, 5.2.1, 5.2.1.2
-      7.21.7.3, 7.21.7.5, 7.21.7.6, 7.21.7.7,                   extended characters, 5.2.1
-      7.21.7.8, 7.21.9.2, 7.21.10.1, 7.21.10.3,                 extended integer types, 6.2.5, 6.3.1.1, 6.4.4.1,
-      7.28.3.1, 7.28.3.3                                             7.20
-error preprocessing directive, 4, 6.10.5                        extended multibyte/wide character conversion
-error-handling functions, 7.21.10, 7.23.6.2,                         utilities, 7.28.6, K.3.9.3
-      K.3.7.4.2, K.3.7.4.3                                      extensible wide character case mapping functions,
-escape character (\), 6.4.4.4                                        7.29.3.2
-escape sequences, 5.2.1, 5.2.2, 6.4.4.4, 6.11.4                 extensible wide character classification functions,
-evaluation format, 5.2.4.2.2, 6.4.4.2, 7.12                          7.29.2.2
-evaluation method, 5.2.4.2.2, 6.5, F.8.5                        extern storage-class specifier, 6.2.2, 6.7.1
-evaluation of expression, 5.1.2.3                               external definition, 6.9
-evaluation order, see order of evaluation                       external identifiers, underscore, 7.1.3
-exceptional condition, 6.5                                      external linkage, 6.2.2
-excess precision, 5.2.4.2.2, 6.3.1.8, 6.8.6.4                   external name, 6.4.2.1
-excess range, 5.2.4.2.2, 6.3.1.8, 6.8.6.4                       external object definitions, 6.9.2
-exclusive OR operators
-   bitwise (^), 6.2.6.2, 6.5.11                                 fabs functions, 7.12.7.2, F.3, F.10.4.2
-   bitwise assignment (^=), 6.5.16.2                            fabs type-generic macro, 7.24, G.7
-executable program, 5.1.1.1                                     false macro, 7.18
-execution character set, 5.2.1                                  fclose function, 7.21.5.1
-execution environment, 5, 5.1.2, see also                       fdim functions, 7.12.12.1, F.10.9.1
-      environmental limits                                      fdim type-generic macro, 7.24
-execution sequence, 5.1.2.3, 6.8                                FE_ALL_EXCEPT macro, 7.6
-exit function, 5.1.2.2.3, 7.21.3, 7.22, 7.22.4.4,               FE_DFL_ENV macro, 7.6
-      7.22.4.5, 7.22.4.7                                        FE_DIVBYZERO macro, 7.6, 7.12, F.3
-EXIT_FAILURE macro, 7.22, 7.22.4.4                              FE_DOWNWARD macro, 7.6, F.3
-EXIT_SUCCESS macro, 7.22, 7.22.4.4                              FE_INEXACT macro, 7.6, F.3
-exp functions, 7.12.6.1, F.10.3.1                               FE_INVALID macro, 7.6, 7.12, F.3
-exp type-generic macro, 7.24                                    FE_OVERFLOW macro, 7.6, 7.12, F.3
+      7.21.3, 7.21.4.4, 7.21.6.1, 7.22.2.1, 7.22.4.2,           evaluation format, 5.2.4.2.2, 6.4.4.2, 7.12
+      7.22.4.3, 7.29.2.1, K.3.5.1.2                             evaluation method, 5.2.4.2.2, 6.5, F.8.5
+EOF macro, 7.4, 7.21.1, 7.21.5.1, 7.21.5.2,                     evaluation of expression, 5.1.2.3
+      7.21.6.2, 7.21.6.7, 7.21.6.9, 7.21.6.11,                  evaluation order, see order of evaluation
+      7.21.6.14, 7.21.7.1, 7.21.7.3, 7.21.7.4,                  exceptional condition, 6.5
+      7.21.7.5, 7.21.7.6, 7.21.7.8, 7.21.7.9,                   excess precision, 5.2.4.2.2, 6.3.1.8, 6.8.6.4
+      7.21.7.10, 7.29.1, 7.29.2.2, 7.29.2.4,                    excess range, 5.2.4.2.2, 6.3.1.8, 6.8.6.4
+      7.29.2.6, 7.29.2.8, 7.29.2.10, 7.29.2.12,                 exclusive OR operators
+      7.29.3.4, 7.29.6.1.1, 7.29.6.1.2, K.3.5.3.7,                bitwise (^), 6.2.6.2, 6.5.11
+      K.3.5.3.9, K.3.5.3.11, K.3.5.3.14, K.3.9.1.2,               bitwise assignment (^=), 6.5.16.2
+      K.3.9.1.5, K.3.9.1.7, K.3.9.1.10, K.3.9.1.12,             executable program, 5.1.1.1
+      K.3.9.1.14                                                execution character set, 5.2.1
+epoch, 7.27.2.5                                                 execution environment, 5, 5.1.2, see also
+equal-sign punctuator (=), 6.7, 6.7.2.2, 6.7.9                       environmental limits
+equal-to operator, see equality operator                        execution sequence, 5.1.2.3, 6.8
+equality expressions, 6.5.9                                     exit function, 5.1.2.2.3, 7.21.3, 7.22, 7.22.4.4,
+equality operator (==), 6.5.9                                        7.22.4.5, 7.22.4.7, 7.26.5.5
+ERANGE macro, 7.5, 7.8.2.3, 7.8.2.4, 7.12.1,                    EXIT_FAILURE macro, 7.22, 7.22.4.4
+      7.22.1.3, 7.22.1.4, 7.29.4.1.1, 7.29.4.1.2, see           EXIT_SUCCESS macro, 7.22, 7.22.4.4, 7.26.5.5
+      also range error, pole error                              exp functions, 7.12.6.1, F.10.3.1
+erf functions, 7.12.8.1, F.10.5.1                               exp type-generic macro, 7.25
+erf type-generic macro, 7.25                                    exp2 functions, 7.12.6.2, F.10.3.2
+erfc functions, 7.12.8.2, F.10.5.2                              exp2 type-generic macro, 7.25
+erfc type-generic macro, 7.25                                   explicit conversion, 6.3
+errno macro, 7.1.3, 7.3.2, 7.5, 7.8.2.3, 7.8.2.4,               expm1 functions, 7.12.6.3, F.10.3.3
+      7.12.1, 7.14.1.1, 7.21.3, 7.21.9.3, 7.21.10.4,            expm1 type-generic macro, 7.25
+      7.22.1, 7.22.1.3, 7.22.1.4, 7.24.6.2, 7.28.1.1,           exponent part, 6.4.4.2
+      7.28.1.2, 7.28.1.3, 7.28.1.4, 7.29.3.1,                   exponential functions
+      7.29.3.3, 7.29.4.1.1, 7.29.4.1.2, 7.29.6.3.2,               complex, 7.3.7, G.6.3
+      7.29.6.3.3, 7.29.6.4.1, 7.29.6.4.2, J.5.17,                 real, 7.12.6, F.10.3
+      K.3.1.3, K.3.7.4.2                                        expression, 6.5
+errno.h header, 7.5, 7.31.3, K.3.2                                assignment, 6.5.16
+errno_t type, K.3.2, K.3.5, K.3.6, K.3.6.1.1,                     cast, 6.5.4
+      K.3.7, K.3.8, K.3.9                                         constant, 6.6
+error                                                             evaluation, 5.1.2.3
+   domain, see domain error                                       full, 6.8
+   encoding, see encoding error                                   order of evaluation, see order of evaluation
+   pole, see pole error                                           parenthesized, 6.5.1
+   range, see range error                                         primary, 6.5.1
+error conditions, 7.12.1                                          unary, 6.5.3
+error functions, 7.12.8, F.10.5                                 expression statement, 6.8.3
+error indicator, 7.21.1, 7.21.5.3, 7.21.7.1,                    extended alignment, 6.2.8
+      7.21.7.3, 7.21.7.5, 7.21.7.6, 7.21.7.7,                   extended character set, 3.7.2, 5.2.1, 5.2.1.2
+      7.21.7.8, 7.21.9.2, 7.21.10.1, 7.21.10.3,                 extended characters, 5.2.1
+      7.29.3.1, 7.29.3.3                                        extended integer types, 6.2.5, 6.3.1.1, 6.4.4.1,
+error preprocessing directive, 4, 6.10.5                             7.20
+error-handling functions, 7.21.10, 7.24.6.2,                    extended multibyte and wide character utilities
+      K.3.7.4.2, K.3.7.4.3                                           header, 7.29, 7.31.16
+errors header, 7.5, 7.31.3                                      extended multibyte/wide character conversion
+escape character (\), 6.4.4.4                                        utilities, 7.29.6, K.3.9.3
+escape sequences, 5.2.1, 5.2.2, 6.4.4.4, 6.11.4                 extensible wide character case mapping functions,
 
-[page 661] (Contents)
+[page 665] (Contents)
 
-FE_TONEAREST macro, 7.6, F.3                                 float _Complex type conversion, 6.3.1.6,
-FE_TOWARDZERO macro, 7.6, F.3                                     6.3.1.7, 6.3.1.8
-FE_UNDERFLOW macro, 7.6, F.3                                 float _Imaginary type, G.2
-FE_UPWARD macro, 7.6, F.3                                    float type, 6.2.5, 6.4.4.2, 6.7.2, F.2
-feclearexcept function, 7.6.2, 7.6.2.1, F.3                  float type conversion, 6.3.1.4, 6.3.1.5, 6.3.1.7,
-fegetenv function, 7.6.4.1, 7.6.4.3, 7.6.4.4, F.3                 6.3.1.8
-fegetexceptflag function, 7.6.2, 7.6.2.2, F.3                float.h header, 4, 5.2.4.2.2, 7.7, 7.22.1.3,
-fegetround function, 7.6, 7.6.3.1, F.3                            7.28.4.1.1
-feholdexcept function, 7.6.4.2, 7.6.4.3,                     float_t type, 7.12, J.5.6
-     7.6.4.4, F.3                                            floating constant, 6.4.4.2
-fence, 5.1.2.4                                               floating suffix, f or F, 6.4.4.2
-fences, 7.17.4                                               floating type conversion, 6.3.1.4, 6.3.1.5, 6.3.1.7,
-fenv.h header, 5.1.2.3, 5.2.4.2.2, 7.6, 7.12, F, H                F.3, F.4
+     7.30.3.2                                                     7.21.7.5, 7.21.8.1
+extensible wide character classification functions,           fgetpos function, 7.21.2, 7.21.9.1, 7.21.9.3
+     7.30.2.2                                                fgets function, 7.21.1, 7.21.7.2, K.3.5.4.1
+extern storage-class specifier, 6.2.2, 6.7.1                  fgetwc function, 7.21.1, 7.21.3, 7.29.3.1,
+external definition, 6.9                                           7.29.3.6
+external identifiers, underscore, 7.1.3                       fgetws function, 7.21.1, 7.29.3.2
+external linkage, 6.2.2                                      field width, 7.21.6.1, 7.29.2.1
+external name, 6.4.2.1                                       file, 7.21.3
+external object definitions, 6.9.2                              access functions, 7.21.5, K.3.5.2
+                                                               name, 7.21.3
+fabs functions, 7.12.7.2, F.3, F.10.4.2                        operations, 7.21.4, K.3.5.1
+fabs type-generic macro, 7.25, G.7                             position indicator, 7.21.1, 7.21.2, 7.21.3,
+false macro, 7.18                                                    7.21.5.3, 7.21.7.1, 7.21.7.3, 7.21.7.10,
+fclose function, 7.21.5.1                                            7.21.8.1, 7.21.8.2, 7.21.9.1, 7.21.9.2,
+fdim functions, 7.12.12.1, F.10.9.1                                  7.21.9.3, 7.21.9.4, 7.21.9.5, 7.29.3.1,
+fdim type-generic macro, 7.25                                        7.29.3.3, 7.29.3.10
+FE_ALL_EXCEPT macro, 7.6                                       positioning functions, 7.21.9
+FE_DFL_ENV macro, 7.6                                        file scope, 6.2.1, 6.9
+FE_DIVBYZERO macro, 7.6, 7.12, F.3                           FILE type, 7.21.1, 7.21.3
+FE_DOWNWARD macro, 7.6, F.3                                  FILENAME_MAX macro, 7.21.1
+FE_INEXACT macro, 7.6, F.3                                   flags, 7.21.6.1, 7.29.2.1, see also floating-point
+FE_INVALID macro, 7.6, 7.12, F.3                                  status flag
+FE_OVERFLOW macro, 7.6, 7.12, F.3                            flexible array member, 6.7.2.1
+FE_TONEAREST macro, 7.6, F.3                                 float _Complex type, 6.2.5
+FE_TOWARDZERO macro, 7.6, F.3                                float _Complex type conversion, 6.3.1.6,
+FE_UNDERFLOW macro, 7.6, F.3                                      6.3.1.7, 6.3.1.8
+FE_UPWARD macro, 7.6, F.3                                    float _Imaginary type, G.2
+feclearexcept function, 7.6.2, 7.6.2.1, F.3                  float type, 6.2.5, 6.4.4.2, 6.7.2, F.2
+fegetenv function, 7.6.4.1, 7.6.4.3, 7.6.4.4, F.3            float type conversion, 6.3.1.4, 6.3.1.5, 6.3.1.7,
+fegetexceptflag function, 7.6.2, 7.6.2.2, F.3                     6.3.1.8
+fegetround function, 7.6, 7.6.3.1, F.3                       float.h header, 4, 5.2.4.2.2, 7.7, 7.22.1.3,
+feholdexcept function, 7.6.4.2, 7.6.4.3,                          7.29.4.1.1
+     7.6.4.4, F.3                                            float_t type, 7.12
+fence, 5.1.2.4                                               floating constant, 6.4.4.2
+fences, 7.17.4                                               floating suffix, f or F, 6.4.4.2
+fenv.h header, 5.1.2.3, 5.2.4.2.2, 7.6, 7.12,                floating type conversion, 6.3.1.4, 6.3.1.5, 6.3.1.7,
+     7.31.4, F, H                                                 F.3, F.4
 FENV_ACCESS pragma, 6.10.6, 7.6.1, F.8, F.9,                 floating types, 6.2.5, 6.11.1
      F.10                                                    floating-point accuracy, 5.2.4.2.2, 6.4.4.2, 6.5,
 fenv_t type, 7.6                                                  7.22.1.3, F.5, see also contracted expression
@@ -25423,54 +25680,57 @@ feof function, 7.21.10.2
 feraiseexcept function, 7.6.2, 7.6.2.3, F.3                  floating-point classification functions, 7.12.3
 ferror function, 7.21.10.3                                   floating-point control mode, 7.6, F.8.6
 fesetenv function, 7.6.4.3, F.3                              floating-point environment, 7.6, F.8, F.8.6
-fesetexceptflag function, 7.6.2, 7.6.2.4, F.3                floating-point exception, 7.6, 7.6.2, F.10
-fesetround function, 7.6, 7.6.3.2, F.3                       floating-point number, 5.2.4.2.2, 6.2.5
-fetestexcept function, 7.6.2, 7.6.2.5, F.3                   floating-point rounding mode, 5.2.4.2.2
-feupdateenv function, 7.6.4.2, 7.6.4.4, F.3                  floating-point status flag, 7.6, F.8.6
-fexcept_t type, 7.6, F.3                                     floor functions, 7.12.9.2, F.10.6.2
-fflush function, 7.21.5.2, 7.21.5.3                          floor type-generic macro, 7.24
-fgetc function, 7.21.1, 7.21.3, 7.21.7.1,                    FLT_DECIMAL_DIG macro, 5.2.4.2.2
-     7.21.7.5, 7.21.8.1                                      FLT_DIG macro, 5.2.4.2.2
-fgetpos function, 7.21.2, 7.21.9.1, 7.21.9.3                 FLT_EPSILON macro, 5.2.4.2.2
-fgets function, 7.21.1, 7.21.7.2, K.3.5.4.1                  FLT_EVAL_METHOD macro, 5.2.4.2.2, 6.6, 7.12,
-fgetwc function, 7.21.1, 7.21.3, 7.28.3.1,                        F.10.11
-     7.28.3.6                                                FLT_HAS_SUBNORM macro, 5.2.4.2.2
-fgetws function, 7.21.1, 7.28.3.2                            FLT_MANT_DIG macro, 5.2.4.2.2
-field width, 7.21.6.1, 7.28.2.1                               FLT_MAX macro, 5.2.4.2.2
-file, 7.21.3                                                  FLT_MAX_10_EXP macro, 5.2.4.2.2
-  access functions, 7.21.5, K.3.5.2                          FLT_MAX_EXP macro, 5.2.4.2.2
-  name, 7.21.3                                               FLT_MIN macro, 5.2.4.2.2
-  operations, 7.21.4, K.3.5.1                                FLT_MIN_10_EXP macro, 5.2.4.2.2
-  position indicator, 7.21.1, 7.21.2, 7.21.3,                FLT_MIN_EXP macro, 5.2.4.2.2
-        7.21.5.3, 7.21.7.1, 7.21.7.3, 7.21.7.10,             FLT_RADIX macro, 5.2.4.2.2, 7.21.6.1, 7.22.1.3,
-        7.21.8.1, 7.21.8.2, 7.21.9.1, 7.21.9.2,                   7.28.2.1, 7.28.4.1.1
-        7.21.9.3, 7.21.9.4, 7.21.9.5, 7.28.3.1,              FLT_ROUNDS macro, 5.2.4.2.2, 7.6, F.3
-        7.28.3.3, 7.28.3.10                                  FLT_TRUE_MIN macro, 5.2.4.2.2
-  positioning functions, 7.21.9                              fma functions, 7.12, 7.12.13.1, F.10.10.1
-file scope, 6.2.1, 6.9                                        fma type-generic macro, 7.24
-FILE type, 7.21.1, 7.21.3                                    fmax functions, 7.12.12.2, F.10.9.2
-FILENAME_MAX macro, 7.21.1                                   fmax type-generic macro, 7.24
-flags, 7.21.6.1, 7.28.2.1, see also floating-point             fmin functions, 7.12.12.3, F.10.9.3
-     status flag                                              fmin type-generic macro, 7.24
-flexible array member, 6.7.2.1                                fmod functions, 7.12.10.1, F.10.7.1
-float _Complex type, 6.2.5                                   fmod type-generic macro, 7.24
+fesetexceptflag function, 7.6.2, 7.6.2.4, F.3                floating-point environment header, 7.6, 7.31.4
+fesetround function, 7.6, 7.6.3.2, F.3                       floating-point exception, 7.6, 7.6.2, F.10
+fetestexcept function, 7.6.2, 7.6.2.5, F.3                   floating-point number, 5.2.4.2.2, 6.2.5
+feupdateenv function, 7.6.4.2, 7.6.4.4, F.3                  floating-point rounding mode, 5.2.4.2.2
+fexcept_t type, 7.6, F.3                                     floating-point status flag, 7.6, F.8.6
+fflush function, 7.21.5.2, 7.21.5.3                          floor functions, 7.12.9.2, F.10.6.2
+fgetc function, 7.21.1, 7.21.3, 7.21.7.1,                    floor type-generic macro, 7.25
 
-[page 662] (Contents)
+[page 666] (Contents)
 
-fopen function, 7.21.5.3, 7.21.5.4, K.3.5.2.1                       K.3.5.3.7, K.3.5.3.9
-FOPEN_MAX macro, 7.21.1, 7.21.3, 7.21.4.3,                    fseek function, 7.21.1, 7.21.5.3, 7.21.7.10,
-     K.3.5.1.1                                                      7.21.9.2, 7.21.9.4, 7.21.9.5, 7.28.3.10
-fopen_s function, K.3.5.1.1, K.3.5.2.1,                       fsetpos function, 7.21.2, 7.21.5.3, 7.21.7.10,
-     K.3.5.2.2                                                      7.21.9.1, 7.21.9.3, 7.28.3.10
-for statement, 6.8.5, 6.8.5.3                                 ftell function, 7.21.9.2, 7.21.9.4
-form-feed character, 5.2.1, 6.4                               full declarator, 6.7.6
-form-feed escape sequence (\f), 5.2.2, 6.4.4.4,               full expression, 6.8
-     7.4.1.10                                                 fully buffered stream, 7.21.3
-formal argument (deprecated), 3.16                            function
-formal parameter, 3.16                                           argument, 6.5.2.2, 6.9.1
+FLT_DECIMAL_DIG macro, 5.2.4.2.2                              FP_NAN macro, 7.12, F.3
+FLT_DIG macro, 5.2.4.2.2                                      FP_NORMAL macro, 7.12, F.3
+FLT_EPSILON macro, 5.2.4.2.2                                  FP_SUBNORMAL macro, 7.12, F.3
+FLT_EVAL_METHOD macro, 5.2.4.2.2, 6.6, 7.12,                  FP_ZERO macro, 7.12, F.3
+     F.10.11                                                  fpclassify macro, 7.12.3.1, F.3
+FLT_HAS_SUBNORM macro, 5.2.4.2.2                              fpos_t type, 7.21.1, 7.21.2
+FLT_MANT_DIG macro, 5.2.4.2.2                                 fprintf function, 7.8.1, 7.21.1, 7.21.6.1,
+FLT_MAX macro, 5.2.4.2.2                                            7.21.6.2, 7.21.6.3, 7.21.6.5, 7.21.6.6,
+FLT_MAX_10_EXP macro, 5.2.4.2.2                                     7.21.6.8, 7.29.2.2, F.3, K.3.5.3.1
+FLT_MAX_EXP macro, 5.2.4.2.2                                  fprintf_s function, K.3.5.3.1
+FLT_MIN macro, 5.2.4.2.2                                      fputc function, 5.2.2, 7.21.1, 7.21.3, 7.21.7.3,
+FLT_MIN_10_EXP macro, 5.2.4.2.2                                     7.21.7.7, 7.21.8.2
+FLT_MIN_EXP macro, 5.2.4.2.2                                  fputs function, 7.21.1, 7.21.7.4
+FLT_RADIX macro, 5.2.4.2.2, 7.21.6.1, 7.22.1.3,               fputwc function, 7.21.1, 7.21.3, 7.29.3.3,
+     7.29.2.1, 7.29.4.1.1                                           7.29.3.8
+FLT_ROUNDS macro, 5.2.4.2.2, 7.6, F.3                         fputws function, 7.21.1, 7.29.3.4
+FLT_TRUE_MIN macro, 5.2.4.2.2                                 fread function, 7.21.1, 7.21.8.1
+fma functions, 7.12, 7.12.13.1, F.10.10.1                     free function, 7.22.3.3, 7.22.3.5
+fma type-generic macro, 7.25                                  freestanding execution environment, 4, 5.1.2,
+fmax functions, 7.12.12.2, F.10.9.2                                 5.1.2.1
+fmax type-generic macro, 7.25                                 freopen function, 7.21.2, 7.21.5.4
+fmin functions, 7.12.12.3, F.10.9.3                           freopen_s function, K.3.5.2.2
+fmin type-generic macro, 7.25                                 frexp functions, 7.12.6.4, F.10.3.4
+fmod functions, 7.12.10.1, F.10.7.1                           frexp type-generic macro, 7.25
+fmod type-generic macro, 7.25                                 fscanf function, 7.8.1, 7.21.1, 7.21.6.2,
+fopen function, 7.21.5.3, 7.21.5.4, K.3.5.2.1                       7.21.6.4, 7.21.6.7, 7.21.6.9, F.3, K.3.5.3.2
+FOPEN_MAX macro, 7.21.1, 7.21.3, 7.21.4.3,                    fscanf_s function, K.3.5.3.2, K.3.5.3.4,
+     K.3.5.1.1                                                      K.3.5.3.7, K.3.5.3.9
+fopen_s function, K.3.5.1.1, K.3.5.2.1,                       fseek function, 7.21.1, 7.21.5.3, 7.21.7.10,
+     K.3.5.2.2                                                      7.21.9.2, 7.21.9.4, 7.21.9.5, 7.29.3.10
+for statement, 6.8.5, 6.8.5.3                                 fsetpos function, 7.21.2, 7.21.5.3, 7.21.7.10,
+form-feed character, 5.2.1, 6.4                                     7.21.9.1, 7.21.9.3, 7.29.3.10
+form-feed escape sequence (\f), 5.2.2, 6.4.4.4,               ftell function, 7.21.9.2, 7.21.9.4
+     7.4.1.10                                                 full declarator, 6.7.6
+formal argument (deprecated), 3.16                            full expression, 6.8
+formal parameter, 3.16                                        fully buffered stream, 7.21.3
+format conversion of integer types header, 7.8,               function
+     7.31.5                                                      argument, 6.5.2.2, 6.9.1
 formatted input/output functions, 7.11.1.1, 7.21.6,              body, 6.9.1
      K.3.5.3                                                     call, 6.5.2.2
-   wide character, 7.28.2, K.3.9.1                                  library, 7.1.4
+   wide character, 7.29.2, K.3.9.1                                  library, 7.1.4
 fortran keyword, J.5.9                                           declarator, 6.7.6.3, 6.11.6
 forward reference, 3.11                                          definition, 6.7.6.3, 6.9.1, 6.11.7
 FP_CONTRACT pragma, 6.5, 6.10.6, 7.12.2, see                     designator, 6.3.2.1
@@ -25481,424 +25741,430 @@ FP_FAST_FMAL macro, 7.12
 FP_ILOGB0 macro, 7.12, 7.12.6.5                                  no-return, 6.7.4
 FP_ILOGBNAN macro, 7.12, 7.12.6.5                                parameter, 5.1.2.2.1, 6.5.2.2, 6.7, 6.9.1
 FP_INFINITE macro, 7.12, F.3                                     prototype, 5.1.2.2.1, 6.2.1, 6.2.7, 6.5.2.2, 6.7,
-FP_NAN macro, 7.12, F.3                                                6.7.6.3, 6.9.1, 6.11.6, 6.11.7, 7.1.2, 7.12
-FP_NORMAL macro, 7.12, F.3                                       prototype scope, 6.2.1, 6.7.6.2
-FP_SUBNORMAL macro, 7.12, F.3                                    recursive call, 6.5.2.2
-FP_ZERO macro, 7.12, F.3                                         return, 6.8.6.4, F.6
-fpclassify macro, 7.12.3.1, F.3                                  scope, 6.2.1
-fpos_t type, 7.21.1, 7.21.2                                      type, 6.2.5
-fprintf function, 7.8.1, 7.21.1, 7.21.6.1,                       type conversion, 6.3.2.1
-     7.21.6.2, 7.21.6.3, 7.21.6.5, 7.21.6.6,                  function specifiers, 6.7.4
-     7.21.6.8, 7.28.2.2, F.3, K.3.5.3.1                       function type, 6.2.5
-fprintf_s function, K.3.5.3.1                                 function-call operator (( )), 6.5.2.2
-fputc function, 5.2.2, 7.21.1, 7.21.3, 7.21.7.3,              function-like macro, 6.10.3
-     7.21.7.7, 7.21.8.2                                       fundamental alignment, 6.2.8
-fputs function, 7.21.1, 7.21.7.4                              future directions
-fputwc function, 7.21.1, 7.21.3, 7.28.3.3,                       language, 6.11
-     7.28.3.8                                                    library, 7.30
-fputws function, 7.21.1, 7.28.3.4                             fwide function, 7.21.2, 7.28.3.5
-fread function, 7.21.1, 7.21.8.1                              fwprintf function, 7.8.1, 7.21.1, 7.21.6.2,
-free function, 7.22.3.3, 7.22.3.5                                   7.28.2.1, 7.28.2.2, 7.28.2.3, 7.28.2.5,
-freestanding execution environment, 4, 5.1.2,                       7.28.2.11, K.3.9.1.1
-     5.1.2.1                                                  fwprintf_s function, K.3.9.1.1
-freopen function, 7.21.2, 7.21.5.4                            fwrite function, 7.21.1, 7.21.8.2
-freopen_s function, K.3.5.2.2                                 fwscanf function, 7.8.1, 7.21.1, 7.28.2.2,
-frexp functions, 7.12.6.4, F.10.3.4                                 7.28.2.4, 7.28.2.6, 7.28.2.12, 7.28.3.10,
-frexp type-generic macro, 7.24                                      K.3.9.1.2
-fscanf function, 7.8.1, 7.21.1, 7.21.6.2,                     fwscanf_s function, K.3.9.1.2, K.3.9.1.5,
-     7.21.6.4, 7.21.6.7, 7.21.6.9, F.3, K.3.5.3.2                   K.3.9.1.7, K.3.9.1.14
-fscanf_s function, K.3.5.3.2, K.3.5.3.4,
 
-[page 663] (Contents)
+[page 667] (Contents)
 
-gamma functions, 7.12.8, F.10.5                               name spaces, 6.2.3
-general utilities, 7.22, K.3.6                                reserved, 6.4.1, 7.1.3, K.3.1.2
-  wide string, 7.28.4, K.3.9.2                                 scope, 6.2.1
-general wide string utilities, 7.28.4, K.3.9.2                 type, 6.2.5
-generic parameters, 7.24                                    identifier list, 6.7.6
-generic selection, 6.5.1.1                                  identifier nondigit, 6.4.2.1
-getc function, 7.21.1, 7.21.7.5, 7.21.7.6                   IEC 559, F.1
-getchar function, 7.21.1, 7.21.7.6                          IEC 60559, 2, 5.1.2.3, 5.2.4.2.2, 6.10.8.3, 7.3.3,
-getenv function, 7.22.4.6                                         7.6, 7.6.4.2, 7.12.1, 7.12.10.2, 7.12.14, F, G,
-getenv_s function, K.3.6.2.1                                      H.1
-gets function, K.3.5.4.1                                    IEEE 754, F.1
-gets_s function, K.3.5.4.1                                  IEEE 854, F.1
-getwc function, 7.21.1, 7.28.3.6, 7.28.3.7                  IEEE floating-point arithmetic standard, see
-getwchar function, 7.21.1, 7.28.3.7                               IEC 60559, ANSI/IEEE 754,
-gmtime function, 7.26.3.3                                         ANSI/IEEE 854
-gmtime_s function, K.3.8.2.3                                if preprocessing directive, 5.2.4.2.1, 5.2.4.2.2,
-goto statement, 6.2.1, 6.8.1, 6.8.6.1                             6.10.1, 7.1.4
-graphic characters, 5.2.1                                   if statement, 6.8.4.1
-greater-than operator (>), 6.5.8                            ifdef preprocessing directive, 6.10.1
-greater-than-or-equal-to operator (>=), 6.5.8               ifndef preprocessing directive, 6.10.1
-                                                            ignore_handler_s function, K.3.6.1.3
-happens before, 5.1.2.4                                     ilogb functions, 7.12, 7.12.6.5, F.10.3.5
-header, 5.1.1.1, 7.1.2, see also standard headers           ilogb type-generic macro, 7.24
-header names, 6.4, 6.4.7, 6.10.2                            imaginary macro, 7.3.1, G.6
-hexadecimal constant, 6.4.4.1                               imaginary numbers, G
-hexadecimal digit, 6.4.4.1, 6.4.4.2, 6.4.4.4                imaginary type domain, G.2
-hexadecimal prefix, 6.4.4.1                                  imaginary types, G
-hexadecimal-character escape sequence                       imaxabs function, 7.8.2.1
-     (\x hexadecimal digits), 6.4.4.4                       imaxdiv function, 7.8, 7.8.2.2
-high-order bit, 3.6                                         imaxdiv_t type, 7.8
-horizontal-tab character, 5.2.1, 6.4                        implementation, 3.12
-horizontal-tab escape sequence (\r), 7.29.2.1.3             implementation limit, 3.13, 4, 5.2.4.2, 6.4.2.1,
-horizontal-tab escape sequence (\t), 5.2.2,                       6.7.6, 6.8.4.2, E, see also environmental
-     6.4.4.4, 7.4.1.3, 7.4.1.10                                   limits
-hosted execution environment, 4, 5.1.2, 5.1.2.2             implementation-defined behavior, 3.4.1, 4, J.3
-HUGE_VAL macro, 7.12, 7.12.1, 7.22.1.3,                     implementation-defined value, 3.19.1
-     7.28.4.1.1, F.10                                       implicit conversion, 6.3
-HUGE_VALF macro, 7.12, 7.12.1, 7.22.1.3,                    implicit initialization, 6.7.9
-     7.28.4.1.1, F.10                                       include preprocessing directive, 5.1.1.2, 6.10.2
-HUGE_VALL macro, 7.12, 7.12.1, 7.22.1.3,                    inclusive OR operators
-     7.28.4.1.1, F.10                                         bitwise (|), 6.2.6.2, 6.5.12
-hyperbolic functions                                           bitwise assignment (|=), 6.5.16.2
-  complex, 7.3.6, G.6.2                                     incomplete type, 6.2.5
-  real, 7.12.5, F.10.2                                      increment operators, see arithmetic operators,
-hypot functions, 7.12.7.3, F.10.4.3                               increment and decrement
-hypot type-generic macro, 7.24                              indeterminate value, 3.19.2
-                                                            indeterminately sequenced, 5.1.2.3, 6.5.2.2,
-I macro, 7.3.1, 7.3.9.5, G.6                                      6.5.2.4, 6.5.16.2, see also sequenced before,
-identifier, 6.4.2.1, 6.5.1                                         unsequenced
-   linkage, see linkage                                     indirection operator (*), 6.5.2.1, 6.5.3.2
-   maximum length, 6.4.2.1                                  inequality operator (!=), 6.5.9
+         6.7.6.3, 6.9.1, 6.11.6, 6.11.7, 7.1.2, 7.12           header, 5.1.1.1, 7.1.2, see also standard headers
+   prototype scope, 6.2.1, 6.7.6.2                             header names, 6.4, 6.4.7, 6.10.2
+   recursive call, 6.5.2.2                                     hexadecimal constant, 6.4.4.1
+   return, 6.8.6.4, F.6                                        hexadecimal digit, 6.4.4.1, 6.4.4.2, 6.4.4.4
+   scope, 6.2.1                                                hexadecimal prefix, 6.4.4.1
+   type, 6.2.5                                                 hexadecimal-character escape sequence
+   type conversion, 6.3.2.1                                         (\x hexadecimal digits), 6.4.4.4
+function specifiers, 6.7.4                                      high-order bit, 3.6
+function type, 6.2.5                                           horizontal-tab character, 5.2.1, 6.4
+function-call operator (( )), 6.5.2.2                          horizontal-tab escape sequence (\r), 7.30.2.1.3
+function-like macro, 6.10.3                                    horizontal-tab escape sequence (\t), 5.2.2,
+fundamental alignment, 6.2.8                                        6.4.4.4, 7.4.1.3, 7.4.1.10
+future directions                                              hosted execution environment, 4, 5.1.2, 5.1.2.2
+   language, 6.11                                              HUGE_VAL macro, 7.12, 7.12.1, 7.22.1.3,
+   library, 7.31                                                    7.29.4.1.1, F.10
+fwide function, 7.21.2, 7.29.3.5                               HUGE_VALF macro, 7.12, 7.12.1, 7.22.1.3,
+fwprintf function, 7.8.1, 7.21.1, 7.21.6.2,                         7.29.4.1.1, F.10
+      7.29.2.1, 7.29.2.2, 7.29.2.3, 7.29.2.5,                  HUGE_VALL macro, 7.12, 7.12.1, 7.22.1.3,
+      7.29.2.11, K.3.9.1.1                                          7.29.4.1.1, F.10
+fwprintf_s function, K.3.9.1.1                                 hyperbolic functions
+fwrite function, 7.21.1, 7.21.8.2                                complex, 7.3.6, G.6.2
+fwscanf function, 7.8.1, 7.21.1, 7.29.2.2,                       real, 7.12.5, F.10.2
+      7.29.2.4, 7.29.2.6, 7.29.2.12, 7.29.3.10,                hypot functions, 7.12.7.3, F.10.4.3
+      K.3.9.1.2                                                hypot type-generic macro, 7.25
+fwscanf_s function, K.3.9.1.2, K.3.9.1.5,
+      K.3.9.1.7, K.3.9.1.14                                    I macro, 7.3.1, 7.3.9.5, G.6
+                                                               identifier, 6.4.2.1, 6.5.1
+gamma functions, 7.12.8, F.10.5                                   linkage, see linkage
+general utilities, K.3.6                                          maximum length, 6.4.2.1
+  wide string, 7.29.4, K.3.9.2                                    name spaces, 6.2.3
+general utilities header, 7.22, 7.31.12                           reserved, 6.4.1, 7.1.3, K.3.1.2
+general wide string utilities, 7.29.4, K.3.9.2                    scope, 6.2.1
+generic association, 6.5.1.1                                      type, 6.2.5
+generic parameters, 7.25                                       identifier list, 6.7.6
+generic selection, 6.5.1, 6.5.1.1                              identifier nondigit, 6.4.2.1
+getc function, 7.21.1, 7.21.7.5, 7.21.7.6                      IEC 559, F.1
+getchar function, 7.21.1, 7.21.7.6                             IEC 60559, 2, 5.1.2.3, 5.2.4.2.2, 6.10.8.3, 7.3.3,
+getenv function, 7.22.4.6                                            7.6, 7.6.4.2, 7.12.1, 7.12.10.2, 7.12.14, F, G,
+getenv_s function, K.3.6.2.1                                         H.1
+gets function, K.3.5.4.1                                       IEEE 754, F.1
+gets_s function, K.3.5.4.1                                     IEEE 854, F.1
+getwc function, 7.21.1, 7.29.3.6, 7.29.3.7                     IEEE floating-point arithmetic standard, see
+getwchar function, 7.21.1, 7.29.3.7                                  IEC 60559, ANSI/IEEE 754,
+gmtime function, 7.27.3.3                                            ANSI/IEEE 854
+gmtime_s function, K.3.8.2.3                                   if preprocessing directive, 5.2.4.2.1, 5.2.4.2.2,
+goto statement, 6.2.1, 6.8.1, 6.8.6.1                                6.10.1, 7.1.4
+graphic characters, 5.2.1                                      if statement, 6.8.4.1
+greater-than operator (>), 6.5.8                               ifdef preprocessing directive, 6.10.1
+greater-than-or-equal-to operator (>=), 6.5.8                  ifndef preprocessing directive, 6.10.1
+                                                               ignore_handler_s function, K.3.6.1.3
+happens before, 5.1.2.4                                        ilogb functions, 7.12, 7.12.6.5, F.10.3.5
 
-[page 664] (Contents)
+[page 668] (Contents)
 
-infinitary, 7.12.1                                                    extended, 6.2.5, 6.3.1.1, 6.4.4.1, 7.20
-INFINITY macro, 7.3.9.5, 7.12, F.2.1                              inter-thread happens before, 5.1.2.4
-initial position, 5.2.2                                           interactive device, 5.1.2.3, 7.21.3, 7.21.5.3
-initial shift state, 5.2.1.2                                      internal linkage, 6.2.2
-initialization, 5.1.2, 6.2.4, 6.3.2.1, 6.5.2.5, 6.7.9,            internal name, 6.4.2.1
-      F.8.5                                                       interrupt, 5.2.3
-   in blocks, 6.8                                                 INTMAX_C macro, 7.20.4.2
-initializer, 6.7.9                                                INTMAX_MAX macro, 7.8.2.3, 7.8.2.4, 7.20.2.5
-   permitted form, 6.6                                            INTMAX_MIN macro, 7.8.2.3, 7.8.2.4, 7.20.2.5
-   string literal, 6.3.2.1                                        intmax_t type, 7.20.1.5, 7.21.6.1, 7.21.6.2,
-inline, 6.7.4                                                           7.28.2.1, 7.28.2.2
-inner scope, 6.2.1                                                INTN_C macros, 7.20.4.1
-input failure, 7.28.2.6, 7.28.2.8, 7.28.2.10,                     INTN_MAX macros, 7.20.2.1
-      K.3.5.3.2, K.3.5.3.4, K.3.5.3.7, K.3.5.3.9,                 INTN_MIN macros, 7.20.2.1
-      K.3.5.3.11, K.3.5.3.14, K.3.9.1.2, K.3.9.1.5,               intN_t types, 7.20.1.1
-      K.3.9.1.7, K.3.9.1.10, K.3.9.1.12, K.3.9.1.14               INTPTR_MAX macro, 7.20.2.4
-input/output functions                                            INTPTR_MIN macro, 7.20.2.4
-   character, 7.21.7, K.3.5.4                                     intptr_t type, 7.20.1.4
-   direct, 7.21.8                                                 inttypes.h header, 7.8, 7.30.4
-   formatted, 7.21.6, K.3.5.3                                     isalnum function, 7.4.1.1, 7.4.1.9, 7.4.1.10
-      wide character, 7.28.2, K.3.9.1                             isalpha function, 7.4.1.1, 7.4.1.2
-   wide character, 7.28.3                                         isblank function, 7.4.1.3
-      formatted, 7.28.2, K.3.9.1                                  iscntrl function, 7.4.1.2, 7.4.1.4, 7.4.1.7,
-input/output header, 7.21, K.3.5                                        7.4.1.11
-input/output, device, 5.1.2.3                                     isdigit function, 7.4.1.1, 7.4.1.2, 7.4.1.5,
-int type, 6.2.5, 6.3.1.1, 6.3.1.3, 6.4.4.1, 6.7.2                       7.4.1.7, 7.4.1.11, 7.11.1.1
-int type conversion, 6.3.1.1, 6.3.1.3, 6.3.1.4,                   isfinite macro, 7.12.3.2, F.3
-      6.3.1.8                                                     isgraph function, 7.4.1.6
-INT_FASTN_MAX macros, 7.20.2.3                                    isgreater macro, 7.12.14.1, F.3
-INT_FASTN_MIN macros, 7.20.2.3                                    isgreaterequal macro, 7.12.14.2, F.3
-int_fastN_t types, 7.20.1.3                                       isinf macro, 7.12.3.3
-INT_LEASTN_MAX macros, 7.20.2.2                                   isless macro, 7.12.14.3, F.3
-INT_LEASTN_MIN macros, 7.20.2.2                                   islessequal macro, 7.12.14.4, F.3
-int_leastN_t types, 7.20.1.2                                      islessgreater macro, 7.12.14.5, F.3
-INT_MAX macro, 5.2.4.2.1, 7.12, 7.12.6.5                          islower function, 7.4.1.2, 7.4.1.7, 7.4.2.1,
-INT_MIN macro, 5.2.4.2.1, 7.12                                          7.4.2.2
-integer arithmetic functions, 7.8.2.1, 7.8.2.2,                   isnan macro, 7.12.3.4, F.3
-      7.22.6                                                      isnormal macro, 7.12.3.5
-integer character constant, 6.4.4.4                               ISO 31-11, 2, 3
-integer constant, 6.4.4.1                                         ISO 4217, 2, 7.11.2.1
-integer constant expression, 6.3.2.3, 6.6, 6.7.2.1,               ISO 8601, 2, 7.26.3.5
-      6.7.2.2, 6.7.6.2, 6.7.9, 6.7.10, 6.8.4.2, 6.10.1,           ISO/IEC 10646, 2, 6.4.2.1, 6.4.3, 6.10.8.2
-      7.1.4                                                       ISO/IEC 10976-1, H.1
-integer conversion rank, 6.3.1.1                                  ISO/IEC 2382-1, 2, 3
-integer promotions, 5.1.2.3, 5.2.4.2.1, 6.3.1.1,                  ISO/IEC 646, 2, 5.2.1.1
-      6.5.2.2, 6.5.3.3, 6.5.7, 6.8.4.2, 7.20.2, 7.20.3,           ISO/IEC 9945-2, 7.11
-      7.21.6.1, 7.28.2.1                                          iso646.h header, 4, 7.9                          *
-integer suffix, 6.4.4.1                                            isprint function, 5.2.2, 7.4.1.8
-integer type conversion, 6.3.1.1, 6.3.1.3, 6.3.1.4,               ispunct function, 7.4.1.2, 7.4.1.7, 7.4.1.9,
-      F.3, F.4                                                          7.4.1.11
-integer types, 6.2.5, 7.20                                        isspace function, 7.4.1.2, 7.4.1.7, 7.4.1.9,
+ilogb type-generic macro, 7.25                                         formatted, 7.29.2, K.3.9.1
+imaginary macro, 7.3.1, G.6                                      input/output header, 7.21, 7.31.11, K.3.5
+imaginary numbers, G                                             input/output, device, 5.1.2.3
+imaginary type domain, G.2                                       int type, 6.2.5, 6.3.1.1, 6.3.1.3, 6.4.4.1, 6.7.2
+imaginary types, G                                               int type conversion, 6.3.1.1, 6.3.1.3, 6.3.1.4,
+imaxabs function, 7.8.2.1                                              6.3.1.8
+imaxdiv function, 7.8, 7.8.2.2                                   INT_FASTN_MAX macros, 7.20.2.3
+imaxdiv_t type, 7.8                                              INT_FASTN_MIN macros, 7.20.2.3
+implementation, 3.12                                             int_fastN_t types, 7.20.1.3
+implementation limit, 3.13, 4, 5.2.4.2, 6.4.2.1,                 INT_LEASTN_MAX macros, 7.20.2.2
+      6.7.6, 6.8.4.2, E, see also environmental                  INT_LEASTN_MIN macros, 7.20.2.2
+      limits                                                     int_leastN_t types, 7.20.1.2
+implementation-defined behavior, 3.4.1, 4, J.3                    INT_MAX macro, 5.2.4.2.1, 7.12, 7.12.6.5
+implementation-defined value, 3.19.1                              INT_MIN macro, 5.2.4.2.1, 7.12
+implicit conversion, 6.3                                         integer arithmetic functions, 7.8.2.1, 7.8.2.2,
+implicit initialization, 6.7.9                                         7.22.6
+include preprocessing directive, 5.1.1.2, 6.10.2                 integer character constant, 6.4.4.4
+inclusive OR operators                                           integer constant, 6.4.4.1
+   bitwise (|), 6.2.6.2, 6.5.12                                  integer constant expression, 6.3.2.3, 6.6, 6.7.2.1,
+   bitwise assignment (|=), 6.5.16.2                                   6.7.2.2, 6.7.6.2, 6.7.9, 6.7.10, 6.8.4.2, 6.10.1,
+incomplete type, 6.2.5                                                 7.1.4
+increment operators, see arithmetic operators,                   integer conversion rank, 6.3.1.1
+      increment and decrement                                    integer promotions, 5.1.2.3, 5.2.4.2.1, 6.3.1.1,
+indeterminate value, 3.19.2                                            6.5.2.2, 6.5.3.3, 6.5.7, 6.8.4.2, 7.20.2, 7.20.3,
+indeterminately sequenced, 5.1.2.3, 6.5.2.2,                           7.21.6.1, 7.29.2.1
+      6.5.2.4, 6.5.16.2, see also sequenced before,              integer suffix, 6.4.4.1
+      unsequenced                                                integer type conversion, 6.3.1.1, 6.3.1.3, 6.3.1.4,
+indirection operator (*), 6.5.2.1, 6.5.3.2                             F.3, F.4
+inequality operator (!=), 6.5.9                                  integer types, 6.2.5, 7.20
+infinitary, 7.12.1                                                   extended, 6.2.5, 6.3.1.1, 6.4.4.1, 7.20
+INFINITY macro, 7.3.9.5, 7.12, F.2.1                             integer types header, 7.20, 7.31.10
+initial position, 5.2.2                                          inter-thread happens before, 5.1.2.4
+initial shift state, 5.2.1.2                                     interactive device, 5.1.2.3, 7.21.3, 7.21.5.3
+initialization, 5.1.2, 6.2.4, 6.3.2.1, 6.5.2.5, 6.7.9,           internal linkage, 6.2.2
+      F.8.5                                                      internal name, 6.4.2.1
+   in blocks, 6.8                                                interrupt, 5.2.3
+initializer, 6.7.9                                               INTMAX_C macro, 7.20.4.2
+   permitted form, 6.6                                           INTMAX_MAX macro, 7.8.2.3, 7.8.2.4, 7.20.2.5
+   string literal, 6.3.2.1                                       INTMAX_MIN macro, 7.8.2.3, 7.8.2.4, 7.20.2.5
+inline, 6.7.4                                                    intmax_t type, 7.20.1.5, 7.21.6.1, 7.21.6.2,
+inner scope, 6.2.1                                                     7.29.2.1, 7.29.2.2
+input failure, 7.29.2.6, 7.29.2.8, 7.29.2.10,                    INTN_C macros, 7.20.4.1
+      K.3.5.3.2, K.3.5.3.4, K.3.5.3.7, K.3.5.3.9,                INTN_MAX macros, 7.20.2.1
+      K.3.5.3.11, K.3.5.3.14, K.3.9.1.2, K.3.9.1.5,              INTN_MIN macros, 7.20.2.1
+      K.3.9.1.7, K.3.9.1.10, K.3.9.1.12, K.3.9.1.14              intN_t types, 7.20.1.1
+input/output functions                                           INTPTR_MAX macro, 7.20.2.4
+   character, 7.21.7, K.3.5.4                                    INTPTR_MIN macro, 7.20.2.4
+   direct, 7.21.8                                                intptr_t type, 7.20.1.4
+   formatted, 7.21.6, K.3.5.3                                    inttypes.h header, 7.8, 7.31.5
+      wide character, 7.29.2, K.3.9.1                            isalnum function, 7.4.1.1, 7.4.1.9, 7.4.1.10
+   wide character, 7.29.3                                        isalpha function, 7.4.1.1, 7.4.1.2
 
-[page 665] (Contents)
+[page 669] (Contents)
 
-      7.4.1.10, 7.4.1.11, 7.21.6.2, 7.22.1.3,                   LC_ALL macro, 7.11, 7.11.1.1, 7.11.2.1
-      7.22.1.4, 7.28.2.2                                        LC_COLLATE macro, 7.11, 7.11.1.1, 7.23.4.3,
-isunordered macro, 7.12.14.6, F.3                                     7.28.4.4.2
-isupper function, 7.4.1.2, 7.4.1.11, 7.4.2.1,                   LC_CTYPE macro, 7.11, 7.11.1.1, 7.22, 7.22.7,
-      7.4.2.2                                                         7.22.8, 7.28.6, 7.29.1, 7.29.2.2.1, 7.29.2.2.2,
-iswalnum function, 7.29.2.1.1, 7.29.2.1.9,                            7.29.3.2.1, 7.29.3.2.2, K.3.6.4, K.3.6.5
-      7.29.2.1.10, 7.29.2.2.1                                   LC_MONETARY macro, 7.11, 7.11.1.1, 7.11.2.1
-iswalpha function, 7.29.2.1.1, 7.29.2.1.2,                      LC_NUMERIC macro, 7.11, 7.11.1.1, 7.11.2.1
-      7.29.2.2.1                                                LC_TIME macro, 7.11, 7.11.1.1, 7.26.3.5
-iswblank function, 7.29.2.1.3, 7.29.2.2.1                       lconv structure type, 7.11
-iswcntrl function, 7.29.2.1.2, 7.29.2.1.4,                      LDBL_DECIMAL_DIG macro, 5.2.4.2.2
-      7.29.2.1.7, 7.29.2.1.11, 7.29.2.2.1                       LDBL_DIG macro, 5.2.4.2.2
-iswctype function, 7.29.2.2.1, 7.29.2.2.2                       LDBL_EPSILON macro, 5.2.4.2.2
-iswdigit function, 7.29.2.1.1, 7.29.2.1.2,                      LDBL_HAS_SUBNORM macro, 5.2.4.2.2
-      7.29.2.1.5, 7.29.2.1.7, 7.29.2.1.11, 7.29.2.2.1           LDBL_MANT_DIG macro, 5.2.4.2.2
-iswgraph function, 7.29.2.1, 7.29.2.1.6,                        LDBL_MAX macro, 5.2.4.2.2
-      7.29.2.1.10, 7.29.2.2.1                                   LDBL_MAX_10_EXP macro, 5.2.4.2.2
-iswlower function, 7.29.2.1.2, 7.29.2.1.7,                      LDBL_MAX_EXP macro, 5.2.4.2.2
-      7.29.2.2.1, 7.29.3.1.1, 7.29.3.1.2                        LDBL_MIN macro, 5.2.4.2.2
-iswprint function, 7.29.2.1.6, 7.29.2.1.8,                      LDBL_MIN_10_EXP macro, 5.2.4.2.2
-      7.29.2.2.1                                                LDBL_MIN_EXP macro, 5.2.4.2.2
-iswpunct function, 7.29.2.1, 7.29.2.1.2,                        LDBL_TRUE_MIN macro, 5.2.4.2.2
-      7.29.2.1.7, 7.29.2.1.9, 7.29.2.1.10,                      ldexp functions, 7.12.6.6, F.10.3.6
-      7.29.2.1.11, 7.29.2.2.1                                   ldexp type-generic macro, 7.24
-iswspace function, 7.21.6.2, 7.28.2.2,                          ldiv function, 7.22.6.2
-      7.28.4.1.1, 7.28.4.1.2, 7.29.2.1.2, 7.29.2.1.6,           ldiv_t type, 7.22
-      7.29.2.1.7, 7.29.2.1.9, 7.29.2.1.10,                      leading underscore in identifiers, 7.1.3
-      7.29.2.1.11, 7.29.2.2.1                                   left-shift assignment operator (<<=), 6.5.16.2
-iswupper function, 7.29.2.1.2, 7.29.2.1.11,                     left-shift operator (<<), 6.2.6.2, 6.5.7
-      7.29.2.2.1, 7.29.3.1.1, 7.29.3.1.2                        length
-iswxdigit function, 7.29.2.1.12, 7.29.2.2.1                        external name, 5.2.4.1, 6.4.2.1, 6.11.3
-isxdigit function, 7.4.1.12, 7.11.1.1                              function name, 5.2.4.1, 6.4.2.1, 6.11.3
-italic type convention, 3, 6.1                                     identifier, 6.4.2.1
-iteration statements, 6.8.5                                        internal name, 5.2.4.1, 6.4.2.1
-                                                                length function, 7.22.7.1, 7.23.6.3, 7.28.4.6.1,
-jmp_buf type, 7.13                                                    7.28.6.3.1, K.3.7.4.4, K.3.9.2.4.1
-jump statements, 6.8.6                                          length modifier, 7.21.6.1, 7.21.6.2, 7.28.2.1,
-                                                                      7.28.2.2
-keywords, 6.4.1, G.2, J.5.9, J.5.10                             less-than operator (<), 6.5.8
-kill_dependency macro, 5.1.2.4, 7.17.3.1                        less-than-or-equal-to operator (<=), 6.5.8
-known constant size, 6.2.5                                      letter, 5.2.1, 7.4
-                                                                lexical elements, 5.1.1.2, 6.4
-L_tmpnam macro, 7.21.1, 7.21.4.4                                lgamma functions, 7.12.8.3, F.10.5.3
-L_tmpnam_s macro, K.3.5, K.3.5.1.2                              lgamma type-generic macro, 7.24
-label name, 6.2.1, 6.2.3                                        library, 5.1.1.1, 7, K.3
-labeled statement, 6.8.1                                           future directions, 7.30
-labs function, 7.22.6.1                                            summary, B
-language, 6                                                        terms, 7.1.1
-   future directions, 6.11                                         use of functions, 7.1.4
-   syntax summary, A                                            lifetime, 6.2.4
-Latin alphabet, 5.2.1, 6.4.2.1                                  limits
+isblank function, 7.4.1.3                                     iswpunct function, 7.30.2.1, 7.30.2.1.2,
+iscntrl function, 7.4.1.2, 7.4.1.4, 7.4.1.7,                        7.30.2.1.7, 7.30.2.1.9, 7.30.2.1.10,
+    7.4.1.11                                                        7.30.2.1.11, 7.30.2.2.1
+isdigit function, 7.4.1.1, 7.4.1.2, 7.4.1.5,                  iswspace function, 7.21.6.2, 7.29.2.2,
+    7.4.1.7, 7.4.1.11, 7.11.1.1                                     7.29.4.1.1, 7.29.4.1.2, 7.30.2.1.2, 7.30.2.1.6,
+isfinite macro, 7.12.3.2, F.3                                       7.30.2.1.7, 7.30.2.1.9, 7.30.2.1.10,
+isgraph function, 7.4.1.6                                           7.30.2.1.11, 7.30.2.2.1
+isgreater macro, 7.12.14.1, F.3                               iswupper function, 7.30.2.1.2, 7.30.2.1.11,
+isgreaterequal macro, 7.12.14.2, F.3                                7.30.2.2.1, 7.30.3.1.1, 7.30.3.1.2
+isinf macro, 7.12.3.3                                         iswxdigit function, 7.30.2.1.12, 7.30.2.2.1
+isless macro, 7.12.14.3, F.3                                  isxdigit function, 7.4.1.12, 7.11.1.1
+islessequal macro, 7.12.14.4, F.3                             italic type convention, 3, 6.1
+islessgreater macro, 7.12.14.5, F.3                           iteration statements, 6.8.5
+islower function, 7.4.1.2, 7.4.1.7, 7.4.2.1,
+    7.4.2.2                                                   jmp_buf type, 7.13
+isnan macro, 7.12.3.4, F.3                                    jump statements, 6.8.6
+isnormal macro, 7.12.3.5
+ISO 31-11, 2, 3                                               keywords, 6.4.1, G.2, J.5.9, J.5.10
+ISO 4217, 2, 7.11.2.1                                         kill_dependency macro, 5.1.2.4, 7.17.3.1
+ISO 8601, 2, 7.27.3.5                                         known constant size, 6.2.5
+ISO/IEC 10646, 2, 6.4.2.1, 6.4.3, 6.10.8.2
+ISO/IEC 10976-1, H.1                                          L_tmpnam macro, 7.21.1, 7.21.4.4
+ISO/IEC 2382-1, 2, 3                                          L_tmpnam_s macro, K.3.5, K.3.5.1.2
+ISO/IEC 646, 2, 5.2.1.1                                       label name, 6.2.1, 6.2.3
+ISO/IEC 9945-2, 7.11                                          labeled statement, 6.8.1
+iso646.h header, 4, 7.9                                       labs function, 7.22.6.1
+isprint function, 5.2.2, 7.4.1.8                              language, 6
+ispunct function, 7.4.1.2, 7.4.1.7, 7.4.1.9,                     future directions, 6.11
+    7.4.1.11                                                     syntax summary, A
+isspace function, 7.4.1.2, 7.4.1.7, 7.4.1.9,                  Latin alphabet, 5.2.1, 6.4.2.1
+    7.4.1.10, 7.4.1.11, 7.21.6.2, 7.22.1.3,                   LC_ALL macro, 7.11, 7.11.1.1, 7.11.2.1
+    7.22.1.4, 7.29.2.2                                        LC_COLLATE macro, 7.11, 7.11.1.1, 7.24.4.3,
+isunordered macro, 7.12.14.6, F.3                                   7.29.4.4.2
+isupper function, 7.4.1.2, 7.4.1.11, 7.4.2.1,                 LC_CTYPE macro, 7.11, 7.11.1.1, 7.22, 7.22.7,
+    7.4.2.2                                                         7.22.8, 7.29.6, 7.30.1, 7.30.2.2.1, 7.30.2.2.2,
+iswalnum function, 7.30.2.1.1, 7.30.2.1.9,                          7.30.3.2.1, 7.30.3.2.2, K.3.6.4, K.3.6.5
+    7.30.2.1.10, 7.30.2.2.1                                   LC_MONETARY macro, 7.11, 7.11.1.1, 7.11.2.1
+iswalpha function, 7.30.2.1.1, 7.30.2.1.2,                    LC_NUMERIC macro, 7.11, 7.11.1.1, 7.11.2.1
+    7.30.2.2.1                                                LC_TIME macro, 7.11, 7.11.1.1, 7.27.3.5
+iswblank function, 7.30.2.1.3, 7.30.2.2.1                     lconv structure type, 7.11
+iswcntrl function, 7.30.2.1.2, 7.30.2.1.4,                    LDBL_DECIMAL_DIG macro, 5.2.4.2.2
+    7.30.2.1.7, 7.30.2.1.11, 7.30.2.2.1                       LDBL_DIG macro, 5.2.4.2.2
+iswctype function, 7.30.2.2.1, 7.30.2.2.2                     LDBL_EPSILON macro, 5.2.4.2.2
+iswdigit function, 7.30.2.1.1, 7.30.2.1.2,                    LDBL_HAS_SUBNORM macro, 5.2.4.2.2
+    7.30.2.1.5, 7.30.2.1.7, 7.30.2.1.11, 7.30.2.2.1           LDBL_MANT_DIG macro, 5.2.4.2.2
+iswgraph function, 7.30.2.1, 7.30.2.1.6,                      LDBL_MAX macro, 5.2.4.2.2
+    7.30.2.1.10, 7.30.2.2.1                                   LDBL_MAX_10_EXP macro, 5.2.4.2.2
+iswlower function, 7.30.2.1.2, 7.30.2.1.7,                    LDBL_MAX_EXP macro, 5.2.4.2.2
+    7.30.2.2.1, 7.30.3.1.1, 7.30.3.1.2                        LDBL_MIN macro, 5.2.4.2.2
+iswprint function, 7.30.2.1.6, 7.30.2.1.8,                    LDBL_MIN_10_EXP macro, 5.2.4.2.2
+    7.30.2.2.1                                                LDBL_MIN_EXP macro, 5.2.4.2.2
 
-[page 666] (Contents)
+[page 670] (Contents)
 
+LDBL_TRUE_MIN macro, 5.2.4.2.2                             llround functions, 7.12.9.7, F.10.6.7
+ldexp functions, 7.12.6.6, F.10.3.6                        llround type-generic macro, 7.25
+ldexp type-generic macro, 7.25                             local time, 7.27.1
+ldiv function, 7.22.6.2                                    locale, 3.4.2
+ldiv_t type, 7.22                                          locale-specific behavior, 3.4.2, J.4
+leading underscore in identifiers, 7.1.3                    locale.h header, 7.11, 7.31.6
+left-shift assignment operator (<<=), 6.5.16.2             localeconv function, 7.11.1.1, 7.11.2.1
+left-shift operator (<<), 6.2.6.2, 6.5.7                   localization header, 7.11, 7.31.6
+length                                                     localtime function, 7.27.3.4
+   external name, 5.2.4.1, 6.4.2.1, 6.11.3                 localtime_s function, K.3.8.2.4
+   function name, 5.2.4.1, 6.4.2.1, 6.11.3                 log functions, 7.12.6.7, F.10.3.7
+   identifier, 6.4.2.1                                      log type-generic macro, 7.25
+   internal name, 5.2.4.1, 6.4.2.1                         log10 functions, 7.12.6.8, F.10.3.8
+length function, 7.22.7.1, 7.24.6.3, 7.29.4.6.1,           log10 type-generic macro, 7.25
+      7.29.6.3.1, K.3.7.4.4, K.3.9.2.4.1                   log1p functions, 7.12.6.9, F.10.3.9
+length modifier, 7.21.6.1, 7.21.6.2, 7.29.2.1,              log1p type-generic macro, 7.25
+      7.29.2.2                                             log2 functions, 7.12.6.10, F.10.3.10
+less-than operator (<), 6.5.8                              log2 type-generic macro, 7.25
+less-than-or-equal-to operator (<=), 6.5.8                 logarithmic functions
+letter, 5.2.1, 7.4                                           complex, 7.3.7, G.6.3
+lexical elements, 5.1.1.2, 6.4                               real, 7.12.6, F.10.3
+lgamma functions, 7.12.8.3, F.10.5.3                       logb functions, 7.12.6.11, F.3, F.10.3.11
+lgamma type-generic macro, 7.25                            logb type-generic macro, 7.25
+library, 5.1.1.1, 7, K.3                                   logical operators
+   future directions, 7.31                                    AND (&&), 5.1.2.4, 6.5.13
+   summary, B                                                 negation (!), 6.5.3.3
+   terms, 7.1.1                                               OR (||), 5.1.2.4, 6.5.14
+   use of functions, 7.1.4                                 logical source lines, 5.1.1.2
+lifetime, 6.2.4                                            long double _Complex type, 6.2.5
+limits                                                     long double _Complex type conversion,
    environmental, see environmental limits                      6.3.1.6, 6.3.1.7, 6.3.1.8
    implementation, see implementation limits               long double _Imaginary type, G.2
    numerical, see numerical limits                         long double suffix, l or L, 6.4.4.2
    translation, see translation limits                     long double type, 6.2.5, 6.4.4.2, 6.7.2,
-limits.h header, 4, 5.2.4.2.1, 6.2.5, 7.10                      7.21.6.1, 7.21.6.2, 7.28.2.1, 7.28.2.2, F.2
+limits.h header, 4, 5.2.4.2.1, 6.2.5, 7.10                      7.21.6.1, 7.21.6.2, 7.29.2.1, 7.29.2.2, F.2
 line buffered stream, 7.21.3                               long double type conversion, 6.3.1.4, 6.3.1.5,
 line number, 6.10.4, 6.10.8.1                                   6.3.1.7, 6.3.1.8
 line preprocessing directive, 6.10.4                       long int type, 6.2.5, 6.3.1.1, 6.7.2, 7.21.6.1,
-lines, 5.1.1.2, 7.21.2                                          7.21.6.2, 7.28.2.1, 7.28.2.2
+lines, 5.1.1.2, 7.21.2                                          7.21.6.2, 7.29.2.1, 7.29.2.2
    preprocessing directive, 6.10                           long int type conversion, 6.3.1.1, 6.3.1.3,
 linkage, 6.2.2, 6.7, 6.7.4, 6.7.6.2, 6.9, 6.9.2,                6.3.1.4, 6.3.1.8
       6.11.2                                               long integer suffix, l or L, 6.4.4.1
 llabs function, 7.22.6.1                                   long long int type, 6.2.5, 6.3.1.1, 6.7.2,
-lldiv function, 7.22.6.2                                        7.21.6.1, 7.21.6.2, 7.28.2.1, 7.28.2.2
+lldiv function, 7.22.6.2                                        7.21.6.1, 7.21.6.2, 7.29.2.1, 7.29.2.2
 lldiv_t type, 7.22                                         long long int type conversion, 6.3.1.1,
 LLONG_MAX macro, 5.2.4.2.1, 7.22.1.4,                           6.3.1.3, 6.3.1.4, 6.3.1.8
-      7.28.4.1.2                                           long long integer suffix, ll or LL, 6.4.4.1
-LLONG_MIN macro, 5.2.4.2.1, 7.22.1.4,                      LONG_MAX macro, 5.2.4.2.1, 7.22.1.4, 7.28.4.1.2
-      7.28.4.1.2                                           LONG_MIN macro, 5.2.4.2.1, 7.22.1.4, 7.28.4.1.2
+      7.29.4.1.2                                           long long integer suffix, ll or LL, 6.4.4.1
+LLONG_MIN macro, 5.2.4.2.1, 7.22.1.4,                      LONG_MAX macro, 5.2.4.2.1, 7.22.1.4, 7.29.4.1.2
+      7.29.4.1.2                                           LONG_MIN macro, 5.2.4.2.1, 7.22.1.4, 7.29.4.1.2
 llrint functions, 7.12.9.5, F.3, F.10.6.5                  longjmp function, 7.13.1.1, 7.13.2.1, 7.22.4.4,
-llrint type-generic macro, 7.24                                 7.22.4.7
-llround functions, 7.12.9.7, F.10.6.7                      loop body, 6.8.5
-llround type-generic macro, 7.24                           low-order bit, 3.6
-local time, 7.26.1                                         lowercase letter, 5.2.1
-locale, 3.4.2                                              lrint functions, 7.12.9.5, F.3, F.10.6.5
-locale-specific behavior, 3.4.2, J.4                        lrint type-generic macro, 7.24
-locale.h header, 7.11, 7.30.5                              lround functions, 7.12.9.7, F.10.6.7
-localeconv function, 7.11.1.1, 7.11.2.1                    lround type-generic macro, 7.24
-localization, 7.11                                         lvalue, 6.3.2.1, 6.5.1, 6.5.2.4, 6.5.3.1, 6.5.16,
-localtime function, 7.26.3.4                                    6.7.2.4
-localtime_s function, K.3.8.2.4                            lvalue conversion, 6.3.2.1, 6.5.16, 6.5.16.1,
-log functions, 7.12.6.7, F.10.3.7                               6.5.16.2
-log type-generic macro, 7.24
-log10 functions, 7.12.6.8, F.10.3.8                        macro argument substitution, 6.10.3.1
-log10 type-generic macro, 7.24                             macro definition
-log1p functions, 7.12.6.9, F.10.3.9                          library function, 7.1.4
-log1p type-generic macro, 7.24                             macro invocation, 6.10.3
-log2 functions, 7.12.6.10, F.10.3.10                       macro name, 6.10.3
-log2 type-generic macro, 7.24                                length, 5.2.4.1
-logarithmic functions                                        predefined, 6.10.8, 6.11.9
-   complex, 7.3.7, G.6.3                                     redefinition, 6.10.3
-   real, 7.12.6, F.10.3                                      scope, 6.10.3.5
-logb functions, 7.12.6.11, F.3, F.10.3.11                  macro parameter, 6.10.3
-logb type-generic macro, 7.24                              macro preprocessor, 6.10
-logical operators                                          macro replacement, 6.10.3
-   AND (&&), 5.1.2.4, 6.5.13                               magnitude, complex, 7.3.8.1
-   negation (!), 6.5.3.3                                   main function, 5.1.2.2.1, 5.1.2.2.3, 6.7.3.1, 6.7.4,
-   OR (||), 5.1.2.4, 6.5.14                                     7.21.3
-logical source lines, 5.1.1.2                              malloc function, 7.22.3, 7.22.3.4, 7.22.3.5
-long double _Complex type, 6.2.5                           manipulation functions
-long double _Complex type conversion,                        complex, 7.3.9
+llrint type-generic macro, 7.25                                 7.22.4.7
 
-[page 667] (Contents)
+[page 671] (Contents)
 
-  real, 7.12.11, F.10.8                                    modf functions, 7.12.6.12, F.10.3.12
-matching failure, 7.28.2.6, 7.28.2.8, 7.28.2.10,           modifiable lvalue, 6.3.2.1
-     K.3.9.1.7, K.3.9.1.10, K.3.9.1.12                     modification order, 5.1.2.4
-math.h header, 5.2.4.2.2, 6.5, 7.12, 7.24, F,              modulus functions, 7.12.6.12
-     F.10, J.5.17                                          modulus, complex, 7.3.8.1
-MATH_ERREXCEPT macro, 7.12, F.10                           mtx_destroy function, 7.25.4.1
-math_errhandling macro, 7.1.3, 7.12, F.10                  mtx_init function, 7.25.1, 7.25.4.2
-MATH_ERRNO macro, 7.12                                     mtx_lock function, 7.25.4.3
-max_align_t type, 7.19                                     mtx_t type, 7.25.1
-maximum functions, 7.12.12, F.10.9                         mtx_timedlock function, 7.25.4.4
-MB_CUR_MAX macro, 7.1.1, 7.22, 7.22.7.2,                   mtx_trylock function, 7.25.4.5
-     7.22.7.3, 7.27.1.2, 7.27.1.4, 7.28.6.3.3,             mtx_unlock function, 7.25.4.3, 7.25.4.4,
-     K.3.6.4.1, K.3.9.3.1.1                                     7.25.4.5, 7.25.4.6
-MB_LEN_MAX macro, 5.2.4.2.1, 7.1.1, 7.22                   multibyte character, 3.7.2, 5.2.1.2, 6.4.4.4
-mblen function, 7.22.7.1, 7.28.6.3                         multibyte conversion functions
-mbrlen function, 7.28.6.3.1                                  wide character, 7.22.7, K.3.6.4
-mbrtoc16 function, 6.4.4.4, 6.4.5, 7.27.1.1                     extended, 7.28.6, K.3.9.3
-mbrtoc32 function, 6.4.4.4, 6.4.5, 7.27.1.3                     restartable, 7.27.1, 7.28.6.3, K.3.9.3.1
-mbrtowc function, 7.21.3, 7.21.6.1, 7.21.6.2,                wide string, 7.22.8, K.3.6.5
-     7.28.2.1, 7.28.2.2, 7.28.6.3.1, 7.28.6.3.2,                restartable, 7.28.6.4, K.3.9.3.2
-     7.28.6.4.1, K.3.6.5.1, K.3.9.3.2.1                    multibyte string, 7.1.1
-mbsinit function, 7.28.6.2.1                               multibyte/wide character conversion functions,
-mbsrtowcs function, 7.28.6.4.1, K.3.9.3.2                       7.22.7, K.3.6.4
-mbsrtowcs_s function, K.3.9.3.2, K.3.9.3.2.1                 extended, 7.28.6, K.3.9.3
-mbstate_t type, 7.21.2, 7.21.3, 7.21.6.1,                    restartable, 7.27.1, 7.28.6.3, K.3.9.3.1
-     7.21.6.2, 7.27, 7.27.1, 7.28.1, 7.28.2.1,             multibyte/wide string conversion functions,
-     7.28.2.2, 7.28.6, 7.28.6.2.1, 7.28.6.3,                    7.22.8, K.3.6.5
-     7.28.6.3.1, 7.28.6.4                                    restartable, 7.28.6.4, K.3.9.3.2
-mbstowcs function, 6.4.5, 7.22.8.1, 7.28.6.4               multidimensional array, 6.5.2.1
-mbstowcs_s function, K.3.6.5.1                             multiplication assignment operator (*=), 6.5.16.2
-mbtowc function, 6.4.4.4, 7.22.7.1, 7.22.7.2,              multiplication operator (*), 6.2.6.2, 6.5.5, F.3,
-     7.22.8.1, 7.28.6.3                                         G.5.1
-member access operators (. and ->), 6.5.2.3                multiplicative expressions, 6.5.5, G.5.1
-member alignment, 6.7.2.1
-memchr function, 7.23.5.1                                  n-char sequence, 7.22.1.3
-memcmp function, 7.23.4, 7.23.4.1                          n-wchar sequence, 7.28.4.1.1
-memcpy function, 7.23.2.1                                  name
-memcpy_s function, K.3.7.1.1                                 external, 5.2.4.1, 6.4.2.1, 6.11.3
-memmove function, 7.23.2.2                                   file, 7.21.3
-memmove_s function, K.3.7.1.2                                internal, 5.2.4.1, 6.4.2.1
-memory location, 3.14                                        label, 6.2.3
-memory management functions, 7.22.3                          structure/union member, 6.2.3
-memory_order type, 7.17.1, 7.17.3                          name spaces, 6.2.3
-memset function, 7.23.6.1, K.3.7.4.1                       named label, 6.8.1
-memset_s function, K.3.7.4.1                               NaN, 5.2.4.2.2
-minimum functions, 7.12.12, F.10.9                         nan functions, 7.12.11.2, F.2.1, F.10.8.2
-minus operator, unary, 6.5.3.3                             NAN macro, 7.12, F.2.1
-miscellaneous functions                                    NDEBUG macro, 7.2
-  string, 7.23.6, K.3.7.4                                  nearbyint functions, 7.12.9.3, 7.12.9.4, F.3,
-  wide string, 7.28.4.6, K.3.9.2.4                              F.10.6.3
-mktime function, 7.26.2.3                                  nearbyint type-generic macro, 7.24
+loop body, 6.8.5                                                    7.29.2.1, 7.29.2.2, 7.29.6.3.1, 7.29.6.3.2,
+low-order bit, 3.6                                                  7.29.6.4.1, K.3.6.5.1, K.3.9.3.2.1
+lowercase letter, 5.2.1                                        mbsinit function, 7.29.6.2.1
+lrint functions, 7.12.9.5, F.3, F.10.6.5                       mbsrtowcs function, 7.29.6.4.1, K.3.9.3.2
+lrint type-generic macro, 7.25                                 mbsrtowcs_s function, K.3.9.3.2, K.3.9.3.2.1
+lround functions, 7.12.9.7, F.10.6.7                           mbstate_t type, 7.21.2, 7.21.3, 7.21.6.1,
+lround type-generic macro, 7.25                                     7.21.6.2, 7.28, 7.28.1, 7.29.1, 7.29.2.1,
+lvalue, 6.3.2.1, 6.5.1, 6.5.2.4, 6.5.3.1, 6.5.16,                   7.29.2.2, 7.29.6, 7.29.6.2.1, 7.29.6.3,
+     6.7.2.4                                                        7.29.6.3.1, 7.29.6.4
+lvalue conversion, 6.3.2.1, 6.5.16, 6.5.16.1,                  mbstowcs function, 6.4.5, 7.22.8.1, 7.29.6.4
+     6.5.16.2                                                  mbstowcs_s function, K.3.6.5.1
+                                                               mbtowc function, 6.4.4.4, 7.22.7.1, 7.22.7.2,
+macro argument substitution, 6.10.3.1                               7.22.8.1, 7.29.6.3
+macro definition                                                member access operators (. and ->), 6.5.2.3
+  library function, 7.1.4                                      member alignment, 6.7.2.1
+macro invocation, 6.10.3                                       memchr function, 7.24.5.1
+macro name, 6.10.3                                             memcmp function, 7.24.4, 7.24.4.1
+  length, 5.2.4.1                                              memcpy function, 7.24.2.1
+  predefined, 6.10.8, 6.11.9                                    memcpy_s function, K.3.7.1.1
+  redefinition, 6.10.3                                          memmove function, 7.24.2.2
+  scope, 6.10.3.5                                              memmove_s function, K.3.7.1.2
+macro parameter, 6.10.3                                        memory location, 3.14
+macro preprocessor, 6.10                                       memory management functions, 7.22.3
+macro replacement, 6.10.3                                      memory_order type, 7.17.1, 7.17.3
+magnitude, complex, 7.3.8.1                                    memset function, 7.24.6.1, K.3.7.4.1
+main function, 5.1.2.2.1, 5.1.2.2.3, 6.7.3.1, 6.7.4,           memset_s function, K.3.7.4.1
+     7.21.3                                                    minimum functions, 7.12.12, F.10.9
+malloc function, 7.22.3, 7.22.3.4, 7.22.3.5                    minus operator, unary, 6.5.3.3
+manipulation functions                                         miscellaneous functions
+  complex, 7.3.9                                                 string, 7.24.6, K.3.7.4
+  real, 7.12.11, F.10.8                                          wide string, 7.29.4.6, K.3.9.2.4
+matching failure, 7.29.2.6, 7.29.2.8, 7.29.2.10,               mktime function, 7.27.2.3
+     K.3.9.1.7, K.3.9.1.10, K.3.9.1.12                         modf functions, 7.12.6.12, F.10.3.12
+math.h header, 5.2.4.2.2, 6.5, 7.12, 7.25, F,                  modifiable lvalue, 6.3.2.1
+     F.10, J.5.17                                              modification order, 5.1.2.4
+MATH_ERREXCEPT macro, 7.12, F.10                               modulus functions, 7.12.6.12
+math_errhandling macro, 7.1.3, 7.12, F.10                      modulus, complex, 7.3.8.1
+MATH_ERRNO macro, 7.12                                         mtx_destroy function, 7.26.4.1
+mathematics header, 7.12                                       mtx_init function, 7.26.1, 7.26.4.2
+max_align_t type, 7.19                                         mtx_lock function, 7.26.4.3
+maximal munch, 6.4                                             mtx_t type, 7.26.1
+maximum functions, 7.12.12, F.10.9                             mtx_timedlock function, 7.26.4.4
+MB_CUR_MAX macro, 7.1.1, 7.22, 7.22.7.2,                       mtx_trylock function, 7.26.4.5
+     7.22.7.3, 7.28.1.2, 7.28.1.4, 7.29.6.3.3,                 mtx_unlock function, 7.26.4.3, 7.26.4.4,
+     K.3.6.4.1, K.3.9.3.1.1                                         7.26.4.5, 7.26.4.6
+MB_LEN_MAX macro, 5.2.4.2.1, 7.1.1, 7.22                       multibyte character, 3.7.2, 5.2.1.2, 6.4.4.4
+mblen function, 7.22.7.1, 7.29.6.3                             multibyte conversion functions
+mbrlen function, 7.29.6.3.1                                      wide character, 7.22.7, K.3.6.4
+mbrtoc16 function, 6.4.4.4, 6.4.5, 7.28.1.1                         extended, 7.29.6, K.3.9.3
+mbrtoc32 function, 6.4.4.4, 6.4.5, 7.28.1.3                         restartable, 7.28.1, 7.29.6.3, K.3.9.3.1
+mbrtowc function, 7.21.3, 7.21.6.1, 7.21.6.2,                    wide string, 7.22.8, K.3.6.5
 
-[page 668] (Contents)
+[page 672] (Contents)
 
-nearest integer functions, 7.12.9, F.10.6                       operating system, 5.1.2.1, 7.22.4.8
-negation operator (!), 6.5.3.3                                  operations on files, 7.21.4, K.3.5.1
-negative zero, 6.2.6.2, 7.12.11.1                               operator, 6.4.6
-new-line character, 5.1.1.2, 5.2.1, 6.4, 6.10, 6.10.4           operators, 6.5
-new-line escape sequence (\n), 5.2.2, 6.4.4.4,                     additive, 6.2.6.2, 6.5.6
-     7.4.1.10                                                      alignof, 6.5.3.4
-nextafter functions, 7.12.11.3, 7.12.11.4, F.3,                    assignment, 6.5.16
-     F.10.8.3                                                      associativity, 6.5
-nextafter type-generic macro, 7.24                                 equality, 6.5.9
-nexttoward functions, 7.12.11.4, F.3, F.10.8.4                     multiplicative, 6.2.6.2, 6.5.5, G.5.1
-nexttoward type-generic macro, 7.24                                postfix, 6.5.2
-no linkage, 6.2.2                                                  precedence, 6.5
-no-return function, 6.7.4                                          preprocessing, 6.10.1, 6.10.3.2, 6.10.3.3, 6.10.9
-non-stop floating-point control mode, 7.6.4.2                       relational, 6.5.8
-nongraphic characters, 5.2.2, 6.4.4.4                              shift, 6.5.7
-nonlocal jumps header, 7.13                                        sizeof, 6.5.3.4
-norm, complex, 7.3.8.1                                             unary, 6.5.3
-normalized broken-down time, K.3.8.1, K.3.8.2.1                    unary arithmetic, 6.5.3.3
-not macro, 7.9                                                  optional features, see conditional features
-not-equal-to operator, see inequality operator                  or macro, 7.9
-not_eq macro, 7.9                                               OR operators
-null character (\0), 5.2.1, 6.4.4.4, 6.4.5                         bitwise exclusive (^), 6.2.6.2, 6.5.11
-  padding of binary stream, 7.21.2                                 bitwise exclusive assignment (^=), 6.5.16.2
-NULL macro, 7.11, 7.19, 7.21.1, 7.22, 7.23.1,                      bitwise inclusive (|), 6.2.6.2, 6.5.12
-     7.26.1, 7.28.1                                                bitwise inclusive assignment (|=), 6.5.16.2
-null pointer, 6.3.2.3                                              logical (||), 5.1.2.4, 6.5.14
-null pointer constant, 6.3.2.3                                  or_eq macro, 7.9
-null preprocessing directive, 6.10.7                            order of allocated storage, 7.22.3
-null statement, 6.8.3                                           order of evaluation, 6.5, 6.5.16, 6.10.3.2, 6.10.3.3,
-null wide character, 7.1.1                                            see also sequence points
-number classification macros, 7.12, 7.12.3.1                     ordinary identifier name space, 6.2.3
-numeric conversion functions, 7.8.2.3, 7.22.1                   orientation of stream, 7.21.2, 7.28.3.5
-  wide string, 7.8.2.4, 7.28.4.1                                out-of-bounds store, L.2.1
-numerical limits, 5.2.4.2                                       outer scope, 6.2.1
-                                                                over-aligned, 6.2.8
-object, 3.15
-object representation, 6.2.6.1                                  padding
-object type, 6.2.5                                                binary stream, 7.21.2
-object-like macro, 6.10.3                                         bits, 6.2.6.2, 7.20.1.1
-observable behavior, 5.1.2.3                                      structure/union, 6.2.6.1, 6.7.2.1
-obsolescence, 6.11, 7.30                                        parameter, 3.16
-octal constant, 6.4.4.1                                           array, 6.9.1
-octal digit, 6.4.4.1, 6.4.4.4                                     ellipsis, 6.7.6.3, 6.10.3
-octal-character escape sequence (\octal digits),                  function, 6.5.2.2, 6.7, 6.9.1
-     6.4.4.4                                                      macro, 6.10.3
-offsetof macro, 7.19                                              main function, 5.1.2.2.1
-on-off switch, 6.10.6                                             program, 5.1.2.2.1
-once_flag type, 7.25.1                                          parameter type list, 6.7.6.3
-ONCE_FLAG_INIT macro, 7.25.1                                    parentheses punctuator (( )), 6.7.6.3, 6.8.4, 6.8.5
-ones' complement, 6.2.6.2                                       parenthesized expression, 6.5.1
-operand, 6.4.6, 6.5                                             parse state, 7.21.2
+     restartable, 7.29.6.4, K.3.9.3.2                           not macro, 7.9
+multibyte string, 7.1.1                                         not-equal-to operator, see inequality operator
+multibyte/wide character conversion functions,                  not_eq macro, 7.9
+     7.22.7, K.3.6.4                                            null character (\0), 5.2.1, 6.4.4.4, 6.4.5
+ extended, 7.29.6, K.3.9.3                                        padding of binary stream, 7.21.2
+ restartable, 7.28.1, 7.29.6.3, K.3.9.3.1                       NULL macro, 7.11, 7.19, 7.21.1, 7.22, 7.24.1,
+multibyte/wide string conversion functions,                          7.27.1, 7.29.1
+     7.22.8, K.3.6.5                                            null pointer, 6.3.2.3
+ restartable, 7.29.6.4, K.3.9.3.2                               null pointer constant, 6.3.2.3
+multidimensional array, 6.5.2.1                                 null preprocessing directive, 6.10.7
+multiplication assignment operator (*=), 6.5.16.2               null statement, 6.8.3
+multiplication operator (*), 6.2.6.2, 6.5.5, F.3,               null wide character, 7.1.1
+     G.5.1                                                      number classification macros, 7.12, 7.12.3.1
+multiplicative expressions, 6.5.5, G.5.1                        numeric conversion functions, 7.8.2.3, 7.22.1
+                                                                  wide string, 7.8.2.4, 7.29.4.1
+n-char sequence, 7.22.1.3                                       numerical limits, 5.2.4.2
+n-wchar sequence, 7.29.4.1.1
+name                                                            object, 3.15
+  external, 5.2.4.1, 6.4.2.1, 6.11.3                            object representation, 6.2.6.1
+  file, 7.21.3                                                   object type, 6.2.5
+  internal, 5.2.4.1, 6.4.2.1                                    object-like macro, 6.10.3
+  label, 6.2.3                                                  observable behavior, 5.1.2.3
+  structure/union member, 6.2.3                                 obsolescence, 6.11, 7.31
+name spaces, 6.2.3                                              octal constant, 6.4.4.1
+named label, 6.8.1                                              octal digit, 6.4.4.1, 6.4.4.4
+NaN, 5.2.4.2.2                                                  octal-character escape sequence (\octal digits),
+nan functions, 7.12.11.2, F.2.1, F.10.8.2                            6.4.4.4
+NAN macro, 7.12, F.2.1                                          offsetof macro, 7.19
+NDEBUG macro, 7.2                                               on-off switch, 6.10.6
+nearbyint functions, 7.12.9.3, 7.12.9.4, F.3,                   once_flag type, 7.26.1
+     F.10.6.3                                                   ONCE_FLAG_INIT macro, 7.26.1
+nearbyint type-generic macro, 7.25                              ones' complement, 6.2.6.2
+nearest integer functions, 7.12.9, F.10.6                       operand, 6.4.6, 6.5
+negation operator (!), 6.5.3.3                                  operating system, 5.1.2.1, 7.22.4.8
+negative zero, 6.2.6.2, 7.12.11.1                               operations on files, 7.21.4, K.3.5.1
+new-line character, 5.1.1.2, 5.2.1, 6.4, 6.10, 6.10.4           operator, 6.4.6
+new-line escape sequence (\n), 5.2.2, 6.4.4.4,                  operators, 6.5
+     7.4.1.10                                                     _Alignof, 6.5.3.4
+nextafter functions, 7.12.11.3, 7.12.11.4, F.3,                   additive, 6.2.6.2, 6.5.6
+     F.10.8.3                                                     assignment, 6.5.16
+nextafter type-generic macro, 7.25                                associativity, 6.5
+nexttoward functions, 7.12.11.4, F.3, F.10.8.4                    equality, 6.5.9
+nexttoward type-generic macro, 7.25                               multiplicative, 6.2.6.2, 6.5.5, G.5.1
+no linkage, 6.2.2                                                 postfix, 6.5.2
+no-return function, 6.7.4                                         precedence, 6.5
+non-stop floating-point control mode, 7.6.4.2                      preprocessing, 6.10.1, 6.10.3.2, 6.10.3.3, 6.10.9
+nongraphic characters, 5.2.2, 6.4.4.4                             relational, 6.5.8
+nonlocal jumps header, 7.13                                       shift, 6.5.7
+noreturn macro, 7.23                                              sizeof, 6.5.3.4
+norm, complex, 7.3.8.1                                            unary, 6.5.3
+normalized broken-down time, K.3.8.1, K.3.8.2.1                   unary arithmetic, 6.5.3.3
 
-[page 669] (Contents)
+[page 673] (Contents)
 
-perform a trap, 3.19.5                                        preprocessor, 6.10
-permitted form of initializer, 6.6                            PRIcFASTN macros, 7.8.1
-perror function, 7.21.10.4                                    PRIcLEASTN macros, 7.8.1
-phase angle, complex, 7.3.9.1                                 PRIcMAX macros, 7.8.1
-physical source lines, 5.1.1.2                                PRIcN macros, 7.8.1
-placemarker, 6.10.3.3                                         PRIcPTR macros, 7.8.1
-plus operator, unary, 6.5.3.3                                 primary expression, 6.5.1
-pointer arithmetic, 6.5.6                                     printf function, 7.21.1, 7.21.6.3, 7.21.6.10,
-pointer comparison, 6.5.8                                           K.3.5.3.3
-pointer declarator, 6.7.6.1                                   printf_s function, K.3.5.3.3
-pointer operator (->), 6.5.2.3                                printing character, 5.2.2, 7.4, 7.4.1.8
-pointer to function, 6.5.2.2                                  printing wide character, 7.29.2
-pointer type, 6.2.5                                           program diagnostics, 7.2.1
-pointer type conversion, 6.3.2.1, 6.3.2.3                     program execution, 5.1.2.2.2, 5.1.2.3
-pointer, null, 6.3.2.3                                        program file, 5.1.1.1
-pole error, 7.12.1, 7.12.5.3, 7.12.6.7, 7.12.6.8,             program image, 5.1.1.2
-     7.12.6.9, 7.12.6.10, 7.12.6.11, 7.12.7.4,                program name (argv[0]), 5.1.2.2.1
-     7.12.8.3, 7.12.8.4                                       program parameters, 5.1.2.2.1
-portability, 4, J                                             program startup, 5.1.2, 5.1.2.1, 5.1.2.2.1
-position indicator, file, see file position indicator           program structure, 5.1.1.1
-positive difference, 7.12.12.1                                program termination, 5.1.2, 5.1.2.1, 5.1.2.2.3,
-positive difference functions, 7.12.12, F.10.9                      5.1.2.3
-postfix decrement operator (--), 6.3.2.1, 6.5.2.4              program, conforming, 4
-postfix expressions, 6.5.2                                     program, strictly conforming, 4
-postfix increment operator (++), 6.3.2.1, 6.5.2.4              promotions
-pow functions, 7.12.7.4, F.10.4.4                                default argument, 6.5.2.2
-pow type-generic macro, 7.24                                     integer, 5.1.2.3, 6.3.1.1
-power functions                                               prototype, see function prototype
-  complex, 7.3.8, G.6.4                                       pseudo-random sequence functions, 7.22.2
-  real, 7.12.7, F.10.4                                        PTRDIFF_MAX macro, 7.20.3
-pp-number, 6.4.8                                              PTRDIFF_MIN macro, 7.20.3
-pragma operator, 6.10.9                                       ptrdiff_t type, 7.17.1, 7.19, 7.20.3, 7.21.6.1,
-pragma preprocessing directive, 6.10.6, 6.11.8                      7.21.6.2, 7.28.2.1, 7.28.2.2
-precedence of operators, 6.5                                  punctuators, 6.4.6
-precedence of syntax rules, 5.1.1.2                           putc function, 7.21.1, 7.21.7.7, 7.21.7.8
-precision, 6.2.6.2, 6.3.1.1, 7.21.6.1, 7.28.2.1               putchar function, 7.21.1, 7.21.7.8
-  excess, 5.2.4.2.2, 6.3.1.8, 6.8.6.4                         puts function, 7.21.1, 7.21.7.9
-predefined macro names, 6.10.8, 6.11.9                         putwc function, 7.21.1, 7.28.3.8, 7.28.3.9
-prefix decrement operator (--), 6.3.2.1, 6.5.3.1               putwchar function, 7.21.1, 7.28.3.9
-prefix increment operator (++), 6.3.2.1, 6.5.3.1
-preprocessing concatenation, 6.10.3.3                         qsort function, 7.22.5, 7.22.5.2
-preprocessing directives, 5.1.1.2, 6.10                       qsort_s function, K.3.6.3, K.3.6.3.2
-preprocessing file, 5.1.1.1, 6.10                              qualified types, 6.2.5
-preprocessing numbers, 6.4, 6.4.8                             qualified version of type, 6.2.5
-preprocessing operators                                       question-mark escape sequence (\?), 6.4.4.4
-  #, 6.10.3.2                                                 quick_exit function, 7.22.4.3, 7.22.4.4,
-  ##, 6.10.3.3                                                     7.22.4.7
-  _Pragma, 5.1.1.2, 6.10.9                                    quiet NaN, 5.2.4.2.2
-  defined, 6.10.1
-preprocessing tokens, 5.1.1.2, 6.4, 6.10                      raise function, 7.14, 7.14.1.1, 7.14.2.1, 7.22.4.1
-preprocessing translation unit, 5.1.1.1                       rand function, 7.22, 7.22.2.1, 7.22.2.2
+optional features, see conditional features                     portability, 4, J
+or macro, 7.9                                                   position indicator, file, see file position indicator
+OR operators                                                    positive difference, 7.12.12.1
+   bitwise exclusive (^), 6.2.6.2, 6.5.11                       positive difference functions, 7.12.12, F.10.9
+   bitwise exclusive assignment (^=), 6.5.16.2                  postfix decrement operator (--), 6.3.2.1, 6.5.2.4
+   bitwise inclusive (|), 6.2.6.2, 6.5.12                       postfix expressions, 6.5.2
+   bitwise inclusive assignment (|=), 6.5.16.2                  postfix increment operator (++), 6.3.2.1, 6.5.2.4
+   logical (||), 5.1.2.4, 6.5.14                                pow functions, 7.12.7.4, F.10.4.4
+or_eq macro, 7.9                                                pow type-generic macro, 7.25
+order of allocated storage, 7.22.3                              power functions
+order of evaluation, 6.5, 6.5.16, 6.10.3.2, 6.10.3.3,              complex, 7.3.8, G.6.4
+      see also sequence points                                     real, 7.12.7, F.10.4
+ordinary identifier name space, 6.2.3                            pp-number, 6.4.8
+orientation of stream, 7.21.2, 7.29.3.5                         pragma operator, 6.10.9
+out-of-bounds store, L.2.1                                      pragma preprocessing directive, 6.10.6, 6.11.8
+outer scope, 6.2.1                                              precedence of operators, 6.5
+over-aligned, 6.2.8                                             precedence of syntax rules, 5.1.1.2
+                                                                precision, 6.2.6.2, 6.3.1.1, 7.21.6.1, 7.29.2.1
+padding                                                            excess, 5.2.4.2.2, 6.3.1.8, 6.8.6.4
+  binary stream, 7.21.2                                         predefined macro names, 6.10.8, 6.11.9
+  bits, 6.2.6.2, 7.20.1.1                                       prefix decrement operator (--), 6.3.2.1, 6.5.3.1
+  structure/union, 6.2.6.1, 6.7.2.1                             prefix increment operator (++), 6.3.2.1, 6.5.3.1
+parameter, 3.16                                                 preprocessing concatenation, 6.10.3.3
+   array, 6.9.1                                                 preprocessing directives, 5.1.1.2, 6.10
+   ellipsis, 6.7.6.3, 6.10.3                                    preprocessing file, 5.1.1.1, 6.10
+   function, 6.5.2.2, 6.7, 6.9.1                                preprocessing numbers, 6.4, 6.4.8
+   macro, 6.10.3                                                preprocessing operators
+   main function, 5.1.2.2.1                                        #, 6.10.3.2
+   program, 5.1.2.2.1                                              ##, 6.10.3.3
+parameter type list, 6.7.6.3                                       _Pragma, 5.1.1.2, 6.10.9
+parentheses punctuator (( )), 6.7.6.3, 6.8.4, 6.8.5                defined, 6.10.1
+parenthesized expression, 6.5.1                                 preprocessing tokens, 5.1.1.2, 6.4, 6.10
+parse state, 7.21.2                                             preprocessing translation unit, 5.1.1.1
+perform a trap, 3.19.5                                          preprocessor, 6.10
+permitted form of initializer, 6.6                              PRIcFASTN macros, 7.8.1
+perror function, 7.21.10.4                                      PRIcLEASTN macros, 7.8.1
+phase angle, complex, 7.3.9.1                                   PRIcMAX macros, 7.8.1
+physical source lines, 5.1.1.2                                  PRIcN macros, 7.8.1
+placemarker, 6.10.3.3                                           PRIcPTR macros, 7.8.1
+plus operator, unary, 6.5.3.3                                   primary expression, 6.5.1
+pointer arithmetic, 6.5.6                                       printf function, 7.21.1, 7.21.6.3, 7.21.6.10,
+pointer comparison, 6.5.8                                             K.3.5.3.3
+pointer declarator, 6.7.6.1                                     printf_s function, K.3.5.3.3
+pointer operator (->), 6.5.2.3                                  printing character, 5.2.2, 7.4, 7.4.1.8
+pointer to function, 6.5.2.2                                    printing wide character, 7.30.2
+pointer type, 6.2.5                                             program diagnostics, 7.2.1
+pointer type conversion, 6.3.2.1, 6.3.2.3                       program execution, 5.1.2.2.2, 5.1.2.3
+pointer, null, 6.3.2.3                                          program file, 5.1.1.1
+pole error, 7.12.1, 7.12.5.3, 7.12.6.7, 7.12.6.8,               program image, 5.1.1.2
+      7.12.6.9, 7.12.6.10, 7.12.6.11, 7.12.7.4,                 program name (argv[0]), 5.1.2.2.1
+      7.12.8.3, 7.12.8.4                                        program parameters, 5.1.2.2.1
 
-[page 670] (Contents)
+[page 674] (Contents)
 
+program startup, 5.1.2, 5.1.2.1, 5.1.2.2.1                   recursion, 6.5.2.2
+program structure, 5.1.1.1                                   recursive function call, 6.5.2.2
+program termination, 5.1.2, 5.1.2.1, 5.1.2.2.3,              redefinition of macro, 6.10.3
+     5.1.2.3                                                 reentrancy, 5.1.2.3, 5.2.3
+program, conforming, 4                                          library functions, 7.1.4
+program, strictly conforming, 4                              referenced type, 6.2.5
+promotions                                                   register storage-class specifier, 6.7.1, 6.9
+  default argument, 6.5.2.2                                  relational expressions, 6.5.8
+  integer, 5.1.2.3, 6.3.1.1                                  relaxed atomic operations, 5.1.2.4
+prototype, see function prototype                            release fence, 7.17.4
+pseudo-random sequence functions, 7.22.2                     release operation, 5.1.2.4
+PTRDIFF_MAX macro, 7.20.3                                    release sequence, 5.1.2.4
+PTRDIFF_MIN macro, 7.20.3                                    reliability of data, interrupted, 5.1.2.3
+ptrdiff_t type, 7.17.1, 7.19, 7.20.3, 7.21.6.1,              remainder assignment operator (%=), 6.5.16.2
+     7.21.6.2, 7.29.2.1, 7.29.2.2                            remainder functions, 7.12.10, F.10.7
+punctuators, 6.4.6                                           remainder functions, 7.12.10.2, 7.12.10.3, F.3,
+putc function, 7.21.1, 7.21.7.7, 7.21.7.8                          F.10.7.2
+putchar function, 7.21.1, 7.21.7.8                           remainder operator (%), 6.2.6.2, 6.5.5
+puts function, 7.21.1, 7.21.7.9                              remainder type-generic macro, 7.25
+putwc function, 7.21.1, 7.29.3.8, 7.29.3.9                   remove function, 7.21.4.1, 7.21.4.4, K.3.5.1.2
+putwchar function, 7.21.1, 7.29.3.9                          remquo functions, 7.12.10.3, F.3, F.10.7.3
+                                                             remquo type-generic macro, 7.25
+qsort function, 7.22.5, 7.22.5.2                             rename function, 7.21.4.2
+qsort_s function, K.3.6.3, K.3.6.3.2                         representations of types, 6.2.6
+qualified types, 6.2.5                                           pointer, 6.2.5
+qualified version of type, 6.2.5                              rescanning and replacement, 6.10.3.4
+question-mark escape sequence (\?), 6.4.4.4                  reserved identifiers, 6.4.1, 7.1.3, K.3.1.2
+quick_exit function, 7.22.4.3, 7.22.4.4,                     restartable multibyte/wide character conversion
+     7.22.4.7                                                      functions, 7.28.1, 7.29.6.3, K.3.9.3.1
+quiet NaN, 5.2.4.2.2                                         restartable multibyte/wide string conversion
+                                                                   functions, 7.29.6.4, K.3.9.3.2
+raise function, 7.14, 7.14.1.1, 7.14.2.1, 7.22.4.1           restore calling environment function, 7.13.2
+rand function, 7.22, 7.22.2.1, 7.22.2.2                      restrict type qualifier, 6.7.3, 6.7.3.1
 RAND_MAX macro, 7.22, 7.22.2.1                               restrict-qualified type, 6.2.5, 6.7.3
 range                                                        return statement, 6.8.6.4, F.6
    excess, 5.2.4.2.2, 6.3.1.8, 6.8.6.4                       rewind function, 7.21.5.3, 7.21.7.10, 7.21.9.5,
-range error, 7.12.1, 7.12.5.4, 7.12.5.5, 7.12.6.1,                 7.28.3.10
+range error, 7.12.1, 7.12.5.4, 7.12.5.5, 7.12.6.1,                 7.29.3.10
       7.12.6.2, 7.12.6.3, 7.12.6.5, 7.12.6.6,                right-shift assignment operator (>>=), 6.5.16.2
       7.12.6.13, 7.12.7.3, 7.12.7.4, 7.12.8.2,               right-shift operator (>>), 6.2.6.2, 6.5.7
       7.12.8.3, 7.12.8.4, 7.12.9.5, 7.12.9.7,                rint functions, 7.12.9.4, F.3, F.10.6.4
-      7.12.11.3, 7.12.12.1, 7.12.13.1                        rint type-generic macro, 7.24
+      7.12.11.3, 7.12.12.1, 7.12.13.1                        rint type-generic macro, 7.25
 rank, see integer conversion rank                            round functions, 7.12.9.6, F.10.6.6
-read-modify-write operations, 5.1.2.4                        round type-generic macro, 7.24
+read-modify-write operations, 5.1.2.4                        round type-generic macro, 7.25
 real floating type conversion, 6.3.1.4, 6.3.1.5,              rounding mode, floating point, 5.2.4.2.2
       6.3.1.7, F.3, F.4                                      RSIZE_MAX macro, K.3.3, K.3.4, K.3.5.1.2,
 real floating types, 6.2.5                                          K.3.5.3.5, K.3.5.3.6, K.3.5.3.12, K.3.5.3.13,
@@ -25907,417 +26173,407 @@ real types, 6.2.5
 real-floating, 7.12.3                                               K.3.7.1.2, K.3.7.1.3, K.3.7.1.4, K.3.7.2.1,
 realloc function, 7.22.3, 7.22.3.5                                 K.3.7.2.2, K.3.7.3.1, K.3.7.4.1, K.3.7.4.2,
 recommended practice, 3.17                                         K.3.8.2.1, K.3.8.2.2, K.3.9.1.3, K.3.9.1.4,
-recursion, 6.5.2.2                                                 K.3.9.1.8, K.3.9.1.9, K.3.9.2.1.1, K.3.9.2.1.2,
-recursive function call, 6.5.2.2                                   K.3.9.2.1.3, K.3.9.2.1.4, K.3.9.2.2.1,
-redefinition of macro, 6.10.3                                       K.3.9.2.2.2, K.3.9.2.3.1, K.3.9.3.1.1,
-reentrancy, 5.1.2.3, 5.2.3                                         K.3.9.3.2.1, K.3.9.3.2.2
-   library functions, 7.1.4                                  rsize_t type, K.3.3, K.3.4, K.3.5, K.3.5.3.2,
-referenced type, 6.2.5                                             K.3.6, K.3.7, K.3.8, K.3.9, K.3.9.1.2
-register storage-class specifier, 6.7.1, 6.9                  runtime-constraint, 3.18
-relational expressions, 6.5.8                                Runtime-constraint handling functions, K.3.6.1
-relaxed atomic operations, 5.1.2.4                           rvalue, 6.3.2.1
-release fence, 7.17.4
-release operation, 5.1.2.4                                   same scope, 6.2.1
-release sequence, 5.1.2.4                                    save calling environment function, 7.13.1
-reliability of data, interrupted, 5.1.2.3                    scalar types, 6.2.5
-remainder assignment operator (%=), 6.5.16.2                 scalbln function, 7.12.6.13, F.3, F.10.3.13
-remainder functions, 7.12.10, F.10.7                         scalbln type-generic macro, 7.24
-remainder functions, 7.12.10.2, 7.12.10.3, F.3,              scalbn function, 7.12.6.13, F.3, F.10.3.13
-      F.10.7.2                                               scalbn type-generic macro, 7.24
-remainder operator (%), 6.2.6.2, 6.5.5                       scanf function, 7.21.1, 7.21.6.4, 7.21.6.11
-remainder type-generic macro, 7.24                           scanf_s function, K.3.5.3.4, K.3.5.3.11
-remove function, 7.21.4.1, 7.21.4.4, K.3.5.1.2               scanlist, 7.21.6.2, 7.28.2.2
-remquo functions, 7.12.10.3, F.3, F.10.7.3                   scanset, 7.21.6.2, 7.28.2.2
-remquo type-generic macro, 7.24                              SCHAR_MAX macro, 5.2.4.2.1
-rename function, 7.21.4.2                                    SCHAR_MIN macro, 5.2.4.2.1
-representations of types, 6.2.6                              SCNcFASTN macros, 7.8.1
-   pointer, 6.2.5                                            SCNcLEASTN macros, 7.8.1
-rescanning and replacement, 6.10.3.4                         SCNcMAX macros, 7.8.1
-reserved identifiers, 6.4.1, 7.1.3, K.3.1.2                   SCNcN macros, 7.8.1
-restartable multibyte/wide character conversion              SCNcPTR macros, 7.8.1
-      functions, 7.27.1, 7.28.6.3, K.3.9.3.1                 scope of identifier, 6.2.1, 6.9.2
-restartable multibyte/wide string conversion                 search functions
-      functions, 7.28.6.4, K.3.9.3.2                           string, 7.23.5, K.3.7.3
-restore calling environment function, 7.13.2                   utility, 7.22.5, K.3.6.3
-restrict type qualifier, 6.7.3, 6.7.3.1                         wide string, 7.28.4.5, K.3.9.2.3
-
-[page 671] (Contents)
-
-SEEK_CUR macro, 7.21.1, 7.21.9.2                                 sign and magnitude, 6.2.6.2
-SEEK_END macro, 7.21.1, 7.21.9.2                                 sign bit, 6.2.6.2
-SEEK_SET macro, 7.21.1, 7.21.9.2                                 signal function, 7.14.1.1, 7.22.4.5, 7.22.4.7
-selection statements, 6.8.4                                      signal handler, 5.1.2.3, 5.2.3, 7.14.1.1, 7.14.2.1
-self-referential structure, 6.7.2.3                              signal handling functions, 7.14.1
-semicolon punctuator (;), 6.7, 6.7.2.1, 6.8.3,                   signal.h header, 7.14, 7.30.6
-      6.8.5, 6.8.6                                               signaling NaN, 5.2.4.2.2, F.2.1
-separate compilation, 5.1.1.1                                    signals, 5.1.2.3, 5.2.3, 7.14.1
-separate translation, 5.1.1.1                                    signbit macro, 7.12.3.6, F.3
-sequence points, 5.1.2.3, 6.5.2.2, 6.5.13, 6.5.14,               signed char type, 6.2.5, 7.21.6.1, 7.21.6.2,
-      6.5.15, 6.5.17, 6.7.3, 6.7.3.1, 6.7.6, 6.8,                     7.28.2.1, 7.28.2.2, K.3.5.3.2, K.3.9.1.2
-      7.1.4, 7.21.6, 7.22.5, 7.28.2, C, K.3.6.3                  signed character, 6.3.1.1
-sequenced after, see sequenced before                            signed integer types, 6.2.5, 6.3.1.3, 6.4.4.1
-sequenced before, 5.1.2.3, 6.5, 6.5.2.2, 6.5.2.4,                signed type conversion, 6.3.1.1, 6.3.1.3, 6.3.1.4,
-      6.5.16, see also indeterminately sequenced,                     6.3.1.8
-      unsequenced                                                signed types, 6.2.5, 6.7.2
-sequencing of statements, 6.8                                    significand part, 6.4.4.2
-set_constraint_handler_s function,                               SIGSEGV macro, 7.14, 7.14.1.1
-      K.3.1.4, K.3.6.1.1, K.3.6.1.2, K.3.6.1.3                   SIGTERM macro, 7.14
-setbuf function, 7.21.3, 7.21.5.1, 7.21.5.5                      simple assignment operator (=), 6.5.16.1
-setjmp macro, 7.1.3, 7.13.1.1, 7.13.2.1                          sin functions, 7.12.4.6, F.10.1.6
-setjmp.h header, 7.13                                            sin type-generic macro, 7.24, G.7
-setlocale function, 7.11.1.1, 7.11.2.1                           single-byte character, 3.7.1, 5.2.1.2
-setvbuf function, 7.21.1, 7.21.3, 7.21.5.1,                      single-byte/wide character conversion functions,
-      7.21.5.5, 7.21.5.6                                              7.28.6.1
-shall, 4                                                         single-precision arithmetic, 5.1.2.3
-shift expressions, 6.5.7                                         single-quote escape sequence (\'), 6.4.4.4, 6.4.5
-shift sequence, 7.1.1                                            singularity, 7.12.1
-shift states, 5.2.1.2                                            sinh functions, 7.12.5.5, F.10.2.5
-short identifier, character, 5.2.4.1, 6.4.3                       sinh type-generic macro, 7.24, G.7
-short int type, 6.2.5, 6.3.1.1, 6.7.2, 7.21.6.1,                 SIZE_MAX macro, 7.20.3
-      7.21.6.2, 7.28.2.1, 7.28.2.2                               size_t type, 6.2.8, 6.5.3.4, 7.19, 7.20.3, 7.21.1,
-short int type conversion, 6.3.1.1, 6.3.1.3,                          7.21.6.1, 7.21.6.2, 7.22, 7.23.1, 7.26.1, 7.27,
-      6.3.1.4, 6.3.1.8                                                7.28.1, 7.28.2.1, 7.28.2.2, K.3.3, K.3.4,
-SHRT_MAX macro, 5.2.4.2.1                                             K.3.5, K.3.6, K.3.7, K.3.8, K.3.9, K.3.9.1.2
-SHRT_MIN macro, 5.2.4.2.1                                        sizeof operator, 6.3.2.1, 6.5.3, 6.5.3.4
-side effects, 5.1.2.3, 6.2.6.1, 6.3.2.2, 6.5, 6.5.2.4,           snprintf function, 7.21.6.5, 7.21.6.12,
-      6.5.16, 6.7.9, 6.8.3, 7.6, 7.6.1, 7.21.7.5,                     K.3.5.3.5
-      7.21.7.7, 7.28.3.6, 7.28.3.8, F.8.1, F.9.1,                snprintf_s function, K.3.5.3.5, K.3.5.3.6
-      F.9.3                                                      snwprintf_s function, K.3.9.1.3, K.3.9.1.4
-SIG_ATOMIC_MAX macro, 7.20.3                                     sorting utility functions, 7.22.5, K.3.6.3
-SIG_ATOMIC_MIN macro, 7.20.3                                     source character set, 5.1.1.2, 5.2.1
-sig_atomic_t type, 5.1.2.3, 7.14, 7.14.1.1,                      source file, 5.1.1.1
-      7.20.3                                                        name, 6.10.4, 6.10.8.1
-SIG_DFL macro, 7.14, 7.14.1.1                                    source file inclusion, 6.10.2
-SIG_ERR macro, 7.14, 7.14.1.1                                    source lines, 5.1.1.2
-SIG_IGN macro, 7.14, 7.14.1.1                                    source text, 5.1.1.2
-SIGABRT macro, 7.14, 7.22.4.1                                    space character (' '), 5.1.1.2, 5.2.1, 6.4, 7.4.1.3,
-SIGFPE macro, 7.12.1, 7.14, 7.14.1.1, J.5.17                          7.4.1.10, 7.29.2.1.3
-SIGILL macro, 7.14, 7.14.1.1                                     sprintf function, 7.21.6.6, 7.21.6.13, K.3.5.3.6
-SIGINT macro, 7.14                                               sprintf_s function, K.3.5.3.5, K.3.5.3.6
-
-[page 672] (Contents)
-
-sqrt functions, 7.12.7.5, F.3, F.10.4.5                         do, 6.8.5.2
-sqrt type-generic macro, 7.24                                   else, 6.8.4.1
-srand function, 7.22.2.2                                        expression, 6.8.3
-sscanf function, 7.21.6.7, 7.21.6.14                            for, 6.8.5.3
-sscanf_s function, K.3.5.3.7, K.3.5.3.14                        goto, 6.8.6.1
-standard error stream, 7.21.1, 7.21.3, 7.21.10.4                if, 6.8.4.1
-standard headers, 4, 7.1.2                                      iteration, 6.8.5
-   <assert.h>, 7.2                                              jump, 6.8.6
-   <complex.h>, 5.2.4.2.2, 6.10.8.3, 7.1.2, 7.3,                labeled, 6.8.1
-        7.24, 7.30.1, G.6, J.5.17                               null, 6.8.3
-   <ctype.h>, 7.4, 7.30.2                                       return, 6.8.6.4, F.6
-   <errno.h>, 7.5, 7.30.3, K.3.2                                selection, 6.8.4
-   <fenv.h>, 5.1.2.3, 5.2.4.2.2, 7.6, 7.12, F, H                sequencing, 6.8
-   <float.h>, 4, 5.2.4.2.2, 7.7, 7.22.1.3,                      switch, 6.8.4.2
-        7.28.4.1.1                                              while, 6.8.5.1
-   <inttypes.h>, 7.8, 7.30.4                                 static assertions, 6.7.10
-   <iso646.h>, 4, 7.9                                        static storage duration, 6.2.4
-   <limits.h>, 4, 5.2.4.2.1, 6.2.5, 7.10                     static storage-class specifier, 6.2.2, 6.2.4, 6.7.1
-   <locale.h>, 7.11, 7.30.5                                  static, in array declarators, 6.7.6.2, 6.7.6.3
-   <math.h>, 5.2.4.2.2, 6.5, 7.12, 7.24, F, F.10,            static_assert declaration, 6.7.10
-        J.5.17                                               static_assert macro, 7.2
-   <setjmp.h>, 7.13                                          stdalign.h header, 4, 7.15
-   <signal.h>, 7.14, 7.30.6                                  stdarg.h header, 4, 6.7.6.3, 7.16
-   <stdalign.h>, 4, 7.15                                     stdatomic.h header, 6.10.8.3, 7.1.2, 7.17
-   <stdarg.h>, 4, 6.7.6.3, 7.16                              stdbool.h header, 4, 7.18, 7.30.7, H
-   <stdatomic.h>, 6.10.8.3, 7.1.2, 7.17                      STDC, 6.10.6, 6.11.8
-   <stdbool.h>, 4, 7.18, 7.30.7, H                           stddef.h header, 4, 6.3.2.1, 6.3.2.3, 6.4.4.4,
-   <stddef.h>, 4, 6.3.2.1, 6.3.2.3, 6.4.4.4,                       6.4.5, 6.5.3.4, 6.5.6, 7.19, K.3.3
-        6.4.5, 6.5.3.4, 6.5.6, 7.19, K.3.3                   stderr macro, 7.21.1, 7.21.2, 7.21.3
-   <stdint.h>, 4, 5.2.4.2, 6.10.1, 7.8, 7.20,                stdin macro, 7.21.1, 7.21.2, 7.21.3, 7.21.6.4,
-        7.30.8, K.3.3, K.3.4                                       7.21.7.6, 7.28.2.12, 7.28.3.7, K.3.5.3.4,
-   <stdio.h>, 5.2.4.2.2, 7.21, 7.30.9, F, K.3.5                    K.3.5.4.1, K.3.9.1.14
-   <stdlib.h>, 5.2.4.2.2, 7.22, 7.30.10, F,                  stdint.h header, 4, 5.2.4.2, 6.10.1, 7.8, 7.20,
-        K.3.1.4, K.3.6                                             7.30.8, K.3.3, K.3.4
-   <string.h>, 7.23, 7.30.11, K.3.7                          stdio.h header, 5.2.4.2.2, 7.21, 7.30.9, F, K.3.5
-   <tgmath.h>, 7.24, G.7                                     stdlib.h header, 5.2.4.2.2, 7.22, 7.30.10, F,
-   <threads.h>, 6.10.8.3, 7.1.2, 7.25                              K.3.1.4, K.3.6
-   <time.h>, 7.26, K.3.8                                     stdout macro, 7.21.1, 7.21.2, 7.21.3, 7.21.6.3,
-   <uchar.h>, 6.4.4.4, 6.4.5, 7.27                                 7.21.7.8, 7.21.7.9, 7.28.2.11, 7.28.3.9
-   <wchar.h>, 5.2.4.2.2, 7.21.1, 7.28, 7.30.12,              storage duration, 6.2.4
-        F, K.3.9                                             storage order of array, 6.5.2.1
-   <wctype.h>, 7.29, 7.30.13                                 storage unit (bit-field), 6.2.6.1, 6.7.2.1
-standard input stream, 7.21.1, 7.21.3                        storage-class specifiers, 6.7.1, 6.11.5
-standard integer types, 6.2.5                                strcat function, 7.23.3.1
-standard output stream, 7.21.1, 7.21.3                       strcat_s function, K.3.7.2.1
-standard signed integer types, 6.2.5                         strchr function, 7.23.5.2
-state-dependent encoding, 5.2.1.2, 7.22.7, K.3.6.4           strcmp function, 7.23.4, 7.23.4.2
-statements, 6.8                                              strcoll function, 7.11.1.1, 7.23.4.3, 7.23.4.5
-   break, 6.8.6.3                                            strcpy function, 7.23.2.3
-   compound, 6.8.2                                           strcpy_s function, K.3.7.1.3
-   continue, 6.8.6.2                                         strcspn function, 7.23.5.3
-
-[page 673] (Contents)
-
-streams, 7.21.2, 7.22.4.4                                                7.22.1.4, 7.28.2.2
-   fully buffered, 7.21.3                                          strtoull function, 7.8.2.3, 7.22.1.2, 7.22.1.4
-   line buffered, 7.21.3                                           strtoumax function, 7.8.2.3
-   orientation, 7.21.2                                             struct hack, see flexible array member
-   standard error, 7.21.1, 7.21.3                                  struct lconv, 7.11
-   standard input, 7.21.1, 7.21.3                                  struct tm, 7.26.1
-   standard output, 7.21.1, 7.21.3                                 structure
-   unbuffered, 7.21.3                                                 arrow operator (->), 6.5.2.3
-strerror function, 7.21.10.4, 7.23.6.2                                content, 6.7.2.3
-strerror_s function, K.3.7.4.2, K.3.7.4.3                             dot operator (.), 6.5.2.3
-strerrorlen_s function, K.3.7.4.3                                     initialization, 6.7.9
-strftime function, 7.11.1.1, 7.26.3, 7.26.3.5,                        member alignment, 6.7.2.1
-      7.28.5.1, K.3.8.2, K.3.8.2.1, K.3.8.2.2                         member name space, 6.2.3
-stricter, 6.2.8                                                       member operator (.), 6.3.2.1, 6.5.2.3
-strictly conforming program, 4                                        pointer operator (->), 6.5.2.3
-string, 7.1.1                                                         specifier, 6.7.2.1
-   comparison functions, 7.23.4                                       tag, 6.2.3, 6.7.2.3
-   concatenation functions, 7.23.3, K.3.7.2                           type, 6.2.5, 6.7.2.1
-   conversion functions, 7.11.1.1                                  strxfrm function, 7.11.1.1, 7.23.4.5
-   copying functions, 7.23.2, K.3.7.1                              subnormal floating-point numbers, 5.2.4.2.2
-   library function conventions, 7.23.1                            subscripting, 6.5.2.1
-   literal, 5.1.1.2, 5.2.1, 6.3.2.1, 6.4.5, 6.5.1, 6.7.9           subtraction assignment operator (-=), 6.5.16.2
-   miscellaneous functions, 7.23.6, K.3.7.4                        subtraction operator (-), 6.2.6.2, 6.5.6, F.3, G.5.2
-   numeric conversion functions, 7.8.2.3, 7.22.1                   suffix
-   search functions, 7.23.5, K.3.7.3                                  floating constant, 6.4.4.2
-string handling header, 7.23, K.3.7                                   integer constant, 6.4.4.1
-string.h header, 7.23, 7.30.11, K.3.7                              switch body, 6.8.4.2
-stringizing, 6.10.3.2, 6.10.9                                      switch case label, 6.8.1, 6.8.4.2
-strlen function, 7.23.6.3                                          switch default label, 6.8.1, 6.8.4.2
-strncat function, 7.23.3.2                                         switch statement, 6.8.1, 6.8.4.2
-strncat_s function, K.3.7.2.2                                      swprintf function, 7.28.2.3, 7.28.2.7,
-strncmp function, 7.23.4, 7.23.4.4                                       K.3.9.1.3, K.3.9.1.4
-strncpy function, 7.23.2.4                                         swprintf_s function, K.3.9.1.3, K.3.9.1.4
-strncpy_s function, K.3.7.1.4                                      swscanf function, 7.28.2.4, 7.28.2.8
-strnlen_s function, K.3.7.4.4                                      swscanf_s function, K.3.9.1.5, K.3.9.1.10
-stronger, 6.2.8                                                    symbols, 3
-strpbrk function, 7.23.5.4                                         synchronization operation, 5.1.2.4
-strrchr function, 7.23.5.5                                         synchronize with, 5.1.2.4
-strspn function, 7.23.5.6                                          syntactic categories, 6.1
-strstr function, 7.23.5.7                                          syntax notation, 6.1
-strtod function, 7.12.11.2, 7.21.6.2, 7.22.1.3,                    syntax rule precedence, 5.1.1.2
-      7.28.2.2, F.3                                                syntax summary, language, A
-strtof function, 7.12.11.2, 7.22.1.3, F.3                          system function, 7.22.4.8
-strtoimax function, 7.8.2.3
-strtok function, 7.23.5.8                                          tab characters, 5.2.1, 6.4
-strtok_s function, K.3.7.3.1                                       tag compatibility, 6.2.7
-strtol function, 7.8.2.3, 7.21.6.2, 7.22.1.2,                      tag name space, 6.2.3
-      7.22.1.4, 7.28.2.2                                           tags, 6.7.2.3
-strtold function, 7.12.11.2, 7.22.1.3, F.3                         tan functions, 7.12.4.7, F.10.1.7
-strtoll function, 7.8.2.3, 7.22.1.2, 7.22.1.4                      tan type-generic macro, 7.24, G.7
-strtoul function, 7.8.2.3, 7.21.6.2, 7.22.1.2,                     tanh functions, 7.12.5.6, F.10.2.6
-
-[page 674] (Contents)
-
-tanh type-generic macro, 7.24, G.7                            toupper function, 7.4.2.2
-temporary lifetime, 6.2.4                                     towctrans function, 7.29.3.2.1, 7.29.3.2.2
-tentative definition, 6.9.2                                    towlower function, 7.29.3.1.1, 7.29.3.2.1
-terms, 3                                                      towupper function, 7.29.3.1.2, 7.29.3.2.1
-text streams, 7.21.2, 7.21.7.10, 7.21.9.2, 7.21.9.4           translation environment, 5, 5.1.1
-tgamma functions, 7.12.8.4, F.10.5.4                          translation limits, 5.2.4.1
-tgamma type-generic macro, 7.24                               translation phases, 5.1.1.2
-tgmath.h header, 7.24, G.7                                    translation unit, 5.1.1.1, 6.9
-thrd_create function, 7.25.1, 7.25.5.1                        trap, see perform a trap
-thrd_current function, 7.25.5.2                               trap representation, 3.19.4, 6.2.6.1, 6.2.6.2,
-thrd_detach function, 7.25.5.3                                      6.3.2.3, 6.5.2.3
-thrd_equal function, 7.25.5.4                                 trigonometric functions
-thrd_exit function, 7.25.5.5                                     complex, 7.3.5, G.6.1
-thrd_join function, 7.25.5.6                                     real, 7.12.4, F.10.1
-thrd_sleep function, 7.25.5.7                                 trigraph sequences, 5.1.1.2, 5.2.1.1
-thrd_start_t type, 7.25.1                                     true macro, 7.18
-thrd_t type, 7.25.1                                           trunc functions, 7.12.9.8, F.10.6.8
-thrd_yield function, 7.25.5.8                                 trunc type-generic macro, 7.24
-thread of execution, 5.1.2.4, 7.1.4, 7.6, 7.22.4.6            truncation, 6.3.1.4, 7.12.9.8, 7.21.3, 7.21.5.3
-thread storage duration, 6.2.4, 7.6                           truncation toward zero, 6.5.5
-threads header, 7.25                                          tss_create function, 7.25.6.1
-threads.h header, 6.10.8.3, 7.1.2, 7.25                       tss_delete function, 7.25.6.2
-time                                                          TSS_DTOR_ITERATIONS macro, 7.25.1
-   broken down, 7.26.1, 7.26.2.3, 7.26.3, 7.26.3.1,           tss_dtor_t type, 7.25.1
-         7.26.3.3, 7.26.3.4, 7.26.3.5, K.3.8.2.1,             tss_get function, 7.25.6.3
-         K.3.8.2.3, K.3.8.2.4                                 tss_set function, 7.25.6.4
-   calendar, 7.26.1, 7.26.2.2, 7.26.2.3, 7.26.2.4,            tss_t type, 7.25.1
-         7.26.3.2, 7.26.3.3, 7.26.3.4, K.3.8.2.2,             two's complement, 6.2.6.2, 7.20.1.1
-         K.3.8.2.3, K.3.8.2.4                                 type category, 6.2.5
-   components, 7.26.1, K.3.8.1                                type conversion, 6.3
-   conversion functions, 7.26.3, K.3.8.2                      type definitions, 6.7.8
-      wide character, 7.28.5                                  type domain, 6.2.5, G.2
-   local, 7.26.1                                              type names, 6.7.7
-   manipulation functions, 7.26.2                             type punning, 6.5.2.3
-   normalized broken down, K.3.8.1, K.3.8.2.1                 type qualifiers, 6.7.3
-time function, 7.26.2.4                                       type specifiers, 6.7.2
-time.h header, 7.26, K.3.8                                    type-generic macro, 7.24, G.7
-time_t type, 7.26.1                                           typedef declaration, 6.7.8
-TIME_UTC macro, 7.25.7.1                                      typedef storage-class specifier, 6.7.1, 6.7.8
-tm structure type, 7.26.1, 7.28.1, K.3.8.1                    types, 6.2.5
-TMP_MAX macro, 7.21.1, 7.21.4.3, 7.21.4.4                        atomic, 5.1.2.3, 6.2.5, 6.2.6.1, 6.3.2.1, 6.5.2.3,
-TMP_MAX_S macro, K.3.5, K.3.5.1.1, K.3.5.1.2                           6.5.2.4, 6.5.16.2, 6.7.2.4, 6.10.8.3, 7.17.6
-tmpfile function, 7.21.4.3, 7.22.4.4                             character, 6.7.9
-tmpfile_s function, K.3.5.1.1, K.3.5.1.2                         compatible, 6.2.7, 6.7.2, 6.7.3, 6.7.6
-tmpnam function, 7.21.1, 7.21.4.3, 7.21.4.4,                     complex, 6.2.5, G
-      K.3.5.1.2                                                  composite, 6.2.7
-tmpnam_s function, K.3.5, K.3.5.1.1, K.3.5.1.2                   const qualified, 6.7.3
-token, 5.1.1.2, 6.4, see also preprocessing tokens               conversions, 6.3
-token concatenation, 6.10.3.3                                    imaginary, G
-token pasting, 6.10.3.3                                          restrict qualified, 6.7.3
-tolower function, 7.4.2.1                                        volatile qualified, 6.7.3
 
 [page 675] (Contents)
 
-uchar.h header, 6.4.4.4, 6.4.5, 7.27                      universal character name, 6.4.3
-UCHAR_MAX macro, 5.2.4.2.1                                unnormalized floating-point numbers, 5.2.4.2.2
-UINT_FASTN_MAX macros, 7.20.2.3                           unqualified type, 6.2.5
-uint_fastN_t types, 7.20.1.3                              unqualified version of type, 6.2.5
-uint_least16_t type, 7.27                                 unsequenced, 5.1.2.3, 6.5, 6.5.16, see also
-uint_least32_t type, 7.27                                       indeterminately sequenced, sequenced
-UINT_LEASTN_MAX macros, 7.20.2.2                                before
-uint_leastN_t types, 7.20.1.2                             unsigned char type, K.3.5.3.2, K.3.9.1.2
-UINT_MAX macro, 5.2.4.2.1                                 unsigned integer suffix, u or U, 6.4.4.1
-UINTMAX_C macro, 7.20.4.2                                 unsigned integer types, 6.2.5, 6.3.1.3, 6.4.4.1
-UINTMAX_MAX macro, 7.8.2.3, 7.8.2.4, 7.20.2.5             unsigned type conversion, 6.3.1.1, 6.3.1.3,
-uintmax_t type, 7.20.1.5, 7.21.6.1, 7.21.6.2,                   6.3.1.4, 6.3.1.8
-     7.28.2.1, 7.28.2.2                                   unsigned types, 6.2.5, 6.7.2, 7.21.6.1, 7.21.6.2,
-UINTN_C macros, 7.20.4.1                                        7.28.2.1, 7.28.2.2
-UINTN_MAX macros, 7.20.2.1                                unspecified behavior, 3.4.4, 4, J.1
-uintN_t types, 7.20.1.1                                   unspecified value, 3.19.3
-UINTPTR_MAX macro, 7.20.2.4                               uppercase letter, 5.2.1
-uintptr_t type, 7.20.1.4                                  use of library functions, 7.1.4
-ULLONG_MAX macro, 5.2.4.2.1, 7.22.1.4,                    USHRT_MAX macro, 5.2.4.2.1
-     7.28.4.1.2                                           usual arithmetic conversions, 6.3.1.8, 6.5.5, 6.5.6,
-ULONG_MAX macro, 5.2.4.2.1, 7.22.1.4,                           6.5.8, 6.5.9, 6.5.10, 6.5.11, 6.5.12, 6.5.15
-     7.28.4.1.2                                           UTF-16, 6.10.8.2
-unary arithmetic operators, 6.5.3.3                       UTF-32, 6.10.8.2
-unary expression, 6.5.3                                   UTF-8 string literal, see string literal
-unary minus operator (-), 6.5.3.3, F.3                    utilities, general, 7.22, K.3.6
-unary operators, 6.5.3                                       wide string, 7.28.4, K.3.9.2
-unary plus operator (+), 6.5.3.3
-unbuffered stream, 7.21.3                                 va_arg macro, 7.16, 7.16.1, 7.16.1.1, 7.16.1.2,
-undef preprocessing directive, 6.10.3.5, 7.1.3,                7.16.1.4, 7.21.6.8, 7.21.6.9, 7.21.6.10,
-     7.1.4                                                     7.21.6.11, 7.21.6.12, 7.21.6.13, 7.21.6.14,
-undefined behavior, 3.4.3, 4, J.2                               7.28.2.5, 7.28.2.6, 7.28.2.7, 7.28.2.8,
-underscore character, 6.4.2.1                                  7.28.2.9, 7.28.2.10, K.3.5.3.9, K.3.5.3.11,
-underscore, leading, in identifier, 7.1.3                       K.3.5.3.14, K.3.9.1.7, K.3.9.1.10, K.3.9.1.12
-ungetc function, 7.21.1, 7.21.7.10, 7.21.9.2,             va_copy macro, 7.1.3, 7.16, 7.16.1, 7.16.1.1,
-     7.21.9.3                                                  7.16.1.2, 7.16.1.3
-ungetwc function, 7.21.1, 7.28.3.10                       va_end macro, 7.1.3, 7.16, 7.16.1, 7.16.1.3,
-Unicode, 7.27, see also char16_t type,                         7.16.1.4, 7.21.6.8, 7.21.6.9, 7.21.6.10,
-     char32_t type, wchar_t type                               7.21.6.11, 7.21.6.12, 7.21.6.13, 7.21.6.14,
-Unicode required set, 6.10.8.2                                 7.28.2.5, 7.28.2.6, 7.28.2.7, 7.28.2.8,
-union                                                          7.28.2.9, 7.28.2.10, K.3.5.3.9, K.3.5.3.11,
-  arrow operator (->), 6.5.2.3                                 K.3.5.3.14, K.3.9.1.7, K.3.9.1.10, K.3.9.1.12
-  content, 6.7.2.3                                        va_list type, 7.16, 7.16.1.3
-  dot operator (.), 6.5.2.3                               va_start macro, 7.16, 7.16.1, 7.16.1.1,
-  initialization, 6.7.9                                        7.16.1.2, 7.16.1.3, 7.16.1.4, 7.21.6.8,
-  member alignment, 6.7.2.1                                    7.21.6.9, 7.21.6.10, 7.21.6.11, 7.21.6.12,
-  member name space, 6.2.3                                     7.21.6.13, 7.21.6.14, 7.28.2.5, 7.28.2.6,
-  member operator (.), 6.3.2.1, 6.5.2.3                        7.28.2.7, 7.28.2.8, 7.28.2.9, 7.28.2.10,
-  pointer operator (->), 6.5.2.3                               K.3.5.3.9, K.3.5.3.11, K.3.5.3.14, K.3.9.1.7,
-  specifier, 6.7.2.1                                            K.3.9.1.10, K.3.9.1.12
-  tag, 6.2.3, 6.7.2.3                                     value, 3.19
-  type, 6.2.5, 6.7.2.1                                    value bits, 6.2.6.2
+     K.3.9.1.8, K.3.9.1.9, K.3.9.2.1.1, K.3.9.2.1.2,                 K.3.1.4, K.3.6.1.1, K.3.6.1.2, K.3.6.1.3
+     K.3.9.2.1.3, K.3.9.2.1.4, K.3.9.2.2.1,                    setbuf function, 7.21.3, 7.21.5.1, 7.21.5.5
+     K.3.9.2.2.2, K.3.9.2.3.1, K.3.9.3.1.1,                    setjmp macro, 7.1.3, 7.13.1.1, 7.13.2.1
+     K.3.9.3.2.1, K.3.9.3.2.2                                  setjmp.h header, 7.13
+rsize_t type, K.3.3, K.3.4, K.3.5, K.3.5.3.2,                  setlocale function, 7.11.1.1, 7.11.2.1
+     K.3.6, K.3.7, K.3.8, K.3.9, K.3.9.1.2                     setvbuf function, 7.21.1, 7.21.3, 7.21.5.1,
+runtime-constraint, 3.18                                             7.21.5.5, 7.21.5.6
+Runtime-constraint handling functions, K.3.6.1                 shall, 4
+rvalue, 6.3.2.1                                                shift expressions, 6.5.7
+                                                               shift sequence, 7.1.1
+same scope, 6.2.1                                              shift states, 5.2.1.2
+save calling environment function, 7.13.1                      short identifier, character, 5.2.4.1, 6.4.3
+scalar types, 6.2.5                                            short int type, 6.2.5, 6.3.1.1, 6.7.2, 7.21.6.1,
+scalbln function, 7.12.6.13, F.3, F.10.3.13                          7.21.6.2, 7.29.2.1, 7.29.2.2
+scalbln type-generic macro, 7.25                               short int type conversion, 6.3.1.1, 6.3.1.3,
+scalbn function, 7.12.6.13, F.3, F.10.3.13                           6.3.1.4, 6.3.1.8
+scalbn type-generic macro, 7.25                                SHRT_MAX macro, 5.2.4.2.1
+scanf function, 7.21.1, 7.21.6.4, 7.21.6.11                    SHRT_MIN macro, 5.2.4.2.1
+scanf_s function, K.3.5.3.4, K.3.5.3.11                        side effects, 5.1.2.3, 6.2.6.1, 6.3.2.2, 6.5, 6.5.2.4,
+scanlist, 7.21.6.2, 7.29.2.2                                         6.5.16, 6.7.9, 6.8.3, 7.6, 7.6.1, 7.21.7.5,
+scanset, 7.21.6.2, 7.29.2.2                                          7.21.7.7, 7.29.3.6, 7.29.3.8, F.8.1, F.9.1,
+SCHAR_MAX macro, 5.2.4.2.1                                           F.9.3
+SCHAR_MIN macro, 5.2.4.2.1                                     SIG_ATOMIC_MAX macro, 7.20.3
+SCNcFASTN macros, 7.8.1                                        SIG_ATOMIC_MIN macro, 7.20.3
+SCNcLEASTN macros, 7.8.1                                       sig_atomic_t type, 5.1.2.3, 7.14, 7.14.1.1,
+SCNcMAX macros, 7.8.1                                                7.20.3
+SCNcN macros, 7.8.1                                            SIG_DFL macro, 7.14, 7.14.1.1
+SCNcPTR macros, 7.8.1                                          SIG_ERR macro, 7.14, 7.14.1.1
+scope of identifier, 6.2.1, 6.9.2                               SIG_IGN macro, 7.14, 7.14.1.1
+search functions                                               SIGABRT macro, 7.14, 7.22.4.1
+   string, 7.24.5, K.3.7.3                                     SIGFPE macro, 7.12.1, 7.14, 7.14.1.1, J.2, J.5.17
+   utility, 7.22.5, K.3.6.3                                    SIGILL macro, 7.14, 7.14.1.1, J.2
+   wide string, 7.29.4.5, K.3.9.2.3                            SIGINT macro, 7.14
+SEEK_CUR macro, 7.21.1, 7.21.9.2                               sign and magnitude, 6.2.6.2
+SEEK_END macro, 7.21.1, 7.21.9.2                               sign bit, 6.2.6.2
+SEEK_SET macro, 7.21.1, 7.21.9.2                               signal function, 7.14.1.1, 7.22.4.5, 7.22.4.7
+selection statements, 6.8.4                                    signal handler, 5.1.2.3, 5.2.3, 7.14.1.1, 7.14.2.1
+self-referential structure, 6.7.2.3                            signal handling functions, 7.14.1
+semicolon punctuator (;), 6.7, 6.7.2.1, 6.8.3,                 signal handling header, 7.14, 7.31.7
+      6.8.5, 6.8.6                                             signal.h header, 7.14, 7.31.7
+separate compilation, 5.1.1.1                                  signaling NaN, 5.2.4.2.2, F.2.1
+separate translation, 5.1.1.1                                  signals, 5.1.2.3, 5.2.3, 7.14.1
+sequence points, 5.1.2.3, 6.5.2.2, 6.5.13, 6.5.14,             signbit macro, 7.12.3.6, F.3
+      6.5.15, 6.5.17, 6.7.3, 6.7.3.1, 6.7.6, 6.8,              signed char type, 6.2.5, 7.21.6.1, 7.21.6.2,
+      7.1.4, 7.21.6, 7.22.5, 7.29.2, C, K.3.6.3                      7.29.2.1, 7.29.2.2, K.3.5.3.2, K.3.9.1.2
+sequenced after, see sequenced before                          signed character, 6.3.1.1
+sequenced before, 5.1.2.3, 6.5, 6.5.2.2, 6.5.2.4,              signed integer types, 6.2.5, 6.3.1.3, 6.4.4.1
+      6.5.16, see also indeterminately sequenced,              signed type conversion, 6.3.1.1, 6.3.1.3, 6.3.1.4,
+      unsequenced                                                    6.3.1.8
+sequencing of statements, 6.8                                  signed types, 6.2.5, 6.7.2
+set_constraint_handler_s function,                             significand part, 6.4.4.2
 
 [page 676] (Contents)
 
-variable arguments, 6.10.3, 7.16                             vswscanf function, 7.28.2.8
-variable arguments header, 7.16                              vswscanf_s function, K.3.9.1.10
-variable length array, 6.7.6, 6.7.6.2, 6.10.8.3              vwprintf function, 7.21.1, 7.28.2.9, K.3.9.1.11
-variably modified type, 6.7.6, 6.7.6.2, 6.10.8.3              vwprintf_s function, K.3.9.1.11
-vertical-tab character, 5.2.1, 6.4                           vwscanf function, 7.21.1, 7.28.2.10, 7.28.3.10
-vertical-tab escape sequence (\v), 5.2.2, 6.4.4.4,           vwscanf_s function, K.3.9.1.12
-     7.4.1.10
-vfprintf function, 7.21.1, 7.21.6.8, K.3.5.3.8               warnings, I
-vfprintf_s function, K.3.5.3.8, K.3.5.3.9,                   wchar.h header, 5.2.4.2.2, 7.21.1, 7.28, 7.30.12,
-     K.3.5.3.11, K.3.5.3.14                                      F, K.3.9
-vfscanf function, 7.21.1, 7.21.6.8, 7.21.6.9                 WCHAR_MAX macro, 7.20.3, 7.28.1
-vfscanf_s function, K.3.5.3.9, K.3.5.3.11,                   WCHAR_MIN macro, 7.20.3, 7.28.1
-     K.3.5.3.14                                              wchar_t type, 3.7.3, 6.4.5, 6.7.9, 6.10.8.2, 7.19,
-vfwprintf function, 7.21.1, 7.28.2.5, K.3.9.1.6                  7.20.3, 7.21.6.1, 7.21.6.2, 7.22, 7.28.1,
-vfwprintf_s function, K.3.9.1.6                                  7.28.2.1, 7.28.2.2
-vfwscanf function, 7.21.1, 7.28.2.6, 7.28.3.10               wcrtomb function, 7.21.3, 7.21.6.2, 7.28.2.2,
-vfwscanf_s function, K.3.9.1.7                                   7.28.6.3.3, 7.28.6.4.2, K.3.6.5.2, K.3.9.3.1,
-visibility of identifier, 6.2.1                                   K.3.9.3.2.2
-visible sequence of side effects, 5.1.2.4                    wcrtomb_s function, K.3.9.3.1, K.3.9.3.1.1
-visible side effect, 5.1.2.4                                 wcscat function, 7.28.4.3.1
-VLA, see variable length array                               wcscat_s function, K.3.9.2.2.1
-void expression, 6.3.2.2                                     wcschr function, 7.28.4.5.1
-void function parameter, 6.7.6.3                             wcscmp function, 7.28.4.4.1, 7.28.4.4.4
-void type, 6.2.5, 6.3.2.2, 6.7.2, K.3.5.3.2,                 wcscoll function, 7.28.4.4.2, 7.28.4.4.4
-     K.3.9.1.2                                               wcscpy function, 7.28.4.2.1
-void type conversion, 6.3.2.2                                wcscpy_s function, K.3.9.2.1.1
-volatile storage, 5.1.2.3                                    wcscspn function, 7.28.4.5.2
-volatile type qualifier, 6.7.3                                wcsftime function, 7.11.1.1, 7.28.5.1
-volatile-qualified type, 6.2.5, 6.7.3                         wcslen function, 7.28.4.6.1
-vprintf function, 7.21.1, 7.21.6.8, 7.21.6.10,               wcsncat function, 7.28.4.3.2
-     K.3.5.3.10                                              wcsncat_s function, K.3.9.2.2.2
-vprintf_s function, K.3.5.3.9, K.3.5.3.10,                   wcsncmp function, 7.28.4.4.3
-     K.3.5.3.11, K.3.5.3.14                                  wcsncpy function, 7.28.4.2.2
-vscanf function, 7.21.1, 7.21.6.8, 7.21.6.11                 wcsncpy_s function, K.3.9.2.1.2
-vscanf_s function, K.3.5.3.9, K.3.5.3.11,                    wcsnlen_s function, K.3.9.2.4.1
-     K.3.5.3.14                                              wcspbrk function, 7.28.4.5.3
-vsnprintf function, 7.21.6.8, 7.21.6.12,                     wcsrchr function, 7.28.4.5.4
-     K.3.5.3.12                                              wcsrtombs function, 7.28.6.4.2, K.3.9.3.2
-vsnprintf_s function, K.3.5.3.9, K.3.5.3.11,                 wcsrtombs_s function, K.3.9.3.2, K.3.9.3.2.2
-     K.3.5.3.12, K.3.5.3.13, K.3.5.3.14                      wcsspn function, 7.28.4.5.5
-vsnwprintf_s function, K.3.9.1.8, K.3.9.1.9                  wcsstr function, 7.28.4.5.6
-vsprintf function, 7.21.6.8, 7.21.6.13,                      wcstod function, 7.21.6.2, 7.28.2.2
-     K.3.5.3.13                                              wcstod function, 7.28.4.1.1
-vsprintf_s function, K.3.5.3.9, K.3.5.3.11,                  wcstof function, 7.28.4.1.1
-     K.3.5.3.12, K.3.5.3.13, K.3.5.3.14                      wcstoimax function, 7.8.2.4
-vsscanf function, 7.21.6.8, 7.21.6.14                        wcstok function, 7.28.4.5.7
-vsscanf_s function, K.3.5.3.9, K.3.5.3.11,                   wcstok_s function, K.3.9.2.3.1
-     K.3.5.3.14                                              wcstol function, 7.8.2.4, 7.21.6.2, 7.28.2.2,
-vswprintf function, 7.28.2.7, K.3.9.1.8,                         7.28.4.1.2
-     K.3.9.1.9                                               wcstold function, 7.28.4.1.1
-vswprintf_s function, K.3.9.1.8, K.3.9.1.9                   wcstoll function, 7.8.2.4, 7.28.4.1.2
+SIGSEGV macro, 7.14, 7.14.1.1, J.2                                <inttypes.h>, 7.8, 7.31.5
+SIGTERM macro, 7.14                                               <iso646.h>, 4, 7.9
+simple assignment operator (=), 6.5.16.1                          <limits.h>, 4, 5.2.4.2.1, 6.2.5, 7.10
+sin functions, 7.12.4.6, F.10.1.6                                 <locale.h>, 7.11, 7.31.6
+sin type-generic macro, 7.25, G.7                                 <math.h>, 5.2.4.2.2, 6.5, 7.12, 7.25, F, F.10,
+single-byte character, 3.7.1, 5.2.1.2                                   J.5.17
+single-byte/wide character conversion functions,                  <setjmp.h>, 7.13
+     7.29.6.1                                                     <signal.h>, 7.14, 7.31.7
+single-precision arithmetic, 5.1.2.3                              <stdalign.h>, 4, 7.15
+single-quote escape sequence (\'), 6.4.4.4, 6.4.5                 <stdarg.h>, 4, 6.7.6.3, 7.16
+singularity, 7.12.1                                               <stdatomic.h>, 6.10.8.3, 7.1.2, 7.17,
+sinh functions, 7.12.5.5, F.10.2.5                                      7.31.8
+sinh type-generic macro, 7.25, G.7                                <stdbool.h>, 4, 7.18, 7.31.9, H
+SIZE_MAX macro, 7.20.3                                            <stddef.h>, 4, 6.3.2.1, 6.3.2.3, 6.4.4.4,
+size_t type, 6.2.8, 6.5.3.4, 7.19, 7.20.3, 7.21.1,                      6.4.5, 6.5.3.4, 6.5.6, 7.19, K.3.3
+     7.21.6.1, 7.21.6.2, 7.22, 7.24.1, 7.27.1, 7.28,              <stdint.h>, 4, 5.2.4.2, 6.10.1, 7.8, 7.20,
+     7.29.1, 7.29.2.1, 7.29.2.2, K.3.3, K.3.4,                          7.31.10, K.3.3, K.3.4
+     K.3.5, K.3.6, K.3.7, K.3.8, K.3.9, K.3.9.1.2                 <stdio.h>, 5.2.4.2.2, 7.21, 7.31.11, F, K.3.5
+sizeof operator, 6.3.2.1, 6.5.3, 6.5.3.4                          <stdlib.h>, 5.2.4.2.2, 7.22, 7.31.12, F,
+sizes of integer types header, 7.10                                     K.3.1.4, K.3.6
+snprintf function, 7.21.6.5, 7.21.6.12,                           <stdnoreturn.h>, 4, 7.23
+     K.3.5.3.5                                                    <string.h>, 7.24, 7.31.13, K.3.7
+snprintf_s function, K.3.5.3.5, K.3.5.3.6                         <tgmath.h>, 7.25, G.7
+snwprintf_s function, K.3.9.1.3, K.3.9.1.4                        <threads.h>, 6.10.8.3, 7.1.2, 7.26, 7.31.15
+sorting utility functions, 7.22.5, K.3.6.3                        <time.h>, 7.26.1, 7.27, 7.31.14, K.3.8
+source character set, 5.1.1.2, 5.2.1                              <uchar.h>, 6.4.4.4, 6.4.5, 7.28
+source file, 5.1.1.1                                               <wchar.h>, 5.2.4.2.2, 7.21.1, 7.29, 7.31.16,
+   name, 6.10.4, 6.10.8.1                                               F, K.3.9
+source file inclusion, 6.10.2                                      <wctype.h>, 7.30, 7.31.17
+source lines, 5.1.1.2                                          standard input stream, 7.21.1, 7.21.3
+source text, 5.1.1.2                                           standard integer types, 6.2.5
+space character (' '), 5.1.1.2, 5.2.1, 6.4, 7.4.1.3,           standard output stream, 7.21.1, 7.21.3
+     7.4.1.10, 7.30.2.1.3                                      standard signed integer types, 6.2.5
+sprintf function, 7.21.6.6, 7.21.6.13, K.3.5.3.6               state-dependent encoding, 5.2.1.2, 7.22.7, K.3.6.4
+sprintf_s function, K.3.5.3.5, K.3.5.3.6                       statements, 6.8
+sqrt functions, 7.12.7.5, F.3, F.10.4.5                           break, 6.8.6.3
+sqrt type-generic macro, 7.25                                     compound, 6.8.2
+srand function, 7.22.2.2                                          continue, 6.8.6.2
+sscanf function, 7.21.6.7, 7.21.6.14                              do, 6.8.5.2
+sscanf_s function, K.3.5.3.7, K.3.5.3.14                          else, 6.8.4.1
+standard error stream, 7.21.1, 7.21.3, 7.21.10.4                  expression, 6.8.3
+standard headers, 4, 7.1.2                                        for, 6.8.5.3
+   <assert.h>, 7.2                                                goto, 6.8.6.1
+   <complex.h>, 5.2.4.2.2, 6.10.8.3, 7.1.2, 7.3,                  if, 6.8.4.1
+        7.25, 7.31.1, G.6, J.5.17                                 iteration, 6.8.5
+   <ctype.h>, 7.4, 7.31.2                                         jump, 6.8.6
+   <errno.h>, 7.5, 7.31.3, K.3.2                                  labeled, 6.8.1
+   <fenv.h>, 5.1.2.3, 5.2.4.2.2, 7.6, 7.12,                       null, 6.8.3
+        7.31.4, F, H                                              return, 6.8.6.4, F.6
+   <float.h>, 4, 5.2.4.2.2, 7.7, 7.22.1.3,                        selection, 6.8.4
+        7.29.4.1.1                                                sequencing, 6.8
 
 [page 677] (Contents)
 
-wcstombs function, 7.22.8.2, 7.28.6.4                           7.29.1
-wcstombs_s function, K.3.6.5.2                               wmemchr function, 7.28.4.5.8
-wcstoul function, 7.8.2.4, 7.21.6.2, 7.28.2.2,               wmemcmp function, 7.28.4.4.5
-     7.28.4.1.2                                              wmemcpy function, 7.28.4.2.3
-wcstoull function, 7.8.2.4, 7.28.4.1.2                       wmemcpy_s function, K.3.9.2.1.3
-wcstoumax function, 7.8.2.4                                  wmemmove function, 7.28.4.2.4
-wcsxfrm function, 7.28.4.4.4                                 wmemmove_s function, K.3.9.2.1.4
-wctob function, 7.28.6.1.2, 7.29.2.1                         wmemset function, 7.28.4.6.2
-wctomb function, 7.22.7.3, 7.22.8.2, 7.28.6.3                wprintf function, 7.21.1, 7.28.2.9, 7.28.2.11,
-wctomb_s function, K.3.6.4.1                                    K.3.9.1.13
-wctrans function, 7.29.3.2.1, 7.29.3.2.2                     wprintf_s function, K.3.9.1.13
-wctrans_t type, 7.29.1, 7.29.3.2.2                           wscanf function, 7.21.1, 7.28.2.10, 7.28.2.12,
-wctype function, 7.29.2.2.1, 7.29.2.2.2                         7.28.3.10
-wctype.h header, 7.29, 7.30.13                               wscanf_s function, K.3.9.1.12, K.3.9.1.14
-wctype_t type, 7.29.1, 7.29.2.2.2
-weaker, 6.2.8                                                xor macro, 7.9
-WEOF macro, 7.28.1, 7.28.3.1, 7.28.3.3, 7.28.3.6,            xor_eq macro, 7.9
-     7.28.3.7, 7.28.3.8, 7.28.3.9, 7.28.3.10,                xtime type, 7.25.1, 7.25.3.5, 7.25.4.4, 7.25.5.7,
-     7.28.6.1.1, 7.29.1                                          7.25.7.1
-while statement, 6.8.5.1                                     xtime_get function, 7.25.7.1
-white space, 5.1.1.2, 6.4, 6.10, 7.4.1.10,
-     7.29.2.1.10
-white-space characters, 6.4
-wide character, 3.7.3
-  case mapping functions, 7.29.3.1
-     extensible, 7.29.3.2
-  classification functions, 7.29.2.1
-     extensible, 7.29.2.2
-  constant, 6.4.4.4
-  formatted input/output functions, 7.28.2,
-        K.3.9.1
-  input functions, 7.21.1
-  input/output functions, 7.21.1, 7.28.3
-  output functions, 7.21.1
-  single-byte conversion functions, 7.28.6.1
-wide string, 7.1.1
-wide string comparison functions, 7.28.4.4
-wide string concatenation functions, 7.28.4.3,
-     K.3.9.2.2
-wide string copying functions, 7.28.4.2, K.3.9.2.1
-wide string literal, see string literal
-wide string miscellaneous functions, 7.28.4.6,
-     K.3.9.2.4
-wide string numeric conversion functions, 7.8.2.4,
-     7.28.4.1
-wide string search functions, 7.28.4.5, K.3.9.2.3
-wide-oriented stream, 7.21.2
-width, 6.2.6.2
-WINT_MAX macro, 7.20.3
-WINT_MIN macro, 7.20.3
-wint_t type, 7.20.3, 7.21.6.1, 7.28.1, 7.28.2.1,
+   switch, 6.8.4.2                                           strerrorlen_s function, K.3.7.4.3
+   while, 6.8.5.1                                            strftime function, 7.11.1.1, 7.27.3, 7.27.3.5,
+static assertions, 6.7.10                                          7.29.5.1, K.3.8.2, K.3.8.2.1, K.3.8.2.2
+static storage duration, 6.2.4                               stricter, 6.2.8
+static storage-class specifier, 6.2.2, 6.2.4, 6.7.1           strictly conforming program, 4
+static, in array declarators, 6.7.6.2, 6.7.6.3               string, 7.1.1
+static_assert declaration, 6.7.10                               comparison functions, 7.24.4
+static_assert macro, 7.2                                        concatenation functions, 7.24.3, K.3.7.2
+stdalign.h header, 4, 7.15                                      conversion functions, 7.11.1.1
+stdarg.h header, 4, 6.7.6.3, 7.16                               copying functions, 7.24.2, K.3.7.1
+stdatomic.h header, 6.10.8.3, 7.1.2, 7.17,                      library function conventions, 7.24.1
+      7.31.8                                                    literal, 5.1.1.2, 5.2.1, 6.3.2.1, 6.4.5, 6.5.1, 6.7.9
+stdbool.h header, 4, 7.18, 7.31.9, H                            miscellaneous functions, 7.24.6, K.3.7.4
+STDC, 6.10.6, 6.11.8                                            numeric conversion functions, 7.8.2.3, 7.22.1
+stddef.h header, 4, 6.3.2.1, 6.3.2.3, 6.4.4.4,                  search functions, 7.24.5, K.3.7.3
+      6.4.5, 6.5.3.4, 6.5.6, 7.19, K.3.3                     string handling header, 7.24, 7.31.13, K.3.7
+stderr macro, 7.21.1, 7.21.2, 7.21.3                         string.h header, 7.24, 7.31.13, K.3.7
+stdin macro, 7.21.1, 7.21.2, 7.21.3, 7.21.6.4,               stringizing, 6.10.3.2, 6.10.9
+      7.21.7.6, 7.29.2.12, 7.29.3.7, K.3.5.3.4,              strlen function, 7.24.6.3
+      K.3.5.4.1, K.3.9.1.14                                  strncat function, 7.24.3.2
+stdint.h header, 4, 5.2.4.2, 6.10.1, 7.8, 7.20,              strncat_s function, K.3.7.2.2
+      7.31.10, K.3.3, K.3.4                                  strncmp function, 7.24.4, 7.24.4.4
+stdio.h header, 5.2.4.2.2, 7.21, 7.31.11, F,                 strncpy function, 7.24.2.4
+      K.3.5                                                  strncpy_s function, K.3.7.1.4
+stdlib.h header, 5.2.4.2.2, 7.22, 7.31.12, F,                strnlen_s function, K.3.7.4.4
+      K.3.1.4, K.3.6                                         stronger, 6.2.8
+stdnoreturn.h header, 4, 7.23                                strpbrk function, 7.24.5.4
+stdout macro, 7.21.1, 7.21.2, 7.21.3, 7.21.6.3,              strrchr function, 7.24.5.5
+      7.21.7.8, 7.21.7.9, 7.29.2.11, 7.29.3.9                strspn function, 7.24.5.6
+storage duration, 6.2.4                                      strstr function, 7.24.5.7
+storage order of array, 6.5.2.1                              strtod function, 7.12.11.2, 7.21.6.2, 7.22.1.3,
+storage unit (bit-field), 6.2.6.1, 6.7.2.1                          7.29.2.2, F.3
+storage-class specifiers, 6.7.1, 6.11.5                       strtof function, 7.12.11.2, 7.22.1.3, F.3
+strcat function, 7.24.3.1                                    strtoimax function, 7.8.2.3
+strcat_s function, K.3.7.2.1                                 strtok function, 7.24.5.8
+strchr function, 7.24.5.2                                    strtok_s function, K.3.7.3.1
+strcmp function, 7.24.4, 7.24.4.2                            strtol function, 7.8.2.3, 7.21.6.2, 7.22.1.2,
+strcoll function, 7.11.1.1, 7.24.4.3, 7.24.4.5                     7.22.1.4, 7.29.2.2
+strcpy function, 7.24.2.3                                    strtold function, 7.12.11.2, 7.22.1.3, F.3
+strcpy_s function, K.3.7.1.3                                 strtoll function, 7.8.2.3, 7.22.1.2, 7.22.1.4
+strcspn function, 7.24.5.3                                   strtoul function, 7.8.2.3, 7.21.6.2, 7.22.1.2,
+streams, 7.21.2, 7.22.4.4                                          7.22.1.4, 7.29.2.2
+   fully buffered, 7.21.3                                    strtoull function, 7.8.2.3, 7.22.1.2, 7.22.1.4
+   line buffered, 7.21.3                                     strtoumax function, 7.8.2.3
+   orientation, 7.21.2                                       struct hack, see flexible array member
+   standard error, 7.21.1, 7.21.3                            struct lconv, 7.11
+   standard input, 7.21.1, 7.21.3                            struct timespec, 7.27.1
+   standard output, 7.21.1, 7.21.3                           struct tm, 7.27.1
+   unbuffered, 7.21.3                                        structure
+strerror function, 7.21.10.4, 7.24.6.2                          arrow operator (->), 6.5.2.3
+strerror_s function, K.3.7.4.2, K.3.7.4.3                       content, 6.7.2.3
 
 [page 678] (Contents)
+
+  dot operator (.), 6.5.2.3                                    thrd_current function, 7.26.5.2
+  initialization, 6.7.9                                        thrd_detach function, 7.26.5.3
+  member alignment, 6.7.2.1                                    thrd_equal function, 7.26.5.4
+  member name space, 6.2.3                                     thrd_exit function, 7.26.5.5
+  member operator (.), 6.3.2.1, 6.5.2.3                        thrd_join function, 7.26.5.6
+  pointer operator (->), 6.5.2.3                               thrd_sleep function, 7.26.5.7
+  specifier, 6.7.2.1                                            thrd_start_t type, 7.26.1
+  tag, 6.2.3, 6.7.2.3                                          thrd_t type, 7.26.1
+  type, 6.2.5, 6.7.2.1                                         thrd_yield function, 7.26.5.8
+strxfrm function, 7.11.1.1, 7.24.4.5                           thread of execution, 5.1.2.4, 7.1.4, 7.6, 7.22.4.6,
+subnormal floating-point numbers, 5.2.4.2.2                          K.3.6.2.1
+subscripting, 6.5.2.1                                          thread storage duration, 6.2.4, 7.6
+subtraction assignment operator (-=), 6.5.16.2                 threads header, 7.26, 7.31.15
+subtraction operator (-), 6.2.6.2, 6.5.6, F.3, G.5.2           threads.h header, 6.10.8.3, 7.1.2, 7.26,
+suffix                                                                7.31.15
+  floating constant, 6.4.4.2                                    time
+  integer constant, 6.4.4.1                                       broken down, 7.27.1, 7.27.2.3, 7.27.3, 7.27.3.1,
+switch body, 6.8.4.2                                                   7.27.3.3, 7.27.3.4, 7.27.3.5, K.3.8.2.1,
+switch case label, 6.8.1, 6.8.4.2                                       K.3.8.2.3, K.3.8.2.4
+switch default label, 6.8.1, 6.8.4.2                              calendar, 7.27.1, 7.27.2.2, 7.27.2.3, 7.27.2.4,
+switch statement, 6.8.1, 6.8.4.2                                        7.27.3.2, 7.27.3.3, 7.27.3.4, K.3.8.2.2,
+swprintf function, 7.29.2.3, 7.29.2.7,                                  K.3.8.2.3, K.3.8.2.4
+     K.3.9.1.3, K.3.9.1.4                                         components, 7.27.1, K.3.8.1
+swprintf_s function, K.3.9.1.3, K.3.9.1.4                         conversion functions, 7.27.3, K.3.8.2
+swscanf function, 7.29.2.4, 7.29.2.8                                 wide character, 7.29.5
+swscanf_s function, K.3.9.1.5, K.3.9.1.10                         local, 7.27.1
+symbols, 3                                                        manipulation functions, 7.27.2
+synchronization operation, 5.1.2.4                                normalized broken down, K.3.8.1, K.3.8.2.1
+synchronize with, 5.1.2.4                                      time base, 7.27.1, 7.27.2.5
+syntactic categories, 6.1                                      time function, 7.27.2.4
+syntax notation, 6.1                                           time.h header, 7.26.1, 7.27, 7.31.14, K.3.8
+syntax rule precedence, 5.1.1.2                                time_t type, 7.27.1
+syntax summary, language, A                                    TIME_UTC macro, 7.26.3.5, 7.26.4.4, 7.26.5.7,
+system function, 7.22.4.8                                           7.27.1, 7.27.2.5
+                                                               timespec structure type, 7.27.1
+tab characters, 5.2.1, 6.4                                     timespec_get function, 7.27.2.5
+tag compatibility, 6.2.7                                       tm structure type, 7.27.1, 7.29.1, K.3.8.1
+tag name space, 6.2.3                                          TMP_MAX macro, 7.21.1, 7.21.4.3, 7.21.4.4
+tags, 6.7.2.3                                                  TMP_MAX_S macro, K.3.5, K.3.5.1.1, K.3.5.1.2
+tan functions, 7.12.4.7, F.10.1.7                              tmpfile function, 7.21.4.3, 7.22.4.4
+tan type-generic macro, 7.25, G.7                              tmpfile_s function, K.3.5.1.1, K.3.5.1.2
+tanh functions, 7.12.5.6, F.10.2.6                             tmpnam function, 7.21.1, 7.21.4.3, 7.21.4.4,
+tanh type-generic macro, 7.25, G.7                                   K.3.5.1.2
+temporary lifetime, 6.2.4                                      tmpnam_s function, K.3.5, K.3.5.1.1, K.3.5.1.2
+tentative definition, 6.9.2                                     token, 5.1.1.2, 6.4, see also preprocessing tokens
+terms, 3                                                       token concatenation, 6.10.3.3
+text streams, 7.21.2, 7.21.7.10, 7.21.9.2, 7.21.9.4            token pasting, 6.10.3.3
+tgamma functions, 7.12.8.4, F.10.5.4                           tolower function, 7.4.2.1
+tgamma type-generic macro, 7.25                                toupper function, 7.4.2.2
+tgmath.h header, 7.25, G.7                                     towctrans function, 7.30.3.2.1, 7.30.3.2.2
+thrd_create function, 7.26.1, 7.26.5.1                         towlower function, 7.30.3.1.1, 7.30.3.2.1
+
+[page 679] (Contents)
+
+towupper function, 7.30.3.1.2, 7.30.3.2.1                       UCHAR_MAX macro, 5.2.4.2.1
+translation environment, 5, 5.1.1                               UINT_FASTN_MAX macros, 7.20.2.3
+translation limits, 5.2.4.1                                     uint_fastN_t types, 7.20.1.3
+translation phases, 5.1.1.2                                     uint_least16_t type, 7.28
+translation unit, 5.1.1.1, 6.9                                  uint_least32_t type, 7.28
+trap, see perform a trap                                        UINT_LEASTN_MAX macros, 7.20.2.2
+trap representation, 3.19.4, 6.2.6.1, 6.2.6.2,                  uint_leastN_t types, 7.20.1.2
+      6.3.2.3, 6.5.2.3                                          UINT_MAX macro, 5.2.4.2.1
+trigonometric functions                                         UINTMAX_C macro, 7.20.4.2
+   complex, 7.3.5, G.6.1                                        UINTMAX_MAX macro, 7.8.2.3, 7.8.2.4, 7.20.2.5
+   real, 7.12.4, F.10.1                                         uintmax_t type, 7.20.1.5, 7.21.6.1, 7.21.6.2,
+trigraph sequences, 5.1.1.2, 5.2.1.1                                 7.29.2.1, 7.29.2.2
+true macro, 7.18                                                UINTN_C macros, 7.20.4.1
+trunc functions, 7.12.9.8, F.10.6.8                             UINTN_MAX macros, 7.20.2.1
+trunc type-generic macro, 7.25                                  uintN_t types, 7.20.1.1
+truncation, 6.3.1.4, 7.12.9.8, 7.21.3, 7.21.5.3                 UINTPTR_MAX macro, 7.20.2.4
+truncation toward zero, 6.5.5                                   uintptr_t type, 7.20.1.4
+tss_create function, 7.26.6.1                                   ULLONG_MAX macro, 5.2.4.2.1, 7.22.1.4,
+tss_delete function, 7.26.6.2                                        7.29.4.1.2
+TSS_DTOR_ITERATIONS macro, 7.26.1                               ULONG_MAX macro, 5.2.4.2.1, 7.22.1.4,
+tss_dtor_t type, 7.26.1                                              7.29.4.1.2
+tss_get function, 7.26.6.3                                      unary arithmetic operators, 6.5.3.3
+tss_set function, 7.26.6.4                                      unary expression, 6.5.3
+tss_t type, 7.26.1                                              unary minus operator (-), 6.5.3.3, F.3
+two's complement, 6.2.6.2, 7.20.1.1                             unary operators, 6.5.3
+type category, 6.2.5                                            unary plus operator (+), 6.5.3.3
+type conversion, 6.3                                            unbuffered stream, 7.21.3
+type definitions, 6.7.8                                          undef preprocessing directive, 6.10.3.5, 7.1.3,
+type domain, 6.2.5, G.2                                              7.1.4
+type names, 6.7.7                                               undefined behavior, 3.4.3, 4, J.2
+type punning, 6.5.2.3                                           underscore character, 6.4.2.1
+type qualifiers, 6.7.3                                           underscore, leading, in identifier, 7.1.3
+type specifiers, 6.7.2                                           ungetc function, 7.21.1, 7.21.7.10, 7.21.9.2,
+type-generic macro, 7.25, G.7                                        7.21.9.3
+type-generic math header, 7.25                                  ungetwc function, 7.21.1, 7.29.3.10
+typedef declaration, 6.7.8                                      Unicode, 7.28, see also char16_t type,
+typedef storage-class specifier, 6.7.1, 6.7.8                         char32_t type, wchar_t type
+types, 6.2.5                                                    Unicode required set, 6.10.8.2
+   atomic, 5.1.2.3, 6.2.5, 6.2.6.1, 6.3.2.1, 6.5.2.3,           unicode utilities header, 7.28
+         6.5.2.4, 6.5.16.2, 6.7.2.4, 6.10.8.3, 7.17.6           union
+   character, 6.7.9                                               arrow operator (->), 6.5.2.3
+   compatible, 6.2.7, 6.7.2, 6.7.3, 6.7.6                         content, 6.7.2.3
+   complex, 6.2.5, G                                              dot operator (.), 6.5.2.3
+   composite, 6.2.7                                               initialization, 6.7.9
+   const qualified, 6.7.3                                          member alignment, 6.7.2.1
+   conversions, 6.3                                               member name space, 6.2.3
+   imaginary, G                                                   member operator (.), 6.3.2.1, 6.5.2.3
+   restrict qualified, 6.7.3                                       pointer operator (->), 6.5.2.3
+   volatile qualified, 6.7.3                                       specifier, 6.7.2.1
+                                                                  tag, 6.2.3, 6.7.2.3
+uchar.h header, 6.4.4.4, 6.4.5, 7.28                              type, 6.2.5, 6.7.2.1
+
+[page 680] (Contents)
+
+universal character name, 6.4.3                                value bits, 6.2.6.2
+unnormalized floating-point numbers, 5.2.4.2.2                  variable arguments, 6.10.3
+unqualified type, 6.2.5                                         variable arguments header, 7.16
+unqualified version of type, 6.2.5                              variable length array, 6.7.6, 6.7.6.2, 6.10.8.3
+unsequenced, 5.1.2.3, 6.5, 6.5.16, see also                    variably modified type, 6.7.6, 6.7.6.2, 6.10.8.3
+      indeterminately sequenced, sequenced                     vertical-tab character, 5.2.1, 6.4
+      before                                                   vertical-tab escape sequence (\v), 5.2.2, 6.4.4.4,
+unsigned char type, K.3.5.3.2, K.3.9.1.2                            7.4.1.10
+unsigned integer suffix, u or U, 6.4.4.1                        vfprintf function, 7.21.1, 7.21.6.8, K.3.5.3.8
+unsigned integer types, 6.2.5, 6.3.1.3, 6.4.4.1                vfprintf_s function, K.3.5.3.8, K.3.5.3.9,
+unsigned type conversion, 6.3.1.1, 6.3.1.3,                         K.3.5.3.11, K.3.5.3.14
+      6.3.1.4, 6.3.1.8                                         vfscanf function, 7.21.1, 7.21.6.8, 7.21.6.9
+unsigned types, 6.2.5, 6.7.2, 7.21.6.1, 7.21.6.2,              vfscanf_s function, K.3.5.3.9, K.3.5.3.11,
+      7.29.2.1, 7.29.2.2                                            K.3.5.3.14
+unspecified behavior, 3.4.4, 4, J.1                             vfwprintf function, 7.21.1, 7.29.2.5, K.3.9.1.6
+unspecified value, 3.19.3                                       vfwprintf_s function, K.3.9.1.6
+uppercase letter, 5.2.1                                        vfwscanf function, 7.21.1, 7.29.2.6, 7.29.3.10
+use of library functions, 7.1.4                                vfwscanf_s function, K.3.9.1.7
+USHRT_MAX macro, 5.2.4.2.1                                     visibility of identifier, 6.2.1
+usual arithmetic conversions, 6.3.1.8, 6.5.5, 6.5.6,           visible sequence of side effects, 5.1.2.4
+      6.5.8, 6.5.9, 6.5.10, 6.5.11, 6.5.12, 6.5.15             visible side effect, 5.1.2.4
+UTF-16, 6.10.8.2                                               VLA, see variable length array
+UTF-32, 6.10.8.2                                               void expression, 6.3.2.2
+UTF-8 string literal, see string literal                       void function parameter, 6.7.6.3
+utilities, general, 7.22, 7.31.12, K.3.6                       void type, 6.2.5, 6.3.2.2, 6.7.2, K.3.5.3.2,
+   wide string, 7.29.4, K.3.9.2                                     K.3.9.1.2
+utilities, unicode, 7.28                                       void type conversion, 6.3.2.2
+                                                               volatile storage, 5.1.2.3
+va_arg macro, 7.16, 7.16.1, 7.16.1.1, 7.16.1.2,                volatile type qualifier, 6.7.3
+     7.16.1.4, 7.21.6.8, 7.21.6.9, 7.21.6.10,                  volatile-qualified type, 6.2.5, 6.7.3
+     7.21.6.11, 7.21.6.12, 7.21.6.13, 7.21.6.14,               vprintf function, 7.21.1, 7.21.6.8, 7.21.6.10,
+     7.29.2.5, 7.29.2.6, 7.29.2.7, 7.29.2.8,                        K.3.5.3.10
+     7.29.2.9, 7.29.2.10, K.3.5.3.9, K.3.5.3.11,               vprintf_s function, K.3.5.3.9, K.3.5.3.10,
+     K.3.5.3.14, K.3.9.1.7, K.3.9.1.10, K.3.9.1.12                  K.3.5.3.11, K.3.5.3.14
+va_copy macro, 7.1.3, 7.16, 7.16.1, 7.16.1.1,                  vscanf function, 7.21.1, 7.21.6.8, 7.21.6.11
+     7.16.1.2, 7.16.1.3                                        vscanf_s function, K.3.5.3.9, K.3.5.3.11,
+va_end macro, 7.1.3, 7.16, 7.16.1, 7.16.1.3,                        K.3.5.3.14
+     7.16.1.4, 7.21.6.8, 7.21.6.9, 7.21.6.10,                  vsnprintf function, 7.21.6.8, 7.21.6.12,
+     7.21.6.11, 7.21.6.12, 7.21.6.13, 7.21.6.14,                    K.3.5.3.12
+     7.29.2.5, 7.29.2.6, 7.29.2.7, 7.29.2.8,                   vsnprintf_s function, K.3.5.3.9, K.3.5.3.11,
+     7.29.2.9, 7.29.2.10, K.3.5.3.9, K.3.5.3.11,                    K.3.5.3.12, K.3.5.3.13, K.3.5.3.14
+     K.3.5.3.14, K.3.9.1.7, K.3.9.1.10, K.3.9.1.12             vsnwprintf_s function, K.3.9.1.8, K.3.9.1.9
+va_list type, 7.16, 7.16.1.3                                   vsprintf function, 7.21.6.8, 7.21.6.13,
+va_start macro, 7.16, 7.16.1, 7.16.1.1,                             K.3.5.3.13
+     7.16.1.2, 7.16.1.3, 7.16.1.4, 7.21.6.8,                   vsprintf_s function, K.3.5.3.9, K.3.5.3.11,
+     7.21.6.9, 7.21.6.10, 7.21.6.11, 7.21.6.12,                     K.3.5.3.12, K.3.5.3.13, K.3.5.3.14
+     7.21.6.13, 7.21.6.14, 7.29.2.5, 7.29.2.6,                 vsscanf function, 7.21.6.8, 7.21.6.14
+     7.29.2.7, 7.29.2.8, 7.29.2.9, 7.29.2.10,                  vsscanf_s function, K.3.5.3.9, K.3.5.3.11,
+     K.3.5.3.9, K.3.5.3.11, K.3.5.3.14, K.3.9.1.7,                  K.3.5.3.14
+     K.3.9.1.10, K.3.9.1.12                                    vswprintf function, 7.29.2.7, K.3.9.1.8,
+value, 3.19                                                         K.3.9.1.9
+
+[page 681] (Contents)
+
+vswprintf_s function, K.3.9.1.8, K.3.9.1.9                   wcstoll function, 7.8.2.4, 7.29.4.1.2
+vswscanf function, 7.29.2.8                                  wcstombs function, 7.22.8.2, 7.29.6.4
+vswscanf_s function, K.3.9.1.10                              wcstombs_s function, K.3.6.5.2
+vwprintf function, 7.21.1, 7.29.2.9, K.3.9.1.11              wcstoul function, 7.8.2.4, 7.21.6.2, 7.29.2.2,
+vwprintf_s function, K.3.9.1.11                                   7.29.4.1.2
+vwscanf function, 7.21.1, 7.29.2.10, 7.29.3.10               wcstoull function, 7.8.2.4, 7.29.4.1.2
+vwscanf_s function, K.3.9.1.12                               wcstoumax function, 7.8.2.4
+                                                             wcsxfrm function, 7.29.4.4.4
+warnings, I                                                  wctob function, 7.29.6.1.2, 7.30.2.1
+wchar.h header, 5.2.4.2.2, 7.21.1, 7.29, 7.31.16,            wctomb function, 7.22.7.3, 7.22.8.2, 7.29.6.3
+    F, K.3.9                                                 wctomb_s function, K.3.6.4.1
+WCHAR_MAX macro, 7.20.3, 7.29.1                              wctrans function, 7.30.3.2.1, 7.30.3.2.2
+WCHAR_MIN macro, 7.20.3, 7.29.1                              wctrans_t type, 7.30.1, 7.30.3.2.2
+wchar_t type, 3.7.3, 6.4.5, 6.7.9, 6.10.8.2, 7.19,           wctype function, 7.30.2.2.1, 7.30.2.2.2
+    7.20.3, 7.21.6.1, 7.21.6.2, 7.22, 7.29.1,                wctype.h header, 7.30, 7.31.17
+    7.29.2.1, 7.29.2.2                                       wctype_t type, 7.30.1, 7.30.2.2.2
+wcrtomb function, 7.21.3, 7.21.6.2, 7.29.1,                  weaker, 6.2.8
+    7.29.2.2, 7.29.6.3.3, 7.29.6.4.2, J.1,                   WEOF macro, 7.29.1, 7.29.3.1, 7.29.3.3, 7.29.3.6,
+    K.3.6.5.2, K.3.9.3.1, K.3.9.3.2.2                             7.29.3.7, 7.29.3.8, 7.29.3.9, 7.29.3.10,
+wcrtomb_s function, K.3.9.3.1, K.3.9.3.1.1                        7.29.6.1.1, 7.30.1
+wcscat function, 7.29.4.3.1                                  while statement, 6.8.5.1
+wcscat_s function, K.3.9.2.2.1                               white space, 5.1.1.2, 6.4, 6.10, 7.4.1.10,
+wcschr function, 7.29.4.5.1                                       7.30.2.1.10
+wcscmp function, 7.29.4.4.1, 7.29.4.4.4                      white-space characters, 6.4
+wcscoll function, 7.29.4.4.2, 7.29.4.4.4                     wide character, 3.7.3
+wcscpy function, 7.29.4.2.1                                    case mapping functions, 7.30.3.1
+wcscpy_s function, K.3.9.2.1.1                                    extensible, 7.30.3.2
+wcscspn function, 7.29.4.5.2                                   classification functions, 7.30.2.1
+wcsftime function, 7.11.1.1, 7.29.5.1                             extensible, 7.30.2.2
+wcslen function, 7.29.4.6.1                                    constant, 6.4.4.4
+wcsncat function, 7.29.4.3.2                                   formatted input/output functions, 7.29.2,
+wcsncat_s function, K.3.9.2.2.2                                      K.3.9.1
+wcsncmp function, 7.29.4.4.3                                   input functions, 7.21.1
+wcsncpy function, 7.29.4.2.2                                   input/output functions, 7.21.1, 7.29.3
+wcsncpy_s function, K.3.9.2.1.2                                output functions, 7.21.1
+wcsnlen_s function, K.3.9.2.4.1                                single-byte conversion functions, 7.29.6.1
+wcspbrk function, 7.29.4.5.3                                 wide character classification and mapping utilities
+wcsrchr function, 7.29.4.5.4                                      header, 7.30, 7.31.17
+wcsrtombs function, 7.29.6.4.2, K.3.9.3.2                    wide string, 7.1.1
+wcsrtombs_s function, K.3.9.3.2, K.3.9.3.2.2                 wide string comparison functions, 7.29.4.4
+wcsspn function, 7.29.4.5.5                                  wide string concatenation functions, 7.29.4.3,
+wcsstr function, 7.29.4.5.6                                       K.3.9.2.2
+wcstod function, 7.21.6.2, 7.29.2.2                          wide string copying functions, 7.29.4.2, K.3.9.2.1
+wcstod function, 7.29.4.1.1                                  wide string literal, see string literal
+wcstof function, 7.29.4.1.1                                  wide string miscellaneous functions, 7.29.4.6,
+wcstoimax function, 7.8.2.4                                       K.3.9.2.4
+wcstok function, 7.29.4.5.7                                  wide string numeric conversion functions, 7.8.2.4,
+wcstok_s function, K.3.9.2.3.1                                    7.29.4.1
+wcstol function, 7.8.2.4, 7.21.6.2, 7.29.2.2,                wide string search functions, 7.29.4.5, K.3.9.2.3
+    7.29.4.1.2                                               wide-oriented stream, 7.21.2
+wcstold function, 7.29.4.1.1                                 width, 6.2.6.2
+
+[page 682] (Contents)
+
+WINT_MAX macro, 7.20.3
+WINT_MIN macro, 7.20.3
+wint_t type, 7.20.3, 7.21.6.1, 7.29.1, 7.29.2.1,
+   7.30.1
+wmemchr function, 7.29.4.5.8
+wmemcmp function, 7.29.4.4.5
+wmemcpy function, 7.29.4.2.3
+wmemcpy_s function, K.3.9.2.1.3
+wmemmove function, 7.29.4.2.4
+wmemmove_s function, K.3.9.2.1.4
+wmemset function, 7.29.4.6.2
+wprintf function, 7.21.1, 7.29.2.9, 7.29.2.11,
+   K.3.9.1.13
+wprintf_s function, K.3.9.1.13
+wscanf function, 7.21.1, 7.29.2.10, 7.29.2.12,
+   7.29.3.10
+wscanf_s function, K.3.9.1.12, K.3.9.1.14
+
+xor macro, 7.9
+xor_eq macro, 7.9                                   *
+
+[page 683] (Contents)
 
diff --git a/pdf2html.sh b/pdf2html.sh index 14946b8..628258e 100755 --- a/pdf2html.sh +++ b/pdf2html.sh @@ -10,3 +10,4 @@ pdftotext -layout $name.pdf mv $name.txt $name.txt.utf8 ./translit.sh <$name.txt.utf8 >$name.txt ./tohtml.sh <$name.txt >$name.html +./tohtml.pre.sh <$name.txt >$name.pre.html -- 2.20.1