-<a name="Contents" href="#Contents"><h2>Contents</h2></a>
-<pre>
-Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
-Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
-1. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
-2. Normative references . . . . . . . . . . . . . . . . . . . . . . . 2
-3. Terms, definitions, and symbols . . . . . . . . . . . . . . . . . . . 3
-4. Conformance . . . . . . . . . . . . . . . . . . . . . . . . . . 8
-5. Environment . . . . . . . . . . . . . . . . . . . . . . . . . . 10
- 5.1 Conceptual models . . . . . . . . . . . . . . . . . . . . . 10
- 5.1.1 Translation environment . . . . . . . . . . . . . . . . 10
- 5.1.2 Execution environments . . . . . . . . . . . . . . . . 12
- 5.2 Environmental considerations . . . . . . . . . . . . . . . . . 22
- 5.2.1 Character sets . . . . . . . . . . . . . . . . . . . . 22
- 5.2.2 Character display semantics . . . . . . . . . . . . . . 24
- 5.2.3 Signals and interrupts . . . . . . . . . . . . . . . . . 25
- 5.2.4 Environmental limits . . . . . . . . . . . . . . . . . 25
-6. Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
- 6.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . 35
- 6.2 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . 35
- 6.2.1 Scopes of identifiers . . . . . . . . . . . . . . . . . 35
- 6.2.2 Linkages of identifiers . . . . . . . . . . . . . . . . . 36
- 6.2.3 Name spaces of identifiers . . . . . . . . . . . . . . . 37
- 6.2.4 Storage durations of objects . . . . . . . . . . . . . . 38
- 6.2.5 Types . . . . . . . . . . . . . . . . . . . . . . . 39
- 6.2.6 Representations of types . . . . . . . . . . . . . . . . 44
- 6.2.7 Compatible type and composite type . . . . . . . . . . . 47
- 6.2.8 Alignment of objects . . . . . . . . . . . . . . . . . 48
- 6.3 Conversions . . . . . . . . . . . . . . . . . . . . . . . . 50
- 6.3.1 Arithmetic operands . . . . . . . . . . . . . . . . . 50
- 6.3.2 Other operands . . . . . . . . . . . . . . . . . . . 54
- 6.4 Lexical elements . . . . . . . . . . . . . . . . . . . . . . 57
- 6.4.1 Keywords . . . . . . . . . . . . . . . . . . . . . . 58
- 6.4.2 Identifiers . . . . . . . . . . . . . . . . . . . . . . 59
- 6.4.3 Universal character names . . . . . . . . . . . . . . . 61
- 6.4.4 Constants . . . . . . . . . . . . . . . . . . . . . . 62
- 6.4.5 String literals . . . . . . . . . . . . . . . . . . . . 70
- 6.4.6 Punctuators . . . . . . . . . . . . . . . . . . . . . 72
- 6.4.7 Header names . . . . . . . . . . . . . . . . . . . . 73
- 6.4.8 Preprocessing numbers . . . . . . . . . . . . . . . . 74
- 6.4.9 Comments . . . . . . . . . . . . . . . . . . . . . 75
-<!--page 4 indent -1-->
- 6.5 Expressions . . . . . . . . . . . . . . . . . . . . . . . . 76
- 6.5.1 Primary expressions . . . . . . . . . . . . . . . . . 78
- 6.5.2 Postfix operators . . . . . . . . . . . . . . . . . . . 79
- 6.5.3 Unary operators . . . . . . . . . . . . . . . . . . . 88
- 6.5.4 Cast operators . . . . . . . . . . . . . . . . . . . . 91
- 6.5.5 Multiplicative operators . . . . . . . . . . . . . . . . 92
- 6.5.6 Additive operators . . . . . . . . . . . . . . . . . . 92
- 6.5.7 Bitwise shift operators . . . . . . . . . . . . . . . . . 94
- 6.5.8 Relational operators . . . . . . . . . . . . . . . . . . 95
- 6.5.9 Equality operators . . . . . . . . . . . . . . . . . . 96
- 6.5.10 Bitwise AND operator . . . . . . . . . . . . . . . . . 97
- 6.5.11 Bitwise exclusive OR operator . . . . . . . . . . . . . 98
- 6.5.12 Bitwise inclusive OR operator . . . . . . . . . . . . . . 98
- 6.5.13 Logical AND operator . . . . . . . . . . . . . . . . . 99
- 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
-<!--page 5 indent 0-->
- 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
-<!--page 6 indent -1-->
- 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.20 Integer types <stdint.h> . . . . . . . . . . . . . . . . . . 289
-<!--page 7 indent -1-->
- 7.20.1 Integer types . . . . . . . . . . . . . . . . . . . . 289
- 7.20.2 Limits of specified-width integer types . . . . . . . . . . 291
- 7.20.3 Limits of other integer types . . . . . . . . . . . . . . 293
- 7.20.4 Macros for integer constants . . . . . . . . . . . . . . 294
- 7.21 Input/output <stdio.h> . . . . . . . . . . . . . . . . . . 296
- 7.21.1 Introduction . . . . . . . . . . . . . . . . . . . . . 296
- 7.21.2 Streams . . . . . . . . . . . . . . . . . . . . . . 298
- 7.21.3 Files . . . . . . . . . . . . . . . . . . . . . . . . 300
- 7.21.4 Operations on files . . . . . . . . . . . . . . . . . . 302
- 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.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
-<!--page 8 indent -1-->
- 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
-<!--page 9 indent 0-->
- 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
-<!--page 10 indent 0-->
-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
-<!--page 11 indent 0-->
-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
-<!--page 12 indent 0-->
- 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
-<!--page 13 indent 4-->
-</pre>
+<h2><a name="Contents" href="#Contents">Contents</a></h2>
+<ul>
+<li><a href="#Foreword">Foreword</a>
+<li><a href="#Introduction">Introduction</a>
+<li><a href="#1">1. Scope</a>
+<li><a href="#2">2. Normative references</a>
+<li><a href="#3">3. Terms, definitions, and symbols</a>
+<li><a href="#4">4. Conformance</a>
+<li><a href="#5">5. Environment</a>
+<ul>
+<li><a href="#5.1"> 5.1 Conceptual models</a>
+<ul>
+<li><a href="#5.1.1"> 5.1.1 Translation environment</a>
+<li><a href="#5.1.2"> 5.1.2 Execution environments</a>
+</ul>
+<li><a href="#5.2"> 5.2 Environmental considerations</a>
+<ul>
+<li><a href="#5.2.1"> 5.2.1 Character sets</a>
+<li><a href="#5.2.2"> 5.2.2 Character display semantics</a>
+<li><a href="#5.2.3"> 5.2.3 Signals and interrupts</a>
+<li><a href="#5.2.4"> 5.2.4 Environmental limits</a>
+</ul>
+</ul>
+<li><a href="#6">6. Language</a>
+<ul>
+<li><a href="#6.1"> 6.1 Notation</a>
+<li><a href="#6.2"> 6.2 Concepts</a>
+<ul>
+<li><a href="#6.2.1"> 6.2.1 Scopes of identifiers</a>
+<li><a href="#6.2.2"> 6.2.2 Linkages of identifiers</a>
+<li><a href="#6.2.3"> 6.2.3 Name spaces of identifiers</a>
+<li><a href="#6.2.4"> 6.2.4 Storage durations of objects</a>
+<li><a href="#6.2.5"> 6.2.5 Types</a>
+<li><a href="#6.2.6"> 6.2.6 Representations of types</a>
+<li><a href="#6.2.7"> 6.2.7 Compatible type and composite type</a>
+<li><a href="#6.2.8"> 6.2.8 Alignment of objects</a>
+</ul>
+<li><a href="#6.3"> 6.3 Conversions</a>
+<ul>
+<li><a href="#6.3.1"> 6.3.1 Arithmetic operands</a>
+<li><a href="#6.3.2"> 6.3.2 Other operands</a>
+</ul>
+<li><a href="#6.4"> 6.4 Lexical elements</a>
+<ul>
+<li><a href="#6.4.1"> 6.4.1 Keywords</a>
+<li><a href="#6.4.2"> 6.4.2 Identifiers</a>
+<li><a href="#6.4.3"> 6.4.3 Universal character names</a>
+<li><a href="#6.4.4"> 6.4.4 Constants</a>
+<li><a href="#6.4.5"> 6.4.5 String literals</a>
+<li><a href="#6.4.6"> 6.4.6 Punctuators</a>
+<li><a href="#6.4.7"> 6.4.7 Header names</a>
+<li><a href="#6.4.8"> 6.4.8 Preprocessing numbers</a>
+<li><a href="#6.4.9"> 6.4.9 Comments</a>
+<!--page 4 -->
+</ul>
+<li><a href="#6.5"> 6.5 Expressions</a>
+<ul>
+<li><a href="#6.5.1"> 6.5.1 Primary expressions</a>
+<li><a href="#6.5.2"> 6.5.2 Postfix operators</a>
+<li><a href="#6.5.3"> 6.5.3 Unary operators</a>
+<li><a href="#6.5.4"> 6.5.4 Cast operators</a>
+<li><a href="#6.5.5"> 6.5.5 Multiplicative operators</a>
+<li><a href="#6.5.6"> 6.5.6 Additive operators</a>
+<li><a href="#6.5.7"> 6.5.7 Bitwise shift operators</a>
+<li><a href="#6.5.8"> 6.5.8 Relational operators</a>
+<li><a href="#6.5.9"> 6.5.9 Equality operators</a>
+<li><a href="#6.5.10"> 6.5.10 Bitwise AND operator</a>
+<li><a href="#6.5.11"> 6.5.11 Bitwise exclusive OR operator</a>
+<li><a href="#6.5.12"> 6.5.12 Bitwise inclusive OR operator</a>
+<li><a href="#6.5.13"> 6.5.13 Logical AND operator</a>
+<li><a href="#6.5.14"> 6.5.14 Logical OR operator</a>
+<li><a href="#6.5.15"> 6.5.15 Conditional operator</a>
+<li><a href="#6.5.16"> 6.5.16 Assignment operators</a>
+<li><a href="#6.5.17"> 6.5.17 Comma operator</a>
+</ul>
+<li><a href="#6.6"> 6.6 Constant expressions</a>
+<li><a href="#6.7"> 6.7 Declarations</a>
+<ul>
+<li><a href="#6.7.1"> 6.7.1 Storage-class specifiers</a>
+<li><a href="#6.7.2"> 6.7.2 Type specifiers</a>
+<li><a href="#6.7.3"> 6.7.3 Type qualifiers</a>
+<li><a href="#6.7.4"> 6.7.4 Function specifiers</a>
+<li><a href="#6.7.5"> 6.7.5 Alignment specifier</a>
+<li><a href="#6.7.6"> 6.7.6 Declarators</a>
+<li><a href="#6.7.7"> 6.7.7 Type names</a>
+<li><a href="#6.7.8"> 6.7.8 Type definitions</a>
+<li><a href="#6.7.9"> 6.7.9 Initialization</a>
+<li><a href="#6.7.10"> 6.7.10 Static assertions</a>
+</ul>
+<li><a href="#6.8"> 6.8 Statements and blocks</a>
+<ul>
+<li><a href="#6.8.1"> 6.8.1 Labeled statements</a>
+<li><a href="#6.8.2"> 6.8.2 Compound statement</a>
+<li><a href="#6.8.3"> 6.8.3 Expression and null statements</a>
+<li><a href="#6.8.4"> 6.8.4 Selection statements</a>
+<li><a href="#6.8.5"> 6.8.5 Iteration statements</a>
+<li><a href="#6.8.6"> 6.8.6 Jump statements</a>
+</ul>
+<li><a href="#6.9"> 6.9 External definitions</a>
+<ul>
+<li><a href="#6.9.1"> 6.9.1 Function definitions</a>
+<li><a href="#6.9.2"> 6.9.2 External object definitions</a>
+</ul>
+<li><a href="#6.10"> 6.10 Preprocessing directives</a>
+<ul>
+<li><a href="#6.10.1"> 6.10.1 Conditional inclusion</a>
+<li><a href="#6.10.2"> 6.10.2 Source file inclusion</a>
+<li><a href="#6.10.3"> 6.10.3 Macro replacement</a>
+<!--page 5 -->
+<li><a href="#6.10.4"> 6.10.4 Line control</a>
+<li><a href="#6.10.5"> 6.10.5 Error directive</a>
+<li><a href="#6.10.6"> 6.10.6 Pragma directive</a>
+<li><a href="#6.10.7"> 6.10.7 Null directive</a>
+<li><a href="#6.10.8"> 6.10.8 Predefined macro names</a>
+<li><a href="#6.10.9"> 6.10.9 Pragma operator</a>
+</ul>
+<li><a href="#6.11"> 6.11 Future language directions</a>
+<ul>
+<li><a href="#6.11.1"> 6.11.1 Floating types</a>
+<li><a href="#6.11.2"> 6.11.2 Linkages of identifiers</a>
+<li><a href="#6.11.3"> 6.11.3 External names</a>
+<li><a href="#6.11.4"> 6.11.4 Character escape sequences</a>
+<li><a href="#6.11.5"> 6.11.5 Storage-class specifiers</a>
+<li><a href="#6.11.6"> 6.11.6 Function declarators</a>
+<li><a href="#6.11.7"> 6.11.7 Function definitions</a>
+<li><a href="#6.11.8"> 6.11.8 Pragma directives</a>
+<li><a href="#6.11.9"> 6.11.9 Predefined macro names</a>
+</ul>
+</ul>
+<li><a href="#7">7. Library</a>
+<ul>
+<li><a href="#7.1"> 7.1 Introduction</a>
+<ul>
+<li><a href="#7.1.1"> 7.1.1 Definitions of terms</a>
+<li><a href="#7.1.2"> 7.1.2 Standard headers</a>
+<li><a href="#7.1.3"> 7.1.3 Reserved identifiers</a>
+<li><a href="#7.1.4"> 7.1.4 Use of library functions</a>
+</ul>
+<li><a href="#7.2"> 7.2 Diagnostics <assert.h></a>
+<ul>
+<li><a href="#7.2.1"> 7.2.1 Program diagnostics</a>
+</ul>
+<li><a href="#7.3"> 7.3 Complex arithmetic <complex.h></a>
+<ul>
+<li><a href="#7.3.1"> 7.3.1 Introduction</a>
+<li><a href="#7.3.2"> 7.3.2 Conventions</a>
+<li><a href="#7.3.3"> 7.3.3 Branch cuts</a>
+<li><a href="#7.3.4"> 7.3.4 The CX_LIMITED_RANGE pragma</a>
+<li><a href="#7.3.5"> 7.3.5 Trigonometric functions</a>
+<li><a href="#7.3.6"> 7.3.6 Hyperbolic functions</a>
+<li><a href="#7.3.7"> 7.3.7 Exponential and logarithmic functions</a>
+<li><a href="#7.3.8"> 7.3.8 Power and absolute-value functions</a>
+<li><a href="#7.3.9"> 7.3.9 Manipulation functions</a>
+</ul>
+<li><a href="#7.4"> 7.4 Character handling <ctype.h></a>
+<ul>
+<li><a href="#7.4.1"> 7.4.1 Character classification functions</a>
+<li><a href="#7.4.2"> 7.4.2 Character case mapping functions</a>
+</ul>
+<li><a href="#7.5"> 7.5 Errors <errno.h></a>
+<li><a href="#7.6"> 7.6 Floating-point environment <fenv.h></a>
+<ul>
+<li><a href="#7.6.1"> 7.6.1 The FENV_ACCESS pragma</a>
+<li><a href="#7.6.2"> 7.6.2 Floating-point exceptions</a>
+<li><a href="#7.6.3"> 7.6.3 Rounding</a>
+<li><a href="#7.6.4"> 7.6.4 Environment</a>
+</ul>
+<li><a href="#7.7"> 7.7 Characteristics of floating types <float.h></a>
+<!--page 6 -->
+<li><a href="#7.8"> 7.8 Format conversion of integer types <inttypes.h></a>
+<ul>
+<li><a href="#7.8.1"> 7.8.1 Macros for format specifiers</a>
+<li><a href="#7.8.2"> 7.8.2 Functions for greatest-width integer types</a>
+</ul>
+<li><a href="#7.9"> 7.9 Alternative spellings <iso646.h></a>
+<li><a href="#7.10"> 7.10 Sizes of integer types <limits.h></a>
+<li><a href="#7.11"> 7.11 Localization <locale.h></a>
+<ul>
+<li><a href="#7.11.1"> 7.11.1 Locale control</a>
+<li><a href="#7.11.2"> 7.11.2 Numeric formatting convention inquiry</a>
+</ul>
+<li><a href="#7.12"> 7.12 Mathematics <math.h></a>
+<ul>
+<li><a href="#7.12.1"> 7.12.1 Treatment of error conditions</a>
+<li><a href="#7.12.2"> 7.12.2 The FP_CONTRACT pragma</a>
+<li><a href="#7.12.3"> 7.12.3 Classification macros</a>
+<li><a href="#7.12.4"> 7.12.4 Trigonometric functions</a>
+<li><a href="#7.12.5"> 7.12.5 Hyperbolic functions</a>
+<li><a href="#7.12.6"> 7.12.6 Exponential and logarithmic functions</a>
+<li><a href="#7.12.7"> 7.12.7 Power and absolute-value functions</a>
+<li><a href="#7.12.8"> 7.12.8 Error and gamma functions</a>
+<li><a href="#7.12.9"> 7.12.9 Nearest integer functions</a>
+<li><a href="#7.12.10"> 7.12.10 Remainder functions</a>
+<li><a href="#7.12.11"> 7.12.11 Manipulation functions</a>
+<li><a href="#7.12.12"> 7.12.12 Maximum, minimum, and positive difference functions</a>
+<li><a href="#7.12.13"> 7.12.13 Floating multiply-add</a>
+<li><a href="#7.12.14"> 7.12.14 Comparison macros</a>
+</ul>
+<li><a href="#7.13"> 7.13 Nonlocal jumps <setjmp.h></a>
+<ul>
+<li><a href="#7.13.1"> 7.13.1 Save calling environment</a>
+<li><a href="#7.13.2"> 7.13.2 Restore calling environment</a>
+</ul>
+<li><a href="#7.14"> 7.14 Signal handling <signal.h></a>
+<ul>
+<li><a href="#7.14.1"> 7.14.1 Specify signal handling</a>
+<li><a href="#7.14.2"> 7.14.2 Send signal</a>
+</ul>
+<li><a href="#7.15"> 7.15 Alignment <stdalign.h></a>
+<li><a href="#7.16"> 7.16 Variable arguments <stdarg.h></a>
+<ul>
+<li><a href="#7.16.1"> 7.16.1 Variable argument list access macros</a>
+</ul>
+<li><a href="#7.17"> 7.17 Atomics <stdatomic.h></a>
+<ul>
+<li><a href="#7.17.1"> 7.17.1 Introduction</a>
+<li><a href="#7.17.2"> 7.17.2 Initialization</a>
+<li><a href="#7.17.3"> 7.17.3 Order and consistency</a>
+<li><a href="#7.17.4"> 7.17.4 Fences</a>
+<li><a href="#7.17.5"> 7.17.5 Lock-free property</a>
+<li><a href="#7.17.6"> 7.17.6 Atomic integer and address types</a>
+<li><a href="#7.17.7"> 7.17.7 Operations on atomic types</a>
+<li><a href="#7.17.8"> 7.17.8 Atomic flag type and operations</a>
+</ul>
+<li><a href="#7.18"> 7.18 Boolean type and values <stdbool.h></a>
+<li><a href="#7.19"> 7.19 Common definitions <stddef.h></a>
+<li><a href="#7.20"> 7.20 Integer types <stdint.h></a>
+<!--page 7 -->
+<ul>
+<li><a href="#7.20.1"> 7.20.1 Integer types</a>
+<li><a href="#7.20.2"> 7.20.2 Limits of specified-width integer types</a>
+<li><a href="#7.20.3"> 7.20.3 Limits of other integer types</a>
+<li><a href="#7.20.4"> 7.20.4 Macros for integer constants</a>
+</ul>
+<li><a href="#7.21"> 7.21 Input/output <stdio.h></a>
+<ul>
+<li><a href="#7.21.1"> 7.21.1 Introduction</a>
+<li><a href="#7.21.2"> 7.21.2 Streams</a>
+<li><a href="#7.21.3"> 7.21.3 Files</a>
+<li><a href="#7.21.4"> 7.21.4 Operations on files</a>
+<li><a href="#7.21.5"> 7.21.5 File access functions</a>
+<li><a href="#7.21.6"> 7.21.6 Formatted input/output functions</a>
+<li><a href="#7.21.7"> 7.21.7 Character input/output functions</a>
+<li><a href="#7.21.8"> 7.21.8 Direct input/output functions</a>
+<li><a href="#7.21.9"> 7.21.9 File positioning functions</a>
+<li><a href="#7.21.10"> 7.21.10 Error-handling functions</a>
+</ul>
+<li><a href="#7.22"> 7.22 General utilities <stdlib.h></a>
+<ul>
+<li><a href="#7.22.1"> 7.22.1 Numeric conversion functions</a>
+<li><a href="#7.22.2"> 7.22.2 Pseudo-random sequence generation functions</a>
+<li><a href="#7.22.3"> 7.22.3 Memory management functions</a>
+<li><a href="#7.22.4"> 7.22.4 Communication with the environment</a>
+<li><a href="#7.22.5"> 7.22.5 Searching and sorting utilities</a>
+<li><a href="#7.22.6"> 7.22.6 Integer arithmetic functions</a>
+<li><a href="#7.22.7"> 7.22.7 Multibyte/wide character conversion functions</a>
+<li><a href="#7.22.8"> 7.22.8 Multibyte/wide string conversion functions</a>
+</ul>
+<li><a href="#7.23"> 7.23 String handling <string.h></a>
+<ul>
+<li><a href="#7.23.1"> 7.23.1 String function conventions</a>
+<li><a href="#7.23.2"> 7.23.2 Copying functions</a>
+<li><a href="#7.23.3"> 7.23.3 Concatenation functions</a>
+<li><a href="#7.23.4"> 7.23.4 Comparison functions</a>
+<li><a href="#7.23.5"> 7.23.5 Search functions</a>
+<li><a href="#7.23.6"> 7.23.6 Miscellaneous functions</a>
+</ul>
+<li><a href="#7.24"> 7.24 Type-generic math <tgmath.h></a>
+<li><a href="#7.25"> 7.25 Threads <threads.h></a>
+<ul>
+<li><a href="#7.25.1"> 7.25.1 Introduction</a>
+<li><a href="#7.25.2"> 7.25.2 Initialization functions</a>
+<li><a href="#7.25.3"> 7.25.3 Condition variable functions</a>
+<li><a href="#7.25.4"> 7.25.4 Mutex functions</a>
+<li><a href="#7.25.5"> 7.25.5 Thread functions</a>
+<li><a href="#7.25.6"> 7.25.6 Thread-specific storage functions</a>
+<li><a href="#7.25.7"> 7.25.7 Time functions</a>
+</ul>
+<li><a href="#7.26"> 7.26 Date and time <time.h></a>
+<ul>
+<li><a href="#7.26.1"> 7.26.1 Components of time</a>
+<li><a href="#7.26.2"> 7.26.2 Time manipulation functions</a>
+<li><a href="#7.26.3"> 7.26.3 Time conversion functions</a>
+<!--page 8 -->
+</ul>
+<li><a href="#7.27"> 7.27 Unicode utilities <uchar.h></a>
+<ul>
+<li><a href="#7.27.1"> 7.27.1 Restartable multibyte/wide character conversion functions</a>
+</ul>
+<li><a href="#7.28"> 7.28 Extended multibyte and wide character utilities <wchar.h></a>
+<ul>
+<li><a href="#7.28.1"> 7.28.1 Introduction</a>
+<li><a href="#7.28.2"> 7.28.2 Formatted wide character input/output functions</a>
+<li><a href="#7.28.3"> 7.28.3 Wide character input/output functions</a>
+<li><a href="#7.28.4"> 7.28.4 General wide string utilities</a>
+<ul>
+<li><a href="#7.28.4.1"> 7.28.4.1 Wide string numeric conversion functions</a>
+<li><a href="#7.28.4.2"> 7.28.4.2 Wide string copying functions</a>
+<li><a href="#7.28.4.3"> 7.28.4.3 Wide string concatenation functions</a>
+<li><a href="#7.28.4.4"> 7.28.4.4 Wide string comparison functions</a>
+<li><a href="#7.28.4.5"> 7.28.4.5 Wide string search functions</a>
+<li><a href="#7.28.4.6"> 7.28.4.6 Miscellaneous functions</a>
+</ul>
+<li><a href="#7.28.5"> 7.28.5 Wide character time conversion functions</a>
+<li><a href="#7.28.6"> 7.28.6 Extended multibyte/wide character conversion utilities</a>
+<ul>
+<li><a href="#7.28.6.1"> 7.28.6.1 Single-byte/wide character conversion functions</a>
+<li><a href="#7.28.6.2"> 7.28.6.2 Conversion state functions</a>
+<li><a href="#7.28.6.3"> 7.28.6.3 Restartable multibyte/wide character conversion functions</a>
+<li><a href="#7.28.6.4"> 7.28.6.4 Restartable multibyte/wide string conversion functions</a>
+</ul>
+</ul>
+<li><a href="#7.29"> 7.29 Wide character classification and mapping utilities <wctype.h></a>
+<ul>
+<li><a href="#7.29.1"> 7.29.1 Introduction</a>
+<li><a href="#7.29.2"> 7.29.2 Wide character classification utilities</a>
+<ul>
+<li><a href="#7.29.2.1"> 7.29.2.1 Wide character classification functions</a>
+<li><a href="#7.29.2.2"> 7.29.2.2 Extensible wide character classification functions</a>
+</ul>
+<li><a href="#7.29.3"> 7.29.3 Wide character case mapping utilities</a>
+<ul>
+<li><a href="#7.29.3.1"> 7.29.3.1 Wide character case mapping functions</a>
+<li><a href="#7.29.3.2"> 7.29.3.2 Extensible wide character case mapping functions</a>
+</ul>
+</ul>
+<li><a href="#7.30"> 7.30 Future library directions</a>
+<ul>
+<li><a href="#7.30.1"> 7.30.1 Complex arithmetic <complex.h></a>
+<li><a href="#7.30.2"> 7.30.2 Character handling <ctype.h></a>
+<li><a href="#7.30.3"> 7.30.3 Errors <errno.h></a>
+<li><a href="#7.30.4"> 7.30.4 Format conversion of integer types <inttypes.h></a>
+<li><a href="#7.30.5"> 7.30.5 Localization <locale.h></a>
+<li><a href="#7.30.6"> 7.30.6 Signal handling <signal.h></a>
+<li><a href="#7.30.7"> 7.30.7 Boolean type and values <stdbool.h></a>
+<li><a href="#7.30.8"> 7.30.8 Integer types <stdint.h></a>
+<li><a href="#7.30.9"> 7.30.9 Input/output <stdio.h></a>
+<li><a href="#7.30.10"> 7.30.10 General utilities <stdlib.h></a>
+<li><a href="#7.30.11"> 7.30.11 String handling <string.h></a>
+<!--page 9 -->
+<li><a href="#7.30.12"> 7.30.12 Extended multibyte and wide character utilities <wchar.h></a>
+<li><a href="#7.30.13"> 7.30.13 Wide character classification and mapping utilities <wctype.h></a>
+</ul>
+</ul>
+<li><a href="#A">Annex A (informative) Language syntax summary</a>
+<ul>
+<li><a href="#A.1"> A.1 Lexical grammar</a>
+<li><a href="#A.2"> A.2 Phrase structure grammar</a>
+<li><a href="#A.3"> A.3 Preprocessing directives</a>
+</ul>
+<li><a href="#B">Annex B (informative) Library summary</a>
+<ul>
+<li><a href="#B.1"> B.1 Diagnostics <assert.h></a>
+<li><a href="#B.2"> B.2 Complex <complex.h></a>
+<li><a href="#B.3"> B.3 Character handling <ctype.h></a>
+<li><a href="#B.4"> B.4 Errors <errno.h></a>
+<li><a href="#B.5"> B.5 Floating-point environment <fenv.h></a>
+<li><a href="#B.6"> B.6 Characteristics of floating types <float.h></a>
+<li><a href="#B.7"> B.7 Format conversion of integer types <inttypes.h></a>
+<li><a href="#B.8"> B.8 Alternative spellings <iso646.h></a>
+<li><a href="#B.9"> B.9 Sizes of integer types <limits.h></a>
+<li><a href="#B.10"> B.10 Localization <locale.h></a>
+<li><a href="#B.11"> B.11 Mathematics <math.h></a>
+<li><a href="#B.12"> B.12 Nonlocal jumps <setjmp.h></a>
+<li><a href="#B.13"> B.13 Signal handling <signal.h></a>
+<li><a href="#B.14"> B.14 Alignment <stdalign.h></a>
+<li><a href="#B.15"> B.15 Variable arguments <stdarg.h></a>
+<li><a href="#B.16"> B.16 Atomics <stdatomic.h></a>
+<li><a href="#B.17"> B.17 Boolean type and values <stdbool.h></a>
+<li><a href="#B.18"> B.18 Common definitions <stddef.h></a>
+<li><a href="#B.19"> B.19 Integer types <stdint.h></a>
+<li><a href="#B.20"> B.20 Input/output <stdio.h></a>
+<li><a href="#B.21"> B.21 General utilities <stdlib.h></a>
+<li><a href="#B.22"> B.22 String handling <string.h></a>
+<li><a href="#B.23"> B.23 Type-generic math <tgmath.h></a>
+<li><a href="#B.24"> B.24 Threads <threads.h></a>
+<li><a href="#B.25"> B.25 Date and time <time.h></a>
+<li><a href="#B.26"> B.26 Unicode utilities <uchar.h></a>
+<li><a href="#B.27"> B.27 Extended multibyte/wide character utilities <wchar.h></a>
+<li><a href="#B.28"> B.28 Wide character classification and mapping utilities <wctype.h></a>
+</ul>
+<li><a href="#C">Annex C (informative) Sequence points</a>
+<li><a href="#D">Annex D (normative) Universal character names for identifiers</a>
+<ul>
+<li><a href="#D.1"> D.1 Ranges of characters allowed</a>
+<li><a href="#D.2"> D.2 Ranges of characters disallowed initially</a>
+</ul>
+<li><a href="#E">Annex E (informative) Implementation limits</a>
+<!--page 10 -->
+<li><a href="#F">Annex F (normative) IEC 60559 floating-point arithmetic</a>
+<ul>
+<li><a href="#F.1"> F.1 Introduction</a>
+<li><a href="#F.2"> F.2 Types</a>
+<li><a href="#F.3"> F.3 Operators and functions</a>
+<li><a href="#F.4"> F.4 Floating to integer conversion</a>
+<li><a href="#F.5"> F.5 Binary-decimal conversion</a>
+<li><a href="#F.6"> F.6 The return statement</a>
+<li><a href="#F.7"> F.7 Contracted expressions</a>
+<li><a href="#F.8"> F.8 Floating-point environment</a>
+<li><a href="#F.9"> F.9 Optimization</a>
+<li><a href="#F.10"> F.10 Mathematics <math.h></a>
+<ul>
+<li><a href="#F.10.1"> F.10.1 Trigonometric functions</a>
+<li><a href="#F.10.2"> F.10.2 Hyperbolic functions</a>
+<li><a href="#F.10.3"> F.10.3 Exponential and logarithmic functions</a>
+<li><a href="#F.10.4"> F.10.4 Power and absolute value functions</a>
+<li><a href="#F.10.5"> F.10.5 Error and gamma functions</a>
+<li><a href="#F.10.6"> F.10.6 Nearest integer functions</a>
+<li><a href="#F.10.7"> F.10.7 Remainder functions</a>
+<li><a href="#F.10.8"> F.10.8 Manipulation functions</a>
+<li><a href="#F.10.9"> F.10.9 Maximum, minimum, and positive difference functions</a>
+<li><a href="#F.10.10"> F.10.10 Floating multiply-add</a>
+<li><a href="#F.10.11"> F.10.11 Comparison macros</a>
+</ul>
+</ul>
+<li><a href="#G">Annex G (normative) IEC 60559-compatible complex arithmetic</a>
+<ul>
+<li><a href="#G.1"> G.1 Introduction</a>
+<li><a href="#G.2"> G.2 Types</a>
+<li><a href="#G.3"> G.3 Conventions</a>
+<li><a href="#G.4"> G.4 Conversions</a>
+<ul>
+<li><a href="#G.4.1"> G.4.1 Imaginary types</a>
+<li><a href="#G.4.2"> G.4.2 Real and imaginary</a>
+<li><a href="#G.4.3"> G.4.3 Imaginary and complex</a>
+</ul>
+<li><a href="#G.5"> G.5 Binary operators</a>
+<ul>
+<li><a href="#G.5.1"> G.5.1 Multiplicative operators</a>
+<li><a href="#G.5.2"> G.5.2 Additive operators</a>
+</ul>
+<li><a href="#G.6"> G.6 Complex arithmetic <complex.h></a>
+<ul>
+<li><a href="#G.6.1"> G.6.1 Trigonometric functions</a>
+<li><a href="#G.6.2"> G.6.2 Hyperbolic functions</a>
+<li><a href="#G.6.3"> G.6.3 Exponential and logarithmic functions</a>
+<li><a href="#G.6.4"> G.6.4 Power and absolute-value functions</a>
+</ul>
+<li><a href="#G.7"> G.7 Type-generic math <tgmath.h></a>
+</ul>
+<li><a href="#H">Annex H (informative) Language independent arithmetic</a>
+<ul>
+<li><a href="#H.1"> H.1 Introduction</a>
+<li><a href="#H.2"> H.2 Types</a>
+<li><a href="#H.3"> H.3 Notification</a>
+<!--page 11 -->
+</ul>
+<li><a href="#I">Annex I (informative) Common warnings</a>
+<li><a href="#J">Annex J (informative) Portability issues</a>
+<ul>
+<li><a href="#J.1"> J.1 Unspecified behavior</a>
+<li><a href="#J.2"> J.2 Undefined behavior</a>
+<li><a href="#J.3"> J.3 Implementation-defined behavior</a>
+<li><a href="#J.4"> J.4 Locale-specific behavior</a>
+<li><a href="#J.5"> J.5 Common extensions</a>
+</ul>
+<li><a href="#K">Annex K (normative) Bounds-checking interfaces</a>
+<ul>
+<li><a href="#K.1"> K.1 Background</a>
+<li><a href="#K.2"> K.2 Scope</a>
+<li><a href="#K.3"> K.3 Library</a>
+<ul>
+<li><a href="#K.3.1"> K.3.1 Introduction</a>
+<ul>
+<li><a href="#K.3.1.1"> K.3.1.1 Standard headers</a>
+<li><a href="#K.3.1.2"> K.3.1.2 Reserved identifiers</a>
+<li><a href="#K.3.1.3"> K.3.1.3 Use of errno</a>
+<li><a href="#K.3.1.4"> K.3.1.4 Runtime-constraint violations</a>
+</ul>
+<li><a href="#K.3.2"> K.3.2 Errors <errno.h></a>
+<li><a href="#K.3.3"> K.3.3 Common definitions <stddef.h></a>
+<li><a href="#K.3.4"> K.3.4 Integer types <stdint.h></a>
+<li><a href="#K.3.5"> K.3.5 Input/output <stdio.h></a>
+<ul>
+<li><a href="#K.3.5.1"> K.3.5.1 Operations on files</a>
+<li><a href="#K.3.5.2"> K.3.5.2 File access functions</a>
+<li><a href="#K.3.5.3"> K.3.5.3 Formatted input/output functions</a>
+<li><a href="#K.3.5.4"> K.3.5.4 Character input/output functions</a>
+</ul>
+<li><a href="#K.3.6"> K.3.6 General utilities <stdlib.h></a>
+<ul>
+<li><a href="#K.3.6.1"> K.3.6.1 Runtime-constraint handling</a>
+<li><a href="#K.3.6.2"> K.3.6.2 Communication with the environment</a>
+<li><a href="#K.3.6.3"> K.3.6.3 Searching and sorting utilities</a>
+<li><a href="#K.3.6.4"> K.3.6.4 Multibyte/wide character conversion functions</a>
+<li><a href="#K.3.6.5"> K.3.6.5 Multibyte/wide string conversion functions</a>
+</ul>
+<li><a href="#K.3.7"> K.3.7 String handling <string.h></a>
+<ul>
+<li><a href="#K.3.7.1"> K.3.7.1 Copying functions</a>
+<li><a href="#K.3.7.2"> K.3.7.2 Concatenation functions</a>
+<li><a href="#K.3.7.3"> K.3.7.3 Search functions</a>
+<li><a href="#K.3.7.4"> K.3.7.4 Miscellaneous functions</a>
+</ul>
+<li><a href="#K.3.8"> K.3.8 Date and time <time.h></a>
+<ul>
+<li><a href="#K.3.8.1"> K.3.8.1 Components of time</a>
+<li><a href="#K.3.8.2"> K.3.8.2 Time conversion functions</a>
+</ul>
+<li><a href="#K.3.9"> K.3.9 Extended multibyte and wide character utilities <wchar.h></a>
+<ul>
+<li><a href="#K.3.9.1"> K.3.9.1 Formatted wide character input/output functions</a>
+<li><a href="#K.3.9.2"> K.3.9.2 General wide string utilities</a>
+<!--page 12 -->
+<li><a href="#K.3.9.3"> K.3.9.3 Extended multibyte/wide character conversion utilities</a>
+</ul>
+</ul>
+</ul>
+<li><a href="#L">Annex L (normative) Analyzability</a>
+<ul>
+<li><a href="#L.1"> L.1 Scope</a>
+<li><a href="#L.2"> L.2 Definitions</a>
+<li><a href="#L.3"> L.3 Requirements</a>
+</ul>
+<li><a href="#Bibliography">Bibliography</a>
+<li><a href="#Index">Index</a>
+<!--page 13 -->
+</ul>