6502e1f38fc038edb2365d7c53478b6b7cf9b4a8
[c-standard] / n1548.html
1 <html><head><title>N1548   December 2, 2010  ISO/IEC 9899:201x</title></head><body>
2 <pre><!--page 1 -->
3 N1548                    Committee Draft -- December 2, 2010          ISO/IEC 9899:201x
4
5
6
7
8 INTERNATIONAL STANDARD                         (C)ISO/IEC              ISO/IEC 9899:201x
9
10
11
12
13 </pre>
14
15 <p><small><a href="#Contents">Contents</a></small>
16 <h1>Programming languages -- C</h1>
17 <pre>
18
19
20                                        ABSTRACT
21
22
23
24                      (Cover sheet to be provided by ISO Secretariat.)
25
26 This International Standard specifies the form and establishes the interpretation of
27 programs expressed in the programming language C. Its purpose is to promote
28 portability, reliability, maintainability, and efficient execution of C language programs on
29 a variety of computing systems.
30
31 Clauses are included that detail the C language itself and the contents of the C language
32 execution library. Annexes summarize aspects of both of them, and enumerate factors
33 that influence the portability of C programs.
34
35 Although this International Standard is intended to guide knowledgeable C language
36 programmers as well as implementors of C language translation systems, the document
37 itself is not designed to serve as a tutorial.
38
39 Recipients of this draft are invited to submit, with their comments, notification of any
40 relevant patent rights of which they are aware and to provide supporting documentation.
41
42 Changes from the previous draft (N1256) are indicated by ''diff marks'' in the right
43 margin: deleted text is marked with ''*'', new or changed text with '' ''.
44 <!--page 2 -->
45 <!--page 3 -->
46 </pre>
47
48 <p><small><a href="#Contents">Contents</a></small>
49 <h2><a name="Contents" href="#Contents">Contents</a></h2>
50 <ul>
51 <li><a href="#Foreword">Foreword</a>
52 <li><a href="#Introduction">Introduction</a>
53 <li><a href="#1">1. Scope</a>
54 <li><a href="#2">2. Normative references</a>
55 <li><a href="#3">3. Terms, definitions, and symbols</a>
56 <li><a href="#4">4. Conformance</a>
57 <li><a href="#5">5. Environment</a>
58 <ul>
59 <li><a href="#5.1">   5.1 Conceptual models</a>
60 <ul>
61 <li><a href="#5.1.1">        5.1.1  Translation environment</a>
62 <li><a href="#5.1.2">        5.1.2  Execution environments</a>
63 </ul>
64 <li><a href="#5.2">   5.2 Environmental considerations</a>
65 <ul>
66 <li><a href="#5.2.1">        5.2.1  Character sets</a>
67 <li><a href="#5.2.2">        5.2.2  Character display semantics</a>
68 <li><a href="#5.2.3">        5.2.3  Signals and interrupts</a>
69 <li><a href="#5.2.4">        5.2.4  Environmental limits</a>
70 </ul>
71 </ul>
72 <li><a href="#6">6. Language</a>
73 <ul>
74 <li><a href="#6.1">   6.1 Notation</a>
75 <li><a href="#6.2">   6.2 Concepts</a>
76 <ul>
77 <li><a href="#6.2.1">        6.2.1   Scopes of identifiers</a>
78 <li><a href="#6.2.2">        6.2.2   Linkages of identifiers</a>
79 <li><a href="#6.2.3">        6.2.3   Name spaces of identifiers</a>
80 <li><a href="#6.2.4">        6.2.4   Storage durations of objects</a>
81 <li><a href="#6.2.5">        6.2.5   Types</a>
82 <li><a href="#6.2.6">        6.2.6   Representations of types</a>
83 <li><a href="#6.2.7">        6.2.7   Compatible type and composite type</a>
84 <li><a href="#6.2.8">        6.2.8   Alignment of objects</a>
85 </ul>
86 <li><a href="#6.3">   6.3 Conversions</a>
87 <ul>
88 <li><a href="#6.3.1">        6.3.1   Arithmetic operands</a>
89 <li><a href="#6.3.2">        6.3.2   Other operands</a>
90 </ul>
91 <li><a href="#6.4">   6.4 Lexical elements</a>
92 <ul>
93 <li><a href="#6.4.1">        6.4.1   Keywords</a>
94 <li><a href="#6.4.2">        6.4.2   Identifiers</a>
95 <li><a href="#6.4.3">        6.4.3   Universal character names</a>
96 <li><a href="#6.4.4">        6.4.4   Constants</a>
97 <li><a href="#6.4.5">        6.4.5   String literals</a>
98 <li><a href="#6.4.6">        6.4.6   Punctuators</a>
99 <li><a href="#6.4.7">        6.4.7   Header names</a>
100 <li><a href="#6.4.8">        6.4.8   Preprocessing numbers</a>
101 <li><a href="#6.4.9">        6.4.9   Comments</a>
102 <!--page 4 -->
103 </ul>
104 <li><a href="#6.5">     6.5  Expressions</a>
105 <ul>
106 <li><a href="#6.5.1">          6.5.1   Primary expressions</a>
107 <li><a href="#6.5.2">          6.5.2   Postfix operators</a>
108 <li><a href="#6.5.3">          6.5.3   Unary operators</a>
109 <li><a href="#6.5.4">          6.5.4   Cast operators</a>
110 <li><a href="#6.5.5">          6.5.5   Multiplicative operators</a>
111 <li><a href="#6.5.6">          6.5.6   Additive operators</a>
112 <li><a href="#6.5.7">          6.5.7   Bitwise shift operators</a>
113 <li><a href="#6.5.8">          6.5.8   Relational operators</a>
114 <li><a href="#6.5.9">          6.5.9   Equality operators</a>
115 <li><a href="#6.5.10">          6.5.10 Bitwise AND operator</a>
116 <li><a href="#6.5.11">          6.5.11 Bitwise exclusive OR operator</a>
117 <li><a href="#6.5.12">          6.5.12 Bitwise inclusive OR operator</a>
118 <li><a href="#6.5.13">          6.5.13 Logical AND operator</a>
119 <li><a href="#6.5.14">          6.5.14 Logical OR operator</a>
120 <li><a href="#6.5.15">          6.5.15 Conditional operator</a>
121 <li><a href="#6.5.16">          6.5.16 Assignment operators</a>
122 <li><a href="#6.5.17">          6.5.17 Comma operator</a>
123 </ul>
124 <li><a href="#6.6">     6.6 Constant expressions</a>
125 <li><a href="#6.7">     6.7 Declarations</a>
126 <ul>
127 <li><a href="#6.7.1">          6.7.1   Storage-class specifiers</a>
128 <li><a href="#6.7.2">          6.7.2   Type specifiers</a>
129 <li><a href="#6.7.3">          6.7.3   Type qualifiers</a>
130 <li><a href="#6.7.4">          6.7.4   Function specifiers</a>
131 <li><a href="#6.7.5">          6.7.5   Alignment specifier</a>
132 <li><a href="#6.7.6">          6.7.6   Declarators</a>
133 <li><a href="#6.7.7">          6.7.7   Type names</a>
134 <li><a href="#6.7.8">          6.7.8   Type definitions</a>
135 <li><a href="#6.7.9">          6.7.9   Initialization</a>
136 <li><a href="#6.7.10">          6.7.10 Static assertions</a>
137 </ul>
138 <li><a href="#6.8">     6.8 Statements and blocks</a>
139 <ul>
140 <li><a href="#6.8.1">          6.8.1   Labeled statements</a>
141 <li><a href="#6.8.2">          6.8.2   Compound statement</a>
142 <li><a href="#6.8.3">          6.8.3   Expression and null statements</a>
143 <li><a href="#6.8.4">          6.8.4   Selection statements</a>
144 <li><a href="#6.8.5">          6.8.5   Iteration statements</a>
145 <li><a href="#6.8.6">          6.8.6   Jump statements</a>
146 </ul>
147 <li><a href="#6.9">     6.9 External definitions</a>
148 <ul>
149 <li><a href="#6.9.1">          6.9.1   Function definitions</a>
150 <li><a href="#6.9.2">          6.9.2   External object definitions</a>
151 </ul>
152 <li><a href="#6.10">     6.10 Preprocessing directives</a>
153 <ul>
154 <li><a href="#6.10.1">          6.10.1 Conditional inclusion</a>
155 <li><a href="#6.10.2">          6.10.2 Source file inclusion</a>
156 <li><a href="#6.10.3">          6.10.3 Macro replacement</a>
157 <!--page 5 -->
158 <li><a href="#6.10.4">       6.10.4 Line control</a>
159 <li><a href="#6.10.5">       6.10.5 Error directive</a>
160 <li><a href="#6.10.6">       6.10.6 Pragma directive</a>
161 <li><a href="#6.10.7">       6.10.7 Null directive</a>
162 <li><a href="#6.10.8">       6.10.8 Predefined macro names</a>
163 <li><a href="#6.10.9">       6.10.9 Pragma operator</a>
164 </ul>
165 <li><a href="#6.11">  6.11 Future language directions</a>
166 <ul>
167 <li><a href="#6.11.1">       6.11.1 Floating types</a>
168 <li><a href="#6.11.2">       6.11.2 Linkages of identifiers</a>
169 <li><a href="#6.11.3">       6.11.3 External names</a>
170 <li><a href="#6.11.4">       6.11.4 Character escape sequences</a>
171 <li><a href="#6.11.5">       6.11.5 Storage-class specifiers</a>
172 <li><a href="#6.11.6">       6.11.6 Function declarators</a>
173 <li><a href="#6.11.7">       6.11.7 Function definitions</a>
174 <li><a href="#6.11.8">       6.11.8 Pragma directives</a>
175 <li><a href="#6.11.9">       6.11.9 Predefined macro names</a>
176 </ul>
177 </ul>
178 <li><a href="#7">7. Library</a>
179 <ul>
180 <li><a href="#7.1">   7.1 Introduction</a>
181 <ul>
182 <li><a href="#7.1.1">         7.1.1 Definitions of terms</a>
183 <li><a href="#7.1.2">         7.1.2 Standard headers</a>
184 <li><a href="#7.1.3">         7.1.3 Reserved identifiers</a>
185 <li><a href="#7.1.4">         7.1.4 Use of library functions</a>
186 </ul>
187 <li><a href="#7.2">   7.2 Diagnostics &lt;assert.h&gt;</a>
188 <ul>
189 <li><a href="#7.2.1">         7.2.1 Program diagnostics</a>
190 </ul>
191 <li><a href="#7.3">   7.3 Complex arithmetic &lt;complex.h&gt;</a>
192 <ul>
193 <li><a href="#7.3.1">         7.3.1 Introduction</a>
194 <li><a href="#7.3.2">         7.3.2 Conventions</a>
195 <li><a href="#7.3.3">         7.3.3 Branch cuts</a>
196 <li><a href="#7.3.4">         7.3.4 The CX_LIMITED_RANGE pragma</a>
197 <li><a href="#7.3.5">         7.3.5 Trigonometric functions</a>
198 <li><a href="#7.3.6">         7.3.6 Hyperbolic functions</a>
199 <li><a href="#7.3.7">         7.3.7 Exponential and logarithmic functions</a>
200 <li><a href="#7.3.8">         7.3.8 Power and absolute-value functions</a>
201 <li><a href="#7.3.9">         7.3.9 Manipulation functions</a>
202 </ul>
203 <li><a href="#7.4">   7.4 Character handling &lt;ctype.h&gt;</a>
204 <ul>
205 <li><a href="#7.4.1">         7.4.1 Character classification functions</a>
206 <li><a href="#7.4.2">         7.4.2 Character case mapping functions</a>
207 </ul>
208 <li><a href="#7.5">   7.5 Errors &lt;errno.h&gt;</a>
209 <li><a href="#7.6">   7.6 Floating-point environment &lt;fenv.h&gt;</a>
210 <ul>
211 <li><a href="#7.6.1">         7.6.1 The FENV_ACCESS pragma</a>
212 <li><a href="#7.6.2">         7.6.2 Floating-point exceptions</a>
213 <li><a href="#7.6.3">         7.6.3 Rounding</a>
214 <li><a href="#7.6.4">         7.6.4 Environment</a>
215 </ul>
216 <li><a href="#7.7">   7.7 Characteristics of floating types &lt;float.h&gt;</a>
217 <!--page 6 -->
218 <li><a href="#7.8">     7.8    Format conversion of integer types &lt;inttypes.h&gt;</a>
219 <ul>
220 <li><a href="#7.8.1">            7.8.1    Macros for format specifiers</a>
221 <li><a href="#7.8.2">            7.8.2    Functions for greatest-width integer types</a>
222 </ul>
223 <li><a href="#7.9">     7.9    Alternative spellings &lt;iso646.h&gt;</a>
224 <li><a href="#7.10">     7.10   Sizes of integer types &lt;limits.h&gt;</a>
225 <li><a href="#7.11">     7.11   Localization &lt;locale.h&gt;</a>
226 <ul>
227 <li><a href="#7.11.1">            7.11.1 Locale control</a>
228 <li><a href="#7.11.2">            7.11.2 Numeric formatting convention inquiry</a>
229 </ul>
230 <li><a href="#7.12">     7.12   Mathematics &lt;math.h&gt;</a>
231 <ul>
232 <li><a href="#7.12.1">            7.12.1 Treatment of error conditions</a>
233 <li><a href="#7.12.2">            7.12.2 The FP_CONTRACT pragma</a>
234 <li><a href="#7.12.3">            7.12.3 Classification macros</a>
235 <li><a href="#7.12.4">            7.12.4 Trigonometric functions</a>
236 <li><a href="#7.12.5">            7.12.5 Hyperbolic functions</a>
237 <li><a href="#7.12.6">            7.12.6 Exponential and logarithmic functions</a>
238 <li><a href="#7.12.7">            7.12.7 Power and absolute-value functions</a>
239 <li><a href="#7.12.8">            7.12.8 Error and gamma functions</a>
240 <li><a href="#7.12.9">            7.12.9 Nearest integer functions</a>
241 <li><a href="#7.12.10">            7.12.10 Remainder functions</a>
242 <li><a href="#7.12.11">            7.12.11 Manipulation functions</a>
243 <li><a href="#7.12.12">            7.12.12 Maximum, minimum, and positive difference functions</a>
244 <li><a href="#7.12.13">            7.12.13 Floating multiply-add</a>
245 <li><a href="#7.12.14">            7.12.14 Comparison macros</a>
246 </ul>
247 <li><a href="#7.13">     7.13   Nonlocal jumps &lt;setjmp.h&gt;</a>
248 <ul>
249 <li><a href="#7.13.1">            7.13.1 Save calling environment</a>
250 <li><a href="#7.13.2">            7.13.2 Restore calling environment</a>
251 </ul>
252 <li><a href="#7.14">     7.14   Signal handling &lt;signal.h&gt;</a>
253 <ul>
254 <li><a href="#7.14.1">            7.14.1 Specify signal handling</a>
255 <li><a href="#7.14.2">            7.14.2 Send signal</a>
256 </ul>
257 <li><a href="#7.15">     7.15   Alignment &lt;stdalign.h&gt;</a>
258 <li><a href="#7.16">     7.16   Variable arguments &lt;stdarg.h&gt;</a>
259 <ul>
260 <li><a href="#7.16.1">            7.16.1 Variable argument list access macros</a>
261 </ul>
262 <li><a href="#7.17">     7.17   Atomics &lt;stdatomic.h&gt;</a>
263 <ul>
264 <li><a href="#7.17.1">            7.17.1 Introduction</a>
265 <li><a href="#7.17.2">            7.17.2 Initialization</a>
266 <li><a href="#7.17.3">            7.17.3 Order and consistency</a>
267 <li><a href="#7.17.4">            7.17.4 Fences</a>
268 <li><a href="#7.17.5">            7.17.5 Lock-free property</a>
269 <li><a href="#7.17.6">            7.17.6 Atomic integer and address types</a>
270 <li><a href="#7.17.7">            7.17.7 Operations on atomic types</a>
271 <li><a href="#7.17.8">            7.17.8 Atomic flag type and operations</a>
272 </ul>
273 <li><a href="#7.18">     7.18   Boolean type and values &lt;stdbool.h&gt;</a>
274 <li><a href="#7.19">     7.19   Common definitions &lt;stddef.h&gt;</a>
275 <li><a href="#7.20">     7.20   Integer types &lt;stdint.h&gt;</a>
276 <!--page 7 -->
277 <ul>
278 <li><a href="#7.20.1">         7.20.1 Integer types</a>
279 <li><a href="#7.20.2">         7.20.2 Limits of specified-width integer types</a>
280 <li><a href="#7.20.3">         7.20.3 Limits of other integer types</a>
281 <li><a href="#7.20.4">         7.20.4 Macros for integer constants</a>
282 </ul>
283 <li><a href="#7.21">  7.21   Input/output &lt;stdio.h&gt;</a>
284 <ul>
285 <li><a href="#7.21.1">         7.21.1 Introduction</a>
286 <li><a href="#7.21.2">         7.21.2 Streams</a>
287 <li><a href="#7.21.3">         7.21.3 Files</a>
288 <li><a href="#7.21.4">         7.21.4 Operations on files</a>
289 <li><a href="#7.21.5">         7.21.5 File access functions</a>
290 <li><a href="#7.21.6">         7.21.6 Formatted input/output functions</a>
291 <li><a href="#7.21.7">         7.21.7 Character input/output functions</a>
292 <li><a href="#7.21.8">         7.21.8 Direct input/output functions</a>
293 <li><a href="#7.21.9">         7.21.9 File positioning functions</a>
294 <li><a href="#7.21.10">         7.21.10 Error-handling functions</a>
295 </ul>
296 <li><a href="#7.22">  7.22   General utilities &lt;stdlib.h&gt;</a>
297 <ul>
298 <li><a href="#7.22.1">         7.22.1 Numeric conversion functions</a>
299 <li><a href="#7.22.2">         7.22.2 Pseudo-random sequence generation functions</a>
300 <li><a href="#7.22.3">         7.22.3 Memory management functions</a>
301 <li><a href="#7.22.4">         7.22.4 Communication with the environment</a>
302 <li><a href="#7.22.5">         7.22.5 Searching and sorting utilities</a>
303 <li><a href="#7.22.6">         7.22.6 Integer arithmetic functions</a>
304 <li><a href="#7.22.7">         7.22.7 Multibyte/wide character conversion functions</a>
305 <li><a href="#7.22.8">         7.22.8 Multibyte/wide string conversion functions</a>
306 </ul>
307 <li><a href="#7.23">  7.23   String handling &lt;string.h&gt;</a>
308 <ul>
309 <li><a href="#7.23.1">         7.23.1 String function conventions</a>
310 <li><a href="#7.23.2">         7.23.2 Copying functions</a>
311 <li><a href="#7.23.3">         7.23.3 Concatenation functions</a>
312 <li><a href="#7.23.4">         7.23.4 Comparison functions</a>
313 <li><a href="#7.23.5">         7.23.5 Search functions</a>
314 <li><a href="#7.23.6">         7.23.6 Miscellaneous functions</a>
315 </ul>
316 <li><a href="#7.24">  7.24   Type-generic math &lt;tgmath.h&gt;</a>
317 <li><a href="#7.25">  7.25   Threads &lt;threads.h&gt;</a>
318 <ul>
319 <li><a href="#7.25.1">         7.25.1 Introduction</a>
320 <li><a href="#7.25.2">         7.25.2 Initialization functions</a>
321 <li><a href="#7.25.3">         7.25.3 Condition variable functions</a>
322 <li><a href="#7.25.4">         7.25.4 Mutex functions</a>
323 <li><a href="#7.25.5">         7.25.5 Thread functions</a>
324 <li><a href="#7.25.6">         7.25.6 Thread-specific storage functions</a>
325 <li><a href="#7.25.7">         7.25.7 Time functions</a>
326 </ul>
327 <li><a href="#7.26">  7.26   Date and time &lt;time.h&gt;</a>
328 <ul>
329 <li><a href="#7.26.1">         7.26.1 Components of time</a>
330 <li><a href="#7.26.2">         7.26.2 Time manipulation functions</a>
331 <li><a href="#7.26.3">         7.26.3 Time conversion functions</a>
332 <!--page 8 -->
333 </ul>
334 <li><a href="#7.27">   7.27 Unicode utilities &lt;uchar.h&gt;</a>
335 <ul>
336 <li><a href="#7.27.1">        7.27.1 Restartable multibyte/wide character conversion functions</a>
337 </ul>
338 <li><a href="#7.28">   7.28 Extended multibyte and wide character utilities &lt;wchar.h&gt;</a>
339 <ul>
340 <li><a href="#7.28.1">        7.28.1 Introduction</a>
341 <li><a href="#7.28.2">        7.28.2 Formatted wide character input/output functions</a>
342 <li><a href="#7.28.3">        7.28.3 Wide character input/output functions</a>
343 <li><a href="#7.28.4">        7.28.4 General wide string utilities</a>
344 <ul>
345 <li><a href="#7.28.4.1">                 7.28.4.1 Wide string numeric conversion functions</a>
346 <li><a href="#7.28.4.2">                 7.28.4.2 Wide string copying functions</a>
347 <li><a href="#7.28.4.3">                 7.28.4.3 Wide string concatenation functions</a>
348 <li><a href="#7.28.4.4">                 7.28.4.4 Wide string comparison functions</a>
349 <li><a href="#7.28.4.5">                 7.28.4.5 Wide string search functions</a>
350 <li><a href="#7.28.4.6">                 7.28.4.6 Miscellaneous functions</a>
351 </ul>
352 <li><a href="#7.28.5">        7.28.5 Wide character time conversion functions</a>
353 <li><a href="#7.28.6">        7.28.6 Extended multibyte/wide character conversion utilities</a>
354 <ul>
355 <li><a href="#7.28.6.1">                 7.28.6.1 Single-byte/wide character conversion functions</a>
356 <li><a href="#7.28.6.2">                 7.28.6.2 Conversion state functions</a>
357 <li><a href="#7.28.6.3">                 7.28.6.3 Restartable multibyte/wide character conversion functions</a>
358 <li><a href="#7.28.6.4">                 7.28.6.4 Restartable multibyte/wide string conversion functions</a>
359 </ul>
360 </ul>
361 <li><a href="#7.29">   7.29 Wide character classification and mapping utilities &lt;wctype.h&gt;</a>
362 <ul>
363 <li><a href="#7.29.1">        7.29.1 Introduction</a>
364 <li><a href="#7.29.2">        7.29.2 Wide character classification utilities</a>
365 <ul>
366 <li><a href="#7.29.2.1">                 7.29.2.1 Wide character classification functions</a>
367 <li><a href="#7.29.2.2">                 7.29.2.2 Extensible wide character classification functions</a>
368 </ul>
369 <li><a href="#7.29.3">        7.29.3 Wide character case mapping utilities</a>
370 <ul>
371 <li><a href="#7.29.3.1">                 7.29.3.1 Wide character case mapping functions</a>
372 <li><a href="#7.29.3.2">                 7.29.3.2 Extensible wide character case mapping functions</a>
373 </ul>
374 </ul>
375 <li><a href="#7.30">   7.30 Future library directions</a>
376 <ul>
377 <li><a href="#7.30.1">        7.30.1 Complex arithmetic &lt;complex.h&gt;</a>
378 <li><a href="#7.30.2">        7.30.2 Character handling &lt;ctype.h&gt;</a>
379 <li><a href="#7.30.3">        7.30.3 Errors &lt;errno.h&gt;</a>
380 <li><a href="#7.30.4">        7.30.4 Format conversion of integer types &lt;inttypes.h&gt;</a>
381 <li><a href="#7.30.5">        7.30.5 Localization &lt;locale.h&gt;</a>
382 <li><a href="#7.30.6">        7.30.6 Signal handling &lt;signal.h&gt;</a>
383 <li><a href="#7.30.7">        7.30.7 Boolean type and values &lt;stdbool.h&gt;</a>
384 <li><a href="#7.30.8">        7.30.8 Integer types &lt;stdint.h&gt;</a>
385 <li><a href="#7.30.9">        7.30.9 Input/output &lt;stdio.h&gt;</a>
386 <li><a href="#7.30.10">        7.30.10 General utilities &lt;stdlib.h&gt;</a>
387 <li><a href="#7.30.11">        7.30.11 String handling &lt;string.h&gt;</a>
388 <!--page 9 -->
389 <li><a href="#7.30.12">        7.30.12 Extended multibyte and wide character utilities &lt;wchar.h&gt;</a>
390 <li><a href="#7.30.13">        7.30.13 Wide character classification and mapping utilities &lt;wctype.h&gt;</a>
391 </ul>
392 </ul>
393 <li><a href="#A">Annex A (informative) Language syntax summary</a>
394 <ul>
395 <li><a href="#A.1">  A.1 Lexical grammar</a>
396 <li><a href="#A.2">  A.2 Phrase structure grammar</a>
397 <li><a href="#A.3">  A.3 Preprocessing directives</a>
398 </ul>
399 <li><a href="#B">Annex B (informative) Library summary</a>
400 <ul>
401 <li><a href="#B.1">  B.1 Diagnostics &lt;assert.h&gt;</a>
402 <li><a href="#B.2">  B.2 Complex &lt;complex.h&gt;</a>
403 <li><a href="#B.3">  B.3 Character handling &lt;ctype.h&gt;</a>
404 <li><a href="#B.4">  B.4 Errors &lt;errno.h&gt;</a>
405 <li><a href="#B.5">  B.5 Floating-point environment &lt;fenv.h&gt;</a>
406 <li><a href="#B.6">  B.6 Characteristics of floating types &lt;float.h&gt;</a>
407 <li><a href="#B.7">  B.7 Format conversion of integer types &lt;inttypes.h&gt;</a>
408 <li><a href="#B.8">  B.8 Alternative spellings &lt;iso646.h&gt;</a>
409 <li><a href="#B.9">  B.9 Sizes of integer types &lt;limits.h&gt;</a>
410 <li><a href="#B.10">  B.10 Localization &lt;locale.h&gt;</a>
411 <li><a href="#B.11">  B.11 Mathematics &lt;math.h&gt;</a>
412 <li><a href="#B.12">  B.12 Nonlocal jumps &lt;setjmp.h&gt;</a>
413 <li><a href="#B.13">  B.13 Signal handling &lt;signal.h&gt;</a>
414 <li><a href="#B.14">  B.14 Alignment &lt;stdalign.h&gt;</a>
415 <li><a href="#B.15">  B.15 Variable arguments &lt;stdarg.h&gt;</a>
416 <li><a href="#B.16">  B.16 Atomics &lt;stdatomic.h&gt;</a>
417 <li><a href="#B.17">  B.17 Boolean type and values &lt;stdbool.h&gt;</a>
418 <li><a href="#B.18">  B.18 Common definitions &lt;stddef.h&gt;</a>
419 <li><a href="#B.19">  B.19 Integer types &lt;stdint.h&gt;</a>
420 <li><a href="#B.20">  B.20 Input/output &lt;stdio.h&gt;</a>
421 <li><a href="#B.21">  B.21 General utilities &lt;stdlib.h&gt;</a>
422 <li><a href="#B.22">  B.22 String handling &lt;string.h&gt;</a>
423 <li><a href="#B.23">  B.23 Type-generic math &lt;tgmath.h&gt;</a>
424 <li><a href="#B.24">  B.24 Threads &lt;threads.h&gt;</a>
425 <li><a href="#B.25">  B.25 Date and time &lt;time.h&gt;</a>
426 <li><a href="#B.26">  B.26 Unicode utilities &lt;uchar.h&gt;</a>
427 <li><a href="#B.27">  B.27 Extended multibyte/wide character utilities &lt;wchar.h&gt;</a>
428 <li><a href="#B.28">  B.28 Wide character classification and mapping utilities &lt;wctype.h&gt;</a>
429 </ul>
430 <li><a href="#C">Annex C (informative) Sequence points</a>
431 <li><a href="#D">Annex D (normative) Universal character names for identifiers</a>
432 <ul>
433 <li><a href="#D.1">  D.1 Ranges of characters allowed</a>
434 <li><a href="#D.2">  D.2 Ranges of characters disallowed initially</a>
435 </ul>
436 <li><a href="#E">Annex E (informative) Implementation limits</a>
437 <!--page 10 -->
438 <li><a href="#F">Annex F (normative) IEC 60559 floating-point arithmetic</a>
439 <ul>
440 <li><a href="#F.1">  F.1 Introduction</a>
441 <li><a href="#F.2">  F.2 Types</a>
442 <li><a href="#F.3">  F.3 Operators and functions</a>
443 <li><a href="#F.4">  F.4 Floating to integer conversion</a>
444 <li><a href="#F.5">  F.5 Binary-decimal conversion</a>
445 <li><a href="#F.6">  F.6 The return statement</a>
446 <li><a href="#F.7">  F.7 Contracted expressions</a>
447 <li><a href="#F.8">  F.8 Floating-point environment</a>
448 <li><a href="#F.9">  F.9 Optimization</a>
449 <li><a href="#F.10">  F.10 Mathematics &lt;math.h&gt;</a>
450 <ul>
451 <li><a href="#F.10.1">        F.10.1 Trigonometric functions</a>
452 <li><a href="#F.10.2">        F.10.2 Hyperbolic functions</a>
453 <li><a href="#F.10.3">        F.10.3 Exponential and logarithmic functions</a>
454 <li><a href="#F.10.4">        F.10.4 Power and absolute value functions</a>
455 <li><a href="#F.10.5">        F.10.5 Error and gamma functions</a>
456 <li><a href="#F.10.6">        F.10.6 Nearest integer functions</a>
457 <li><a href="#F.10.7">        F.10.7 Remainder functions</a>
458 <li><a href="#F.10.8">        F.10.8 Manipulation functions</a>
459 <li><a href="#F.10.9">        F.10.9 Maximum, minimum, and positive difference functions</a>
460 <li><a href="#F.10.10">        F.10.10 Floating multiply-add</a>
461 <li><a href="#F.10.11">        F.10.11 Comparison macros</a>
462 </ul>
463 </ul>
464 <li><a href="#G">Annex G (normative) IEC 60559-compatible complex arithmetic</a>
465 <ul>
466 <li><a href="#G.1">  G.1 Introduction</a>
467 <li><a href="#G.2">  G.2 Types</a>
468 <li><a href="#G.3">  G.3 Conventions</a>
469 <li><a href="#G.4">  G.4 Conversions</a>
470 <ul>
471 <li><a href="#G.4.1">       G.4.1 Imaginary types</a>
472 <li><a href="#G.4.2">       G.4.2 Real and imaginary</a>
473 <li><a href="#G.4.3">       G.4.3 Imaginary and complex</a>
474 </ul>
475 <li><a href="#G.5">  G.5 Binary operators</a>
476 <ul>
477 <li><a href="#G.5.1">       G.5.1 Multiplicative operators</a>
478 <li><a href="#G.5.2">       G.5.2 Additive operators</a>
479 </ul>
480 <li><a href="#G.6">  G.6 Complex arithmetic &lt;complex.h&gt;</a>
481 <ul>
482 <li><a href="#G.6.1">       G.6.1 Trigonometric functions</a>
483 <li><a href="#G.6.2">       G.6.2 Hyperbolic functions</a>
484 <li><a href="#G.6.3">       G.6.3 Exponential and logarithmic functions</a>
485 <li><a href="#G.6.4">       G.6.4 Power and absolute-value functions</a>
486 </ul>
487 <li><a href="#G.7">  G.7 Type-generic math &lt;tgmath.h&gt;</a>
488 </ul>
489 <li><a href="#H">Annex H (informative) Language independent arithmetic</a>
490 <ul>
491 <li><a href="#H.1">  H.1 Introduction</a>
492 <li><a href="#H.2">  H.2 Types</a>
493 <li><a href="#H.3">  H.3 Notification</a>
494 <!--page 11 -->
495 </ul>
496 <li><a href="#I">Annex I (informative) Common warnings</a>
497 <li><a href="#J">Annex J (informative) Portability issues</a>
498 <ul>
499 <li><a href="#J.1">  J.1 Unspecified behavior</a>
500 <li><a href="#J.2">  J.2 Undefined behavior</a>
501 <li><a href="#J.3">  J.3 Implementation-defined behavior</a>
502 <li><a href="#J.4">  J.4 Locale-specific behavior</a>
503 <li><a href="#J.5">  J.5 Common extensions</a>
504 </ul>
505 <li><a href="#K">Annex K (normative) Bounds-checking interfaces</a>
506 <ul>
507 <li><a href="#K.1">  K.1 Background</a>
508 <li><a href="#K.2">  K.2 Scope</a>
509 <li><a href="#K.3">  K.3 Library</a>
510 <ul>
511 <li><a href="#K.3.1">       K.3.1 Introduction</a>
512 <ul>
513 <li><a href="#K.3.1.1">                K.3.1.1 Standard headers</a>
514 <li><a href="#K.3.1.2">                K.3.1.2 Reserved identifiers</a>
515 <li><a href="#K.3.1.3">                K.3.1.3 Use of errno</a>
516 <li><a href="#K.3.1.4">                K.3.1.4 Runtime-constraint violations</a>
517 </ul>
518 <li><a href="#K.3.2">       K.3.2 Errors &lt;errno.h&gt;</a>
519 <li><a href="#K.3.3">       K.3.3 Common definitions &lt;stddef.h&gt;</a>
520 <li><a href="#K.3.4">       K.3.4 Integer types &lt;stdint.h&gt;</a>
521 <li><a href="#K.3.5">       K.3.5 Input/output &lt;stdio.h&gt;</a>
522 <ul>
523 <li><a href="#K.3.5.1">                K.3.5.1 Operations on files</a>
524 <li><a href="#K.3.5.2">                K.3.5.2 File access functions</a>
525 <li><a href="#K.3.5.3">                K.3.5.3 Formatted input/output functions</a>
526 <li><a href="#K.3.5.4">                K.3.5.4 Character input/output functions</a>
527 </ul>
528 <li><a href="#K.3.6">       K.3.6 General utilities &lt;stdlib.h&gt;</a>
529 <ul>
530 <li><a href="#K.3.6.1">                K.3.6.1 Runtime-constraint handling</a>
531 <li><a href="#K.3.6.2">                K.3.6.2 Communication with the environment</a>
532 <li><a href="#K.3.6.3">                K.3.6.3 Searching and sorting utilities</a>
533 <li><a href="#K.3.6.4">                K.3.6.4 Multibyte/wide character conversion functions</a>
534 <li><a href="#K.3.6.5">                K.3.6.5 Multibyte/wide string conversion functions</a>
535 </ul>
536 <li><a href="#K.3.7">       K.3.7 String handling &lt;string.h&gt;</a>
537 <ul>
538 <li><a href="#K.3.7.1">                K.3.7.1 Copying functions</a>
539 <li><a href="#K.3.7.2">                K.3.7.2 Concatenation functions</a>
540 <li><a href="#K.3.7.3">                K.3.7.3 Search functions</a>
541 <li><a href="#K.3.7.4">                K.3.7.4 Miscellaneous functions</a>
542 </ul>
543 <li><a href="#K.3.8">       K.3.8 Date and time &lt;time.h&gt;</a>
544 <ul>
545 <li><a href="#K.3.8.1">                K.3.8.1 Components of time</a>
546 <li><a href="#K.3.8.2">                K.3.8.2 Time conversion functions</a>
547 </ul>
548 <li><a href="#K.3.9">       K.3.9 Extended multibyte and wide character utilities &lt;wchar.h&gt;</a>
549 <ul>
550 <li><a href="#K.3.9.1">                K.3.9.1 Formatted wide character input/output functions</a>
551 <li><a href="#K.3.9.2">                K.3.9.2 General wide string utilities</a>
552 <!--page 12 -->
553 <li><a href="#K.3.9.3">               K.3.9.3 Extended multibyte/wide character conversion utilities</a>
554 </ul>
555 </ul>
556 </ul>
557 <li><a href="#L">Annex L (normative) Analyzability</a>
558 <ul>
559 <li><a href="#L.1">  L.1 Scope</a>
560 <li><a href="#L.2">  L.2 Definitions</a>
561 <li><a href="#L.3">  L.3 Requirements</a>
562 </ul>
563 <li><a href="#Bibliography">Bibliography</a>
564 <li><a href="#Index">Index</a>
565 <!--page 13 -->
566 </ul>
567
568 <p><small><a href="#Contents">Contents</a></small>
569 <h2><a name="Foreword" href="#Foreword">Foreword</a></h2>
570 <p><!--para 1 -->
571  ISO (the International Organization for Standardization) and IEC (the International
572  Electrotechnical Commission) form the specialized system for worldwide
573  standardization. National bodies that are member of ISO or IEC participate in the
574  development of International Standards through technical committees established by the
575  respective organization to deal with particular fields of technical activity. ISO and IEC
576  technical committees collaborate in fields of mutual interest. Other international
577  organizations, governmental and non-governmental, in liaison with ISO and IEC, also
578  take part in the work.
579 <p><!--para 2 -->
580  International Standards are drafted in accordance with the rules given in the ISO/IEC
581  Directives, Part 2. This International Standard was drafted in accordance with the fifth
582  edition (2004).
583 <p><!--para 3 -->
584  In the field of information technology, ISO and IEC have established a joint technical
585  committee, ISO/IEC JTC 1. Draft International Standards adopted by the joint technical
586  committee are circulated to national bodies for voting. Publication as an International
587  Standard requires approval by at least 75% of the national bodies casting a vote.
588 <p><!--para 4 -->
589  Attention is drawn to the possibility that some of the elements of this document may be
590  the subject of patent rights. ISO and IEC shall not be held responsible for identifying any
591  or all such patent rights.
592 <p><!--para 5 -->
593  This International Standard was prepared by Joint Technical Committee ISO/IEC JTC 1,
594  Information technology, Subcommittee SC 22, Programming languages, their
595  environments and system software interfaces. The Working Group responsible for this
596  standard (WG 14) maintains a site on the World Wide Web at http://www.open-
597  std.org/JTC1/SC22/WG14/ containing additional information relevant to this
598  standard such as a Rationale for many of the decisions made during its preparation and a
599  log of Defect Reports and Responses.
600 <p><!--para 6 -->
601  This third edition cancels and replaces the second edition, ISO/IEC 9899:1999, as
602  corrected by ISO/IEC 9899:1999/Cor 1:2001, ISO/IEC 9899:1999/Cor 2:2004, and
603  ISO/IEC 9899:1999/Cor 3:2007. Major changes from the previous edition include:
604 <ul>
605 <li>  conditional (optional) features (including some that were previously mandatory)
606 <li>  support for multiple threads of execution including an improved memory sequencing
607  model, atomic objects, and thread-local storage (<a href="#7.17">&lt;stdatomic.h&gt;</a> and
608  <a href="#7.25">&lt;threads.h&gt;</a>)
609 <li>  additional floating-point characteristic macros (<a href="#7.7">&lt;float.h&gt;</a>)
610 <li>  querying and specifying alignment of objects (<a href="#7.15">&lt;stdalign.h&gt;</a>, <a href="#7.22">&lt;stdlib.h&gt;</a>)
611 <li>  Unicode characters and           strings   (<a href="#7.27">&lt;uchar.h&gt;</a>)       (originally   specified    in
612  ISO/IEC TR 19769:2004)
613 <li>  type-generic expressions
614 <!--page 14 -->
615 <li>  static assertions
616 <li>  anonymous structures and unions
617 <li>  no-return functions
618 <li>  macros to create complex numbers (<a href="#7.3">&lt;complex.h&gt;</a>)
619 <li>  support for opening files for exclusive access
620 <li>  removed the gets function (<a href="#7.21">&lt;stdio.h&gt;</a>)
621 <li>  added the aligned_alloc, at_quick_exit, and quick_exit functions
622  (<a href="#7.22">&lt;stdlib.h&gt;</a>)
623 <li>  (conditional) support for bounds-checking interfaces (originally specified in
624  ISO/IEC TR 24731-1:2007)
625 <li>  (conditional) support for analyzability
626 </ul>
627 <p><!--para 7 -->
628  Major changes in the second edition included:
629 <ul>
630 <li>  restricted character set support via digraphs and <a href="#7.9">&lt;iso646.h&gt;</a> (originally specified
631  in AMD1)
632 <li>  wide character library support in <a href="#7.28">&lt;wchar.h&gt;</a> and <a href="#7.29">&lt;wctype.h&gt;</a> (originally
633  specified in AMD1)
634 <li>  more precise aliasing rules via effective type
635 <li>  restricted pointers
636 <li>  variable length arrays
637 <li>  flexible array members
638 <li>  static and type qualifiers in parameter array declarators
639 <li>  complex (and imaginary) support in <a href="#7.3">&lt;complex.h&gt;</a>
640 <li>  type-generic math macros in <a href="#7.24">&lt;tgmath.h&gt;</a>
641 <li>  the long long int type and library functions
642 <li>  increased minimum translation limits
643 <li>  additional floating-point characteristics in <a href="#7.7">&lt;float.h&gt;</a>
644 <li>  remove implicit int
645 <li>  reliable integer division
646 <li>  universal character names (\u and \U)
647 <li>  extended identifiers
648 <li>  hexadecimal floating-point constants and %a and %A printf/scanf conversion
649  specifiers
650 <!--page 15 -->
651 <li>  compound literals
652 <li>  designated initializers
653 <li>  // comments
654 <li>  extended integer types and library functions in <a href="#7.8">&lt;inttypes.h&gt;</a> and <a href="#7.20">&lt;stdint.h&gt;</a>
655 <li>  remove implicit function declaration
656 <li>  preprocessor arithmetic done in intmax_t/uintmax_t
657 <li>  mixed declarations and code
658 <li>  new block scopes for selection and iteration statements
659 <li>  integer constant type rules
660 <li>  integer promotion rules
661 <li>  macros with a variable number of arguments
662 <li>  the vscanf family of functions in <a href="#7.21">&lt;stdio.h&gt;</a> and <a href="#7.28">&lt;wchar.h&gt;</a>
663 <li>  additional math library functions in <a href="#7.12">&lt;math.h&gt;</a>
664 <li>  treatment of error conditions by math library functions (math_errhandling)
665 <li>  floating-point environment access in <a href="#7.6">&lt;fenv.h&gt;</a>
666 <li>  IEC 60559 (also known as IEC 559 or IEEE arithmetic) support
667 <li>  trailing comma allowed in enum declaration
668 <li>  %lf conversion specifier allowed in printf
669 <li>  inline functions
670 <li>  the snprintf family of functions in <a href="#7.21">&lt;stdio.h&gt;</a>
671 <li>  boolean type in <a href="#7.18">&lt;stdbool.h&gt;</a>
672 <li>  idempotent type qualifiers
673 <li>  empty macro arguments
674 <li>  new structure type compatibility rules (tag compatibility)
675 <li>  additional predefined macro names
676 <li>  _Pragma preprocessing operator
677 <li>  standard pragmas
678 <li>  __func__ predefined identifier
679 <li>  va_copy macro
680 <li>  additional strftime conversion specifiers
681 <li>  LIA compatibility annex
682 <!--page 16 -->
683 <li>  deprecate ungetc at the beginning of a binary file
684 <li>  remove deprecation of aliased array parameters
685 <li>  conversion of array to pointer not limited to lvalues
686 <li>  relaxed constraints on aggregate and union initialization
687 <li>  relaxed restrictions on portable header names
688 <li>  return without expression not permitted in function that returns a value (and vice
689  versa)
690 </ul>
691 <p><!--para 8 -->
692  Annexes D, F, G, K, and L form a normative part of this standard; annexes A, B, C, E, H, *
693  I, J, the bibliography, and the index are for information only. In accordance with Part 2 of
694  the ISO/IEC Directives, this foreword, the introduction, notes, footnotes, and examples
695  are also for information only.
696 <!--page 17 -->
697
698 <p><small><a href="#Contents">Contents</a></small>
699 <h2><a name="Introduction" href="#Introduction">Introduction</a></h2>
700 <p><!--para 1 -->
701  With the introduction of new devices and extended character sets, new features may be
702  added to this International Standard. Subclauses in the language and library clauses warn
703  implementors and programmers of usages which, though valid in themselves, may
704  conflict with future additions.
705 <p><!--para 2 -->
706  Certain features are obsolescent, which means that they may be considered for
707  withdrawal in future revisions of this International Standard. They are retained because
708  of their widespread use, but their use in new implementations (for implementation
709  features) or new programs (for language [<a href="#6.11">6.11</a>] or library features [<a href="#7.30">7.30</a>]) is discouraged.
710 <p><!--para 3 -->
711  This International Standard is divided into four major subdivisions:
712 <ul>
713 <li>  preliminary elements (clauses 1-4);
714 <li>  the characteristics of environments that translate and execute C programs (clause 5);
715 <li>  the language syntax, constraints, and semantics (clause 6);
716 <li>  the library facilities (clause 7).
717 </ul>
718 <p><!--para 4 -->
719  Examples are provided to illustrate possible forms of the constructions described.
720  Footnotes are provided to emphasize consequences of the rules described in that
721  subclause or elsewhere in this International Standard. References are used to refer to
722  other related subclauses. Recommendations are provided to give advice or guidance to
723  implementors. Annexes provide additional information and summarize the information
724  contained in this International Standard. A bibliography lists documents that were
725  referred to during the preparation of the standard.
726 <p><!--para 5 -->
727  The language clause (clause 6) is derived from ''The C Reference Manual''.
728 <p><!--para 6 -->
729  The library clause (clause 7) is based on the 1984 /usr/group Standard.
730 <!--page 18 -->
731 <!--page 19 -->
732
733 <p><small><a href="#Contents">Contents</a></small>
734 <h1>Programming languages -- C</h1>
735  
736  
737  
738
739 <p><small><a href="#Contents">Contents</a></small>
740 <h2><a name="1" href="#1">1. Scope</a></h2>
741 <p><!--para 1 -->
742  This International Standard specifies the form and establishes the interpretation of
743  programs written in the C programming language.<sup><a href="#note1"><b>1)</b></a></sup> It specifies
744 <ul>
745 <li>  the representation of C programs;
746 <li>  the syntax and constraints of the C language;
747 <li>  the semantic rules for interpreting C programs;
748 <li>  the representation of input data to be processed by C programs;
749 <li>  the representation of output data produced by C programs;
750 <li>  the restrictions and limits imposed by a conforming implementation of C.
751 </ul>
752 <p><!--para 2 -->
753  This International Standard does not specify
754 <ul>
755 <li>  the mechanism by which C programs are transformed for use by a data-processing
756  system;
757 <li>  the mechanism by which C programs are invoked for use by a data-processing
758  system;
759 <li>  the mechanism by which input data are transformed for use by a C program;
760 <li>  the mechanism by which output data are transformed after being produced by a C
761  program;
762 <li>  the size or complexity of a program and its data that will exceed the capacity of any
763  specific data-processing system or the capacity of a particular processor;
764 <li>  all minimal requirements of a data-processing system that is capable of supporting a
765  conforming implementation.
766  
767  
768 <!--page 20 -->
769 </ul>
770
771 <p><b>Footnotes</b>
772 <p><small><a name="note1" href="#note1">1)</a> This International Standard is designed to promote the portability of C programs among a variety of
773  data-processing systems. It is intended for use by implementors and programmers.
774 </small>
775
776 <p><small><a href="#Contents">Contents</a></small>
777 <h2><a name="2" href="#2">2. Normative references</a></h2>
778 <p><!--para 1 -->
779  The following referenced documents are indispensable for the application of this
780  document. For dated references, only the edition cited applies. For undated references,
781  the latest edition of the referenced document (including any amendments) applies.
782 <p><!--para 2 -->
783  ISO 31-11:1992, Quantities and units -- Part 11: Mathematical signs and symbols for
784  use in the physical sciences and technology.
785 <p><!--para 3 -->
786  ISO/IEC 646, Information technology -- ISO 7-bit coded character set for information
787  interchange.
788 <p><!--para 4 -->
789  ISO/IEC 2382-1:1993, Information technology -- Vocabulary -- Part 1: Fundamental
790  terms.
791 <p><!--para 5 -->
792  ISO 4217, Codes for the representation of currencies and funds.
793 <p><!--para 6 -->
794  ISO 8601, Data elements and interchange formats -- Information interchange --
795  Representation of dates and times.
796 <p><!--para 7 -->
797  ISO/IEC 10646 (all parts), Information technology -- Universal Multiple-Octet Coded
798  Character Set (UCS).
799 <p><!--para 8 -->
800  IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems (previously
801  designated IEC 559:1989).
802 <!--page 21 -->
803
804 <p><small><a href="#Contents">Contents</a></small>
805 <h2><a name="3" href="#3">3. Terms, definitions, and symbols</a></h2>
806 <p><!--para 1 -->
807  For the purposes of this International Standard, the following definitions apply. Other
808  terms are defined where they appear in italic type or on the left side of a syntax rule.
809  Terms explicitly defined in this International Standard are not to be presumed to refer
810  implicitly to similar terms defined elsewhere. Terms not defined in this International
811  Standard are to be interpreted according to ISO/IEC 2382-1. Mathematical symbols not
812  defined in this International Standard are to be interpreted according to ISO 31-11.
813
814 <p><small><a href="#Contents">Contents</a></small>
815 <h3><a name="3.1" href="#3.1">3.1</a></h3>
816 <p><!--para 1 -->
817 <b> access</b><br>
818  &lt;execution-time action&gt; to read or modify the value of an object
819 <p><!--para 2 -->
820  NOTE 1   Where only one of these two actions is meant, ''read'' or ''modify'' is used.
821  
822 <p><!--para 3 -->
823  NOTE 2   ''Modify'' includes the case where the new value being stored is the same as the previous value.
824  
825 <p><!--para 4 -->
826  NOTE 3   Expressions that are not evaluated do not access objects.
827  
828
829 <p><small><a href="#Contents">Contents</a></small>
830 <h3><a name="3.2" href="#3.2">3.2</a></h3>
831 <p><!--para 1 -->
832 <b> alignment</b><br>
833  requirement that objects of a particular type be located on storage boundaries with
834  addresses that are particular multiples of a byte address
835
836 <p><small><a href="#Contents">Contents</a></small>
837 <h3><a name="3.3" href="#3.3">3.3</a></h3>
838 <p><!--para 1 -->
839 <b> argument</b><br>
840  actual argument
841  actual parameter (deprecated)
842  expression in the comma-separated list bounded by the parentheses in a function call
843  expression, or a sequence of preprocessing tokens in the comma-separated list bounded
844  by the parentheses in a function-like macro invocation
845
846 <p><small><a href="#Contents">Contents</a></small>
847 <h3><a name="3.4" href="#3.4">3.4</a></h3>
848 <p><!--para 1 -->
849 <b> behavior</b><br>
850  external appearance or action
851
852 <p><small><a href="#Contents">Contents</a></small>
853 <h4><a name="3.4.1" href="#3.4.1">3.4.1</a></h4>
854 <p><!--para 1 -->
855 <b> implementation-defined behavior</b><br>
856  unspecified behavior where each implementation documents how the choice is made
857 <p><!--para 2 -->
858  EXAMPLE An example of implementation-defined behavior is the propagation of the high-order bit
859  when a signed integer is shifted right.
860  
861
862 <p><small><a href="#Contents">Contents</a></small>
863 <h4><a name="3.4.2" href="#3.4.2">3.4.2</a></h4>
864 <p><!--para 1 -->
865 <b> locale-specific behavior</b><br>
866  behavior that depends on local conventions of nationality, culture, and language that each
867  implementation documents
868 <!--page 22 -->
869 <p><!--para 2 -->
870  EXAMPLE An example of locale-specific behavior is whether the islower function returns true for
871  characters other than the 26 lowercase Latin letters.
872  
873
874 <p><small><a href="#Contents">Contents</a></small>
875 <h4><a name="3.4.3" href="#3.4.3">3.4.3</a></h4>
876 <p><!--para 1 -->
877 <b> undefined behavior</b><br>
878  behavior, upon use of a nonportable or erroneous program construct or of erroneous data,
879  for which this International Standard imposes no requirements
880 <p><!--para 2 -->
881  NOTE Possible undefined behavior ranges from ignoring the situation completely with unpredictable
882  results, to behaving during translation or program execution in a documented manner characteristic of the
883  environment (with or without the issuance of a diagnostic message), to terminating a translation or
884  execution (with the issuance of a diagnostic message).
885  
886 <p><!--para 3 -->
887  EXAMPLE        An example of undefined behavior is the behavior on integer overflow.
888  
889
890 <p><small><a href="#Contents">Contents</a></small>
891 <h4><a name="3.4.4" href="#3.4.4">3.4.4</a></h4>
892 <p><!--para 1 -->
893 <b> unspecified behavior</b><br>
894  use of an unspecified value, or other behavior where this International Standard provides
895  two or more possibilities and imposes no further requirements on which is chosen in any
896  instance
897 <p><!--para 2 -->
898  EXAMPLE        An example of unspecified behavior is the order in which the arguments to a function are
899  evaluated.
900  
901
902 <p><small><a href="#Contents">Contents</a></small>
903 <h3><a name="3.5" href="#3.5">3.5</a></h3>
904 <p><!--para 1 -->
905 <b> bit</b><br>
906  unit of data storage in the execution environment large enough to hold an object that may
907  have one of two values
908 <p><!--para 2 -->
909  NOTE     It need not be possible to express the address of each individual bit of an object.
910  
911
912 <p><small><a href="#Contents">Contents</a></small>
913 <h3><a name="3.6" href="#3.6">3.6</a></h3>
914 <p><!--para 1 -->
915 <b> byte</b><br>
916  addressable unit of data storage large enough to hold any member of the basic character
917  set of the execution environment
918 <p><!--para 2 -->
919  NOTE 1     It is possible to express the address of each individual byte of an object uniquely.
920  
921 <p><!--para 3 -->
922  NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementation-
923  defined. The least significant bit is called the low-order bit; the most significant bit is called the high-order
924  bit.
925  
926
927 <p><small><a href="#Contents">Contents</a></small>
928 <h3><a name="3.7" href="#3.7">3.7</a></h3>
929 <p><!--para 1 -->
930 <b> character</b><br>
931  &lt;abstract&gt; member of a set of elements used for the organization, control, or
932  representation of data
933
934 <p><small><a href="#Contents">Contents</a></small>
935 <h4><a name="3.7.1" href="#3.7.1">3.7.1</a></h4>
936 <p><!--para 1 -->
937 <b> character</b><br>
938  single-byte character
939  &lt;C&gt; bit representation that fits in a byte
940 <!--page 23 -->
941
942 <p><small><a href="#Contents">Contents</a></small>
943 <h4><a name="3.7.2" href="#3.7.2">3.7.2</a></h4>
944 <p><!--para 1 -->
945 <b> multibyte character</b><br>
946  sequence of one or more bytes representing a member of the extended character set of
947  either the source or the execution environment
948 <p><!--para 2 -->
949  NOTE    The extended character set is a superset of the basic character set.
950  
951
952 <p><small><a href="#Contents">Contents</a></small>
953 <h4><a name="3.7.3" href="#3.7.3">3.7.3</a></h4>
954 <p><!--para 1 -->
955 <b> wide character</b><br>
956  bit representation that fits in an object of type wchar_t, capable of representing any
957  character in the current locale
958
959 <p><small><a href="#Contents">Contents</a></small>
960 <h3><a name="3.8" href="#3.8">3.8</a></h3>
961 <p><!--para 1 -->
962 <b> constraint</b><br>
963  restriction, either syntactic or semantic, by which the exposition of language elements is
964  to be interpreted
965
966 <p><small><a href="#Contents">Contents</a></small>
967 <h3><a name="3.9" href="#3.9">3.9</a></h3>
968 <p><!--para 1 -->
969 <b> correctly rounded result</b><br>
970  representation in the result format that is nearest in value, subject to the current rounding
971  mode, to what the result would be given unlimited range and precision
972
973 <p><small><a href="#Contents">Contents</a></small>
974 <h3><a name="3.10" href="#3.10">3.10</a></h3>
975 <p><!--para 1 -->
976 <b> diagnostic message</b><br>
977  message belonging to an implementation-defined subset of the implementation's message
978  output
979
980 <p><small><a href="#Contents">Contents</a></small>
981 <h3><a name="3.11" href="#3.11">3.11</a></h3>
982 <p><!--para 1 -->
983 <b> forward reference</b><br>
984  reference to a later subclause of this International Standard that contains additional
985  information relevant to this subclause
986
987 <p><small><a href="#Contents">Contents</a></small>
988 <h3><a name="3.12" href="#3.12">3.12</a></h3>
989 <p><!--para 1 -->
990 <b> implementation</b><br>
991  particular set of software, running in a particular translation environment under particular
992  control options, that performs translation of programs for, and supports execution of
993  functions in, a particular execution environment
994
995 <p><small><a href="#Contents">Contents</a></small>
996 <h3><a name="3.13" href="#3.13">3.13</a></h3>
997 <p><!--para 1 -->
998 <b> implementation limit</b><br>
999  restriction imposed upon programs by the implementation
1000
1001 <p><small><a href="#Contents">Contents</a></small>
1002 <h3><a name="3.14" href="#3.14">3.14</a></h3>
1003 <p><!--para 1 -->
1004 <b> memory location</b><br>
1005  either an object of scalar type, or a maximal sequence of adjacent bit-fields all having
1006  nonzero width
1007 <!--page 24 -->
1008 <p><!--para 2 -->
1009  NOTE 1 Two threads of execution can update and access separate memory locations without interfering
1010  with each other.
1011  
1012 <p><!--para 3 -->
1013  NOTE 2 A bit-field and an adjacent non-bit-field member are in separate memory locations. The same
1014  applies to two bit-fields, if one is declared inside a nested structure declaration and the other is not, or if the
1015  two are separated by a zero-length bit-field declaration, or if they are separated by a non-bit-field member
1016  declaration. It is not safe to concurrently update two non-atomic bit-fields in the same structure if all
1017  members declared between them are also (non-zero-length) bit-fields, no matter what the sizes of those
1018  intervening bit-fields happen to be.
1019  
1020 <p><!--para 4 -->
1021  EXAMPLE        A structure declared as
1022 <pre>
1023           struct {
1024                 char a;
1025                 int b:5, c:11, :0, d:8;
1026                 struct { int ee:8; } e;
1027           }
1028 </pre>
1029  contains four separate memory locations: The member a, and bit-fields d and e.ee are each separate
1030  memory locations, and can be modified concurrently without interfering with each other. The bit-fields b
1031  and c together constitute the fourth memory location. The bit-fields b and c cannot be concurrently
1032  modified, but b and a, for example, can be.
1033  
1034
1035 <p><small><a href="#Contents">Contents</a></small>
1036 <h3><a name="3.15" href="#3.15">3.15</a></h3>
1037 <p><!--para 1 -->
1038 <b> object</b><br>
1039  region of data storage in the execution environment, the contents of which can represent
1040  values
1041 <p><!--para 2 -->
1042  NOTE      When referenced, an object may be interpreted as having a particular type; see <a href="#6.3.2.1">6.3.2.1</a>.
1043  
1044
1045 <p><small><a href="#Contents">Contents</a></small>
1046 <h3><a name="3.16" href="#3.16">3.16</a></h3>
1047 <p><!--para 1 -->
1048 <b> parameter</b><br>
1049  formal parameter
1050  formal argument (deprecated)
1051  object declared as part of a function declaration or definition that acquires a value on
1052  entry to the function, or an identifier from the comma-separated list bounded by the
1053  parentheses immediately following the macro name in a function-like macro definition
1054
1055 <p><small><a href="#Contents">Contents</a></small>
1056 <h3><a name="3.17" href="#3.17">3.17</a></h3>
1057 <p><!--para 1 -->
1058 <b> recommended practice</b><br>
1059  specification that is strongly recommended as being in keeping with the intent of the
1060  standard, but that may be impractical for some implementations
1061
1062 <p><small><a href="#Contents">Contents</a></small>
1063 <h3><a name="3.18" href="#3.18">3.18</a></h3>
1064 <p><!--para 1 -->
1065 <b> runtime-constraint</b><br>
1066  requirement on a program when calling a library function
1067 <p><!--para 2 -->
1068  NOTE 1 Despite the similar terms, a runtime-constraint is not a kind of constraint as defined by <a href="#3.8">3.8</a>, and
1069  need not be diagnosed at translation time.
1070  
1071 <p><!--para 3 -->
1072  NOTE 2 Implementations that support the extensions in <a href="#K">annex K</a> are required to verify that the runtime-
1073  constraints for a library function are not violated by the program; see <a href="#K.3.1.4">K.3.1.4</a>.
1074 <!--page 25 -->
1075
1076 <p><small><a href="#Contents">Contents</a></small>
1077 <h3><a name="3.19" href="#3.19">3.19</a></h3>
1078 <p><!--para 1 -->
1079 <b> value</b><br>
1080  precise meaning of the contents of an object when interpreted as having a specific type
1081
1082 <p><small><a href="#Contents">Contents</a></small>
1083 <h4><a name="3.19.1" href="#3.19.1">3.19.1</a></h4>
1084 <p><!--para 1 -->
1085 <b> implementation-defined value</b><br>
1086  unspecified value where each implementation documents how the choice is made
1087
1088 <p><small><a href="#Contents">Contents</a></small>
1089 <h4><a name="3.19.2" href="#3.19.2">3.19.2</a></h4>
1090 <p><!--para 1 -->
1091 <b> indeterminate value</b><br>
1092  either an unspecified value or a trap representation
1093
1094 <p><small><a href="#Contents">Contents</a></small>
1095 <h4><a name="3.19.3" href="#3.19.3">3.19.3</a></h4>
1096 <p><!--para 1 -->
1097 <b> unspecified value</b><br>
1098  valid value of the relevant type where this International Standard imposes no
1099  requirements on which value is chosen in any instance
1100 <p><!--para 2 -->
1101  NOTE     An unspecified value cannot be a trap representation.
1102  
1103
1104 <p><small><a href="#Contents">Contents</a></small>
1105 <h4><a name="3.19.4" href="#3.19.4">3.19.4</a></h4>
1106 <p><!--para 1 -->
1107 <b> trap representation</b><br>
1108  an object representation that need not represent a value of the object type
1109
1110 <p><small><a href="#Contents">Contents</a></small>
1111 <h4><a name="3.19.5" href="#3.19.5">3.19.5</a></h4>
1112 <p><!--para 1 -->
1113 <b> perform a trap</b><br>
1114  interrupt execution of the program such that no further operations are performed
1115 <p><!--para 2 -->
1116  NOTE In this International Standard, when the word ''trap'' is not immediately followed by
1117  ''representation'', this is the intended usage.<sup><a href="#note2"><b>2)</b></a></sup>
1118  
1119
1120 <p><b>Footnotes</b>
1121 <p><small><a name="note2" href="#note2">2)</a> For example, ''Trapping or stopping (if supported) is disabled...'' (<a href="#F.8.2">F.8.2</a>). Note that fetching a trap
1122  representation might perform a trap but is not required to (see <a href="#6.2.6.1">6.2.6.1</a>).
1123 </small>
1124
1125 <p><small><a href="#Contents">Contents</a></small>
1126 <h3><a name="3.20" href="#3.20">3.20</a></h3>
1127 <p><!--para 1 -->
1128 <b> [^ x^]</b><br>
1129  ceiling of x: the least integer greater than or equal to x
1130 <p><!--para 2 -->
1131  EXAMPLE       [^2.4^] is 3, [^-2.4^] is -2.
1132  
1133
1134 <p><small><a href="#Contents">Contents</a></small>
1135 <h3><a name="3.21" href="#3.21">3.21</a></h3>
1136 <p><!--para 1 -->
1137 <b> [_ x_]</b><br>
1138  floor of x: the greatest integer less than or equal to x
1139 <p><!--para 2 -->
1140  EXAMPLE       [_2.4_] is 2, [_-2.4_] is -3.
1141  
1142  
1143  
1144  
1145 <!--page 26 -->
1146
1147 <p><small><a href="#Contents">Contents</a></small>
1148 <h2><a name="4" href="#4">4. Conformance</a></h2>
1149 <p><!--para 1 -->
1150  In this International Standard, ''shall'' is to be interpreted as a requirement on an
1151  implementation or on a program; conversely, ''shall not'' is to be interpreted as a
1152  prohibition.
1153 <p><!--para 2 -->
1154  If a ''shall'' or ''shall not'' requirement that appears outside of a constraint or runtime-
1155  constraint is violated, the behavior is undefined. Undefined behavior is otherwise
1156  indicated in this International Standard by the words ''undefined behavior'' or by the
1157  omission of any explicit definition of behavior. There is no difference in emphasis among
1158  these three; they all describe ''behavior that is undefined''.
1159 <p><!--para 3 -->
1160  A program that is correct in all other aspects, operating on correct data, containing
1161  unspecified behavior shall be a correct program and act in accordance with <a href="#5.1.2.3">5.1.2.3</a>.
1162 <p><!--para 4 -->
1163  The implementation shall not successfully translate a preprocessing translation unit
1164  containing a #error preprocessing directive unless it is part of a group skipped by
1165  conditional inclusion.
1166 <p><!--para 5 -->
1167  A strictly conforming program shall use only those features of the language and library
1168  specified in this International Standard.<sup><a href="#note3"><b>3)</b></a></sup> It shall not produce output dependent on any
1169  unspecified, undefined, or implementation-defined behavior, and shall not exceed any
1170  minimum implementation limit.
1171 <p><!--para 6 -->
1172  The two forms of conforming implementation are hosted and freestanding. A conforming
1173  hosted implementation shall accept any strictly conforming program. A conforming
1174  freestanding implementation shall accept any strictly conforming program that does not
1175  use complex types and in which the use of the features specified in the library clause
1176  (clause 7) is confined to the contents of the standard headers <a href="#7.7">&lt;float.h&gt;</a>,
1177  <a href="#7.9">&lt;iso646.h&gt;</a>, <a href="#7.10">&lt;limits.h&gt;</a>, <a href="#7.15">&lt;stdalign.h&gt;</a>, <a href="#7.16">&lt;stdarg.h&gt;</a>, <a href="#7.18">&lt;stdbool.h&gt;</a>,
1178  <a href="#7.19">&lt;stddef.h&gt;</a>, and <a href="#7.20">&lt;stdint.h&gt;</a>. A conforming implementation may have extensions
1179  (including additional library functions), provided they do not alter the behavior of any
1180  strictly conforming program.<sup><a href="#note4"><b>4)</b></a></sup>
1181  
1182  
1183  
1184 <!--page 27 -->
1185 <p><!--para 7 -->
1186  A conforming program is one that is acceptable to a conforming implementation.<sup><a href="#note5"><b>5)</b></a></sup>
1187 <p><!--para 8 -->
1188  An implementation shall be accompanied by a document that defines all implementation-
1189  defined and locale-specific characteristics and all extensions.
1190 <p><b> Forward references</b>: conditional inclusion (<a href="#6.10.1">6.10.1</a>), error directive (<a href="#6.10.5">6.10.5</a>),
1191  characteristics of floating types <a href="#7.7">&lt;float.h&gt;</a> (<a href="#7.7">7.7</a>), alternative spellings <a href="#7.9">&lt;iso646.h&gt;</a>
1192  (<a href="#7.9">7.9</a>), sizes of integer types <a href="#7.10">&lt;limits.h&gt;</a> (<a href="#7.10">7.10</a>), alignment <a href="#7.15">&lt;stdalign.h&gt;</a> (<a href="#7.15">7.15</a>),
1193  variable arguments <a href="#7.16">&lt;stdarg.h&gt;</a> (<a href="#7.16">7.16</a>), boolean type and values <a href="#7.18">&lt;stdbool.h&gt;</a>
1194  (<a href="#7.18">7.18</a>), common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), integer types <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#7.20">7.20</a>).
1195  
1196  
1197  
1198  
1199 <!--page 28 -->
1200
1201 <p><b>Footnotes</b>
1202 <p><small><a name="note3" href="#note3">3)</a> A strictly conforming program can use conditional features (see <a href="#6.10.8.3">6.10.8.3</a>) provided the use is guarded
1203  by an appropriate conditional inclusion preprocessing directive using the related macro. For example:
1204
1205 <pre>
1206          #ifdef __STDC_IEC_559__ /* FE_UPWARD defined */
1207             /* ... */
1208             fesetround(FE_UPWARD);
1209             /* ... */
1210          #endif
1211 </pre>
1212  
1213 </small>
1214 <p><small><a name="note4" href="#note4">4)</a> This implies that a conforming implementation reserves no identifiers other than those explicitly
1215  reserved in this International Standard.
1216 </small>
1217 <p><small><a name="note5" href="#note5">5)</a> Strictly conforming programs are intended to be maximally portable among conforming
1218  implementations. Conforming programs may depend upon nonportable features of a conforming
1219  implementation.
1220 </small>
1221
1222 <p><small><a href="#Contents">Contents</a></small>
1223 <h2><a name="5" href="#5">5. Environment</a></h2>
1224 <p><!--para 1 -->
1225  An implementation translates C source files and executes C programs in two data-
1226  processing-system environments, which will be called the translation environment and
1227  the execution environment in this International Standard. Their characteristics define and
1228  constrain the results of executing conforming C programs constructed according to the
1229  syntactic and semantic rules for conforming implementations.
1230 <p><b> Forward references</b>: In this clause, only a few of many possible forward references
1231  have been noted.
1232
1233 <p><small><a href="#Contents">Contents</a></small>
1234 <h3><a name="5.1" href="#5.1">5.1 Conceptual models</a></h3>
1235
1236 <p><small><a href="#Contents">Contents</a></small>
1237 <h4><a name="5.1.1" href="#5.1.1">5.1.1 Translation environment</a></h4>
1238
1239 <p><small><a href="#Contents">Contents</a></small>
1240 <h5><a name="5.1.1.1" href="#5.1.1.1">5.1.1.1 Program structure</a></h5>
1241 <p><!--para 1 -->
1242  A C program need not all be translated at the same time. The text of the program is kept
1243  in units called source files, (or preprocessing files) in this International Standard. A
1244  source file together with all the headers and source files included via the preprocessing
1245  directive #include is known as a preprocessing translation unit. After preprocessing, a
1246  preprocessing translation unit is called a translation unit. Previously translated translation
1247  units may be preserved individually or in libraries. The separate translation units of a
1248  program communicate by (for example) calls to functions whose identifiers have external
1249  linkage, manipulation of objects whose identifiers have external linkage, or manipulation
1250  of data files. Translation units may be separately translated and then later linked to
1251  produce an executable program.
1252 <p><b> Forward references</b>: linkages of identifiers (<a href="#6.2.2">6.2.2</a>), external definitions (<a href="#6.9">6.9</a>),
1253  preprocessing directives (<a href="#6.10">6.10</a>).
1254
1255 <p><small><a href="#Contents">Contents</a></small>
1256 <h5><a name="5.1.1.2" href="#5.1.1.2">5.1.1.2 Translation phases</a></h5>
1257 <p><!--para 1 -->
1258  The precedence among the syntax rules of translation is specified by the following
1259  phases.<sup><a href="#note6"><b>6)</b></a></sup>
1260 <ol>
1261 <li>  Physical source file multibyte characters are mapped, in an implementation-
1262  defined manner, to the source character set (introducing new-line characters for
1263  end-of-line indicators) if necessary. Trigraph sequences are replaced by
1264  corresponding single-character internal representations.
1265  
1266  
1267  
1268 <!--page 29 -->
1269 <li>  Each instance of a backslash character (\) immediately followed by a new-line
1270  character is deleted, splicing physical source lines to form logical source lines.
1271  Only the last backslash on any physical source line shall be eligible for being part
1272  of such a splice. A source file that is not empty shall end in a new-line character,
1273  which shall not be immediately preceded by a backslash character before any such
1274  splicing takes place.
1275 <li>  The source file is decomposed into preprocessing tokens<sup><a href="#note7"><b>7)</b></a></sup> and sequences of
1276  white-space characters (including comments). A source file shall not end in a
1277  partial preprocessing token or in a partial comment. Each comment is replaced by
1278  one space character. New-line characters are retained. Whether each nonempty
1279  sequence of white-space characters other than new-line is retained or replaced by
1280  one space character is implementation-defined.
1281 <li>  Preprocessing directives are executed, macro invocations are expanded, and
1282  _Pragma unary operator expressions are executed. If a character sequence that
1283  matches the syntax of a universal character name is produced by token
1284  concatenation (<a href="#6.10.3.3">6.10.3.3</a>), the behavior is undefined. A #include preprocessing
1285  directive causes the named header or source file to be processed from phase 1
1286  through phase 4, recursively. All preprocessing directives are then deleted.
1287 <li>  Each source character set member and escape sequence in character constants and
1288  string literals is converted to the corresponding member of the execution character
1289  set; if there is no corresponding member, it is converted to an implementation-
1290  defined member other than the null (wide) character.<sup><a href="#note8"><b>8)</b></a></sup>
1291 <li>  Adjacent string literal tokens are concatenated.
1292 <li>  White-space characters separating tokens are no longer significant. Each
1293  preprocessing token is converted into a token. The resulting tokens are
1294  syntactically and semantically analyzed and translated as a translation unit.
1295 <li>  All external object and function references are resolved. Library components are
1296  linked to satisfy external references to functions and objects not defined in the
1297  current translation. All such translator output is collected into a program image
1298  which contains information needed for execution in its execution environment.
1299 </ol>
1300 <p><b> Forward references</b>: universal character names (<a href="#6.4.3">6.4.3</a>), lexical elements (<a href="#6.4">6.4</a>),
1301  preprocessing directives (<a href="#6.10">6.10</a>), trigraph sequences (<a href="#5.2.1.1">5.2.1.1</a>), external definitions (<a href="#6.9">6.9</a>).
1302  
1303  
1304  
1305 <!--page 30 -->
1306
1307 <p><b>Footnotes</b>
1308 <p><small><a name="note6" href="#note6">6)</a> Implementations shall behave as if these separate phases occur, even though many are typically folded
1309  together in practice. Source files, translation units, and translated translation units need not
1310  necessarily be stored as files, nor need there be any one-to-one correspondence between these entities
1311  and any external representation. The description is conceptual only, and does not specify any
1312  particular implementation.
1313 </small>
1314 <p><small><a name="note7" href="#note7">7)</a> As described in <a href="#6.4">6.4</a>, the process of dividing a source file's characters into preprocessing tokens is
1315  context-dependent. For example, see the handling of &lt; within a #include preprocessing directive.
1316 </small>
1317 <p><small><a name="note8" href="#note8">8)</a> An implementation need not convert all non-corresponding source characters to the same execution
1318  character.
1319 </small>
1320
1321 <p><small><a href="#Contents">Contents</a></small>
1322 <h5><a name="5.1.1.3" href="#5.1.1.3">5.1.1.3 Diagnostics</a></h5>
1323 <p><!--para 1 -->
1324  A conforming implementation shall produce at least one diagnostic message (identified in
1325  an implementation-defined manner) if a preprocessing translation unit or translation unit
1326  contains a violation of any syntax rule or constraint, even if the behavior is also explicitly
1327  specified as undefined or implementation-defined. Diagnostic messages need not be
1328  produced in other circumstances.<sup><a href="#note9"><b>9)</b></a></sup>
1329 <p><!--para 2 -->
1330  EXAMPLE        An implementation shall issue a diagnostic for the translation unit:
1331 <pre>
1332           char i;
1333           int i;
1334 </pre>
1335  because in those cases where wording in this International Standard describes the behavior for a construct
1336  as being both a constraint error and resulting in undefined behavior, the constraint error shall be diagnosed.
1337  
1338
1339 <p><b>Footnotes</b>
1340 <p><small><a name="note9" href="#note9">9)</a> The intent is that an implementation should identify the nature of, and where possible localize, each
1341  violation. Of course, an implementation is free to produce any number of diagnostics as long as a
1342  valid program is still correctly translated. It may also successfully translate an invalid program.
1343 </small>
1344
1345 <p><small><a href="#Contents">Contents</a></small>
1346 <h4><a name="5.1.2" href="#5.1.2">5.1.2 Execution environments</a></h4>
1347 <p><!--para 1 -->
1348  Two execution environments are defined: freestanding and hosted. In both cases,
1349  program startup occurs when a designated C function is called by the execution
1350  environment. All objects with static storage duration shall be initialized (set to their
1351  initial values) before program startup. The manner and timing of such initialization are
1352  otherwise unspecified. Program termination returns control to the execution
1353  environment.
1354 <p><b> Forward references</b>: storage durations of objects (<a href="#6.2.4">6.2.4</a>), initialization (<a href="#6.7.9">6.7.9</a>).
1355
1356 <p><small><a href="#Contents">Contents</a></small>
1357 <h5><a name="5.1.2.1" href="#5.1.2.1">5.1.2.1 Freestanding environment</a></h5>
1358 <p><!--para 1 -->
1359  In a freestanding environment (in which C program execution may take place without any
1360  benefit of an operating system), the name and type of the function called at program
1361  startup are implementation-defined. Any library facilities available to a freestanding
1362  program, other than the minimal set required by clause 4, are implementation-defined.
1363 <p><!--para 2 -->
1364  The effect of program termination in a freestanding environment is implementation-
1365  defined.
1366
1367 <p><small><a href="#Contents">Contents</a></small>
1368 <h5><a name="5.1.2.2" href="#5.1.2.2">5.1.2.2 Hosted environment</a></h5>
1369 <p><!--para 1 -->
1370  A hosted environment need not be provided, but shall conform to the following
1371  specifications if present.
1372  
1373  
1374  
1375  
1376 <!--page 31 -->
1377
1378 <p><small><a href="#Contents">Contents</a></small>
1379 <h5><a name="5.1.2.2.1" href="#5.1.2.2.1">5.1.2.2.1 Program startup</a></h5>
1380 <p><!--para 1 -->
1381  The function called at program startup is named main. The implementation declares no
1382  prototype for this function. It shall be defined with a return type of int and with no
1383  parameters:
1384 <pre>
1385          int main(void) { /* ... */ }
1386 </pre>
1387  or with two parameters (referred to here as argc and argv, though any names may be
1388  used, as they are local to the function in which they are declared):
1389 <pre>
1390          int main(int argc, char *argv[]) { /* ... */ }
1391 </pre>
1392  or equivalent;<sup><a href="#note10"><b>10)</b></a></sup> or in some other implementation-defined manner.
1393 <p><!--para 2 -->
1394  If they are declared, the parameters to the main function shall obey the following
1395  constraints:
1396 <ul>
1397 <li>  The value of argc shall be nonnegative.
1398 <li>  argv[argc] shall be a null pointer.
1399 <li>  If the value of argc is greater than zero, the array members argv[0] through
1400  argv[argc-1] inclusive shall contain pointers to strings, which are given
1401  implementation-defined values by the host environment prior to program startup. The
1402  intent is to supply to the program information determined prior to program startup
1403  from elsewhere in the hosted environment. If the host environment is not capable of
1404  supplying strings with letters in both uppercase and lowercase, the implementation
1405  shall ensure that the strings are received in lowercase.
1406 <li>  If the value of argc is greater than zero, the string pointed to by argv[0]
1407  represents the program name; argv[0][0] shall be the null character if the
1408  program name is not available from the host environment. If the value of argc is
1409  greater than one, the strings pointed to by argv[1] through argv[argc-1]
1410  represent the program parameters.
1411 <li>  The parameters argc and argv and the strings pointed to by the argv array shall
1412  be modifiable by the program, and retain their last-stored values between program
1413  startup and program termination.
1414 </ul>
1415
1416 <p><b>Footnotes</b>
1417 <p><small><a name="note10" href="#note10">10)</a> Thus, int can be replaced by a typedef name defined as int, or the type of argv can be written as
1418  char ** argv, and so on.
1419 </small>
1420
1421 <p><small><a href="#Contents">Contents</a></small>
1422 <h5><a name="5.1.2.2.2" href="#5.1.2.2.2">5.1.2.2.2 Program execution</a></h5>
1423 <p><!--para 1 -->
1424  In a hosted environment, a program may use all the functions, macros, type definitions,
1425  and objects described in the library clause (clause 7).
1426  
1427  
1428  
1429  
1430 <!--page 32 -->
1431
1432 <p><small><a href="#Contents">Contents</a></small>
1433 <h5><a name="5.1.2.2.3" href="#5.1.2.2.3">5.1.2.2.3 Program termination</a></h5>
1434 <p><!--para 1 -->
1435  If the return type of the main function is a type compatible with int, a return from the
1436  initial call to the main function is equivalent to calling the exit function with the value
1437  returned by the main function as its argument;<sup><a href="#note11"><b>11)</b></a></sup> reaching the } that terminates the
1438  main function returns a value of 0. If the return type is not compatible with int, the
1439  termination status returned to the host environment is unspecified.
1440 <p><b> Forward references</b>: definition of terms (<a href="#7.1.1">7.1.1</a>), the exit function (<a href="#7.22.4.4">7.22.4.4</a>).
1441
1442 <p><b>Footnotes</b>
1443 <p><small><a name="note11" href="#note11">11)</a> In accordance with <a href="#6.2.4">6.2.4</a>, the lifetimes of objects with automatic storage duration declared in main
1444  will have ended in the former case, even where they would not have in the latter.
1445 </small>
1446
1447 <p><small><a href="#Contents">Contents</a></small>
1448 <h5><a name="5.1.2.3" href="#5.1.2.3">5.1.2.3 Program execution</a></h5>
1449 <p><!--para 1 -->
1450  The semantic descriptions in this International Standard describe the behavior of an
1451  abstract machine in which issues of optimization are irrelevant.
1452 <p><!--para 2 -->
1453  Accessing a volatile object, modifying an object, modifying a file, or calling a function
1454  that does any of those operations are all side effects,<sup><a href="#note12"><b>12)</b></a></sup> which are changes in the state of
1455  the execution environment. Evaluation of an expression in general includes both value
1456  computations and initiation of side effects. Value computation for an lvalue expression
1457  includes determining the identity of the designated object.
1458 <p><!--para 3 -->
1459  Sequenced before is an asymmetric, transitive, pair-wise relation between evaluations
1460  executed by a single thread, which induces a partial order among those evaluations.
1461  Given any two evaluations A and B, if A is sequenced before B, then the execution of A
1462  shall precede the execution of B. (Conversely, if A is sequenced before B, then B is
1463  sequenced after A.) If A is not sequenced before or after B, then A and B are
1464  unsequenced. Evaluations A and B are indeterminately sequenced when A is sequenced
1465  either before or after B, but it is unspecified which.<sup><a href="#note13"><b>13)</b></a></sup> The presence of a sequence point
1466  between the evaluation of expressions A and B implies that every value computation and
1467  side effect associated with A is sequenced before every value computation and side effect
1468  associated with B. (A summary of the sequence points is given in <a href="#C">annex C</a>.)
1469 <p><!--para 4 -->
1470  In the abstract machine, all expressions are evaluated as specified by the semantics. An
1471  actual implementation need not evaluate part of an expression if it can deduce that its
1472  value is not used and that no needed side effects are produced (including any caused by
1473  
1474 <!--page 33 -->
1475  calling a function or accessing a volatile object).
1476 <p><!--para 5 -->
1477  When the processing of the abstract machine is interrupted by receipt of a signal, the
1478  values of objects that are neither lock-free atomic objects nor of type volatile
1479  sig_atomic_t are unspecified, and the value of any object that is modified by the
1480  handler that is neither a lock-free atomic object nor of type volatile
1481  sig_atomic_t becomes undefined.
1482 <p><!--para 6 -->
1483  The least requirements on a conforming implementation are:
1484 <ul>
1485 <li>  Accesses to volatile objects are evaluated strictly according to the rules of the abstract
1486  machine.
1487 <li>  At program termination, all data written into files shall be identical to the result that
1488  execution of the program according to the abstract semantics would have produced.
1489 <li>  The input and output dynamics of interactive devices shall take place as specified in
1490  <a href="#7.21.3">7.21.3</a>. The intent of these requirements is that unbuffered or line-buffered output
1491  appear as soon as possible, to ensure that prompting messages actually appear prior to
1492  a program waiting for input.
1493 </ul>
1494  This is the observable behavior of the program.
1495 <p><!--para 7 -->
1496  What constitutes an interactive device is implementation-defined.
1497 <p><!--para 8 -->
1498  More stringent correspondences between abstract and actual semantics may be defined by
1499  each implementation.
1500 <p><!--para 9 -->
1501  EXAMPLE 1 An implementation might define a one-to-one correspondence between abstract and actual
1502  semantics: at every sequence point, the values of the actual objects would agree with those specified by the
1503  abstract semantics. The keyword volatile would then be redundant.
1504 <p><!--para 10 -->
1505  Alternatively, an implementation might perform various optimizations within each translation unit, such
1506  that the actual semantics would agree with the abstract semantics only when making function calls across
1507  translation unit boundaries. In such an implementation, at the time of each function entry and function
1508  return where the calling function and the called function are in different translation units, the values of all
1509  externally linked objects and of all objects accessible via pointers therein would agree with the abstract
1510  semantics. Furthermore, at the time of each such function entry the values of the parameters of the called
1511  function and of all objects accessible via pointers therein would agree with the abstract semantics. In this
1512  type of implementation, objects referred to by interrupt service routines activated by the signal function
1513  would require explicit specification of volatile storage, as well as other implementation-defined
1514  restrictions.
1515  
1516 <p><!--para 11 -->
1517  EXAMPLE 2       In executing the fragment
1518 <pre>
1519           char c1, c2;
1520           /* ... */
1521           c1 = c1 + c2;
1522 </pre>
1523  the ''integer promotions'' require that the abstract machine promote the value of each variable to int size
1524  and then add the two ints and truncate the sum. Provided the addition of two chars can be done without
1525  overflow, or with overflow wrapping silently to produce the correct result, the actual execution need only
1526  produce the same result, possibly omitting the promotions.
1527 <!--page 34 -->
1528 <p><!--para 12 -->
1529  EXAMPLE 3       Similarly, in the fragment
1530 <pre>
1531           float f1, f2;
1532           double d;
1533           /* ... */
1534           f1 = f2 * d;
1535 </pre>
1536  the multiplication may be executed using single-precision arithmetic if the implementation can ascertain
1537  that the result would be the same as if it were executed using double-precision arithmetic (for example, if d
1538  were replaced by the constant 2.0, which has type double).
1539  
1540 <p><!--para 13 -->
1541  EXAMPLE 4 Implementations employing wide registers have to take care to honor appropriate
1542  semantics. Values are independent of whether they are represented in a register or in memory. For
1543  example, an implicit spilling of a register is not permitted to alter the value. Also, an explicit store and load
1544  is required to round to the precision of the storage type. In particular, casts and assignments are required to
1545  perform their specified conversion. For the fragment
1546 <pre>
1547           double d1, d2;
1548           float f;
1549           d1 = f = expression;
1550           d2 = (float) expression;
1551 </pre>
1552  the values assigned to d1 and d2 are required to have been converted to float.
1553  
1554 <p><!--para 14 -->
1555  EXAMPLE 5 Rearrangement for floating-point expressions is often restricted because of limitations in
1556  precision as well as range. The implementation cannot generally apply the mathematical associative rules
1557  for addition or multiplication, nor the distributive rule, because of roundoff error, even in the absence of
1558  overflow and underflow. Likewise, implementations cannot generally replace decimal constants in order to
1559  rearrange expressions. In the following fragment, rearrangements suggested by mathematical rules for real
1560  numbers are often not valid (see <a href="#F.9">F.9</a>).
1561 <pre>
1562           double x, y, z;
1563           /* ... */
1564           x = (x * y) * z;            //   not equivalent to x   *= y * z;
1565           z = (x - y) + y ;           //   not equivalent to z   = x;
1566           z = x + x * y;              //   not equivalent to z   = x * (1.0 + y);
1567           y = x / 5.0;                //   not equivalent to y   = x * 0.2;
1568 </pre>
1569  
1570 <p><!--para 15 -->
1571  EXAMPLE 6       To illustrate the grouping behavior of expressions, in the following fragment
1572 <pre>
1573           int a, b;
1574           /* ... */
1575           a = a + 32760 + b + 5;
1576 </pre>
1577  the expression statement behaves exactly the same as
1578 <pre>
1579           a = (((a + 32760) + b) + 5);
1580 </pre>
1581  due to the associativity and precedence of these operators. Thus, the result of the sum (a + 32760) is
1582  next added to b, and that result is then added to 5 which results in the value assigned to a. On a machine in
1583  which overflows produce an explicit trap and in which the range of values representable by an int is
1584  [-32768, +32767], the implementation cannot rewrite this expression as
1585 <pre>
1586           a = ((a + b) + 32765);
1587 </pre>
1588  since if the values for a and b were, respectively, -32754 and -15, the sum a + b would produce a trap
1589  while the original expression would not; nor can the expression be rewritten either as
1590 <!--page 35 -->
1591 <pre>
1592           a = ((a + 32765) + b);
1593 </pre>
1594  or
1595 <pre>
1596           a = (a + (b + 32765));
1597 </pre>
1598  since the values for a and b might have been, respectively, 4 and -8 or -17 and 12. However, on a machine
1599  in which overflow silently generates some value and where positive and negative overflows cancel, the
1600  above expression statement can be rewritten by the implementation in any of the above ways because the
1601  same result will occur.
1602  
1603 <p><!--para 16 -->
1604  EXAMPLE 7 The grouping of an expression does not completely determine its evaluation. In the
1605  following fragment
1606 <pre>
1607           #include <a href="#7.21">&lt;stdio.h&gt;</a>
1608           int sum;
1609           char *p;
1610           /* ... */
1611           sum = sum * 10 - '0' + (*p++ = getchar());
1612 </pre>
1613  the expression statement is grouped as if it were written as
1614 <pre>
1615           sum = (((sum * 10) - '0') + ((*(p++)) = (getchar())));
1616 </pre>
1617  but the actual increment of p can occur at any time between the previous sequence point and the next
1618  sequence point (the ;), and the call to getchar can occur at any point prior to the need of its returned
1619  value.
1620  
1621 <p><b> Forward references</b>: expressions (<a href="#6.5">6.5</a>), type qualifiers (<a href="#6.7.3">6.7.3</a>), statements (<a href="#6.8">6.8</a>), the
1622  signal function (<a href="#7.14">7.14</a>), files (<a href="#7.21.3">7.21.3</a>).
1623
1624 <p><b>Footnotes</b>
1625 <p><small><a name="note12" href="#note12">12)</a> The IEC 60559 standard for binary floating-point arithmetic requires certain user-accessible status
1626  flags and control modes. Floating-point operations implicitly set the status flags; modes affect result
1627  values of floating-point operations. Implementations that support such floating-point state are
1628  required to regard changes to it as side effects -- see <a href="#F">annex F</a> for details. The floating-point
1629  environment library <a href="#7.6">&lt;fenv.h&gt;</a> provides a programming facility for indicating when these side
1630  effects matter, freeing the implementations in other cases.
1631 </small>
1632 <p><small><a name="note13" href="#note13">13)</a> The executions of unsequenced evaluations can interleave. Indeterminately sequenced evaluations
1633  cannot interleave, but can be executed in any order.
1634 </small>
1635
1636 <p><small><a href="#Contents">Contents</a></small>
1637 <h5><a name="5.1.2.4" href="#5.1.2.4">5.1.2.4 Multi-threaded executions and data races</a></h5>
1638 <p><!--para 1 -->
1639  Under a hosted implementation, a program can have more than one thread of execution
1640  (or thread) running concurrently. The execution of each thread proceeds as defined by
1641  the remainder of this standard. The execution of the entire program consists of an
1642  execution of all of its threads.<sup><a href="#note14"><b>14)</b></a></sup> Under a freestanding implementation, it is
1643  implementation-defined whether a program can have more than one thread of execution.
1644 <p><!--para 2 -->
1645  The value of an object visible to a thread T at a particular point is the initial value of the
1646  object, a value stored in the object by T , or a value stored in the object by another thread,
1647  according to the rules below.
1648 <p><!--para 3 -->
1649  NOTE 1 In some cases, there may instead be undefined behavior. Much of this section is motivated by
1650  the desire to support atomic operations with explicit and detailed visibility constraints. However, it also
1651  implicitly supports a simpler view for more restricted programs.
1652  
1653 <p><!--para 4 -->
1654  Two expression evaluations conflict if one of them modifies a memory location and the
1655  other one reads or modifies the same memory location.
1656  
1657  
1658  
1659  
1660 <!--page 36 -->
1661 <p><!--para 5 -->
1662  The library defines a number of atomic operations (<a href="#7.17">7.17</a>) and operations on mutexes
1663  (<a href="#7.25.4">7.25.4</a>) that are specially identified as synchronization operations. These operations play
1664  a special role in making assignments in one thread visible to another. A synchronization
1665  operation on one or more memory locations is either an acquire operation, a release
1666  operation, both an acquire and release operation, or a consume operation. A
1667  synchronization operation without an associated memory location is a fence and can be
1668  either an acquire fence, a release fence, or both an acquire and release fence. In addition,
1669  there are relaxed atomic operations, which are not synchronization operations, and
1670  atomic read-modify-write operations, which have special characteristics.
1671 <p><!--para 6 -->
1672  NOTE 2 For example, a call that acquires a mutex will perform an acquire operation on the locations
1673  composing the mutex. Correspondingly, a call that releases the same mutex will perform a release
1674  operation on those same locations. Informally, performing a release operation on A forces prior side effects
1675  on other memory locations to become visible to other threads that later perform an acquire or consume
1676  operation on A. We do not include relaxed atomic operations as synchronization operations although, like
1677  synchronization operations, they cannot contribute to data races.
1678  
1679 <p><!--para 7 -->
1680  All modifications to a particular atomic object M occur in some particular total order,
1681  called the modification order of M. If A and B are modifications of an atomic object M,
1682  and A happens before B, then A shall precede B in the modification order of M, which is
1683  defined below.
1684 <p><!--para 8 -->
1685  NOTE 3     This states that the modification orders must respect the ''happens before'' relation.
1686  
1687 <p><!--para 9 -->
1688  NOTE 4 There is a separate order for each atomic object. There is no requirement that these can be
1689  combined into a single total order for all objects. In general this will be impossible since different threads
1690  may observe modifications to different variables in inconsistent orders.
1691  
1692 <p><!--para 10 -->
1693  A release sequence on an atomic object M is a maximal contiguous sub-sequence of side
1694  effects in the modification order of M, where the first operation is a release and every
1695  subsequent operation either is performed by the same thread that performed the release or
1696  is an atomic read-modify-write operation.
1697 <p><!--para 11 -->
1698  Certain library calls synchronize with other library calls performed by another thread. In
1699  particular, an atomic operation A that performs a release operation on an object M
1700  synchronizes with an atomic operation B that performs an acquire operation on M and
1701  reads a value written by any side effect in the release sequence headed by A.
1702 <p><!--para 12 -->
1703  NOTE 5 Except in the specified cases, reading a later value does not necessarily ensure visibility as
1704  described below. Such a requirement would sometimes interfere with efficient implementation.
1705  
1706 <p><!--para 13 -->
1707  NOTE 6 The specifications of the synchronization operations define when one reads the value written by
1708  another. For atomic variables, the definition is clear. All operations on a given mutex occur in a single total
1709  order. Each mutex acquisition ''reads the value written'' by the last mutex release.
1710  
1711 <p><!--para 14 -->
1712  An evaluation A carries a dependency <sup><a href="#note15"><b>15)</b></a></sup> to an evaluation B if:
1713  
1714  
1715 <!--page 37 -->
1716 <ul>
1717 <li>  the value of A is used as an operand of B, unless:
1718 <ul>
1719 <li> B is an invocation of the kill_dependency macro,
1720  
1721 <li> A is the left operand of a &amp;&amp; or || operator,
1722  
1723 <li> A is the left operand of a ? : operator, or
1724  
1725 <li> A is the left operand of a , operator;
1726 </ul>
1727    or
1728 <li>  A writes a scalar object or bit-field M, B reads from M the value written by A, and A
1729  is sequenced before B, or
1730 <li>  for some evaluation X, A carries a dependency to X and X carries a dependency to B.
1731 </ul>
1732 <p><!--para 15 -->
1733  An evaluation A is dependency-ordered before<sup><a href="#note16"><b>16)</b></a></sup> an evaluation B if:
1734 <ul>
1735 <li>  A performs a release operation on an atomic object M, and B performs a consume
1736  operation on M and reads a value written by any side effect in the release sequence
1737  headed by A, or
1738 <li>  for some evaluation X, A is dependency-ordered before X and X carries a
1739  dependency to B.
1740 </ul>
1741 <p><!--para 16 -->
1742  An evaluation A inter-thread happens before an evaluation B if A synchronizes with B, A
1743  is dependency-ordered before B, or, for some evaluation X:
1744 <ul>
1745 <li>  A synchronizes with X and X is sequenced before B,
1746 <li>  A is sequenced before X and X inter-thread happens before B, or
1747 <li>  A inter-thread happens before X and X inter-thread happens before B.
1748 </ul>
1749 <p><!--para 17 -->
1750  NOTE 7 The ''inter-thread happens before'' relation describes arbitrary concatenations of ''sequenced
1751  before'', ''synchronizes with'', and ''dependency-ordered before'' relationships, with two exceptions. The
1752  first exception is that a concatenation is not permitted to end with ''dependency-ordered before'' followed
1753  by ''sequenced before''. The reason for this limitation is that a consume operation participating in a
1754  ''dependency-ordered before'' relationship provides ordering only with respect to operations to which this
1755  consume operation actually carries a dependency. The reason that this limitation applies only to the end of
1756  such a concatenation is that any subsequent release operation will provide the required ordering for a prior
1757  consume operation. The second exception is that a concatenation is not permitted to consist entirely of
1758  ''sequenced before''. The reasons for this limitation are (1) to permit ''inter-thread happens before'' to be
1759  transitively closed and (2) the ''happens before'' relation, defined below, provides for relationships
1760  consisting entirely of ''sequenced before''.
1761  
1762 <p><!--para 18 -->
1763  An evaluation A happens before an evaluation B if A is sequenced before B or A inter-
1764  thread happens before B.
1765  
1766  
1767  
1768 <!--page 38 -->
1769 <p><!--para 19 -->
1770  A visible side effect A on an object M with respect to a value computation B of M
1771  satisfies the conditions:
1772 <ul>
1773 <li>  A happens before B, and
1774 <li>  there is no other side effect X to M such that A happens before X and X happens
1775    before B.
1776 </ul>
1777  The value of a non-atomic scalar object M, as determined by evaluation B, shall be the
1778  value stored by the visible side effect A.
1779 <p><!--para 20 -->
1780  NOTE 8 If there is ambiguity about which side effect to a non-atomic object is visible, then there is a data
1781  race and the behavior is undefined.
1782  
1783 <p><!--para 21 -->
1784  NOTE 9 This states that operations on ordinary variables are not visibly reordered. This is not actually
1785  detectable without data races, but it is necessary to ensure that data races, as defined here, and with suitable
1786  restrictions on the use of atomics, correspond to data races in a simple interleaved (sequentially consistent)
1787  execution.
1788  
1789 <p><!--para 22 -->
1790  The visible sequence of side effects on an atomic object M, with respect to a value
1791  computation B of M, is a maximal contiguous sub-sequence of side effects in the
1792  modification order of M, where the first side effect is visible with respect to B, and for
1793  every subsequent side effect, it is not the case that B happens before it. The value of an
1794  atomic object M, as determined by evaluation B, shall be the value stored by some
1795  operation in the visible sequence of M with respect to B. Furthermore, if a value
1796  computation A of an atomic object M happens before a value computation B of M, and
1797  the value computed by A corresponds to the value stored by side effect X, then the value
1798  computed by B shall either equal the value computed by A, or be the value stored by side
1799  effect Y , where Y follows X in the modification order of M.
1800 <p><!--para 23 -->
1801  NOTE 10 This effectively disallows compiler reordering of atomic operations to a single object, even if
1802  both operations are ''relaxed'' loads. By doing so, we effectively make the ''cache coherence'' guarantee
1803  provided by most hardware available to C atomic operations.
1804  
1805 <p><!--para 24 -->
1806  NOTE 11 The visible sequence depends on the ''happens before'' relation, which in turn depends on the
1807  values observed by loads of atomics, which we are restricting here. The intended reading is that there must
1808  exist an association of atomic loads with modifications they observe that, together with suitably chosen
1809  modification orders and the ''happens before'' relation derived as described above, satisfy the resulting
1810  constraints as imposed here.
1811  
1812 <p><!--para 25 -->
1813  The execution of a program contains a data race if it contains two conflicting actions in
1814  different threads, at least one of which is not atomic, and neither happens before the
1815  other. Any such data race results in undefined behavior.
1816 <p><!--para 26 -->
1817  NOTE 12 It can be shown that programs that correctly use simple mutexes and
1818  memory_order_seq_cst operations to prevent all data races, and use no other synchronization
1819  operations, behave as though the operations executed by their constituent threads were simply interleaved,
1820  with each value computation of an object being the last value stored in that interleaving. This is normally
1821  referred to as ''sequential consistency''. However, this applies only to data-race-free programs, and data-
1822  race-free programs cannot observe most program transformations that do not change single-threaded
1823  program semantics. In fact, most single-threaded program transformations continue to be allowed, since
1824  any program that behaves differently as a result must contain undefined behavior.
1825 <!--page 39 -->
1826 <p><!--para 27 -->
1827  NOTE 13 Compiler transformations that introduce assignments to a potentially shared memory location
1828  that would not be modified by the abstract machine are generally precluded by this standard, since such an
1829  assignment might overwrite another assignment by a different thread in cases in which an abstract machine
1830  execution would not have encountered a data race. This includes implementations of data member
1831  assignment that overwrite adjacent members in separate memory locations. We also generally preclude
1832  reordering of atomic loads in cases in which the atomics in question may alias, since this may violate the
1833  "visible sequence" rules.
1834  
1835 <p><!--para 28 -->
1836  NOTE 14 Transformations that introduce a speculative read of a potentially shared memory location may
1837  not preserve the semantics of the program as defined in this standard, since they potentially introduce a data
1838  race. However, they are typically valid in the context of an optimizing compiler that targets a specific
1839  machine with well-defined semantics for data races. They would be invalid for a hypothetical machine that
1840  is not tolerant of races or provides hardware race detection.
1841 <!--page 40 -->
1842
1843 <p><b>Footnotes</b>
1844 <p><small><a name="note14" href="#note14">14)</a> The execution can usually be viewed as an interleaving of all of the threads. However, some kinds of
1845  atomic operations, for example, allow executions inconsistent with a simple interleaving as described
1846  below.
1847 </small>
1848 <p><small><a name="note15" href="#note15">15)</a> The ''carries a dependency'' relation is a subset of the ''sequenced before'' relation, and is similarly
1849  strictly intra-thread.
1850 </small>
1851 <p><small><a name="note16" href="#note16">16)</a> The ''dependency-ordered before'' relation is analogous to the ''synchronizes with'' relation, but uses
1852  release/consume in place of release/acquire.
1853 </small>
1854
1855 <p><small><a href="#Contents">Contents</a></small>
1856 <h3><a name="5.2" href="#5.2">5.2 Environmental considerations</a></h3>
1857
1858 <p><small><a href="#Contents">Contents</a></small>
1859 <h4><a name="5.2.1" href="#5.2.1">5.2.1 Character sets</a></h4>
1860 <p><!--para 1 -->
1861  Two sets of characters and their associated collating sequences shall be defined: the set in
1862  which source files are written (the source character set), and the set interpreted in the
1863  execution environment (the execution character set). Each set is further divided into a
1864  basic character set, whose contents are given by this subclause, and a set of zero or more
1865  locale-specific members (which are not members of the basic character set) called
1866  extended characters. The combined set is also called the extended character set. The
1867  values of the members of the execution character set are implementation-defined.
1868 <p><!--para 2 -->
1869  In a character constant or string literal, members of the execution character set shall be
1870  represented by corresponding members of the source character set or by escape
1871  sequences consisting of the backslash \ followed by one or more characters. A byte with
1872  all bits set to 0, called the null character, shall exist in the basic execution character set; it
1873  is used to terminate a character string.
1874 <p><!--para 3 -->
1875  Both the basic source and basic execution character sets shall have the following
1876  members: the 26 uppercase letters of the Latin alphabet
1877 <pre>
1878          A    B   C      D   E   F    G    H    I    J    K    L   M
1879          N    O   P      Q   R   S    T    U    V    W    X    Y   Z
1880 </pre>
1881  the 26 lowercase letters of the Latin alphabet
1882 <pre>
1883          a    b   c      d   e   f    g    h    i    j    k    l   m
1884          n    o   p      q   r   s    t    u    v    w    x    y   z
1885 </pre>
1886  the 10 decimal digits
1887 <pre>
1888          0    1   2      3   4   5    6    7    8    9
1889 </pre>
1890  the following 29 graphic characters
1891 <pre>
1892          !    "   #      %   &amp;   '    (    )    *    +    ,    -   .    /    :
1893          ;    &lt;   =      &gt;   ?   [    \    ]    ^    _    {    |   }    ~
1894 </pre>
1895  the space character, and control characters representing horizontal tab, vertical tab, and
1896  form feed. The representation of each member of the source and execution basic
1897  character sets shall fit in a byte. In both the source and execution basic character sets, the
1898  value of each character after 0 in the above list of decimal digits shall be one greater than
1899  the value of the previous. In source files, there shall be some way of indicating the end of
1900  each line of text; this International Standard treats such an end-of-line indicator as if it
1901  were a single new-line character. In the basic execution character set, there shall be
1902  control characters representing alert, backspace, carriage return, and new line. If any
1903  other characters are encountered in a source file (except in an identifier, a character
1904  constant, a string literal, a header name, a comment, or a preprocessing token that is never
1905 <!--page 41 -->
1906  converted to a token), the behavior is undefined.
1907 <p><!--para 4 -->
1908  A letter is an uppercase letter or a lowercase letter as defined above; in this International
1909  Standard the term does not include other characters that are letters in other alphabets.
1910 <p><!--para 5 -->
1911  The universal character name construct provides a way to name other characters.
1912 <p><b> Forward references</b>: universal character names (<a href="#6.4.3">6.4.3</a>), character constants (<a href="#6.4.4.4">6.4.4.4</a>),
1913  preprocessing directives (<a href="#6.10">6.10</a>), string literals (<a href="#6.4.5">6.4.5</a>), comments (<a href="#6.4.9">6.4.9</a>), string (<a href="#7.1.1">7.1.1</a>).
1914
1915 <p><small><a href="#Contents">Contents</a></small>
1916 <h5><a name="5.2.1.1" href="#5.2.1.1">5.2.1.1 Trigraph sequences</a></h5>
1917 <p><!--para 1 -->
1918  Before any other processing takes place, each occurrence of one of the following
1919  sequences of three characters (called trigraph sequences<sup><a href="#note17"><b>17)</b></a></sup>) is replaced with the
1920  corresponding single character.
1921 <pre>
1922         ??=      #                       ??)      ]                       ??!     |
1923         ??(      [                       ??'      ^                       ??&gt;     }
1924         ??/      \                       ??&lt;      {                       ??-     ~
1925 </pre>
1926  No other trigraph sequences exist. Each ? that does not begin one of the trigraphs listed
1927  above is not changed.
1928 <p><!--para 2 -->
1929  EXAMPLE 1
1930 <pre>
1931            ??=define arraycheck(a, b) a??(b??) ??!??! b??(a??)
1932 </pre>
1933  becomes
1934 <pre>
1935            #define arraycheck(a, b) a[b] || b[a]
1936 </pre>
1937  
1938 <p><!--para 3 -->
1939  EXAMPLE 2      The following source line
1940 <pre>
1941            printf("Eh???/n");
1942 </pre>
1943  becomes (after replacement of the trigraph sequence ??/)
1944 <pre>
1945            printf("Eh?\n");
1946 </pre>
1947  
1948
1949 <p><b>Footnotes</b>
1950 <p><small><a name="note17" href="#note17">17)</a> The trigraph sequences enable the input of characters that are not defined in the Invariant Code Set as
1951  described in ISO/IEC 646, which is a subset of the seven-bit US ASCII code set.
1952 </small>
1953
1954 <p><small><a href="#Contents">Contents</a></small>
1955 <h5><a name="5.2.1.2" href="#5.2.1.2">5.2.1.2 Multibyte characters</a></h5>
1956 <p><!--para 1 -->
1957  The source character set may contain multibyte characters, used to represent members of
1958  the extended character set. The execution character set may also contain multibyte
1959  characters, which need not have the same encoding as for the source character set. For
1960  both character sets, the following shall hold:
1961 <ul>
1962 <li>  The basic character set shall be present and each character shall be encoded as a
1963  single byte.
1964 <li>  The presence, meaning, and representation of any additional members is locale-
1965  specific.
1966  
1967 <!--page 42 -->
1968 <li>  A multibyte character set may have a state-dependent encoding, wherein each
1969  sequence of multibyte characters begins in an initial shift state and enters other
1970  locale-specific shift states when specific multibyte characters are encountered in the
1971  sequence. While in the initial shift state, all single-byte characters retain their usual
1972  interpretation and do not alter the shift state. The interpretation for subsequent bytes
1973  in the sequence is a function of the current shift state.
1974 <li>  A byte with all bits zero shall be interpreted as a null character independent of shift
1975  state. Such a byte shall not occur as part of any other multibyte character.
1976 </ul>
1977 <p><!--para 2 -->
1978  For source files, the following shall hold:
1979 <ul>
1980 <li>  An identifier, comment, string literal, character constant, or header name shall begin
1981  and end in the initial shift state.
1982 <li>  An identifier, comment, string literal, character constant, or header name shall consist
1983  of a sequence of valid multibyte characters.
1984 </ul>
1985
1986 <p><small><a href="#Contents">Contents</a></small>
1987 <h4><a name="5.2.2" href="#5.2.2">5.2.2 Character display semantics</a></h4>
1988 <p><!--para 1 -->
1989  The active position is that location on a display device where the next character output by
1990  the fputc function would appear. The intent of writing a printing character (as defined
1991  by the isprint function) to a display device is to display a graphic representation of
1992  that character at the active position and then advance the active position to the next
1993  position on the current line. The direction of writing is locale-specific. If the active
1994  position is at the final position of a line (if there is one), the behavior of the display device
1995  is unspecified.
1996 <p><!--para 2 -->
1997  Alphabetic escape sequences representing nongraphic characters in the execution
1998  character set are intended to produce actions on display devices as follows:
1999  \a (alert) Produces an audible or visible alert without changing the active position.
2000  \b (backspace) Moves the active position to the previous position on the current line. If
2001 <pre>
2002     the active position is at the initial position of a line, the behavior of the display
2003     device is unspecified.
2004 </pre>
2005  \f ( form feed) Moves the active position to the initial position at the start of the next
2006 <pre>
2007     logical page.
2008 </pre>
2009  \n (new line) Moves the active position to the initial position of the next line.
2010  \r (carriage return) Moves the active position to the initial position of the current line.
2011  \t (horizontal tab) Moves the active position to the next horizontal tabulation position
2012 <pre>
2013     on the current line. If the active position is at or past the last defined horizontal
2014     tabulation position, the behavior of the display device is unspecified.
2015 </pre>
2016  \v (vertical tab) Moves the active position to the initial position of the next vertical
2017 <!--page 43 -->
2018 <pre>
2019     tabulation position. If the active position is at or past the last defined vertical
2020       tabulation position, the behavior of the display device is unspecified.
2021 </pre>
2022 <p><!--para 3 -->
2023  Each of these escape sequences shall produce a unique implementation-defined value
2024  which can be stored in a single char object. The external representations in a text file
2025  need not be identical to the internal representations, and are outside the scope of this
2026  International Standard.
2027 <p><b> Forward references</b>: the isprint function (<a href="#7.4.1.8">7.4.1.8</a>), the fputc function (<a href="#7.21.7.3">7.21.7.3</a>).
2028
2029 <p><small><a href="#Contents">Contents</a></small>
2030 <h4><a name="5.2.3" href="#5.2.3">5.2.3 Signals and interrupts</a></h4>
2031 <p><!--para 1 -->
2032  Functions shall be implemented such that they may be interrupted at any time by a signal,
2033  or may be called by a signal handler, or both, with no alteration to earlier, but still active,
2034  invocations' control flow (after the interruption), function return values, or objects with
2035  automatic storage duration. All such objects shall be maintained outside the function
2036  image (the instructions that compose the executable representation of a function) on a
2037  per-invocation basis.
2038
2039 <p><small><a href="#Contents">Contents</a></small>
2040 <h4><a name="5.2.4" href="#5.2.4">5.2.4 Environmental limits</a></h4>
2041 <p><!--para 1 -->
2042  Both the translation and execution environments constrain the implementation of
2043  language translators and libraries. The following summarizes the language-related
2044  environmental limits on a conforming implementation; the library-related limits are
2045  discussed in clause 7.
2046
2047 <p><small><a href="#Contents">Contents</a></small>
2048 <h5><a name="5.2.4.1" href="#5.2.4.1">5.2.4.1 Translation limits</a></h5>
2049 <p><!--para 1 -->
2050  The implementation shall be able to translate and execute at least one program that
2051  contains at least one instance of every one of the following limits:<sup><a href="#note18"><b>18)</b></a></sup>
2052 <ul>
2053 <li>  127 nesting levels of blocks
2054 <li>  63 nesting levels of conditional inclusion
2055 <li>  12 pointer, array, and function declarators (in any combinations) modifying an
2056  arithmetic, structure, union, or void type in a declaration
2057 <li>  63 nesting levels of parenthesized declarators within a full declarator
2058 <li>  63 nesting levels of parenthesized expressions within a full expression
2059 <li>  63 significant initial characters in an internal identifier or a macro name (each
2060  universal character name or extended source character is considered a single
2061  character)
2062 <li>  31 significant initial characters in an external identifier (each universal character name
2063  specifying a short identifier of 0000FFFF or less is considered 6 characters, each
2064  
2065  
2066 <!--page 44 -->
2067 <pre>
2068     universal character name specifying a short identifier of 00010000 or more is
2069     considered 10 characters, and each extended source character is considered the same
2070     number of characters as the corresponding universal character name, if any)<sup><a href="#note19"><b>19)</b></a></sup>
2071 </pre>
2072 <li>  4095 external identifiers in one translation unit
2073 <li>  511 identifiers with block scope declared in one block
2074 <li>  4095 macro identifiers simultaneously defined in one preprocessing translation unit
2075 <li>  127 parameters in one function definition
2076 <li>  127 arguments in one function call
2077 <li>  127 parameters in one macro definition
2078 <li>  127 arguments in one macro invocation
2079 <li>  4095 characters in a logical source line
2080 <li>  4095 characters in a string literal (after concatenation)
2081 <li>  65535 bytes in an object (in a hosted environment only)
2082 <li>  15 nesting levels for #included files
2083 <li>  1023 case labels for a switch statement (excluding those for any nested switch
2084  statements)
2085 <li>  1023 members in a single structure or union
2086 <li>  1023 enumeration constants in a single enumeration
2087 <li>  63 levels of nested structure or union definitions in a single struct-declaration-list
2088 </ul>
2089
2090 <p><b>Footnotes</b>
2091 <p><small><a name="note18" href="#note18">18)</a> Implementations should avoid imposing fixed translation limits whenever possible.
2092 </small>
2093 <p><small><a name="note19" href="#note19">19)</a> See ''future language directions'' (<a href="#6.11.3">6.11.3</a>).
2094 </small>
2095
2096 <p><small><a href="#Contents">Contents</a></small>
2097 <h5><a name="5.2.4.2" href="#5.2.4.2">5.2.4.2 Numerical limits</a></h5>
2098 <p><!--para 1 -->
2099  An implementation is required to document all the limits specified in this subclause,
2100  which are specified in the headers <a href="#7.10">&lt;limits.h&gt;</a> and <a href="#7.7">&lt;float.h&gt;</a>. Additional limits are
2101  specified in <a href="#7.20">&lt;stdint.h&gt;</a>.
2102 <p><b> Forward references</b>: integer types <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#7.20">7.20</a>).
2103
2104 <p><small><a href="#Contents">Contents</a></small>
2105 <h5><a name="5.2.4.2.1" href="#5.2.4.2.1">5.2.4.2.1 Sizes of integer types &lt;limits.h&gt;</a></h5>
2106 <p><!--para 1 -->
2107  The values given below shall be replaced by constant expressions suitable for use in #if
2108  preprocessing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the
2109  following shall be replaced by expressions that have the same type as would an
2110  expression that is an object of the corresponding type converted according to the integer
2111  promotions. Their implementation-defined values shall be equal or greater in magnitude
2112  
2113  
2114 <!--page 45 -->
2115  (absolute value) to those shown, with the same sign.
2116 <ul>
2117 <li>  number of bits for smallest object that is not a bit-field (byte)
2118  CHAR_BIT                                            8
2119 <li>  minimum value for an object of type signed char
2120  SCHAR_MIN                                -127 // -(27 - 1)
2121 <li>  maximum value for an object of type signed char
2122  SCHAR_MAX                                +127 // 27 - 1
2123 <li>  maximum value for an object of type unsigned char
2124  UCHAR_MAX                                 255 // 28 - 1
2125 <li>  minimum value for an object of type char
2126  CHAR_MIN                               see below
2127 <li>  maximum value for an object of type char
2128  CHAR_MAX                              see below
2129 <li>  maximum number of bytes in a multibyte character, for any supported locale
2130  MB_LEN_MAX                                    1
2131 <li>  minimum value for an object of type short int
2132  SHRT_MIN                               -32767 // -(215 - 1)
2133 <li>  maximum value for an object of type short int
2134  SHRT_MAX                               +32767 // 215 - 1
2135 <li>  maximum value for an object of type unsigned short int
2136  USHRT_MAX                               65535 // 216 - 1
2137 <li>  minimum value for an object of type int
2138  INT_MIN                                 -32767 // -(215 - 1)
2139 <li>  maximum value for an object of type int
2140  INT_MAX                                +32767 // 215 - 1
2141 <li>  maximum value for an object of type unsigned int
2142  UINT_MAX                                65535 // 216 - 1
2143 <li>  minimum value for an object of type long int
2144  LONG_MIN                         -2147483647 // -(231 - 1)
2145 <li>  maximum value for an object of type long int
2146  LONG_MAX                         +2147483647 // 231 - 1
2147 <li>  maximum value for an object of type unsigned long int
2148  ULONG_MAX                         4294967295 // 232 - 1
2149 <!--page 46 -->
2150 <li>  minimum value for an object of type long long int
2151  LLONG_MIN          -9223372036854775807 // -(263 - 1)
2152 <li>  maximum value for an object of type long long int
2153  LLONG_MAX          +9223372036854775807 // 263 - 1
2154 <li>  maximum value for an object of type unsigned long long int
2155  ULLONG_MAX         18446744073709551615 // 264 - 1
2156 </ul>
2157 <p><!--para 2 -->
2158  If the value of an object of type char is treated as a signed integer when used in an
2159  expression, the value of CHAR_MIN shall be the same as that of SCHAR_MIN and the
2160  value of CHAR_MAX shall be the same as that of SCHAR_MAX. Otherwise, the value of
2161  CHAR_MIN shall be 0 and the value of CHAR_MAX shall be the same as that of
2162  UCHAR_MAX.<sup><a href="#note20"><b>20)</b></a></sup> The value UCHAR_MAX shall equal 2CHAR_BIT - 1.
2163 <p><b> Forward references</b>: representations of types (<a href="#6.2.6">6.2.6</a>), conditional inclusion (<a href="#6.10.1">6.10.1</a>).
2164
2165 <p><b>Footnotes</b>
2166 <p><small><a name="note20" href="#note20">20)</a> See <a href="#6.2.5">6.2.5</a>.
2167 </small>
2168
2169 <p><small><a href="#Contents">Contents</a></small>
2170 <h5><a name="5.2.4.2.2" href="#5.2.4.2.2">5.2.4.2.2 Characteristics of floating types &lt;float.h&gt;</a></h5>
2171 <p><!--para 1 -->
2172  The characteristics of floating types are defined in terms of a model that describes a
2173  representation of floating-point numbers and values that provide information about an
2174  implementation's floating-point arithmetic.<sup><a href="#note21"><b>21)</b></a></sup> The following parameters are used to
2175  define the model for each floating-point type:
2176 <pre>
2177         s          sign ((+-)1)
2178         b          base or radix of exponent representation (an integer &gt; 1)
2179         e          exponent (an integer between a minimum emin and a maximum emax )
2180         p          precision (the number of base-b digits in the significand)
2181          fk        nonnegative integers less than b (the significand digits)
2182 </pre>
2183 <p><!--para 2 -->
2184  A floating-point number (x) is defined by the following model:
2185 <pre>
2186                     p
2187         x = sb e   (Sum) f k b-k ,
2188                    k=1
2189                                  emin &lt;= e &lt;= emax
2190 </pre>
2191  
2192 <p><!--para 3 -->
2193  In addition to normalized floating-point numbers ( f 1 &gt; 0 if x != 0), floating types may be
2194  able to contain other kinds of floating-point numbers, such as subnormal floating-point
2195  numbers (x != 0, e = emin , f 1 = 0) and unnormalized floating-point numbers (x != 0,
2196  e &gt; emin , f 1 = 0), and values that are not floating-point numbers, such as infinities and
2197  NaNs. A NaN is an encoding signifying Not-a-Number. A quiet NaN propagates
2198  through almost every arithmetic operation without raising a floating-point exception; a
2199  signaling NaN generally raises a floating-point exception when occurring as an
2200  
2201  
2202 <!--page 47 -->
2203  arithmetic operand.<sup><a href="#note22"><b>22)</b></a></sup>
2204 <p><!--para 4 -->
2205  An implementation may give zero and values that are not floating-point numbers (such as
2206  infinities and NaNs) a sign or may leave them unsigned. Wherever such values are
2207  unsigned, any requirement in this International Standard to retrieve the sign shall produce
2208  an unspecified sign, and any requirement to set the sign shall be ignored.
2209 <p><!--para 5 -->
2210  The minimum range of representable values for a floating type is the most negative finite
2211  floating-point number representable in that type through the most positive finite floating-
2212  point number representable in that type. In addition, if negative infinity is representable
2213  in a type, the range of that type is extended to all negative real numbers; likewise, if
2214  positive infinity is representable in a type, the range of that type is extended to all positive
2215  real numbers.
2216 <p><!--para 6 -->
2217  The accuracy of the floating-point operations (+, -, *, /) and of the library functions in
2218  <a href="#7.12">&lt;math.h&gt;</a> and <a href="#7.3">&lt;complex.h&gt;</a> that return floating-point results is implementation-
2219  defined, as is the accuracy of the conversion between floating-point internal
2220  representations and string representations performed by the library functions in
2221  <a href="#7.21">&lt;stdio.h&gt;</a>, <a href="#7.22">&lt;stdlib.h&gt;</a>, and <a href="#7.28">&lt;wchar.h&gt;</a>. The implementation may state that the
2222  accuracy is unknown.
2223 <p><!--para 7 -->
2224  All integer values in the <a href="#7.7">&lt;float.h&gt;</a> header, except FLT_ROUNDS, shall be constant
2225  expressions suitable for use in #if preprocessing directives; all floating values shall be
2226  constant expressions. All except DECIMAL_DIG, FLT_EVAL_METHOD, FLT_RADIX,
2227  and FLT_ROUNDS have separate names for all three floating-point types. The floating-
2228  point model representation is provided for all values except FLT_EVAL_METHOD and
2229  FLT_ROUNDS.
2230 <p><!--para 8 -->
2231  The rounding mode for floating-point addition is characterized by the implementation-
2232  defined value of FLT_ROUNDS:<sup><a href="#note23"><b>23)</b></a></sup>
2233 <pre>
2234        -1      indeterminable
2235         0      toward zero
2236         1      to nearest
2237         2      toward positive infinity
2238         3      toward negative infinity
2239 </pre>
2240  All other values for FLT_ROUNDS characterize implementation-defined rounding
2241  behavior.
2242  
2243  
2244 <!--page 48 -->
2245 <p><!--para 9 -->
2246  Except for assignment and cast (which remove all extra range and precision), the values
2247  yielded by operators with floating operands and values subject to the usual arithmetic
2248  conversions and of floating constants are evaluated to a format whose range and precision
2249  may be greater than required by the type. The use of evaluation formats is characterized
2250  by the implementation-defined value of FLT_EVAL_METHOD:<sup><a href="#note24"><b>24)</b></a></sup>
2251 <pre>
2252         -1         indeterminable;
2253           0        evaluate all operations and constants just to the range and precision of the
2254                    type;
2255           1        evaluate operations and constants of type float and double to the
2256                    range and precision of the double type, evaluate long double
2257                    operations and constants to the range and precision of the long double
2258                    type;
2259           2        evaluate all operations and constants to the range and precision of the
2260                    long double type.
2261 </pre>
2262  All other negative values for FLT_EVAL_METHOD characterize implementation-defined
2263  behavior.
2264 <p><!--para 10 -->
2265  The presence or absence of subnormal numbers is characterized by the implementation-
2266  defined     values     of    FLT_HAS_SUBNORM,          DBL_HAS_SUBNORM,           and
2267  LDBL_HAS_SUBNORM:
2268 <pre>
2269         -1       indeterminable<sup><a href="#note25"><b>25)</b></a></sup>
2270          0       absent<sup><a href="#note26"><b>26)</b></a></sup> (type does not support subnormal numbers)
2271          1       present (type does support subnormal numbers)
2272 </pre>
2273 <p><!--para 11 -->
2274  The values given in the following list shall be replaced by constant expressions with
2275  implementation-defined values that are greater or equal in magnitude (absolute value) to
2276  those shown, with the same sign:
2277 <ul>
2278 <li>  radix of exponent representation, b
2279  FLT_RADIX                                                    2
2280  
2281  
2282  
2283  
2284 <!--page 49 -->
2285 <li>  number of base-FLT_RADIX digits in the floating-point significand, p
2286   FLT_MANT_DIG
2287   DBL_MANT_DIG
2288   LDBL_MANT_DIG
2289 <li>  number of decimal digits, n, such that any floating-point number with p radix b digits
2290  can be rounded to a floating-point number with n decimal digits and back again
2291  without change to the value,
2292 <pre>
2293       { p log10 b        if b is a power of 10
2294       {
2295       { [^1 + p log10 b^] otherwise
2296 </pre>
2297   FLT_DECIMAL_DIG                                   6
2298   DBL_DECIMAL_DIG                                  10
2299   LDBL_DECIMAL_DIG                                 10
2300 <li>  number of decimal digits, n, such that any floating-point number in the widest
2301  supported floating type with pmax radix b digits can be rounded to a floating-point
2302  number with n decimal digits and back again without change to the value,
2303 <pre>
2304       { pmax log10 b       if b is a power of 10
2305       {
2306       { [^1 + pmax log10 b^] otherwise
2307 </pre>
2308   DECIMAL_DIG                                     10
2309 <li>  number of decimal digits, q, such that any floating-point number with q decimal digits
2310  can be rounded into a floating-point number with p radix b digits and back again
2311  without change to the q decimal digits,
2312 <pre>
2313       { p log10 b          if b is a power of 10
2314       {
2315       { [_( p - 1) log10 b_] otherwise
2316 </pre>
2317   FLT_DIG                                          6
2318   DBL_DIG                                         10
2319   LDBL_DIG                                        10
2320 <li>  minimum negative integer such that FLT_RADIX raised to one less than that power is
2321  a normalized floating-point number, emin
2322   FLT_MIN_EXP
2323   DBL_MIN_EXP
2324   LDBL_MIN_EXP
2325 <!--page 50 -->
2326 <li>  minimum negative integer such that 10 raised to that power is in the range of
2327  normalized floating-point numbers, [^log10 b emin -1 ^]
2328 <pre>
2329                                    [                  ]
2330 </pre>
2331  FLT_MIN_10_EXP                                 -37
2332  DBL_MIN_10_EXP                                 -37
2333  LDBL_MIN_10_EXP                                -37
2334 <li>  maximum integer such that FLT_RADIX raised to one less than that power is a
2335  representable finite floating-point number, emax
2336 <pre>
2337     FLT_MAX_EXP
2338     DBL_MAX_EXP
2339     LDBL_MAX_EXP
2340 </pre>
2341 <li>  maximum integer such that 10 raised to that power is in the range of representable
2342  finite floating-point numbers, [_log10 ((1 - b- p )b emax )_]
2343 <pre>
2344     FLT_MAX_10_EXP                               +37
2345     DBL_MAX_10_EXP                               +37
2346     LDBL_MAX_10_EXP                              +37
2347 </pre>
2348 </ul>
2349 <p><!--para 12 -->
2350  The values given in the following list shall be replaced by constant expressions with
2351  implementation-defined values that are greater than or equal to those shown:
2352 <ul>
2353 <li>  maximum representable finite floating-point number, (1 - b- p )b emax
2354 <pre>
2355     FLT_MAX                                   1E+37
2356     DBL_MAX                                   1E+37
2357     LDBL_MAX                                  1E+37
2358 </pre>
2359 </ul>
2360 <p><!--para 13 -->
2361  The values given in the following list shall be replaced by constant expressions with
2362  implementation-defined (positive) values that are less than or equal to those shown:
2363 <ul>
2364 <li>  the difference between 1 and the least value greater than 1 that is representable in the
2365  given floating point type, b1- p
2366 <pre>
2367     FLT_EPSILON                                1E-5
2368     DBL_EPSILON                                1E-9
2369     LDBL_EPSILON                               1E-9
2370 </pre>
2371 <li>  minimum normalized positive floating-point number, b emin -1
2372 <!--page 51 -->
2373 <pre>
2374     FLT_MIN                                   1E-37
2375     DBL_MIN                                   1E-37
2376     LDBL_MIN                                  1E-37
2377 </pre>
2378 <li>  minimum positive floating-point number<sup><a href="#note27"><b>27)</b></a></sup>
2379    FLT_TRUE_MIN                                       1E-37
2380    DBL_TRUE_MIN                                       1E-37
2381    LDBL_TRUE_MIN                                      1E-37
2382 </ul>
2383 <p><b>Recommended practice</b>
2384 <p><!--para 14 -->
2385  Conversion from (at least) double to decimal with DECIMAL_DIG digits and back
2386  should be the identity function.
2387 <p><!--para 15 -->
2388  EXAMPLE 1 The following describes an artificial floating-point representation that meets the minimum
2389  requirements of this International Standard, and the appropriate values in a <a href="#7.7">&lt;float.h&gt;</a> header for type
2390  float:
2391 <pre>
2392                     6
2393        x = s16e    (Sum) f k 16-k ,
2394                    k=1
2395                                    -31 &lt;= e &lt;= +32
2396 </pre>
2397  
2398 <pre>
2399          FLT_RADIX                                    16
2400          FLT_MANT_DIG                                  6
2401          FLT_EPSILON                     9.53674316E-07F
2402          FLT_DECIMAL_DIG                               9
2403          FLT_DIG                                       6
2404          FLT_MIN_EXP                                 -31
2405          FLT_MIN                         2.93873588E-39F
2406          FLT_MIN_10_EXP                              -38
2407          FLT_MAX_EXP                                 +32
2408          FLT_MAX                         3.40282347E+38F
2409          FLT_MAX_10_EXP                              +38
2410 </pre>
2411  
2412 <p><!--para 16 -->
2413  EXAMPLE 2 The following describes floating-point representations that also meet the requirements for
2414  single-precision and double-precision numbers in IEC 60559,<sup><a href="#note28"><b>28)</b></a></sup> and the appropriate values in a
2415  <a href="#7.7">&lt;float.h&gt;</a> header for types float and double:
2416 <pre>
2417                    24
2418        x f = s2e   (Sum) f k 2-k ,
2419                    k=1
2420                                   -125 &lt;= e &lt;= +128
2421 </pre>
2422  
2423 <pre>
2424                    53
2425        x d = s2e   (Sum) f k 2-k ,
2426                    k=1
2427                                   -1021 &lt;= e &lt;= +1024
2428 </pre>
2429  
2430 <pre>
2431          FLT_RADIX                                     2
2432          DECIMAL_DIG                                  17
2433          FLT_MANT_DIG                                 24
2434          FLT_EPSILON                     1.19209290E-07F // decimal constant
2435          FLT_EPSILON                            0X1P-23F // hex constant
2436          FLT_DECIMAL_DIG                               9
2437 </pre>
2438  
2439  
2440 <!--page 52 -->
2441 <pre>
2442          FLT_DIG                             6
2443          FLT_MIN_EXP                      -125
2444          FLT_MIN               1.17549435E-38F               //   decimal constant
2445          FLT_MIN                     0X1P-126F               //   hex constant
2446          FLT_TRUE_MIN          1.40129846E-45F               //   decimal constant
2447          FLT_TRUE_MIN                0X1P-149F               //   hex constant
2448          FLT_HAS_SUBNORM                     1
2449          FLT_MIN_10_EXP                    -37
2450          FLT_MAX_EXP                      +128
2451          FLT_MAX               3.40282347E+38F               // decimal constant
2452          FLT_MAX               0X1.fffffeP127F               // hex constant
2453          FLT_MAX_10_EXP                    +38
2454          DBL_MANT_DIG                       53
2455          DBL_EPSILON    2.2204460492503131E-16               // decimal constant
2456          DBL_EPSILON                   0X1P-52               // hex constant
2457          DBL_DECIMAL_DIG                    17
2458          DBL_DIG                            15
2459          DBL_MIN_EXP                     -1021
2460          DBL_MIN      2.2250738585072014E-308                //   decimal constant
2461          DBL_MIN                     0X1P-1022               //   hex constant
2462          DBL_TRUE_MIN 4.9406564584124654E-324                //   decimal constant
2463          DBL_TRUE_MIN                0X1P-1074               //   hex constant
2464          DBL_HAS_SUBNORM                     1
2465          DBL_MIN_10_EXP                   -307
2466          DBL_MAX_EXP                     +1024
2467          DBL_MAX      1.7976931348623157E+308                // decimal constant
2468          DBL_MAX        0X1.fffffffffffffP1023               // hex constant
2469          DBL_MAX_10_EXP                   +308
2470 </pre>
2471  If a type wider than double were supported, then DECIMAL_DIG would be greater than 17. For
2472  example, if the widest type were to use the minimal-width IEC 60559 double-extended format (64 bits of
2473  precision), then DECIMAL_DIG would be 21.
2474  
2475 <p><b> Forward references</b>:        conditional inclusion (<a href="#6.10.1">6.10.1</a>), complex arithmetic
2476  <a href="#7.3">&lt;complex.h&gt;</a> (<a href="#7.3">7.3</a>), extended multibyte and wide character utilities <a href="#7.28">&lt;wchar.h&gt;</a>
2477  (<a href="#7.28">7.28</a>), floating-point environment <a href="#7.6">&lt;fenv.h&gt;</a> (<a href="#7.6">7.6</a>), general utilities <a href="#7.22">&lt;stdlib.h&gt;</a>
2478  (<a href="#7.22">7.22</a>), input/output <a href="#7.21">&lt;stdio.h&gt;</a> (<a href="#7.21">7.21</a>), mathematics <a href="#7.12">&lt;math.h&gt;</a> (<a href="#7.12">7.12</a>).
2479 <!--page 53 -->
2480
2481 <p><b>Footnotes</b>
2482 <p><small><a name="note21" href="#note21">21)</a> The floating-point model is intended to clarify the description of each floating-point characteristic and
2483  does not require the floating-point arithmetic of the implementation to be identical.
2484 </small>
2485 <p><small><a name="note22" href="#note22">22)</a> IEC 60559:1989 specifies quiet and signaling NaNs. For implementations that do not support
2486  IEC 60559:1989, the terms quiet NaN and signaling NaN are intended to apply to encodings with
2487  similar behavior.
2488 </small>
2489 <p><small><a name="note23" href="#note23">23)</a> Evaluation of FLT_ROUNDS correctly reflects any execution-time change of rounding mode through
2490  the function fesetround in <a href="#7.6">&lt;fenv.h&gt;</a>.
2491 </small>
2492 <p><small><a name="note24" href="#note24">24)</a> The evaluation method determines evaluation formats of expressions involving all floating types, not
2493  just real types. For example, if FLT_EVAL_METHOD is 1, then the product of two float
2494  _Complex operands is represented in the double _Complex format, and its parts are evaluated to
2495  double.
2496 </small>
2497 <p><small><a name="note25" href="#note25">25)</a> Characterization as indeterminable is intended if floating-point operations do not consistently interpret
2498  subnormal representations as zero, nor as nonzero.
2499 </small>
2500 <p><small><a name="note26" href="#note26">26)</a> Characterization as absent is intended if no floating-point operations produce subnormal results from
2501  non-subnormal inputs, even if the type format includes representations of subnormal numbers.
2502 </small>
2503 <p><small><a name="note27" href="#note27">27)</a> If the presence or absence of subnormal numbers is indeterminable, then the value is intended to be a
2504  positive number no greater than the minimum normalized positive number for the type.
2505 </small>
2506 <p><small><a name="note28" href="#note28">28)</a> The floating-point model in that standard sums powers of b from zero, so the values of the exponent
2507  limits are one less than shown here.
2508 </small>
2509
2510 <p><small><a href="#Contents">Contents</a></small>
2511 <h2><a name="6" href="#6">6. Language</a></h2>
2512
2513 <p><small><a href="#Contents">Contents</a></small>
2514 <h3><a name="6.1" href="#6.1">6.1 Notation</a></h3>
2515 <p><!--para 1 -->
2516  In the syntax notation used in this clause, syntactic categories (nonterminals) are
2517  indicated by italic type, and literal words and character set members (terminals) by bold
2518  type. A colon (:) following a nonterminal introduces its definition. Alternative
2519  definitions are listed on separate lines, except when prefaced by the words ''one of''. An
2520  optional symbol is indicated by the subscript ''opt'', so that
2521 <pre>
2522           { expression<sub>opt</sub> }
2523 </pre>
2524  indicates an optional expression enclosed in braces.
2525 <p><!--para 2 -->
2526  When syntactic categories are referred to in the main text, they are not italicized and
2527  words are separated by spaces instead of hyphens.
2528 <p><!--para 3 -->
2529  A summary of the language syntax is given in <a href="#A">annex A</a>.
2530
2531 <p><small><a href="#Contents">Contents</a></small>
2532 <h3><a name="6.2" href="#6.2">6.2 Concepts</a></h3>
2533
2534 <p><small><a href="#Contents">Contents</a></small>
2535 <h4><a name="6.2.1" href="#6.2.1">6.2.1 Scopes of identifiers</a></h4>
2536 <p><!--para 1 -->
2537  An identifier can denote an object; a function; a tag or a member of a structure, union, or
2538  enumeration; a typedef name; a label name; a macro name; or a macro parameter. The
2539  same identifier can denote different entities at different points in the program. A member
2540  of an enumeration is called an enumeration constant. Macro names and macro
2541  parameters are not considered further here, because prior to the semantic phase of
2542  program translation any occurrences of macro names in the source file are replaced by the
2543  preprocessing token sequences that constitute their macro definitions.
2544 <p><!--para 2 -->
2545  For each different entity that an identifier designates, the identifier is visible (i.e., can be
2546  used) only within a region of program text called its scope. Different entities designated
2547  by the same identifier either have different scopes, or are in different name spaces. There
2548  are four kinds of scopes: function, file, block, and function prototype. (A function
2549  prototype is a declaration of a function that declares the types of its parameters.)
2550 <p><!--para 3 -->
2551  A label name is the only kind of identifier that has function scope. It can be used (in a
2552  goto statement) anywhere in the function in which it appears, and is declared implicitly
2553  by its syntactic appearance (followed by a : and a statement).
2554 <p><!--para 4 -->
2555  Every other identifier has scope determined by the placement of its declaration (in a
2556  declarator or type specifier). If the declarator or type specifier that declares the identifier
2557  appears outside of any block or list of parameters, the identifier has file scope, which
2558  terminates at the end of the translation unit. If the declarator or type specifier that
2559  declares the identifier appears inside a block or within the list of parameter declarations in
2560  a function definition, the identifier has block scope, which terminates at the end of the
2561  associated block. If the declarator or type specifier that declares the identifier appears
2562 <!--page 54 -->
2563  within the list of parameter declarations in a function prototype (not part of a function
2564  definition), the identifier has function prototype scope, which terminates at the end of the
2565  function declarator. If an identifier designates two different entities in the same name
2566  space, the scopes might overlap. If so, the scope of one entity (the inner scope) will end
2567  strictly before the scope of the other entity (the outer scope). Within the inner scope, the
2568  identifier designates the entity declared in the inner scope; the entity declared in the outer
2569  scope is hidden (and not visible) within the inner scope.
2570 <p><!--para 5 -->
2571  Unless explicitly stated otherwise, where this International Standard uses the term
2572  ''identifier'' to refer to some entity (as opposed to the syntactic construct), it refers to the
2573  entity in the relevant name space whose declaration is visible at the point the identifier
2574  occurs.
2575 <p><!--para 6 -->
2576  Two identifiers have the same scope if and only if their scopes terminate at the same
2577  point.
2578 <p><!--para 7 -->
2579  Structure, union, and enumeration tags have scope that begins just after the appearance of
2580  the tag in a type specifier that declares the tag. Each enumeration constant has scope that
2581  begins just after the appearance of its defining enumerator in an enumerator list. Any
2582  other identifier has scope that begins just after the completion of its declarator.
2583 <p><!--para 8 -->
2584  As a special case, a type name (which is not a declaration of an identifier) is considered to
2585  have a scope that begins just after the place within the type name where the omitted
2586  identifier would appear were it not omitted.
2587 <p><b> Forward references</b>: declarations (<a href="#6.7">6.7</a>), function calls (<a href="#6.5.2.2">6.5.2.2</a>), function definitions
2588  (<a href="#6.9.1">6.9.1</a>), identifiers (<a href="#6.4.2">6.4.2</a>), macro replacement (<a href="#6.10.3">6.10.3</a>), name spaces of identifiers (<a href="#6.2.3">6.2.3</a>),
2589  source file inclusion (<a href="#6.10.2">6.10.2</a>), statements (<a href="#6.8">6.8</a>).
2590
2591 <p><small><a href="#Contents">Contents</a></small>
2592 <h4><a name="6.2.2" href="#6.2.2">6.2.2 Linkages of identifiers</a></h4>
2593 <p><!--para 1 -->
2594  An identifier declared in different scopes or in the same scope more than once can be
2595  made to refer to the same object or function by a process called linkage.<sup><a href="#note29"><b>29)</b></a></sup> There are
2596  three kinds of linkage: external, internal, and none.
2597 <p><!--para 2 -->
2598  In the set of translation units and libraries that constitutes an entire program, each
2599  declaration of a particular identifier with external linkage denotes the same object or
2600  function. Within one translation unit, each declaration of an identifier with internal
2601  linkage denotes the same object or function. Each declaration of an identifier with no
2602  linkage denotes a unique entity.
2603 <p><!--para 3 -->
2604  If the declaration of a file scope identifier for an object or a function contains the storage-
2605  class specifier static, the identifier has internal linkage.<sup><a href="#note30"><b>30)</b></a></sup>
2606  
2607  
2608  
2609 <!--page 55 -->
2610 <p><!--para 4 -->
2611  For an identifier declared with the storage-class specifier extern in a scope in which a
2612  prior declaration of that identifier is visible,<sup><a href="#note31"><b>31)</b></a></sup> if the prior declaration specifies internal or
2613  external linkage, the linkage of the identifier at the later declaration is the same as the
2614  linkage specified at the prior declaration. If no prior declaration is visible, or if the prior
2615  declaration specifies no linkage, then the identifier has external linkage.
2616 <p><!--para 5 -->
2617  If the declaration of an identifier for a function has no storage-class specifier, its linkage
2618  is determined exactly as if it were declared with the storage-class specifier extern. If
2619  the declaration of an identifier for an object has file scope and no storage-class specifier,
2620  its linkage is external.
2621 <p><!--para 6 -->
2622  The following identifiers have no linkage: an identifier declared to be anything other than
2623  an object or a function; an identifier declared to be a function parameter; a block scope
2624  identifier for an object declared without the storage-class specifier extern.
2625 <p><!--para 7 -->
2626  If, within a translation unit, the same identifier appears with both internal and external
2627  linkage, the behavior is undefined.
2628 <p><b> Forward references</b>: declarations (<a href="#6.7">6.7</a>), expressions (<a href="#6.5">6.5</a>), external definitions (<a href="#6.9">6.9</a>),
2629  statements (<a href="#6.8">6.8</a>).
2630
2631 <p><b>Footnotes</b>
2632 <p><small><a name="note29" href="#note29">29)</a> There is no linkage between different identifiers.
2633 </small>
2634 <p><small><a name="note30" href="#note30">30)</a> A function declaration can contain the storage-class specifier static only if it is at file scope; see
2635  <a href="#6.7.1">6.7.1</a>.
2636 </small>
2637 <p><small><a name="note31" href="#note31">31)</a> As specified in <a href="#6.2.1">6.2.1</a>, the later declaration might hide the prior declaration.
2638 </small>
2639
2640 <p><small><a href="#Contents">Contents</a></small>
2641 <h4><a name="6.2.3" href="#6.2.3">6.2.3 Name spaces of identifiers</a></h4>
2642 <p><!--para 1 -->
2643  If more than one declaration of a particular identifier is visible at any point in a
2644  translation unit, the syntactic context disambiguates uses that refer to different entities.
2645  Thus, there are separate name spaces for various categories of identifiers, as follows:
2646 <ul>
2647 <li>  label names (disambiguated by the syntax of the label declaration and use);
2648 <li>  the tags of structures, unions, and enumerations (disambiguated by following any<sup><a href="#note32"><b>32)</b></a></sup>
2649  of the keywords struct, union, or enum);
2650 <li>  the members of structures or unions; each structure or union has a separate name
2651  space for its members (disambiguated by the type of the expression used to access the
2652  member via the . or -&gt; operator);
2653 <li>  all other identifiers, called ordinary identifiers (declared in ordinary declarators or as
2654  enumeration constants).
2655 </ul>
2656 <p><b> Forward references</b>: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), labeled statements (<a href="#6.8.1">6.8.1</a>),
2657  structure and union specifiers (<a href="#6.7.2.1">6.7.2.1</a>), structure and union members (<a href="#6.5.2.3">6.5.2.3</a>), tags
2658  (<a href="#6.7.2.3">6.7.2.3</a>), the goto statement (<a href="#6.8.6.1">6.8.6.1</a>).
2659  
2660 <!--page 56 -->
2661
2662 <p><b>Footnotes</b>
2663 <p><small><a name="note32" href="#note32">32)</a> There is only one name space for tags even though three are possible.
2664 </small>
2665
2666 <p><small><a href="#Contents">Contents</a></small>
2667 <h4><a name="6.2.4" href="#6.2.4">6.2.4 Storage durations of objects</a></h4>
2668 <p><!--para 1 -->
2669  An object has a storage duration that determines its lifetime. There are four storage
2670  durations: static, thread, automatic, and allocated. Allocated storage is described in
2671  <a href="#7.22.3">7.22.3</a>.
2672 <p><!--para 2 -->
2673  The lifetime of an object is the portion of program execution during which storage is
2674  guaranteed to be reserved for it. An object exists, has a constant address,<sup><a href="#note33"><b>33)</b></a></sup> and retains
2675  its last-stored value throughout its lifetime.<sup><a href="#note34"><b>34)</b></a></sup> If an object is referred to outside of its
2676  lifetime, the behavior is undefined. The value of a pointer becomes indeterminate when
2677  the object it points to (or just past) reaches the end of its lifetime.
2678 <p><!--para 3 -->
2679  An object whose identifier is declared without the storage-class specifier
2680  _Thread_local, and either with external or internal linkage or with the storage-class
2681  specifier static, has static storage duration. Its lifetime is the entire execution of the
2682  program and its stored value is initialized only once, prior to program startup.
2683 <p><!--para 4 -->
2684  An object whose identifier is declared with the storage-class specifier _Thread_local
2685  has thread storage duration. Its lifetime is the entire execution of the thread for which it
2686  is created, and its stored value is initialized when the thread is started. There is a distinct
2687  object per thread, and use of the declared name in an expression refers to the object
2688  associated with the thread evaluating the expression. The result of attempting to
2689  indirectly access an object with thread storage duration from a thread other than the one
2690  with which the object is associated is implementation-defined.
2691 <p><!--para 5 -->
2692  An object whose identifier is declared with no linkage and without the storage-class
2693  specifier static has automatic storage duration, as do some compound literals. The
2694  result of attempting to indirectly access an object with automatic storage duration from a
2695  thread other than the one with which the object is associated is implementation-defined.
2696 <p><!--para 6 -->
2697  For such an object that does not have a variable length array type, its lifetime extends
2698  from entry into the block with which it is associated until execution of that block ends in
2699  any way. (Entering an enclosed block or calling a function suspends, but does not end,
2700  execution of the current block.) If the block is entered recursively, a new instance of the
2701  object is created each time. The initial value of the object is indeterminate. If an
2702  initialization is specified for the object, it is performed each time the declaration or
2703  compound literal is reached in the execution of the block; otherwise, the value becomes
2704  indeterminate each time the declaration is reached.
2705  
2706  
2707  
2708 <!--page 57 -->
2709 <p><!--para 7 -->
2710  For such an object that does have a variable length array type, its lifetime extends from
2711  the declaration of the object until execution of the program leaves the scope of the
2712  declaration.<sup><a href="#note35"><b>35)</b></a></sup> If the scope is entered recursively, a new instance of the object is created
2713  each time. The initial value of the object is indeterminate.
2714 <p><!--para 8 -->
2715  A non-lvalue expression with structure or union type, where the structure or union
2716  contains a member with array type (including, recursively, members of all contained
2717  structures and unions) refers to an object with automatic storage duration and temporary
2718  lifetime.<sup><a href="#note36"><b>36)</b></a></sup> Its lifetime begins when the expression is evaluated and its initial value is the
2719  value of the expression. Its lifetime ends when the evaluation of the containing full
2720  expression or full declarator ends. Any attempt to modify an object with temporary
2721  lifetime results in undefined behavior.
2722 <p><b> Forward references</b>: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), compound literals (<a href="#6.5.2.5">6.5.2.5</a>), declarators
2723  (<a href="#6.7.6">6.7.6</a>), function calls (<a href="#6.5.2.2">6.5.2.2</a>), initialization (<a href="#6.7.9">6.7.9</a>), statements (<a href="#6.8">6.8</a>).
2724
2725 <p><b>Footnotes</b>
2726 <p><small><a name="note33" href="#note33">33)</a> The term ''constant address'' means that two pointers to the object constructed at possibly different
2727  times will compare equal. The address may be different during two different executions of the same
2728  program.
2729 </small>
2730 <p><small><a name="note34" href="#note34">34)</a> In the case of a volatile object, the last store need not be explicit in the program.
2731 </small>
2732 <p><small><a name="note35" href="#note35">35)</a> Leaving the innermost block containing the declaration, or jumping to a point in that block or an
2733  embedded block prior to the declaration, leaves the scope of the declaration.
2734 </small>
2735 <p><small><a name="note36" href="#note36">36)</a> The address of such an object is taken implicitly when an array member is accessed.
2736 </small>
2737
2738 <p><small><a href="#Contents">Contents</a></small>
2739 <h4><a name="6.2.5" href="#6.2.5">6.2.5 Types</a></h4>
2740 <p><!--para 1 -->
2741  The meaning of a value stored in an object or returned by a function is determined by the
2742  type of the expression used to access it. (An identifier declared to be an object is the
2743  simplest such expression; the type is specified in the declaration of the identifier.) Types
2744  are partitioned into object types (types that describe objects) and function types (types
2745  that describe functions). At various points within a translation unit an object type may be
2746  incomplete (lacking sufficient information to determine the size of objects of that type) or
2747  complete (having sufficient information).<sup><a href="#note37"><b>37)</b></a></sup>
2748 <p><!--para 2 -->
2749  An object declared as type _Bool is large enough to store the values 0 and 1.
2750 <p><!--para 3 -->
2751  An object declared as type char is large enough to store any member of the basic
2752  execution character set. If a member of the basic execution character set is stored in a
2753  char object, its value is guaranteed to be nonnegative. If any other character is stored in
2754  a char object, the resulting value is implementation-defined but shall be within the range
2755  of values that can be represented in that type.
2756 <p><!--para 4 -->
2757  There are five standard signed integer types, designated as signed char, short
2758  int, int, long int, and long long int. (These and other types may be
2759  designated in several additional ways, as described in <a href="#6.7.2">6.7.2</a>.) There may also be
2760  implementation-defined extended signed integer types.<sup><a href="#note38"><b>38)</b></a></sup> The standard and extended
2761  signed integer types are collectively called signed integer types.<sup><a href="#note39"><b>39)</b></a></sup>
2762  
2763 <!--page 58 -->
2764 <p><!--para 5 -->
2765  An object declared as type signed char occupies the same amount of storage as a
2766  ''plain'' char object. A ''plain'' int object has the natural size suggested by the
2767  architecture of the execution environment (large enough to contain any value in the range
2768  INT_MIN to INT_MAX as defined in the header <a href="#7.10">&lt;limits.h&gt;</a>).
2769 <p><!--para 6 -->
2770  For each of the signed integer types, there is a corresponding (but different) unsigned
2771  integer type (designated with the keyword unsigned) that uses the same amount of
2772  storage (including sign information) and has the same alignment requirements. The type
2773  _Bool and the unsigned integer types that correspond to the standard signed integer
2774  types are the standard unsigned integer types. The unsigned integer types that
2775  correspond to the extended signed integer types are the extended unsigned integer types.
2776  The standard and extended unsigned integer types are collectively called unsigned integer
2777  types.<sup><a href="#note40"><b>40)</b></a></sup>
2778 <p><!--para 7 -->
2779  The standard signed integer types and standard unsigned integer types are collectively
2780  called the standard integer types, the extended signed integer types and extended
2781  unsigned integer types are collectively called the extended integer types.
2782 <p><!--para 8 -->
2783  For any two integer types with the same signedness and different integer conversion rank
2784  (see <a href="#6.3.1.1">6.3.1.1</a>), the range of values of the type with smaller integer conversion rank is a
2785  subrange of the values of the other type.
2786 <p><!--para 9 -->
2787  The range of nonnegative values of a signed integer type is a subrange of the
2788  corresponding unsigned integer type, and the representation of the same value in each
2789  type is the same.<sup><a href="#note41"><b>41)</b></a></sup> A computation involving unsigned operands can never overflow,
2790  because a result that cannot be represented by the resulting unsigned integer type is
2791  reduced modulo the number that is one greater than the largest value that can be
2792  represented by the resulting type.
2793 <p><!--para 10 -->
2794  There are three real floating types, designated as float, double, and long
2795  double.<sup><a href="#note42"><b>42)</b></a></sup> The set of values of the type float is a subset of the set of values of the
2796  type double; the set of values of the type double is a subset of the set of values of the
2797  type long double.
2798  
2799  
2800 <!--page 59 -->
2801 <p><!--para 11 -->
2802  There are three complex types, designated as float _Complex, double
2803  _Complex, and long double _Complex.<sup><a href="#note43"><b>43)</b></a></sup> (Complex types are a conditional
2804  feature that implementations need not support; see <a href="#6.10.8.3">6.10.8.3</a>.) The real floating and
2805  complex types are collectively called the floating types.
2806 <p><!--para 12 -->
2807  For each floating type there is a corresponding real type, which is always a real floating
2808  type. For real floating types, it is the same type. For complex types, it is the type given
2809  by deleting the keyword _Complex from the type name.
2810 <p><!--para 13 -->
2811  Each complex type has the same representation and alignment requirements as an array
2812  type containing exactly two elements of the corresponding real type; the first element is
2813  equal to the real part, and the second element to the imaginary part, of the complex
2814  number.
2815 <p><!--para 14 -->
2816  The type char, the signed and unsigned integer types, and the floating types are
2817  collectively called the basic types. The basic types are complete object types. Even if the
2818  implementation defines two or more basic types to have the same representation, they are
2819  nevertheless different types.<sup><a href="#note44"><b>44)</b></a></sup>
2820 <p><!--para 15 -->
2821  The three types char, signed char, and unsigned char are collectively called
2822  the character types. The implementation shall define char to have the same range,
2823  representation, and behavior as either signed char or unsigned char.<sup><a href="#note45"><b>45)</b></a></sup>
2824 <p><!--para 16 -->
2825  An enumeration comprises a set of named integer constant values. Each distinct
2826  enumeration constitutes a different enumerated type.
2827 <p><!--para 17 -->
2828  The type char, the signed and unsigned integer types, and the enumerated types are
2829  collectively called integer types. The integer and real floating types are collectively called
2830  real types.
2831 <p><!--para 18 -->
2832  Integer and floating types are collectively called arithmetic types. Each arithmetic type
2833  belongs to one type domain: the real type domain comprises the real types, the complex
2834  type domain comprises the complex types.
2835 <p><!--para 19 -->
2836  The void type comprises an empty set of values; it is an incomplete object type that
2837  cannot be completed.
2838  
2839  
2840  
2841 <!--page 60 -->
2842 <p><!--para 20 -->
2843  Any number of derived types can be constructed from the object and function types, as
2844  follows:
2845 <ul>
2846 <li>  An array type describes a contiguously allocated nonempty set of objects with a
2847  particular member object type, called the element type. The element type shall be
2848  complete whenever the array type is specified. Array types are characterized by their
2849  element type and by the number of elements in the array. An array type is said to be
2850  derived from its element type, and if its element type is T , the array type is sometimes
2851  called ''array of T ''. The construction of an array type from an element type is called
2852  ''array type derivation''.
2853 <li>  A structure type describes a sequentially allocated nonempty set of member objects
2854  (and, in certain circumstances, an incomplete array), each of which has an optionally
2855  specified name and possibly distinct type.
2856 <li>  A union type describes an overlapping nonempty set of member objects, each of
2857  which has an optionally specified name and possibly distinct type.
2858 <li>  A function type describes a function with specified return type. A function type is
2859  characterized by its return type and the number and types of its parameters. A
2860  function type is said to be derived from its return type, and if its return type is T , the
2861  function type is sometimes called ''function returning T ''. The construction of a
2862  function type from a return type is called ''function type derivation''.
2863 <li>  A pointer type may be derived from a function type or an object type, called the
2864  referenced type. A pointer type describes an object whose value provides a reference
2865  to an entity of the referenced type. A pointer type derived from the referenced type T
2866  is sometimes called ''pointer to T ''. The construction of a pointer type from a
2867  referenced type is called ''pointer type derivation''. A pointer type is a complete
2868  object type.
2869 <li>  An atomic type describes the type designated by the construct _Atomic ( type-
2870  name ). (Atomic types are a conditional feature that implementations need not
2871  support; see <a href="#6.10.8.3">6.10.8.3</a>.)
2872 </ul>
2873  These methods of constructing derived types can be applied recursively.
2874 <p><!--para 21 -->
2875  Arithmetic types and pointer types are collectively called scalar types. Array and
2876  structure types are collectively called aggregate types.<sup><a href="#note46"><b>46)</b></a></sup>
2877 <p><!--para 22 -->
2878  An array type of unknown size is an incomplete type. It is completed, for an identifier of
2879  that type, by specifying the size in a later declaration (with internal or external linkage).
2880  A structure or union type of unknown content (as described in <a href="#6.7.2.3">6.7.2.3</a>) is an incomplete
2881  
2882  
2883 <!--page 61 -->
2884  type. It is completed, for all declarations of that type, by declaring the same structure or
2885  union tag with its defining content later in the same scope.
2886 <p><!--para 23 -->
2887  A type has known constant size if the type is not incomplete and is not a variable length
2888  array type.
2889 <p><!--para 24 -->
2890  Array, function, and pointer types are collectively called derived declarator types. A
2891  declarator type derivation from a type T is the construction of a derived declarator type
2892  from T by the application of an array-type, a function-type, or a pointer-type derivation to
2893  T.
2894 <p><!--para 25 -->
2895  A type is characterized by its type category, which is either the outermost derivation of a
2896  derived type (as noted above in the construction of derived types), or the type itself if the
2897  type consists of no derived types.
2898 <p><!--para 26 -->
2899  Any type so far mentioned is an unqualified type. Each unqualified type has several
2900  qualified versions of its type,<sup><a href="#note47"><b>47)</b></a></sup> corresponding to the combinations of one, two, or all
2901  three of the const, volatile, and restrict qualifiers. The qualified or unqualified
2902  versions of a type are distinct types that belong to the same type category and have the
2903  same representation and alignment requirements.<sup><a href="#note48"><b>48)</b></a></sup> A derived type is not qualified by the
2904  qualifiers (if any) of the type from which it is derived.
2905 <p><!--para 27 -->
2906  Further, there is the _Atomic qualifier. The presence of the _Atomic qualifier
2907  designates an atomic type. The size, representation, and alignment of an atomic type
2908  need not be the same as those of the corresponding unqualified type. Therefore, this
2909  Standard explicitly uses the phrase ''atomic, qualified or unqualified type'' whenever the
2910  atomic version of a type is permitted along with the other qualified versions of a type.
2911  The phrase ''qualified or unqualified type'', without specific mention of atomic, does not
2912  include the atomic types.
2913 <p><!--para 28 -->
2914  A pointer to void shall have the same representation and alignment requirements as a
2915  pointer to a character type.<sup><a href="#note48"><b>48)</b></a></sup> Similarly, pointers to qualified or unqualified versions of
2916  compatible types shall have the same representation and alignment requirements. All
2917  pointers to structure types shall have the same representation and alignment requirements
2918  as each other. All pointers to union types shall have the same representation and
2919  alignment requirements as each other. Pointers to other types need not have the same
2920  representation or alignment requirements.
2921 <p><!--para 29 -->
2922  EXAMPLE 1 The type designated as ''float *'' has type ''pointer to float''. Its type category is
2923  pointer, not a floating type. The const-qualified version of this type is designated as ''float * const''
2924  whereas the type designated as ''const float *'' is not a qualified type -- its type is ''pointer to const-
2925  
2926  
2927 <!--page 62 -->
2928  qualified float'' and is a pointer to a qualified type.
2929  
2930 <p><!--para 30 -->
2931  EXAMPLE 2 The type designated as ''struct tag (*[5])(float)'' has type ''array of pointer to
2932  function returning struct tag''. The array has length five and the function has a single parameter of type
2933  float. Its type category is array.
2934  
2935 <p><b> Forward references</b>: compatible type and composite type (<a href="#6.2.7">6.2.7</a>), declarations (<a href="#6.7">6.7</a>).
2936
2937 <p><b>Footnotes</b>
2938 <p><small><a name="note37" href="#note37">37)</a> A type may be incomplete or complete throughout an entire translation unit, or it may change states at
2939  different points within a translation unit.
2940 </small>
2941 <p><small><a name="note38" href="#note38">38)</a> Implementation-defined keywords shall have the form of an identifier reserved for any use as
2942  described in <a href="#7.1.3">7.1.3</a>.
2943 </small>
2944 <p><small><a name="note39" href="#note39">39)</a> Therefore, any statement in this Standard about signed integer types also applies to the extended
2945  signed integer types.
2946 </small>
2947 <p><small><a name="note40" href="#note40">40)</a> Therefore, any statement in this Standard about unsigned integer types also applies to the extended
2948  unsigned integer types.
2949 </small>
2950 <p><small><a name="note41" href="#note41">41)</a> The same representation and alignment requirements are meant to imply interchangeability as
2951  arguments to functions, return values from functions, and members of unions.
2952 </small>
2953 <p><small><a name="note42" href="#note42">42)</a> See ''future language directions'' (<a href="#6.11.1">6.11.1</a>).
2954 </small>
2955 <p><small><a name="note43" href="#note43">43)</a> A specification for imaginary types is in <a href="#G">annex G</a>.
2956 </small>
2957 <p><small><a name="note44" href="#note44">44)</a> An implementation may define new keywords that provide alternative ways to designate a basic (or
2958  any other) type; this does not violate the requirement that all basic types be different.
2959  Implementation-defined keywords shall have the form of an identifier reserved for any use as
2960  described in <a href="#7.1.3">7.1.3</a>.
2961 </small>
2962 <p><small><a name="note45" href="#note45">45)</a> CHAR_MIN, defined in <a href="#7.10">&lt;limits.h&gt;</a>, will have one of the values 0 or SCHAR_MIN, and this can be
2963  used to distinguish the two options. Irrespective of the choice made, char is a separate type from the
2964  other two and is not compatible with either.
2965 </small>
2966 <p><small><a name="note46" href="#note46">46)</a> Note that aggregate type does not include union type because an object with union type can only
2967  contain one member at a time.
2968 </small>
2969 <p><small><a name="note47" href="#note47">47)</a> See <a href="#6.7.3">6.7.3</a> regarding qualified array and function types.
2970 </small>
2971 <p><small><a name="note48" href="#note48">48)</a> The same representation and alignment requirements are meant to imply interchangeability as
2972  arguments to functions, return values from functions, and members of unions.
2973 </small>
2974
2975 <p><small><a href="#Contents">Contents</a></small>
2976 <h4><a name="6.2.6" href="#6.2.6">6.2.6 Representations of types</a></h4>
2977
2978 <p><small><a href="#Contents">Contents</a></small>
2979 <h5><a name="6.2.6.1" href="#6.2.6.1">6.2.6.1 General</a></h5>
2980 <p><!--para 1 -->
2981  The representations of all types are unspecified except as stated in this subclause.
2982 <p><!--para 2 -->
2983  Except for bit-fields, objects are composed of contiguous sequences of one or more bytes,
2984  the number, order, and encoding of which are either explicitly specified or
2985  implementation-defined.
2986 <p><!--para 3 -->
2987  Values stored in unsigned bit-fields and objects of type unsigned char shall be
2988  represented using a pure binary notation.<sup><a href="#note49"><b>49)</b></a></sup>
2989 <p><!--para 4 -->
2990  Values stored in non-bit-field objects of any other object type consist of n x CHAR_BIT
2991  bits, where n is the size of an object of that type, in bytes. The value may be copied into
2992  an object of type unsigned char [n] (e.g., by memcpy); the resulting set of bytes is
2993  called the object representation of the value. Values stored in bit-fields consist of m bits,
2994  where m is the size specified for the bit-field. The object representation is the set of m
2995  bits the bit-field comprises in the addressable storage unit holding it. Two values (other
2996  than NaNs) with the same object representation compare equal, but values that compare
2997  equal may have different object representations.
2998 <p><!--para 5 -->
2999  Certain object representations need not represent a value of the object type. If the stored
3000  value of an object has such a representation and is read by an lvalue expression that does
3001  not have character type, the behavior is undefined. If such a representation is produced
3002  by a side effect that modifies all or any part of the object by an lvalue expression that
3003  does not have character type, the behavior is undefined.<sup><a href="#note50"><b>50)</b></a></sup> Such a representation is called
3004  a trap representation.
3005 <p><!--para 6 -->
3006  When a value is stored in an object of structure or union type, including in a member
3007  object, the bytes of the object representation that correspond to any padding bytes take
3008  unspecified values.<sup><a href="#note51"><b>51)</b></a></sup> The value of a structure or union object is never a trap
3009  
3010  
3011 <!--page 63 -->
3012  representation, even though the value of a member of the structure or union object may be
3013  a trap representation.
3014 <p><!--para 7 -->
3015  When a value is stored in a member of an object of union type, the bytes of the object
3016  representation that do not correspond to that member but do correspond to other members
3017  take unspecified values.
3018 <p><!--para 8 -->
3019  Where an operator is applied to a value that has more than one object representation,
3020  which object representation is used shall not affect the value of the result.<sup><a href="#note52"><b>52)</b></a></sup> Where a
3021  value is stored in an object using a type that has more than one object representation for
3022  that value, it is unspecified which representation is used, but a trap representation shall
3023  not be generated.
3024 <p><!--para 9 -->
3025  Loads and stores of objects with                            atomic       types     are     done      with
3026  memory_order_seq_cst semantics.
3027 <p><b> Forward references</b>: declarations (<a href="#6.7">6.7</a>), expressions (<a href="#6.5">6.5</a>), lvalues, arrays, and function
3028  designators (<a href="#6.3.2.1">6.3.2.1</a>), order and consistency (<a href="#7.17.3">7.17.3</a>).
3029
3030 <p><b>Footnotes</b>
3031 <p><small><a name="note49" href="#note49">49)</a> A positional representation for integers that uses the binary digits 0 and 1, in which the values
3032  represented by successive bits are additive, begin with 1, and are multiplied by successive integral
3033  powers of 2, except perhaps the bit with the highest position. (Adapted from the American National
3034  Dictionary for Information Processing Systems.) A byte contains CHAR_BIT bits, and the values of
3035  type unsigned char range from 0 to 2
3036
3037 <pre>
3038                                            CHAR_BIT
3039                                                      - 1.
3040 </pre>
3041 </small>
3042 <p><small><a name="note50" href="#note50">50)</a> Thus, an automatic variable can be initialized to a trap representation without causing undefined
3043  behavior, but the value of the variable cannot be used until a proper value is stored in it.
3044 </small>
3045 <p><small><a name="note51" href="#note51">51)</a> Thus, for example, structure assignment need not copy any padding bits.
3046 </small>
3047 <p><small><a name="note52" href="#note52">52)</a> It is possible for objects x and y with the same effective type T to have the same value when they are
3048  accessed as objects of type T, but to have different values in other contexts. In particular, if == is
3049  defined for type T, then x == y does not imply that memcmp(&amp;x, &amp;y, sizeof (T)) == 0.
3050  Furthermore, x == y does not necessarily imply that x and y have the same value; other operations
3051  on values of type T may distinguish between them.
3052 </small>
3053
3054 <p><small><a href="#Contents">Contents</a></small>
3055 <h5><a name="6.2.6.2" href="#6.2.6.2">6.2.6.2 Integer types</a></h5>
3056 <p><!--para 1 -->
3057  For unsigned integer types other than unsigned char, the bits of the object
3058  representation shall be divided into two groups: value bits and padding bits (there need
3059  not be any of the latter). If there are N value bits, each bit shall represent a different
3060  power of 2 between 1 and 2 N -1 , so that objects of that type shall be capable of
3061  representing values from 0 to 2 N - 1 using a pure binary representation; this shall be
3062  known as the value representation. The values of any padding bits are unspecified.<sup><a href="#note53"><b>53)</b></a></sup>
3063 <p><!--para 2 -->
3064  For signed integer types, the bits of the object representation shall be divided into three
3065  groups: value bits, padding bits, and the sign bit. There need not be any padding bits;
3066  signed char shall not have any padding bits. There shall be exactly one sign bit.
3067  Each bit that is a value bit shall have the same value as the same bit in the object
3068  representation of the corresponding unsigned type (if there are M value bits in the signed
3069  type and N in the unsigned type, then M &lt;= N ). If the sign bit is zero, it shall not affect
3070  
3071 <!--page 64 -->
3072  the resulting value. If the sign bit is one, the value shall be modified in one of the
3073  following ways:
3074 <ul>
3075 <li>  the corresponding value with sign bit 0 is negated (sign and magnitude);
3076 <li>  the sign bit has the value -(2 M ) (two's complement);
3077 <li>  the sign bit has the value -(2 M - 1) (ones' complement).
3078 </ul>
3079  Which of these applies is implementation-defined, as is whether the value with sign bit 1
3080  and all value bits zero (for the first two), or with sign bit and all value bits 1 (for ones'
3081  complement), is a trap representation or a normal value. In the case of sign and
3082  magnitude and ones' complement, if this representation is a normal value it is called a
3083  negative zero.
3084 <p><!--para 3 -->
3085  If the implementation supports negative zeros, they shall be generated only by:
3086 <ul>
3087 <li>  the &amp;, |, ^, ~, &lt;&lt;, and &gt;&gt; operators with operands that produce such a value;
3088 <li>  the +, -, *, /, and % operators where one operand is a negative zero and the result is
3089  zero;
3090 <li>  compound assignment operators based on the above cases.
3091 </ul>
3092  It is unspecified whether these cases actually generate a negative zero or a normal zero,
3093  and whether a negative zero becomes a normal zero when stored in an object.
3094 <p><!--para 4 -->
3095  If the implementation does not support negative zeros, the behavior of the &amp;, |, ^, ~, &lt;&lt;,
3096  and &gt;&gt; operators with operands that would produce such a value is undefined.
3097 <p><!--para 5 -->
3098  The values of any padding bits are unspecified.<sup><a href="#note54"><b>54)</b></a></sup> A valid (non-trap) object representation
3099  of a signed integer type where the sign bit is zero is a valid object representation of the
3100  corresponding unsigned type, and shall represent the same value. For any integer type,
3101  the object representation where all the bits are zero shall be a representation of the value
3102  zero in that type.
3103 <p><!--para 6 -->
3104  The precision of an integer type is the number of bits it uses to represent values,
3105  excluding any sign and padding bits. The width of an integer type is the same but
3106  including any sign bit; thus for unsigned integer types the two values are the same, while
3107  for signed integer types the width is one greater than the precision.
3108  
3109  
3110  
3111  
3112 <!--page 65 -->
3113
3114 <p><b>Footnotes</b>
3115 <p><small><a name="note53" href="#note53">53)</a> Some combinations of padding bits might generate trap representations, for example, if one padding
3116  bit is a parity bit. Regardless, no arithmetic operation on valid values can generate a trap
3117  representation other than as part of an exceptional condition such as an overflow, and this cannot occur
3118  with unsigned types. All other combinations of padding bits are alternative object representations of
3119  the value specified by the value bits.
3120 </small>
3121 <p><small><a name="note54" href="#note54">54)</a> Some combinations of padding bits might generate trap representations, for example, if one padding
3122  bit is a parity bit. Regardless, no arithmetic operation on valid values can generate a trap
3123  representation other than as part of an exceptional condition such as an overflow. All other
3124  combinations of padding bits are alternative object representations of the value specified by the value
3125  bits.
3126 </small>
3127
3128 <p><small><a href="#Contents">Contents</a></small>
3129 <h4><a name="6.2.7" href="#6.2.7">6.2.7 Compatible type and composite type</a></h4>
3130 <p><!--para 1 -->
3131  Two types have compatible type if their types are the same. Additional rules for
3132  determining whether two types are compatible are described in <a href="#6.7.2">6.7.2</a> for type specifiers,
3133  in <a href="#6.7.3">6.7.3</a> for type qualifiers, and in <a href="#6.7.6">6.7.6</a> for declarators.<sup><a href="#note55"><b>55)</b></a></sup> Moreover, two structure,
3134  union, or enumerated types declared in separate translation units are compatible if their
3135  tags and members satisfy the following requirements: If one is declared with a tag, the
3136  other shall be declared with the same tag. If both are completed anywhere within their
3137  respective translation units, then the following additional requirements apply: there shall
3138  be a one-to-one correspondence between their members such that each pair of
3139  corresponding members are declared with compatible types; if one member of the pair is
3140  declared with an alignment specifier, the other is declared with an equivalent alignment
3141  specifier; and if one member of the pair is declared with a name, the other is declared
3142  with the same name. For two structures, corresponding members shall be declared in the
3143  same order. For two structures or unions, corresponding bit-fields shall have the same
3144  widths. For two enumerations, corresponding members shall have the same values.
3145 <p><!--para 2 -->
3146  All declarations that refer to the same object or function shall have compatible type;
3147  otherwise, the behavior is undefined.
3148 <p><!--para 3 -->
3149  A composite type can be constructed from two types that are compatible; it is a type that
3150  is compatible with both of the two types and satisfies the following conditions:
3151 <ul>
3152 <li>  If both types are array types, the following rules are applied:
3153 <ul>
3154 <li> If one type is an array of known constant size, the composite type is an array of
3155  that size.
3156 <li> Otherwise, if one type is a variable length array whose size is specified by an
3157  expression that is not evaluated, the behavior is undefined.
3158 <li> Otherwise, if one type is a variable length array whose size is specified, the
3159  composite type is a variable length array of that size.
3160 <li> Otherwise, if one type is a variable length array of unspecified size, the composite
3161  type is a variable length array of unspecified size.
3162 <li> Otherwise, both types are arrays of unknown size and the composite type is an
3163  array of unknown size.
3164 </ul>
3165    The element type of the composite type is the composite type of the two element
3166    types.
3167 <li>  If only one type is a function type with a parameter type list (a function prototype),
3168  the composite type is a function prototype with the parameter type list.
3169  
3170  
3171 <!--page 66 -->
3172 <li>  If both types are function types with parameter type lists, the type of each parameter
3173  in the composite parameter type list is the composite type of the corresponding
3174  parameters.
3175 </ul>
3176  These rules apply recursively to the types from which the two types are derived.
3177 <p><!--para 4 -->
3178  For an identifier with internal or external linkage declared in a scope in which a prior
3179  declaration of that identifier is visible,<sup><a href="#note56"><b>56)</b></a></sup> if the prior declaration specifies internal or
3180  external linkage, the type of the identifier at the later declaration becomes the composite
3181  type.
3182 <p><b> Forward references</b>: array declarators (<a href="#6.7.6.2">6.7.6.2</a>).
3183 <p><!--para 5 -->
3184  EXAMPLE        Given the following two file scope declarations:
3185 <pre>
3186           int f(int (*)(), double (*)[3]);
3187           int f(int (*)(char *), double (*)[]);
3188 </pre>
3189  The resulting composite type for the function is:
3190 <pre>
3191           int f(int (*)(char *), double (*)[3]);
3192 </pre>
3193  
3194
3195 <p><b>Footnotes</b>
3196 <p><small><a name="note55" href="#note55">55)</a> Two types need not be identical to be compatible.
3197 </small>
3198 <p><small><a name="note56" href="#note56">56)</a> As specified in <a href="#6.2.1">6.2.1</a>, the later declaration might hide the prior declaration.
3199 </small>
3200
3201 <p><small><a href="#Contents">Contents</a></small>
3202 <h4><a name="6.2.8" href="#6.2.8">6.2.8 Alignment of objects</a></h4>
3203 <p><!--para 1 -->
3204  Complete object types have alignment requirements which place restrictions on the
3205  addresses at which objects of that type may be allocated. An alignment is an
3206  implementation-defined integer value representing the number of bytes between
3207  successive addresses at which a given object can be allocated. An object type imposes an
3208  alignment requirement on every object of that type: stricter alignment can be requested
3209  using the _Alignas keyword.
3210 <p><!--para 2 -->
3211  A fundamental alignment is represented by an alignment less than or equal to the greatest
3212  alignment supported by the implementation in all contexts, which is equal to
3213  alignof(max_align_t).
3214 <p><!--para 3 -->
3215  An extended alignment is represented by an alignment greater than
3216  alignof(max_align_t). It is implementation-defined whether any extended
3217  alignments are supported and the contexts in which they are supported. A type having an
3218  extended alignment requirement is an over-aligned type.<sup><a href="#note57"><b>57)</b></a></sup>
3219 <p><!--para 4 -->
3220  Alignments are represented as values of the type size_t. Valid alignments include only
3221  those values returned by an alignof expression for fundamental types, plus an
3222  additional implementation-defined set of values, which may be empty. Every valid
3223  alignment value shall be a nonnegative integral power of two.
3224  
3225  
3226 <!--page 67 -->
3227 <p><!--para 5 -->
3228  Alignments have an order from weaker to stronger or stricter alignments. Stricter
3229  alignments have larger alignment values. An address that satisfies an alignment
3230  requirement also satisfies any weaker valid alignment requirement.
3231 <p><!--para 6 -->
3232  The alignment requirement of a complete type can be queried using an alignof
3233  expression. The types char, signed char, and unsigned char shall have the
3234  weakest alignment requirement.
3235 <p><!--para 7 -->
3236  Comparing alignments is meaningful and provides the obvious results:
3237 <ul>
3238 <li>  Two alignments are equal when their numeric values are equal.
3239 <li>  Two alignments are different when their numeric values are not equal.
3240 <li>  When an alignment is larger than another it represents a stricter alignment.
3241 <!--page 68 -->
3242 </ul>
3243
3244 <p><b>Footnotes</b>
3245 <p><small><a name="note57" href="#note57">57)</a> Every over-aligned type is, or contains, a structure or union type with a member to which an extended
3246  alignment has been applied.
3247 </small>
3248
3249 <p><small><a href="#Contents">Contents</a></small>
3250 <h3><a name="6.3" href="#6.3">6.3 Conversions</a></h3>
3251 <p><!--para 1 -->
3252  Several operators convert operand values from one type to another automatically. This
3253  subclause specifies the result required from such an implicit conversion, as well as those
3254  that result from a cast operation (an explicit conversion). The list in <a href="#6.3.1.8">6.3.1.8</a> summarizes
3255  the conversions performed by most ordinary operators; it is supplemented as required by
3256  the discussion of each operator in <a href="#6.5">6.5</a>.
3257 <p><!--para 2 -->
3258  Conversion of an operand value to a compatible type causes no change to the value or the
3259  representation.
3260 <p><b> Forward references</b>: cast operators (<a href="#6.5.4">6.5.4</a>).
3261
3262 <p><small><a href="#Contents">Contents</a></small>
3263 <h4><a name="6.3.1" href="#6.3.1">6.3.1 Arithmetic operands</a></h4>
3264
3265 <p><small><a href="#Contents">Contents</a></small>
3266 <h5><a name="6.3.1.1" href="#6.3.1.1">6.3.1.1 Boolean, characters, and integers</a></h5>
3267 <p><!--para 1 -->
3268  Every integer type has an integer conversion rank defined as follows:
3269 <ul>
3270 <li>  No two signed integer types shall have the same rank, even if they have the same
3271  representation.
3272 <li>  The rank of a signed integer type shall be greater than the rank of any signed integer
3273  type with less precision.
3274 <li>  The rank of long long int shall be greater than the rank of long int, which
3275  shall be greater than the rank of int, which shall be greater than the rank of short
3276  int, which shall be greater than the rank of signed char.
3277 <li>  The rank of any unsigned integer type shall equal the rank of the corresponding
3278  signed integer type, if any.
3279 <li>  The rank of any standard integer type shall be greater than the rank of any extended
3280  integer type with the same width.
3281 <li>  The rank of char shall equal the rank of signed char and unsigned char.
3282 <li>  The rank of _Bool shall be less than the rank of all other standard integer types.
3283 <li>  The rank of any enumerated type shall equal the rank of the compatible integer type
3284  (see <a href="#6.7.2.2">6.7.2.2</a>).
3285 <li>  The rank of any extended signed integer type relative to another extended signed
3286  integer type with the same precision is implementation-defined, but still subject to the
3287  other rules for determining the integer conversion rank.
3288 <li>  For all integer types T1, T2, and T3, if T1 has greater rank than T2 and T2 has
3289  greater rank than T3, then T1 has greater rank than T3.
3290 </ul>
3291 <p><!--para 2 -->
3292  The following may be used in an expression wherever an int or unsigned int may
3293  be used:
3294 <!--page 69 -->
3295 <ul>
3296 <li>  An object or expression with an integer type (other than int or unsigned int)
3297  whose integer conversion rank is less than or equal to the rank of int and
3298  unsigned int.
3299 <li>  A bit-field of type _Bool, int, signed int, or unsigned int.
3300 </ul>
3301  If an int can represent all values of the original type (as restricted by the width, for a
3302  bit-field), the value is converted to an int; otherwise, it is converted to an unsigned
3303  int. These are called the integer promotions.<sup><a href="#note58"><b>58)</b></a></sup> All other types are unchanged by the
3304  integer promotions.
3305 <p><!--para 3 -->
3306  The integer promotions preserve value including sign. As discussed earlier, whether a
3307  ''plain'' char is treated as signed is implementation-defined.
3308 <p><b> Forward references</b>: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), structure and union specifiers
3309  (<a href="#6.7.2.1">6.7.2.1</a>).
3310
3311 <p><b>Footnotes</b>
3312 <p><small><a name="note58" href="#note58">58)</a> The integer promotions are applied only: as part of the usual arithmetic conversions, to certain
3313  argument expressions, to the operands of the unary +, -, and ~ operators, and to both operands of the
3314  shift operators, as specified by their respective subclauses.
3315 </small>
3316
3317 <p><small><a href="#Contents">Contents</a></small>
3318 <h5><a name="6.3.1.2" href="#6.3.1.2">6.3.1.2 Boolean type</a></h5>
3319 <p><!--para 1 -->
3320  When any scalar value is converted to _Bool, the result is 0 if the value compares equal
3321  to 0; otherwise, the result is 1.<sup><a href="#note59"><b>59)</b></a></sup>
3322
3323 <p><b>Footnotes</b>
3324 <p><small><a name="note59" href="#note59">59)</a> NaNs do not compare equal to 0 and thus convert to 1.
3325 </small>
3326
3327 <p><small><a href="#Contents">Contents</a></small>
3328 <h5><a name="6.3.1.3" href="#6.3.1.3">6.3.1.3 Signed and unsigned integers</a></h5>
3329 <p><!--para 1 -->
3330  When a value with integer type is converted to another integer type other than _Bool, if
3331  the value can be represented by the new type, it is unchanged.
3332 <p><!--para 2 -->
3333  Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
3334  subtracting one more than the maximum value that can be represented in the new type
3335  until the value is in the range of the new type.<sup><a href="#note60"><b>60)</b></a></sup>
3336 <p><!--para 3 -->
3337  Otherwise, the new type is signed and the value cannot be represented in it; either the
3338  result is implementation-defined or an implementation-defined signal is raised.
3339
3340 <p><b>Footnotes</b>
3341 <p><small><a name="note60" href="#note60">60)</a> The rules describe arithmetic on the mathematical value, not the value of a given type of expression.
3342 </small>
3343
3344 <p><small><a href="#Contents">Contents</a></small>
3345 <h5><a name="6.3.1.4" href="#6.3.1.4">6.3.1.4 Real floating and integer</a></h5>
3346 <p><!--para 1 -->
3347  When a finite value of real floating type is converted to an integer type other than _Bool,
3348  the fractional part is discarded (i.e., the value is truncated toward zero). If the value of
3349  the integral part cannot be represented by the integer type, the behavior is undefined.<sup><a href="#note61"><b>61)</b></a></sup>
3350  
3351  
3352 <!--page 70 -->
3353 <p><!--para 2 -->
3354  When a value of integer type is converted to a real floating type, if the value being
3355  converted can be represented exactly in the new type, it is unchanged. If the value being
3356  converted is in the range of values that can be represented but cannot be represented
3357  exactly, the result is either the nearest higher or nearest lower representable value, chosen
3358  in an implementation-defined manner. If the value being converted is outside the range of
3359  values that can be represented, the behavior is undefined. Results of some implicit
3360  conversions (<a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>) may be represented in greater precision and range than that
3361  required by the new type.
3362
3363 <p><b>Footnotes</b>
3364 <p><small><a name="note61" href="#note61">61)</a> The remaindering operation performed when a value of integer type is converted to unsigned type
3365  need not be performed when a value of real floating type is converted to unsigned type. Thus, the
3366  range of portable real floating values is (-1, Utype_MAX+1).
3367 </small>
3368
3369 <p><small><a href="#Contents">Contents</a></small>
3370 <h5><a name="6.3.1.5" href="#6.3.1.5">6.3.1.5 Real floating types</a></h5>
3371 <p><!--para 1 -->
3372  When a value of real floating type is converted to a real floating type, if the value being
3373  converted can be represented exactly in the new type, it is unchanged. If the value being
3374  converted is in the range of values that can be represented but cannot be represented
3375  exactly, the result is either the nearest higher or nearest lower representable value, chosen
3376  in an implementation-defined manner. If the value being converted is outside the range of
3377  values that can be represented, the behavior is undefined. Results of some implicit
3378  conversions (<a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>) may be represented in greater precision and range than that
3379  required by the new type.
3380
3381 <p><small><a href="#Contents">Contents</a></small>
3382 <h5><a name="6.3.1.6" href="#6.3.1.6">6.3.1.6 Complex types</a></h5>
3383 <p><!--para 1 -->
3384  When a value of complex type is converted to another complex type, both the real and
3385  imaginary parts follow the conversion rules for the corresponding real types.
3386
3387 <p><small><a href="#Contents">Contents</a></small>
3388 <h5><a name="6.3.1.7" href="#6.3.1.7">6.3.1.7 Real and complex</a></h5>
3389 <p><!--para 1 -->
3390  When a value of real type is converted to a complex type, the real part of the complex
3391  result value is determined by the rules of conversion to the corresponding real type and
3392  the imaginary part of the complex result value is a positive zero or an unsigned zero.
3393 <p><!--para 2 -->
3394  When a value of complex type is converted to a real type, the imaginary part of the
3395  complex value is discarded and the value of the real part is converted according to the
3396  conversion rules for the corresponding real type.
3397
3398 <p><small><a href="#Contents">Contents</a></small>
3399 <h5><a name="6.3.1.8" href="#6.3.1.8">6.3.1.8 Usual arithmetic conversions</a></h5>
3400 <p><!--para 1 -->
3401  Many operators that expect operands of arithmetic type cause conversions and yield result
3402  types in a similar way. The purpose is to determine a common real type for the operands
3403  and result. For the specified operands, each operand is converted, without change of type
3404  domain, to a type whose corresponding real type is the common real type. Unless
3405  explicitly stated otherwise, the common real type is also the corresponding real type of
3406  the result, whose type domain is the type domain of the operands if they are the same,
3407  and complex otherwise. This pattern is called the usual arithmetic conversions:
3408 <!--page 71 -->
3409 <pre>
3410        First, if the corresponding real type of either operand is long double, the other
3411        operand is converted, without change of type domain, to a type whose
3412         corresponding real type is long double.
3413         Otherwise, if the corresponding real type of either operand is double, the other
3414         operand is converted, without change of type domain, to a type whose
3415         corresponding real type is double.
3416         Otherwise, if the corresponding real type of either operand is float, the other
3417         operand is converted, without change of type domain, to a type whose
3418         corresponding real type is float.<sup><a href="#note62"><b>62)</b></a></sup>
3419         Otherwise, the integer promotions are performed on both operands. Then the
3420         following rules are applied to the promoted operands:
3421                If both operands have the same type, then no further conversion is needed.
3422                Otherwise, if both operands have signed integer types or both have unsigned
3423                integer types, the operand with the type of lesser integer conversion rank is
3424                converted to the type of the operand with greater rank.
3425                Otherwise, if the operand that has unsigned integer type has rank greater or
3426                equal to the rank of the type of the other operand, then the operand with
3427                signed integer type is converted to the type of the operand with unsigned
3428                integer type.
3429                Otherwise, if the type of the operand with signed integer type can represent
3430                all of the values of the type of the operand with unsigned integer type, then
3431                the operand with unsigned integer type is converted to the type of the
3432                operand with signed integer type.
3433                Otherwise, both operands are converted to the unsigned integer type
3434                corresponding to the type of the operand with signed integer type.
3435 </pre>
3436 <p><!--para 2 -->
3437  The values of floating operands and of the results of floating expressions may be
3438  represented in greater precision and range than that required by the type; the types are not
3439  changed thereby.<sup><a href="#note63"><b>63)</b></a></sup>
3440  
3441  
3442  
3443  
3444 <!--page 72 -->
3445
3446 <p><b>Footnotes</b>
3447 <p><small><a name="note62" href="#note62">62)</a> For example, addition of a double _Complex and a float entails just the conversion of the
3448  float operand to double (and yields a double _Complex result).
3449 </small>
3450 <p><small><a name="note63" href="#note63">63)</a> The cast and assignment operators are still required to remove extra range and precision.
3451 </small>
3452
3453 <p><small><a href="#Contents">Contents</a></small>
3454 <h4><a name="6.3.2" href="#6.3.2">6.3.2 Other operands</a></h4>
3455
3456 <p><small><a href="#Contents">Contents</a></small>
3457 <h5><a name="6.3.2.1" href="#6.3.2.1">6.3.2.1 Lvalues, arrays, and function designators</a></h5>
3458 <p><!--para 1 -->
3459  An lvalue is an expression (with an object type other than void) that potentially
3460  designates an object;<sup><a href="#note64"><b>64)</b></a></sup> if an lvalue does not designate an object when it is evaluated, the
3461  behavior is undefined. When an object is said to have a particular type, the type is
3462  specified by the lvalue used to designate the object. A modifiable lvalue is an lvalue that
3463  does not have array type, does not have an incomplete type, does not have a const-
3464  qualified type, and if it is a structure or union, does not have any member (including,
3465  recursively, any member or element of all contained aggregates or unions) with a const-
3466  qualified type.
3467 <p><!--para 2 -->
3468  Except when it is the operand of the sizeof operator, the unary &amp; operator, the ++
3469  operator, the -- operator, or the left operand of the . operator or an assignment operator,
3470  an lvalue that does not have array type is converted to the value stored in the designated
3471  object (and is no longer an lvalue); this is called lvalue conversion. If the lvalue has
3472  qualified type, the value has the unqualified version of the type of the lvalue; additionally,
3473  if the lvalue has atomic type, the value has the non-atomic version of the type of the
3474  lvalue; otherwise, the value has the type of the lvalue. If the lvalue has an incomplete
3475  type and does not have array type, the behavior is undefined. If the lvalue designates an
3476  object of automatic storage duration that could have been declared with the register
3477  storage class (never had its address taken), and that object is uninitialized (not declared
3478  with an initializer and no assignment to it has been performed prior to use), the behavior
3479  is undefined.
3480 <p><!--para 3 -->
3481  Except when it is the operand of the sizeof operator or the unary &amp; operator, or is a
3482  string literal used to initialize an array, an expression that has type ''array of type'' is
3483  converted to an expression with type ''pointer to type'' that points to the initial element of
3484  the array object and is not an lvalue. If the array object has register storage class, the
3485  behavior is undefined.
3486 <p><!--para 4 -->
3487  A function designator is an expression that has function type. Except when it is the
3488  operand of the sizeof operator<sup><a href="#note65"><b>65)</b></a></sup> or the unary &amp; operator, a function designator with
3489  type ''function returning type'' is converted to an expression that has type ''pointer to
3490  
3491  
3492 <!--page 73 -->
3493  function returning type''.
3494 <p><b> Forward references</b>: address and indirection operators (<a href="#6.5.3.2">6.5.3.2</a>), assignment operators
3495  (<a href="#6.5.16">6.5.16</a>), common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), initialization (<a href="#6.7.9">6.7.9</a>), postfix
3496  increment and decrement operators (<a href="#6.5.2.4">6.5.2.4</a>), prefix increment and decrement operators
3497  (<a href="#6.5.3.1">6.5.3.1</a>), the sizeof operator (<a href="#6.5.3.4">6.5.3.4</a>), structure and union members (<a href="#6.5.2.3">6.5.2.3</a>).
3498
3499 <p><b>Footnotes</b>
3500 <p><small><a name="note64" href="#note64">64)</a> The name ''lvalue'' comes originally from the assignment expression E1 = E2, in which the left
3501  operand E1 is required to be a (modifiable) lvalue. It is perhaps better considered as representing an
3502  object ''locator value''. What is sometimes called ''rvalue'' is in this International Standard described
3503  as the ''value of an expression''.
3504   An obvious example of an lvalue is an identifier of an object. As a further example, if E is a unary
3505   expression that is a pointer to an object, *E is an lvalue that designates the object to which E points.
3506 </small>
3507 <p><small><a name="note65" href="#note65">65)</a> Because this conversion does not occur, the operand of the sizeof operator remains a function
3508  designator and violates the constraint in <a href="#6.5.3.4">6.5.3.4</a>.
3509 </small>
3510
3511 <p><small><a href="#Contents">Contents</a></small>
3512 <h5><a name="6.3.2.2" href="#6.3.2.2">6.3.2.2 void</a></h5>
3513 <p><!--para 1 -->
3514  The (nonexistent) value of a void expression (an expression that has type void) shall not
3515  be used in any way, and implicit or explicit conversions (except to void) shall not be
3516  applied to such an expression. If an expression of any other type is evaluated as a void
3517  expression, its value or designator is discarded. (A void expression is evaluated for its
3518  side effects.)
3519
3520 <p><small><a href="#Contents">Contents</a></small>
3521 <h5><a name="6.3.2.3" href="#6.3.2.3">6.3.2.3 Pointers</a></h5>
3522 <p><!--para 1 -->
3523  A pointer to void may be converted to or from a pointer to any object type. A pointer to
3524  any object type may be converted to a pointer to void and back again; the result shall
3525  compare equal to the original pointer.
3526 <p><!--para 2 -->
3527  For any qualifier q, a pointer to a non-q-qualified type may be converted to a pointer to
3528  the q-qualified version of the type; the values stored in the original and converted pointers
3529  shall compare equal.
3530 <p><!--para 3 -->
3531  An integer constant expression with the value 0, or such an expression cast to type
3532  void *, is called a null pointer constant.<sup><a href="#note66"><b>66)</b></a></sup> If a null pointer constant is converted to a
3533  pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal
3534  to a pointer to any object or function.
3535 <p><!--para 4 -->
3536  Conversion of a null pointer to another pointer type yields a null pointer of that type.
3537  Any two null pointers shall compare equal.
3538 <p><!--para 5 -->
3539  An integer may be converted to any pointer type. Except as previously specified, the
3540  result is implementation-defined, might not be correctly aligned, might not point to an
3541  entity of the referenced type, and might be a trap representation.<sup><a href="#note67"><b>67)</b></a></sup>
3542 <p><!--para 6 -->
3543  Any pointer type may be converted to an integer type. Except as previously specified, the
3544  result is implementation-defined. If the result cannot be represented in the integer type,
3545  the behavior is undefined. The result need not be in the range of values of any integer
3546  type.
3547  
3548  
3549  
3550  
3551 <!--page 74 -->
3552 <p><!--para 7 -->
3553  A pointer to an object type may be converted to a pointer to a different object type. If the
3554  resulting pointer is not correctly aligned<sup><a href="#note68"><b>68)</b></a></sup> for the referenced type, the behavior is
3555  undefined. Otherwise, when converted back again, the result shall compare equal to the
3556  original pointer. When a pointer to an object is converted to a pointer to a character type,
3557  the result points to the lowest addressed byte of the object. Successive increments of the
3558  result, up to the size of the object, yield pointers to the remaining bytes of the object.
3559 <p><!--para 8 -->
3560  A pointer to a function of one type may be converted to a pointer to a function of another
3561  type and back again; the result shall compare equal to the original pointer. If a converted
3562  pointer is used to call a function whose type is not compatible with the referenced type,
3563  the behavior is undefined.
3564 <p><b> Forward references</b>: cast operators (<a href="#6.5.4">6.5.4</a>), equality operators (<a href="#6.5.9">6.5.9</a>), integer types
3565  capable of holding object pointers (<a href="#7.20.1.4">7.20.1.4</a>), simple assignment (<a href="#6.5.16.1">6.5.16.1</a>).
3566  
3567  
3568  
3569  
3570 <!--page 75 -->
3571
3572 <p><b>Footnotes</b>
3573 <p><small><a name="note66" href="#note66">66)</a> The macro NULL is defined in <a href="#7.19">&lt;stddef.h&gt;</a> (and other headers) as a null pointer constant; see <a href="#7.19">7.19</a>.
3574 </small>
3575 <p><small><a name="note67" href="#note67">67)</a> The mapping functions for converting a pointer to an integer or an integer to a pointer are intended to
3576  be consistent with the addressing structure of the execution environment.
3577 </small>
3578 <p><small><a name="note68" href="#note68">68)</a> In general, the concept ''correctly aligned'' is transitive: if a pointer to type A is correctly aligned for a
3579  pointer to type B, which in turn is correctly aligned for a pointer to type C, then a pointer to type A is
3580  correctly aligned for a pointer to type C.
3581 </small>
3582
3583 <p><small><a href="#Contents">Contents</a></small>
3584 <h3><a name="6.4" href="#6.4">6.4 Lexical elements</a></h3>
3585 <p><b>Syntax</b>
3586 <p><!--para 1 -->
3587 <pre>
3588           token:
3589                    keyword
3590                    identifier
3591                    constant
3592                    string-literal
3593                    punctuator
3594           preprocessing-token:
3595                  header-name
3596                  identifier
3597                  pp-number
3598                  character-constant
3599                  string-literal
3600                  punctuator
3601                  each non-white-space character that cannot be one of the above
3602 </pre>
3603 <p><b>Constraints</b>
3604 <p><!--para 2 -->
3605  Each preprocessing token that is converted to a token shall have the lexical form of a
3606  keyword, an identifier, a constant, a string literal, or a punctuator.
3607 <p><b>Semantics</b>
3608 <p><!--para 3 -->
3609  A token is the minimal lexical element of the language in translation phases 7 and 8. The
3610  categories of tokens are: keywords, identifiers, constants, string literals, and punctuators.
3611  A preprocessing token is the minimal lexical element of the language in translation
3612  phases 3 through 6. The categories of preprocessing tokens are: header names,
3613  identifiers, preprocessing numbers, character constants, string literals, punctuators, and
3614  single non-white-space characters that do not lexically match the other preprocessing
3615  token categories.<sup><a href="#note69"><b>69)</b></a></sup> If a ' or a " character matches the last category, the behavior is
3616  undefined. Preprocessing tokens can be separated by white space; this consists of
3617  comments (described later), or white-space characters (space, horizontal tab, new-line,
3618  vertical tab, and form-feed), or both. As described in <a href="#6.10">6.10</a>, in certain circumstances
3619  during translation phase 4, white space (or the absence thereof) serves as more than
3620  preprocessing token separation. White space may appear within a preprocessing token
3621  only as part of a header name or between the quotation characters in a character constant
3622  or string literal.
3623  
3624  
3625  
3626 <!--page 76 -->
3627 <p><!--para 4 -->
3628  If the input stream has been parsed into preprocessing tokens up to a given character, the
3629  next preprocessing token is the longest sequence of characters that could constitute a
3630  preprocessing token. There is one exception to this rule: header name preprocessing
3631  tokens are recognized only within #include preprocessing directives and in
3632  implementation-defined locations within #pragma directives. In such contexts, a
3633  sequence of characters that could be either a header name or a string literal is recognized
3634  as the former.
3635 <p><!--para 5 -->
3636  EXAMPLE 1 The program fragment 1Ex is parsed as a preprocessing number token (one that is not a
3637  valid floating or integer constant token), even though a parse as the pair of preprocessing tokens 1 and Ex
3638  might produce a valid expression (for example, if Ex were a macro defined as +1). Similarly, the program
3639  fragment 1E1 is parsed as a preprocessing number (one that is a valid floating constant token), whether or
3640  not E is a macro name.
3641  
3642 <p><!--para 6 -->
3643  EXAMPLE 2 The program fragment x+++++y is parsed as x ++ ++ + y, which violates a constraint on
3644  increment operators, even though the parse x ++ + ++ y might yield a correct expression.
3645  
3646 <p><b> Forward references</b>: character constants (<a href="#6.4.4.4">6.4.4.4</a>), comments (<a href="#6.4.9">6.4.9</a>), expressions (<a href="#6.5">6.5</a>),
3647  floating constants (<a href="#6.4.4.2">6.4.4.2</a>), header names (<a href="#6.4.7">6.4.7</a>), macro replacement (<a href="#6.10.3">6.10.3</a>), postfix
3648  increment and decrement operators (<a href="#6.5.2.4">6.5.2.4</a>), prefix increment and decrement operators
3649  (<a href="#6.5.3.1">6.5.3.1</a>), preprocessing directives (<a href="#6.10">6.10</a>), preprocessing numbers (<a href="#6.4.8">6.4.8</a>), string literals
3650  (<a href="#6.4.5">6.4.5</a>).
3651
3652 <p><b>Footnotes</b>
3653 <p><small><a name="note69" href="#note69">69)</a> An additional category, placemarkers, is used internally in translation phase 4 (see <a href="#6.10.3.3">6.10.3.3</a>); it cannot
3654  occur in source files.
3655 </small>
3656
3657 <p><small><a href="#Contents">Contents</a></small>
3658 <h4><a name="6.4.1" href="#6.4.1">6.4.1 Keywords</a></h4>
3659 <p><b>Syntax</b>
3660 <p><!--para 1 -->
3661 <pre>
3662           keyword: one of
3663                 alignof                         goto                         union
3664                 auto                            if                           unsigned
3665                 break                           inline                       void
3666                 case                            int                          volatile
3667                 char                            long                         while
3668                 const                           register                     _Alignas
3669                 continue                        restrict                     _Atomic
3670                 default                         return                       _Bool
3671                 do                              short                        _Complex
3672                 double                          signed                       _Generic
3673                 else                            sizeof                       _Imaginary
3674                 enum                            static                       _Noreturn
3675                 extern                          struct                       _Static_assert
3676                 float                           switch                       _Thread_local
3677                 for                             typedef
3678 </pre>
3679 <p><b>Semantics</b>
3680 <p><!--para 2 -->
3681  The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as
3682  keywords, and shall not be used otherwise. The keyword _Imaginary is reserved for
3683 <!--page 77 -->
3684  specifying imaginary types.<sup><a href="#note70"><b>70)</b></a></sup>
3685
3686 <p><b>Footnotes</b>
3687 <p><small><a name="note70" href="#note70">70)</a> One possible specification for imaginary types appears in <a href="#G">annex G</a>.
3688 </small>
3689
3690 <p><small><a href="#Contents">Contents</a></small>
3691 <h4><a name="6.4.2" href="#6.4.2">6.4.2 Identifiers</a></h4>
3692
3693 <p><small><a href="#Contents">Contents</a></small>
3694 <h5><a name="6.4.2.1" href="#6.4.2.1">6.4.2.1 General</a></h5>
3695 <p><b>Syntax</b>
3696 <p><!--para 1 -->
3697 <pre>
3698           identifier:
3699                  identifier-nondigit
3700                  identifier identifier-nondigit
3701                  identifier digit
3702           identifier-nondigit:
3703                  nondigit
3704                  universal-character-name
3705                  other implementation-defined characters
3706           nondigit: one of
3707                  _ a b            c    d    e    f     g    h    i    j     k    l    m
3708                      n o          p    q    r    s     t    u    v    w     x    y    z
3709                      A B          C    D    E    F     G    H    I    J     K    L    M
3710                      N O          P    Q    R    S     T    U    V    W     X    Y    Z
3711           digit: one of
3712                  0 1        2     3    4    5    6     7    8    9
3713 </pre>
3714 <p><b>Semantics</b>
3715 <p><!--para 2 -->
3716  An identifier is a sequence of nondigit characters (including the underscore _, the
3717  lowercase and uppercase Latin letters, and other characters) and digits, which designates
3718  one or more entities as described in <a href="#6.2.1">6.2.1</a>. Lowercase and uppercase letters are distinct.
3719  There is no specific limit on the maximum length of an identifier.
3720 <p><!--para 3 -->
3721  Each universal character name in an identifier shall designate a character whose encoding
3722  in ISO/IEC 10646 falls into one of the ranges specified in D.1.<sup><a href="#note71"><b>71)</b></a></sup> The initial character
3723  shall not be a universal character name designating a character whose encoding falls into
3724  one of the ranges specified in <a href="#D.2">D.2</a>. An implementation may allow multibyte characters
3725  that are not part of the basic source character set to appear in identifiers; which characters
3726  and their correspondence to universal character names is implementation-defined.
3727  
3728  
3729  
3730 <!--page 78 -->
3731 <p><!--para 4 -->
3732  When preprocessing tokens are converted to tokens during translation phase 7, if a
3733  preprocessing token could be converted to either a keyword or an identifier, it is converted
3734  to a keyword.
3735 <p><b>Implementation limits</b>
3736 <p><!--para 5 -->
3737  As discussed in <a href="#5.2.4.1">5.2.4.1</a>, an implementation may limit the number of significant initial
3738  characters in an identifier; the limit for an external name (an identifier that has external
3739  linkage) may be more restrictive than that for an internal name (a macro name or an
3740  identifier that does not have external linkage). The number of significant characters in an
3741  identifier is implementation-defined.
3742 <p><!--para 6 -->
3743  Any identifiers that differ in a significant character are different identifiers. If two
3744  identifiers differ only in nonsignificant characters, the behavior is undefined.
3745 <p><b> Forward references</b>: universal character names (<a href="#6.4.3">6.4.3</a>), macro replacement (<a href="#6.10.3">6.10.3</a>).
3746
3747 <p><b>Footnotes</b>
3748 <p><small><a name="note71" href="#note71">71)</a> On systems in which linkers cannot accept extended characters, an encoding of the universal character
3749  name may be used in forming valid external identifiers. For example, some otherwise unused
3750  character or sequence of characters may be used to encode the \u in a universal character name.
3751  Extended characters may produce a long external identifier.
3752 </small>
3753
3754 <p><small><a href="#Contents">Contents</a></small>
3755 <h5><a name="6.4.2.2" href="#6.4.2.2">6.4.2.2 Predefined identifiers</a></h5>
3756 <p><b>Semantics</b>
3757 <p><!--para 1 -->
3758  The identifier __func__ shall be implicitly declared by the translator as if,
3759  immediately following the opening brace of each function definition, the declaration
3760 <pre>
3761           static const char __func__[] = "function-name";
3762 </pre>
3763  appeared, where function-name is the name of the lexically-enclosing function.<sup><a href="#note72"><b>72)</b></a></sup>
3764 <p><!--para 2 -->
3765  This name is encoded as if the implicit declaration had been written in the source
3766  character set and then translated into the execution character set as indicated in translation
3767  phase 5.
3768 <p><!--para 3 -->
3769  EXAMPLE        Consider the code fragment:
3770 <pre>
3771           #include <a href="#7.21">&lt;stdio.h&gt;</a>
3772           void myfunc(void)
3773           {
3774                 printf("%s\n", __func__);
3775                 /* ... */
3776           }
3777 </pre>
3778  Each time the function is called, it will print to the standard output stream:
3779 <pre>
3780           myfunc
3781 </pre>
3782  
3783 <p><b> Forward references</b>: function definitions (<a href="#6.9.1">6.9.1</a>).
3784  
3785  
3786  
3787  
3788 <!--page 79 -->
3789
3790 <p><b>Footnotes</b>
3791 <p><small><a name="note72" href="#note72">72)</a> Since the name __func__ is reserved for any use by the implementation (<a href="#7.1.3">7.1.3</a>), if any other
3792  identifier is explicitly declared using the name __func__, the behavior is undefined.
3793 </small>
3794
3795 <p><small><a href="#Contents">Contents</a></small>
3796 <h4><a name="6.4.3" href="#6.4.3">6.4.3 Universal character names</a></h4>
3797 <p><b>Syntax</b>
3798 <p><!--para 1 -->
3799 <pre>
3800           universal-character-name:
3801                  \u hex-quad
3802                  \U hex-quad hex-quad
3803           hex-quad:
3804                  hexadecimal-digit hexadecimal-digit
3805                               hexadecimal-digit hexadecimal-digit
3806 </pre>
3807 <p><b>Constraints</b>
3808 <p><!--para 2 -->
3809  A universal character name shall not specify a character whose short identifier is less than
3810  00A0 other than 0024 ($), 0040 (@), or 0060 ('), nor one in the range D800 through
3811  DFFF inclusive.<sup><a href="#note73"><b>73)</b></a></sup>
3812 <p><b>Description</b>
3813 <p><!--para 3 -->
3814  Universal character names may be used in identifiers, character constants, and string
3815  literals to designate characters that are not in the basic character set.
3816 <p><b>Semantics</b>
3817 <p><!--para 4 -->
3818  The universal character name \Unnnnnnnn designates the character whose eight-digit
3819  short identifier (as specified by ISO/IEC 10646) is nnnnnnnn.<sup><a href="#note74"><b>74)</b></a></sup> Similarly, the universal
3820  character name \unnnn designates the character whose four-digit short identifier is nnnn
3821  (and whose eight-digit short identifier is 0000nnnn).
3822  
3823  
3824  
3825  
3826 <!--page 80 -->
3827
3828 <p><b>Footnotes</b>
3829 <p><small><a name="note73" href="#note73">73)</a> The disallowed characters are the characters in the basic character set and the code positions reserved
3830  by ISO/IEC 10646 for control characters, the character DELETE, and the S-zone (reserved for use by
3831  UTF-16).
3832  
3833 </small>
3834 <p><small><a name="note74" href="#note74">74)</a> Short identifiers for characters were first specified in ISO/IEC 10646-1/AMD9:1997.
3835 </small>
3836
3837 <p><small><a href="#Contents">Contents</a></small>
3838 <h4><a name="6.4.4" href="#6.4.4">6.4.4 Constants</a></h4>
3839 <p><b>Syntax</b>
3840 <p><!--para 1 -->
3841 <pre>
3842           constant:
3843                  integer-constant
3844                  floating-constant
3845                  enumeration-constant
3846                  character-constant
3847 </pre>
3848 <p><b>Constraints</b>
3849 <p><!--para 2 -->
3850  Each constant shall have a type and the value of a constant shall be in the range of
3851  representable values for its type.
3852 <p><b>Semantics</b>
3853 <p><!--para 3 -->
3854  Each constant has a type, determined by its form and value, as detailed later.
3855
3856 <p><small><a href="#Contents">Contents</a></small>
3857 <h5><a name="6.4.4.1" href="#6.4.4.1">6.4.4.1 Integer constants</a></h5>
3858 <p><b>Syntax</b>
3859 <p><!--para 1 -->
3860 <!--page 81 -->
3861 <pre>
3862           integer-constant:
3863                   decimal-constant integer-suffix<sub>opt</sub>
3864                   octal-constant integer-suffix<sub>opt</sub>
3865                   hexadecimal-constant integer-suffix<sub>opt</sub>
3866           decimal-constant:
3867                 nonzero-digit
3868                 decimal-constant digit
3869           octal-constant:
3870                  0
3871                  octal-constant octal-digit
3872           hexadecimal-constant:
3873                 hexadecimal-prefix hexadecimal-digit
3874                 hexadecimal-constant hexadecimal-digit
3875           hexadecimal-prefix: one of
3876                 0x 0X
3877           nonzero-digit: one of
3878                  1 2 3 4          5     6     7   8    9
3879           octal-digit: one of
3880                   0 1 2 3         4     5     6   7
3881          hexadecimal-digit:   one of
3882                0 1 2           3 4     5    6   7     8   9
3883                a b c           d e     f
3884                A B C           D E     F
3885          integer-suffix:
3886                  unsigned-suffix long-suffix<sub>opt</sub>
3887                  unsigned-suffix long-long-suffix
3888                  long-suffix unsigned-suffix<sub>opt</sub>
3889                  long-long-suffix unsigned-suffix<sub>opt</sub>
3890          unsigned-suffix: one of
3891                 u U
3892          long-suffix: one of
3893                 l L
3894          long-long-suffix: one of
3895                 ll LL
3896 </pre>
3897 <p><b>Description</b>
3898 <p><!--para 2 -->
3899  An integer constant begins with a digit, but has no period or exponent part. It may have a
3900  prefix that specifies its base and a suffix that specifies its type.
3901 <p><!--para 3 -->
3902  A decimal constant begins with a nonzero digit and consists of a sequence of decimal
3903  digits. An octal constant consists of the prefix 0 optionally followed by a sequence of the
3904  digits 0 through 7 only. A hexadecimal constant consists of the prefix 0x or 0X followed
3905  by a sequence of the decimal digits and the letters a (or A) through f (or F) with values
3906  10 through 15 respectively.
3907 <p><b>Semantics</b>
3908 <p><!--para 4 -->
3909  The value of a decimal constant is computed base 10; that of an octal constant, base 8;
3910  that of a hexadecimal constant, base 16. The lexically first digit is the most significant.
3911 <p><!--para 5 -->
3912  The type of an integer constant is the first of the corresponding list in which its value can
3913  be represented.
3914 <!--page 82 -->
3915 <pre>
3916                                                                   Octal or Hexadecimal
3917 </pre>
3918  Suffix                       Decimal Constant                           Constant
3919  
3920  none                int                                    int
3921 <pre>
3922                      long int                               unsigned int
3923                      long long int                          long int
3924                                                             unsigned long int
3925                                                             long long int
3926                                                             unsigned long long int
3927 </pre>
3928  
3929  u or U              unsigned int                           unsigned int
3930 <pre>
3931                      unsigned long int                      unsigned long int
3932                      unsigned long long int                 unsigned long long int
3933 </pre>
3934  
3935  l or L              long int                               long int
3936 <pre>
3937                      long long int                          unsigned long int
3938                                                             long long int
3939                                                             unsigned long long int
3940 </pre>
3941  
3942  Both u or U         unsigned long int                      unsigned long int
3943  and l or L          unsigned long long int                 unsigned long long int
3944  
3945  ll or LL            long long int                          long long int
3946 <pre>
3947                                                             unsigned long long int
3948 </pre>
3949  
3950  Both u or U         unsigned long long int                 unsigned long long int
3951  and ll or LL
3952 <p><!--para 6 -->
3953  If an integer constant cannot be represented by any type in its list, it may have an
3954  extended integer type, if the extended integer type can represent its value. If all of the
3955  types in the list for the constant are signed, the extended integer type shall be signed. If
3956  all of the types in the list for the constant are unsigned, the extended integer type shall be
3957  unsigned. If the list contains both signed and unsigned types, the extended integer type
3958  may be signed or unsigned. If an integer constant cannot be represented by any type in
3959  its list and has no extended integer type, then the integer constant has no type.
3960 <!--page 83 -->
3961
3962 <p><small><a href="#Contents">Contents</a></small>
3963 <h5><a name="6.4.4.2" href="#6.4.4.2">6.4.4.2 Floating constants</a></h5>
3964 <p><b>Syntax</b>
3965 <p><!--para 1 -->
3966 <!--page 84 -->
3967 <pre>
3968           floating-constant:
3969                  decimal-floating-constant
3970                  hexadecimal-floating-constant
3971           decimal-floating-constant:
3972                 fractional-constant exponent-part<sub>opt</sub> floating-suffix<sub>opt</sub>
3973                 digit-sequence exponent-part floating-suffix<sub>opt</sub>
3974           hexadecimal-floating-constant:
3975                 hexadecimal-prefix hexadecimal-fractional-constant
3976                                binary-exponent-part floating-suffix<sub>opt</sub>
3977                 hexadecimal-prefix hexadecimal-digit-sequence
3978                                binary-exponent-part floating-suffix<sub>opt</sub>
3979           fractional-constant:
3980                   digit-sequence<sub>opt</sub> . digit-sequence
3981                   digit-sequence .
3982           exponent-part:
3983                 e sign<sub>opt</sub> digit-sequence
3984                 E sign<sub>opt</sub> digit-sequence
3985           sign: one of
3986                  + -
3987           digit-sequence:
3988                   digit
3989                   digit-sequence digit
3990           hexadecimal-fractional-constant:
3991                 hexadecimal-digit-sequence<sub>opt</sub> .
3992                                hexadecimal-digit-sequence
3993                 hexadecimal-digit-sequence .
3994           binary-exponent-part:
3995                  p sign<sub>opt</sub> digit-sequence
3996                  P sign<sub>opt</sub> digit-sequence
3997           hexadecimal-digit-sequence:
3998                 hexadecimal-digit
3999                 hexadecimal-digit-sequence hexadecimal-digit
4000           floating-suffix: one of
4001                  f l F L
4002 </pre>
4003 <p><b>Description</b>
4004 <p><!--para 2 -->
4005  A floating constant has a significand part that may be followed by an exponent part and a
4006  suffix that specifies its type. The components of the significand part may include a digit
4007  sequence representing the whole-number part, followed by a period (.), followed by a
4008  digit sequence representing the fraction part. The components of the exponent part are an
4009  e, E, p, or P followed by an exponent consisting of an optionally signed digit sequence.
4010  Either the whole-number part or the fraction part has to be present; for decimal floating
4011  constants, either the period or the exponent part has to be present.
4012 <p><b>Semantics</b>
4013 <p><!--para 3 -->
4014  The significand part is interpreted as a (decimal or hexadecimal) rational number; the
4015  digit sequence in the exponent part is interpreted as a decimal integer. For decimal
4016  floating constants, the exponent indicates the power of 10 by which the significand part is
4017  to be scaled. For hexadecimal floating constants, the exponent indicates the power of 2
4018  by which the significand part is to be scaled. For decimal floating constants, and also for
4019  hexadecimal floating constants when FLT_RADIX is not a power of 2, the result is either
4020  the nearest representable value, or the larger or smaller representable value immediately
4021  adjacent to the nearest representable value, chosen in an implementation-defined manner.
4022  For hexadecimal floating constants when FLT_RADIX is a power of 2, the result is
4023  correctly rounded.
4024 <p><!--para 4 -->
4025  An unsuffixed floating constant has type double. If suffixed by the letter f or F, it has
4026  type float. If suffixed by the letter l or L, it has type long double.
4027 <p><!--para 5 -->
4028  Floating constants are converted to internal format as if at translation-time. The
4029  conversion of a floating constant shall not raise an exceptional condition or a floating-
4030  point exception at execution time. All floating constants of the same source form<sup><a href="#note75"><b>75)</b></a></sup> shall
4031  convert to the same internal format with the same value.
4032 <p><b>Recommended practice</b>
4033 <p><!--para 6 -->
4034  The implementation should produce a diagnostic message if a hexadecimal constant
4035  cannot be represented exactly in its evaluation format; the implementation should then
4036  proceed with the translation of the program.
4037 <p><!--para 7 -->
4038  The translation-time conversion of floating constants should match the execution-time
4039  conversion of character strings by library functions, such as strtod, given matching
4040  inputs suitable for both conversions, the same result format, and default execution-time
4041  rounding.<sup><a href="#note76"><b>76)</b></a></sup>
4042  
4043 <!--page 85 -->
4044
4045 <p><b>Footnotes</b>
4046 <p><small><a name="note75" href="#note75">75)</a> <a href="#1.23">1.23</a>, 1.230, 123e-2, 123e-02, and 1.23L are all different source forms and thus need not
4047  convert to the same internal format and value.
4048 </small>
4049 <p><small><a name="note76" href="#note76">76)</a> The specification for the library functions recommends more accurate conversion than required for
4050  floating constants (see <a href="#7.22.1.3">7.22.1.3</a>).
4051 </small>
4052
4053 <p><small><a href="#Contents">Contents</a></small>
4054 <h5><a name="6.4.4.3" href="#6.4.4.3">6.4.4.3 Enumeration constants</a></h5>
4055 <p><b>Syntax</b>
4056 <p><!--para 1 -->
4057 <pre>
4058           enumeration-constant:
4059                 identifier
4060 </pre>
4061 <p><b>Semantics</b>
4062 <p><!--para 2 -->
4063  An identifier declared as an enumeration constant has type int.
4064 <p><b> Forward references</b>: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>).
4065
4066 <p><small><a href="#Contents">Contents</a></small>
4067 <h5><a name="6.4.4.4" href="#6.4.4.4">6.4.4.4 Character constants</a></h5>
4068 <p><b>Syntax</b>
4069 <p><!--para 1 -->
4070 <!--page 86 -->
4071 <pre>
4072           character-constant:
4073                  ' c-char-sequence '
4074                  L' c-char-sequence '
4075                  u' c-char-sequence '
4076                  U' c-char-sequence '
4077           c-char-sequence:
4078                  c-char
4079                  c-char-sequence c-char
4080           c-char:
4081                     any member of the source character set except
4082                                  the single-quote ', backslash \, or new-line character
4083                     escape-sequence
4084           escape-sequence:
4085                  simple-escape-sequence
4086                  octal-escape-sequence
4087                  hexadecimal-escape-sequence
4088                  universal-character-name
4089           simple-escape-sequence: one of
4090                  \' \" \? \\
4091                  \a \b \f \n \r                  \t    \v
4092           octal-escape-sequence:
4093                   \ octal-digit
4094                   \ octal-digit octal-digit
4095                   \ octal-digit octal-digit octal-digit
4096         hexadecimal-escape-sequence:
4097               \x hexadecimal-digit
4098               hexadecimal-escape-sequence hexadecimal-digit
4099 </pre>
4100 <p><b>Description</b>
4101 <p><!--para 2 -->
4102  An integer character constant is a sequence of one or more multibyte characters enclosed
4103  in single-quotes, as in 'x'. A wide character constant is the same, except prefixed by the
4104  letter L, u, or U. With a few exceptions detailed later, the elements of the sequence are
4105  any members of the source character set; they are mapped in an implementation-defined
4106  manner to members of the execution character set.
4107 <p><!--para 3 -->
4108  The single-quote ', the double-quote ", the question-mark ?, the backslash \, and
4109  arbitrary integer values are representable according to the following table of escape
4110  sequences:
4111 <pre>
4112        single quote '            \'
4113        double quote "            \"
4114        question mark ?           \?
4115        backslash \               \\
4116        octal character           \octal digits
4117        hexadecimal character     \x hexadecimal digits
4118 </pre>
4119 <p><!--para 4 -->
4120  The double-quote " and question-mark ? are representable either by themselves or by the
4121  escape sequences \" and \?, respectively, but the single-quote ' and the backslash \
4122  shall be represented, respectively, by the escape sequences \' and \\.
4123 <p><!--para 5 -->
4124  The octal digits that follow the backslash in an octal escape sequence are taken to be part
4125  of the construction of a single character for an integer character constant or of a single
4126  wide character for a wide character constant. The numerical value of the octal integer so
4127  formed specifies the value of the desired character or wide character.
4128 <p><!--para 6 -->
4129  The hexadecimal digits that follow the backslash and the letter x in a hexadecimal escape
4130  sequence are taken to be part of the construction of a single character for an integer
4131  character constant or of a single wide character for a wide character constant. The
4132  numerical value of the hexadecimal integer so formed specifies the value of the desired
4133  character or wide character.
4134 <p><!--para 7 -->
4135  Each octal or hexadecimal escape sequence is the longest sequence of characters that can
4136  constitute the escape sequence.
4137 <p><!--para 8 -->
4138  In addition, characters not in the basic character set are representable by universal
4139  character names and certain nongraphic characters are representable by escape sequences
4140  consisting of the backslash \ followed by a lowercase letter: \a, \b, \f, \n, \r, \t,
4141  and \v.<sup><a href="#note77"><b>77)</b></a></sup>
4142 <!--page 87 -->
4143 <p><b>Constraints</b>
4144 <p><!--para 9 -->
4145  The value of an octal or hexadecimal escape sequence shall be in the range of
4146  representable values for the corresponding type:
4147 <pre>
4148         Prefix      Corresponding Type
4149         none       unsigned char
4150         L          the unsigned type corresponding to wchar_t
4151         u          char16_t
4152         U          char32_t
4153 </pre>
4154 <p><b>Semantics</b>
4155 <p><!--para 10 -->
4156  An integer character constant has type int. The value of an integer character constant
4157  containing a single character that maps to a single-byte execution character is the
4158  numerical value of the representation of the mapped character interpreted as an integer.
4159  The value of an integer character constant containing more than one character (e.g.,
4160  'ab'), or containing a character or escape sequence that does not map to a single-byte
4161  execution character, is implementation-defined. If an integer character constant contains
4162  a single character or escape sequence, its value is the one that results when an object with
4163  type char whose value is that of the single character or escape sequence is converted to
4164  type int.
4165 <p><!--para 11 -->
4166  A wide character constant prefixed by the letter L has type wchar_t, an integer type
4167  defined in the <a href="#7.19">&lt;stddef.h&gt;</a> header; a wide character constant prefixed by the letter u or
4168  U has type char16_t or char32_t, respectively, unsigned integer types defined in the
4169  <a href="#7.27">&lt;uchar.h&gt;</a> header. The value of a wide character constant containing a single
4170  multibyte character that maps to a single member of the extended execution character set
4171  is the wide character corresponding to that multibyte character, as defined by the
4172  mbtowc, mbrtoc16, or mbrtoc32 function as appropriate for its type, with an
4173  implementation-defined current locale. The value of a wide character constant containing
4174  more than one multibyte character or a single multibyte character that maps to multiple
4175  members of the extended execution character set, or containing a multibyte character or
4176  escape sequence not represented in the extended execution character set, is
4177  implementation-defined.
4178 <p><!--para 12 -->
4179  EXAMPLE 1      The construction '\0' is commonly used to represent the null character.
4180  
4181 <p><!--para 13 -->
4182  EXAMPLE 2 Consider implementations that use two's complement representation for integers and eight
4183  bits for objects that have type char. In an implementation in which type char has the same range of
4184  values as signed char, the integer character constant '\xFF' has the value -1; if type char has the
4185  same range of values as unsigned char, the character constant '\xFF' has the value +255.
4186  
4187  
4188  
4189  
4190 <!--page 88 -->
4191 <p><!--para 14 -->
4192  EXAMPLE 3 Even if eight bits are used for objects that have type char, the construction '\x123'
4193  specifies an integer character constant containing only one character, since a hexadecimal escape sequence
4194  is terminated only by a non-hexadecimal character. To specify an integer character constant containing the
4195  two characters whose values are '\x12' and '3', the construction '\0223' may be used, since an octal
4196  escape sequence is terminated after three octal digits. (The value of this two-character integer character
4197  constant is implementation-defined.)
4198  
4199 <p><!--para 15 -->
4200  EXAMPLE 4 Even if 12 or more bits are used for objects that have type wchar_t, the construction
4201  L'\1234' specifies the implementation-defined value that results from the combination of the values
4202  0123 and '4'.
4203  
4204 <p><b> Forward references</b>: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), the mbtowc function
4205  (<a href="#7.22.7.2">7.22.7.2</a>), Unicode utilities <a href="#7.27">&lt;uchar.h&gt;</a> (<a href="#7.27">7.27</a>).
4206
4207 <p><b>Footnotes</b>
4208 <p><small><a name="note77" href="#note77">77)</a> The semantics of these characters were discussed in <a href="#5.2.2">5.2.2</a>. If any other character follows a backslash,
4209  the result is not a token and a diagnostic is required. See ''future language directions'' (<a href="#6.11.4">6.11.4</a>).
4210 </small>
4211
4212 <p><small><a href="#Contents">Contents</a></small>
4213 <h4><a name="6.4.5" href="#6.4.5">6.4.5 String literals</a></h4>
4214 <p><b>Syntax</b>
4215 <p><!--para 1 -->
4216 <pre>
4217           string-literal:
4218                   encoding-prefix<sub>opt</sub> " s-char-sequence<sub>opt</sub> "
4219           encoding-prefix:
4220                  u8
4221                  u
4222                  U
4223                  L
4224           s-char-sequence:
4225                  s-char
4226                  s-char-sequence s-char
4227           s-char:
4228                     any member of the source character set except
4229                                  the double-quote ", backslash \, or new-line character
4230                     escape-sequence
4231 </pre>
4232 <p><b>Constraints</b>
4233 <p><!--para 2 -->
4234  A sequence of adjacent string literal tokens shall not include both a wide string literal and
4235  a UTF-8 string literal.
4236 <p><b>Description</b>
4237 <p><!--para 3 -->
4238  A character string literal is a sequence of zero or more multibyte characters enclosed in
4239  double-quotes, as in "xyz". A UTF-8 string literal is the same, except prefixed by u8.
4240  A wide string literal is the same, except prefixed by the letter L, u, or U.
4241 <p><!--para 4 -->
4242  The same considerations apply to each element of the sequence in a string literal as if it
4243  were in an integer character constant (for a character or UTF-8 string literal) or a wide
4244  character constant (for a wide string literal), except that the single-quote ' is
4245  representable either by itself or by the escape sequence \', but the double-quote " shall
4246 <!--page 89 -->
4247  be represented by the escape sequence \".
4248 <p><b>Semantics</b>
4249 <p><!--para 5 -->
4250  In translation phase 6, the multibyte character sequences specified by any sequence of
4251  adjacent character and identically-prefixed string literal tokens are concatenated into a
4252  single multibyte character sequence. If any of the tokens has an encoding prefix, the
4253  resulting multibyte character sequence is treated as having the same prefix; otherwise, it
4254  is treated as a character string literal. Whether differently-prefixed wide string literal
4255  tokens can be concatenated and, if so, the treatment of the resulting multibyte character
4256  sequence are implementation-defined.
4257 <p><!--para 6 -->
4258  In translation phase 7, a byte or code of value zero is appended to each multibyte
4259  character sequence that results from a string literal or literals.<sup><a href="#note78"><b>78)</b></a></sup> The multibyte character
4260  sequence is then used to initialize an array of static storage duration and length just
4261  sufficient to contain the sequence. For character string literals, the array elements have
4262  type char, and are initialized with the individual bytes of the multibyte character
4263  sequence. For UTF-8 string literals, the array elements have type char, and are
4264  initialized with the characters of the multibyte character sequence, as encoded in UTF-8.
4265  For wide string literals prefixed by the letter L, the array elements have type wchar_t
4266  and are initialized with the sequence of wide characters corresponding to the multibyte
4267  character sequence, as defined by the mbstowcs function with an implementation-
4268  defined current locale. For wide string literals prefixed by the letter u or U, the array
4269  elements have type char16_t or char32_t, respectively, and are initialized with the
4270  sequence of wide characters corresponding to the multibyte character sequence, as
4271  defined by successive calls to the mbrtoc16, or mbrtoc32 function as appropriate for
4272  its type, with an implementation-defined current locale. The value of a string literal
4273  containing a multibyte character or escape sequence not represented in the execution
4274  character set is implementation-defined.
4275 <p><!--para 7 -->
4276  It is unspecified whether these arrays are distinct provided their elements have the
4277  appropriate values. If the program attempts to modify such an array, the behavior is
4278  undefined.
4279 <p><!--para 8 -->
4280  EXAMPLE 1      This pair of adjacent character string literals
4281 <pre>
4282           "\x12" "3"
4283 </pre>
4284  produces a single character string literal containing the two characters whose values are '\x12' and '3',
4285  because escape sequences are converted into single members of the execution character set just prior to
4286  adjacent string literal concatenation.
4287  
4288 <p><!--para 9 -->
4289  EXAMPLE 2      Each of the sequences of adjacent string literal tokens
4290  
4291  
4292  
4293 <!--page 90 -->
4294 <pre>
4295           "a" "b" L"c"
4296           "a" L"b" "c"
4297           L"a" "b" L"c"
4298           L"a" L"b" L"c"
4299 </pre>
4300  is equivalent to the string literal
4301 <pre>
4302           L"abc"
4303 </pre>
4304  Likewise, each of the sequences
4305 <pre>
4306           "a" "b" u"c"
4307           "a" u"b" "c"
4308           u"a" "b" u"c"
4309           u"a" u"b" u"c"
4310 </pre>
4311  is equivalent to
4312 <pre>
4313           u"abc"
4314 </pre>
4315  
4316 <p><b> Forward references</b>: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), the mbstowcs
4317  function (<a href="#7.22.8.1">7.22.8.1</a>), Unicode utilities <a href="#7.27">&lt;uchar.h&gt;</a> (<a href="#7.27">7.27</a>).
4318
4319 <p><b>Footnotes</b>
4320 <p><small><a name="note78" href="#note78">78)</a> A string literal need not be a string (see <a href="#7.1.1">7.1.1</a>), because a null character may be embedded in it by a
4321  \0 escape sequence.
4322 </small>
4323
4324 <p><small><a href="#Contents">Contents</a></small>
4325 <h4><a name="6.4.6" href="#6.4.6">6.4.6 Punctuators</a></h4>
4326 <p><b>Syntax</b>
4327 <p><!--para 1 -->
4328 <pre>
4329           punctuator: one of
4330                  [ ] ( ) { } . -&gt;
4331                  ++ -- &amp; * + - ~ !
4332                  / % &lt;&lt; &gt;&gt; &lt; &gt; &lt;= &gt;=                         ==    !=    ^    |   &amp;&amp;   ||
4333                  ? : ; ...
4334                  = *= /= %= += -= &lt;&lt;=                        &gt;&gt;=    &amp;=       ^=   |=
4335                  , # ##
4336                  &lt;: :&gt; &lt;% %&gt; %: %:%:
4337 </pre>
4338 <p><b>Semantics</b>
4339 <p><!--para 2 -->
4340  A punctuator is a symbol that has independent syntactic and semantic significance.
4341  Depending on context, it may specify an operation to be performed (which in turn may
4342  yield a value or a function designator, produce a side effect, or some combination thereof)
4343  in which case it is known as an operator (other forms of operator also exist in some
4344  contexts). An operand is an entity on which an operator acts.
4345 <!--page 91 -->
4346 <p><!--para 3 -->
4347  In all aspects of the language, the six tokens<sup><a href="#note79"><b>79)</b></a></sup>
4348 <pre>
4349           &lt;:    :&gt;      &lt;%    %&gt;     %:     %:%:
4350 </pre>
4351  behave, respectively, the same as the six tokens
4352 <pre>
4353           [     ]       {     }      #      ##
4354 </pre>
4355  except for their spelling.<sup><a href="#note80"><b>80)</b></a></sup>
4356 <p><b> Forward references</b>: expressions (<a href="#6.5">6.5</a>), declarations (<a href="#6.7">6.7</a>), preprocessing directives
4357  (<a href="#6.10">6.10</a>), statements (<a href="#6.8">6.8</a>).
4358
4359 <p><b>Footnotes</b>
4360 <p><small><a name="note79" href="#note79">79)</a> These tokens are sometimes called ''digraphs''.
4361 </small>
4362 <p><small><a name="note80" href="#note80">80)</a> Thus [ and &lt;: behave differently when ''stringized'' (see <a href="#6.10.3.2">6.10.3.2</a>), but can otherwise be freely
4363  interchanged.
4364 </small>
4365
4366 <p><small><a href="#Contents">Contents</a></small>
4367 <h4><a name="6.4.7" href="#6.4.7">6.4.7 Header names</a></h4>
4368 <p><b>Syntax</b>
4369 <p><!--para 1 -->
4370 <pre>
4371           header-name:
4372                  &lt; h-char-sequence &gt;
4373                  " q-char-sequence "
4374           h-char-sequence:
4375                  h-char
4376                  h-char-sequence h-char
4377           h-char:
4378                     any member of the source character set except
4379                                  the new-line character and &gt;
4380           q-char-sequence:
4381                  q-char
4382                  q-char-sequence q-char
4383           q-char:
4384                     any member of the source character set except
4385                                  the new-line character and "
4386 </pre>
4387 <p><b>Semantics</b>
4388 <p><!--para 2 -->
4389  The sequences in both forms of header names are mapped in an implementation-defined
4390  manner to headers or external source file names as specified in <a href="#6.10.2">6.10.2</a>.
4391 <p><!--para 3 -->
4392  If the characters ', \, ", //, or /* occur in the sequence between the &lt; and &gt; delimiters,
4393  the behavior is undefined. Similarly, if the characters ', \, //, or /* occur in the
4394  
4395  
4396  
4397  
4398 <!--page 92 -->
4399  sequence between the " delimiters, the behavior is undefined.<sup><a href="#note81"><b>81)</b></a></sup> Header name
4400  preprocessing tokens are recognized only within #include preprocessing directives and
4401  in implementation-defined locations within #pragma directives.<sup><a href="#note82"><b>82)</b></a></sup>
4402 <p><!--para 4 -->
4403  EXAMPLE       The following sequence of characters:
4404 <pre>
4405           0x3&lt;1/a.h&gt;1e2
4406           #include &lt;1/a.h&gt;
4407           #define const.member@$
4408 </pre>
4409  forms the following sequence of preprocessing tokens (with each individual preprocessing token delimited
4410  by a { on the left and a } on the right).
4411 <pre>
4412           {0x3}{&lt;}{1}{/}{a}{.}{h}{&gt;}{1e2}
4413           {#}{include} {&lt;1/a.h&gt;}
4414           {#}{define} {const}{.}{member}{@}{$}
4415 </pre>
4416  
4417 <p><b> Forward references</b>: source file inclusion (<a href="#6.10.2">6.10.2</a>).
4418
4419 <p><b>Footnotes</b>
4420 <p><small><a name="note81" href="#note81">81)</a> Thus, sequences of characters that resemble escape sequences cause undefined behavior.
4421 </small>
4422 <p><small><a name="note82" href="#note82">82)</a> For an example of a header name preprocessing token used in a #pragma directive, see <a href="#6.10.9">6.10.9</a>.
4423 </small>
4424
4425 <p><small><a href="#Contents">Contents</a></small>
4426 <h4><a name="6.4.8" href="#6.4.8">6.4.8 Preprocessing numbers</a></h4>
4427 <p><b>Syntax</b>
4428 <p><!--para 1 -->
4429 <pre>
4430           pp-number:
4431                 digit
4432                 . digit
4433                 pp-number       digit
4434                 pp-number       identifier-nondigit
4435                 pp-number       e sign
4436                 pp-number       E sign
4437                 pp-number       p sign
4438                 pp-number       P sign
4439                 pp-number       .
4440 </pre>
4441 <p><b>Description</b>
4442 <p><!--para 2 -->
4443  A preprocessing number begins with a digit optionally preceded by a period (.) and may
4444  be followed by valid identifier characters and the character sequences e+, e-, E+, E-,
4445  p+, p-, P+, or P-.
4446 <p><!--para 3 -->
4447  Preprocessing number tokens lexically include all floating and integer constant tokens.
4448 <p><b>Semantics</b>
4449 <p><!--para 4 -->
4450  A preprocessing number does not have type or a value; it acquires both after a successful
4451  conversion (as part of translation phase 7) to a floating constant token or an integer
4452  constant token.
4453  
4454  
4455 <!--page 93 -->
4456
4457 <p><small><a href="#Contents">Contents</a></small>
4458 <h4><a name="6.4.9" href="#6.4.9">6.4.9 Comments</a></h4>
4459 <p><!--para 1 -->
4460  Except within a character constant, a string literal, or a comment, the characters /*
4461  introduce a comment. The contents of such a comment are examined only to identify
4462  multibyte characters and to find the characters */ that terminate it.<sup><a href="#note83"><b>83)</b></a></sup>
4463 <p><!--para 2 -->
4464  Except within a character constant, a string literal, or a comment, the characters //
4465  introduce a comment that includes all multibyte characters up to, but not including, the
4466  next new-line character. The contents of such a comment are examined only to identify
4467  multibyte characters and to find the terminating new-line character.
4468 <p><!--para 3 -->
4469  EXAMPLE
4470 <pre>
4471           "a//b"                             //   four-character string literal
4472           #include "//e"                     //   undefined behavior
4473           // */                              //   comment, not syntax error
4474           f = g/**//h;                       //   equivalent to f = g / h;
4475           //\
4476           i();                               // part of a two-line comment
4477           /\
4478           / j();                             // part of a two-line comment
4479           #define glue(x,y) x##y
4480           glue(/,/) k();                     // syntax error, not comment
4481           /*//*/ l();                        // equivalent to l();
4482           m = n//**/o
4483              + p;                            // equivalent to m = n + p;
4484 </pre>
4485  
4486  
4487  
4488  
4489 <!--page 94 -->
4490
4491 <p><b>Footnotes</b>
4492 <p><small><a name="note83" href="#note83">83)</a> Thus, /* ... */ comments do not nest.
4493 </small>
4494
4495 <p><small><a href="#Contents">Contents</a></small>
4496 <h3><a name="6.5" href="#6.5">6.5 Expressions</a></h3>
4497 <p><!--para 1 -->
4498  An expression is a sequence of operators and operands that specifies computation of a
4499  value, or that designates an object or a function, or that generates side effects, or that
4500  performs a combination thereof. The value computations of the operands of an operator
4501  are sequenced before the value computation of the result of the operator.
4502 <p><!--para 2 -->
4503  If a side effect on a scalar object is unsequenced relative to either a different side effect
4504  on the same scalar object or a value computation using the value of the same scalar
4505  object, the behavior is undefined. If there are multiple allowable orderings of the
4506  subexpressions of an expression, the behavior is undefined if such an unsequenced side
4507  effect occurs in any of the orderings.<sup><a href="#note84"><b>84)</b></a></sup>
4508 <p><!--para 3 -->
4509  The grouping of operators and operands is indicated by the syntax.<sup><a href="#note85"><b>85)</b></a></sup> Except as specified
4510  later, side effects and value computations of subexpressions are unsequenced.<sup><a href="#note86"><b>86)</b></a></sup>         *
4511 <p><!--para 4 -->
4512  Some operators (the unary operator ~, and the binary operators &lt;&lt;, &gt;&gt;, &amp;, ^, and |,
4513  collectively described as bitwise operators) are required to have operands that have
4514  integer type. These operators yield values that depend on the internal representations of
4515  integers, and have implementation-defined and undefined aspects for signed types.
4516 <p><!--para 5 -->
4517  If an exceptional condition occurs during the evaluation of an expression (that is, if the
4518  result is not mathematically defined or not in the range of representable values for its
4519  type), the behavior is undefined.
4520  
4521  
4522  
4523 <!--page 95 -->
4524 <p><!--para 6 -->
4525  The effective type of an object for an access to its stored value is the declared type of the
4526  object, if any.<sup><a href="#note87"><b>87)</b></a></sup> If a value is stored into an object having no declared type through an
4527  lvalue having a type that is not a character type, then the type of the lvalue becomes the
4528  effective type of the object for that access and for subsequent accesses that do not modify
4529  the stored value. If a value is copied into an object having no declared type using
4530  memcpy or memmove, or is copied as an array of character type, then the effective type
4531  of the modified object for that access and for subsequent accesses that do not modify the
4532  value is the effective type of the object from which the value is copied, if it has one. For
4533  all other accesses to an object having no declared type, the effective type of the object is
4534  simply the type of the lvalue used for the access.
4535 <p><!--para 7 -->
4536  An object shall have its stored value accessed only by an lvalue expression that has one of
4537  the following types:<sup><a href="#note88"><b>88)</b></a></sup>
4538 <ul>
4539 <li>  a type compatible with the effective type of the object,
4540 <li>  a qualified version of a type compatible with the effective type of the object,
4541 <li>  a type that is the signed or unsigned type corresponding to the effective type of the
4542  object,
4543 <li>  a type that is the signed or unsigned type corresponding to a qualified version of the
4544  effective type of the object,
4545 <li>  an aggregate or union type that includes one of the aforementioned types among its
4546  members (including, recursively, a member of a subaggregate or contained union), or
4547 <li>  a character type.
4548 </ul>
4549 <p><!--para 8 -->
4550  A floating expression may be contracted, that is, evaluated as though it were a single
4551  operation, thereby omitting rounding errors implied by the source code and the
4552  expression evaluation method.<sup><a href="#note89"><b>89)</b></a></sup> The FP_CONTRACT pragma in <a href="#7.12">&lt;math.h&gt;</a> provides a
4553  way to disallow contracted expressions. Otherwise, whether and how expressions are
4554  contracted is implementation-defined.<sup><a href="#note90"><b>90)</b></a></sup>
4555 <p><b> Forward references</b>: the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>), copying functions (<a href="#7.23.2">7.23.2</a>).
4556  
4557  
4558 <!--page 96 -->
4559
4560 <p><b>Footnotes</b>
4561 <p><small><a name="note84" href="#note84">84)</a> This paragraph renders undefined statement expressions such as
4562
4563 <pre>
4564            i = ++i + 1;
4565            a[i++] = i;
4566 </pre>
4567   while allowing
4568
4569 <pre>
4570            i = i + 1;
4571            a[i] = i;
4572 </pre>
4573  
4574 </small>
4575 <p><small><a name="note85" href="#note85">85)</a> The syntax specifies the precedence of operators in the evaluation of an expression, which is the same
4576  as the order of the major subclauses of this subclause, highest precedence first. Thus, for example, the
4577  expressions allowed as the operands of the binary + operator (<a href="#6.5.6">6.5.6</a>) are those expressions defined in
4578  <a href="#6.5.1">6.5.1</a> through <a href="#6.5.6">6.5.6</a>. The exceptions are cast expressions (<a href="#6.5.4">6.5.4</a>) as operands of unary operators
4579  (<a href="#6.5.3">6.5.3</a>), and an operand contained between any of the following pairs of operators: grouping
4580  parentheses () (<a href="#6.5.1">6.5.1</a>), subscripting brackets [] (<a href="#6.5.2.1">6.5.2.1</a>), function-call parentheses () (<a href="#6.5.2.2">6.5.2.2</a>), and
4581  the conditional operator ? : (<a href="#6.5.15">6.5.15</a>).
4582   Within each major subclause, the operators have the same precedence. Left- or right-associativity is
4583   indicated in each subclause by the syntax for the expressions discussed therein.
4584 </small>
4585 <p><small><a name="note86" href="#note86">86)</a> In an expression that is evaluated more than once during the execution of a program, unsequenced and
4586  indeterminately sequenced evaluations of its subexpressions need not be performed consistently in
4587  different evaluations.
4588 </small>
4589 <p><small><a name="note87" href="#note87">87)</a> Allocated objects have no declared type.
4590 </small>
4591 <p><small><a name="note88" href="#note88">88)</a> The intent of this list is to specify those circumstances in which an object may or may not be aliased.
4592 </small>
4593 <p><small><a name="note89" href="#note89">89)</a> The intermediate operations in the contracted expression are evaluated as if to infinite precision and
4594  range, while the final operation is rounded to the format determined by the expression evaluation
4595  method. A contracted expression might also omit the raising of floating-point exceptions.
4596 </small>
4597 <p><small><a name="note90" href="#note90">90)</a> This license is specifically intended to allow implementations to exploit fast machine instructions that
4598  combine multiple C operators. As contractions potentially undermine predictability, and can even
4599  decrease accuracy for containing expressions, their use needs to be well-defined and clearly
4600  documented.
4601 </small>
4602
4603 <p><small><a href="#Contents">Contents</a></small>
4604 <h4><a name="6.5.1" href="#6.5.1">6.5.1 Primary expressions</a></h4>
4605 <p><b>Syntax</b>
4606 <p><!--para 1 -->
4607 <pre>
4608           primary-expression:
4609                  identifier
4610                  constant
4611                  string-literal
4612                  ( expression )
4613                  generic-selection
4614 </pre>
4615 <p><b>Semantics</b>
4616 <p><!--para 2 -->
4617  An identifier is a primary expression, provided it has been declared as designating an
4618  object (in which case it is an lvalue) or a function (in which case it is a function
4619  designator).<sup><a href="#note91"><b>91)</b></a></sup>
4620 <p><!--para 3 -->
4621  A constant is a primary expression. Its type depends on its form and value, as detailed in
4622  <a href="#6.4.4">6.4.4</a>.
4623 <p><!--para 4 -->
4624  A string literal is a primary expression. It is an lvalue with type as detailed in <a href="#6.4.5">6.4.5</a>.
4625 <p><!--para 5 -->
4626  A parenthesized expression is a primary expression. Its type and value are identical to
4627  those of the unparenthesized expression. It is an lvalue, a function designator, or a void
4628  expression if the unparenthesized expression is, respectively, an lvalue, a function
4629  designator, or a void expression.
4630 <p><b> Forward references</b>: declarations (<a href="#6.7">6.7</a>).
4631
4632 <p><b>Footnotes</b>
4633 <p><small><a name="note91" href="#note91">91)</a> Thus, an undeclared identifier is a violation of the syntax.
4634 </small>
4635
4636 <p><small><a href="#Contents">Contents</a></small>
4637 <h5><a name="6.5.1.1" href="#6.5.1.1">6.5.1.1 Generic selection</a></h5>
4638 <p><b>Syntax</b>
4639 <p><!--para 1 -->
4640 <pre>
4641           generic-selection:
4642                  _Generic ( assignment-expression , generic-assoc-list )
4643           generic-assoc-list:
4644                  generic-association
4645                  generic-assoc-list , generic-association
4646           generic-association:
4647                  type-name : assignment-expression
4648                  default : assignment-expression
4649 </pre>
4650 <p><b>Constraints</b>
4651 <p><!--para 2 -->
4652  A generic selection shall have no more than one default generic association. The type
4653  name in a generic association shall specify a complete object type other than a variably
4654  
4655 <!--page 97 -->
4656  modified type. No two generic associations in the same generic selection shall specify
4657  compatible types. The controlling expression of a generic selection shall have type
4658  compatible with at most one of the types named in its generic association list. If a
4659  generic selection has no default generic association, its controlling expression shall
4660  have type compatible with exactly one of the types named in its generic association list.
4661 <p><b>Semantics</b>
4662 <p><!--para 3 -->
4663  The controlling expression of a generic selection is not evaluated. If a generic selection
4664  has a generic association with a type name that is compatible with the type of the
4665  controlling expression, then the result expression of the generic selection is the
4666  expression in that generic association. Otherwise, the result expression of the generic
4667  selection is the expression in the default generic association. None of the expressions
4668  from any other generic association of the generic selection is evaluated.
4669 <p><!--para 4 -->
4670  The type and value of a generic selection are identical to those of its result expression. It
4671  is an lvalue, a function designator, or a void expression if its result expression is,
4672  respectively, an lvalue, a function designator, or a void expression.
4673 <p><!--para 5 -->
4674  EXAMPLE      The cbrt type-generic macro could be implemented as follows:
4675 <pre>
4676           #define cbrt(X) _Generic((X),                                      \
4677                                   long double: cbrtl,                        \
4678                                   default: cbrt,                             \
4679                                   float: cbrtf                               \
4680                                   )(X)
4681 </pre>
4682  
4683
4684 <p><small><a href="#Contents">Contents</a></small>
4685 <h4><a name="6.5.2" href="#6.5.2">6.5.2 Postfix operators</a></h4>
4686 <p><b>Syntax</b>
4687 <p><!--para 1 -->
4688 <!--page 98 -->
4689 <pre>
4690           postfix-expression:
4691                  primary-expression
4692                  postfix-expression [ expression ]
4693                  postfix-expression ( argument-expression-list<sub>opt</sub> )
4694                  postfix-expression . identifier
4695                  postfix-expression -&gt; identifier
4696                  postfix-expression ++
4697                  postfix-expression --
4698                  ( type-name ) { initializer-list }
4699                  ( type-name ) { initializer-list , }
4700           argument-expression-list:
4701                 assignment-expression
4702                 argument-expression-list , assignment-expression
4703 </pre>
4704
4705 <p><small><a href="#Contents">Contents</a></small>
4706 <h5><a name="6.5.2.1" href="#6.5.2.1">6.5.2.1 Array subscripting</a></h5>
4707 <p><b>Constraints</b>
4708 <p><!--para 1 -->
4709  One of the expressions shall have type ''pointer to complete object type'', the other
4710  expression shall have integer type, and the result has type ''type''.
4711 <p><b>Semantics</b>
4712 <p><!--para 2 -->
4713  A postfix expression followed by an expression in square brackets [] is a subscripted
4714  designation of an element of an array object. The definition of the subscript operator []
4715  is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that
4716  apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the
4717  initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th
4718  element of E1 (counting from zero).
4719 <p><!--para 3 -->
4720  Successive subscript operators designate an element of a multidimensional array object.
4721  If E is an n-dimensional array (n &gt;= 2) with dimensions i x j x . . . x k, then E (used as
4722  other than an lvalue) is converted to a pointer to an (n - 1)-dimensional array with
4723  dimensions j x . . . x k. If the unary * operator is applied to this pointer explicitly, or
4724  implicitly as a result of subscripting, the result is the referenced (n - 1)-dimensional
4725  array, which itself is converted into a pointer if used as other than an lvalue. It follows
4726  from this that arrays are stored in row-major order (last subscript varies fastest).
4727 <p><!--para 4 -->
4728  EXAMPLE        Consider the array object defined by the declaration
4729 <pre>
4730           int x[3][5];
4731 </pre>
4732  Here x is a 3 x 5 array of ints; more precisely, x is an array of three element objects, each of which is an
4733  array of five ints. In the expression x[i], which is equivalent to (*((x)+(i))), x is first converted to
4734  a pointer to the initial array of five ints. Then i is adjusted according to the type of x, which conceptually
4735  entails multiplying i by the size of the object to which the pointer points, namely an array of five int
4736  objects. The results are added and indirection is applied to yield an array of five ints. When used in the
4737  expression x[i][j], that array is in turn converted to a pointer to the first of the ints, so x[i][j]
4738  yields an int.
4739  
4740 <p><b> Forward references</b>: additive operators (<a href="#6.5.6">6.5.6</a>), address and indirection operators
4741  (<a href="#6.5.3.2">6.5.3.2</a>), array declarators (<a href="#6.7.6.2">6.7.6.2</a>).
4742
4743 <p><small><a href="#Contents">Contents</a></small>
4744 <h5><a name="6.5.2.2" href="#6.5.2.2">6.5.2.2 Function calls</a></h5>
4745 <p><b>Constraints</b>
4746 <p><!--para 1 -->
4747  The expression that denotes the called function<sup><a href="#note92"><b>92)</b></a></sup> shall have type pointer to function
4748  returning void or returning a complete object type other than an array type.
4749 <p><!--para 2 -->
4750  If the expression that denotes the called function has a type that includes a prototype, the
4751  number of arguments shall agree with the number of parameters. Each argument shall
4752  
4753  
4754 <!--page 99 -->
4755  have a type such that its value may be assigned to an object with the unqualified version
4756  of the type of its corresponding parameter.
4757 <p><b>Semantics</b>
4758 <p><!--para 3 -->
4759  A postfix expression followed by parentheses () containing a possibly empty, comma-
4760  separated list of expressions is a function call. The postfix expression denotes the called
4761  function. The list of expressions specifies the arguments to the function.
4762 <p><!--para 4 -->
4763  An argument may be an expression of any complete object type. In preparing for the call
4764  to a function, the arguments are evaluated, and each parameter is assigned the value of the
4765  corresponding argument.<sup><a href="#note93"><b>93)</b></a></sup>
4766 <p><!--para 5 -->
4767  If the expression that denotes the called function has type pointer to function returning an
4768  object type, the function call expression has the same type as that object type, and has the
4769  value determined as specified in <a href="#6.8.6.4">6.8.6.4</a>. Otherwise, the function call has type void.         *
4770 <p><!--para 6 -->
4771  If the expression that denotes the called function has a type that does not include a
4772  prototype, the integer promotions are performed on each argument, and arguments that
4773  have type float are promoted to double. These are called the default argument
4774  promotions. If the number of arguments does not equal the number of parameters, the
4775  behavior is undefined. If the function is defined with a type that includes a prototype, and
4776  either the prototype ends with an ellipsis (, ...) or the types of the arguments after
4777  promotion are not compatible with the types of the parameters, the behavior is undefined.
4778  If the function is defined with a type that does not include a prototype, and the types of
4779  the arguments after promotion are not compatible with those of the parameters after
4780  promotion, the behavior is undefined, except for the following cases:
4781 <ul>
4782 <li>  one promoted type is a signed integer type, the other promoted type is the
4783  corresponding unsigned integer type, and the value is representable in both types;
4784 <li>  both types are pointers to qualified or unqualified versions of a character type or
4785  void.
4786 </ul>
4787 <p><!--para 7 -->
4788  If the expression that denotes the called function has a type that does include a prototype,
4789  the arguments are implicitly converted, as if by assignment, to the types of the
4790  corresponding parameters, taking the type of each parameter to be the unqualified version
4791  of its declared type. The ellipsis notation in a function prototype declarator causes
4792  argument type conversion to stop after the last declared parameter. The default argument
4793  promotions are performed on trailing arguments.
4794  
4795  
4796  
4797 <!--page 100 -->
4798 <p><!--para 8 -->
4799  No other conversions are performed implicitly; in particular, the number and types of
4800  arguments are not compared with those of the parameters in a function definition that
4801  does not include a function prototype declarator.
4802 <p><!--para 9 -->
4803  If the function is defined with a type that is not compatible with the type (of the
4804  expression) pointed to by the expression that denotes the called function, the behavior is
4805  undefined.
4806 <p><!--para 10 -->
4807  There is a sequence point after the evaluations of the function designator and the actual
4808  arguments but before the actual call. Every evaluation in the calling function (including
4809  other function calls) that is not otherwise specifically sequenced before or after the
4810  execution of the body of the called function is indeterminately sequenced with respect to
4811  the execution of the called function.<sup><a href="#note94"><b>94)</b></a></sup>
4812 <p><!--para 11 -->
4813  Recursive function calls shall be permitted, both directly and indirectly through any chain
4814  of other functions.
4815 <p><!--para 12 -->
4816  EXAMPLE        In the function call
4817 <pre>
4818           (*pf[f1()]) (f2(), f3() + f4())
4819 </pre>
4820  the functions f1, f2, f3, and f4 may be called in any order. All side effects have to be completed before
4821  the function pointed to by pf[f1()] is called.
4822  
4823 <p><b> Forward references</b>: function declarators (including prototypes) (<a href="#6.7.6.3">6.7.6.3</a>), function
4824  definitions (<a href="#6.9.1">6.9.1</a>), the return statement (<a href="#6.8.6.4">6.8.6.4</a>), simple assignment (<a href="#6.5.16.1">6.5.16.1</a>).
4825
4826 <p><b>Footnotes</b>
4827 <p><small><a name="note92" href="#note92">92)</a> Most often, this is the result of converting an identifier that is a function designator.
4828 </small>
4829 <p><small><a name="note93" href="#note93">93)</a> A function may change the values of its parameters, but these changes cannot affect the values of the
4830  arguments. On the other hand, it is possible to pass a pointer to an object, and the function may
4831  change the value of the object pointed to. A parameter declared to have array or function type is
4832  adjusted to have a pointer type as described in <a href="#6.9.1">6.9.1</a>.
4833 </small>
4834 <p><small><a name="note94" href="#note94">94)</a> In other words, function executions do not ''interleave'' with each other.
4835 </small>
4836
4837 <p><small><a href="#Contents">Contents</a></small>
4838 <h5><a name="6.5.2.3" href="#6.5.2.3">6.5.2.3 Structure and union members</a></h5>
4839 <p><b>Constraints</b>
4840 <p><!--para 1 -->
4841  The first operand of the . operator shall have an atomic, qualified, or unqualified
4842  structure or union type, and the second operand shall name a member of that type.
4843 <p><!--para 2 -->
4844  The first operand of the -&gt; operator shall have type ''pointer to atomic, qualified, or
4845  unqualified structure'' or ''pointer to atomic, qualified, or unqualified union'', and the
4846  second operand shall name a member of the type pointed to.
4847 <p><b>Semantics</b>
4848 <p><!--para 3 -->
4849  A postfix expression followed by the . operator and an identifier designates a member of
4850  a structure or union object. The value is that of the named member,<sup><a href="#note95"><b>95)</b></a></sup> and is an lvalue if
4851  the first expression is an lvalue. If the first expression has qualified type, the result has
4852  the so-qualified version of the type of the designated member.
4853  
4854 <!--page 101 -->
4855 <p><!--para 4 -->
4856  A postfix expression followed by the -&gt; operator and an identifier designates a member
4857  of a structure or union object. The value is that of the named member of the object to
4858  which the first expression points, and is an lvalue.<sup><a href="#note96"><b>96)</b></a></sup> If the first expression is a pointer to
4859  a qualified type, the result has the so-qualified version of the type of the designated
4860  member.
4861 <p><!--para 5 -->
4862  Accessing a member of an atomic structure or union object results in undefined
4863  behavior.<sup><a href="#note97"><b>97)</b></a></sup>
4864 <p><!--para 6 -->
4865  One special guarantee is made in order to simplify the use of unions: if a union contains
4866  several structures that share a common initial sequence (see below), and if the union
4867  object currently contains one of these structures, it is permitted to inspect the common
4868  initial part of any of them anywhere that a declaration of the completed type of the union
4869  is visible. Two structures share a common initial sequence if corresponding members
4870  have compatible types (and, for bit-fields, the same widths) for a sequence of one or more
4871  initial members.
4872 <p><!--para 7 -->
4873  EXAMPLE 1 If f is a function returning a structure or union, and x is a member of that structure or
4874  union, f().x is a valid postfix expression but is not an lvalue.
4875  
4876 <p><!--para 8 -->
4877  EXAMPLE 2       In:
4878 <pre>
4879           struct s { int i; const int ci; };
4880           struct s s;
4881           const struct s cs;
4882           volatile struct s vs;
4883 </pre>
4884  the various members have the types:
4885 <pre>
4886           s.i          int
4887           s.ci         const int
4888           cs.i         const int
4889           cs.ci        const int
4890           vs.i         volatile int
4891           vs.ci        volatile const int
4892 </pre>
4893  
4894  
4895  
4896  
4897 <!--page 102 -->
4898 <p><!--para 9 -->
4899  EXAMPLE 3       The following is a valid fragment:
4900 <pre>
4901           union {
4902                   struct {
4903                         int      alltypes;
4904                   } n;
4905                   struct {
4906                         int      type;
4907                         int      intnode;
4908                   } ni;
4909                   struct {
4910                         int      type;
4911                         double doublenode;
4912                   } nf;
4913           } u;
4914           u.nf.type = 1;
4915           u.nf.doublenode = <a href="#3.14">3.14</a>;
4916           /* ... */
4917           if (u.n.alltypes == 1)
4918                   if (sin(u.nf.doublenode) == 0.0)
4919                         /* ... */
4920 </pre>
4921  The following is not a valid fragment (because the union type is not visible within function f):
4922 <pre>
4923           struct t1 { int m; };
4924           struct t2 { int m; };
4925           int f(struct t1 *p1, struct t2 *p2)
4926           {
4927                 if (p1-&gt;m &lt; 0)
4928                         p2-&gt;m = -p2-&gt;m;
4929                 return p1-&gt;m;
4930           }
4931           int g()
4932           {
4933                 union {
4934                         struct t1 s1;
4935                         struct t2 s2;
4936                 } u;
4937                 /* ... */
4938                 return f(&amp;u.s1, &amp;u.s2);
4939           }
4940 </pre>
4941  
4942 <p><b> Forward references</b>: address and indirection operators (<a href="#6.5.3.2">6.5.3.2</a>), structure and union
4943  specifiers (<a href="#6.7.2.1">6.7.2.1</a>).
4944 <!--page 103 -->
4945
4946 <p><b>Footnotes</b>
4947 <p><small><a name="note95" href="#note95">95)</a> If the member used to read the contents of a union object is not the same as the member last used to
4948  store a value in the object, the appropriate part of the object representation of the value is reinterpreted
4949  as an object representation in the new type as described in <a href="#6.2.6">6.2.6</a> (a process sometimes called ''type
4950  punning''). This might be a trap representation.
4951 </small>
4952 <p><small><a name="note96" href="#note96">96)</a> If &amp;E is a valid pointer expression (where &amp; is the ''address-of '' operator, which generates a pointer to
4953  its operand), the expression (&amp;E)-&gt;MOS is the same as E.MOS.
4954 </small>
4955 <p><small><a name="note97" href="#note97">97)</a> For example, a data race would occur if access to the entire structure or union in one thread conflicts
4956  with access to a member from another thread, where at least one access is a modification. Members
4957  can be safely accessed using a non-atomic object which is assigned to or from the atomic object.
4958 </small>
4959
4960 <p><small><a href="#Contents">Contents</a></small>
4961 <h5><a name="6.5.2.4" href="#6.5.2.4">6.5.2.4 Postfix increment and decrement operators</a></h5>
4962 <p><b>Constraints</b>
4963 <p><!--para 1 -->
4964  The operand of the postfix increment or decrement operator shall have atomic, qualified,
4965  or unqualified real or pointer type, and shall be a modifiable lvalue.
4966 <p><b>Semantics</b>
4967 <p><!--para 2 -->
4968  The result of the postfix ++ operator is the value of the operand. As a side effect, the
4969  value of the operand object is incremented (that is, the value 1 of the appropriate type is
4970  added to it). See the discussions of additive operators and compound assignment for
4971  information on constraints, types, and conversions and the effects of operations on
4972  pointers. The value computation of the result is sequenced before the side effect of
4973  updating the stored value of the operand. With respect to an indeterminately-sequenced
4974  function call, the operation of postfix ++ is a single evaluation. Postfix ++ on an object
4975  with atomic type is a read-modify-write operation with memory_order_seq_cst
4976  memory order semantics.<sup><a href="#note98"><b>98)</b></a></sup>
4977 <p><!--para 3 -->
4978  The postfix -- operator is analogous to the postfix ++ operator, except that the value of
4979  the operand is decremented (that is, the value 1 of the appropriate type is subtracted from
4980  it).
4981 <p><b> Forward references</b>: additive operators (<a href="#6.5.6">6.5.6</a>), compound assignment (<a href="#6.5.16.2">6.5.16.2</a>).
4982
4983 <p><b>Footnotes</b>
4984 <p><small><a name="note98" href="#note98">98)</a> Where a pointer to an atomic object can be formed, this is equivalent to the following code sequence
4985  where T is the type of E:
4986
4987 <pre>
4988           T tmp;
4989           T result = E;
4990           do {
4991                  tmp = result + 1;
4992           } while (!atomic_compare_exchange_strong(&amp;E, &amp;result, tmp));
4993 </pre>
4994   with result being the result of the operation.
4995 </small>
4996
4997 <p><small><a href="#Contents">Contents</a></small>
4998 <h5><a name="6.5.2.5" href="#6.5.2.5">6.5.2.5 Compound literals</a></h5>
4999 <p><b>Constraints</b>
5000 <p><!--para 1 -->
5001  The type name shall specify a complete object type or an array of unknown size, but not a
5002  variable length array type.
5003 <p><!--para 2 -->
5004  All the constraints for initializer lists in <a href="#6.7.9">6.7.9</a> also apply to compound literals.
5005 <p><b>Semantics</b>
5006 <p><!--para 3 -->
5007  A postfix expression that consists of a parenthesized type name followed by a brace-
5008  enclosed list of initializers is a compound literal. It provides an unnamed object whose
5009  value is given by the initializer list.<sup><a href="#note99"><b>99)</b></a></sup>
5010  
5011  
5012 <!--page 104 -->
5013 <p><!--para 4 -->
5014  If the type name specifies an array of unknown size, the size is determined by the
5015  initializer list as specified in <a href="#6.7.9">6.7.9</a>, and the type of the compound literal is that of the
5016  completed array type. Otherwise (when the type name specifies an object type), the type
5017  of the compound literal is that specified by the type name. In either case, the result is an
5018  lvalue.
5019 <p><!--para 5 -->
5020  The value of the compound literal is that of an unnamed object initialized by the
5021  initializer list. If the compound literal occurs outside the body of a function, the object
5022  has static storage duration; otherwise, it has automatic storage duration associated with
5023  the enclosing block.
5024 <p><!--para 6 -->
5025  All the semantic rules for initializer lists in <a href="#6.7.9">6.7.9</a> also apply to compound literals.<sup><a href="#note100"><b>100)</b></a></sup>
5026 <p><!--para 7 -->
5027  String literals, and compound literals with const-qualified types, need not designate
5028  distinct objects.<sup><a href="#note101"><b>101)</b></a></sup>
5029 <p><!--para 8 -->
5030  EXAMPLE 1       The file scope definition
5031 <pre>
5032           int *p = (int []){2, 4};
5033 </pre>
5034  initializes p to point to the first element of an array of two ints, the first having the value two and the
5035  second, four. The expressions in this compound literal are required to be constant. The unnamed object
5036  has static storage duration.
5037  
5038 <p><!--para 9 -->
5039  EXAMPLE 2       In contrast, in
5040 <pre>
5041           void f(void)
5042           {
5043                 int *p;
5044                 /*...*/
5045                 p = (int [2]){*p};
5046                 /*...*/
5047           }
5048 </pre>
5049  p is assigned the address of the first element of an array of two ints, the first having the value previously
5050  pointed to by p and the second, zero. The expressions in this compound literal need not be constant. The
5051  unnamed object has automatic storage duration.
5052  
5053 <p><!--para 10 -->
5054  EXAMPLE 3 Initializers with designations can be combined with compound literals. Structure objects
5055  created using compound literals can be passed to functions without depending on member order:
5056 <pre>
5057           drawline((struct point){.x=1, .y=1},
5058                 (struct point){.x=3, .y=4});
5059 </pre>
5060  Or, if drawline instead expected pointers to struct point:
5061  
5062  
5063  
5064 <!--page 105 -->
5065 <pre>
5066           drawline(&amp;(struct point){.x=1, .y=1},
5067                 &amp;(struct point){.x=3, .y=4});
5068 </pre>
5069  
5070 <p><!--para 11 -->
5071  EXAMPLE 4        A read-only compound literal can be specified through constructions like:
5072 <pre>
5073           (const float []){1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6}
5074 </pre>
5075  
5076 <p><!--para 12 -->
5077  EXAMPLE 5        The following three expressions have different meanings:
5078 <pre>
5079           "/tmp/fileXXXXXX"
5080           (char []){"/tmp/fileXXXXXX"}
5081           (const char []){"/tmp/fileXXXXXX"}
5082 </pre>
5083  The first always has static storage duration and has type array of char, but need not be modifiable; the last
5084  two have automatic storage duration when they occur within the body of a function, and the first of these
5085  two is modifiable.
5086  
5087 <p><!--para 13 -->
5088  EXAMPLE 6 Like string literals, const-qualified compound literals can be placed into read-only memory
5089  and can even be shared. For example,
5090 <pre>
5091           (const char []){"abc"} == "abc"
5092 </pre>
5093  might yield 1 if the literals' storage is shared.
5094  
5095 <p><!--para 14 -->
5096  EXAMPLE 7 Since compound literals are unnamed, a single compound literal cannot specify a circularly
5097  linked object. For example, there is no way to write a self-referential compound literal that could be used
5098  as the function argument in place of the named object endless_zeros below:
5099 <pre>
5100           struct int_list { int car; struct int_list *cdr; };
5101           struct int_list endless_zeros = {0, &amp;endless_zeros};
5102           eval(endless_zeros);
5103 </pre>
5104  
5105 <p><!--para 15 -->
5106  EXAMPLE 8        Each compound literal creates only a single object in a given scope:
5107 <pre>
5108           struct s { int i; };
5109           int f (void)
5110           {
5111                 struct s *p = 0, *q;
5112                 int j = 0;
5113           again:
5114                     q = p, p = &amp;((struct s){ j++ });
5115                     if (j &lt; 2) goto again;
5116                     return p == q &amp;&amp; q-&gt;i == 1;
5117           }
5118 </pre>
5119  The function f() always returns the value 1.
5120 <p><!--para 16 -->
5121  Note that if an iteration statement were used instead of an explicit goto and a labeled statement, the
5122  lifetime of the unnamed object would be the body of the loop only, and on entry next time around p would
5123  have an indeterminate value, which would result in undefined behavior.
5124  
5125 <p><b> Forward references</b>: type names (<a href="#6.7.7">6.7.7</a>), initialization (<a href="#6.7.9">6.7.9</a>).
5126 <!--page 106 -->
5127
5128 <p><b>Footnotes</b>
5129 <p><small><a name="note99" href="#note99">99)</a> Note that this differs from a cast expression. For example, a cast specifies a conversion to scalar types
5130  or void only, and the result of a cast expression is not an lvalue.
5131 </small>
5132 <p><small><a name="note100" href="#note100">100)</a> For example, subobjects without explicit initializers are initialized to zero.
5133 </small>
5134 <p><small><a name="note101" href="#note101">101)</a> This allows implementations to share storage for string literals and constant compound literals with
5135  the same or overlapping representations.
5136 </small>
5137
5138 <p><small><a href="#Contents">Contents</a></small>
5139 <h4><a name="6.5.3" href="#6.5.3">6.5.3 Unary operators</a></h4>
5140 <p><b>Syntax</b>
5141 <p><!--para 1 -->
5142 <pre>
5143           unary-expression:
5144                  postfix-expression
5145                  ++ unary-expression
5146                  -- unary-expression
5147                  unary-operator cast-expression
5148                  sizeof unary-expression
5149                  sizeof ( type-name )
5150                  alignof ( type-name )
5151           unary-operator: one of
5152                  &amp; * + - ~             !
5153 </pre>
5154
5155 <p><small><a href="#Contents">Contents</a></small>
5156 <h5><a name="6.5.3.1" href="#6.5.3.1">6.5.3.1 Prefix increment and decrement operators</a></h5>
5157 <p><b>Constraints</b>
5158 <p><!--para 1 -->
5159  The operand of the prefix increment or decrement operator shall have atomic, qualified,
5160  or unqualified real or pointer type, and shall be a modifiable lvalue.
5161 <p><b>Semantics</b>
5162 <p><!--para 2 -->
5163  The value of the operand of the prefix ++ operator is incremented. The result is the new
5164  value of the operand after incrementation. The expression ++E is equivalent to (E+=1).
5165  See the discussions of additive operators and compound assignment for information on
5166  constraints, types, side effects, and conversions and the effects of operations on pointers.
5167 <p><!--para 3 -->
5168  The prefix -- operator is analogous to the prefix ++ operator, except that the value of the
5169  operand is decremented.
5170 <p><b> Forward references</b>: additive operators (<a href="#6.5.6">6.5.6</a>), compound assignment (<a href="#6.5.16.2">6.5.16.2</a>).
5171
5172 <p><small><a href="#Contents">Contents</a></small>
5173 <h5><a name="6.5.3.2" href="#6.5.3.2">6.5.3.2 Address and indirection operators</a></h5>
5174 <p><b>Constraints</b>
5175 <p><!--para 1 -->
5176  The operand of the unary &amp; operator shall be either a function designator, the result of a
5177  [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is
5178  not declared with the register storage-class specifier.
5179 <p><!--para 2 -->
5180  The operand of the unary * operator shall have pointer type.
5181 <p><b>Semantics</b>
5182 <p><!--para 3 -->
5183  The unary &amp; operator yields the address of its operand. If the operand has type ''type'',
5184  the result has type ''pointer to type''. If the operand is the result of a unary * operator,
5185  neither that operator nor the &amp; operator is evaluated and the result is as if both were
5186  omitted, except that the constraints on the operators still apply and the result is not an
5187 <!--page 107 -->
5188  lvalue. Similarly, if the operand is the result of a [] operator, neither the &amp; operator nor
5189  the unary * that is implied by the [] is evaluated and the result is as if the &amp; operator
5190  were removed and the [] operator were changed to a + operator. Otherwise, the result is
5191  a pointer to the object or function designated by its operand.
5192 <p><!--para 4 -->
5193  The unary * operator denotes indirection. If the operand points to a function, the result is
5194  a function designator; if it points to an object, the result is an lvalue designating the
5195  object. If the operand has type ''pointer to type'', the result has type ''type''. If an
5196  invalid value has been assigned to the pointer, the behavior of the unary * operator is
5197  undefined.<sup><a href="#note102"><b>102)</b></a></sup>
5198 <p><b> Forward references</b>: storage-class specifiers (<a href="#6.7.1">6.7.1</a>), structure and union specifiers
5199  (<a href="#6.7.2.1">6.7.2.1</a>).
5200
5201 <p><b>Footnotes</b>
5202 <p><small><a name="note102" href="#note102">102)</a> Thus, &amp;*E is equivalent to E (even if E is a null pointer), and &amp;(E1[E2]) to ((E1)+(E2)). It is
5203  always true that if E is a function designator or an lvalue that is a valid operand of the unary &amp;
5204  operator, *&amp;E is a function designator or an lvalue equal to E. If *P is an lvalue and T is the name of
5205  an object pointer type, *(T)P is an lvalue that has a type compatible with that to which T points.
5206  Among the invalid values for dereferencing a pointer by the unary * operator are a null pointer, an
5207  address inappropriately aligned for the type of object pointed to, and the address of an object after the
5208  end of its lifetime.
5209 </small>
5210
5211 <p><small><a href="#Contents">Contents</a></small>
5212 <h5><a name="6.5.3.3" href="#6.5.3.3">6.5.3.3 Unary arithmetic operators</a></h5>
5213 <p><b>Constraints</b>
5214 <p><!--para 1 -->
5215  The operand of the unary + or - operator shall have arithmetic type; of the ~ operator,
5216  integer type; of the ! operator, scalar type.
5217 <p><b>Semantics</b>
5218 <p><!--para 2 -->
5219  The result of the unary + operator is the value of its (promoted) operand. The integer
5220  promotions are performed on the operand, and the result has the promoted type.
5221 <p><!--para 3 -->
5222  The result of the unary - operator is the negative of its (promoted) operand. The integer
5223  promotions are performed on the operand, and the result has the promoted type.
5224 <p><!--para 4 -->
5225  The result of the ~ operator is the bitwise complement of its (promoted) operand (that is,
5226  each bit in the result is set if and only if the corresponding bit in the converted operand is
5227  not set). The integer promotions are performed on the operand, and the result has the
5228  promoted type. If the promoted type is an unsigned type, the expression ~E is equivalent
5229  to the maximum value representable in that type minus E.
5230 <p><!--para 5 -->
5231  The result of the logical negation operator ! is 0 if the value of its operand compares
5232  unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.
5233  The expression !E is equivalent to (0==E).
5234  
5235  
5236  
5237 <!--page 108 -->
5238
5239 <p><small><a href="#Contents">Contents</a></small>
5240 <h5><a name="6.5.3.4" href="#6.5.3.4">6.5.3.4 The sizeof and alignof operators</a></h5>
5241 <p><b>Constraints</b>
5242 <p><!--para 1 -->
5243  The sizeof operator shall not be applied to an expression that has function type or an
5244  incomplete type, to the parenthesized name of such a type, or to an expression that
5245  designates a bit-field member. The alignof operator shall not be applied to a function
5246  type or an incomplete type.
5247 <p><b>Semantics</b>
5248 <p><!--para 2 -->
5249  The sizeof operator yields the size (in bytes) of its operand, which may be an
5250  expression or the parenthesized name of a type. The size is determined from the type of
5251  the operand. The result is an integer. If the type of the operand is a variable length array
5252  type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an
5253  integer constant.
5254 <p><!--para 3 -->
5255  The alignof operator yields the alignment requirement of its operand type. The result
5256  is an integer constant. When applied to an array type, the result is the alignment
5257  requirement of the element type.
5258 <p><!--para 4 -->
5259  When sizeof is applied to an operand that has type char, unsigned char, or
5260  signed char, (or a qualified version thereof) the result is 1. When applied to an
5261  operand that has array type, the result is the total number of bytes in the array.<sup><a href="#note103"><b>103)</b></a></sup> When
5262  applied to an operand that has structure or union type, the result is the total number of
5263  bytes in such an object, including internal and trailing padding.
5264 <p><!--para 5 -->
5265  The value of the result of both operators is implementation-defined, and its type (an
5266  unsigned integer type) is size_t, defined in <a href="#7.19">&lt;stddef.h&gt;</a> (and other headers).
5267 <p><!--para 6 -->
5268  EXAMPLE 1 A principal use of the sizeof operator is in communication with routines such as storage
5269  allocators and I/O systems. A storage-allocation function might accept a size (in bytes) of an object to
5270  allocate and return a pointer to void. For example:
5271 <pre>
5272          extern void *alloc(size_t);
5273          double *dp = alloc(sizeof *dp);
5274 </pre>
5275  The implementation of the alloc function should ensure that its return value is aligned suitably for
5276  conversion to a pointer to double.
5277  
5278 <p><!--para 7 -->
5279  EXAMPLE 2      Another use of the sizeof operator is to compute the number of elements in an array:
5280 <pre>
5281          sizeof array / sizeof array[0]
5282 </pre>
5283  
5284 <p><!--para 8 -->
5285  EXAMPLE 3      In this example, the size of a variable length array is computed and returned from a
5286  function:
5287 <pre>
5288          #include <a href="#7.19">&lt;stddef.h&gt;</a>
5289 </pre>
5290  
5291  
5292  
5293 <!--page 109 -->
5294 <pre>
5295           size_t fsize3(int n)
5296           {
5297                 char b[n+3];                  // variable length array
5298                 return sizeof b;              // execution time sizeof
5299           }
5300           int main()
5301           {
5302                 size_t size;
5303                 size = fsize3(10); // fsize3 returns 13
5304                 return 0;
5305           }
5306 </pre>
5307  
5308 <p><b> Forward references</b>: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), declarations (<a href="#6.7">6.7</a>),
5309  structure and union specifiers (<a href="#6.7.2.1">6.7.2.1</a>), type names (<a href="#6.7.7">6.7.7</a>), array declarators (<a href="#6.7.6.2">6.7.6.2</a>).
5310
5311 <p><b>Footnotes</b>
5312 <p><small><a name="note103" href="#note103">103)</a> When applied to a parameter declared to have array or function type, the sizeof operator yields the
5313  size of the adjusted (pointer) type (see <a href="#6.9.1">6.9.1</a>).
5314 </small>
5315
5316 <p><small><a href="#Contents">Contents</a></small>
5317 <h4><a name="6.5.4" href="#6.5.4">6.5.4 Cast operators</a></h4>
5318 <p><b>Syntax</b>
5319 <p><!--para 1 -->
5320 <pre>
5321           cast-expression:
5322                  unary-expression
5323                  ( type-name ) cast-expression
5324 </pre>
5325 <p><b>Constraints</b>
5326 <p><!--para 2 -->
5327  Unless the type name specifies a void type, the type name shall specify atomic, qualified,
5328  or unqualified scalar type, and the operand shall have scalar type.
5329 <p><!--para 3 -->
5330  Conversions that involve pointers, other than where permitted by the constraints of
5331  <a href="#6.5.16.1">6.5.16.1</a>, shall be specified by means of an explicit cast.
5332 <p><!--para 4 -->
5333  A pointer type shall not be converted to any floating type. A floating type shall not be
5334  converted to any pointer type.
5335 <p><b>Semantics</b>
5336 <p><!--para 5 -->
5337  Preceding an expression by a parenthesized type name converts the value of the
5338  expression to the named type. This construction is called a cast.<sup><a href="#note104"><b>104)</b></a></sup> A cast that specifies
5339  no conversion has no effect on the type or value of an expression.
5340 <p><!--para 6 -->
5341  If the value of the expression is represented with greater precision or range than required
5342  by the type named by the cast (<a href="#6.3.1.8">6.3.1.8</a>), then the cast specifies a conversion even if the
5343  type of the expression is the same as the named type and removes any extra range and
5344  precision.
5345 <p><b> Forward references</b>: equality operators (<a href="#6.5.9">6.5.9</a>), function declarators (including
5346  prototypes) (<a href="#6.7.6.3">6.7.6.3</a>), simple assignment (<a href="#6.5.16.1">6.5.16.1</a>), type names (<a href="#6.7.7">6.7.7</a>).
5347  
5348 <!--page 110 -->
5349
5350 <p><b>Footnotes</b>
5351 <p><small><a name="note104" href="#note104">104)</a> A cast does not yield an lvalue. Thus, a cast to a qualified type has the same effect as a cast to the
5352  unqualified version of the type.
5353 </small>
5354
5355 <p><small><a href="#Contents">Contents</a></small>
5356 <h4><a name="6.5.5" href="#6.5.5">6.5.5 Multiplicative operators</a></h4>
5357 <p><b>Syntax</b>
5358 <p><!--para 1 -->
5359 <pre>
5360           multiplicative-expression:
5361                   cast-expression
5362                   multiplicative-expression * cast-expression
5363                   multiplicative-expression / cast-expression
5364                   multiplicative-expression % cast-expression
5365 </pre>
5366 <p><b>Constraints</b>
5367 <p><!--para 2 -->
5368  Each of the operands shall have arithmetic type. The operands of the % operator shall
5369  have integer type.
5370 <p><b>Semantics</b>
5371 <p><!--para 3 -->
5372  The usual arithmetic conversions are performed on the operands.
5373 <p><!--para 4 -->
5374  The result of the binary * operator is the product of the operands.
5375 <p><!--para 5 -->
5376  The result of the / operator is the quotient from the division of the first operand by the
5377  second; the result of the % operator is the remainder. In both operations, if the value of
5378  the second operand is zero, the behavior is undefined.
5379 <p><!--para 6 -->
5380  When integers are divided, the result of the / operator is the algebraic quotient with any
5381  fractional part discarded.<sup><a href="#note105"><b>105)</b></a></sup> If the quotient a/b is representable, the expression
5382  (a/b)*b + a%b shall equal a; otherwise, the behavior of both a/b and a%b is
5383  undefined.
5384
5385 <p><b>Footnotes</b>
5386 <p><small><a name="note105" href="#note105">105)</a> This is often called ''truncation toward zero''.
5387 </small>
5388
5389 <p><small><a href="#Contents">Contents</a></small>
5390 <h4><a name="6.5.6" href="#6.5.6">6.5.6 Additive operators</a></h4>
5391 <p><b>Syntax</b>
5392 <p><!--para 1 -->
5393 <pre>
5394           additive-expression:
5395                  multiplicative-expression
5396                  additive-expression + multiplicative-expression
5397                  additive-expression - multiplicative-expression
5398 </pre>
5399 <p><b>Constraints</b>
5400 <p><!--para 2 -->
5401  For addition, either both operands shall have arithmetic type, or one operand shall be a
5402  pointer to a complete object type and the other shall have integer type. (Incrementing is
5403  equivalent to adding 1.)
5404 <p><!--para 3 -->
5405  For subtraction, one of the following shall hold:
5406  
5407  
5408  
5409  
5410 <!--page 111 -->
5411 <ul>
5412 <li>  both operands have arithmetic type;
5413 <li>  both operands are pointers to qualified or unqualified versions of compatible complete
5414  object types; or
5415 <li>  the left operand is a pointer to a complete object type and the right operand has
5416  integer type.
5417 </ul>
5418  (Decrementing is equivalent to subtracting 1.)
5419 <p><b>Semantics</b>
5420 <p><!--para 4 -->
5421  If both operands have arithmetic type, the usual arithmetic conversions are performed on
5422  them.
5423 <p><!--para 5 -->
5424  The result of the binary + operator is the sum of the operands.
5425 <p><!--para 6 -->
5426  The result of the binary - operator is the difference resulting from the subtraction of the
5427  second operand from the first.
5428 <p><!--para 7 -->
5429  For the purposes of these operators, a pointer to an object that is not an element of an
5430  array behaves the same as a pointer to the first element of an array of length one with the
5431  type of the object as its element type.
5432 <p><!--para 8 -->
5433  When an expression that has integer type is added to or subtracted from a pointer, the
5434  result has the type of the pointer operand. If the pointer operand points to an element of
5435  an array object, and the array is large enough, the result points to an element offset from
5436  the original element such that the difference of the subscripts of the resulting and original
5437  array elements equals the integer expression. In other words, if the expression P points to
5438  the i-th element of an array object, the expressions (P)+N (equivalently, N+(P)) and
5439  (P)-N (where N has the value n) point to, respectively, the i+n-th and i-n-th elements of
5440  the array object, provided they exist. Moreover, if the expression P points to the last
5441  element of an array object, the expression (P)+1 points one past the last element of the
5442  array object, and if the expression Q points one past the last element of an array object,
5443  the expression (Q)-1 points to the last element of the array object. If both the pointer
5444  operand and the result point to elements of the same array object, or one past the last
5445  element of the array object, the evaluation shall not produce an overflow; otherwise, the
5446  behavior is undefined. If the result points one past the last element of the array object, it
5447  shall not be used as the operand of a unary * operator that is evaluated.
5448 <p><!--para 9 -->
5449  When two pointers are subtracted, both shall point to elements of the same array object,
5450  or one past the last element of the array object; the result is the difference of the
5451  subscripts of the two array elements. The size of the result is implementation-defined,
5452  and its type (a signed integer type) is ptrdiff_t defined in the <a href="#7.19">&lt;stddef.h&gt;</a> header.
5453  If the result is not representable in an object of that type, the behavior is undefined. In
5454  other words, if the expressions P and Q point to, respectively, the i-th and j-th elements of
5455  an array object, the expression (P)-(Q) has the value i-j provided the value fits in an
5456 <!--page 112 -->
5457  object of type ptrdiff_t. Moreover, if the expression P points either to an element of
5458  an array object or one past the last element of an array object, and the expression Q points
5459  to the last element of the same array object, the expression ((Q)+1)-(P) has the same
5460  value as ((Q)-(P))+1 and as -((P)-((Q)+1)), and has the value zero if the
5461  expression P points one past the last element of the array object, even though the
5462  expression (Q)+1 does not point to an element of the array object.<sup><a href="#note106"><b>106)</b></a></sup>
5463 <p><!--para 10 -->
5464  EXAMPLE        Pointer arithmetic is well defined with pointers to variable length array types.
5465 <pre>
5466           {
5467                    int n = 4, m = 3;
5468                    int a[n][m];
5469                    int (*p)[m] = a;            //   p == &amp;a[0]
5470                    p += 1;                     //   p == &amp;a[1]
5471                    (*p)[2] = 99;               //   a[1][2] == 99
5472                    n = p - a;                  //   n == 1
5473           }
5474 </pre>
5475 <p><!--para 11 -->
5476  If array a in the above example were declared to be an array of known constant size, and pointer p were
5477  declared to be a pointer to an array of the same known constant size (pointing to a), the results would be
5478  the same.
5479  
5480 <p><b> Forward references</b>: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), common definitions <a href="#7.19">&lt;stddef.h&gt;</a>
5481  (<a href="#7.19">7.19</a>).
5482
5483 <p><b>Footnotes</b>
5484 <p><small><a name="note106" href="#note106">106)</a> Another way to approach pointer arithmetic is first to convert the pointer(s) to character pointer(s): In
5485  this scheme the integer expression added to or subtracted from the converted pointer is first multiplied
5486  by the size of the object originally pointed to, and the resulting pointer is converted back to the
5487  original type. For pointer subtraction, the result of the difference between the character pointers is
5488  similarly divided by the size of the object originally pointed to.
5489  When viewed in this way, an implementation need only provide one extra byte (which may overlap
5490  another object in the program) just after the end of the object in order to satisfy the ''one past the last
5491  element'' requirements.
5492 </small>
5493
5494 <p><small><a href="#Contents">Contents</a></small>
5495 <h4><a name="6.5.7" href="#6.5.7">6.5.7 Bitwise shift operators</a></h4>
5496 <p><b>Syntax</b>
5497 <p><!--para 1 -->
5498 <pre>
5499           shift-expression:
5500                   additive-expression
5501                   shift-expression &lt;&lt; additive-expression
5502                   shift-expression &gt;&gt; additive-expression
5503 </pre>
5504 <p><b>Constraints</b>
5505 <p><!--para 2 -->
5506  Each of the operands shall have integer type.
5507 <p><b>Semantics</b>
5508 <p><!--para 3 -->
5509  The integer promotions are performed on each of the operands. The type of the result is
5510  that of the promoted left operand. If the value of the right operand is negative or is
5511  
5512 <!--page 113 -->
5513  greater than or equal to the width of the promoted left operand, the behavior is undefined.
5514 <p><!--para 4 -->
5515  The result of E1 &lt;&lt; E2 is E1 left-shifted E2 bit positions; vacated bits are filled with
5516  zeros. If E1 has an unsigned type, the value of the result is E1 x 2E2 , reduced modulo
5517  one more than the maximum value representable in the result type. If E1 has a signed
5518  type and nonnegative value, and E1 x 2E2 is representable in the result type, then that is
5519  the resulting value; otherwise, the behavior is undefined.
5520 <p><!--para 5 -->
5521  The result of E1 &gt;&gt; E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type
5522  or if E1 has a signed type and a nonnegative value, the value of the result is the integral
5523  part of the quotient of E1 / 2E2 . If E1 has a signed type and a negative value, the
5524  resulting value is implementation-defined.
5525
5526 <p><small><a href="#Contents">Contents</a></small>
5527 <h4><a name="6.5.8" href="#6.5.8">6.5.8 Relational operators</a></h4>
5528 <p><b>Syntax</b>
5529 <p><!--para 1 -->
5530 <pre>
5531           relational-expression:
5532                   shift-expression
5533                   relational-expression   &lt;    shift-expression
5534                   relational-expression   &gt;    shift-expression
5535                   relational-expression   &lt;=   shift-expression
5536                   relational-expression   &gt;=   shift-expression
5537 </pre>
5538 <p><b>Constraints</b>
5539 <p><!--para 2 -->
5540  One of the following shall hold:
5541 <ul>
5542 <li>  both operands have real type; or                                                            *
5543 <li>  both operands are pointers to qualified or unqualified versions of compatible object
5544  types.
5545 </ul>
5546 <p><b>Semantics</b>
5547 <p><!--para 3 -->
5548  If both of the operands have arithmetic type, the usual arithmetic conversions are
5549  performed.
5550 <p><!--para 4 -->
5551  For the purposes of these operators, a pointer to an object that is not an element of an
5552  array behaves the same as a pointer to the first element of an array of length one with the
5553  type of the object as its element type.
5554 <p><!--para 5 -->
5555  When two pointers are compared, the result depends on the relative locations in the
5556  address space of the objects pointed to. If two pointers to object types both point to the
5557  same object, or both point one past the last element of the same array object, they
5558  compare equal. If the objects pointed to are members of the same aggregate object,
5559  pointers to structure members declared later compare greater than pointers to members
5560  declared earlier in the structure, and pointers to array elements with larger subscript
5561  values compare greater than pointers to elements of the same array with lower subscript
5562 <!--page 114 -->
5563  values. All pointers to members of the same union object compare equal. If the
5564  expression P points to an element of an array object and the expression Q points to the
5565  last element of the same array object, the pointer expression Q+1 compares greater than
5566  P. In all other cases, the behavior is undefined.
5567 <p><!--para 6 -->
5568  Each of the operators &lt; (less than), &gt; (greater than), &lt;= (less than or equal to), and &gt;=
5569  (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is
5570  false.<sup><a href="#note107"><b>107)</b></a></sup> The result has type int.
5571
5572 <p><b>Footnotes</b>
5573 <p><small><a name="note107" href="#note107">107)</a> The expression a&lt;b&lt;c is not interpreted as in ordinary mathematics. As the syntax indicates, it
5574  means (a&lt;b)&lt;c; in other words, ''if a is less than b, compare 1 to c; otherwise, compare 0 to c''.
5575 </small>
5576
5577 <p><small><a href="#Contents">Contents</a></small>
5578 <h4><a name="6.5.9" href="#6.5.9">6.5.9 Equality operators</a></h4>
5579 <p><b>Syntax</b>
5580 <p><!--para 1 -->
5581 <pre>
5582           equality-expression:
5583                  relational-expression
5584                  equality-expression == relational-expression
5585                  equality-expression != relational-expression
5586 </pre>
5587 <p><b>Constraints</b>
5588 <p><!--para 2 -->
5589  One of the following shall hold:
5590 <ul>
5591 <li>  both operands have arithmetic type;
5592 <li>  both operands are pointers to qualified or unqualified versions of compatible types;
5593 <li>  one operand is a pointer to an object type and the other is a pointer to a qualified or
5594  unqualified version of void; or
5595 <li>  one operand is a pointer and the other is a null pointer constant.
5596 </ul>
5597 <p><b>Semantics</b>
5598 <p><!--para 3 -->
5599  The == (equal to) and != (not equal to) operators are analogous to the relational
5600  operators except for their lower precedence.<sup><a href="#note108"><b>108)</b></a></sup> Each of the operators yields 1 if the
5601  specified relation is true and 0 if it is false. The result has type int. For any pair of
5602  operands, exactly one of the relations is true.
5603 <p><!--para 4 -->
5604  If both of the operands have arithmetic type, the usual arithmetic conversions are
5605  performed. Values of complex types are equal if and only if both their real parts are equal
5606  and also their imaginary parts are equal. Any two values of arithmetic types from
5607  different type domains are equal if and only if the results of their conversions to the
5608  (complex) result type determined by the usual arithmetic conversions are equal.
5609  
5610  
5611  
5612 <!--page 115 -->
5613 <p><!--para 5 -->
5614  Otherwise, at least one operand is a pointer. If one operand is a pointer and the other is a
5615  null pointer constant, the null pointer constant is converted to the type of the pointer. If
5616  one operand is a pointer to an object type and the other is a pointer to a qualified or
5617  unqualified version of void, the former is converted to the type of the latter.
5618 <p><!--para 6 -->
5619  Two pointers compare equal if and only if both are null pointers, both are pointers to the
5620  same object (including a pointer to an object and a subobject at its beginning) or function,
5621  both are pointers to one past the last element of the same array object, or one is a pointer
5622  to one past the end of one array object and the other is a pointer to the start of a different
5623  array object that happens to immediately follow the first array object in the address
5624  space.<sup><a href="#note109"><b>109)</b></a></sup>
5625 <p><!--para 7 -->
5626  For the purposes of these operators, a pointer to an object that is not an element of an
5627  array behaves the same as a pointer to the first element of an array of length one with the
5628  type of the object as its element type.
5629
5630 <p><b>Footnotes</b>
5631 <p><small><a name="note108" href="#note108">108)</a> Because of the precedences, a&lt;b == c&lt;d is 1 whenever a&lt;b and c&lt;d have the same truth-value.
5632 </small>
5633 <p><small><a name="note109" href="#note109">109)</a> Two objects may be adjacent in memory because they are adjacent elements of a larger array or
5634  adjacent members of a structure with no padding between them, or because the implementation chose
5635  to place them so, even though they are unrelated. If prior invalid pointer operations (such as accesses
5636  outside array bounds) produced undefined behavior, subsequent comparisons also produce undefined
5637  behavior.
5638 </small>
5639
5640 <p><small><a href="#Contents">Contents</a></small>
5641 <h4><a name="6.5.10" href="#6.5.10">6.5.10 Bitwise AND operator</a></h4>
5642 <p><b>Syntax</b>
5643 <p><!--para 1 -->
5644 <pre>
5645           AND-expression:
5646                 equality-expression
5647                 AND-expression &amp; equality-expression
5648 </pre>
5649 <p><b>Constraints</b>
5650 <p><!--para 2 -->
5651  Each of the operands shall have integer type.
5652 <p><b>Semantics</b>
5653 <p><!--para 3 -->
5654  The usual arithmetic conversions are performed on the operands.
5655 <p><!--para 4 -->
5656  The result of the binary &amp; operator is the bitwise AND of the operands (that is, each bit in
5657  the result is set if and only if each of the corresponding bits in the converted operands is
5658  set).
5659  
5660  
5661  
5662  
5663 <!--page 116 -->
5664
5665 <p><small><a href="#Contents">Contents</a></small>
5666 <h4><a name="6.5.11" href="#6.5.11">6.5.11 Bitwise exclusive OR operator</a></h4>
5667 <p><b>Syntax</b>
5668 <p><!--para 1 -->
5669 <pre>
5670           exclusive-OR-expression:
5671                   AND-expression
5672                   exclusive-OR-expression ^ AND-expression
5673 </pre>
5674 <p><b>Constraints</b>
5675 <p><!--para 2 -->
5676  Each of the operands shall have integer type.
5677 <p><b>Semantics</b>
5678 <p><!--para 3 -->
5679  The usual arithmetic conversions are performed on the operands.
5680 <p><!--para 4 -->
5681  The result of the ^ operator is the bitwise exclusive OR of the operands (that is, each bit
5682  in the result is set if and only if exactly one of the corresponding bits in the converted
5683  operands is set).
5684
5685 <p><small><a href="#Contents">Contents</a></small>
5686 <h4><a name="6.5.12" href="#6.5.12">6.5.12 Bitwise inclusive OR operator</a></h4>
5687 <p><b>Syntax</b>
5688 <p><!--para 1 -->
5689 <pre>
5690           inclusive-OR-expression:
5691                   exclusive-OR-expression
5692                   inclusive-OR-expression | exclusive-OR-expression
5693 </pre>
5694 <p><b>Constraints</b>
5695 <p><!--para 2 -->
5696  Each of the operands shall have integer type.
5697 <p><b>Semantics</b>
5698 <p><!--para 3 -->
5699  The usual arithmetic conversions are performed on the operands.
5700 <p><!--para 4 -->
5701  The result of the | operator is the bitwise inclusive OR of the operands (that is, each bit in
5702  the result is set if and only if at least one of the corresponding bits in the converted
5703  operands is set).
5704 <!--page 117 -->
5705
5706 <p><small><a href="#Contents">Contents</a></small>
5707 <h4><a name="6.5.13" href="#6.5.13">6.5.13 Logical AND operator</a></h4>
5708 <p><b>Syntax</b>
5709 <p><!--para 1 -->
5710 <pre>
5711           logical-AND-expression:
5712                   inclusive-OR-expression
5713                   logical-AND-expression &amp;&amp; inclusive-OR-expression
5714 </pre>
5715 <p><b>Constraints</b>
5716 <p><!--para 2 -->
5717  Each of the operands shall have scalar type.
5718 <p><b>Semantics</b>
5719 <p><!--para 3 -->
5720  The &amp;&amp; operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it
5721  yields 0. The result has type int.
5722 <p><!--para 4 -->
5723  Unlike the bitwise binary &amp; operator, the &amp;&amp; operator guarantees left-to-right evaluation;
5724  if the second operand is evaluated, there is a sequence point between the evaluations of
5725  the first and second operands. If the first operand compares equal to 0, the second
5726  operand is not evaluated.
5727
5728 <p><small><a href="#Contents">Contents</a></small>
5729 <h4><a name="6.5.14" href="#6.5.14">6.5.14 Logical OR operator</a></h4>
5730 <p><b>Syntax</b>
5731 <p><!--para 1 -->
5732 <pre>
5733           logical-OR-expression:
5734                   logical-AND-expression
5735                   logical-OR-expression || logical-AND-expression
5736 </pre>
5737 <p><b>Constraints</b>
5738 <p><!--para 2 -->
5739  Each of the operands shall have scalar type.
5740 <p><b>Semantics</b>
5741 <p><!--para 3 -->
5742  The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it
5743  yields 0. The result has type int.
5744 <p><!--para 4 -->
5745  Unlike the bitwise | operator, the || operator guarantees left-to-right evaluation; if the
5746  second operand is evaluated, there is a sequence point between the evaluations of the first
5747  and second operands. If the first operand compares unequal to 0, the second operand is
5748  not evaluated.
5749 <!--page 118 -->
5750
5751 <p><small><a href="#Contents">Contents</a></small>
5752 <h4><a name="6.5.15" href="#6.5.15">6.5.15 Conditional operator</a></h4>
5753 <p><b>Syntax</b>
5754 <p><!--para 1 -->
5755 <pre>
5756           conditional-expression:
5757                  logical-OR-expression
5758                  logical-OR-expression ? expression : conditional-expression
5759 </pre>
5760 <p><b>Constraints</b>
5761 <p><!--para 2 -->
5762  The first operand shall have scalar type.
5763 <p><!--para 3 -->
5764  One of the following shall hold for the second and third operands:
5765 <ul>
5766 <li>  both operands have arithmetic type;
5767 <li>  both operands have the same structure or union type;
5768 <li>  both operands have void type;
5769 <li>  both operands are pointers to qualified or unqualified versions of compatible types;
5770 <li>  one operand is a pointer and the other is a null pointer constant; or
5771 <li>  one operand is a pointer to an object type and the other is a pointer to a qualified or
5772  unqualified version of void.
5773 </ul>
5774 <p><b>Semantics</b>
5775 <p><!--para 4 -->
5776  The first operand is evaluated; there is a sequence point between its evaluation and the
5777  evaluation of the second or third operand (whichever is evaluated). The second operand
5778  is evaluated only if the first compares unequal to 0; the third operand is evaluated only if
5779  the first compares equal to 0; the result is the value of the second or third operand
5780  (whichever is evaluated), converted to the type described below.<sup><a href="#note110"><b>110)</b></a></sup>                        *
5781 <p><!--para 5 -->
5782  If both the second and third operands have arithmetic type, the result type that would be
5783  determined by the usual arithmetic conversions, were they applied to those two operands,
5784  is the type of the result. If both the operands have structure or union type, the result has
5785  that type. If both operands have void type, the result has void type.
5786 <p><!--para 6 -->
5787  If both the second and third operands are pointers or one is a null pointer constant and the
5788  other is a pointer, the result type is a pointer to a type qualified with all the type qualifiers
5789  of the types referenced by both operands. Furthermore, if both operands are pointers to
5790  compatible types or to differently qualified versions of compatible types, the result type is
5791  a pointer to an appropriately qualified version of the composite type; if one operand is a
5792  null pointer constant, the result has the type of the other operand; otherwise, one operand
5793  is a pointer to void or a qualified version of void, in which case the result type is a
5794  pointer to an appropriately qualified version of void.
5795  
5796 <!--page 119 -->
5797 <p><!--para 7 -->
5798  EXAMPLE The common type that results when the second and third operands are pointers is determined
5799  in two independent stages. The appropriate qualifiers, for example, do not depend on whether the two
5800  pointers have compatible types.
5801 <p><!--para 8 -->
5802  Given the declarations
5803 <pre>
5804            const void *c_vp;
5805            void *vp;
5806            const int *c_ip;
5807            volatile int *v_ip;
5808            int *ip;
5809            const char *c_cp;
5810 </pre>
5811  the third column in the following table is the common type that is the result of a conditional expression in
5812  which the first two columns are the second and third operands (in either order):
5813 <pre>
5814            c_vp    c_ip      const void *
5815            v_ip    0         volatile int *
5816            c_ip    v_ip      const volatile int *
5817            vp      c_cp      const void *
5818            ip      c_ip      const int *
5819            vp      ip        void *
5820 </pre>
5821  
5822
5823 <p><b>Footnotes</b>
5824 <p><small><a name="note110" href="#note110">110)</a> A conditional expression does not yield an lvalue.
5825 </small>
5826
5827 <p><small><a href="#Contents">Contents</a></small>
5828 <h4><a name="6.5.16" href="#6.5.16">6.5.16 Assignment operators</a></h4>
5829 <p><b>Syntax</b>
5830 <p><!--para 1 -->
5831 <pre>
5832           assignment-expression:
5833                  conditional-expression
5834                  unary-expression assignment-operator assignment-expression
5835           assignment-operator: one of
5836                  = *= /= %= +=                       -=     &lt;&lt;=      &gt;&gt;=      &amp;=     ^=     |=
5837 </pre>
5838 <p><b>Constraints</b>
5839 <p><!--para 2 -->
5840  An assignment operator shall have a modifiable lvalue as its left operand.
5841 <p><b>Semantics</b>
5842 <p><!--para 3 -->
5843  An assignment operator stores a value in the object designated by the left operand. An
5844  assignment expression has the value of the left operand after the assignment,<sup><a href="#note111"><b>111)</b></a></sup> but is not
5845  an lvalue. The type of an assignment expression is the type the left operand would have
5846  after lvalue conversion. The side effect of updating the stored value of the left operand is
5847  sequenced after the value computations of the left and right operands. The evaluations of
5848  the operands are unsequenced.
5849  
5850  
5851  
5852  
5853 <!--page 120 -->
5854
5855 <p><b>Footnotes</b>
5856 <p><small><a name="note111" href="#note111">111)</a> The implementation is permitted to read the object to determine the value but is not required to, even
5857  when the object has volatile-qualified type.
5858 </small>
5859
5860 <p><small><a href="#Contents">Contents</a></small>
5861 <h5><a name="6.5.16.1" href="#6.5.16.1">6.5.16.1 Simple assignment</a></h5>
5862 <p><b>Constraints</b>
5863 <p><!--para 1 -->
5864  One of the following shall hold:<sup><a href="#note112"><b>112)</b></a></sup>
5865 <ul>
5866 <li>  the left operand has atomic, qualified, or unqualified arithmetic type, and the right has
5867  arithmetic type;
5868 <li>  the left operand has an atomic, qualified, or unqualified version of a structure or union
5869  type compatible with the type of the right;
5870 <li>  the left operand has atomic, qualified, or unqualified pointer type, and (considering
5871  the type the left operand would have after lvalue conversion) both operands are
5872  pointers to qualified or unqualified versions of compatible types, and the type pointed
5873  to by the left has all the qualifiers of the type pointed to by the right;
5874 <li>  the left operand has atomic, qualified, or unqualified pointer type, and (considering
5875  the type the left operand would have after lvalue conversion) one operand is a pointer
5876  to an object type, and the other is a pointer to a qualified or unqualified version of
5877  void, and the type pointed to by the left has all the qualifiers of the type pointed to
5878  by the right;
5879 <li>  the left operand is an atomic, qualified, or unqualified pointer, and the right is a null
5880  pointer constant; or
5881 <li>  the left operand has type atomic, qualified, or unqualified _Bool, and the right is a
5882  pointer.
5883 </ul>
5884 <p><b>Semantics</b>
5885 <p><!--para 2 -->
5886  In simple assignment (=), the value of the right operand is converted to the type of the
5887  assignment expression and replaces the value stored in the object designated by the left
5888  operand.
5889 <p><!--para 3 -->
5890  If the value being stored in an object is read from another object that overlaps in any way
5891  the storage of the first object, then the overlap shall be exact and the two objects shall
5892  have qualified or unqualified versions of a compatible type; otherwise, the behavior is
5893  undefined.
5894 <p><!--para 4 -->
5895  EXAMPLE 1       In the program fragment
5896  
5897  
5898  
5899  
5900 <!--page 121 -->
5901 <pre>
5902          int f(void);
5903          char c;
5904          /* ... */
5905          if ((c = f()) == -1)
5906                  /* ... */
5907 </pre>
5908  the int value returned by the function may be truncated when stored in the char, and then converted back
5909  to int width prior to the comparison. In an implementation in which ''plain'' char has the same range of
5910  values as unsigned char (and char is narrower than int), the result of the conversion cannot be
5911  negative, so the operands of the comparison can never compare equal. Therefore, for full portability, the
5912  variable c should be declared as int.
5913  
5914 <p><!--para 5 -->
5915  EXAMPLE 2       In the fragment:
5916 <pre>
5917          char c;
5918          int i;
5919          long l;
5920          l = (c = i);
5921 </pre>
5922  the value of i is converted to the type of the assignment expression c = i, that is, char type. The value
5923  of the expression enclosed in parentheses is then converted to the type of the outer assignment expression,
5924  that is, long int type.
5925  
5926 <p><!--para 6 -->
5927  EXAMPLE 3       Consider the fragment:
5928 <pre>
5929          const char **cpp;
5930          char *p;
5931          const char c = 'A';
5932          cpp = &amp;p;                  // constraint violation
5933          *cpp = &amp;c;                 // valid
5934          *p = 0;                    // valid
5935 </pre>
5936  The first assignment is unsafe because it would allow the following valid code to attempt to change the
5937  value of the const object c.
5938  
5939
5940 <p><b>Footnotes</b>
5941 <p><small><a name="note112" href="#note112">112)</a> The asymmetric appearance of these constraints with respect to type qualifiers is due to the conversion
5942  (specified in <a href="#6.3.2.1">6.3.2.1</a>) that changes lvalues to ''the value of the expression'' and thus removes any type
5943  qualifiers that were applied to the type category of the expression (for example, it removes const but
5944  not volatile from the type int volatile * const).
5945 </small>
5946
5947 <p><small><a href="#Contents">Contents</a></small>
5948 <h5><a name="6.5.16.2" href="#6.5.16.2">6.5.16.2 Compound assignment</a></h5>
5949 <p><b>Constraints</b>
5950 <p><!--para 1 -->
5951  For the operators += and -= only, either the left operand shall be an atomic, qualified, or
5952  unqualified pointer to a complete object type, and the right shall have integer type; or the
5953  left operand shall have atomic, qualified, or unqualified arithmetic type, and the right
5954  shall have arithmetic type.
5955 <p><!--para 2 -->
5956  For the other operators, the left operand shall have atomic, qualified, or unqualified
5957  arithmetic type, and (considering the type the left operand would have after lvalue
5958  conversion) each operand shall have arithmetic type consistent with those allowed by the
5959  corresponding binary operator.
5960 <p><b>Semantics</b>
5961 <p><!--para 3 -->
5962  A compound assignment of the form E1 op = E2 is equivalent to the simple assignment
5963  expression E1 = E1 op (E2), except that the lvalue E1 is evaluated only once, and with
5964  respect to an indeterminately-sequenced function call, the operation of a compound
5965 <!--page 122 -->
5966  assignment is a single evaluation. If E1 has an atomic type, compound assignment is a
5967  read-modify-write operation with memory_order_seq_cst memory order
5968  semantics.<sup><a href="#note113"><b>113)</b></a></sup>
5969
5970 <p><b>Footnotes</b>
5971 <p><small><a name="note113" href="#note113">113)</a> Where a pointer to an atomic object can be formed, this is equivalent to the following code sequence
5972  where T is the type of E1:
5973
5974 <pre>
5975           T tmp = E1;
5976           T result;
5977           do {
5978                 result = tmp op (E2);
5979           } while (!atomic_compare_exchange_strong(&amp;E1, &amp;tmp, result));
5980 </pre>
5981   with result being the result of the operation.
5982 </small>
5983
5984 <p><small><a href="#Contents">Contents</a></small>
5985 <h4><a name="6.5.17" href="#6.5.17">6.5.17 Comma operator</a></h4>
5986 <p><b>Syntax</b>
5987 <p><!--para 1 -->
5988 <pre>
5989           expression:
5990                  assignment-expression
5991                  expression , assignment-expression
5992 </pre>
5993 <p><b>Semantics</b>
5994 <p><!--para 2 -->
5995  The left operand of a comma operator is evaluated as a void expression; there is a
5996  sequence point between its evaluation and that of the right operand. Then the right
5997  operand is evaluated; the result has its type and value.<sup><a href="#note114"><b>114)</b></a></sup>                        *
5998 <p><!--para 3 -->
5999  EXAMPLE As indicated by the syntax, the comma operator (as described in this subclause) cannot
6000  appear in contexts where a comma is used to separate items in a list (such as arguments to functions or lists
6001  of initializers). On the other hand, it can be used within a parenthesized expression or within the second
6002  expression of a conditional operator in such contexts. In the function call
6003 <pre>
6004           f(a, (t=3, t+2), c)
6005 </pre>
6006  the function has three arguments, the second of which has the value 5.
6007  
6008 <p><b> Forward references</b>: initialization (<a href="#6.7.9">6.7.9</a>).
6009  
6010  
6011  
6012  
6013 <!--page 123 -->
6014
6015 <p><b>Footnotes</b>
6016 <p><small><a name="note114" href="#note114">114)</a> A comma operator does not yield an lvalue.
6017 </small>
6018
6019 <p><small><a href="#Contents">Contents</a></small>
6020 <h3><a name="6.6" href="#6.6">6.6 Constant expressions</a></h3>
6021 <p><b>Syntax</b>
6022 <p><!--para 1 -->
6023 <pre>
6024           constant-expression:
6025                  conditional-expression
6026 </pre>
6027 <p><b>Description</b>
6028 <p><!--para 2 -->
6029  A constant expression can be evaluated during translation rather than runtime, and
6030  accordingly may be used in any place that a constant may be.
6031 <p><b>Constraints</b>
6032 <p><!--para 3 -->
6033  Constant expressions shall not contain assignment, increment, decrement, function-call,
6034  or comma operators, except when they are contained within a subexpression that is not
6035  evaluated.<sup><a href="#note115"><b>115)</b></a></sup>
6036 <p><!--para 4 -->
6037  Each constant expression shall evaluate to a constant that is in the range of representable
6038  values for its type.
6039 <p><b>Semantics</b>
6040 <p><!--para 5 -->
6041  An expression that evaluates to a constant is required in several contexts. If a floating
6042  expression is evaluated in the translation environment, the arithmetic precision and range
6043  shall be at least as great as if the expression were being evaluated in the execution
6044  environment.<sup><a href="#note116"><b>116)</b></a></sup>
6045 <p><!--para 6 -->
6046  An integer constant expression<sup><a href="#note117"><b>117)</b></a></sup> shall have integer type and shall only have operands
6047  that are integer constants, enumeration constants, character constants, sizeof
6048  expressions whose results are integer constants, and floating constants that are the
6049  immediate operands of casts. Cast operators in an integer constant expression shall only
6050  convert arithmetic types to integer types, except as part of an operand to the sizeof
6051  operator.
6052 <p><!--para 7 -->
6053  More latitude is permitted for constant expressions in initializers. Such a constant
6054  expression shall be, or evaluate to, one of the following:
6055 <ul>
6056 <li>  an arithmetic constant expression,
6057  
6058  
6059  
6060 <!--page 124 -->
6061 <li>  a null pointer constant,
6062 <li>  an address constant, or
6063 <li>  an address constant for a complete object type plus or minus an integer constant
6064  expression.
6065 </ul>
6066 <p><!--para 8 -->
6067  An arithmetic constant expression shall have arithmetic type and shall only have
6068  operands that are integer constants, floating constants, enumeration constants, character
6069  constants, and sizeof expressions. Cast operators in an arithmetic constant expression
6070  shall only convert arithmetic types to arithmetic types, except as part of an operand to a
6071  sizeof operator whose result is an integer constant.
6072 <p><!--para 9 -->
6073  An address constant is a null pointer, a pointer to an lvalue designating an object of static
6074  storage duration, or a pointer to a function designator; it shall be created explicitly using
6075  the unary &amp; operator or an integer constant cast to pointer type, or implicitly by the use of
6076  an expression of array or function type. The array-subscript [] and member-access .
6077  and -&gt; operators, the address &amp; and indirection * unary operators, and pointer casts may
6078  be used in the creation of an address constant, but the value of an object shall not be
6079  accessed by use of these operators.
6080 <p><!--para 10 -->
6081  An implementation may accept other forms of constant expressions.
6082 <p><!--para 11 -->
6083  The semantic rules for the evaluation of a constant expression are the same as for
6084  nonconstant expressions.<sup><a href="#note118"><b>118)</b></a></sup>
6085 <p><b> Forward references</b>: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), initialization (<a href="#6.7.9">6.7.9</a>).
6086  
6087  
6088  
6089  
6090 <!--page 125 -->
6091
6092 <p><b>Footnotes</b>
6093 <p><small><a name="note115" href="#note115">115)</a> The operand of a sizeof operator is usually not evaluated (<a href="#6.5.3.4">6.5.3.4</a>).
6094 </small>
6095 <p><small><a name="note116" href="#note116">116)</a> The use of evaluation formats as characterized by FLT_EVAL_METHOD also applies to evaluation in
6096  the translation environment.
6097 </small>
6098 <p><small><a name="note117" href="#note117">117)</a> An integer constant expression is required in a number of contexts such as the size of a bit-field
6099  member of a structure, the value of an enumeration constant, and the size of a non-variable length
6100  array. Further constraints that apply to the integer constant expressions used in conditional-inclusion
6101  preprocessing directives are discussed in <a href="#6.10.1">6.10.1</a>.
6102 </small>
6103 <p><small><a name="note118" href="#note118">118)</a> Thus, in the following initialization,
6104
6105 <pre>
6106            static int i = 2 || 1 / 0;
6107 </pre>
6108   the expression is a valid integer constant expression with value one.
6109 </small>
6110
6111 <p><small><a href="#Contents">Contents</a></small>
6112 <h3><a name="6.7" href="#6.7">6.7 Declarations</a></h3>
6113 <p><b>Syntax</b>
6114 <p><!--para 1 -->
6115 <pre>
6116           declaration:
6117                  declaration-specifiers init-declarator-list<sub>opt</sub> ;
6118                  static_assert-declaration
6119           declaration-specifiers:
6120                  storage-class-specifier declaration-specifiers<sub>opt</sub>
6121                  type-specifier declaration-specifiers<sub>opt</sub>
6122                  type-qualifier declaration-specifiers<sub>opt</sub>
6123                  function-specifier declaration-specifiers<sub>opt</sub>
6124                  alignment-specifier declaration-specifiers<sub>opt</sub>
6125           init-declarator-list:
6126                   init-declarator
6127                   init-declarator-list , init-declarator
6128           init-declarator:
6129                   declarator
6130                   declarator = initializer
6131 </pre>
6132 <p><b>Constraints</b>
6133 <p><!--para 2 -->
6134  A declaration other than a static_assert declaration shall declare at least a declarator
6135  (other than the parameters of a function or the members of a structure or union), a tag, or
6136  the members of an enumeration.
6137 <p><!--para 3 -->
6138  If an identifier has no linkage, there shall be no more than one declaration of the identifier
6139  (in a declarator or type specifier) with the same scope and in the same name space, except
6140  that a typedef name can be redefined to denote the same type as it currently does and tags
6141  may be redeclared as specified in <a href="#6.7.2.3">6.7.2.3</a>.
6142 <p><!--para 4 -->
6143  All declarations in the same scope that refer to the same object or function shall specify
6144  compatible types.
6145 <p><b>Semantics</b>
6146 <p><!--para 5 -->
6147  A declaration specifies the interpretation and attributes of a set of identifiers. A definition
6148  of an identifier is a declaration for that identifier that:
6149 <ul>
6150 <li>  for an object, causes storage to be reserved for that object;
6151 <li>  for a function, includes the function body;<sup><a href="#note119"><b>119)</b></a></sup>
6152  
6153  
6154  
6155 <!--page 126 -->
6156 <li>  for an enumeration constant or typedef name, is the (only) declaration of the
6157  identifier.
6158 </ul>
6159 <p><!--para 6 -->
6160  The declaration specifiers consist of a sequence of specifiers that indicate the linkage,
6161  storage duration, and part of the type of the entities that the declarators denote. The init-
6162  declarator-list is a comma-separated sequence of declarators, each of which may have
6163  additional type information, or an initializer, or both. The declarators contain the
6164  identifiers (if any) being declared.
6165 <p><!--para 7 -->
6166  If an identifier for an object is declared with no linkage, the type for the object shall be
6167  complete by the end of its declarator, or by the end of its init-declarator if it has an
6168  initializer; in the case of function parameters (including in prototypes), it is the adjusted
6169  type (see <a href="#6.7.6.3">6.7.6.3</a>) that is required to be complete.
6170 <p><b> Forward references</b>: declarators (<a href="#6.7.6">6.7.6</a>), enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), initialization
6171  (<a href="#6.7.9">6.7.9</a>), type names (<a href="#6.7.7">6.7.7</a>), type qualifiers (<a href="#6.7.3">6.7.3</a>).
6172
6173 <p><b>Footnotes</b>
6174 <p><small><a name="note119" href="#note119">119)</a> Function definitions have a different syntax, described in <a href="#6.9.1">6.9.1</a>.
6175 </small>
6176
6177 <p><small><a href="#Contents">Contents</a></small>
6178 <h4><a name="6.7.1" href="#6.7.1">6.7.1 Storage-class specifiers</a></h4>
6179 <p><b>Syntax</b>
6180 <p><!--para 1 -->
6181 <pre>
6182           storage-class-specifier:
6183                  typedef
6184                  extern
6185                  static
6186                  _Thread_local
6187                  auto
6188                  register
6189 </pre>
6190 <p><b>Constraints</b>
6191 <p><!--para 2 -->
6192  At most, one storage-class specifier may be given in the declaration specifiers in a
6193  declaration, except that _Thread_local may appear with static or extern.<sup><a href="#note120"><b>120)</b></a></sup>
6194 <p><!--para 3 -->
6195  In the declaration of an object with block scope, if the declaration specifiers include
6196  _Thread_local, they shall also include either static or extern. If
6197  _Thread_local appears in any declaration of an object, it shall be present in every
6198  declaration of that object.
6199 <p><b>Semantics</b>
6200 <p><!--para 4 -->
6201  The typedef specifier is called a ''storage-class specifier'' for syntactic convenience
6202  only; it is discussed in <a href="#6.7.8">6.7.8</a>. The meanings of the various linkages and storage durations
6203  were discussed in <a href="#6.2.2">6.2.2</a> and <a href="#6.2.4">6.2.4</a>.
6204  
6205  
6206  
6207 <!--page 127 -->
6208 <p><!--para 5 -->
6209  A declaration of an identifier for an object with storage-class specifier register
6210  suggests that access to the object be as fast as possible. The extent to which such
6211  suggestions are effective is implementation-defined.<sup><a href="#note121"><b>121)</b></a></sup>
6212 <p><!--para 6 -->
6213  The declaration of an identifier for a function that has block scope shall have no explicit
6214  storage-class specifier other than extern.
6215 <p><!--para 7 -->
6216  If an aggregate or union object is declared with a storage-class specifier other than
6217  typedef, the properties resulting from the storage-class specifier, except with respect to
6218  linkage, also apply to the members of the object, and so on recursively for any aggregate
6219  or union member objects.
6220 <p><b> Forward references</b>: type definitions (<a href="#6.7.8">6.7.8</a>).
6221
6222 <p><b>Footnotes</b>
6223 <p><small><a name="note120" href="#note120">120)</a> See ''future language directions'' (<a href="#6.11.5">6.11.5</a>).
6224 </small>
6225 <p><small><a name="note121" href="#note121">121)</a> The implementation may treat any register declaration simply as an auto declaration. However,
6226  whether or not addressable storage is actually used, the address of any part of an object declared with
6227  storage-class specifier register cannot be computed, either explicitly (by use of the unary &amp;
6228  operator as discussed in <a href="#6.5.3.2">6.5.3.2</a>) or implicitly (by converting an array name to a pointer as discussed in
6229  <a href="#6.3.2.1">6.3.2.1</a>). Thus, the only operator that can be applied to an array declared with storage-class specifier
6230  register is sizeof.
6231 </small>
6232
6233 <p><small><a href="#Contents">Contents</a></small>
6234 <h4><a name="6.7.2" href="#6.7.2">6.7.2 Type specifiers</a></h4>
6235 <p><b>Syntax</b>
6236 <p><!--para 1 -->
6237 <pre>
6238           type-specifier:
6239                  void
6240                  char
6241                  short
6242                  int
6243                  long
6244                  float
6245                  double
6246                  signed
6247                  unsigned
6248                  _Bool
6249                  _Complex
6250                  atomic-type-specifier
6251                  struct-or-union-specifier
6252                  enum-specifier
6253                  typedef-name
6254 </pre>
6255 <p><b>Constraints</b>
6256 <p><!--para 2 -->
6257  At least one type specifier shall be given in the declaration specifiers in each declaration,
6258  and in the specifier-qualifier list in each struct declaration and type name. Each list of
6259  
6260  
6261 <!--page 128 -->
6262  type specifiers shall be one of the following multisets (delimited by commas, when there
6263  is more than one multiset per item); the type specifiers may occur in any order, possibly
6264  intermixed with the other declaration specifiers.
6265 <ul>
6266 <li>  void
6267 <li>  char
6268 <li>  signed char
6269 <li>  unsigned char
6270 <li>  short, signed short, short int, or signed short int
6271 <li>  unsigned short, or unsigned short int
6272 <li>  int, signed, or signed int
6273 <li>  unsigned, or unsigned int
6274 <li>  long, signed long, long int, or signed long int
6275 <li>  unsigned long, or unsigned long int
6276 <li>  long long, signed long long, long long int, or
6277  signed long long int
6278 <li>  unsigned long long, or unsigned long long int
6279 <li>  float
6280 <li>  double
6281 <li>  long double
6282 <li>  _Bool
6283 <li>  float _Complex
6284 <li>  double _Complex
6285 <li>  long double _Complex
6286 <li>  atomic type specifier
6287 <li>  struct or union specifier
6288 <li>  enum specifier
6289 <li>  typedef name
6290 </ul>
6291 <p><!--para 3 -->
6292  The type specifier _Complex shall not be used if the implementation does not support
6293  complex types (see <a href="#6.10.8.3">6.10.8.3</a>).
6294 <!--page 129 -->
6295 <p><b>Semantics</b>
6296 <p><!--para 4 -->
6297  Specifiers for structures, unions, enumerations, and atomic types are discussed in <a href="#6.7.2.1">6.7.2.1</a>
6298  through <a href="#6.7.2.4">6.7.2.4</a>. Declarations of typedef names are discussed in <a href="#6.7.8">6.7.8</a>. The
6299  characteristics of the other types are discussed in <a href="#6.2.5">6.2.5</a>.
6300 <p><!--para 5 -->
6301  Each of the comma-separated multisets designates the same type, except that for bit-
6302  fields, it is implementation-defined whether the specifier int designates the same type as
6303  signed int or the same type as unsigned int.
6304 <p><b> Forward references</b>: atomic type specifiers (<a href="#6.7.2.4">6.7.2.4</a>), enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>),
6305  structure and union specifiers (<a href="#6.7.2.1">6.7.2.1</a>), tags (<a href="#6.7.2.3">6.7.2.3</a>), type definitions (<a href="#6.7.8">6.7.8</a>).
6306
6307 <p><small><a href="#Contents">Contents</a></small>
6308 <h5><a name="6.7.2.1" href="#6.7.2.1">6.7.2.1 Structure and union specifiers</a></h5>
6309 <p><b>Syntax</b>
6310 <p><!--para 1 -->
6311 <pre>
6312           struct-or-union-specifier:
6313                   struct-or-union identifier<sub>opt</sub> { struct-declaration-list }
6314                   struct-or-union identifier
6315           struct-or-union:
6316                   struct
6317                   union
6318           struct-declaration-list:
6319                   struct-declaration
6320                   struct-declaration-list struct-declaration
6321           struct-declaration:
6322                   specifier-qualifier-list struct-declarator-list<sub>opt</sub> ;
6323                   static_assert-declaration
6324           specifier-qualifier-list:
6325                  type-specifier specifier-qualifier-list<sub>opt</sub>
6326                  type-qualifier specifier-qualifier-list<sub>opt</sub>
6327           struct-declarator-list:
6328                   struct-declarator
6329                   struct-declarator-list , struct-declarator
6330           struct-declarator:
6331                   declarator
6332                   declarator<sub>opt</sub> : constant-expression
6333 </pre>
6334 <p><b>Constraints</b>
6335 <p><!--para 2 -->
6336  A struct-declaration that does not declare an anonymous structure or anonymous union
6337  shall contain a struct-declarator-list.
6338 <!--page 130 -->
6339 <p><!--para 3 -->
6340  A structure or union shall not contain a member with incomplete or function type (hence,
6341  a structure shall not contain an instance of itself, but may contain a pointer to an instance
6342  of itself), except that the last member of a structure with more than one named member
6343  may have incomplete array type; such a structure (and any union containing, possibly
6344  recursively, a member that is such a structure) shall not be a member of a structure or an
6345  element of an array.
6346 <p><!--para 4 -->
6347  The expression that specifies the width of a bit-field shall be an integer constant
6348  expression with a nonnegative value that does not exceed the width of an object of the
6349  type that would be specified were the colon and expression omitted.<sup><a href="#note122"><b>122)</b></a></sup> If the value is
6350  zero, the declaration shall have no declarator.
6351 <p><!--para 5 -->
6352  A bit-field shall have a type that is a qualified or unqualified version of _Bool, signed
6353  int, unsigned int, or some other implementation-defined type. It is
6354  implementation-defined whether atomic types are permitted.
6355 <p><b>Semantics</b>
6356 <p><!--para 6 -->
6357  As discussed in <a href="#6.2.5">6.2.5</a>, a structure is a type consisting of a sequence of members, whose
6358  storage is allocated in an ordered sequence, and a union is a type consisting of a sequence
6359  of members whose storage overlap.
6360 <p><!--para 7 -->
6361  Structure and union specifiers have the same form. The keywords struct and union
6362  indicate that the type being specified is, respectively, a structure type or a union type.
6363 <p><!--para 8 -->
6364  The presence of a struct-declaration-list in a struct-or-union-specifier declares a new type,
6365  within a translation unit. The struct-declaration-list is a sequence of declarations for the
6366  members of the structure or union. If the struct-declaration-list contains no named
6367  members, no anonymous structures, and no anonymous unions, the behavior is undefined.
6368  The type is incomplete until immediately after the } that terminates the list, and complete
6369  thereafter.
6370 <p><!--para 9 -->
6371  A member of a structure or union may have any complete object type other than a
6372  variably modified type.<sup><a href="#note123"><b>123)</b></a></sup> In addition, a member may be declared to consist of a
6373  specified number of bits (including a sign bit, if any). Such a member is called a
6374  bit-field;<sup><a href="#note124"><b>124)</b></a></sup> its width is preceded by a colon.
6375 <p><!--para 10 -->
6376  A bit-field is interpreted as having a signed or unsigned integer type consisting of the
6377  specified number of bits.<sup><a href="#note125"><b>125)</b></a></sup> If the value 0 or 1 is stored into a nonzero-width bit-field of
6378  
6379 <!--page 131 -->
6380  type _Bool, the value of the bit-field shall compare equal to the value stored; a _Bool
6381  bit-field has the semantics of a _Bool.
6382 <p><!--para 11 -->
6383  An implementation may allocate any addressable storage unit large enough to hold a bit-
6384  field. If enough space remains, a bit-field that immediately follows another bit-field in a
6385  structure shall be packed into adjacent bits of the same unit. If insufficient space remains,
6386  whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is
6387  implementation-defined. The order of allocation of bit-fields within a unit (high-order to
6388  low-order or low-order to high-order) is implementation-defined. The alignment of the
6389  addressable storage unit is unspecified.
6390 <p><!--para 12 -->
6391  A bit-field declaration with no declarator, but only a colon and a width, indicates an
6392  unnamed bit-field.<sup><a href="#note126"><b>126)</b></a></sup> As a special case, a bit-field structure member with a width of 0
6393  indicates that no further bit-field is to be packed into the unit in which the previous bit-
6394  field, if any, was placed.
6395 <p><!--para 13 -->
6396  An unnamed member of structure type with no tag is called an anonymous structure; an
6397  unnamed member of union type with no tag is called an anonymous union. The members
6398  of an anonymous structure or union are considered to be members of the containing
6399  structure or union. This applies recursively if the containing structure or union is also
6400  anonymous.
6401 <p><!--para 14 -->
6402  Each non-bit-field member of a structure or union object is aligned in an implementation-
6403  defined manner appropriate to its type.
6404 <p><!--para 15 -->
6405  Within a structure object, the non-bit-field members and the units in which bit-fields
6406  reside have addresses that increase in the order in which they are declared. A pointer to a
6407  structure object, suitably converted, points to its initial member (or if that member is a
6408  bit-field, then to the unit in which it resides), and vice versa. There may be unnamed
6409  padding within a structure object, but not at its beginning.
6410 <p><!--para 16 -->
6411  The size of a union is sufficient to contain the largest of its members. The value of at
6412  most one of the members can be stored in a union object at any time. A pointer to a
6413  union object, suitably converted, points to each of its members (or if a member is a bit-
6414  field, then to the unit in which it resides), and vice versa.
6415 <p><!--para 17 -->
6416  There may be unnamed padding at the end of a structure or union.
6417 <p><!--para 18 -->
6418  As a special case, the last element of a structure with more than one named member may
6419  have an incomplete array type; this is called a flexible array member. In most situations,
6420  
6421  
6422 <!--page 132 -->
6423  the flexible array member is ignored. In particular, the size of the structure is as if the
6424  flexible array member were omitted except that it may have more trailing padding than
6425  the omission would imply. However, when a . (or -&gt;) operator has a left operand that is
6426  (a pointer to) a structure with a flexible array member and the right operand names that
6427  member, it behaves as if that member were replaced with the longest array (with the same
6428  element type) that would not make the structure larger than the object being accessed; the
6429  offset of the array shall remain that of the flexible array member, even if this would differ
6430  from that of the replacement array. If this array would have no elements, it behaves as if
6431  it had one element but the behavior is undefined if any attempt is made to access that
6432  element or to generate a pointer one past it.
6433 <p><!--para 19 -->
6434  EXAMPLE 1       The following illustrates anonymous structures and unions:
6435 <pre>
6436           struct v {
6437                 union {      // anonymous union
6438                        struct { int i, j; };    // anonymous structure
6439                        struct { long k, l; } w;
6440                 };
6441                 int m;
6442           } v1;
6443           v1.i = 2;   // valid
6444           v1.k = 3;   // invalid: inner structure is not anonymous
6445           v1.w.k = 5; // valid
6446 </pre>
6447  
6448 <p><!--para 20 -->
6449  EXAMPLE 2       After the declaration:
6450 <pre>
6451           struct s { int n; double d[]; };
6452 </pre>
6453  the structure struct s has a flexible array member d. A typical way to use this is:
6454 <pre>
6455           int m = /* some value */;
6456           struct s *p = malloc(sizeof (struct s) + sizeof (double [m]));
6457 </pre>
6458  and assuming that the call to malloc succeeds, the object pointed to by p behaves, for most purposes, as if
6459  p had been declared as:
6460 <pre>
6461           struct { int n; double d[m]; } *p;
6462 </pre>
6463  (there are circumstances in which this equivalence is broken; in particular, the offsets of member d might
6464  not be the same).
6465 <p><!--para 21 -->
6466  Following the above declaration:
6467 <pre>
6468           struct s t1 = { 0 };                         //   valid
6469           struct s t2 = { 1, { <a href="#4.2">4.2</a> }};                 //   invalid
6470           t1.n = 4;                                    //   valid
6471           t1.d[0] = <a href="#4.2">4.2</a>;                               //   might be undefined behavior
6472 </pre>
6473  The initialization of t2 is invalid (and violates a constraint) because struct s is treated as if it did not
6474  contain member d. The assignment to t1.d[0] is probably undefined behavior, but it is possible that
6475 <pre>
6476           sizeof (struct s) &gt;= offsetof(struct s, d) + sizeof (double)
6477 </pre>
6478  in which case the assignment would be legitimate. Nevertheless, it cannot appear in strictly conforming
6479  code.
6480 <!--page 133 -->
6481 <p><!--para 22 -->
6482  After the further declaration:
6483 <pre>
6484           struct ss { int n; };
6485 </pre>
6486  the expressions:
6487 <pre>
6488           sizeof (struct s) &gt;= sizeof (struct ss)
6489           sizeof (struct s) &gt;= offsetof(struct s, d)
6490 </pre>
6491  are always equal to 1.
6492 <p><!--para 23 -->
6493  If sizeof (double) is 8, then after the following code is executed:
6494 <pre>
6495           struct s *s1;
6496           struct s *s2;
6497           s1 = malloc(sizeof (struct s) + 64);
6498           s2 = malloc(sizeof (struct s) + 46);
6499 </pre>
6500  and assuming that the calls to malloc succeed, the objects pointed to by s1 and s2 behave, for most
6501  purposes, as if the identifiers had been declared as:
6502 <pre>
6503           struct { int n; double d[8]; } *s1;
6504           struct { int n; double d[5]; } *s2;
6505 </pre>
6506 <p><!--para 24 -->
6507  Following the further successful assignments:
6508 <pre>
6509           s1 = malloc(sizeof (struct s) + 10);
6510           s2 = malloc(sizeof (struct s) + 6);
6511 </pre>
6512  they then behave as if the declarations were:
6513 <pre>
6514           struct { int n; double d[1]; } *s1, *s2;
6515 </pre>
6516  and:
6517 <pre>
6518           double *dp;
6519           dp = &amp;(s1-&gt;d[0]);          //   valid
6520           *dp = 42;                  //   valid
6521           dp = &amp;(s2-&gt;d[0]);          //   valid
6522           *dp = 42;                  //   undefined behavior
6523 </pre>
6524 <p><!--para 25 -->
6525  The assignment:
6526 <pre>
6527           *s1 = *s2;
6528 </pre>
6529  only copies the member n; if any of the array elements are within the first sizeof (struct s) bytes
6530  of the structure, they might be copied or simply overwritten with indeterminate values.
6531  
6532 <p><b> Forward references</b>: declarators (<a href="#6.7.6">6.7.6</a>), tags (<a href="#6.7.2.3">6.7.2.3</a>).
6533 <!--page 134 -->
6534
6535 <p><b>Footnotes</b>
6536 <p><small><a name="note122" href="#note122">122)</a> While the number of bits in a _Bool object is at least CHAR_BIT, the width (number of sign and
6537  value bits) of a _Bool may be just 1 bit.
6538 </small>
6539 <p><small><a name="note123" href="#note123">123)</a> A structure or union cannot contain a member with a variably modified type because member names
6540  are not ordinary identifiers as defined in <a href="#6.2.3">6.2.3</a>.
6541 </small>
6542 <p><small><a name="note124" href="#note124">124)</a> The unary &amp; (address-of) operator cannot be applied to a bit-field object; thus, there are no pointers to
6543  or arrays of bit-field objects.
6544 </small>
6545 <p><small><a name="note125" href="#note125">125)</a> As specified in <a href="#6.7.2">6.7.2</a> above, if the actual type specifier used is int or a typedef-name defined as int,
6546  then it is implementation-defined whether the bit-field is signed or unsigned.
6547 </small>
6548 <p><small><a name="note126" href="#note126">126)</a> An unnamed bit-field structure member is useful for padding to conform to externally imposed
6549  layouts.
6550 </small>
6551
6552 <p><small><a href="#Contents">Contents</a></small>
6553 <h5><a name="6.7.2.2" href="#6.7.2.2">6.7.2.2 Enumeration specifiers</a></h5>
6554 <p><b>Syntax</b>
6555 <p><!--para 1 -->
6556 <pre>
6557           enum-specifier:
6558                 enum identifier<sub>opt</sub> { enumerator-list }
6559                 enum identifier<sub>opt</sub> { enumerator-list , }
6560                 enum identifier
6561           enumerator-list:
6562                 enumerator
6563                 enumerator-list , enumerator
6564           enumerator:
6565                 enumeration-constant
6566                 enumeration-constant = constant-expression
6567 </pre>
6568 <p><b>Constraints</b>
6569 <p><!--para 2 -->
6570  The expression that defines the value of an enumeration constant shall be an integer
6571  constant expression that has a value representable as an int.
6572 <p><b>Semantics</b>
6573 <p><!--para 3 -->
6574  The identifiers in an enumerator list are declared as constants that have type int and
6575  may appear wherever such are permitted.<sup><a href="#note127"><b>127)</b></a></sup> An enumerator with = defines its
6576  enumeration constant as the value of the constant expression. If the first enumerator has
6577  no =, the value of its enumeration constant is 0. Each subsequent enumerator with no =
6578  defines its enumeration constant as the value of the constant expression obtained by
6579  adding 1 to the value of the previous enumeration constant. (The use of enumerators with
6580  = may produce enumeration constants with values that duplicate other values in the same
6581  enumeration.) The enumerators of an enumeration are also known as its members.
6582 <p><!--para 4 -->
6583  Each enumerated type shall be compatible with char, a signed integer type, or an
6584  unsigned integer type. The choice of type is implementation-defined,<sup><a href="#note128"><b>128)</b></a></sup> but shall be
6585  capable of representing the values of all the members of the enumeration. The
6586  enumerated type is incomplete until immediately after the } that terminates the list of
6587  enumerator declarations, and complete thereafter.
6588  
6589  
6590  
6591  
6592 <!--page 135 -->
6593 <p><!--para 5 -->
6594  EXAMPLE       The following fragment:
6595 <pre>
6596           enum hue { chartreuse, burgundy, claret=20, winedark };
6597           enum hue col, *cp;
6598           col = claret;
6599           cp = &amp;col;
6600           if (*cp != burgundy)
6601                 /* ... */
6602 </pre>
6603  makes hue the tag of an enumeration, and then declares col as an object that has that type and cp as a
6604  pointer to an object that has that type. The enumerated values are in the set { 0, 1, 20, 21 }.
6605  
6606 <p><b> Forward references</b>: tags (<a href="#6.7.2.3">6.7.2.3</a>).
6607
6608 <p><b>Footnotes</b>
6609 <p><small><a name="note127" href="#note127">127)</a> Thus, the identifiers of enumeration constants declared in the same scope shall all be distinct from
6610  each other and from other identifiers declared in ordinary declarators.
6611 </small>
6612 <p><small><a name="note128" href="#note128">128)</a> An implementation may delay the choice of which integer type until all enumeration constants have
6613  been seen.
6614 </small>
6615
6616 <p><small><a href="#Contents">Contents</a></small>
6617 <h5><a name="6.7.2.3" href="#6.7.2.3">6.7.2.3 Tags</a></h5>
6618 <p><b>Constraints</b>
6619 <p><!--para 1 -->
6620  A specific type shall have its content defined at most once.
6621 <p><!--para 2 -->
6622  Where two declarations that use the same tag declare the same type, they shall both use
6623  the same choice of struct, union, or enum.
6624 <p><!--para 3 -->
6625  A type specifier of the form
6626 <pre>
6627          enum identifier
6628 </pre>
6629  without an enumerator list shall only appear after the type it specifies is complete.
6630 <p><b>Semantics</b>
6631 <p><!--para 4 -->
6632  All declarations of structure, union, or enumerated types that have the same scope and
6633  use the same tag declare the same type. Irrespective of whether there is a tag or what
6634  other declarations of the type are in the same translation unit, the type is incomplete<sup><a href="#note129"><b>129)</b></a></sup>
6635  until immediately after the closing brace of the list defining the content, and complete
6636  thereafter.
6637 <p><!--para 5 -->
6638  Two declarations of structure, union, or enumerated types which are in different scopes or
6639  use different tags declare distinct types. Each declaration of a structure, union, or
6640  enumerated type which does not include a tag declares a distinct type.
6641 <p><!--para 6 -->
6642  A type specifier of the form
6643  
6644  
6645  
6646  
6647 <!--page 136 -->
6648 <pre>
6649           struct-or-union identifier<sub>opt</sub> { struct-declaration-list }
6650 </pre>
6651  or
6652 <pre>
6653           enum identifier<sub>opt</sub> { enumerator-list }
6654 </pre>
6655  or
6656 <pre>
6657           enum identifier<sub>opt</sub> { enumerator-list , }
6658 </pre>
6659  declares a structure, union, or enumerated type. The list defines the structure content,
6660  union content, or enumeration content. If an identifier is provided,<sup><a href="#note130"><b>130)</b></a></sup> the type specifier
6661  also declares the identifier to be the tag of that type.
6662 <p><!--para 7 -->
6663  A declaration of the form
6664 <pre>
6665           struct-or-union identifier ;
6666 </pre>
6667  specifies a structure or union type and declares the identifier as a tag of that type.<sup><a href="#note131"><b>131)</b></a></sup>
6668 <p><!--para 8 -->
6669  If a type specifier of the form
6670 <pre>
6671           struct-or-union identifier
6672 </pre>
6673  occurs other than as part of one of the above forms, and no other declaration of the
6674  identifier as a tag is visible, then it declares an incomplete structure or union type, and
6675  declares the identifier as the tag of that type.<sup><a href="#note131"><b>131)</b></a></sup>
6676 <p><!--para 9 -->
6677  If a type specifier of the form
6678 <pre>
6679           struct-or-union identifier
6680 </pre>
6681  or
6682 <pre>
6683           enum identifier
6684 </pre>
6685  occurs other than as part of one of the above forms, and a declaration of the identifier as a
6686  tag is visible, then it specifies the same type as that other declaration, and does not
6687  redeclare the tag.
6688 <p><!--para 10 -->
6689  EXAMPLE 1       This mechanism allows declaration of a self-referential structure.
6690 <pre>
6691           struct tnode {
6692                 int count;
6693                 struct tnode *left, *right;
6694           };
6695 </pre>
6696  specifies a structure that contains an integer and two pointers to objects of the same type. Once this
6697  declaration has been given, the declaration
6698  
6699  
6700  
6701  
6702 <!--page 137 -->
6703 <pre>
6704           struct tnode s, *sp;
6705 </pre>
6706  declares s to be an object of the given type and sp to be a pointer to an object of the given type. With
6707  these declarations, the expression sp-&gt;left refers to the left struct tnode pointer of the object to
6708  which sp points; the expression s.right-&gt;count designates the count member of the right struct
6709  tnode pointed to from s.
6710 <p><!--para 11 -->
6711  The following alternative formulation uses the typedef mechanism:
6712 <pre>
6713           typedef struct tnode TNODE;
6714           struct tnode {
6715                 int count;
6716                 TNODE *left, *right;
6717           };
6718           TNODE s, *sp;
6719 </pre>
6720  
6721 <p><!--para 12 -->
6722  EXAMPLE 2 To illustrate the use of prior declaration of a tag to specify a pair of mutually referential
6723  structures, the declarations
6724 <pre>
6725           struct s1 { struct s2 *s2p; /* ... */ }; // D1
6726           struct s2 { struct s1 *s1p; /* ... */ }; // D2
6727 </pre>
6728  specify a pair of structures that contain pointers to each other. Note, however, that if s2 were already
6729  declared as a tag in an enclosing scope, the declaration D1 would refer to it, not to the tag s2 declared in
6730  D2. To eliminate this context sensitivity, the declaration
6731 <pre>
6732           struct s2;
6733 </pre>
6734  may be inserted ahead of D1. This declares a new tag s2 in the inner scope; the declaration D2 then
6735  completes the specification of the new type.
6736  
6737 <p><b> Forward references</b>: declarators (<a href="#6.7.6">6.7.6</a>), type definitions (<a href="#6.7.8">6.7.8</a>).
6738
6739 <p><b>Footnotes</b>
6740 <p><small><a name="note129" href="#note129">129)</a> An incomplete type may only by used when the size of an object of that type is not needed. It is not
6741  needed, for example, when a typedef name is declared to be a specifier for a structure or union, or
6742  when a pointer to or a function returning a structure or union is being declared. (See incomplete types
6743  in <a href="#6.2.5">6.2.5</a>.) The specification has to be complete before such a function is called or defined.
6744 </small>
6745 <p><small><a name="note130" href="#note130">130)</a> If there is no identifier, the type can, within the translation unit, only be referred to by the declaration
6746  of which it is a part. Of course, when the declaration is of a typedef name, subsequent declarations
6747  can make use of that typedef name to declare objects having the specified structure, union, or
6748  enumerated type.
6749 </small>
6750 <p><small><a name="note131" href="#note131">131)</a> A similar construction with enum does not exist.
6751 </small>
6752
6753 <p><small><a href="#Contents">Contents</a></small>
6754 <h5><a name="6.7.2.4" href="#6.7.2.4">6.7.2.4 Atomic type specifiers</a></h5>
6755 <p><b>Syntax</b>
6756 <p><!--para 1 -->
6757 <pre>
6758           atomic-type-specifier:
6759                  _Atomic ( type-name )
6760 </pre>
6761 <p><b>Constraints</b>
6762 <p><!--para 2 -->
6763  Atomic type specifiers shall not be used if the implementation does not support atomic
6764  types (see <a href="#6.10.8.3">6.10.8.3</a>).
6765 <p><!--para 3 -->
6766  The type name in an atomic type specifier shall not refer to an array type, a function type,
6767  an atomic type, or a qualified type.
6768 <p><b>Semantics</b>
6769 <p><!--para 4 -->
6770  The properties associated with atomic types are meaningful only for expressions that are
6771  lvalues. If the _Atomic keyword is immediately followed by a left parenthesis, it is
6772  interpreted as a type specifier (with a type name), not as a type qualifier.
6773 <!--page 138 -->
6774
6775 <p><small><a href="#Contents">Contents</a></small>
6776 <h4><a name="6.7.3" href="#6.7.3">6.7.3 Type qualifiers</a></h4>
6777 <p><b>Syntax</b>
6778 <p><!--para 1 -->
6779 <pre>
6780           type-qualifier:
6781                  const
6782                  restrict
6783                  volatile
6784                  _Atomic
6785 </pre>
6786 <p><b>Constraints</b>
6787 <p><!--para 2 -->
6788  Types other than pointer types whose referenced type is an object type shall not be
6789  restrict-qualified.
6790 <p><!--para 3 -->
6791  The type modified by the _Atomic qualifier shall not be an array type or a function
6792  type.
6793 <p><b>Semantics</b>
6794 <p><!--para 4 -->
6795  The properties associated with qualified types are meaningful only for expressions that
6796  are lvalues.<sup><a href="#note132"><b>132)</b></a></sup>
6797 <p><!--para 5 -->
6798  If the same qualifier appears more than once in the same specifier-qualifier-list, either
6799  directly or via one or more typedefs, the behavior is the same as if it appeared only
6800  once. If other qualifiers appear along with the _Atomic qualifier in a specifier-qualifier-
6801  list, the resulting type is the so-qualified atomic type.
6802 <p><!--para 6 -->
6803  If an attempt is made to modify an object defined with a const-qualified type through use
6804  of an lvalue with non-const-qualified type, the behavior is undefined. If an attempt is
6805  made to refer to an object defined with a volatile-qualified type through use of an lvalue
6806  with non-volatile-qualified type, the behavior is undefined.<sup><a href="#note133"><b>133)</b></a></sup>
6807 <p><!--para 7 -->
6808  An object that has volatile-qualified type may be modified in ways unknown to the
6809  implementation or have other unknown side effects. Therefore any expression referring
6810  to such an object shall be evaluated strictly according to the rules of the abstract machine,
6811  as described in <a href="#5.1.2.3">5.1.2.3</a>. Furthermore, at every sequence point the value last stored in the
6812  object shall agree with that prescribed by the abstract machine, except as modified by the
6813  
6814  
6815  
6816  
6817 <!--page 139 -->
6818  unknown factors mentioned previously.<sup><a href="#note134"><b>134)</b></a></sup> What constitutes an access to an object that
6819  has volatile-qualified type is implementation-defined.
6820 <p><!--para 8 -->
6821  An object that is accessed through a restrict-qualified pointer has a special association
6822  with that pointer. This association, defined in <a href="#6.7.3.1">6.7.3.1</a> below, requires that all accesses to
6823  that object use, directly or indirectly, the value of that particular pointer.<sup><a href="#note135"><b>135)</b></a></sup> The intended
6824  use of the restrict qualifier (like the register storage class) is to promote
6825  optimization, and deleting all instances of the qualifier from all preprocessing translation
6826  units composing a conforming program does not change its meaning (i.e., observable
6827  behavior).
6828 <p><!--para 9 -->
6829  If the specification of an array type includes any type qualifiers, the element type is so-
6830  qualified, not the array type. If the specification of a function type includes any type
6831  qualifiers, the behavior is undefined.<sup><a href="#note136"><b>136)</b></a></sup>
6832 <p><!--para 10 -->
6833  For two qualified types to be compatible, both shall have the identically qualified version
6834  of a compatible type; the order of type qualifiers within a list of specifiers or qualifiers
6835  does not affect the specified type.
6836 <p><!--para 11 -->
6837  EXAMPLE 1      An object declared
6838 <pre>
6839           extern const volatile int real_time_clock;
6840 </pre>
6841  may be modifiable by hardware, but cannot be assigned to, incremented, or decremented.
6842  
6843 <p><!--para 12 -->
6844  EXAMPLE 2 The following declarations and expressions illustrate the behavior when type qualifiers
6845  modify an aggregate type:
6846 <pre>
6847           const struct s { int mem; } cs = { 1 };
6848           struct s ncs; // the object ncs is modifiable
6849           typedef int A[2][3];
6850           const A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of const int
6851           int *pi;
6852           const int *pci;
6853           ncs = cs;            //    valid
6854           cs = ncs;            //    violates modifiable lvalue constraint for =
6855           pi = &amp;ncs.mem;       //    valid
6856           pi = &amp;cs.mem;        //    violates type constraints for =
6857           pci = &amp;cs.mem;       //    valid
6858           pi = a[0];           //    invalid: a[0] has type ''const int *''
6859 </pre>
6860  
6861  
6862  
6863 <!--page 140 -->
6864 <p><!--para 13 -->
6865  EXAMPLE 3       The declaration
6866 <pre>
6867           _Atomic volatile int *p;
6868 </pre>
6869  specifies that p has the type ''pointer to volatile atomic int'', a pointer to a volatile-qualified atomic type.
6870  
6871
6872 <p><b>Footnotes</b>
6873 <p><small><a name="note132" href="#note132">132)</a> The implementation may place a const object that is not volatile in a read-only region of
6874  storage. Moreover, the implementation need not allocate storage for such an object if its address is
6875  never used.
6876 </small>
6877 <p><small><a name="note133" href="#note133">133)</a> This applies to those objects that behave as if they were defined with qualified types, even if they are
6878  never actually defined as objects in the program (such as an object at a memory-mapped input/output
6879  address).
6880 </small>
6881 <p><small><a name="note134" href="#note134">134)</a> A volatile declaration may be used to describe an object corresponding to a memory-mapped
6882  input/output port or an object accessed by an asynchronously interrupting function. Actions on
6883  objects so declared shall not be ''optimized out'' by an implementation or reordered except as
6884  permitted by the rules for evaluating expressions.
6885 </small>
6886 <p><small><a name="note135" href="#note135">135)</a> For example, a statement that assigns a value returned by malloc to a single pointer establishes this
6887  association between the allocated object and the pointer.
6888 </small>
6889 <p><small><a name="note136" href="#note136">136)</a> Both of these can occur through the use of typedefs.
6890 </small>
6891
6892 <p><small><a href="#Contents">Contents</a></small>
6893 <h5><a name="6.7.3.1" href="#6.7.3.1">6.7.3.1 Formal definition of restrict</a></h5>
6894 <p><!--para 1 -->
6895  Let D be a declaration of an ordinary identifier that provides a means of designating an
6896  object P as a restrict-qualified pointer to type T.
6897 <p><!--para 2 -->
6898  If D appears inside a block and does not have storage class extern, let B denote the
6899  block. If D appears in the list of parameter declarations of a function definition, let B
6900  denote the associated block. Otherwise, let B denote the block of main (or the block of
6901  whatever function is called at program startup in a freestanding environment).
6902 <p><!--para 3 -->
6903  In what follows, a pointer expression E is said to be based on object P if (at some
6904  sequence point in the execution of B prior to the evaluation of E) modifying P to point to
6905  a copy of the array object into which it formerly pointed would change the value of E.<sup><a href="#note137"><b>137)</b></a></sup>
6906  Note that ''based'' is defined only for expressions with pointer types.
6907 <p><!--para 4 -->
6908  During each execution of B, let L be any lvalue that has &amp;L based on P. If L is used to
6909  access the value of the object X that it designates, and X is also modified (by any means),
6910  then the following requirements apply: T shall not be const-qualified. Every other lvalue
6911  used to access the value of X shall also have its address based on P. Every access that
6912  modifies X shall be considered also to modify P, for the purposes of this subclause. If P
6913  is assigned the value of a pointer expression E that is based on another restricted pointer
6914  object P2, associated with block B2, then either the execution of B2 shall begin before
6915  the execution of B, or the execution of B2 shall end prior to the assignment. If these
6916  requirements are not met, then the behavior is undefined.
6917 <p><!--para 5 -->
6918  Here an execution of B means that portion of the execution of the program that would
6919  correspond to the lifetime of an object with scalar type and automatic storage duration
6920  associated with B.
6921 <p><!--para 6 -->
6922  A translator is free to ignore any or all aliasing implications of uses of restrict.
6923 <p><!--para 7 -->
6924  EXAMPLE 1       The file scope declarations
6925 <pre>
6926           int * restrict a;
6927           int * restrict b;
6928           extern int c[];
6929 </pre>
6930  assert that if an object is accessed using one of a, b, or c, and that object is modified anywhere in the
6931  program, then it is never accessed using either of the other two.
6932  
6933  
6934 <!--page 141 -->
6935 <p><!--para 8 -->
6936  EXAMPLE 2       The function parameter declarations in the following example
6937 <pre>
6938          void f(int n, int * restrict p, int * restrict q)
6939          {
6940                while (n-- &gt; 0)
6941                      *p++ = *q++;
6942          }
6943 </pre>
6944  assert that, during each execution of the function, if an object is accessed through one of the pointer
6945  parameters, then it is not also accessed through the other.
6946 <p><!--para 9 -->
6947  The benefit of the restrict qualifiers is that they enable a translator to make an effective dependence
6948  analysis of function f without examining any of the calls of f in the program. The cost is that the
6949  programmer has to examine all of those calls to ensure that none give undefined behavior. For example, the
6950  second call of f in g has undefined behavior because each of d[1] through d[49] is accessed through
6951  both p and q.
6952 <pre>
6953           void g(void)
6954           {
6955                 extern int d[100];
6956                 f(50, d + 50, d); // valid
6957                 f(50, d + 1, d); // undefined behavior
6958           }
6959 </pre>
6960  
6961 <p><!--para 10 -->
6962  EXAMPLE 3       The function parameter declarations
6963 <pre>
6964          void h(int n, int * restrict p, int * restrict q, int * restrict r)
6965          {
6966                int i;
6967                for (i = 0; i &lt; n; i++)
6968                       p[i] = q[i] + r[i];
6969          }
6970 </pre>
6971  illustrate how an unmodified object can be aliased through two restricted pointers. In particular, if a and b
6972  are disjoint arrays, a call of the form h(100, a, b, b) has defined behavior, because array b is not
6973  modified within function h.
6974  
6975 <p><!--para 11 -->
6976  EXAMPLE 4 The rule limiting assignments between restricted pointers does not distinguish between a
6977  function call and an equivalent nested block. With one exception, only ''outer-to-inner'' assignments
6978  between restricted pointers declared in nested blocks have defined behavior.
6979 <!--page 142 -->
6980 <pre>
6981          {
6982                   int * restrict p1;
6983                   int * restrict q1;
6984                   p1 = q1; // undefined behavior
6985                   {
6986                         int * restrict p2 = p1; // valid
6987                         int * restrict q2 = q1; // valid
6988                         p1 = q2;                // undefined behavior
6989                         p2 = q2;                // undefined behavior
6990                   }
6991          }
6992 </pre>
6993 <p><!--para 12 -->
6994  The one exception allows the value of a restricted pointer to be carried out of the block in which it (or, more
6995  precisely, the ordinary identifier used to designate it) is declared when that block finishes execution. For
6996  example, this permits new_vector to return a vector.
6997 <pre>
6998           typedef struct { int n; float * restrict v; } vector;
6999           vector new_vector(int n)
7000           {
7001                 vector t;
7002                 t.n = n;
7003                 t.v = malloc(n * sizeof (float));
7004                 return t;
7005           }
7006 </pre>
7007  
7008
7009 <p><b>Footnotes</b>
7010 <p><small><a name="note137" href="#note137">137)</a> In other words, E depends on the value of P itself rather than on the value of an object referenced
7011  indirectly through P. For example, if identifier p has type (int **restrict), then the pointer
7012  expressions p and p+1 are based on the restricted pointer object designated by p, but the pointer
7013  expressions *p and p[1] are not.
7014 </small>
7015
7016 <p><small><a href="#Contents">Contents</a></small>
7017 <h4><a name="6.7.4" href="#6.7.4">6.7.4 Function specifiers</a></h4>
7018 <p><b>Syntax</b>
7019 <p><!--para 1 -->
7020 <pre>
7021           function-specifier:
7022                  inline
7023                  _Noreturn
7024 </pre>
7025 <p><b>Constraints</b>
7026 <p><!--para 2 -->
7027  Function specifiers shall be used only in the declaration of an identifier for a function.
7028 <p><!--para 3 -->
7029  An inline definition of a function with external linkage shall not contain a definition of a
7030  modifiable object with static or thread storage duration, and shall not contain a reference
7031  to an identifier with internal linkage.
7032 <p><!--para 4 -->
7033  In a hosted environment, no function specifier(s) shall appear in a declaration of main.
7034 <p><b>Semantics</b>
7035 <p><!--para 5 -->
7036  A function specifier may appear more than once; the behavior is the same as if it
7037  appeared only once.
7038 <p><!--para 6 -->
7039  A function declared with an inline function specifier is an inline function. Making a *
7040  function an inline function suggests that calls to the function be as fast as possible.<sup><a href="#note138"><b>138)</b></a></sup>
7041  The extent to which such suggestions are effective is implementation-defined.<sup><a href="#note139"><b>139)</b></a></sup>
7042  
7043  
7044  
7045  
7046 <!--page 143 -->
7047 <p><!--para 7 -->
7048  Any function with internal linkage can be an inline function. For a function with external
7049  linkage, the following restrictions apply: If a function is declared with an inline
7050  function specifier, then it shall also be defined in the same translation unit. If all of the
7051  file scope declarations for a function in a translation unit include the inline function
7052  specifier without extern, then the definition in that translation unit is an inline
7053  definition. An inline definition does not provide an external definition for the function,
7054  and does not forbid an external definition in another translation unit. An inline definition
7055  provides an alternative to an external definition, which a translator may use to implement
7056  any call to the function in the same translation unit. It is unspecified whether a call to the
7057  function uses the inline definition or the external definition.<sup><a href="#note140"><b>140)</b></a></sup>
7058 <p><!--para 8 -->
7059  A function declared with a _Noreturn function specifier shall not return to its caller.
7060 <p><b>Recommended practice</b>
7061 <p><!--para 9 -->
7062  The implementation should produce a diagnostic message for a function declared with a
7063  _Noreturn function specifier that appears to be capable of returning to its caller.
7064 <p><!--para 10 -->
7065  EXAMPLE 1 The declaration of an inline function with external linkage can result in either an external
7066  definition, or a definition available for use only within the translation unit. A file scope declaration with
7067  extern creates an external definition. The following example shows an entire translation unit.
7068 <pre>
7069           inline double fahr(double t)
7070           {
7071                 return (9.0 * t) / 5.0 + 32.0;
7072           }
7073           inline double cels(double t)
7074           {
7075                 return (5.0 * (t - 32.0)) / 9.0;
7076           }
7077           extern double fahr(double);                  // creates an external definition
7078           double convert(int is_fahr, double temp)
7079           {
7080                 /* A translator may perform inline substitutions */
7081                 return is_fahr ? cels(temp) : fahr(temp);
7082           }
7083 </pre>
7084 <p><!--para 11 -->
7085  Note that the definition of fahr is an external definition because fahr is also declared with extern, but
7086  the definition of cels is an inline definition. Because cels has external linkage and is referenced, an
7087  external definition has to appear in another translation unit (see <a href="#6.9">6.9</a>); the inline definition and the external
7088  definition are distinct and either may be used for the call.
7089  
7090 <p><!--para 12 -->
7091  EXAMPLE 2
7092  
7093  
7094  
7095  
7096 <!--page 144 -->
7097 <pre>
7098           _Noreturn void f () {
7099                 abort(); // ok
7100           }
7101           _Noreturn void g (int i) { // causes undefined behavior if i &lt;= 0
7102                 if (i &gt; 0) abort();
7103           }
7104 </pre>
7105  
7106 <p><b> Forward references</b>: function definitions (<a href="#6.9.1">6.9.1</a>).
7107
7108 <p><b>Footnotes</b>
7109 <p><small><a name="note138" href="#note138">138)</a> By using, for example, an alternative to the usual function call mechanism, such as ''inline
7110  substitution''. Inline substitution is not textual substitution, nor does it create a new function.
7111  Therefore, for example, the expansion of a macro used within the body of the function uses the
7112  definition it had at the point the function body appears, and not where the function is called; and
7113  identifiers refer to the declarations in scope where the body occurs. Likewise, the function has a
7114  single address, regardless of the number of inline definitions that occur in addition to the external
7115  definition.
7116 </small>
7117 <p><small><a name="note139" href="#note139">139)</a> For example, an implementation might never perform inline substitution, or might only perform inline
7118  substitutions to calls in the scope of an inline declaration.
7119 </small>
7120 <p><small><a name="note140" href="#note140">140)</a> Since an inline definition is distinct from the corresponding external definition and from any other
7121  corresponding inline definitions in other translation units, all corresponding objects with static storage
7122  duration are also distinct in each of the definitions.
7123 </small>
7124
7125 <p><small><a href="#Contents">Contents</a></small>
7126 <h4><a name="6.7.5" href="#6.7.5">6.7.5 Alignment specifier</a></h4>
7127 <p><b>Syntax</b>
7128 <p><!--para 1 -->
7129 <pre>
7130           alignment-specifier:
7131                 _Alignas ( type-name )
7132                 _Alignas ( constant-expression )
7133 </pre>
7134 <p><b>Constraints</b>
7135 <p><!--para 2 -->
7136  An alignment attribute shall not be specified in a declaration of a typedef, or a bit-field, or
7137  a function, or a parameter, or an object declared with the register storage-class
7138  specifier.
7139 <p><!--para 3 -->
7140  The constant expression shall be an integer constant expression. It shall evaluate to a
7141  valid fundamental alignment, or to a valid extended alignment supported by the
7142  implementation in the context in which it appears, or to zero.
7143 <p><!--para 4 -->
7144  The combined effect of all alignment attributes in a declaration shall not specify an
7145  alignment that is less strict than the alignment that would otherwise be required for the
7146  type of the object or member being declared.
7147 <p><b>Semantics</b>
7148 <p><!--para 5 -->
7149  The first form is equivalent to _Alignas(alignof(type-name)).
7150 <p><!--para 6 -->
7151  The alignment requirement of the declared object or member is taken to be the specified
7152  alignment. An alignment specification of zero has no effect.<sup><a href="#note141"><b>141)</b></a></sup> When multiple
7153  alignment specifiers occur in a declaration, the effective alignment requirement is the
7154  strictest specified alignment.
7155 <p><!--para 7 -->
7156  If the definition of an object has an alignment specifier, any other declaration of that
7157  object shall either specify equivalent alignment or have no alignment specifier. If the
7158  definition of an object does not have an alignment specifier, any other declaration of that
7159  object shall also have no alignment specifier. If declarations of an object in different
7160  translation units have different alignment specifiers, the behavior is undefined.
7161  
7162  
7163  
7164 <!--page 145 -->
7165
7166 <p><b>Footnotes</b>
7167 <p><small><a name="note141" href="#note141">141)</a> An alignment specification of zero also does not affect other alignment specifications in the same
7168  declaration.
7169 </small>
7170
7171 <p><small><a href="#Contents">Contents</a></small>
7172 <h4><a name="6.7.6" href="#6.7.6">6.7.6 Declarators</a></h4>
7173 <p><b>Syntax</b>
7174 <p><!--para 1 -->
7175 <pre>
7176           declarator:
7177                  pointer<sub>opt</sub> direct-declarator
7178           direct-declarator:
7179                   identifier
7180                   ( declarator )
7181                   direct-declarator [ type-qualifier-list<sub>opt</sub> assignment-expression<sub>opt</sub> ]
7182                   direct-declarator [ static type-qualifier-list<sub>opt</sub> assignment-expression ]
7183                   direct-declarator [ type-qualifier-list static assignment-expression ]
7184                   direct-declarator [ type-qualifier-list<sub>opt</sub> * ]
7185                   direct-declarator ( parameter-type-list )
7186                   direct-declarator ( identifier-list<sub>opt</sub> )
7187           pointer:
7188                  * type-qualifier-list<sub>opt</sub>
7189                  * type-qualifier-list<sub>opt</sub> pointer
7190           type-qualifier-list:
7191                  type-qualifier
7192                  type-qualifier-list type-qualifier
7193           parameter-type-list:
7194                 parameter-list
7195                 parameter-list , ...
7196           parameter-list:
7197                 parameter-declaration
7198                 parameter-list , parameter-declaration
7199           parameter-declaration:
7200                 declaration-specifiers declarator
7201                 declaration-specifiers abstract-declarator<sub>opt</sub>
7202           identifier-list:
7203                  identifier
7204                  identifier-list , identifier
7205 </pre>
7206 <p><b>Semantics</b>
7207 <p><!--para 2 -->
7208  Each declarator declares one identifier, and asserts that when an operand of the same
7209  form as the declarator appears in an expression, it designates a function or object with the
7210  scope, storage duration, and type indicated by the declaration specifiers.
7211 <p><!--para 3 -->
7212  A full declarator is a declarator that is not part of another declarator. The end of a full
7213  declarator is a sequence point. If, in the nested sequence of declarators in a full
7214 <!--page 146 -->
7215  declarator, there is a declarator specifying a variable length array type, the type specified
7216  by the full declarator is said to be variably modified. Furthermore, any type derived by
7217  declarator type derivation from a variably modified type is itself variably modified.
7218 <p><!--para 4 -->
7219  In the following subclauses, consider a declaration
7220 <pre>
7221          T D1
7222 </pre>
7223  where T contains the declaration specifiers that specify a type T (such as int) and D1 is
7224  a declarator that contains an identifier ident. The type specified for the identifier ident in
7225  the various forms of declarator is described inductively using this notation.
7226 <p><!--para 5 -->
7227  If, in the declaration ''T D1'', D1 has the form
7228 <pre>
7229          identifier
7230 </pre>
7231  then the type specified for ident is T .
7232 <p><!--para 6 -->
7233  If, in the declaration ''T D1'', D1 has the form
7234 <pre>
7235          ( D )
7236 </pre>
7237  then ident has the type specified by the declaration ''T D''. Thus, a declarator in
7238  parentheses is identical to the unparenthesized declarator, but the binding of complicated
7239  declarators may be altered by parentheses.
7240 <p><b>Implementation limits</b>
7241 <p><!--para 7 -->
7242  As discussed in <a href="#5.2.4.1">5.2.4.1</a>, an implementation may limit the number of pointer, array, and
7243  function declarators that modify an arithmetic, structure, union, or void type, either
7244  directly or via one or more typedefs.
7245 <p><b> Forward references</b>: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), type definitions (<a href="#6.7.8">6.7.8</a>).
7246
7247 <p><small><a href="#Contents">Contents</a></small>
7248 <h5><a name="6.7.6.1" href="#6.7.6.1">6.7.6.1 Pointer declarators</a></h5>
7249 <p><b>Semantics</b>
7250 <p><!--para 1 -->
7251  If, in the declaration ''T D1'', D1 has the form
7252 <pre>
7253          * type-qualifier-list<sub>opt</sub> D
7254 </pre>
7255  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
7256  T '', then the type specified for ident is ''derived-declarator-type-list type-qualifier-list
7257  pointer to T ''. For each type qualifier in the list, ident is a so-qualified pointer.
7258 <p><!--para 2 -->
7259  For two pointer types to be compatible, both shall be identically qualified and both shall
7260  be pointers to compatible types.
7261 <p><!--para 3 -->
7262  EXAMPLE The following pair of declarations demonstrates the difference between a ''variable pointer
7263  to a constant value'' and a ''constant pointer to a variable value''.
7264 <!--page 147 -->
7265 <pre>
7266           const int *ptr_to_constant;
7267           int *const constant_ptr;
7268 </pre>
7269  The contents of any object pointed to by ptr_to_constant shall not be modified through that pointer,
7270  but ptr_to_constant itself may be changed to point to another object. Similarly, the contents of the
7271  int pointed to by constant_ptr may be modified, but constant_ptr itself shall always point to the
7272  same location.
7273 <p><!--para 4 -->
7274  The declaration of the constant pointer constant_ptr may be clarified by including a definition for the
7275  type ''pointer to int''.
7276 <pre>
7277           typedef int *int_ptr;
7278           const int_ptr constant_ptr;
7279 </pre>
7280  declares constant_ptr as an object that has type ''const-qualified pointer to int''.
7281  
7282
7283 <p><small><a href="#Contents">Contents</a></small>
7284 <h5><a name="6.7.6.2" href="#6.7.6.2">6.7.6.2 Array declarators</a></h5>
7285 <p><b>Constraints</b>
7286 <p><!--para 1 -->
7287  In addition to optional type qualifiers and the keyword static, the [ and ] may delimit
7288  an expression or *. If they delimit an expression (which specifies the size of an array), the
7289  expression shall have an integer type. If the expression is a constant expression, it shall
7290  have a value greater than zero. The element type shall not be an incomplete or function
7291  type. The optional type qualifiers and the keyword static shall appear only in a
7292  declaration of a function parameter with an array type, and then only in the outermost
7293  array type derivation.
7294 <p><!--para 2 -->
7295  If an identifier is declared as having a variably modified type, it shall be an ordinary
7296  identifier (as defined in <a href="#6.2.3">6.2.3</a>), have no linkage, and have either block scope or function
7297  prototype scope. If an identifier is declared to be an object with static or thread storage
7298  duration, it shall not have a variable length array type.
7299 <p><b>Semantics</b>
7300 <p><!--para 3 -->
7301  If, in the declaration ''T D1'', D1 has one of the forms:
7302 <pre>
7303           D[ type-qualifier-list<sub>opt</sub> assignment-expression<sub>opt</sub> ]
7304           D[ static type-qualifier-list<sub>opt</sub> assignment-expression ]
7305           D[ type-qualifier-list static assignment-expression ]
7306           D[ type-qualifier-list<sub>opt</sub> * ]
7307 </pre>
7308  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
7309  T '', then the type specified for ident is ''derived-declarator-type-list array of T ''.<sup><a href="#note142"><b>142)</b></a></sup>
7310  (See <a href="#6.7.6.3">6.7.6.3</a> for the meaning of the optional type qualifiers and the keyword static.)
7311 <p><!--para 4 -->
7312  If the size is not present, the array type is an incomplete type. If the size is * instead of
7313  being an expression, the array type is a variable length array type of unspecified size,
7314  which can only be used in declarations or type names with function prototype scope;<sup><a href="#note143"><b>143)</b></a></sup>
7315  
7316 <!--page 148 -->
7317  such arrays are nonetheless complete types. If the size is an integer constant expression
7318  and the element type has a known constant size, the array type is not a variable length
7319  array type; otherwise, the array type is a variable length array type. (Variable length
7320  arrays are a conditional feature that implementations need not support; see <a href="#6.10.8.3">6.10.8.3</a>.)
7321 <p><!--para 5 -->
7322  If the size is an expression that is not an integer constant expression: if it occurs in a
7323  declaration at function prototype scope, it is treated as if it were replaced by *; otherwise,
7324  each time it is evaluated it shall have a value greater than zero. The size of each instance
7325  of a variable length array type does not change during its lifetime. Where a size
7326  expression is part of the operand of a sizeof operator and changing the value of the
7327  size expression would not affect the result of the operator, it is unspecified whether or not
7328  the size expression is evaluated.
7329 <p><!--para 6 -->
7330  For two array types to be compatible, both shall have compatible element types, and if
7331  both size specifiers are present, and are integer constant expressions, then both size
7332  specifiers shall have the same constant value. If the two array types are used in a context
7333  which requires them to be compatible, it is undefined behavior if the two size specifiers
7334  evaluate to unequal values.
7335 <p><!--para 7 -->
7336  EXAMPLE 1
7337 <pre>
7338           float fa[11], *afp[17];
7339 </pre>
7340  declares an array of float numbers and an array of pointers to float numbers.
7341  
7342 <p><!--para 8 -->
7343  EXAMPLE 2       Note the distinction between the declarations
7344 <pre>
7345           extern int *x;
7346           extern int y[];
7347 </pre>
7348  The first declares x to be a pointer to int; the second declares y to be an array of int of unspecified size
7349  (an incomplete type), the storage for which is defined elsewhere.
7350  
7351 <p><!--para 9 -->
7352  EXAMPLE 3       The following declarations demonstrate the compatibility rules for variably modified types.
7353 <pre>
7354           extern int n;
7355           extern int m;
7356           void fcompat(void)
7357           {
7358                 int a[n][6][m];
7359                 int (*p)[4][n+1];
7360                 int c[n][n][6][m];
7361                 int (*r)[n][n][n+1];
7362                 p = a;       // invalid: not compatible because 4 != 6
7363                 r = c;       // compatible, but defined behavior only if
7364                              // n == 6 and m == n+1
7365           }
7366 </pre>
7367  
7368  
7369  
7370  
7371 <!--page 149 -->
7372 <p><!--para 10 -->
7373  EXAMPLE 4 All declarations of variably modified (VM) types have to be at either block scope or
7374  function prototype scope. Array objects declared with the _Thread_local, static, or extern
7375  storage-class specifier cannot have a variable length array (VLA) type. However, an object declared with
7376  the static storage-class specifier can have a VM type (that is, a pointer to a VLA type). Finally, all
7377  identifiers declared with a VM type have to be ordinary identifiers and cannot, therefore, be members of
7378  structures or unions.
7379 <pre>
7380          extern int n;
7381          int A[n];                                           // invalid: file scope VLA
7382          extern int (*p2)[n];                                // invalid: file scope VM
7383          int B[100];                                         // valid: file scope but not VM
7384          void fvla(int m, int C[m][m]);                      // valid: VLA with prototype scope
7385          void fvla(int m, int C[m][m])                       // valid: adjusted to auto pointer to VLA
7386          {
7387                typedef int VLA[m][m];                        // valid: block scope typedef VLA
7388                   struct tag {
7389                         int (*y)[n];                         // invalid: y not ordinary identifier
7390                         int z[n];                            // invalid: z not ordinary identifier
7391                   };
7392                   int D[m];                                  //   valid: auto VLA
7393                   static int E[m];                           //   invalid: static block scope VLA
7394                   extern int F[m];                           //   invalid: F has linkage and is VLA
7395                   int (*s)[m];                               //   valid: auto pointer to VLA
7396                   extern int (*r)[m];                        //   invalid: r has linkage and points to VLA
7397                   static int (*q)[m] = &amp;B;                   //   valid: q is a static block pointer to VLA
7398          }
7399 </pre>
7400  
7401 <p><b> Forward references</b>:          function declarators (<a href="#6.7.6.3">6.7.6.3</a>), function definitions (<a href="#6.9.1">6.9.1</a>),
7402  initialization (<a href="#6.7.9">6.7.9</a>).
7403
7404 <p><b>Footnotes</b>
7405 <p><small><a name="note142" href="#note142">142)</a> When several ''array of'' specifications are adjacent, a multidimensional array is declared.
7406 </small>
7407 <p><small><a name="note143" href="#note143">143)</a> Thus, * can be used only in function declarations that are not definitions (see <a href="#6.7.6.3">6.7.6.3</a>).
7408 </small>
7409
7410 <p><small><a href="#Contents">Contents</a></small>
7411 <h5><a name="6.7.6.3" href="#6.7.6.3">6.7.6.3 Function declarators (including prototypes)</a></h5>
7412 <p><b>Constraints</b>
7413 <p><!--para 1 -->
7414  A function declarator shall not specify a return type that is a function type or an array
7415  type.
7416 <p><!--para 2 -->
7417  The only storage-class specifier that shall occur in a parameter declaration is register.
7418 <p><!--para 3 -->
7419  An identifier list in a function declarator that is not part of a definition of that function
7420  shall be empty.
7421 <p><!--para 4 -->
7422  After adjustment, the parameters in a parameter type list in a function declarator that is
7423  part of a definition of that function shall not have incomplete type.
7424 <p><b>Semantics</b>
7425 <p><!--para 5 -->
7426  If, in the declaration ''T D1'', D1 has the form
7427 <!--page 150 -->
7428 <pre>
7429         D( parameter-type-list )
7430 </pre>
7431  or
7432 <pre>
7433         D( identifier-list<sub>opt</sub> )
7434 </pre>
7435  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
7436  T '', then the type specified for ident is ''derived-declarator-type-list function returning
7437  T ''.
7438 <p><!--para 6 -->
7439  A parameter type list specifies the types of, and may declare identifiers for, the
7440  parameters of the function.
7441 <p><!--para 7 -->
7442  A declaration of a parameter as ''array of type'' shall be adjusted to ''qualified pointer to
7443  type'', where the type qualifiers (if any) are those specified within the [ and ] of the
7444  array type derivation. If the keyword static also appears within the [ and ] of the
7445  array type derivation, then for each call to the function, the value of the corresponding
7446  actual argument shall provide access to the first element of an array with at least as many
7447  elements as specified by the size expression.
7448 <p><!--para 8 -->
7449  A declaration of a parameter as ''function returning type'' shall be adjusted to ''pointer to
7450  function returning type'', as in <a href="#6.3.2.1">6.3.2.1</a>.
7451 <p><!--para 9 -->
7452  If the list terminates with an ellipsis (, ...), no information about the number or types
7453  of the parameters after the comma is supplied.<sup><a href="#note144"><b>144)</b></a></sup>
7454 <p><!--para 10 -->
7455  The special case of an unnamed parameter of type void as the only item in the list
7456  specifies that the function has no parameters.
7457 <p><!--para 11 -->
7458  If, in a parameter declaration, an identifier can be treated either as a typedef name or as a
7459  parameter name, it shall be taken as a typedef name.
7460 <p><!--para 12 -->
7461  If the function declarator is not part of a definition of that function, parameters may have
7462  incomplete type and may use the [*] notation in their sequences of declarator specifiers
7463  to specify variable length array types.
7464 <p><!--para 13 -->
7465  The storage-class specifier in the declaration specifiers for a parameter declaration, if
7466  present, is ignored unless the declared parameter is one of the members of the parameter
7467  type list for a function definition.
7468 <p><!--para 14 -->
7469  An identifier list declares only the identifiers of the parameters of the function. An empty
7470  list in a function declarator that is part of a definition of that function specifies that the
7471  function has no parameters. The empty list in a function declarator that is not part of a
7472  definition of that function specifies that no information about the number or types of the
7473  parameters is supplied.<sup><a href="#note145"><b>145)</b></a></sup>
7474  
7475  
7476  
7477 <!--page 151 -->
7478 <p><!--para 15 -->
7479  For two function types to be compatible, both shall specify compatible return types.<sup><a href="#note146"><b>146)</b></a></sup>
7480  Moreover, the parameter type lists, if both are present, shall agree in the number of
7481  parameters and in use of the ellipsis terminator; corresponding parameters shall have
7482  compatible types. If one type has a parameter type list and the other type is specified by a
7483  function declarator that is not part of a function definition and that contains an empty
7484  identifier list, the parameter list shall not have an ellipsis terminator and the type of each
7485  parameter shall be compatible with the type that results from the application of the
7486  default argument promotions. If one type has a parameter type list and the other type is
7487  specified by a function definition that contains a (possibly empty) identifier list, both shall
7488  agree in the number of parameters, and the type of each prototype parameter shall be
7489  compatible with the type that results from the application of the default argument
7490  promotions to the type of the corresponding identifier. (In the determination of type
7491  compatibility and of a composite type, each parameter declared with function or array
7492  type is taken as having the adjusted type and each parameter declared with qualified type
7493  is taken as having the unqualified version of its declared type.)
7494 <p><!--para 16 -->
7495  EXAMPLE 1       The declaration
7496 <pre>
7497           int f(void), *fip(), (*pfi)();
7498 </pre>
7499  declares a function f with no parameters returning an int, a function fip with no parameter specification
7500  returning a pointer to an int, and a pointer pfi to a function with no parameter specification returning an
7501  int. It is especially useful to compare the last two. The binding of *fip() is *(fip()), so that the
7502  declaration suggests, and the same construction in an expression requires, the calling of a function fip,
7503  and then using indirection through the pointer result to yield an int. In the declarator (*pfi)(), the
7504  extra parentheses are necessary to indicate that indirection through a pointer to a function yields a function
7505  designator, which is then used to call the function; it returns an int.
7506 <p><!--para 17 -->
7507  If the declaration occurs outside of any function, the identifiers have file scope and external linkage. If the
7508  declaration occurs inside a function, the identifiers of the functions f and fip have block scope and either
7509  internal or external linkage (depending on what file scope declarations for these identifiers are visible), and
7510  the identifier of the pointer pfi has block scope and no linkage.
7511  
7512 <p><!--para 18 -->
7513  EXAMPLE 2       The declaration
7514 <pre>
7515           int (*apfi[3])(int *x, int *y);
7516 </pre>
7517  declares an array apfi of three pointers to functions returning int. Each of these functions has two
7518  parameters that are pointers to int. The identifiers x and y are declared for descriptive purposes only and
7519  go out of scope at the end of the declaration of apfi.
7520  
7521 <p><!--para 19 -->
7522  EXAMPLE 3       The declaration
7523 <pre>
7524           int (*fpfi(int (*)(long), int))(int, ...);
7525 </pre>
7526  declares a function fpfi that returns a pointer to a function returning an int. The function fpfi has two
7527  parameters: a pointer to a function returning an int (with one parameter of type long int), and an int.
7528  The pointer returned by fpfi points to a function that has one int parameter and accepts zero or more
7529  
7530  
7531 <!--page 152 -->
7532  additional arguments of any type.
7533  
7534 <p><!--para 20 -->
7535  EXAMPLE 4        The following prototype has a variably modified parameter.
7536 <pre>
7537            void addscalar(int n, int m,
7538                  double a[n][n*m+300], double x);
7539            int main()
7540            {
7541                  double b[4][308];
7542                  addscalar(4, 2, b, <a href="#2.17">2.17</a>);
7543                  return 0;
7544            }
7545            void addscalar(int n, int m,
7546                  double a[n][n*m+300], double x)
7547            {
7548                  for (int i = 0; i &lt; n; i++)
7549                        for (int j = 0, k = n*m+300; j &lt; k; j++)
7550                              // a is a pointer to a VLA with n*m+300 elements
7551                              a[i][j] += x;
7552            }
7553 </pre>
7554  
7555 <p><!--para 21 -->
7556  EXAMPLE 5        The following are all compatible function prototype declarators.
7557 <pre>
7558            double    maximum(int       n,   int   m,   double   a[n][m]);
7559            double    maximum(int       n,   int   m,   double   a[*][*]);
7560            double    maximum(int       n,   int   m,   double   a[ ][*]);
7561            double    maximum(int       n,   int   m,   double   a[ ][m]);
7562 </pre>
7563  as are:
7564 <pre>
7565            void   f(double     (* restrict a)[5]);
7566            void   f(double     a[restrict][5]);
7567            void   f(double     a[restrict 3][5]);
7568            void   f(double     a[restrict static 3][5]);
7569 </pre>
7570  (Note that the last declaration also specifies that the argument corresponding to a in any call to f must be a
7571  non-null pointer to the first of at least three arrays of 5 doubles, which the others do not.)
7572  
7573 <p><b> Forward references</b>: function definitions (<a href="#6.9.1">6.9.1</a>), type names (<a href="#6.7.7">6.7.7</a>).
7574 <!--page 153 -->
7575
7576 <p><b>Footnotes</b>
7577 <p><small><a name="note144" href="#note144">144)</a> The macros defined in the <a href="#7.16">&lt;stdarg.h&gt;</a> header (<a href="#7.16">7.16</a>) may be used to access arguments that
7578  correspond to the ellipsis.
7579 </small>
7580 <p><small><a name="note145" href="#note145">145)</a> See ''future language directions'' (<a href="#6.11.6">6.11.6</a>).
7581 </small>
7582 <p><small><a name="note146" href="#note146">146)</a> If both function types are ''old style'', parameter types are not compared.
7583 </small>
7584
7585 <p><small><a href="#Contents">Contents</a></small>
7586 <h4><a name="6.7.7" href="#6.7.7">6.7.7 Type names</a></h4>
7587 <p><b>Syntax</b>
7588 <p><!--para 1 -->
7589 <pre>
7590           type-name:
7591                  specifier-qualifier-list abstract-declarator<sub>opt</sub>
7592           abstract-declarator:
7593                  pointer
7594                  pointer<sub>opt</sub> direct-abstract-declarator
7595           direct-abstract-declarator:
7596                   ( abstract-declarator )
7597                   direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list<sub>opt</sub>
7598                                  assignment-expression<sub>opt</sub> ]
7599                   direct-abstract-declarator<sub>opt</sub> [ static type-qualifier-list<sub>opt</sub>
7600                                  assignment-expression ]
7601                   direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list static
7602                                  assignment-expression ]
7603                   direct-abstract-declarator<sub>opt</sub> [ * ]
7604                   direct-abstract-declarator<sub>opt</sub> ( parameter-type-list<sub>opt</sub> )
7605 </pre>
7606 <p><b>Semantics</b>
7607 <p><!--para 2 -->
7608  In several contexts, it is necessary to specify a type. This is accomplished using a type
7609  name, which is syntactically a declaration for a function or an object of that type that
7610  omits the identifier.<sup><a href="#note147"><b>147)</b></a></sup>
7611 <p><!--para 3 -->
7612  EXAMPLE        The constructions
7613 <pre>
7614           (a)      int
7615           (b)      int   *
7616           (c)      int   *[3]
7617           (d)      int   (*)[3]
7618           (e)      int   (*)[*]
7619           (f)      int   *()
7620           (g)      int   (*)(void)
7621           (h)      int   (*const [])(unsigned int, ...)
7622 </pre>
7623  name respectively the types (a) int, (b) pointer to int, (c) array of three pointers to int, (d) pointer to an
7624  array of three ints, (e) pointer to a variable length array of an unspecified number of ints, (f) function
7625  with no parameter specification returning a pointer to int, (g) pointer to function with no parameters
7626  returning an int, and (h) array of an unspecified number of constant pointers to functions, each with one
7627  parameter that has type unsigned int and an unspecified number of other parameters, returning an
7628  int.
7629  
7630  
7631  
7632  
7633 <!--page 154 -->
7634
7635 <p><b>Footnotes</b>
7636 <p><small><a name="note147" href="#note147">147)</a> As indicated by the syntax, empty parentheses in a type name are interpreted as ''function with no
7637  parameter specification'', rather than redundant parentheses around the omitted identifier.
7638 </small>
7639
7640 <p><small><a href="#Contents">Contents</a></small>
7641 <h4><a name="6.7.8" href="#6.7.8">6.7.8 Type definitions</a></h4>
7642 <p><b>Syntax</b>
7643 <p><!--para 1 -->
7644 <pre>
7645           typedef-name:
7646                  identifier
7647 </pre>
7648 <p><b>Constraints</b>
7649 <p><!--para 2 -->
7650  If a typedef name specifies a variably modified type then it shall have block scope.
7651 <p><b>Semantics</b>
7652 <p><!--para 3 -->
7653  In a declaration whose storage-class specifier is typedef, each declarator defines an
7654  identifier to be a typedef name that denotes the type specified for the identifier in the way
7655  described in <a href="#6.7.6">6.7.6</a>. Any array size expressions associated with variable length array
7656  declarators are evaluated each time the declaration of the typedef name is reached in the
7657  order of execution. A typedef declaration does not introduce a new type, only a
7658  synonym for the type so specified. That is, in the following declarations:
7659 <pre>
7660           typedef T type_ident;
7661           type_ident D;
7662 </pre>
7663  type_ident is defined as a typedef name with the type specified by the declaration
7664  specifiers in T (known as T ), and the identifier in D has the type ''derived-declarator-
7665  type-list T '' where the derived-declarator-type-list is specified by the declarators of D. A
7666  typedef name shares the same name space as other identifiers declared in ordinary
7667  declarators.
7668 <p><!--para 4 -->
7669  EXAMPLE 1       After
7670 <pre>
7671           typedef int MILES, KLICKSP();
7672           typedef struct { double hi, lo; } range;
7673 </pre>
7674  the constructions
7675 <pre>
7676           MILES distance;
7677           extern KLICKSP *metricp;
7678           range x;
7679           range z, *zp;
7680 </pre>
7681  are all valid declarations. The type of distance is int, that of metricp is ''pointer to function with no
7682  parameter specification returning int'', and that of x and z is the specified structure; zp is a pointer to
7683  such a structure. The object distance has a type compatible with any other int object.
7684  
7685 <p><!--para 5 -->
7686  EXAMPLE 2       After the declarations
7687 <pre>
7688           typedef struct s1 { int x; } t1, *tp1;
7689           typedef struct s2 { int x; } t2, *tp2;
7690 </pre>
7691  type t1 and the type pointed to by tp1 are compatible. Type t1 is also compatible with type struct
7692  s1, but not compatible with the types struct s2, t2, the type pointed to by tp2, or int.
7693 <!--page 155 -->
7694 <p><!--para 6 -->
7695  EXAMPLE 3       The following obscure constructions
7696 <pre>
7697           typedef signed int t;
7698           typedef int plain;
7699           struct tag {
7700                 unsigned t:4;
7701                 const t:5;
7702                 plain r:5;
7703           };
7704 </pre>
7705  declare a typedef name t with type signed int, a typedef name plain with type int, and a structure
7706  with three bit-field members, one named t that contains values in the range [0, 15], an unnamed const-
7707  qualified bit-field which (if it could be accessed) would contain values in either the range [-15, +15] or
7708  [-16, +15], and one named r that contains values in one of the ranges [0, 31], [-15, +15], or [-16, +15].
7709  (The choice of range is implementation-defined.) The first two bit-field declarations differ in that
7710  unsigned is a type specifier (which forces t to be the name of a structure member), while const is a
7711  type qualifier (which modifies t which is still visible as a typedef name). If these declarations are followed
7712  in an inner scope by
7713 <pre>
7714           t f(t (t));
7715           long t;
7716 </pre>
7717  then a function f is declared with type ''function returning signed int with one unnamed parameter
7718  with type pointer to function returning signed int with one unnamed parameter with type signed
7719  int'', and an identifier t with type long int.
7720  
7721 <p><!--para 7 -->
7722  EXAMPLE 4 On the other hand, typedef names can be used to improve code readability. All three of the
7723  following declarations of the signal function specify exactly the same type, the first without making use
7724  of any typedef names.
7725 <pre>
7726           typedef void fv(int), (*pfv)(int);
7727           void (*signal(int, void (*)(int)))(int);
7728           fv *signal(int, fv *);
7729           pfv signal(int, pfv);
7730 </pre>
7731  
7732 <p><!--para 8 -->
7733  EXAMPLE 5 If a typedef name denotes a variable length array type, the length of the array is fixed at the
7734  time the typedef name is defined, not each time it is used:
7735 <!--page 156 -->
7736 <pre>
7737           void copyt(int n)
7738           {
7739                 typedef int B[n];   //               B is n ints, n evaluated now
7740                 n += 1;
7741                 B a;                //               a is n ints, n without += 1
7742                 int b[n];           //               a and b are different sizes
7743                 for (int i = 1; i &lt; n;               i++)
7744                       a[i-1] = b[i];
7745           }
7746 </pre>
7747
7748 <p><small><a href="#Contents">Contents</a></small>
7749 <h4><a name="6.7.9" href="#6.7.9">6.7.9 Initialization</a></h4>
7750 <p><b>Syntax</b>
7751 <p><!--para 1 -->
7752 <pre>
7753           initializer:
7754                    assignment-expression
7755                    { initializer-list }
7756                    { initializer-list , }
7757           initializer-list:
7758                    designation<sub>opt</sub> initializer
7759                    initializer-list , designation<sub>opt</sub> initializer
7760           designation:
7761                  designator-list =
7762           designator-list:
7763                  designator
7764                  designator-list designator
7765           designator:
7766                  [ constant-expression ]
7767                  . identifier
7768 </pre>
7769 <p><b>Constraints</b>
7770 <p><!--para 2 -->
7771  No initializer shall attempt to provide a value for an object not contained within the entity
7772  being initialized.
7773 <p><!--para 3 -->
7774  The type of the entity to be initialized shall be an array of unknown size or a complete
7775  object type that is not a variable length array type.
7776 <p><!--para 4 -->
7777  All the expressions in an initializer for an object that has static or thread storage duration
7778  shall be constant expressions or string literals.
7779 <p><!--para 5 -->
7780  If the declaration of an identifier has block scope, and the identifier has external or
7781  internal linkage, the declaration shall have no initializer for the identifier.
7782 <p><!--para 6 -->
7783  If a designator has the form
7784 <pre>
7785           [ constant-expression ]
7786 </pre>
7787  then the current object (defined below) shall have array type and the expression shall be
7788  an integer constant expression. If the array is of unknown size, any nonnegative value is
7789  valid.
7790 <p><!--para 7 -->
7791  If a designator has the form
7792 <pre>
7793           . identifier
7794 </pre>
7795  then the current object (defined below) shall have structure or union type and the
7796  identifier shall be the name of a member of that type.
7797 <!--page 157 -->
7798 <p><b>Semantics</b>
7799 <p><!--para 8 -->
7800  An initializer specifies the initial value stored in an object.
7801 <p><!--para 9 -->
7802  Except where explicitly stated otherwise, for the purposes of this subclause unnamed
7803  members of objects of structure and union type do not participate in initialization.
7804  Unnamed members of structure objects have indeterminate value even after initialization.
7805 <p><!--para 10 -->
7806  If an object that has automatic storage duration is not initialized explicitly, its value is
7807  indeterminate. If an object that has static or thread storage duration is not initialized
7808  explicitly, then:
7809 <ul>
7810 <li>  if it has pointer type, it is initialized to a null pointer;
7811 <li>  if it has arithmetic type, it is initialized to (positive or unsigned) zero;
7812 <li>  if it is an aggregate, every member is initialized (recursively) according to these rules,
7813  and any padding is initialized to zero bits;
7814 <li>  if it is a union, the first named member is initialized (recursively) according to these
7815  rules, and any padding is initialized to zero bits;
7816 </ul>
7817 <p><!--para 11 -->
7818  The initializer for a scalar shall be a single expression, optionally enclosed in braces. The
7819  initial value of the object is that of the expression (after conversion); the same type
7820  constraints and conversions as for simple assignment apply, taking the type of the scalar
7821  to be the unqualified version of its declared type.
7822 <p><!--para 12 -->
7823  The rest of this subclause deals with initializers for objects that have aggregate or union
7824  type.
7825 <p><!--para 13 -->
7826  The initializer for a structure or union object that has automatic storage duration shall be
7827  either an initializer list as described below, or a single expression that has compatible
7828  structure or union type. In the latter case, the initial value of the object, including
7829  unnamed members, is that of the expression.
7830 <p><!--para 14 -->
7831  An array of character type may be initialized by a character string literal or UTF-8 string
7832  literal, optionally enclosed in braces. Successive bytes of the string literal (including the
7833  terminating null character if there is room or if the array is of unknown size) initialize the
7834  elements of the array.
7835 <p><!--para 15 -->
7836  An array with element type compatible with a qualified or unqualified version of
7837  wchar_t may be initialized by a wide string literal, optionally enclosed in braces.
7838  Successive wide characters of the wide string literal (including the terminating null wide
7839  character if there is room or if the array is of unknown size) initialize the elements of the
7840  array.
7841 <p><!--para 16 -->
7842  Otherwise, the initializer for an object that has aggregate or union type shall be a brace-
7843  enclosed list of initializers for the elements or named members.
7844 <!--page 158 -->
7845 <p><!--para 17 -->
7846  Each brace-enclosed initializer list has an associated current object. When no
7847  designations are present, subobjects of the current object are initialized in order according
7848  to the type of the current object: array elements in increasing subscript order, structure
7849  members in declaration order, and the first named member of a union.<sup><a href="#note148"><b>148)</b></a></sup> In contrast, a
7850  designation causes the following initializer to begin initialization of the subobject
7851  described by the designator. Initialization then continues forward in order, beginning
7852  with the next subobject after that described by the designator.<sup><a href="#note149"><b>149)</b></a></sup>
7853 <p><!--para 18 -->
7854  Each designator list begins its description with the current object associated with the
7855  closest surrounding brace pair. Each item in the designator list (in order) specifies a
7856  particular member of its current object and changes the current object for the next
7857  designator (if any) to be that member.<sup><a href="#note150"><b>150)</b></a></sup> The current object that results at the end of the
7858  designator list is the subobject to be initialized by the following initializer.
7859 <p><!--para 19 -->
7860  The initialization shall occur in initializer list order, each initializer provided for a
7861  particular subobject overriding any previously listed initializer for the same subobject;<sup><a href="#note151"><b>151)</b></a></sup>
7862  all subobjects that are not initialized explicitly shall be initialized implicitly the same as
7863  objects that have static storage duration.
7864 <p><!--para 20 -->
7865  If the aggregate or union contains elements or members that are aggregates or unions,
7866  these rules apply recursively to the subaggregates or contained unions. If the initializer of
7867  a subaggregate or contained union begins with a left brace, the initializers enclosed by
7868  that brace and its matching right brace initialize the elements or members of the
7869  subaggregate or the contained union. Otherwise, only enough initializers from the list are
7870  taken to account for the elements or members of the subaggregate or the first member of
7871  the contained union; any remaining initializers are left to initialize the next element or
7872  member of the aggregate of which the current subaggregate or contained union is a part.
7873 <p><!--para 21 -->
7874  If there are fewer initializers in a brace-enclosed list than there are elements or members
7875  of an aggregate, or fewer characters in a string literal used to initialize an array of known
7876  size than there are elements in the array, the remainder of the aggregate shall be
7877  initialized implicitly the same as objects that have static storage duration.
7878  
7879  
7880  
7881 <!--page 159 -->
7882 <p><!--para 22 -->
7883  If an array of unknown size is initialized, its size is determined by the largest indexed
7884  element with an explicit initializer. The array type is completed at the end of its
7885  initializer list.
7886 <p><!--para 23 -->
7887  The evaluations of the initialization list expressions are indeterminately sequenced with
7888  respect to one another and thus the order in which any side effects occur is
7889  unspecified.<sup><a href="#note152"><b>152)</b></a></sup>
7890 <p><!--para 24 -->
7891  EXAMPLE 1       Provided that <a href="#7.3">&lt;complex.h&gt;</a> has been #included, the declarations
7892 <pre>
7893           int i = <a href="#3.5">3.5</a>;
7894           double complex c = 5 + 3 * I;
7895 </pre>
7896  define and initialize i with the value 3 and c with the value 5.0 + i3.0.
7897  
7898 <p><!--para 25 -->
7899  EXAMPLE 2       The declaration
7900 <pre>
7901           int x[] = { 1, 3, 5 };
7902 </pre>
7903  defines and initializes x as a one-dimensional array object that has three elements, as no size was specified
7904  and there are three initializers.
7905  
7906 <p><!--para 26 -->
7907  EXAMPLE 3       The declaration
7908 <pre>
7909           int y[4][3] =         {
7910                 { 1, 3,         5 },
7911                 { 2, 4,         6 },
7912                 { 3, 5,         7 },
7913           };
7914 </pre>
7915  is a definition with a fully bracketed initialization: 1, 3, and 5 initialize the first row of y (the array object
7916  y[0]), namely y[0][0], y[0][1], and y[0][2]. Likewise the next two lines initialize y[1] and
7917  y[2]. The initializer ends early, so y[3] is initialized with zeros. Precisely the same effect could have
7918  been achieved by
7919 <pre>
7920           int y[4][3] = {
7921                 1, 3, 5, 2, 4, 6, 3, 5, 7
7922           };
7923 </pre>
7924  The initializer for y[0] does not begin with a left brace, so three items from the list are used. Likewise the
7925  next three are taken successively for y[1] and y[2].
7926  
7927 <p><!--para 27 -->
7928  EXAMPLE 4       The declaration
7929 <pre>
7930           int z[4][3] = {
7931                 { 1 }, { 2 }, { 3 }, { 4 }
7932           };
7933 </pre>
7934  initializes the first column of z as specified and initializes the rest with zeros.
7935  
7936 <p><!--para 28 -->
7937  EXAMPLE 5       The declaration
7938 <pre>
7939           struct { int a[3], b; } w[] = { { 1 }, 2 };
7940 </pre>
7941  is a definition with an inconsistently bracketed initialization. It defines an array with two element
7942  
7943  
7944  
7945 <!--page 160 -->
7946  structures: w[0].a[0] is 1 and w[1].a[0] is 2; all the other elements are zero.
7947  
7948 <p><!--para 29 -->
7949  EXAMPLE 6         The declaration
7950 <pre>
7951            short q[4][3][2] = {
7952                  { 1 },
7953                  { 2, 3 },
7954                  { 4, 5, 6 }
7955            };
7956 </pre>
7957  contains an incompletely but consistently bracketed initialization. It defines a three-dimensional array
7958  object: q[0][0][0] is 1, q[1][0][0] is 2, q[1][0][1] is 3, and 4, 5, and 6 initialize
7959  q[2][0][0], q[2][0][1], and q[2][1][0], respectively; all the rest are zero. The initializer for
7960  q[0][0] does not begin with a left brace, so up to six items from the current list may be used. There is
7961  only one, so the values for the remaining five elements are initialized with zero. Likewise, the initializers
7962  for q[1][0] and q[2][0] do not begin with a left brace, so each uses up to six items, initializing their
7963  respective two-dimensional subaggregates. If there had been more than six items in any of the lists, a
7964  diagnostic message would have been issued. The same initialization result could have been achieved by:
7965 <pre>
7966            short q[4][3][2] = {
7967                  1, 0, 0, 0, 0, 0,
7968                  2, 3, 0, 0, 0, 0,
7969                  4, 5, 6
7970            };
7971 </pre>
7972  or by:
7973 <pre>
7974            short q[4][3][2] = {
7975                  {
7976                        { 1 },
7977                  },
7978                  {
7979                        { 2, 3 },
7980                  },
7981                  {
7982                        { 4, 5 },
7983                        { 6 },
7984                  }
7985            };
7986 </pre>
7987  in a fully bracketed form.
7988 <p><!--para 30 -->
7989  Note that the fully bracketed and minimally bracketed forms of initialization are, in general, less likely to
7990  cause confusion.
7991  
7992 <p><!--para 31 -->
7993  EXAMPLE 7         One form of initialization that completes array types involves typedef names. Given the
7994  declaration
7995 <pre>
7996            typedef int A[];          // OK - declared with block scope
7997 </pre>
7998  the declaration
7999 <pre>
8000            A a = { 1, 2 }, b = { 3, 4, 5 };
8001 </pre>
8002  is identical to
8003 <pre>
8004            int a[] = { 1, 2 }, b[] = { 3, 4, 5 };
8005 </pre>
8006  due to the rules for incomplete types.
8007 <!--page 161 -->
8008 <p><!--para 32 -->
8009  EXAMPLE 8       The declaration
8010 <pre>
8011           char s[] = "abc", t[3] = "abc";
8012 </pre>
8013  defines ''plain'' char array objects s and t whose elements are initialized with character string literals.
8014  This declaration is identical to
8015 <pre>
8016           char s[] = { 'a', 'b', 'c', '\0' },
8017                t[] = { 'a', 'b', 'c' };
8018 </pre>
8019  The contents of the arrays are modifiable. On the other hand, the declaration
8020 <pre>
8021           char *p = "abc";
8022 </pre>
8023  defines p with type ''pointer to char'' and initializes it to point to an object with type ''array of char''
8024  with length 4 whose elements are initialized with a character string literal. If an attempt is made to use p to
8025  modify the contents of the array, the behavior is undefined.
8026  
8027 <p><!--para 33 -->
8028  EXAMPLE 9       Arrays can be initialized to correspond to the elements of an enumeration by using
8029  designators:
8030 <pre>
8031           enum { member_one,           member_two };
8032           const char *nm[] =           {
8033                 [member_two]           = "member two",
8034                 [member_one]           = "member one",
8035           };
8036 </pre>
8037  
8038 <p><!--para 34 -->
8039  EXAMPLE 10       Structure members can be initialized to nonzero values without depending on their order:
8040 <pre>
8041           div_t answer = { .quot = 2, .rem = -1 };
8042 </pre>
8043  
8044 <p><!--para 35 -->
8045  EXAMPLE 11 Designators can be used to provide explicit initialization when unadorned initializer lists
8046  might be misunderstood:
8047 <pre>
8048           struct { int a[3], b; } w[] =
8049                 { [0].a = {1}, [1].a[0] = 2 };
8050 </pre>
8051  
8052 <p><!--para 36 -->
8053  EXAMPLE 12       Space can be ''allocated'' from both ends of an array by using a single designator:
8054 <pre>
8055           int a[MAX] = {
8056                 1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0
8057           };
8058 </pre>
8059 <p><!--para 37 -->
8060  In the above, if MAX is greater than ten, there will be some zero-valued elements in the middle; if it is less
8061  than ten, some of the values provided by the first five initializers will be overridden by the second five.
8062  
8063 <p><!--para 38 -->
8064  EXAMPLE 13       Any member of a union can be initialized:
8065 <pre>
8066           union { /* ... */ } u = { .any_member = 42 };
8067 </pre>
8068  
8069 <p><b> Forward references</b>: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>).
8070 <!--page 162 -->
8071
8072 <p><b>Footnotes</b>
8073 <p><small><a name="note148" href="#note148">148)</a> If the initializer list for a subaggregate or contained union does not begin with a left brace, its
8074  subobjects are initialized as usual, but the subaggregate or contained union does not become the
8075  current object: current objects are associated only with brace-enclosed initializer lists.
8076 </small>
8077 <p><small><a name="note149" href="#note149">149)</a> After a union member is initialized, the next object is not the next member of the union; instead, it is
8078  the next subobject of an object containing the union.
8079 </small>
8080 <p><small><a name="note150" href="#note150">150)</a> Thus, a designator can only specify a strict subobject of the aggregate or union that is associated with
8081  the surrounding brace pair. Note, too, that each separate designator list is independent.
8082 </small>
8083 <p><small><a name="note151" href="#note151">151)</a> Any initializer for the subobject which is overridden and so not used to initialize that subobject might
8084  not be evaluated at all.
8085 </small>
8086 <p><small><a name="note152" href="#note152">152)</a> In particular, the evaluation order need not be the same as the order of subobject initialization.
8087 </small>
8088
8089 <p><small><a href="#Contents">Contents</a></small>
8090 <h4><a name="6.7.10" href="#6.7.10">6.7.10 Static assertions</a></h4>
8091 <p><b>Syntax</b>
8092 <p><!--para 1 -->
8093 <pre>
8094           static_assert-declaration:
8095                   _Static_assert ( constant-expression , string-literal ) ;
8096 </pre>
8097 <p><b>Constraints</b>
8098 <p><!--para 2 -->
8099  The constant expression shall compare unequal to 0.
8100 <p><b>Semantics</b>
8101 <p><!--para 3 -->
8102  The constant expression shall be an integer constant expression. If the value of the
8103  constant expression compares unequal to 0, the declaration has no effect. Otherwise, the
8104  constraint is violated and the implementation shall produce a diagnostic message that
8105  includes the text of the string literal, except that characters not in the basic source
8106  character set are not required to appear in the message.
8107 <p><b> Forward references</b>: diagnostics (<a href="#7.2">7.2</a>).
8108 <!--page 163 -->
8109
8110 <p><small><a href="#Contents">Contents</a></small>
8111 <h3><a name="6.8" href="#6.8">6.8 Statements and blocks</a></h3>
8112 <p><b>Syntax</b>
8113 <p><!--para 1 -->
8114 <pre>
8115           statement:
8116                  labeled-statement
8117                  compound-statement
8118                  expression-statement
8119                  selection-statement
8120                  iteration-statement
8121                  jump-statement
8122 </pre>
8123 <p><b>Semantics</b>
8124 <p><!--para 2 -->
8125  A statement specifies an action to be performed. Except as indicated, statements are
8126  executed in sequence.
8127 <p><!--para 3 -->
8128  A block allows a set of declarations and statements to be grouped into one syntactic unit.
8129  The initializers of objects that have automatic storage duration, and the variable length
8130  array declarators of ordinary identifiers with block scope, are evaluated and the values are
8131  stored in the objects (including storing an indeterminate value in objects without an
8132  initializer) each time the declaration is reached in the order of execution, as if it were a
8133  statement, and within each declaration in the order that declarators appear.
8134 <p><!--para 4 -->
8135  A full expression is an expression that is not part of another expression or of a declarator.
8136  Each of the following is a full expression: an initializer that is not part of a compound
8137  literal; the expression in an expression statement; the controlling expression of a selection
8138  statement (if or switch); the controlling expression of a while or do statement; each
8139  of the (optional) expressions of a for statement; the (optional) expression in a return
8140  statement. There is a sequence point between the evaluation of a full expression and the
8141  evaluation of the next full expression to be evaluated.
8142 <p><b> Forward references</b>: expression and null statements (<a href="#6.8.3">6.8.3</a>), selection statements
8143  (<a href="#6.8.4">6.8.4</a>), iteration statements (<a href="#6.8.5">6.8.5</a>), the return statement (<a href="#6.8.6.4">6.8.6.4</a>).
8144
8145 <p><small><a href="#Contents">Contents</a></small>
8146 <h4><a name="6.8.1" href="#6.8.1">6.8.1 Labeled statements</a></h4>
8147 <p><b>Syntax</b>
8148 <p><!--para 1 -->
8149 <pre>
8150           labeled-statement:
8151                  identifier : statement
8152                  case constant-expression : statement
8153                  default : statement
8154 </pre>
8155 <p><b>Constraints</b>
8156 <p><!--para 2 -->
8157  A case or default label shall appear only in a switch statement. Further
8158  constraints on such labels are discussed under the switch statement.
8159 <!--page 164 -->
8160 <p><!--para 3 -->
8161  Label names shall be unique within a function.
8162 <p><b>Semantics</b>
8163 <p><!--para 4 -->
8164  Any statement may be preceded by a prefix that declares an identifier as a label name.
8165  Labels in themselves do not alter the flow of control, which continues unimpeded across
8166  them.
8167 <p><b> Forward references</b>: the goto statement (<a href="#6.8.6.1">6.8.6.1</a>), the switch statement (<a href="#6.8.4.2">6.8.4.2</a>).
8168
8169 <p><small><a href="#Contents">Contents</a></small>
8170 <h4><a name="6.8.2" href="#6.8.2">6.8.2 Compound statement</a></h4>
8171 <p><b>Syntax</b>
8172 <p><!--para 1 -->
8173 <pre>
8174           compound-statement:
8175                 { block-item-list<sub>opt</sub> }
8176           block-item-list:
8177                   block-item
8178                   block-item-list block-item
8179           block-item:
8180                   declaration
8181                   statement
8182 </pre>
8183 <p><b>Semantics</b>
8184 <p><!--para 2 -->
8185  A compound statement is a block.
8186
8187 <p><small><a href="#Contents">Contents</a></small>
8188 <h4><a name="6.8.3" href="#6.8.3">6.8.3 Expression and null statements</a></h4>
8189 <p><b>Syntax</b>
8190 <p><!--para 1 -->
8191 <pre>
8192           expression-statement:
8193                  expression<sub>opt</sub> ;
8194 </pre>
8195 <p><b>Semantics</b>
8196 <p><!--para 2 -->
8197  The expression in an expression statement is evaluated as a void expression for its side
8198  effects.<sup><a href="#note153"><b>153)</b></a></sup>
8199 <p><!--para 3 -->
8200  A null statement (consisting of just a semicolon) performs no operations.
8201 <p><!--para 4 -->
8202  EXAMPLE 1 If a function call is evaluated as an expression statement for its side effects only, the
8203  discarding of its value may be made explicit by converting the expression to a void expression by means of
8204  a cast:
8205 <pre>
8206           int p(int);
8207           /* ... */
8208           (void)p(0);
8209 </pre>
8210  
8211  
8212  
8213 <!--page 165 -->
8214 <p><!--para 5 -->
8215  EXAMPLE 2       In the program fragment
8216 <pre>
8217           char *s;
8218           /* ... */
8219           while (*s++ != '\0')
8220                   ;
8221 </pre>
8222  a null statement is used to supply an empty loop body to the iteration statement.
8223  
8224 <p><!--para 6 -->
8225  EXAMPLE 3       A null statement may also be used to carry a label just before the closing } of a compound
8226  statement.
8227 <pre>
8228           while (loop1) {
8229                 /* ... */
8230                 while (loop2) {
8231                         /* ... */
8232                         if (want_out)
8233                                 goto end_loop1;
8234                         /* ... */
8235                 }
8236                 /* ... */
8237           end_loop1: ;
8238           }
8239 </pre>
8240  
8241 <p><b> Forward references</b>: iteration statements (<a href="#6.8.5">6.8.5</a>).
8242
8243 <p><b>Footnotes</b>
8244 <p><small><a name="note153" href="#note153">153)</a> Such as assignments, and function calls which have side effects.
8245 </small>
8246
8247 <p><small><a href="#Contents">Contents</a></small>
8248 <h4><a name="6.8.4" href="#6.8.4">6.8.4 Selection statements</a></h4>
8249 <p><b>Syntax</b>
8250 <p><!--para 1 -->
8251 <pre>
8252           selection-statement:
8253                   if ( expression ) statement
8254                   if ( expression ) statement else statement
8255                   switch ( expression ) statement
8256 </pre>
8257 <p><b>Semantics</b>
8258 <p><!--para 2 -->
8259  A selection statement selects among a set of statements depending on the value of a
8260  controlling expression.
8261 <p><!--para 3 -->
8262  A selection statement is a block whose scope is a strict subset of the scope of its
8263  enclosing block. Each associated substatement is also a block whose scope is a strict
8264  subset of the scope of the selection statement.
8265
8266 <p><small><a href="#Contents">Contents</a></small>
8267 <h5><a name="6.8.4.1" href="#6.8.4.1">6.8.4.1 The if statement</a></h5>
8268 <p><b>Constraints</b>
8269 <p><!--para 1 -->
8270  The controlling expression of an if statement shall have scalar type.
8271 <p><b>Semantics</b>
8272 <p><!--para 2 -->
8273  In both forms, the first substatement is executed if the expression compares unequal to 0.
8274  In the else form, the second substatement is executed if the expression compares equal
8275 <!--page 166 -->
8276  to 0. If the first substatement is reached via a label, the second substatement is not
8277  executed.
8278 <p><!--para 3 -->
8279  An else is associated with the lexically nearest preceding if that is allowed by the
8280  syntax.
8281
8282 <p><small><a href="#Contents">Contents</a></small>
8283 <h5><a name="6.8.4.2" href="#6.8.4.2">6.8.4.2 The switch statement</a></h5>
8284 <p><b>Constraints</b>
8285 <p><!--para 1 -->
8286  The controlling expression of a switch statement shall have integer type.
8287 <p><!--para 2 -->
8288  If a switch statement has an associated case or default label within the scope of an
8289  identifier with a variably modified type, the entire switch statement shall be within the
8290  scope of that identifier.<sup><a href="#note154"><b>154)</b></a></sup>
8291 <p><!--para 3 -->
8292  The expression of each case label shall be an integer constant expression and no two of
8293  the case constant expressions in the same switch statement shall have the same value
8294  after conversion. There may be at most one default label in a switch statement.
8295  (Any enclosed switch statement may have a default label or case constant
8296  expressions with values that duplicate case constant expressions in the enclosing
8297  switch statement.)
8298 <p><b>Semantics</b>
8299 <p><!--para 4 -->
8300  A switch statement causes control to jump to, into, or past the statement that is the
8301  switch body, depending on the value of a controlling expression, and on the presence of a
8302  default label and the values of any case labels on or in the switch body. A case or
8303  default label is accessible only within the closest enclosing switch statement.
8304 <p><!--para 5 -->
8305  The integer promotions are performed on the controlling expression. The constant
8306  expression in each case label is converted to the promoted type of the controlling
8307  expression. If a converted value matches that of the promoted controlling expression,
8308  control jumps to the statement following the matched case label. Otherwise, if there is
8309  a default label, control jumps to the labeled statement. If no converted case constant
8310  expression matches and there is no default label, no part of the switch body is
8311  executed.
8312 <p><b>Implementation limits</b>
8313 <p><!--para 6 -->
8314  As discussed in <a href="#5.2.4.1">5.2.4.1</a>, the implementation may limit the number of case values in a
8315  switch statement.
8316  
8317  
8318  
8319  
8320 <!--page 167 -->
8321 <p><!--para 7 -->
8322  EXAMPLE        In the artificial program fragment
8323 <pre>
8324           switch (expr)
8325           {
8326                 int i = 4;
8327                 f(i);
8328           case 0:
8329                 i = 17;
8330                 /* falls through into default code */
8331           default:
8332                 printf("%d\n", i);
8333           }
8334 </pre>
8335  the object whose identifier is i exists with automatic storage duration (within the block) but is never
8336  initialized, and thus if the controlling expression has a nonzero value, the call to the printf function will
8337  access an indeterminate value. Similarly, the call to the function f cannot be reached.
8338  
8339
8340 <p><b>Footnotes</b>
8341 <p><small><a name="note154" href="#note154">154)</a> That is, the declaration either precedes the switch statement, or it follows the last case or
8342  default label associated with the switch that is in the block containing the declaration.
8343 </small>
8344
8345 <p><small><a href="#Contents">Contents</a></small>
8346 <h4><a name="6.8.5" href="#6.8.5">6.8.5 Iteration statements</a></h4>
8347 <p><b>Syntax</b>
8348 <p><!--para 1 -->
8349 <pre>
8350           iteration-statement:
8351                   while ( expression ) statement
8352                   do statement while ( expression ) ;
8353                   for ( expression<sub>opt</sub> ; expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement
8354                   for ( declaration expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement
8355 </pre>
8356 <p><b>Constraints</b>
8357 <p><!--para 2 -->
8358  The controlling expression of an iteration statement shall have scalar type.
8359 <p><!--para 3 -->
8360  The declaration part of a for statement shall only declare identifiers for objects having
8361  storage class auto or register.
8362 <p><b>Semantics</b>
8363 <p><!--para 4 -->
8364  An iteration statement causes a statement called the loop body to be executed repeatedly
8365  until the controlling expression compares equal to 0. The repetition occurs regardless of
8366  whether the loop body is entered from the iteration statement or by a jump.<sup><a href="#note155"><b>155)</b></a></sup>
8367 <p><!--para 5 -->
8368  An iteration statement is a block whose scope is a strict subset of the scope of its
8369  enclosing block. The loop body is also a block whose scope is a strict subset of the scope
8370  of the iteration statement.
8371 <p><!--para 6 -->
8372  An iteration statement whose controlling expression is not a constant expression,<sup><a href="#note156"><b>156)</b></a></sup> that
8373  performs no input/output operations, does not access volatile objects, and performs no
8374  synchronization or atomic operations in its body, controlling expression, or (in the case of
8375  
8376 <!--page 168 -->
8377  a for statement) its expression-3, may be assumed by the implementation to
8378  terminate.<sup><a href="#note157"><b>157)</b></a></sup>
8379
8380 <p><b>Footnotes</b>
8381 <p><small><a name="note155" href="#note155">155)</a> Code jumped over is not executed. In particular, the controlling expression of a for or while
8382  statement is not evaluated before entering the loop body, nor is clause-1 of a for statement.
8383 </small>
8384 <p><small><a name="note156" href="#note156">156)</a> An omitted controlling expression is replaced by a nonzero constant, which is a constant expression.
8385 </small>
8386 <p><small><a name="note157" href="#note157">157)</a> This is intended to allow compiler transformations such as removal of empty loops even when
8387  termination cannot be proven.
8388 </small>
8389
8390 <p><small><a href="#Contents">Contents</a></small>
8391 <h5><a name="6.8.5.1" href="#6.8.5.1">6.8.5.1 The while statement</a></h5>
8392 <p><!--para 1 -->
8393  The evaluation of the controlling expression takes place before each execution of the loop
8394  body.
8395
8396 <p><small><a href="#Contents">Contents</a></small>
8397 <h5><a name="6.8.5.2" href="#6.8.5.2">6.8.5.2 The do statement</a></h5>
8398 <p><!--para 1 -->
8399  The evaluation of the controlling expression takes place after each execution of the loop
8400  body.
8401
8402 <p><small><a href="#Contents">Contents</a></small>
8403 <h5><a name="6.8.5.3" href="#6.8.5.3">6.8.5.3 The for statement</a></h5>
8404 <p><!--para 1 -->
8405  The statement
8406 <pre>
8407           for ( clause-1 ; expression-2 ; expression-3 ) statement
8408 </pre>
8409  behaves as follows: The expression expression-2 is the controlling expression that is
8410  evaluated before each execution of the loop body. The expression expression-3 is
8411  evaluated as a void expression after each execution of the loop body. If clause-1 is a
8412  declaration, the scope of any identifiers it declares is the remainder of the declaration and
8413  the entire loop, including the other two expressions; it is reached in the order of execution
8414  before the first evaluation of the controlling expression. If clause-1 is an expression, it is
8415  evaluated as a void expression before the first evaluation of the controlling expression.<sup><a href="#note158"><b>158)</b></a></sup>
8416 <p><!--para 2 -->
8417  Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a
8418  nonzero constant.
8419
8420 <p><b>Footnotes</b>
8421 <p><small><a name="note158" href="#note158">158)</a> Thus, clause-1 specifies initialization for the loop, possibly declaring one or more variables for use in
8422  the loop; the controlling expression, expression-2, specifies an evaluation made before each iteration,
8423  such that execution of the loop continues until the expression compares equal to 0; and expression-3
8424  specifies an operation (such as incrementing) that is performed after each iteration.
8425 </small>
8426
8427 <p><small><a href="#Contents">Contents</a></small>
8428 <h4><a name="6.8.6" href="#6.8.6">6.8.6 Jump statements</a></h4>
8429 <p><b>Syntax</b>
8430 <p><!--para 1 -->
8431 <pre>
8432           jump-statement:
8433                  goto identifier ;
8434                  continue ;
8435                  break ;
8436                  return expression<sub>opt</sub> ;
8437 </pre>
8438  
8439  
8440  
8441  
8442 <!--page 169 -->
8443 <p><b>Semantics</b>
8444 <p><!--para 2 -->
8445  A jump statement causes an unconditional jump to another place.
8446
8447 <p><small><a href="#Contents">Contents</a></small>
8448 <h5><a name="6.8.6.1" href="#6.8.6.1">6.8.6.1 The goto statement</a></h5>
8449 <p><b>Constraints</b>
8450 <p><!--para 1 -->
8451  The identifier in a goto statement shall name a label located somewhere in the enclosing
8452  function. A goto statement shall not jump from outside the scope of an identifier having
8453  a variably modified type to inside the scope of that identifier.
8454 <p><b>Semantics</b>
8455 <p><!--para 2 -->
8456  A goto statement causes an unconditional jump to the statement prefixed by the named
8457  label in the enclosing function.
8458 <p><!--para 3 -->
8459  EXAMPLE 1 It is sometimes convenient to jump into the middle of a complicated set of statements. The
8460  following outline presents one possible approach to a problem based on these three assumptions:
8461 <ol>
8462 <li>  The general initialization code accesses objects only visible to the current function.
8463 <li>  The general initialization code is too large to warrant duplication.
8464 <li>  The code to determine the next operation is at the head of the loop. (To allow it to be reached by
8465  continue statements, for example.)
8466 <!--page 170 -->
8467 <pre>
8468     /* ... */
8469     goto first_time;
8470     for (;;) {
8471             // determine next operation
8472             /* ... */
8473             if (need to reinitialize) {
8474                     // reinitialize-only code
8475                     /* ... */
8476             first_time:
8477                     // general initialization code
8478                     /* ... */
8479                     continue;
8480             }
8481             // handle other operations
8482             /* ... */
8483     }
8484 </pre>
8485 </ol>
8486 <p><!--para 4 -->
8487  EXAMPLE 2 A goto statement is not allowed to jump past any declarations of objects with variably
8488  modified types. A jump within the scope, however, is permitted.
8489 <pre>
8490          goto lab3;                         // invalid: going INTO scope of VLA.
8491          {
8492                double a[n];
8493                a[j] = <a href="#4.4">4.4</a>;
8494          lab3:
8495                a[j] = <a href="#3.3">3.3</a>;
8496                goto lab4;                   // valid: going WITHIN scope of VLA.
8497                a[j] = <a href="#5.5">5.5</a>;
8498          lab4:
8499                a[j] = <a href="#6.6">6.6</a>;
8500          }
8501          goto lab4;                         // invalid: going INTO scope of VLA.
8502 </pre>
8503  
8504
8505 <p><small><a href="#Contents">Contents</a></small>
8506 <h5><a name="6.8.6.2" href="#6.8.6.2">6.8.6.2 The continue statement</a></h5>
8507 <p><b>Constraints</b>
8508 <p><!--para 1 -->
8509  A continue statement shall appear only in or as a loop body.
8510 <p><b>Semantics</b>
8511 <p><!--para 2 -->
8512  A continue statement causes a jump to the loop-continuation portion of the smallest
8513  enclosing iteration statement; that is, to the end of the loop body. More precisely, in each
8514  of the statements
8515  while (/* ... */) {                  do {                                 for (/* ... */) {
8516 <pre>
8517     /* ... */                            /* ... */                            /* ... */
8518     continue;                            continue;                            continue;
8519     /* ... */                            /* ... */                            /* ... */
8520 </pre>
8521  contin: ;                            contin: ;                            contin: ;
8522  }                                    } while (/* ... */);                 }
8523  unless the continue statement shown is in an enclosed iteration statement (in which
8524  case it is interpreted within that statement), it is equivalent to goto contin;.<sup><a href="#note159"><b>159)</b></a></sup>
8525
8526 <p><b>Footnotes</b>
8527 <p><small><a name="note159" href="#note159">159)</a> Following the contin: label is a null statement.
8528 </small>
8529
8530 <p><small><a href="#Contents">Contents</a></small>
8531 <h5><a name="6.8.6.3" href="#6.8.6.3">6.8.6.3 The break statement</a></h5>
8532 <p><b>Constraints</b>
8533 <p><!--para 1 -->
8534  A break statement shall appear only in or as a switch body or loop body.
8535 <p><b>Semantics</b>
8536 <p><!--para 2 -->
8537  A break statement terminates execution of the smallest enclosing switch or iteration
8538  statement.
8539  
8540  
8541  
8542 <!--page 171 -->
8543
8544 <p><small><a href="#Contents">Contents</a></small>
8545 <h5><a name="6.8.6.4" href="#6.8.6.4">6.8.6.4 The return statement</a></h5>
8546 <p><b>Constraints</b>
8547 <p><!--para 1 -->
8548  A return statement with an expression shall not appear in a function whose return type
8549  is void. A return statement without an expression shall only appear in a function
8550  whose return type is void.
8551 <p><b>Semantics</b>
8552 <p><!--para 2 -->
8553  A return statement terminates execution of the current function and returns control to
8554  its caller. A function may have any number of return statements.
8555 <p><!--para 3 -->
8556  If a return statement with an expression is executed, the value of the expression is
8557  returned to the caller as the value of the function call expression. If the expression has a
8558  type different from the return type of the function in which it appears, the value is
8559  converted as if by assignment to an object having the return type of the function.<sup><a href="#note160"><b>160)</b></a></sup>
8560 <p><!--para 4 -->
8561  EXAMPLE       In:
8562 <pre>
8563          struct s { double i; } f(void);
8564          union {
8565                struct {
8566                      int f1;
8567                      struct s f2;
8568                } u1;
8569                struct {
8570                      struct s f3;
8571                      int f4;
8572                } u2;
8573          } g;
8574          struct s f(void)
8575          {
8576                return g.u1.f2;
8577          }
8578          /* ... */
8579          g.u2.f3 = f();
8580 </pre>
8581  there is no undefined behavior, although there would be if the assignment were done directly (without using
8582  a function call to fetch the value).
8583  
8584  
8585  
8586  
8587 <!--page 172 -->
8588
8589 <p><b>Footnotes</b>
8590 <p><small><a name="note160" href="#note160">160)</a> The return statement is not an assignment. The overlap restriction of subclause <a href="#6.5.16.1">6.5.16.1</a> does not
8591  apply to the case of function return. The representation of floating-point values may have wider range
8592  or precision than implied by the type; a cast may be used to remove this extra range and precision.
8593 </small>
8594
8595 <p><small><a href="#Contents">Contents</a></small>
8596 <h3><a name="6.9" href="#6.9">6.9 External definitions</a></h3>
8597 <p><b>Syntax</b>
8598 <p><!--para 1 -->
8599 <pre>
8600           translation-unit:
8601                   external-declaration
8602                   translation-unit external-declaration
8603           external-declaration:
8604                  function-definition
8605                  declaration
8606 </pre>
8607 <p><b>Constraints</b>
8608 <p><!--para 2 -->
8609  The storage-class specifiers auto and register shall not appear in the declaration
8610  specifiers in an external declaration.
8611 <p><!--para 3 -->
8612  There shall be no more than one external definition for each identifier declared with
8613  internal linkage in a translation unit. Moreover, if an identifier declared with internal
8614  linkage is used in an expression (other than as a part of the operand of a sizeof
8615  operator whose result is an integer constant), there shall be exactly one external definition
8616  for the identifier in the translation unit.
8617 <p><b>Semantics</b>
8618 <p><!--para 4 -->
8619  As discussed in <a href="#5.1.1.1">5.1.1.1</a>, the unit of program text after preprocessing is a translation unit,
8620  which consists of a sequence of external declarations. These are described as ''external''
8621  because they appear outside any function (and hence have file scope). As discussed in
8622  <a href="#6.7">6.7</a>, a declaration that also causes storage to be reserved for an object or a function named
8623  by the identifier is a definition.
8624 <p><!--para 5 -->
8625  An external definition is an external declaration that is also a definition of a function
8626  (other than an inline definition) or an object. If an identifier declared with external
8627  linkage is used in an expression (other than as part of the operand of a sizeof operator
8628  whose result is an integer constant), somewhere in the entire program there shall be
8629  exactly one external definition for the identifier; otherwise, there shall be no more than
8630  one.<sup><a href="#note161"><b>161)</b></a></sup>
8631  
8632  
8633  
8634  
8635 <!--page 173 -->
8636
8637 <p><b>Footnotes</b>
8638 <p><small><a name="note161" href="#note161">161)</a> Thus, if an identifier declared with external linkage is not used in an expression, there need be no
8639  external definition for it.
8640 </small>
8641
8642 <p><small><a href="#Contents">Contents</a></small>
8643 <h4><a name="6.9.1" href="#6.9.1">6.9.1 Function definitions</a></h4>
8644 <p><b>Syntax</b>
8645 <p><!--para 1 -->
8646 <pre>
8647           function-definition:
8648                  declaration-specifiers declarator declaration-list<sub>opt</sub> compound-statement
8649           declaration-list:
8650                  declaration
8651                  declaration-list declaration
8652 </pre>
8653 <p><b>Constraints</b>
8654 <p><!--para 2 -->
8655  The identifier declared in a function definition (which is the name of the function) shall
8656  have a function type, as specified by the declarator portion of the function definition.<sup><a href="#note162"><b>162)</b></a></sup>
8657 <p><!--para 3 -->
8658  The return type of a function shall be void or a complete object type other than array
8659  type.
8660 <p><!--para 4 -->
8661  The storage-class specifier, if any, in the declaration specifiers shall be either extern or
8662  static.
8663 <p><!--para 5 -->
8664  If the declarator includes a parameter type list, the declaration of each parameter shall
8665  include an identifier, except for the special case of a parameter list consisting of a single
8666  parameter of type void, in which case there shall not be an identifier. No declaration list
8667  shall follow.
8668 <p><!--para 6 -->
8669  If the declarator includes an identifier list, each declaration in the declaration list shall
8670  have at least one declarator, those declarators shall declare only identifiers from the
8671  identifier list, and every identifier in the identifier list shall be declared. An identifier
8672  declared as a typedef name shall not be redeclared as a parameter. The declarations in the
8673  declaration list shall contain no storage-class specifier other than register and no
8674  initializations.
8675  
8676  
8677  
8678 <!--page 174 -->
8679 <p><b>Semantics</b>
8680 <p><!--para 7 -->
8681  The declarator in a function definition specifies the name of the function being defined
8682  and the identifiers of its parameters. If the declarator includes a parameter type list, the
8683  list also specifies the types of all the parameters; such a declarator also serves as a
8684  function prototype for later calls to the same function in the same translation unit. If the
8685  declarator includes an identifier list,<sup><a href="#note163"><b>163)</b></a></sup> the types of the parameters shall be declared in a
8686  following declaration list. In either case, the type of each parameter is adjusted as
8687  described in <a href="#6.7.6.3">6.7.6.3</a> for a parameter type list; the resulting type shall be a complete object
8688  type.
8689 <p><!--para 8 -->
8690  If a function that accepts a variable number of arguments is defined without a parameter
8691  type list that ends with the ellipsis notation, the behavior is undefined.
8692 <p><!--para 9 -->
8693  Each parameter has automatic storage duration; its identifier is an lvalue.<sup><a href="#note164"><b>164)</b></a></sup> The layout
8694  of the storage for parameters is unspecified.
8695 <p><!--para 10 -->
8696  On entry to the function, the size expressions of each variably modified parameter are
8697  evaluated and the value of each argument expression is converted to the type of the
8698  corresponding parameter as if by assignment. (Array expressions and function
8699  designators as arguments were converted to pointers before the call.)
8700 <p><!--para 11 -->
8701  After all parameters have been assigned, the compound statement that constitutes the
8702  body of the function definition is executed.
8703 <p><!--para 12 -->
8704  If the } that terminates a function is reached, and the value of the function call is used by
8705  the caller, the behavior is undefined.
8706 <p><!--para 13 -->
8707  EXAMPLE 1       In the following:
8708 <pre>
8709           extern int max(int a, int b)
8710           {
8711                 return a &gt; b ? a : b;
8712           }
8713 </pre>
8714  extern is the storage-class specifier and int is the type specifier; max(int a, int b) is the
8715  function declarator; and
8716 <pre>
8717           { return a &gt; b ? a : b; }
8718 </pre>
8719  is the function body. The following similar definition uses the identifier-list form for the parameter
8720  declarations:
8721  
8722  
8723  
8724  
8725 <!--page 175 -->
8726 <pre>
8727           extern int max(a, b)
8728           int a, b;
8729           {
8730                 return a &gt; b ? a : b;
8731           }
8732 </pre>
8733  Here int a, b; is the declaration list for the parameters. The difference between these two definitions is
8734  that the first form acts as a prototype declaration that forces conversion of the arguments of subsequent calls
8735  to the function, whereas the second form does not.
8736  
8737 <p><!--para 14 -->
8738  EXAMPLE 2           To pass one function to another, one might say
8739 <pre>
8740                       int f(void);
8741                       /* ... */
8742                       g(f);
8743 </pre>
8744  Then the definition of g might read
8745 <pre>
8746           void g(int (*funcp)(void))
8747           {
8748                 /* ... */
8749                 (*funcp)(); /* or funcp(); ...                    */
8750           }
8751 </pre>
8752  or, equivalently,
8753 <pre>
8754           void g(int func(void))
8755           {
8756                 /* ... */
8757                 func(); /* or (*func)(); ...                   */
8758           }
8759 </pre>
8760  
8761
8762 <p><b>Footnotes</b>
8763 <p><small><a name="note162" href="#note162">162)</a> The intent is that the type category in a function definition cannot be inherited from a typedef:
8764
8765 <pre>
8766           typedef int F(void);                          //   type F is ''function with no parameters
8767                                                         //                  returning int''
8768           F f, g;                                       //   f and g both have type compatible with F
8769           F f { /* ... */ }                             //   WRONG: syntax/constraint error
8770           F g() { /* ... */ }                           //   WRONG: declares that g returns a function
8771           int f(void) { /* ... */ }                     //   RIGHT: f has type compatible with F
8772           int g() { /* ... */ }                         //   RIGHT: g has type compatible with F
8773           F *e(void) { /* ... */ }                      //   e returns a pointer to a function
8774           F *((e))(void) { /* ... */ }                  //   same: parentheses irrelevant
8775           int (*fp)(void);                              //   fp points to a function that has type F
8776           F *Fp;                                        //   Fp points to a function that has type F
8777 </pre>
8778 </small>
8779 <p><small><a name="note163" href="#note163">163)</a> See ''future language directions'' (<a href="#6.11.7">6.11.7</a>).
8780 </small>
8781 <p><small><a name="note164" href="#note164">164)</a> A parameter identifier cannot be redeclared in the function body except in an enclosed block.
8782 </small>
8783
8784 <p><small><a href="#Contents">Contents</a></small>
8785 <h4><a name="6.9.2" href="#6.9.2">6.9.2 External object definitions</a></h4>
8786 <p><b>Semantics</b>
8787 <p><!--para 1 -->
8788  If the declaration of an identifier for an object has file scope and an initializer, the
8789  declaration is an external definition for the identifier.
8790 <p><!--para 2 -->
8791  A declaration of an identifier for an object that has file scope without an initializer, and
8792  without a storage-class specifier or with the storage-class specifier static, constitutes a
8793  tentative definition. If a translation unit contains one or more tentative definitions for an
8794  identifier, and the translation unit contains no external definition for that identifier, then
8795  the behavior is exactly as if the translation unit contains a file scope declaration of that
8796  identifier, with the composite type as of the end of the translation unit, with an initializer
8797  equal to 0.
8798 <p><!--para 3 -->
8799  If the declaration of an identifier for an object is a tentative definition and has internal
8800  linkage, the declared type shall not be an incomplete type.
8801 <!--page 176 -->
8802 <p><!--para 4 -->
8803  EXAMPLE 1
8804 <pre>
8805           int i1 = 1;                    // definition, external linkage
8806           static int i2 = 2;             // definition, internal linkage
8807           extern int i3 = 3;             // definition, external linkage
8808           int i4;                        // tentative definition, external linkage
8809           static int i5;                 // tentative definition, internal linkage
8810           int   i1;                      // valid tentative definition, refers to previous
8811           int   i2;                      // <a href="#6.2.2">6.2.2</a> renders undefined, linkage disagreement
8812           int   i3;                      // valid tentative definition, refers to previous
8813           int   i4;                      // valid tentative definition, refers to previous
8814           int   i5;                      // <a href="#6.2.2">6.2.2</a> renders undefined, linkage disagreement
8815           extern    int   i1;            // refers to previous, whose linkage is external
8816           extern    int   i2;            // refers to previous, whose linkage is internal
8817           extern    int   i3;            // refers to previous, whose linkage is external
8818           extern    int   i4;            // refers to previous, whose linkage is external
8819           extern    int   i5;            // refers to previous, whose linkage is internal
8820 </pre>
8821  
8822 <p><!--para 5 -->
8823  EXAMPLE 2       If at the end of the translation unit containing
8824 <pre>
8825           int i[];
8826 </pre>
8827  the array i still has incomplete type, the implicit initializer causes it to have one element, which is set to
8828  zero on program startup.
8829 <!--page 177 -->
8830
8831 <p><small><a href="#Contents">Contents</a></small>
8832 <h3><a name="6.10" href="#6.10">6.10 Preprocessing directives</a></h3>
8833 <p><b>Syntax</b>
8834 <p><!--para 1 -->
8835 <!--page 178 -->
8836 <pre>
8837           preprocessing-file:
8838                  group<sub>opt</sub>
8839           group:
8840                    group-part
8841                    group group-part
8842           group-part:
8843                  if-section
8844                  control-line
8845                  text-line
8846                  # non-directive
8847           if-section:
8848                    if-group elif-groups<sub>opt</sub> else-group<sub>opt</sub> endif-line
8849           if-group:
8850                   # if     constant-expression new-line group<sub>opt</sub>
8851                   # ifdef identifier new-line group<sub>opt</sub>
8852                   # ifndef identifier new-line group<sub>opt</sub>
8853           elif-groups:
8854                   elif-group
8855                   elif-groups elif-group
8856           elif-group:
8857                   # elif       constant-expression new-line group<sub>opt</sub>
8858           else-group:
8859                   # else       new-line group<sub>opt</sub>
8860           endif-line:
8861                   # endif      new-line
8862           control-line:
8863                  # include pp-tokens new-line
8864                  # define identifier replacement-list new-line
8865                  # define identifier lparen identifier-list<sub>opt</sub> )
8866                                                  replacement-list new-line
8867                  # define identifier lparen ... ) replacement-list new-line
8868                  # define identifier lparen identifier-list , ... )
8869                                                  replacement-list new-line
8870                  # undef   identifier new-line
8871                  # line    pp-tokens new-line
8872                  # error   pp-tokens<sub>opt</sub> new-line
8873                  # pragma pp-tokens<sub>opt</sub> new-line
8874                  #         new-line
8875           text-line:
8876                   pp-tokens<sub>opt</sub> new-line
8877           non-directive:
8878                  pp-tokens new-line
8879           lparen:
8880                     a ( character not immediately preceded by white-space
8881           replacement-list:
8882                  pp-tokens<sub>opt</sub>
8883           pp-tokens:
8884                  preprocessing-token
8885                  pp-tokens preprocessing-token
8886           new-line:
8887                  the new-line character
8888 </pre>
8889 <p><b>Description</b>
8890 <p><!--para 2 -->
8891  A preprocessing directive consists of a sequence of preprocessing tokens that satisfies the
8892  following constraints: The first token in the sequence is a # preprocessing token that (at
8893  the start of translation phase 4) is either the first character in the source file (optionally
8894  after white space containing no new-line characters) or that follows white space
8895  containing at least one new-line character. The last token in the sequence is the first new-
8896  line character that follows the first token in the sequence.<sup><a href="#note165"><b>165)</b></a></sup> A new-line character ends
8897  the preprocessing directive even if it occurs within what would otherwise be an
8898  
8899 <!--page 179 -->
8900  invocation of a function-like macro.
8901 <p><!--para 3 -->
8902  A text line shall not begin with a # preprocessing token. A non-directive shall not begin
8903  with any of the directive names appearing in the syntax.
8904 <p><!--para 4 -->
8905  When in a group that is skipped (<a href="#6.10.1">6.10.1</a>), the directive syntax is relaxed to allow any
8906  sequence of preprocessing tokens to occur between the directive name and the following
8907  new-line character.
8908 <p><b>Constraints</b>
8909 <p><!--para 5 -->
8910  The only white-space characters that shall appear between preprocessing tokens within a
8911  preprocessing directive (from just after the introducing # preprocessing token through
8912  just before the terminating new-line character) are space and horizontal-tab (including
8913  spaces that have replaced comments or possibly other white-space characters in
8914  translation phase 3).
8915 <p><b>Semantics</b>
8916 <p><!--para 6 -->
8917  The implementation can process and skip sections of source files conditionally, include
8918  other source files, and replace macros. These capabilities are called preprocessing,
8919  because conceptually they occur before translation of the resulting translation unit.
8920 <p><!--para 7 -->
8921  The preprocessing tokens within a preprocessing directive are not subject to macro
8922  expansion unless otherwise stated.
8923 <p><!--para 8 -->
8924  EXAMPLE        In:
8925 <pre>
8926            #define EMPTY
8927            EMPTY # include &lt;file.h&gt;
8928 </pre>
8929  the sequence of preprocessing tokens on the second line is not a preprocessing directive, because it does not
8930  begin with a # at the start of translation phase 4, even though it will do so after the macro EMPTY has been
8931  replaced.
8932  
8933
8934 <p><b>Footnotes</b>
8935 <p><small><a name="note165" href="#note165">165)</a> Thus, preprocessing directives are commonly called ''lines''. These ''lines'' have no other syntactic
8936  significance, as all white space is equivalent except in certain situations during preprocessing (see the
8937  # character string literal creation operator in <a href="#6.10.3.2">6.10.3.2</a>, for example).
8938 </small>
8939
8940 <p><small><a href="#Contents">Contents</a></small>
8941 <h4><a name="6.10.1" href="#6.10.1">6.10.1 Conditional inclusion</a></h4>
8942 <p><b>Constraints</b>
8943 <p><!--para 1 -->
8944  The expression that controls conditional inclusion shall be an integer constant expression
8945  except that: identifiers (including those lexically identical to keywords) are interpreted as *
8946  described below;<sup><a href="#note166"><b>166)</b></a></sup> and it may contain unary operator expressions of the form
8947 <pre>
8948       defined identifier
8949 </pre>
8950  or
8951 <pre>
8952       defined ( identifier )
8953 </pre>
8954  which evaluate to 1 if the identifier is currently defined as a macro name (that is, if it is
8955  
8956  
8957 <!--page 180 -->
8958  predefined or if it has been the subject of a #define preprocessing directive without an
8959  intervening #undef directive with the same subject identifier), 0 if it is not.
8960 <p><!--para 2 -->
8961  Each preprocessing token that remains (in the list of preprocessing tokens that will
8962  become the controlling expression) after all macro replacements have occurred shall be in
8963  the lexical form of a token (<a href="#6.4">6.4</a>).
8964 <p><b>Semantics</b>
8965 <p><!--para 3 -->
8966  Preprocessing directives of the forms
8967 <pre>
8968     # if   constant-expression new-line group<sub>opt</sub>
8969     # elif constant-expression new-line group<sub>opt</sub>
8970 </pre>
8971  check whether the controlling constant expression evaluates to nonzero.
8972 <p><!--para 4 -->
8973  Prior to evaluation, macro invocations in the list of preprocessing tokens that will become
8974  the controlling constant expression are replaced (except for those macro names modified
8975  by the defined unary operator), just as in normal text. If the token defined is
8976  generated as a result of this replacement process or use of the defined unary operator
8977  does not match one of the two specified forms prior to macro replacement, the behavior is
8978  undefined. After all replacements due to macro expansion and the defined unary
8979  operator have been performed, all remaining identifiers (including those lexically
8980  identical to keywords) are replaced with the pp-number 0, and then each preprocessing
8981  token is converted into a token. The resulting tokens compose the controlling constant
8982  expression which is evaluated according to the rules of <a href="#6.6">6.6</a>. For the purposes of this
8983  token conversion and evaluation, all signed integer types and all unsigned integer types
8984  act as if they have the same representation as, respectively, the types intmax_t and
8985  uintmax_t defined in the header <a href="#7.20">&lt;stdint.h&gt;</a>.<sup><a href="#note167"><b>167)</b></a></sup> This includes interpreting
8986  character constants, which may involve converting escape sequences into execution
8987  character set members. Whether the numeric value for these character constants matches
8988  the value obtained when an identical character constant occurs in an expression (other
8989  than within a #if or #elif directive) is implementation-defined.<sup><a href="#note168"><b>168)</b></a></sup> Also, whether a
8990  single-character character constant may have a negative value is implementation-defined.
8991  
8992  
8993  
8994  
8995 <!--page 181 -->
8996 <p><!--para 5 -->
8997  Preprocessing directives of the forms
8998 <pre>
8999     # ifdef identifier new-line group<sub>opt</sub>
9000     # ifndef identifier new-line group<sub>opt</sub>
9001 </pre>
9002  check whether the identifier is or is not currently defined as a macro name. Their
9003  conditions are equivalent to #if defined identifier and #if !defined identifier
9004  respectively.
9005 <p><!--para 6 -->
9006  Each directive's condition is checked in order. If it evaluates to false (zero), the group
9007  that it controls is skipped: directives are processed only through the name that determines
9008  the directive in order to keep track of the level of nested conditionals; the rest of the
9009  directives' preprocessing tokens are ignored, as are the other preprocessing tokens in the
9010  group. Only the first group whose control condition evaluates to true (nonzero) is
9011  processed. If none of the conditions evaluates to true, and there is a #else directive, the
9012  group controlled by the #else is processed; lacking a #else directive, all the groups
9013  until the #endif are skipped.<sup><a href="#note169"><b>169)</b></a></sup>
9014 <p><b> Forward references</b>: macro replacement (<a href="#6.10.3">6.10.3</a>), source file inclusion (<a href="#6.10.2">6.10.2</a>), largest
9015  integer types (<a href="#7.20.1.5">7.20.1.5</a>).
9016
9017 <p><b>Footnotes</b>
9018 <p><small><a name="note166" href="#note166">166)</a> Because the controlling constant expression is evaluated during translation phase 4, all identifiers
9019  either are or are not macro names -- there simply are no keywords, enumeration constants, etc.
9020 </small>
9021 <p><small><a name="note167" href="#note167">167)</a> Thus, on an implementation where INT_MAX is 0x7FFF and UINT_MAX is 0xFFFF, the constant
9022  0x8000 is signed and positive within a #if expression even though it would be unsigned in
9023  translation phase 7.
9024 </small>
9025 <p><small><a name="note168" href="#note168">168)</a> Thus, the constant expression in the following #if directive and if statement is not guaranteed to
9026  evaluate to the same value in these two contexts.
9027    #if 'z' - 'a' == 25
9028    if ('z' - 'a' == 25)
9029 </small>
9030 <p><small><a name="note169" href="#note169">169)</a> As indicated by the syntax, a preprocessing token shall not follow a #else or #endif directive
9031  before the terminating new-line character. However, comments may appear anywhere in a source file,
9032  including within a preprocessing directive.
9033 </small>
9034
9035 <p><small><a href="#Contents">Contents</a></small>
9036 <h4><a name="6.10.2" href="#6.10.2">6.10.2 Source file inclusion</a></h4>
9037 <p><b>Constraints</b>
9038 <p><!--para 1 -->
9039  A #include directive shall identify a header or source file that can be processed by the
9040  implementation.
9041 <p><b>Semantics</b>
9042 <p><!--para 2 -->
9043  A preprocessing directive of the form
9044 <pre>
9045     # include &lt;h-char-sequence&gt; new-line
9046 </pre>
9047  searches a sequence of implementation-defined places for a header identified uniquely by
9048  the specified sequence between the &lt; and &gt; delimiters, and causes the replacement of that
9049  directive by the entire contents of the header. How the places are specified or the header
9050  identified is implementation-defined.
9051 <p><!--para 3 -->
9052  A preprocessing directive of the form
9053 <pre>
9054     # include "q-char-sequence" new-line
9055 </pre>
9056  causes the replacement of that directive by the entire contents of the source file identified
9057  by the specified sequence between the " delimiters. The named source file is searched
9058  
9059  
9060 <!--page 182 -->
9061  for in an implementation-defined manner. If this search is not supported, or if the search
9062  fails, the directive is reprocessed as if it read
9063 <pre>
9064     # include &lt;h-char-sequence&gt; new-line
9065 </pre>
9066  with the identical contained sequence (including &gt; characters, if any) from the original
9067  directive.
9068 <p><!--para 4 -->
9069  A preprocessing directive of the form
9070 <pre>
9071     # include pp-tokens new-line
9072 </pre>
9073  (that does not match one of the two previous forms) is permitted. The preprocessing
9074  tokens after include in the directive are processed just as in normal text. (Each
9075  identifier currently defined as a macro name is replaced by its replacement list of
9076  preprocessing tokens.) The directive resulting after all replacements shall match one of
9077  the two previous forms.<sup><a href="#note170"><b>170)</b></a></sup> The method by which a sequence of preprocessing tokens
9078  between a &lt; and a &gt; preprocessing token pair or a pair of " characters is combined into a
9079  single header name preprocessing token is implementation-defined.
9080 <p><!--para 5 -->
9081  The implementation shall provide unique mappings for sequences consisting of one or
9082  more nondigits or digits (<a href="#6.4.2.1">6.4.2.1</a>) followed by a period (.) and a single nondigit. The
9083  first character shall not be a digit. The implementation may ignore distinctions of
9084  alphabetical case and restrict the mapping to eight significant characters before the
9085  period.
9086 <p><!--para 6 -->
9087  A #include preprocessing directive may appear in a source file that has been read
9088  because of a #include directive in another file, up to an implementation-defined
9089  nesting limit (see <a href="#5.2.4.1">5.2.4.1</a>).
9090 <p><!--para 7 -->
9091  EXAMPLE 1       The most common uses of #include preprocessing directives are as in the following:
9092 <pre>
9093           #include <a href="#7.21">&lt;stdio.h&gt;</a>
9094           #include "myprog.h"
9095 </pre>
9096  
9097  
9098  
9099  
9100 <!--page 183 -->
9101 <p><!--para 8 -->
9102  EXAMPLE 2      This illustrates macro-replaced #include directives:
9103 <pre>
9104            #if VERSION == 1
9105                  #define INCFILE          "vers1.h"
9106            #elif VERSION == 2
9107                  #define INCFILE          "vers2.h"        // and so on
9108            #else
9109                   #define INCFILE         "versN.h"
9110            #endif
9111            #include INCFILE
9112 </pre>
9113  
9114 <p><b> Forward references</b>: macro replacement (<a href="#6.10.3">6.10.3</a>).
9115
9116 <p><b>Footnotes</b>
9117 <p><small><a name="note170" href="#note170">170)</a> Note that adjacent string literals are not concatenated into a single string literal (see the translation
9118  phases in <a href="#5.1.1.2">5.1.1.2</a>); thus, an expansion that results in two string literals is an invalid directive.
9119 </small>
9120
9121 <p><small><a href="#Contents">Contents</a></small>
9122 <h4><a name="6.10.3" href="#6.10.3">6.10.3 Macro replacement</a></h4>
9123 <p><b>Constraints</b>
9124 <p><!--para 1 -->
9125  Two replacement lists are identical if and only if the preprocessing tokens in both have
9126  the same number, ordering, spelling, and white-space separation, where all white-space
9127  separations are considered identical.
9128 <p><!--para 2 -->
9129  An identifier currently defined as an object-like macro shall not be redefined by another
9130  #define preprocessing directive unless the second definition is an object-like macro
9131  definition and the two replacement lists are identical. Likewise, an identifier currently
9132  defined as a function-like macro shall not be redefined by another #define
9133  preprocessing directive unless the second definition is a function-like macro definition
9134  that has the same number and spelling of parameters, and the two replacement lists are
9135  identical.
9136 <p><!--para 3 -->
9137  There shall be white-space between the identifier and the replacement list in the definition
9138  of an object-like macro.
9139 <p><!--para 4 -->
9140  If the identifier-list in the macro definition does not end with an ellipsis, the number of
9141  arguments (including those arguments consisting of no preprocessing tokens) in an
9142  invocation of a function-like macro shall equal the number of parameters in the macro
9143  definition. Otherwise, there shall be more arguments in the invocation than there are
9144  parameters in the macro definition (excluding the ...). There shall exist a )
9145  preprocessing token that terminates the invocation.
9146 <p><!--para 5 -->
9147  The identifier __VA_ARGS__ shall occur only in the replacement-list of a function-like
9148  macro that uses the ellipsis notation in the parameters.
9149 <p><!--para 6 -->
9150  A parameter identifier in a function-like macro shall be uniquely declared within its
9151  scope.
9152 <p><b>Semantics</b>
9153 <p><!--para 7 -->
9154  The identifier immediately following the define is called the macro name. There is one
9155  name space for macro names. Any white-space characters preceding or following the
9156  replacement list of preprocessing tokens are not considered part of the replacement list
9157 <!--page 184 -->
9158  for either form of macro.
9159 <p><!--para 8 -->
9160  If a # preprocessing token, followed by an identifier, occurs lexically at the point at which
9161  a preprocessing directive could begin, the identifier is not subject to macro replacement.
9162 <p><!--para 9 -->
9163  A preprocessing directive of the form
9164 <pre>
9165     # define identifier replacement-list new-line
9166 </pre>
9167  defines an object-like macro that causes each subsequent instance of the macro name<sup><a href="#note171"><b>171)</b></a></sup>
9168  to be replaced by the replacement list of preprocessing tokens that constitute the
9169  remainder of the directive. The replacement list is then rescanned for more macro names
9170  as specified below.
9171 <p><!--para 10 -->
9172  A preprocessing directive of the form
9173 <pre>
9174     # define identifier lparen identifier-list<sub>opt</sub> ) replacement-list new-line
9175     # define identifier lparen ... ) replacement-list new-line
9176     # define identifier lparen identifier-list , ... ) replacement-list new-line
9177 </pre>
9178  defines a function-like macro with parameters, whose use is similar syntactically to a
9179  function call. The parameters are specified by the optional list of identifiers, whose scope
9180  extends from their declaration in the identifier list until the new-line character that
9181  terminates the #define preprocessing directive. Each subsequent instance of the
9182  function-like macro name followed by a ( as the next preprocessing token introduces the
9183  sequence of preprocessing tokens that is replaced by the replacement list in the definition
9184  (an invocation of the macro). The replaced sequence of preprocessing tokens is
9185  terminated by the matching ) preprocessing token, skipping intervening matched pairs of
9186  left and right parenthesis preprocessing tokens. Within the sequence of preprocessing
9187  tokens making up an invocation of a function-like macro, new-line is considered a normal
9188  white-space character.
9189 <p><!--para 11 -->
9190  The sequence of preprocessing tokens bounded by the outside-most matching parentheses
9191  forms the list of arguments for the function-like macro. The individual arguments within
9192  the list are separated by comma preprocessing tokens, but comma preprocessing tokens
9193  between matching inner parentheses do not separate arguments. If there are sequences of
9194  preprocessing tokens within the list of arguments that would otherwise act as
9195  preprocessing directives,<sup><a href="#note172"><b>172)</b></a></sup> the behavior is undefined.
9196 <p><!--para 12 -->
9197  If there is a ... in the identifier-list in the macro definition, then the trailing arguments,
9198  including any separating comma preprocessing tokens, are merged to form a single item:
9199  
9200  
9201 <!--page 185 -->
9202  the variable arguments. The number of arguments so combined is such that, following
9203  merger, the number of arguments is one more than the number of parameters in the macro
9204  definition (excluding the ...).
9205
9206 <p><b>Footnotes</b>
9207 <p><small><a name="note171" href="#note171">171)</a> Since, by macro-replacement time, all character constants and string literals are preprocessing tokens,
9208  not sequences possibly containing identifier-like subsequences (see <a href="#5.1.1.2">5.1.1.2</a>, translation phases), they
9209  are never scanned for macro names or parameters.
9210 </small>
9211 <p><small><a name="note172" href="#note172">172)</a> Despite the name, a non-directive is a preprocessing directive.
9212 </small>
9213
9214 <p><small><a href="#Contents">Contents</a></small>
9215 <h5><a name="6.10.3.1" href="#6.10.3.1">6.10.3.1 Argument substitution</a></h5>
9216 <p><!--para 1 -->
9217  After the arguments for the invocation of a function-like macro have been identified,
9218  argument substitution takes place. A parameter in the replacement list, unless preceded
9219  by a # or ## preprocessing token or followed by a ## preprocessing token (see below), is
9220  replaced by the corresponding argument after all macros contained therein have been
9221  expanded. Before being substituted, each argument's preprocessing tokens are
9222  completely macro replaced as if they formed the rest of the preprocessing file; no other
9223  preprocessing tokens are available.
9224 <p><!--para 2 -->
9225  An identifier __VA_ARGS__ that occurs in the replacement list shall be treated as if it
9226  were a parameter, and the variable arguments shall form the preprocessing tokens used to
9227  replace it.
9228
9229 <p><small><a href="#Contents">Contents</a></small>
9230 <h5><a name="6.10.3.2" href="#6.10.3.2">6.10.3.2 The # operator</a></h5>
9231 <p><b>Constraints</b>
9232 <p><!--para 1 -->
9233  Each # preprocessing token in the replacement list for a function-like macro shall be
9234  followed by a parameter as the next preprocessing token in the replacement list.
9235 <p><b>Semantics</b>
9236 <p><!--para 2 -->
9237  If, in the replacement list, a parameter is immediately preceded by a # preprocessing
9238  token, both are replaced by a single character string literal preprocessing token that
9239  contains the spelling of the preprocessing token sequence for the corresponding
9240  argument. Each occurrence of white space between the argument's preprocessing tokens
9241  becomes a single space character in the character string literal. White space before the
9242  first preprocessing token and after the last preprocessing token composing the argument
9243  is deleted. Otherwise, the original spelling of each preprocessing token in the argument
9244  is retained in the character string literal, except for special handling for producing the
9245  spelling of string literals and character constants: a \ character is inserted before each "
9246  and \ character of a character constant or string literal (including the delimiting "
9247  characters), except that it is implementation-defined whether a \ character is inserted
9248  before the \ character beginning a universal character name. If the replacement that
9249  results is not a valid character string literal, the behavior is undefined. The character
9250  string literal corresponding to an empty argument is "". The order of evaluation of # and
9251  ## operators is unspecified.
9252 <!--page 186 -->
9253
9254 <p><small><a href="#Contents">Contents</a></small>
9255 <h5><a name="6.10.3.3" href="#6.10.3.3">6.10.3.3 The ## operator</a></h5>
9256 <p><b>Constraints</b>
9257 <p><!--para 1 -->
9258  A ## preprocessing token shall not occur at the beginning or at the end of a replacement
9259  list for either form of macro definition.
9260 <p><b>Semantics</b>
9261 <p><!--para 2 -->
9262  If, in the replacement list of a function-like macro, a parameter is immediately preceded
9263  or followed by a ## preprocessing token, the parameter is replaced by the corresponding
9264  argument's preprocessing token sequence; however, if an argument consists of no
9265  preprocessing tokens, the parameter is replaced by a placemarker preprocessing token
9266  instead.<sup><a href="#note173"><b>173)</b></a></sup>
9267 <p><!--para 3 -->
9268  For both object-like and function-like macro invocations, before the replacement list is
9269  reexamined for more macro names to replace, each instance of a ## preprocessing token
9270  in the replacement list (not from an argument) is deleted and the preceding preprocessing
9271  token is concatenated with the following preprocessing token. Placemarker
9272  preprocessing tokens are handled specially: concatenation of two placemarkers results in
9273  a single placemarker preprocessing token, and concatenation of a placemarker with a
9274  non-placemarker preprocessing token results in the non-placemarker preprocessing token.
9275  If the result is not a valid preprocessing token, the behavior is undefined. The resulting
9276  token is available for further macro replacement. The order of evaluation of ## operators
9277  is unspecified.
9278 <p><!--para 4 -->
9279  EXAMPLE       In the following fragment:
9280 <pre>
9281          #define     hash_hash # ## #
9282          #define     mkstr(a) # a
9283          #define     in_between(a) mkstr(a)
9284          #define     join(c, d) in_between(c hash_hash d)
9285          char p[] = join(x, y); // equivalent to
9286                                 // char p[] = "x ## y";
9287 </pre>
9288  The expansion produces, at various stages:
9289 <pre>
9290          join(x, y)
9291          in_between(x hash_hash y)
9292          in_between(x ## y)
9293          mkstr(x ## y)
9294          "x ## y"
9295 </pre>
9296  In other words, expanding hash_hash produces a new token, consisting of two adjacent sharp signs, but
9297  this new token is not the ## operator.
9298  
9299  
9300 <!--page 187 -->
9301
9302 <p><b>Footnotes</b>
9303 <p><small><a name="note173" href="#note173">173)</a> Placemarker preprocessing tokens do not appear in the syntax because they are temporary entities that
9304  exist only within translation phase 4.
9305 </small>
9306
9307 <p><small><a href="#Contents">Contents</a></small>
9308 <h5><a name="6.10.3.4" href="#6.10.3.4">6.10.3.4 Rescanning and further replacement</a></h5>
9309 <p><!--para 1 -->
9310  After all parameters in the replacement list have been substituted and # and ##
9311  processing has taken place, all placemarker preprocessing tokens are removed. The
9312  resulting preprocessing token sequence is then rescanned, along with all subsequent
9313  preprocessing tokens of the source file, for more macro names to replace.
9314 <p><!--para 2 -->
9315  If the name of the macro being replaced is found during this scan of the replacement list
9316  (not including the rest of the source file's preprocessing tokens), it is not replaced.
9317  Furthermore, if any nested replacements encounter the name of the macro being replaced,
9318  it is not replaced. These nonreplaced macro name preprocessing tokens are no longer
9319  available for further replacement even if they are later (re)examined in contexts in which
9320  that macro name preprocessing token would otherwise have been replaced.
9321 <p><!--para 3 -->
9322  The resulting completely macro-replaced preprocessing token sequence is not processed
9323  as a preprocessing directive even if it resembles one, but all pragma unary operator
9324  expressions within it are then processed as specified in <a href="#6.10.9">6.10.9</a> below.
9325
9326 <p><small><a href="#Contents">Contents</a></small>
9327 <h5><a name="6.10.3.5" href="#6.10.3.5">6.10.3.5 Scope of macro definitions</a></h5>
9328 <p><!--para 1 -->
9329  A macro definition lasts (independent of block structure) until a corresponding #undef
9330  directive is encountered or (if none is encountered) until the end of the preprocessing
9331  translation unit. Macro definitions have no significance after translation phase 4.
9332 <p><!--para 2 -->
9333  A preprocessing directive of the form
9334 <pre>
9335     # undef identifier new-line
9336 </pre>
9337  causes the specified identifier no longer to be defined as a macro name. It is ignored if
9338  the specified identifier is not currently defined as a macro name.
9339 <p><!--para 3 -->
9340  EXAMPLE 1      The simplest use of this facility is to define a ''manifest constant'', as in
9341 <pre>
9342          #define TABSIZE 100
9343          int table[TABSIZE];
9344 </pre>
9345  
9346 <p><!--para 4 -->
9347  EXAMPLE 2 The following defines a function-like macro whose value is the maximum of its arguments.
9348  It has the advantages of working for any compatible types of the arguments and of generating in-line code
9349  without the overhead of function calling. It has the disadvantages of evaluating one or the other of its
9350  arguments a second time (including side effects) and generating more code than a function if invoked
9351  several times. It also cannot have its address taken, as it has none.
9352 <pre>
9353          #define max(a, b) ((a) &gt; (b) ? (a) : (b))
9354 </pre>
9355  The parentheses ensure that the arguments and the resulting expression are bound properly.
9356 <!--page 188 -->
9357 <p><!--para 5 -->
9358  EXAMPLE 3     To illustrate the rules for redefinition and reexamination, the sequence
9359 <pre>
9360           #define   x         3
9361           #define   f(a)      f(x * (a))
9362           #undef    x
9363           #define   x         2
9364           #define   g         f
9365           #define   z         z[0]
9366           #define   h         g(~
9367           #define   m(a)      a(w)
9368           #define   w         0,1
9369           #define   t(a)      a
9370           #define   p()       int
9371           #define   q(x)      x
9372           #define   r(x,y)    x ## y
9373           #define   str(x)    # x
9374           f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);
9375           g(x+(3,4)-w) | h 5) &amp; m
9376                 (f)^m(m);
9377           p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) };
9378           char c[2][6] = { str(hello), str() };
9379 </pre>
9380  results in
9381 <pre>
9382           f(2 * (y+1)) + f(2 * (f(2 * (z[0])))) % f(2 * (0)) + t(1);
9383           f(2 * (2+(3,4)-0,1)) | f(2 * (~ 5)) &amp; f(2 * (0,1))^m(0,1);
9384           int i[] = { 1, 23, 4, 5, };
9385           char c[2][6] = { "hello", "" };
9386 </pre>
9387  
9388 <p><!--para 6 -->
9389  EXAMPLE 4     To illustrate the rules for creating character string literals and concatenating tokens, the
9390  sequence
9391 <pre>
9392           #define str(s)      # s
9393           #define xstr(s)     str(s)
9394           #define debug(s, t) printf("x" # s "= %d, x" # t "= %s", \
9395                                   x ## s, x ## t)
9396           #define INCFILE(n) vers ## n
9397           #define glue(a, b) a ## b
9398           #define xglue(a, b) glue(a, b)
9399           #define HIGHLOW     "hello"
9400           #define LOW         LOW ", world"
9401           debug(1, 2);
9402           fputs(str(strncmp("abc\0d", "abc", '\4') // this goes away
9403                 == 0) str(: @\n), s);
9404           #include xstr(INCFILE(2).h)
9405           glue(HIGH, LOW);
9406           xglue(HIGH, LOW)
9407 </pre>
9408  results in
9409 <!--page 189 -->
9410 <pre>
9411           printf("x" "1" "= %d, x" "2" "= %s", x1, x2);
9412           fputs(
9413             "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0" ": @\n",
9414             s);
9415           #include "vers2.h"    (after macro replacement, before file access)
9416           "hello";
9417           "hello" ", world"
9418 </pre>
9419  or, after concatenation of the character string literals,
9420 <pre>
9421           printf("x1= %d, x2= %s", x1, x2);
9422           fputs(
9423             "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0: @\n",
9424             s);
9425           #include "vers2.h"    (after macro replacement, before file access)
9426           "hello";
9427           "hello, world"
9428 </pre>
9429  Space around the # and ## tokens in the macro definition is optional.
9430  
9431 <p><!--para 7 -->
9432  EXAMPLE 5        To illustrate the rules for placemarker preprocessing tokens, the sequence
9433 <pre>
9434           #define t(x,y,z) x ## y ## z
9435           int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,),
9436                      t(10,,), t(,11,), t(,,12), t(,,) };
9437 </pre>
9438  results in
9439 <pre>
9440           int j[] = { 123, 45, 67, 89,
9441                       10, 11, 12, };
9442 </pre>
9443  
9444 <p><!--para 8 -->
9445  EXAMPLE 6        To demonstrate the redefinition rules, the following sequence is valid.
9446 <pre>
9447           #define      OBJ_LIKE      (1-1)
9448           #define      OBJ_LIKE      /* white space */ (1-1) /* other */
9449           #define      FUNC_LIKE(a)   ( a )
9450           #define      FUNC_LIKE( a )( /* note the white space */ \
9451                                        a /* other stuff on this line
9452                                            */ )
9453 </pre>
9454  But the following redefinitions are invalid:
9455 <pre>
9456           #define      OBJ_LIKE    (0)     // different token sequence
9457           #define      OBJ_LIKE    (1 - 1) // different white space
9458           #define      FUNC_LIKE(b) ( a ) // different parameter usage
9459           #define      FUNC_LIKE(b) ( b ) // different parameter spelling
9460 </pre>
9461  
9462 <p><!--para 9 -->
9463  EXAMPLE 7        Finally, to show the variable argument list macro facilities:
9464 <!--page 190 -->
9465 <pre>
9466           #define debug(...)       fprintf(stderr, __VA_ARGS__)
9467           #define showlist(...)    puts(#__VA_ARGS__)
9468           #define report(test, ...) ((test)?puts(#test):\
9469                       printf(__VA_ARGS__))
9470           debug("Flag");
9471           debug("X = %d\n", x);
9472           showlist(The first, second, and third items.);
9473           report(x&gt;y, "x is %d but y is %d", x, y);
9474 </pre>
9475  results in
9476 <pre>
9477           fprintf(stderr, "Flag" );
9478           fprintf(stderr, "X = %d\n", x );
9479           puts( "The first, second, and third items." );
9480           ((x&gt;y)?puts("x&gt;y"):
9481                       printf("x is %d but y is %d", x, y));
9482 </pre>
9483  
9484
9485 <p><small><a href="#Contents">Contents</a></small>
9486 <h4><a name="6.10.4" href="#6.10.4">6.10.4 Line control</a></h4>
9487 <p><b>Constraints</b>
9488 <p><!--para 1 -->
9489  The string literal of a #line directive, if present, shall be a character string literal.
9490 <p><b>Semantics</b>
9491 <p><!--para 2 -->
9492  The line number of the current source line is one greater than the number of new-line
9493  characters read or introduced in translation phase 1 (<a href="#5.1.1.2">5.1.1.2</a>) while processing the source
9494  file to the current token.
9495 <p><!--para 3 -->
9496  A preprocessing directive of the form
9497 <pre>
9498     # line digit-sequence new-line
9499 </pre>
9500  causes the implementation to behave as if the following sequence of source lines begins
9501  with a source line that has a line number as specified by the digit sequence (interpreted as
9502  a decimal integer). The digit sequence shall not specify zero, nor a number greater than
9503  2147483647.
9504 <p><!--para 4 -->
9505  A preprocessing directive of the form
9506 <pre>
9507     # line digit-sequence "s-char-sequence<sub>opt</sub>" new-line
9508 </pre>
9509  sets the presumed line number similarly and changes the presumed name of the source
9510  file to be the contents of the character string literal.
9511 <p><!--para 5 -->
9512  A preprocessing directive of the form
9513 <pre>
9514     # line pp-tokens new-line
9515 </pre>
9516  (that does not match one of the two previous forms) is permitted. The preprocessing
9517  tokens after line on the directive are processed just as in normal text (each identifier
9518  currently defined as a macro name is replaced by its replacement list of preprocessing
9519  tokens). The directive resulting after all replacements shall match one of the two
9520  previous forms and is then processed as appropriate.
9521 <!--page 191 -->
9522
9523 <p><small><a href="#Contents">Contents</a></small>
9524 <h4><a name="6.10.5" href="#6.10.5">6.10.5 Error directive</a></h4>
9525 <p><b>Semantics</b>
9526 <p><!--para 1 -->
9527  A preprocessing directive of the form
9528 <pre>
9529     # error pp-tokens<sub>opt</sub> new-line
9530 </pre>
9531  causes the implementation to produce a diagnostic message that includes the specified
9532  sequence of preprocessing tokens.
9533
9534 <p><small><a href="#Contents">Contents</a></small>
9535 <h4><a name="6.10.6" href="#6.10.6">6.10.6 Pragma directive</a></h4>
9536 <p><b>Semantics</b>
9537 <p><!--para 1 -->
9538  A preprocessing directive of the form
9539 <pre>
9540     # pragma pp-tokens<sub>opt</sub> new-line
9541 </pre>
9542  where the preprocessing token STDC does not immediately follow pragma in the
9543  directive (prior to any macro replacement)<sup><a href="#note174"><b>174)</b></a></sup> causes the implementation to behave in an
9544  implementation-defined manner. The behavior might cause translation to fail or cause the
9545  translator or the resulting program to behave in a non-conforming manner. Any such
9546  pragma that is not recognized by the implementation is ignored.
9547 <p><!--para 2 -->
9548  If the preprocessing token STDC does immediately follow pragma in the directive (prior
9549  to any macro replacement), then no macro replacement is performed on the directive, and
9550  the directive shall have one of the following forms<sup><a href="#note175"><b>175)</b></a></sup> whose meanings are described
9551  elsewhere:
9552 <pre>
9553     #pragma STDC FP_CONTRACT on-off-switch
9554     #pragma STDC FENV_ACCESS on-off-switch
9555     #pragma STDC CX_LIMITED_RANGE on-off-switch
9556     on-off-switch: one of
9557                 ON     OFF           DEFAULT
9558 </pre>
9559 <p><b> Forward references</b>: the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>), the FENV_ACCESS pragma
9560  (<a href="#7.6.1">7.6.1</a>), the CX_LIMITED_RANGE pragma (<a href="#7.3.4">7.3.4</a>).
9561  
9562  
9563  
9564  
9565 <!--page 192 -->
9566
9567 <p><b>Footnotes</b>
9568 <p><small><a name="note174" href="#note174">174)</a> An implementation is not required to perform macro replacement in pragmas, but it is permitted
9569  except for in standard pragmas (where STDC immediately follows pragma). If the result of macro
9570  replacement in a non-standard pragma has the same form as a standard pragma, the behavior is still
9571  implementation-defined; an implementation is permitted to behave as if it were the standard pragma,
9572  but is not required to.
9573 </small>
9574 <p><small><a name="note175" href="#note175">175)</a> See ''future language directions'' (<a href="#6.11.8">6.11.8</a>).
9575 </small>
9576
9577 <p><small><a href="#Contents">Contents</a></small>
9578 <h4><a name="6.10.7" href="#6.10.7">6.10.7 Null directive</a></h4>
9579 <p><b>Semantics</b>
9580 <p><!--para 1 -->
9581  A preprocessing directive of the form
9582 <pre>
9583     # new-line
9584 </pre>
9585  has no effect.
9586
9587 <p><small><a href="#Contents">Contents</a></small>
9588 <h4><a name="6.10.8" href="#6.10.8">6.10.8 Predefined macro names</a></h4>
9589 <p><!--para 1 -->
9590  The values of the predefined macros listed in the following subclauses<sup><a href="#note176"><b>176)</b></a></sup> (except for
9591  __FILE__ and __LINE__) remain constant throughout the translation unit.
9592 <p><!--para 2 -->
9593  None of these macro names, nor the identifier defined, shall be the subject of a
9594  #define or a #undef preprocessing directive. Any other predefined macro names
9595  shall begin with a leading underscore followed by an uppercase letter or a second
9596  underscore.
9597 <p><!--para 3 -->
9598  The implementation shall not predefine the macro __cplusplus, nor shall it define it
9599  in any standard header.
9600 <p><b> Forward references</b>: standard headers (<a href="#7.1.2">7.1.2</a>).
9601
9602 <p><b>Footnotes</b>
9603 <p><small><a name="note176" href="#note176">176)</a> See ''future language directions'' (<a href="#6.11.9">6.11.9</a>).
9604 </small>
9605
9606 <p><small><a href="#Contents">Contents</a></small>
9607 <h5><a name="6.10.8.1" href="#6.10.8.1">6.10.8.1 Mandatory macros</a></h5>
9608 <p><!--para 1 -->
9609  The following macro names shall be defined by the implementation:
9610  __DATE__ The date of translation of the preprocessing translation unit: a character
9611 <pre>
9612             string literal of the form "Mmm dd yyyy", where the names of the
9613             months are the same as those generated by the asctime function, and the
9614             first character of dd is a space character if the value is less than 10. If the
9615             date of translation is not available, an implementation-defined valid date
9616             shall be supplied.
9617 </pre>
9618  __FILE__ The presumed name of the current source file (a character string literal).<sup><a href="#note177"><b>177)</b></a></sup>
9619  __LINE__ The presumed line number (within the current source file) of the current
9620 <pre>
9621             source line (an integer constant).<sup><a href="#note177"><b>177)</b></a></sup>
9622 </pre>
9623  __STDC__ The integer constant 1, intended to indicate a conforming implementation.
9624  __STDC_HOSTED__ The integer constant 1 if the implementation is a hosted
9625 <pre>
9626            implementation or the integer constant 0 if it is not.
9627 </pre>
9628  
9629  
9630  
9631  
9632 <!--page 193 -->
9633  __STDC_VERSION__ The integer constant 201ymmL.<sup><a href="#note178"><b>178)</b></a></sup>
9634  __TIME__ The time of translation of the preprocessing translation unit: a character
9635 <pre>
9636             string literal of the form "hh:mm:ss" as in the time generated by the
9637             asctime function. If the time of translation is not available, an
9638             implementation-defined valid time shall be supplied.
9639 </pre>
9640 <p><b> Forward references</b>: the asctime function (<a href="#7.26.3.1">7.26.3.1</a>).
9641
9642 <p><b>Footnotes</b>
9643 <p><small><a name="note177" href="#note177">177)</a> The presumed source file name and line number can be changed by the #line directive.
9644 </small>
9645 <p><small><a name="note178" href="#note178">178)</a> This macro was not specified in ISO/IEC 9899:1990 and was specified as 199409L in
9646  ISO/IEC 9899/AMD1:1995 and as 199901L in ISO/IEC 9899:1999. The intention is that this will
9647  remain an integer constant of type long int that is increased with each revision of this International
9648  Standard.
9649 </small>
9650
9651 <p><small><a href="#Contents">Contents</a></small>
9652 <h5><a name="6.10.8.2" href="#6.10.8.2">6.10.8.2 Environment macros</a></h5>
9653 <p><!--para 1 -->
9654  The following macro names are conditionally defined by the implementation:
9655  __STDC_ISO_10646__ An integer constant of the form yyyymmL (for example,
9656 <pre>
9657            199712L). If this symbol is defined, then every character in the Unicode
9658            required set, when stored in an object of type wchar_t, has the same
9659            value as the short identifier of that character. The Unicode required set
9660            consists of all the characters that are defined by ISO/IEC 10646, along with
9661            all amendments and technical corrigenda, as of the specified year and
9662            month. If some other encoding is used, the macro shall not be defined and
9663            the actual encoding used is implementation-defined.
9664 </pre>
9665  __STDC_MB_MIGHT_NEQ_WC__ The integer constant 1, intended to indicate that, in
9666 <pre>
9667            the encoding for wchar_t, a member of the basic character set need not
9668            have a code value equal to its value when used as the lone character in an
9669            integer character constant.
9670 </pre>
9671  __STDC_UTF_16__ The integer constant 1, intended to indicate that values of type
9672 <pre>
9673            char16_t are UTF-16 encoded. If some other encoding is used, the
9674            macro shall not be defined and the actual encoding used is implementation-
9675            defined.
9676 </pre>
9677  __STDC_UTF_32__ The integer constant 1, intended to indicate that values of type
9678 <pre>
9679            char32_t are UTF-32 encoded. If some other encoding is used, the
9680            macro shall not be defined and the actual encoding used is implementation-
9681            defined.
9682 </pre>
9683 <p><b> Forward references</b>: common definitions (<a href="#7.19">7.19</a>), unicode utilities (<a href="#7.27">7.27</a>).
9684  
9685  
9686  
9687  
9688 <!--page 194 -->
9689
9690 <p><small><a href="#Contents">Contents</a></small>
9691 <h5><a name="6.10.8.3" href="#6.10.8.3">6.10.8.3 Conditional feature macros</a></h5>
9692 <p><!--para 1 -->
9693  The following macro names are conditionally defined by the implementation:
9694  __STDC_ANALYZABLE__ The integer constant 1, intended to indicate conformance to
9695 <pre>
9696            the specifications in <a href="#L">annex L</a> (Analyzability).
9697 </pre>
9698  __STDC_IEC_559__ The integer constant 1, intended to indicate conformance to the
9699 <pre>
9700            specifications in <a href="#F">annex F</a> (IEC 60559 floating-point arithmetic).
9701 </pre>
9702  __STDC_IEC_559_COMPLEX__ The integer constant 1, intended to indicate
9703 <pre>
9704            adherence to the specifications in <a href="#G">annex G</a> (IEC 60559 compatible complex
9705            arithmetic).
9706 </pre>
9707  __STDC_LIB_EXT1__ The integer constant 201ymmL, intended to indicate support
9708 <pre>
9709            for the extensions defined in <a href="#K">annex K</a> (Bounds-checking interfaces).<sup><a href="#note179"><b>179)</b></a></sup>
9710 </pre>
9711  __STDC_NO_COMPLEX__ The integer constant 1, intended to indicate that the
9712 <pre>
9713            implementation does not support complex types or the <a href="#7.3">&lt;complex.h&gt;</a>
9714            header.
9715 </pre>
9716  __STDC_NO_THREADS__ The integer constant 1, intended to indicate that the
9717 <pre>
9718            implementation does not support atomic types (including the _Atomic
9719            type qualifier and the <a href="#7.17">&lt;stdatomic.h&gt;</a> header) or the <a href="#7.25">&lt;threads.h&gt;</a>
9720            header.
9721 </pre>
9722  __STDC_NO_VLA__ The integer constant 1, intended to indicate that the
9723 <pre>
9724            implementation does not support variable length arrays or variably
9725            modified types.
9726 </pre>
9727 <p><!--para 2 -->
9728  An implementation that defines __STDC_NO_COMPLEX__ shall not define
9729  __STDC_IEC_559_COMPLEX__.
9730
9731 <p><b>Footnotes</b>
9732 <p><small><a name="note179" href="#note179">179)</a> The intention is that this will remain an integer constant of type long int that is increased with
9733  each revision of this International Standard.
9734 </small>
9735
9736 <p><small><a href="#Contents">Contents</a></small>
9737 <h4><a name="6.10.9" href="#6.10.9">6.10.9 Pragma operator</a></h4>
9738 <p><b>Semantics</b>
9739 <p><!--para 1 -->
9740  A unary operator expression of the form:
9741 <pre>
9742     _Pragma ( string-literal )
9743 </pre>
9744  is processed as follows: The string literal is destringized by deleting the L prefix, if
9745  present, deleting the leading and trailing double-quotes, replacing each escape sequence
9746  \" by a double-quote, and replacing each escape sequence \\ by a single backslash. The
9747  resulting sequence of characters is processed through translation phase 3 to produce
9748  preprocessing tokens that are executed as if they were the pp-tokens in a pragma
9749  
9750  
9751 <!--page 195 -->
9752  directive. The original four preprocessing tokens in the unary operator expression are
9753  removed.
9754 <p><!--para 2 -->
9755  EXAMPLE       A directive of the form:
9756 <pre>
9757            #pragma listing on "..\listing.dir"
9758 </pre>
9759  can also be expressed as:
9760 <pre>
9761            _Pragma ( "listing on \"..\\listing.dir\"" )
9762 </pre>
9763  The latter form is processed in the same way whether it appears literally as shown, or results from macro
9764  replacement, as in:
9765 <!--page 196 -->
9766 <pre>
9767            #define LISTING(x) PRAGMA(listing on #x)
9768            #define PRAGMA(x) _Pragma(#x)
9769            LISTING ( ..\listing.dir )
9770 </pre>
9771
9772 <p><small><a href="#Contents">Contents</a></small>
9773 <h3><a name="6.11" href="#6.11">6.11 Future language directions</a></h3>
9774
9775 <p><small><a href="#Contents">Contents</a></small>
9776 <h4><a name="6.11.1" href="#6.11.1">6.11.1 Floating types</a></h4>
9777 <p><!--para 1 -->
9778  Future standardization may include additional floating-point types, including those with
9779  greater range, precision, or both than long double.
9780
9781 <p><small><a href="#Contents">Contents</a></small>
9782 <h4><a name="6.11.2" href="#6.11.2">6.11.2 Linkages of identifiers</a></h4>
9783 <p><!--para 1 -->
9784  Declaring an identifier with internal linkage at file scope without the static storage-
9785  class specifier is an obsolescent feature.
9786
9787 <p><small><a href="#Contents">Contents</a></small>
9788 <h4><a name="6.11.3" href="#6.11.3">6.11.3 External names</a></h4>
9789 <p><!--para 1 -->
9790  Restriction of the significance of an external name to fewer than 255 characters
9791  (considering each universal character name or extended source character as a single
9792  character) is an obsolescent feature that is a concession to existing implementations.
9793
9794 <p><small><a href="#Contents">Contents</a></small>
9795 <h4><a name="6.11.4" href="#6.11.4">6.11.4 Character escape sequences</a></h4>
9796 <p><!--para 1 -->
9797  Lowercase letters as escape sequences are reserved for future standardization. Other
9798  characters may be used in extensions.
9799
9800 <p><small><a href="#Contents">Contents</a></small>
9801 <h4><a name="6.11.5" href="#6.11.5">6.11.5 Storage-class specifiers</a></h4>
9802 <p><!--para 1 -->
9803  The placement of a storage-class specifier other than at the beginning of the declaration
9804  specifiers in a declaration is an obsolescent feature.
9805
9806 <p><small><a href="#Contents">Contents</a></small>
9807 <h4><a name="6.11.6" href="#6.11.6">6.11.6 Function declarators</a></h4>
9808 <p><!--para 1 -->
9809  The use of function declarators with empty parentheses (not prototype-format parameter
9810  type declarators) is an obsolescent feature.
9811
9812 <p><small><a href="#Contents">Contents</a></small>
9813 <h4><a name="6.11.7" href="#6.11.7">6.11.7 Function definitions</a></h4>
9814 <p><!--para 1 -->
9815  The use of function definitions with separate parameter identifier and declaration lists
9816  (not prototype-format parameter type and identifier declarators) is an obsolescent feature.
9817
9818 <p><small><a href="#Contents">Contents</a></small>
9819 <h4><a name="6.11.8" href="#6.11.8">6.11.8 Pragma directives</a></h4>
9820 <p><!--para 1 -->
9821  Pragmas whose first preprocessing token is STDC are reserved for future standardization.
9822
9823 <p><small><a href="#Contents">Contents</a></small>
9824 <h4><a name="6.11.9" href="#6.11.9">6.11.9 Predefined macro names</a></h4>
9825 <p><!--para 1 -->
9826  Macro names beginning with __STDC_ are reserved for future standardization.
9827 <!--page 197 -->
9828
9829 <p><small><a href="#Contents">Contents</a></small>
9830 <h2><a name="7" href="#7">7. Library</a></h2>
9831
9832 <p><small><a href="#Contents">Contents</a></small>
9833 <h3><a name="7.1" href="#7.1">7.1 Introduction</a></h3>
9834
9835 <p><small><a href="#Contents">Contents</a></small>
9836 <h4><a name="7.1.1" href="#7.1.1">7.1.1 Definitions of terms</a></h4>
9837 <p><!--para 1 -->
9838  A string is a contiguous sequence of characters terminated by and including the first null
9839  character. The term multibyte string is sometimes used instead to emphasize special
9840  processing given to multibyte characters contained in the string or to avoid confusion
9841  with a wide string. A pointer to a string is a pointer to its initial (lowest addressed)
9842  character. The length of a string is the number of bytes preceding the null character and
9843  the value of a string is the sequence of the values of the contained characters, in order.
9844 <p><!--para 2 -->
9845  The decimal-point character is the character used by functions that convert floating-point
9846  numbers to or from character sequences to denote the beginning of the fractional part of
9847  such character sequences.<sup><a href="#note180"><b>180)</b></a></sup> It is represented in the text and examples by a period, but
9848  may be changed by the setlocale function.
9849 <p><!--para 3 -->
9850  A null wide character is a wide character with code value zero.
9851 <p><!--para 4 -->
9852  A wide string is a contiguous sequence of wide characters terminated by and including
9853  the first null wide character. A pointer to a wide string is a pointer to its initial (lowest
9854  addressed) wide character. The length of a wide string is the number of wide characters
9855  preceding the null wide character and the value of a wide string is the sequence of code
9856  values of the contained wide characters, in order.
9857 <p><!--para 5 -->
9858  A shift sequence is a contiguous sequence of bytes within a multibyte string that
9859  (potentially) causes a change in shift state (see <a href="#5.2.1.2">5.2.1.2</a>). A shift sequence shall not have a
9860  corresponding wide character; it is instead taken to be an adjunct to an adjacent multibyte
9861  character.<sup><a href="#note181"><b>181)</b></a></sup>
9862 <p><b> Forward references</b>: character handling (<a href="#7.4">7.4</a>), the setlocale function (<a href="#7.11.1.1">7.11.1.1</a>).
9863  
9864  
9865  
9866  
9867 <!--page 198 -->
9868
9869 <p><b>Footnotes</b>
9870 <p><small><a name="note180" href="#note180">180)</a> The functions that make use of the decimal-point character are the numeric conversion functions
9871  (<a href="#7.22.1">7.22.1</a>, <a href="#7.28.4.1">7.28.4.1</a>) and the formatted input/output functions (<a href="#7.21.6">7.21.6</a>, <a href="#7.28.2">7.28.2</a>).
9872 </small>
9873 <p><small><a name="note181" href="#note181">181)</a> For state-dependent encodings, the values for MB_CUR_MAX and MB_LEN_MAX shall thus be large
9874  enough to count all the bytes in any complete multibyte character plus at least one adjacent shift
9875  sequence of maximum length. Whether these counts provide for more than one shift sequence is the
9876  implementation's choice.
9877 </small>
9878
9879 <p><small><a href="#Contents">Contents</a></small>
9880 <h4><a name="7.1.2" href="#7.1.2">7.1.2 Standard headers</a></h4>
9881 <p><!--para 1 -->
9882  Each library function is declared, with a type that includes a prototype, in a header,<sup><a href="#note182"><b>182)</b></a></sup>
9883  whose contents are made available by the #include preprocessing directive. The
9884  header declares a set of related functions, plus any necessary types and additional macros
9885  needed to facilitate their use. Declarations of types described in this clause shall not
9886  include type qualifiers, unless explicitly stated otherwise.
9887 <p><!--para 2 -->
9888  The standard headers are<sup><a href="#note183"><b>183)</b></a></sup>
9889 <pre>
9890         <a href="#7.2">&lt;assert.h&gt;</a>             <a href="#7.9">&lt;iso646.h&gt;</a>              <a href="#7.16">&lt;stdarg.h&gt;</a>              <a href="#7.23">&lt;string.h&gt;</a>
9891         <a href="#7.3">&lt;complex.h&gt;</a>            <a href="#7.10">&lt;limits.h&gt;</a>              <a href="#7.17">&lt;stdatomic.h&gt;</a>           <a href="#7.24">&lt;tgmath.h&gt;</a>
9892         <a href="#7.4">&lt;ctype.h&gt;</a>              <a href="#7.11">&lt;locale.h&gt;</a>              <a href="#7.18">&lt;stdbool.h&gt;</a>             <a href="#7.25">&lt;threads.h&gt;</a>
9893         <a href="#7.5">&lt;errno.h&gt;</a>              <a href="#7.12">&lt;math.h&gt;</a>                <a href="#7.19">&lt;stddef.h&gt;</a>              <a href="#7.26">&lt;time.h&gt;</a>
9894         <a href="#7.6">&lt;fenv.h&gt;</a>               <a href="#7.13">&lt;setjmp.h&gt;</a>              <a href="#7.20">&lt;stdint.h&gt;</a>              <a href="#7.27">&lt;uchar.h&gt;</a>
9895         <a href="#7.7">&lt;float.h&gt;</a>              <a href="#7.14">&lt;signal.h&gt;</a>              <a href="#7.21">&lt;stdio.h&gt;</a>               <a href="#7.28">&lt;wchar.h&gt;</a>
9896         <a href="#7.8">&lt;inttypes.h&gt;</a>           <a href="#7.15">&lt;stdalign.h&gt;</a>            <a href="#7.22">&lt;stdlib.h&gt;</a>              <a href="#7.29">&lt;wctype.h&gt;</a>
9897 </pre>
9898 <p><!--para 3 -->
9899  If a file with the same name as one of the above &lt; and &gt; delimited sequences, not
9900  provided as part of the implementation, is placed in any of the standard places that are
9901  searched for included source files, the behavior is undefined.
9902 <p><!--para 4 -->
9903  Standard headers may be included in any order; each may be included more than once in
9904  a given scope, with no effect different from being included only once, except that the
9905  effect of including <a href="#7.2">&lt;assert.h&gt;</a> depends on the definition of NDEBUG (see <a href="#7.2">7.2</a>). If
9906  used, a header shall be included outside of any external declaration or definition, and it
9907  shall first be included before the first reference to any of the functions or objects it
9908  declares, or to any of the types or macros it defines. However, if an identifier is declared
9909  or defined in more than one header, the second and subsequent associated headers may be
9910  included after the initial reference to the identifier. The program shall not have any
9911  macros with names lexically identical to keywords currently defined prior to the
9912  inclusion.
9913 <p><!--para 5 -->
9914  Any definition of an object-like macro described in this clause shall expand to code that is
9915  fully protected by parentheses where necessary, so that it groups in an arbitrary
9916  expression as if it were a single identifier.
9917 <p><!--para 6 -->
9918  Any declaration of a library function shall have external linkage.
9919  
9920  
9921  
9922  
9923 <!--page 199 -->
9924 <p><!--para 7 -->
9925  A summary of the contents of the standard headers is given in <a href="#B">annex B</a>.
9926 <p><b> Forward references</b>: diagnostics (<a href="#7.2">7.2</a>).
9927
9928 <p><b>Footnotes</b>
9929 <p><small><a name="note182" href="#note182">182)</a> A header is not necessarily a source file, nor are the &lt; and &gt; delimited sequences in header names
9930  necessarily valid source file names.
9931 </small>
9932 <p><small><a name="note183" href="#note183">183)</a> The headers <a href="#7.3">&lt;complex.h&gt;</a>, <a href="#7.17">&lt;stdatomic.h&gt;</a>, and <a href="#7.25">&lt;threads.h&gt;</a> are conditional features that
9933  implementations need not support; see <a href="#6.10.8.3">6.10.8.3</a>.
9934 </small>
9935
9936 <p><small><a href="#Contents">Contents</a></small>
9937 <h4><a name="7.1.3" href="#7.1.3">7.1.3 Reserved identifiers</a></h4>
9938 <p><!--para 1 -->
9939  Each header declares or defines all identifiers listed in its associated subclause, and
9940  optionally declares or defines identifiers listed in its associated future library directions
9941  subclause and identifiers which are always reserved either for any use or for use as file
9942  scope identifiers.
9943 <ul>
9944 <li>  All identifiers that begin with an underscore and either an uppercase letter or another
9945  underscore are always reserved for any use.
9946 <li>  All identifiers that begin with an underscore are always reserved for use as identifiers
9947  with file scope in both the ordinary and tag name spaces.
9948 <li>  Each macro name in any of the following subclauses (including the future library
9949  directions) is reserved for use as specified if any of its associated headers is included;
9950  unless explicitly stated otherwise (see <a href="#7.1.4">7.1.4</a>).
9951 <li>  All identifiers with external linkage in any of the following subclauses (including the
9952  future library directions) and errno are always reserved for use as identifiers with
9953  external linkage.<sup><a href="#note184"><b>184)</b></a></sup>
9954 <li>  Each identifier with file scope listed in any of the following subclauses (including the
9955  future library directions) is reserved for use as a macro name and as an identifier with
9956  file scope in the same name space if any of its associated headers is included.
9957 </ul>
9958 <p><!--para 2 -->
9959  No other identifiers are reserved. If the program declares or defines an identifier in a
9960  context in which it is reserved (other than as allowed by <a href="#7.1.4">7.1.4</a>), or defines a reserved
9961  identifier as a macro name, the behavior is undefined.
9962 <p><!--para 3 -->
9963  If the program removes (with #undef) any macro definition of an identifier in the first
9964  group listed above, the behavior is undefined.
9965  
9966  
9967  
9968  
9969 <!--page 200 -->
9970
9971 <p><b>Footnotes</b>
9972 <p><small><a name="note184" href="#note184">184)</a> The list of reserved identifiers with external linkage includes math_errhandling, setjmp,
9973  va_copy, and va_end.
9974 </small>
9975
9976 <p><small><a href="#Contents">Contents</a></small>
9977 <h4><a name="7.1.4" href="#7.1.4">7.1.4 Use of library functions</a></h4>
9978 <p><!--para 1 -->
9979  Each of the following statements applies unless explicitly stated otherwise in the detailed
9980  descriptions that follow: If an argument to a function has an invalid value (such as a value
9981  outside the domain of the function, or a pointer outside the address space of the program,
9982  or a null pointer, or a pointer to non-modifiable storage when the corresponding
9983  parameter is not const-qualified) or a type (after promotion) not expected by a function
9984  with variable number of arguments, the behavior is undefined. If a function argument is
9985  described as being an array, the pointer actually passed to the function shall have a value
9986  such that all address computations and accesses to objects (that would be valid if the
9987  pointer did point to the first element of such an array) are in fact valid. Any function
9988  declared in a header may be additionally implemented as a function-like macro defined in
9989  the header, so if a library function is declared explicitly when its header is included, one
9990  of the techniques shown below can be used to ensure the declaration is not affected by
9991  such a macro. Any macro definition of a function can be suppressed locally by enclosing
9992  the name of the function in parentheses, because the name is then not followed by the left
9993  parenthesis that indicates expansion of a macro function name. For the same syntactic
9994  reason, it is permitted to take the address of a library function even if it is also defined as
9995  a macro.<sup><a href="#note185"><b>185)</b></a></sup> The use of #undef to remove any macro definition will also ensure that an
9996  actual function is referred to. Any invocation of a library function that is implemented as
9997  a macro shall expand to code that evaluates each of its arguments exactly once, fully
9998  protected by parentheses where necessary, so it is generally safe to use arbitrary
9999  expressions as arguments.<sup><a href="#note186"><b>186)</b></a></sup> Likewise, those function-like macros described in the
10000  following subclauses may be invoked in an expression anywhere a function with a
10001  compatible return type could be called.<sup><a href="#note187"><b>187)</b></a></sup> All object-like macros listed as expanding to
10002  
10003  
10004 <!--page 201 -->
10005  integer constant expressions shall additionally be suitable for use in #if preprocessing
10006  directives.
10007 <p><!--para 2 -->
10008  Provided that a library function can be declared without reference to any type defined in a
10009  header, it is also permissible to declare the function and use it without including its
10010  associated header.
10011 <p><!--para 3 -->
10012  There is a sequence point immediately before a library function returns.
10013 <p><!--para 4 -->
10014  The functions in the standard library are not guaranteed to be reentrant and may modify
10015  objects with static or thread storage duration.<sup><a href="#note188"><b>188)</b></a></sup>
10016 <p><!--para 5 -->
10017  Unless explicitly stated otherwise in the detailed descriptions that follow, library
10018  functions shall prevent data races as follows: A library function shall not directly or
10019  indirectly access objects accessible by threads other than the current thread unless the
10020  objects are accessed directly or indirectly via the function's arguments. A library
10021  function shall not directly or indirectly modify objects accessible by threads other than
10022  the current thread unless the objects are accessed directly or indirectly via the function's
10023  non-const arguments.<sup><a href="#note189"><b>189)</b></a></sup> Implementations may share their own internal objects between
10024  threads if the objects are not visible to users and are protected against data races.
10025 <p><!--para 6 -->
10026  Unless otherwise specified, library functions shall perform all operations solely within the
10027  current thread if those operations have effects that are visible to users.<sup><a href="#note190"><b>190)</b></a></sup>
10028 <p><!--para 7 -->
10029  EXAMPLE        The function atoi may be used in any of several ways:
10030 <ul>
10031 <li>  by use of its associated header (possibly generating a macro expansion)
10032 <pre>
10033             #include <a href="#7.22">&lt;stdlib.h&gt;</a>
10034             const char *str;
10035             /* ... */
10036             i = atoi(str);
10037 </pre>
10038 <li>  by use of its associated header (assuredly generating a true function reference)
10039  
10040  
10041  
10042  
10043 <!--page 202 -->
10044 <pre>
10045            #include <a href="#7.22">&lt;stdlib.h&gt;</a>
10046            #undef atoi
10047            const char *str;
10048            /* ... */
10049            i = atoi(str);
10050 </pre>
10051   or
10052 <pre>
10053            #include <a href="#7.22">&lt;stdlib.h&gt;</a>
10054            const char *str;
10055            /* ... */
10056            i = (atoi)(str);
10057 </pre>
10058 <li>  by explicit declaration
10059 <!--page 203 -->
10060 <pre>
10061            extern int atoi(const char *);
10062            const char *str;
10063            /* ... */
10064            i = atoi(str);
10065 </pre>
10066 </ul>
10067
10068 <p><b>Footnotes</b>
10069 <p><small><a name="note185" href="#note185">185)</a> This means that an implementation shall provide an actual function for each library function, even if it
10070  also provides a macro for that function.
10071 </small>
10072 <p><small><a name="note186" href="#note186">186)</a> Such macros might not contain the sequence points that the corresponding function calls do.
10073 </small>
10074 <p><small><a name="note187" href="#note187">187)</a> Because external identifiers and some macro names beginning with an underscore are reserved,
10075  implementations may provide special semantics for such names. For example, the identifier
10076  _BUILTIN_abs could be used to indicate generation of in-line code for the abs function. Thus, the
10077  appropriate header could specify
10078
10079 <pre>
10080            #define abs(x) _BUILTIN_abs(x)
10081 </pre>
10082   for a compiler whose code generator will accept it.
10083   In this manner, a user desiring to guarantee that a given library function such as abs will be a genuine
10084   function may write
10085
10086 <pre>
10087            #undef abs
10088 </pre>
10089   whether the implementation's header provides a macro implementation of abs or a built-in
10090   implementation. The prototype for the function, which precedes and is hidden by any macro
10091   definition, is thereby revealed also.
10092 </small>
10093 <p><small><a name="note188" href="#note188">188)</a> Thus, a signal handler cannot, in general, call standard library functions.
10094 </small>
10095 <p><small><a name="note189" href="#note189">189)</a> This means, for example, that an implementation is not permitted to use a static object for internal
10096  purposes without synchronization because it could cause a data race even in programs that do not
10097  explicitly share objects between threads.
10098 </small>
10099 <p><small><a name="note190" href="#note190">190)</a> This allows implementations to parallelize operations if there are no visible side effects.
10100 </small>
10101
10102 <p><small><a href="#Contents">Contents</a></small>
10103 <h3><a name="7.2" href="#7.2">7.2 Diagnostics &lt;assert.h&gt;</a></h3>
10104 <p><!--para 1 -->
10105  The header <a href="#7.2">&lt;assert.h&gt;</a> defines the assert and static_assert macros and
10106  refers to another macro,
10107 <pre>
10108          NDEBUG
10109 </pre>
10110  which is not defined by <a href="#7.2">&lt;assert.h&gt;</a>. If NDEBUG is defined as a macro name at the
10111  point in the source file where <a href="#7.2">&lt;assert.h&gt;</a> is included, the assert macro is defined
10112  simply as
10113 <pre>
10114          #define assert(ignore) ((void)0)
10115 </pre>
10116  The assert macro is redefined according to the current state of NDEBUG each time that
10117  <a href="#7.2">&lt;assert.h&gt;</a> is included.
10118 <p><!--para 2 -->
10119  The assert macro shall be implemented as a macro, not as an actual function. If the
10120  macro definition is suppressed in order to access an actual function, the behavior is
10121  undefined.
10122 <p><!--para 3 -->
10123  The macro
10124 <pre>
10125          static_assert
10126 </pre>
10127  expands to _Static_assert.
10128
10129 <p><small><a href="#Contents">Contents</a></small>
10130 <h4><a name="7.2.1" href="#7.2.1">7.2.1 Program diagnostics</a></h4>
10131
10132 <p><small><a href="#Contents">Contents</a></small>
10133 <h5><a name="7.2.1.1" href="#7.2.1.1">7.2.1.1 The assert macro</a></h5>
10134 <p><b>Synopsis</b>
10135 <p><!--para 1 -->
10136 <pre>
10137          #include <a href="#7.2">&lt;assert.h&gt;</a>
10138          void assert(scalar expression);
10139 </pre>
10140 <p><b>Description</b>
10141 <p><!--para 2 -->
10142  The assert macro puts diagnostic tests into programs; it expands to a void expression.
10143  When it is executed, if expression (which shall have a scalar type) is false (that is,
10144  compares equal to 0), the assert macro writes information about the particular call that
10145  failed (including the text of the argument, the name of the source file, the source line
10146  number, and the name of the enclosing function -- the latter are respectively the values of
10147  the preprocessing macros __FILE__ and __LINE__ and of the identifier
10148  __func__) on the standard error stream in an implementation-defined format.<sup><a href="#note191"><b>191)</b></a></sup> It
10149  then calls the abort function.
10150  
10151  
10152  
10153 <!--page 204 -->
10154 <p><b>Returns</b>
10155 <p><!--para 3 -->
10156  The assert macro returns no value.
10157 <p><b> Forward references</b>: the abort function (<a href="#7.22.4.1">7.22.4.1</a>).
10158 <!--page 205 -->
10159
10160 <p><b>Footnotes</b>
10161 <p><small><a name="note191" href="#note191">191)</a> The message written might be of the form:
10162  Assertion failed: expression, function abc, file xyz, line nnn.
10163 </small>
10164
10165 <p><small><a href="#Contents">Contents</a></small>
10166 <h3><a name="7.3" href="#7.3">7.3 Complex arithmetic &lt;complex.h&gt;</a></h3>
10167
10168 <p><small><a href="#Contents">Contents</a></small>
10169 <h4><a name="7.3.1" href="#7.3.1">7.3.1 Introduction</a></h4>
10170 <p><!--para 1 -->
10171  The header <a href="#7.3">&lt;complex.h&gt;</a> defines macros and declares functions that support complex
10172  arithmetic.<sup><a href="#note192"><b>192)</b></a></sup>
10173 <p><!--para 2 -->
10174  Implementations that define the macro __STDC_NO_COMPLEX__ need not provide
10175  this header nor support any of its facilities.
10176 <p><!--para 3 -->
10177  Each synopsis specifies a family of functions consisting of a principal function with one
10178  or more double complex parameters and a double complex or double return
10179  value; and other functions with the same name but with f and l suffixes which are
10180  corresponding functions with float and long double parameters and return values.
10181 <p><!--para 4 -->
10182  The macro
10183 <pre>
10184           complex
10185 </pre>
10186  expands to _Complex; the macro
10187 <pre>
10188           _Complex_I
10189 </pre>
10190  expands to a constant expression of type const float _Complex, with the value of
10191  the imaginary unit.<sup><a href="#note193"><b>193)</b></a></sup>
10192 <p><!--para 5 -->
10193  The macros
10194 <pre>
10195           imaginary
10196 </pre>
10197  and
10198 <pre>
10199           _Imaginary_I
10200 </pre>
10201  are defined if and only if the implementation supports imaginary types;<sup><a href="#note194"><b>194)</b></a></sup> if defined,
10202  they expand to _Imaginary and a constant expression of type const float
10203  _Imaginary with the value of the imaginary unit.
10204 <p><!--para 6 -->
10205  The macro
10206 <pre>
10207           I
10208 </pre>
10209  expands to either _Imaginary_I or _Complex_I. If _Imaginary_I is not
10210  defined, I shall expand to _Complex_I.
10211 <p><!--para 7 -->
10212  Notwithstanding the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and perhaps then
10213  redefine the macros complex, imaginary, and I.
10214  
10215 <!--page 206 -->
10216 <p><b> Forward references</b>: IEC 60559-compatible complex arithmetic (<a href="#G">annex G</a>).
10217
10218 <p><b>Footnotes</b>
10219 <p><small><a name="note192" href="#note192">192)</a> See ''future library directions'' (<a href="#7.30.1">7.30.1</a>).
10220 </small>
10221 <p><small><a name="note193" href="#note193">193)</a> The imaginary unit is a number i such that i 2 = -1.
10222 </small>
10223 <p><small><a name="note194" href="#note194">194)</a> A specification for imaginary types is in informative <a href="#G">annex G</a>.
10224 </small>
10225
10226 <p><small><a href="#Contents">Contents</a></small>
10227 <h4><a name="7.3.2" href="#7.3.2">7.3.2 Conventions</a></h4>
10228 <p><!--para 1 -->
10229  Values are interpreted as radians, not degrees. An implementation may set errno but is
10230  not required to.
10231
10232 <p><small><a href="#Contents">Contents</a></small>
10233 <h4><a name="7.3.3" href="#7.3.3">7.3.3 Branch cuts</a></h4>
10234 <p><!--para 1 -->
10235  Some of the functions below have branch cuts, across which the function is
10236  discontinuous. For implementations with a signed zero (including all IEC 60559
10237  implementations) that follow the specifications of <a href="#G">annex G</a>, the sign of zero distinguishes
10238  one side of a cut from another so the function is continuous (except for format
10239  limitations) as the cut is approached from either side. For example, for the square root
10240  function, which has a branch cut along the negative real axis, the top of the cut, with
10241  imaginary part +0, maps to the positive imaginary axis, and the bottom of the cut, with
10242  imaginary part -0, maps to the negative imaginary axis.
10243 <p><!--para 2 -->
10244  Implementations that do not support a signed zero (see <a href="#F">annex F</a>) cannot distinguish the
10245  sides of branch cuts. These implementations shall map a cut so the function is continuous
10246  as the cut is approached coming around the finite endpoint of the cut in a counter
10247  clockwise direction. (Branch cuts for the functions specified here have just one finite
10248  endpoint.) For example, for the square root function, coming counter clockwise around
10249  the finite endpoint of the cut along the negative real axis approaches the cut from above,
10250  so the cut maps to the positive imaginary axis.
10251
10252 <p><small><a href="#Contents">Contents</a></small>
10253 <h4><a name="7.3.4" href="#7.3.4">7.3.4 The CX_LIMITED_RANGE pragma</a></h4>
10254 <p><b>Synopsis</b>
10255 <p><!--para 1 -->
10256 <pre>
10257         #include <a href="#7.3">&lt;complex.h&gt;</a>
10258         #pragma STDC CX_LIMITED_RANGE on-off-switch
10259 </pre>
10260 <p><b>Description</b>
10261 <p><!--para 2 -->
10262  The usual mathematical formulas for complex multiply, divide, and absolute value are
10263  problematic because of their treatment of infinities and because of undue overflow and
10264  underflow. The CX_LIMITED_RANGE pragma can be used to inform the
10265  implementation that (where the state is ''on'') the usual mathematical formulas are
10266  acceptable.<sup><a href="#note195"><b>195)</b></a></sup> The pragma can occur either outside external declarations or preceding all
10267  explicit declarations and statements inside a compound statement. When outside external
10268  declarations, the pragma takes effect from its occurrence until another
10269  CX_LIMITED_RANGE pragma is encountered, or until the end of the translation unit.
10270  When inside a compound statement, the pragma takes effect from its occurrence until
10271  another CX_LIMITED_RANGE pragma is encountered (including within a nested
10272  compound statement), or until the end of the compound statement; at the end of a
10273  compound statement the state for the pragma is restored to its condition just before the
10274 <!--page 207 -->
10275  compound statement. If this pragma is used in any other context, the behavior is
10276  undefined. The default state for the pragma is ''off''.
10277
10278 <p><b>Footnotes</b>
10279 <p><small><a name="note195" href="#note195">195)</a> The purpose of the pragma is to allow the implementation to use the formulas:
10280
10281 <pre>
10282     (x + iy) x (u + iv) = (xu - yv) + i(yu + xv)
10283     (x + iy) / (u + iv) = [(xu + yv) + i(yu - xv)]/(u2 + v 2 )
10284     | x + iy | = (sqrt) x 2 + y 2
10285                  -----
10286 </pre>
10287  where the programmer can determine they are safe.
10288 </small>
10289
10290 <p><small><a href="#Contents">Contents</a></small>
10291 <h4><a name="7.3.5" href="#7.3.5">7.3.5 Trigonometric functions</a></h4>
10292
10293 <p><small><a href="#Contents">Contents</a></small>
10294 <h5><a name="7.3.5.1" href="#7.3.5.1">7.3.5.1 The cacos functions</a></h5>
10295 <p><b>Synopsis</b>
10296 <p><!--para 1 -->
10297 <pre>
10298          #include <a href="#7.3">&lt;complex.h&gt;</a>
10299          double complex cacos(double complex z);
10300          float complex cacosf(float complex z);
10301          long double complex cacosl(long double complex z);
10302 </pre>
10303 <p><b>Description</b>
10304 <p><!--para 2 -->
10305  The cacos functions compute the complex arc cosine of z, with branch cuts outside the
10306  interval [-1, +1] along the real axis.
10307 <p><b>Returns</b>
10308 <p><!--para 3 -->
10309  The cacos functions return the complex arc cosine value, in the range of a strip
10310  mathematically unbounded along the imaginary axis and in the interval [0, pi ] along the
10311  real axis.
10312
10313 <p><small><a href="#Contents">Contents</a></small>
10314 <h5><a name="7.3.5.2" href="#7.3.5.2">7.3.5.2 The casin functions</a></h5>
10315 <p><b>Synopsis</b>
10316 <p><!--para 1 -->
10317 <pre>
10318          #include <a href="#7.3">&lt;complex.h&gt;</a>
10319          double complex casin(double complex z);
10320          float complex casinf(float complex z);
10321          long double complex casinl(long double complex z);
10322 </pre>
10323 <p><b>Description</b>
10324 <p><!--para 2 -->
10325  The casin functions compute the complex arc sine of z, with branch cuts outside the
10326  interval [-1, +1] along the real axis.
10327 <p><b>Returns</b>
10328 <p><!--para 3 -->
10329  The casin functions return the complex arc sine value, in the range of a strip
10330  mathematically unbounded along the imaginary axis and in the interval [-pi /2, +pi /2]
10331  
10332 <!--page 208 -->
10333  along the real axis.
10334
10335 <p><small><a href="#Contents">Contents</a></small>
10336 <h5><a name="7.3.5.3" href="#7.3.5.3">7.3.5.3 The catan functions</a></h5>
10337 <p><b>Synopsis</b>
10338 <p><!--para 1 -->
10339 <pre>
10340         #include <a href="#7.3">&lt;complex.h&gt;</a>
10341         double complex catan(double complex z);
10342         float complex catanf(float complex z);
10343         long double complex catanl(long double complex z);
10344 </pre>
10345 <p><b>Description</b>
10346 <p><!--para 2 -->
10347  The catan functions compute the complex arc tangent of z, with branch cuts outside the
10348  interval [-i, +i] along the imaginary axis.
10349 <p><b>Returns</b>
10350 <p><!--para 3 -->
10351  The catan functions return the complex arc tangent value, in the range of a strip
10352  mathematically unbounded along the imaginary axis and in the interval [-pi /2, +pi /2]
10353  along the real axis.
10354
10355 <p><small><a href="#Contents">Contents</a></small>
10356 <h5><a name="7.3.5.4" href="#7.3.5.4">7.3.5.4 The ccos functions</a></h5>
10357 <p><b>Synopsis</b>
10358 <p><!--para 1 -->
10359 <pre>
10360         #include <a href="#7.3">&lt;complex.h&gt;</a>
10361         double complex ccos(double complex z);
10362         float complex ccosf(float complex z);
10363         long double complex ccosl(long double complex z);
10364 </pre>
10365 <p><b>Description</b>
10366 <p><!--para 2 -->
10367  The ccos functions compute the complex cosine of z.
10368 <p><b>Returns</b>
10369 <p><!--para 3 -->
10370  The ccos functions return the complex cosine value.
10371
10372 <p><small><a href="#Contents">Contents</a></small>
10373 <h5><a name="7.3.5.5" href="#7.3.5.5">7.3.5.5 The csin functions</a></h5>
10374 <p><b>Synopsis</b>
10375 <p><!--para 1 -->
10376 <pre>
10377         #include <a href="#7.3">&lt;complex.h&gt;</a>
10378         double complex csin(double complex z);
10379         float complex csinf(float complex z);
10380         long double complex csinl(long double complex z);
10381 </pre>
10382 <p><b>Description</b>
10383 <p><!--para 2 -->
10384  The csin functions compute the complex sine of z.
10385 <!--page 209 -->
10386 <p><b>Returns</b>
10387 <p><!--para 3 -->
10388  The csin functions return the complex sine value.
10389
10390 <p><small><a href="#Contents">Contents</a></small>
10391 <h5><a name="7.3.5.6" href="#7.3.5.6">7.3.5.6 The ctan functions</a></h5>
10392 <p><b>Synopsis</b>
10393 <p><!--para 1 -->
10394 <pre>
10395          #include <a href="#7.3">&lt;complex.h&gt;</a>
10396          double complex ctan(double complex z);
10397          float complex ctanf(float complex z);
10398          long double complex ctanl(long double complex z);
10399 </pre>
10400 <p><b>Description</b>
10401 <p><!--para 2 -->
10402  The ctan functions compute the complex tangent of z.
10403 <p><b>Returns</b>
10404 <p><!--para 3 -->
10405  The ctan functions return the complex tangent value.
10406
10407 <p><small><a href="#Contents">Contents</a></small>
10408 <h4><a name="7.3.6" href="#7.3.6">7.3.6 Hyperbolic functions</a></h4>
10409
10410 <p><small><a href="#Contents">Contents</a></small>
10411 <h5><a name="7.3.6.1" href="#7.3.6.1">7.3.6.1 The cacosh functions</a></h5>
10412 <p><b>Synopsis</b>
10413 <p><!--para 1 -->
10414 <pre>
10415          #include <a href="#7.3">&lt;complex.h&gt;</a>
10416          double complex cacosh(double complex z);
10417          float complex cacoshf(float complex z);
10418          long double complex cacoshl(long double complex z);
10419 </pre>
10420 <p><b>Description</b>
10421 <p><!--para 2 -->
10422  The cacosh functions compute the complex arc hyperbolic cosine of z, with a branch
10423  cut at values less than 1 along the real axis.
10424 <p><b>Returns</b>
10425 <p><!--para 3 -->
10426  The cacosh functions return the complex arc hyperbolic cosine value, in the range of a
10427  half-strip of nonnegative values along the real axis and in the interval [-ipi , +ipi ] along the
10428  imaginary axis.
10429
10430 <p><small><a href="#Contents">Contents</a></small>
10431 <h5><a name="7.3.6.2" href="#7.3.6.2">7.3.6.2 The casinh functions</a></h5>
10432 <p><b>Synopsis</b>
10433 <p><!--para 1 -->
10434 <!--page 210 -->
10435 <pre>
10436          #include <a href="#7.3">&lt;complex.h&gt;</a>
10437          double complex casinh(double complex z);
10438          float complex casinhf(float complex z);
10439          long double complex casinhl(long double complex z);
10440 </pre>
10441 <p><b>Description</b>
10442 <p><!--para 2 -->
10443  The casinh functions compute the complex arc hyperbolic sine of z, with branch cuts
10444  outside the interval [-i, +i] along the imaginary axis.
10445 <p><b>Returns</b>
10446 <p><!--para 3 -->
10447  The casinh functions return the complex arc hyperbolic sine value, in the range of a
10448  strip mathematically unbounded along the real axis and in the interval [-ipi /2, +ipi /2]
10449  along the imaginary axis.
10450
10451 <p><small><a href="#Contents">Contents</a></small>
10452 <h5><a name="7.3.6.3" href="#7.3.6.3">7.3.6.3 The catanh functions</a></h5>
10453 <p><b>Synopsis</b>
10454 <p><!--para 1 -->
10455 <pre>
10456         #include <a href="#7.3">&lt;complex.h&gt;</a>
10457         double complex catanh(double complex z);
10458         float complex catanhf(float complex z);
10459         long double complex catanhl(long double complex z);
10460 </pre>
10461 <p><b>Description</b>
10462 <p><!--para 2 -->
10463  The catanh functions compute the complex arc hyperbolic tangent of z, with branch
10464  cuts outside the interval [-1, +1] along the real axis.
10465 <p><b>Returns</b>
10466 <p><!--para 3 -->
10467  The catanh functions return the complex arc hyperbolic tangent value, in the range of a
10468  strip mathematically unbounded along the real axis and in the interval [-ipi /2, +ipi /2]
10469  along the imaginary axis.
10470
10471 <p><small><a href="#Contents">Contents</a></small>
10472 <h5><a name="7.3.6.4" href="#7.3.6.4">7.3.6.4 The ccosh functions</a></h5>
10473 <p><b>Synopsis</b>
10474 <p><!--para 1 -->
10475 <pre>
10476         #include <a href="#7.3">&lt;complex.h&gt;</a>
10477         double complex ccosh(double complex z);
10478         float complex ccoshf(float complex z);
10479         long double complex ccoshl(long double complex z);
10480 </pre>
10481 <p><b>Description</b>
10482 <p><!--para 2 -->
10483  The ccosh functions compute the complex hyperbolic cosine of z.
10484 <p><b>Returns</b>
10485 <p><!--para 3 -->
10486  The ccosh functions return the complex hyperbolic cosine value.
10487 <!--page 211 -->
10488
10489 <p><small><a href="#Contents">Contents</a></small>
10490 <h5><a name="7.3.6.5" href="#7.3.6.5">7.3.6.5 The csinh functions</a></h5>
10491 <p><b>Synopsis</b>
10492 <p><!--para 1 -->
10493 <pre>
10494          #include <a href="#7.3">&lt;complex.h&gt;</a>
10495          double complex csinh(double complex z);
10496          float complex csinhf(float complex z);
10497          long double complex csinhl(long double complex z);
10498 </pre>
10499 <p><b>Description</b>
10500 <p><!--para 2 -->
10501  The csinh functions compute the complex hyperbolic sine of z.
10502 <p><b>Returns</b>
10503 <p><!--para 3 -->
10504  The csinh functions return the complex hyperbolic sine value.
10505
10506 <p><small><a href="#Contents">Contents</a></small>
10507 <h5><a name="7.3.6.6" href="#7.3.6.6">7.3.6.6 The ctanh functions</a></h5>
10508 <p><b>Synopsis</b>
10509 <p><!--para 1 -->
10510 <pre>
10511          #include <a href="#7.3">&lt;complex.h&gt;</a>
10512          double complex ctanh(double complex z);
10513          float complex ctanhf(float complex z);
10514          long double complex ctanhl(long double complex z);
10515 </pre>
10516 <p><b>Description</b>
10517 <p><!--para 2 -->
10518  The ctanh functions compute the complex hyperbolic tangent of z.
10519 <p><b>Returns</b>
10520 <p><!--para 3 -->
10521  The ctanh functions return the complex hyperbolic tangent value.
10522
10523 <p><small><a href="#Contents">Contents</a></small>
10524 <h4><a name="7.3.7" href="#7.3.7">7.3.7 Exponential and logarithmic functions</a></h4>
10525
10526 <p><small><a href="#Contents">Contents</a></small>
10527 <h5><a name="7.3.7.1" href="#7.3.7.1">7.3.7.1 The cexp functions</a></h5>
10528 <p><b>Synopsis</b>
10529 <p><!--para 1 -->
10530 <pre>
10531          #include <a href="#7.3">&lt;complex.h&gt;</a>
10532          double complex cexp(double complex z);
10533          float complex cexpf(float complex z);
10534          long double complex cexpl(long double complex z);
10535 </pre>
10536 <p><b>Description</b>
10537 <p><!--para 2 -->
10538  The cexp functions compute the complex base-e exponential of z.
10539 <p><b>Returns</b>
10540 <p><!--para 3 -->
10541  The cexp functions return the complex base-e exponential value.
10542 <!--page 212 -->
10543
10544 <p><small><a href="#Contents">Contents</a></small>
10545 <h5><a name="7.3.7.2" href="#7.3.7.2">7.3.7.2 The clog functions</a></h5>
10546 <p><b>Synopsis</b>
10547 <p><!--para 1 -->
10548 <pre>
10549         #include <a href="#7.3">&lt;complex.h&gt;</a>
10550         double complex clog(double complex z);
10551         float complex clogf(float complex z);
10552         long double complex clogl(long double complex z);
10553 </pre>
10554 <p><b>Description</b>
10555 <p><!--para 2 -->
10556  The clog functions compute the complex natural (base-e) logarithm of z, with a branch
10557  cut along the negative real axis.
10558 <p><b>Returns</b>
10559 <p><!--para 3 -->
10560  The clog functions return the complex natural logarithm value, in the range of a strip
10561  mathematically unbounded along the real axis and in the interval [-ipi , +ipi ] along the
10562  imaginary axis.
10563
10564 <p><small><a href="#Contents">Contents</a></small>
10565 <h4><a name="7.3.8" href="#7.3.8">7.3.8 Power and absolute-value functions</a></h4>
10566
10567 <p><small><a href="#Contents">Contents</a></small>
10568 <h5><a name="7.3.8.1" href="#7.3.8.1">7.3.8.1 The cabs functions</a></h5>
10569 <p><b>Synopsis</b>
10570 <p><!--para 1 -->
10571 <pre>
10572         #include <a href="#7.3">&lt;complex.h&gt;</a>
10573         double cabs(double complex z);
10574         float cabsf(float complex z);
10575         long double cabsl(long double complex z);
10576 </pre>
10577 <p><b>Description</b>
10578 <p><!--para 2 -->
10579  The cabs functions compute the complex absolute value (also called norm, modulus, or
10580  magnitude) of z.
10581 <p><b>Returns</b>
10582 <p><!--para 3 -->
10583  The cabs functions return the complex absolute value.
10584
10585 <p><small><a href="#Contents">Contents</a></small>
10586 <h5><a name="7.3.8.2" href="#7.3.8.2">7.3.8.2 The cpow functions</a></h5>
10587 <p><b>Synopsis</b>
10588 <p><!--para 1 -->
10589 <!--page 213 -->
10590 <pre>
10591         #include <a href="#7.3">&lt;complex.h&gt;</a>
10592         double complex cpow(double complex x, double complex y);
10593         float complex cpowf(float complex x, float complex y);
10594         long double complex cpowl(long double complex x,
10595              long double complex y);
10596 </pre>
10597 <p><b>Description</b>
10598 <p><!--para 2 -->
10599  The cpow functions compute the complex power function xy , with a branch cut for the
10600  first parameter along the negative real axis.
10601 <p><b>Returns</b>
10602 <p><!--para 3 -->
10603  The cpow functions return the complex power function value.
10604
10605 <p><small><a href="#Contents">Contents</a></small>
10606 <h5><a name="7.3.8.3" href="#7.3.8.3">7.3.8.3 The csqrt functions</a></h5>
10607 <p><b>Synopsis</b>
10608 <p><!--para 1 -->
10609 <pre>
10610          #include <a href="#7.3">&lt;complex.h&gt;</a>
10611          double complex csqrt(double complex z);
10612          float complex csqrtf(float complex z);
10613          long double complex csqrtl(long double complex z);
10614 </pre>
10615 <p><b>Description</b>
10616 <p><!--para 2 -->
10617  The csqrt functions compute the complex square root of z, with a branch cut along the
10618  negative real axis.
10619 <p><b>Returns</b>
10620 <p><!--para 3 -->
10621  The csqrt functions return the complex square root value, in the range of the right half-
10622  plane (including the imaginary axis).
10623
10624 <p><small><a href="#Contents">Contents</a></small>
10625 <h4><a name="7.3.9" href="#7.3.9">7.3.9 Manipulation functions</a></h4>
10626
10627 <p><small><a href="#Contents">Contents</a></small>
10628 <h5><a name="7.3.9.1" href="#7.3.9.1">7.3.9.1 The carg functions</a></h5>
10629 <p><b>Synopsis</b>
10630 <p><!--para 1 -->
10631 <pre>
10632          #include <a href="#7.3">&lt;complex.h&gt;</a>
10633          double carg(double complex z);
10634          float cargf(float complex z);
10635          long double cargl(long double complex z);
10636 </pre>
10637 <p><b>Description</b>
10638 <p><!--para 2 -->
10639  The carg functions compute the argument (also called phase angle) of z, with a branch
10640  cut along the negative real axis.
10641 <p><b>Returns</b>
10642 <p><!--para 3 -->
10643  The carg functions return the value of the argument in the interval [-pi , +pi ].
10644 <!--page 214 -->
10645
10646 <p><small><a href="#Contents">Contents</a></small>
10647 <h5><a name="7.3.9.2" href="#7.3.9.2">7.3.9.2 The cimag functions</a></h5>
10648 <p><b>Synopsis</b>
10649 <p><!--para 1 -->
10650 <pre>
10651         #include <a href="#7.3">&lt;complex.h&gt;</a>
10652         double cimag(double complex z);
10653         float cimagf(float complex z);
10654         long double cimagl(long double complex z);
10655 </pre>
10656 <p><b>Description</b>
10657 <p><!--para 2 -->
10658  The cimag functions compute the imaginary part of z.<sup><a href="#note196"><b>196)</b></a></sup>
10659 <p><b>Returns</b>
10660 <p><!--para 3 -->
10661  The cimag functions return the imaginary part value (as a real).
10662
10663 <p><b>Footnotes</b>
10664 <p><small><a name="note196" href="#note196">196)</a> For a variable z of complex type, z == creal(z) + cimag(z)*I.
10665 </small>
10666
10667 <p><small><a href="#Contents">Contents</a></small>
10668 <h5><a name="7.3.9.3" href="#7.3.9.3">7.3.9.3 The CMPLX macros</a></h5>
10669 <p><b>Synopsis</b>
10670 <p><!--para 1 -->
10671 <pre>
10672         #include <a href="#7.3">&lt;complex.h&gt;</a>
10673         double complex CMPLX(double x, double y);
10674         float complex CMPLXF(float x, float y);
10675         long double complex CMPLXL(long double x, long double y);
10676 </pre>
10677 <p><b>Description</b>
10678 <p><!--para 2 -->
10679  The CMPLX macros expand to an expression of the specified complex type, with the real
10680  part having the (converted) value of x and the imaginary part having the (converted)
10681  value of y.
10682 <p><b>Recommended practice</b>
10683 <p><!--para 3 -->
10684  The resulting expression should be suitable for use as an initializer for an object with
10685  static or thread storage duration, provided both arguments are likewise suitable.
10686 <p><b>Returns</b>
10687 <p><!--para 4 -->
10688  The CMPLX macros return the complex value x + i y.
10689 <p><!--para 5 -->
10690  NOTE    These macros act as if the implementation supported imaginary types and the definitions were:
10691 <pre>
10692        #define CMPLX(x, y)  ((double complex)((double)(x) + \
10693                                      _Imaginary_I * (double)(y)))
10694        #define CMPLXF(x, y) ((float complex)((float)(x) + \
10695                                      _Imaginary_I * (float)(y)))
10696        #define CMPLXL(x, y) ((long double complex)((long double)(x) + \
10697                                      _Imaginary_I * (long double)(y)))
10698 </pre>
10699  
10700  
10701  
10702  
10703 <!--page 215 -->
10704
10705 <p><small><a href="#Contents">Contents</a></small>
10706 <h5><a name="7.3.9.4" href="#7.3.9.4">7.3.9.4 The conj functions</a></h5>
10707 <p><b>Synopsis</b>
10708 <p><!--para 1 -->
10709 <pre>
10710          #include <a href="#7.3">&lt;complex.h&gt;</a>
10711          double complex conj(double complex z);
10712          float complex conjf(float complex z);
10713          long double complex conjl(long double complex z);
10714 </pre>
10715 <p><b>Description</b>
10716 <p><!--para 2 -->
10717  The conj functions compute the complex conjugate of z, by reversing the sign of its
10718  imaginary part.
10719 <p><b>Returns</b>
10720 <p><!--para 3 -->
10721  The conj functions return the complex conjugate value.
10722
10723 <p><small><a href="#Contents">Contents</a></small>
10724 <h5><a name="7.3.9.5" href="#7.3.9.5">7.3.9.5 The cproj functions</a></h5>
10725 <p><b>Synopsis</b>
10726 <p><!--para 1 -->
10727 <pre>
10728          #include <a href="#7.3">&lt;complex.h&gt;</a>
10729          double complex cproj(double complex z);
10730          float complex cprojf(float complex z);
10731          long double complex cprojl(long double complex z);
10732 </pre>
10733 <p><b>Description</b>
10734 <p><!--para 2 -->
10735  The cproj functions compute a projection of z onto the Riemann sphere: z projects to
10736  z except that all complex infinities (even those with one infinite part and one NaN part)
10737  project to positive infinity on the real axis. If z has an infinite part, then cproj(z) is
10738  equivalent to
10739 <pre>
10740          INFINITY + I * copysign(0.0, cimag(z))
10741 </pre>
10742 <p><b>Returns</b>
10743 <p><!--para 3 -->
10744  The cproj functions return the value of the projection onto the Riemann sphere.
10745
10746 <p><small><a href="#Contents">Contents</a></small>
10747 <h5><a name="7.3.9.6" href="#7.3.9.6">7.3.9.6 The creal functions</a></h5>
10748 <p><b>Synopsis</b>
10749 <p><!--para 1 -->
10750 <pre>
10751          #include <a href="#7.3">&lt;complex.h&gt;</a>
10752          double creal(double complex z);
10753          float crealf(float complex z);
10754          long double creall(long double complex z);
10755 </pre>
10756 <p><b>Description</b>
10757 <p><!--para 2 -->
10758  The creal functions compute the real part of z.<sup><a href="#note197"><b>197)</b></a></sup>
10759 <!--page 216 -->
10760 <p><b>Returns</b>
10761 <p><!--para 3 -->
10762  The creal functions return the real part value.
10763  
10764  
10765  
10766  
10767 <!--page 217 -->
10768
10769 <p><b>Footnotes</b>
10770 <p><small><a name="note197" href="#note197">197)</a> For a variable z of complex type, z == creal(z) + cimag(z)*I.
10771 </small>
10772
10773 <p><small><a href="#Contents">Contents</a></small>
10774 <h3><a name="7.4" href="#7.4">7.4 Character handling &lt;ctype.h&gt;</a></h3>
10775 <p><!--para 1 -->
10776  The header <a href="#7.4">&lt;ctype.h&gt;</a> declares several functions useful for classifying and mapping
10777  characters.<sup><a href="#note198"><b>198)</b></a></sup> In all cases the argument is an int, the value of which shall be
10778  representable as an unsigned char or shall equal the value of the macro EOF. If the
10779  argument has any other value, the behavior is undefined.
10780 <p><!--para 2 -->
10781  The behavior of these functions is affected by the current locale. Those functions that
10782  have locale-specific aspects only when not in the "C" locale are noted below.
10783 <p><!--para 3 -->
10784  The term printing character refers to a member of a locale-specific set of characters, each
10785  of which occupies one printing position on a display device; the term control character
10786  refers to a member of a locale-specific set of characters that are not printing
10787  characters.<sup><a href="#note199"><b>199)</b></a></sup> All letters and digits are printing characters.
10788 <p><b> Forward references</b>: EOF (<a href="#7.21.1">7.21.1</a>), localization (<a href="#7.11">7.11</a>).
10789
10790 <p><b>Footnotes</b>
10791 <p><small><a name="note198" href="#note198">198)</a> See ''future library directions'' (<a href="#7.30.2">7.30.2</a>).
10792 </small>
10793 <p><small><a name="note199" href="#note199">199)</a> In an implementation that uses the seven-bit US ASCII character set, the printing characters are those
10794  whose values lie from 0x20 (space) through 0x7E (tilde); the control characters are those whose
10795  values lie from 0 (NUL) through 0x1F (US), and the character 0x7F (DEL).
10796 </small>
10797
10798 <p><small><a href="#Contents">Contents</a></small>
10799 <h4><a name="7.4.1" href="#7.4.1">7.4.1 Character classification functions</a></h4>
10800 <p><!--para 1 -->
10801  The functions in this subclause return nonzero (true) if and only if the value of the
10802  argument c conforms to that in the description of the function.
10803
10804 <p><small><a href="#Contents">Contents</a></small>
10805 <h5><a name="7.4.1.1" href="#7.4.1.1">7.4.1.1 The isalnum function</a></h5>
10806 <p><b>Synopsis</b>
10807 <p><!--para 1 -->
10808 <pre>
10809           #include <a href="#7.4">&lt;ctype.h&gt;</a>
10810           int isalnum(int c);
10811 </pre>
10812 <p><b>Description</b>
10813 <p><!--para 2 -->
10814  The isalnum function tests for any character for which isalpha or isdigit is true.
10815
10816 <p><small><a href="#Contents">Contents</a></small>
10817 <h5><a name="7.4.1.2" href="#7.4.1.2">7.4.1.2 The isalpha function</a></h5>
10818 <p><b>Synopsis</b>
10819 <p><!--para 1 -->
10820 <pre>
10821           #include <a href="#7.4">&lt;ctype.h&gt;</a>
10822           int isalpha(int c);
10823 </pre>
10824 <p><b>Description</b>
10825 <p><!--para 2 -->
10826  The isalpha function tests for any character for which isupper or islower is true,
10827  or any character that is one of a locale-specific set of alphabetic characters for which
10828  
10829  
10830  
10831 <!--page 218 -->
10832  none of iscntrl, isdigit, ispunct, or isspace is true.<sup><a href="#note200"><b>200)</b></a></sup> In the "C" locale,
10833  isalpha returns true only for the characters for which isupper or islower is true.
10834
10835 <p><b>Footnotes</b>
10836 <p><small><a name="note200" href="#note200">200)</a> The functions islower and isupper test true or false separately for each of these additional
10837  characters; all four combinations are possible.
10838 </small>
10839
10840 <p><small><a href="#Contents">Contents</a></small>
10841 <h5><a name="7.4.1.3" href="#7.4.1.3">7.4.1.3 The isblank function</a></h5>
10842 <p><b>Synopsis</b>
10843 <p><!--para 1 -->
10844 <pre>
10845          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10846          int isblank(int c);
10847 </pre>
10848 <p><b>Description</b>
10849 <p><!--para 2 -->
10850  The isblank function tests for any character that is a standard blank character or is one
10851  of a locale-specific set of characters for which isspace is true and that is used to
10852  separate words within a line of text. The standard blank characters are the following:
10853  space (' '), and horizontal tab ('\t'). In the "C" locale, isblank returns true only
10854  for the standard blank characters.
10855
10856 <p><small><a href="#Contents">Contents</a></small>
10857 <h5><a name="7.4.1.4" href="#7.4.1.4">7.4.1.4 The iscntrl function</a></h5>
10858 <p><b>Synopsis</b>
10859 <p><!--para 1 -->
10860 <pre>
10861          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10862          int iscntrl(int c);
10863 </pre>
10864 <p><b>Description</b>
10865 <p><!--para 2 -->
10866  The iscntrl function tests for any control character.
10867
10868 <p><small><a href="#Contents">Contents</a></small>
10869 <h5><a name="7.4.1.5" href="#7.4.1.5">7.4.1.5 The isdigit function</a></h5>
10870 <p><b>Synopsis</b>
10871 <p><!--para 1 -->
10872 <pre>
10873          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10874          int isdigit(int c);
10875 </pre>
10876 <p><b>Description</b>
10877 <p><!--para 2 -->
10878  The isdigit function tests for any decimal-digit character (as defined in <a href="#5.2.1">5.2.1</a>).
10879
10880 <p><small><a href="#Contents">Contents</a></small>
10881 <h5><a name="7.4.1.6" href="#7.4.1.6">7.4.1.6 The isgraph function</a></h5>
10882 <p><b>Synopsis</b>
10883 <p><!--para 1 -->
10884 <pre>
10885          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10886          int isgraph(int c);
10887 </pre>
10888  
10889  
10890  
10891  
10892 <!--page 219 -->
10893 <p><b>Description</b>
10894 <p><!--para 2 -->
10895  The isgraph function tests for any printing character except space (' ').
10896
10897 <p><small><a href="#Contents">Contents</a></small>
10898 <h5><a name="7.4.1.7" href="#7.4.1.7">7.4.1.7 The islower function</a></h5>
10899 <p><b>Synopsis</b>
10900 <p><!--para 1 -->
10901 <pre>
10902          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10903          int islower(int c);
10904 </pre>
10905 <p><b>Description</b>
10906 <p><!--para 2 -->
10907  The islower function tests for any character that is a lowercase letter or is one of a
10908  locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
10909  isspace is true. In the "C" locale, islower returns true only for the lowercase
10910  letters (as defined in <a href="#5.2.1">5.2.1</a>).
10911
10912 <p><small><a href="#Contents">Contents</a></small>
10913 <h5><a name="7.4.1.8" href="#7.4.1.8">7.4.1.8 The isprint function</a></h5>
10914 <p><b>Synopsis</b>
10915 <p><!--para 1 -->
10916 <pre>
10917          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10918          int isprint(int c);
10919 </pre>
10920 <p><b>Description</b>
10921 <p><!--para 2 -->
10922  The isprint function tests for any printing character including space (' ').
10923
10924 <p><small><a href="#Contents">Contents</a></small>
10925 <h5><a name="7.4.1.9" href="#7.4.1.9">7.4.1.9 The ispunct function</a></h5>
10926 <p><b>Synopsis</b>
10927 <p><!--para 1 -->
10928 <pre>
10929          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10930          int ispunct(int c);
10931 </pre>
10932 <p><b>Description</b>
10933 <p><!--para 2 -->
10934  The ispunct function tests for any printing character that is one of a locale-specific set
10935  of punctuation characters for which neither isspace nor isalnum is true. In the "C"
10936  locale, ispunct returns true for every printing character for which neither isspace
10937  nor isalnum is true.
10938
10939 <p><small><a href="#Contents">Contents</a></small>
10940 <h5><a name="7.4.1.10" href="#7.4.1.10">7.4.1.10 The isspace function</a></h5>
10941 <p><b>Synopsis</b>
10942 <p><!--para 1 -->
10943 <pre>
10944          #include <a href="#7.4">&lt;ctype.h&gt;</a>
10945          int isspace(int c);
10946 </pre>
10947 <p><b>Description</b>
10948 <p><!--para 2 -->
10949  The isspace function tests for any character that is a standard white-space character or
10950  is one of a locale-specific set of characters for which isalnum is false. The standard
10951 <!--page 220 -->
10952  white-space characters are the following: space (' '), form feed ('\f'), new-line
10953  ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). In the
10954  "C" locale, isspace returns true only for the standard white-space characters.
10955
10956 <p><small><a href="#Contents">Contents</a></small>
10957 <h5><a name="7.4.1.11" href="#7.4.1.11">7.4.1.11 The isupper function</a></h5>
10958 <p><b>Synopsis</b>
10959 <p><!--para 1 -->
10960 <pre>
10961         #include <a href="#7.4">&lt;ctype.h&gt;</a>
10962         int isupper(int c);
10963 </pre>
10964 <p><b>Description</b>
10965 <p><!--para 2 -->
10966  The isupper function tests for any character that is an uppercase letter or is one of a
10967  locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
10968  isspace is true. In the "C" locale, isupper returns true only for the uppercase
10969  letters (as defined in <a href="#5.2.1">5.2.1</a>).
10970
10971 <p><small><a href="#Contents">Contents</a></small>
10972 <h5><a name="7.4.1.12" href="#7.4.1.12">7.4.1.12 The isxdigit function</a></h5>
10973 <p><b>Synopsis</b>
10974 <p><!--para 1 -->
10975 <pre>
10976         #include <a href="#7.4">&lt;ctype.h&gt;</a>
10977         int isxdigit(int c);
10978 </pre>
10979 <p><b>Description</b>
10980 <p><!--para 2 -->
10981  The isxdigit function tests for any hexadecimal-digit character (as defined in <a href="#6.4.4.1">6.4.4.1</a>).
10982
10983 <p><small><a href="#Contents">Contents</a></small>
10984 <h4><a name="7.4.2" href="#7.4.2">7.4.2 Character case mapping functions</a></h4>
10985
10986 <p><small><a href="#Contents">Contents</a></small>
10987 <h5><a name="7.4.2.1" href="#7.4.2.1">7.4.2.1 The tolower function</a></h5>
10988 <p><b>Synopsis</b>
10989 <p><!--para 1 -->
10990 <pre>
10991         #include <a href="#7.4">&lt;ctype.h&gt;</a>
10992         int tolower(int c);
10993 </pre>
10994 <p><b>Description</b>
10995 <p><!--para 2 -->
10996  The tolower function converts an uppercase letter to a corresponding lowercase letter.
10997 <p><b>Returns</b>
10998 <p><!--para 3 -->
10999  If the argument is a character for which isupper is true and there are one or more
11000  corresponding characters, as specified by the current locale, for which islower is true,
11001  the tolower function returns one of the corresponding characters (always the same one
11002  for any given locale); otherwise, the argument is returned unchanged.
11003 <!--page 221 -->
11004
11005 <p><small><a href="#Contents">Contents</a></small>
11006 <h5><a name="7.4.2.2" href="#7.4.2.2">7.4.2.2 The toupper function</a></h5>
11007 <p><b>Synopsis</b>
11008 <p><!--para 1 -->
11009 <pre>
11010          #include <a href="#7.4">&lt;ctype.h&gt;</a>
11011          int toupper(int c);
11012 </pre>
11013 <p><b>Description</b>
11014 <p><!--para 2 -->
11015  The toupper function converts a lowercase letter to a corresponding uppercase letter.
11016 <p><b>Returns</b>
11017 <p><!--para 3 -->
11018  If the argument is a character for which islower is true and there are one or more
11019  corresponding characters, as specified by the current locale, for which isupper is true,
11020  the toupper function returns one of the corresponding characters (always the same one
11021  for any given locale); otherwise, the argument is returned unchanged.
11022 <!--page 222 -->
11023
11024 <p><small><a href="#Contents">Contents</a></small>
11025 <h3><a name="7.5" href="#7.5">7.5 Errors &lt;errno.h&gt;</a></h3>
11026 <p><!--para 1 -->
11027  The header <a href="#7.5">&lt;errno.h&gt;</a> defines several macros, all relating to the reporting of error
11028  conditions.
11029 <p><!--para 2 -->
11030  The macros are
11031 <pre>
11032           EDOM
11033           EILSEQ
11034           ERANGE
11035 </pre>
11036  which expand to integer constant expressions with type int, distinct positive values, and
11037  which are suitable for use in #if preprocessing directives; and
11038 <pre>
11039           errno
11040 </pre>
11041  which expands to a modifiable lvalue<sup><a href="#note201"><b>201)</b></a></sup> that has type int and thread local storage
11042  duration, the value of which is set to a positive error number by several library functions.
11043  If a macro definition is suppressed in order to access an actual object, or a program
11044  defines an identifier with the name errno, the behavior is undefined.
11045 <p><!--para 3 -->
11046  The value of errno in the initial thread is zero at program startup (the initial value of
11047  errno in other threads is an indeterminate value), but is never set to zero by any library
11048  function.<sup><a href="#note202"><b>202)</b></a></sup> The value of errno may be set to nonzero by a library function call
11049  whether or not there is an error, provided the use of errno is not documented in the
11050  description of the function in this International Standard.
11051 <p><!--para 4 -->
11052  Additional macro definitions, beginning with E and a digit or E and an uppercase
11053  letter,<sup><a href="#note203"><b>203)</b></a></sup> may also be specified by the implementation.
11054  
11055  
11056  
11057  
11058 <!--page 223 -->
11059
11060 <p><b>Footnotes</b>
11061 <p><small><a name="note201" href="#note201">201)</a> The macro errno need not be the identifier of an object. It might expand to a modifiable lvalue
11062  resulting from a function call (for example, *errno()).
11063 </small>
11064 <p><small><a name="note202" href="#note202">202)</a> Thus, a program that uses errno for error checking should set it to zero before a library function call,
11065  then inspect it before a subsequent library function call. Of course, a library function can save the
11066  value of errno on entry and then set it to zero, as long as the original value is restored if errno's
11067  value is still zero just before the return.
11068 </small>
11069 <p><small><a name="note203" href="#note203">203)</a> See ''future library directions'' (<a href="#7.30.3">7.30.3</a>).
11070 </small>
11071
11072 <p><small><a href="#Contents">Contents</a></small>
11073 <h3><a name="7.6" href="#7.6">7.6 Floating-point environment &lt;fenv.h&gt;</a></h3>
11074 <p><!--para 1 -->
11075  The header <a href="#7.6">&lt;fenv.h&gt;</a> defines several macros, and declares types and functions that
11076  provide access to the floating-point environment. The floating-point environment refers
11077  collectively to any floating-point status flags and control modes supported by the
11078  implementation.<sup><a href="#note204"><b>204)</b></a></sup> A floating-point status flag is a system variable whose value is set
11079  (but never cleared) when a floating-point exception is raised, which occurs as a side effect
11080  of exceptional floating-point arithmetic to provide auxiliary information.<sup><a href="#note205"><b>205)</b></a></sup> A floating-
11081  point control mode is a system variable whose value may be set by the user to affect the
11082  subsequent behavior of floating-point arithmetic.
11083 <p><!--para 2 -->
11084  The floating-point environment has thread storage duration. The initial state for a
11085  thread's floating-point environment is the current state of the floating-point environment
11086  of the thread that creates it at the time of creation.
11087 <p><!--para 3 -->
11088  Certain programming conventions support the intended model of use for the floating-
11089  point environment:<sup><a href="#note206"><b>206)</b></a></sup>
11090 <ul>
11091 <li>  a function call does not alter its caller's floating-point control modes, clear its caller's
11092  floating-point status flags, nor depend on the state of its caller's floating-point status
11093  flags unless the function is so documented;
11094 <li>  a function call is assumed to require default floating-point control modes, unless its
11095  documentation promises otherwise;
11096 <li>  a function call is assumed to have the potential for raising floating-point exceptions,
11097  unless its documentation promises otherwise.
11098 </ul>
11099 <p><!--para 4 -->
11100  The type
11101 <pre>
11102          fenv_t
11103 </pre>
11104  represents the entire floating-point environment.
11105 <p><!--para 5 -->
11106  The type
11107 <pre>
11108          fexcept_t
11109 </pre>
11110  represents the floating-point status flags collectively, including any status the
11111  implementation associates with the flags.
11112  
11113  
11114 <!--page 224 -->
11115 <p><!--para 6 -->
11116  Each of the macros
11117 <pre>
11118           FE_DIVBYZERO
11119           FE_INEXACT
11120           FE_INVALID
11121           FE_OVERFLOW
11122           FE_UNDERFLOW
11123 </pre>
11124  is defined if and only if the implementation supports the floating-point exception by
11125  means of the functions in 7.6.2.<sup><a href="#note207"><b>207)</b></a></sup> Additional implementation-defined floating-point
11126  exceptions, with macro definitions beginning with FE_ and an uppercase letter, may also
11127  be specified by the implementation. The defined macros expand to integer constant
11128  expressions with values such that bitwise ORs of all combinations of the macros result in
11129  distinct values, and furthermore, bitwise ANDs of all combinations of the macros result in
11130  zero.<sup><a href="#note208"><b>208)</b></a></sup>
11131 <p><!--para 7 -->
11132  The macro
11133 <pre>
11134           FE_ALL_EXCEPT
11135 </pre>
11136  is simply the bitwise OR of all floating-point exception macros defined by the
11137  implementation. If no such macros are defined, FE_ALL_EXCEPT shall be defined as 0.
11138 <p><!--para 8 -->
11139  Each of the macros
11140 <pre>
11141           FE_DOWNWARD
11142           FE_TONEAREST
11143           FE_TOWARDZERO
11144           FE_UPWARD
11145 </pre>
11146  is defined if and only if the implementation supports getting and setting the represented
11147  rounding direction by means of the fegetround and fesetround functions.
11148  Additional implementation-defined rounding directions, with macro definitions beginning
11149  with FE_ and an uppercase letter, may also be specified by the implementation. The
11150  defined macros expand to integer constant expressions whose values are distinct
11151  nonnegative values.<sup><a href="#note209"><b>209)</b></a></sup>
11152 <p><!--para 9 -->
11153  The macro
11154  
11155  
11156  
11157 <!--page 225 -->
11158 <pre>
11159           FE_DFL_ENV
11160 </pre>
11161  represents the default floating-point environment -- the one installed at program startup
11162 <ul>
11163 <li>  and has type ''pointer to const-qualified fenv_t''. It can be used as an argument to
11164 </ul>
11165  <a href="#7.6">&lt;fenv.h&gt;</a> functions that manage the floating-point environment.
11166 <p><!--para 10 -->
11167  Additional implementation-defined environments, with macro definitions beginning with
11168  FE_ and an uppercase letter, and having type ''pointer to const-qualified fenv_t'', may
11169  also be specified by the implementation.
11170
11171 <p><b>Footnotes</b>
11172 <p><small><a name="note204" href="#note204">204)</a> This header is designed to support the floating-point exception status flags and directed-rounding
11173  control modes required by IEC 60559, and other similar floating-point state information. It is also
11174  designed to facilitate code portability among all systems.
11175 </small>
11176 <p><small><a name="note205" href="#note205">205)</a> A floating-point status flag is not an object and can be set more than once within an expression.
11177 </small>
11178 <p><small><a name="note206" href="#note206">206)</a> With these conventions, a programmer can safely assume default floating-point control modes (or be
11179  unaware of them). The responsibilities associated with accessing the floating-point environment fall
11180  on the programmer or program that does so explicitly.
11181 </small>
11182 <p><small><a name="note207" href="#note207">207)</a> The implementation supports a floating-point exception if there are circumstances where a call to at
11183  least one of the functions in <a href="#7.6.2">7.6.2</a>, using the macro as the appropriate argument, will succeed. It is not
11184  necessary for all the functions to succeed all the time.
11185 </small>
11186 <p><small><a name="note208" href="#note208">208)</a> The macros should be distinct powers of two.
11187 </small>
11188 <p><small><a name="note209" href="#note209">209)</a> Even though the rounding direction macros may expand to constants corresponding to the values of
11189  FLT_ROUNDS, they are not required to do so.
11190 </small>
11191
11192 <p><small><a href="#Contents">Contents</a></small>
11193 <h4><a name="7.6.1" href="#7.6.1">7.6.1 The FENV_ACCESS pragma</a></h4>
11194 <p><b>Synopsis</b>
11195 <p><!--para 1 -->
11196 <pre>
11197           #include <a href="#7.6">&lt;fenv.h&gt;</a>
11198           #pragma STDC FENV_ACCESS on-off-switch
11199 </pre>
11200 <p><b>Description</b>
11201 <p><!--para 2 -->
11202  The FENV_ACCESS pragma provides a means to inform the implementation when a
11203  program might access the floating-point environment to test floating-point status flags or
11204  run under non-default floating-point control modes.<sup><a href="#note210"><b>210)</b></a></sup> The pragma shall occur either
11205  outside external declarations or preceding all explicit declarations and statements inside a
11206  compound statement. When outside external declarations, the pragma takes effect from
11207  its occurrence until another FENV_ACCESS pragma is encountered, or until the end of
11208  the translation unit. When inside a compound statement, the pragma takes effect from its
11209  occurrence until another FENV_ACCESS pragma is encountered (including within a
11210  nested compound statement), or until the end of the compound statement; at the end of a
11211  compound statement the state for the pragma is restored to its condition just before the
11212  compound statement. If this pragma is used in any other context, the behavior is
11213  undefined. If part of a program tests floating-point status flags, sets floating-point control
11214  modes, or runs under non-default mode settings, but was translated with the state for the
11215  FENV_ACCESS pragma ''off'', the behavior is undefined. The default state (''on'' or
11216  ''off'') for the pragma is implementation-defined. (When execution passes from a part of
11217  the program translated with FENV_ACCESS ''off'' to a part translated with
11218  FENV_ACCESS ''on'', the state of the floating-point status flags is unspecified and the
11219  floating-point control modes have their default settings.)
11220  
11221  
11222  
11223  
11224 <!--page 226 -->
11225 <p><!--para 3 -->
11226  EXAMPLE
11227 <pre>
11228          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11229          void f(double x)
11230          {
11231                #pragma STDC FENV_ACCESS ON
11232                void g(double);
11233                void h(double);
11234                /* ... */
11235                g(x + 1);
11236                h(x + 1);
11237                /* ... */
11238          }
11239 </pre>
11240 <p><!--para 4 -->
11241  If the function g might depend on status flags set as a side effect of the first x + 1, or if the second
11242  x + 1 might depend on control modes set as a side effect of the call to function g, then the program shall
11243  contain an appropriately placed invocation of #pragma STDC FENV_ACCESS ON.<sup><a href="#note211"><b>211)</b></a></sup>
11244  
11245
11246 <p><b>Footnotes</b>
11247 <p><small><a name="note210" href="#note210">210)</a> The purpose of the FENV_ACCESS pragma is to allow certain optimizations that could subvert flag
11248  tests and mode changes (e.g., global common subexpression elimination, code motion, and constant
11249  folding). In general, if the state of FENV_ACCESS is ''off'', the translator can assume that default
11250  modes are in effect and the flags are not tested.
11251 </small>
11252 <p><small><a name="note211" href="#note211">211)</a> The side effects impose a temporal ordering that requires two evaluations of x + 1. On the other
11253  hand, without the #pragma STDC FENV_ACCESS ON pragma, and assuming the default state is
11254  ''off'', just one evaluation of x + 1 would suffice.
11255 </small>
11256
11257 <p><small><a href="#Contents">Contents</a></small>
11258 <h4><a name="7.6.2" href="#7.6.2">7.6.2 Floating-point exceptions</a></h4>
11259 <p><!--para 1 -->
11260  The following functions provide access to the floating-point status flags.<sup><a href="#note212"><b>212)</b></a></sup> The int
11261  input argument for the functions represents a subset of floating-point exceptions, and can
11262  be zero or the bitwise OR of one or more floating-point exception macros, for example
11263  FE_OVERFLOW | FE_INEXACT. For other argument values the behavior of these
11264  functions is undefined.
11265
11266 <p><b>Footnotes</b>
11267 <p><small><a name="note212" href="#note212">212)</a> The functions fetestexcept, feraiseexcept, and feclearexcept support the basic
11268  abstraction of flags that are either set or clear. An implementation may endow floating-point status
11269  flags with more information -- for example, the address of the code which first raised the floating-
11270  point exception; the functions fegetexceptflag and fesetexceptflag deal with the full
11271  content of flags.
11272 </small>
11273
11274 <p><small><a href="#Contents">Contents</a></small>
11275 <h5><a name="7.6.2.1" href="#7.6.2.1">7.6.2.1 The feclearexcept function</a></h5>
11276 <p><b>Synopsis</b>
11277 <p><!--para 1 -->
11278 <pre>
11279          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11280          int feclearexcept(int excepts);
11281 </pre>
11282 <p><b>Description</b>
11283 <p><!--para 2 -->
11284  The feclearexcept function attempts to clear the supported floating-point exceptions
11285  represented by its argument.
11286 <p><b>Returns</b>
11287 <p><!--para 3 -->
11288  The feclearexcept function returns zero if the excepts argument is zero or if all
11289  the specified exceptions were successfully cleared. Otherwise, it returns a nonzero value.
11290  
11291  
11292 <!--page 227 -->
11293
11294 <p><small><a href="#Contents">Contents</a></small>
11295 <h5><a name="7.6.2.2" href="#7.6.2.2">7.6.2.2 The fegetexceptflag function</a></h5>
11296 <p><b>Synopsis</b>
11297 <p><!--para 1 -->
11298 <pre>
11299           #include <a href="#7.6">&lt;fenv.h&gt;</a>
11300           int fegetexceptflag(fexcept_t *flagp,
11301                int excepts);
11302 </pre>
11303 <p><b>Description</b>
11304 <p><!--para 2 -->
11305  The fegetexceptflag function attempts to store an implementation-defined
11306  representation of the states of the floating-point status flags indicated by the argument
11307  excepts in the object pointed to by the argument flagp.
11308 <p><b>Returns</b>
11309 <p><!--para 3 -->
11310  The fegetexceptflag function returns zero if the representation was successfully
11311  stored. Otherwise, it returns a nonzero value.
11312
11313 <p><small><a href="#Contents">Contents</a></small>
11314 <h5><a name="7.6.2.3" href="#7.6.2.3">7.6.2.3 The feraiseexcept function</a></h5>
11315 <p><b>Synopsis</b>
11316 <p><!--para 1 -->
11317 <pre>
11318           #include <a href="#7.6">&lt;fenv.h&gt;</a>
11319           int feraiseexcept(int excepts);
11320 </pre>
11321 <p><b>Description</b>
11322 <p><!--para 2 -->
11323  The feraiseexcept function attempts to raise the supported floating-point exceptions
11324  represented by its argument.<sup><a href="#note213"><b>213)</b></a></sup> The order in which these floating-point exceptions are
11325  raised is unspecified, except as stated in <a href="#F.8.6">F.8.6</a>. Whether the feraiseexcept function
11326  additionally raises the ''inexact'' floating-point exception whenever it raises the
11327  ''overflow'' or ''underflow'' floating-point exception is implementation-defined.
11328 <p><b>Returns</b>
11329 <p><!--para 3 -->
11330  The feraiseexcept function returns zero if the excepts argument is zero or if all
11331  the specified exceptions were successfully raised. Otherwise, it returns a nonzero value.
11332  
11333  
11334  
11335  
11336 <!--page 228 -->
11337
11338 <p><b>Footnotes</b>
11339 <p><small><a name="note213" href="#note213">213)</a> The effect is intended to be similar to that of floating-point exceptions raised by arithmetic operations.
11340  Hence, enabled traps for floating-point exceptions raised by this function are taken. The specification
11341  in <a href="#F.8.6">F.8.6</a> is in the same spirit.
11342 </small>
11343
11344 <p><small><a href="#Contents">Contents</a></small>
11345 <h5><a name="7.6.2.4" href="#7.6.2.4">7.6.2.4 The fesetexceptflag function</a></h5>
11346 <p><b>Synopsis</b>
11347 <p><!--para 1 -->
11348 <pre>
11349          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11350          int fesetexceptflag(const fexcept_t *flagp,
11351               int excepts);
11352 </pre>
11353 <p><b>Description</b>
11354 <p><!--para 2 -->
11355  The fesetexceptflag function attempts to set the floating-point status flags
11356  indicated by the argument excepts to the states stored in the object pointed to by
11357  flagp. The value of *flagp shall have been set by a previous call to
11358  fegetexceptflag whose second argument represented at least those floating-point
11359  exceptions represented by the argument excepts. This function does not raise floating-
11360  point exceptions, but only sets the state of the flags.
11361 <p><b>Returns</b>
11362 <p><!--para 3 -->
11363  The fesetexceptflag function returns zero if the excepts argument is zero or if
11364  all the specified flags were successfully set to the appropriate state. Otherwise, it returns
11365  a nonzero value.
11366
11367 <p><small><a href="#Contents">Contents</a></small>
11368 <h5><a name="7.6.2.5" href="#7.6.2.5">7.6.2.5 The fetestexcept function</a></h5>
11369 <p><b>Synopsis</b>
11370 <p><!--para 1 -->
11371 <pre>
11372          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11373          int fetestexcept(int excepts);
11374 </pre>
11375 <p><b>Description</b>
11376 <p><!--para 2 -->
11377  The fetestexcept function determines which of a specified subset of the floating-
11378  point exception flags are currently set. The excepts argument specifies the floating-
11379  point status flags to be queried.<sup><a href="#note214"><b>214)</b></a></sup>
11380 <p><b>Returns</b>
11381 <p><!--para 3 -->
11382  The fetestexcept function returns the value of the bitwise OR of the floating-point
11383  exception macros corresponding to the currently set floating-point exceptions included in
11384  excepts.
11385 <p><!--para 4 -->
11386  EXAMPLE       Call f if ''invalid'' is set, then g if ''overflow'' is set:
11387  
11388  
11389  
11390  
11391 <!--page 229 -->
11392 <pre>
11393          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11394          /* ... */
11395          {
11396                  #pragma STDC FENV_ACCESS ON
11397                  int set_excepts;
11398                  feclearexcept(FE_INVALID | FE_OVERFLOW);
11399                  // maybe raise exceptions
11400                  set_excepts = fetestexcept(FE_INVALID | FE_OVERFLOW);
11401                  if (set_excepts &amp; FE_INVALID) f();
11402                  if (set_excepts &amp; FE_OVERFLOW) g();
11403                  /* ... */
11404          }
11405 </pre>
11406  
11407
11408 <p><b>Footnotes</b>
11409 <p><small><a name="note214" href="#note214">214)</a> This mechanism allows testing several floating-point exceptions with just one function call.
11410 </small>
11411
11412 <p><small><a href="#Contents">Contents</a></small>
11413 <h4><a name="7.6.3" href="#7.6.3">7.6.3 Rounding</a></h4>
11414 <p><!--para 1 -->
11415  The fegetround and fesetround functions provide control of rounding direction
11416  modes.
11417
11418 <p><small><a href="#Contents">Contents</a></small>
11419 <h5><a name="7.6.3.1" href="#7.6.3.1">7.6.3.1 The fegetround function</a></h5>
11420 <p><b>Synopsis</b>
11421 <p><!--para 1 -->
11422 <pre>
11423          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11424          int fegetround(void);
11425 </pre>
11426 <p><b>Description</b>
11427 <p><!--para 2 -->
11428  The fegetround function gets the current rounding direction.
11429 <p><b>Returns</b>
11430 <p><!--para 3 -->
11431  The fegetround function returns the value of the rounding direction macro
11432  representing the current rounding direction or a negative value if there is no such
11433  rounding direction macro or the current rounding direction is not determinable.
11434
11435 <p><small><a href="#Contents">Contents</a></small>
11436 <h5><a name="7.6.3.2" href="#7.6.3.2">7.6.3.2 The fesetround function</a></h5>
11437 <p><b>Synopsis</b>
11438 <p><!--para 1 -->
11439 <pre>
11440          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11441          int fesetround(int round);
11442 </pre>
11443 <p><b>Description</b>
11444 <p><!--para 2 -->
11445  The fesetround function establishes the rounding direction represented by its
11446  argument round. If the argument is not equal to the value of a rounding direction macro,
11447  the rounding direction is not changed.
11448 <p><b>Returns</b>
11449 <p><!--para 3 -->
11450  The fesetround function returns zero if and only if the requested rounding direction
11451  was established.
11452 <!--page 230 -->
11453 <p><!--para 4 -->
11454  EXAMPLE Save, set, and restore the rounding direction. Report an error and abort if setting the
11455  rounding direction fails.
11456 <pre>
11457         #include <a href="#7.6">&lt;fenv.h&gt;</a>
11458         #include <a href="#7.2">&lt;assert.h&gt;</a>
11459         void f(int round_dir)
11460         {
11461               #pragma STDC FENV_ACCESS ON
11462               int save_round;
11463               int setround_ok;
11464               save_round = fegetround();
11465               setround_ok = fesetround(round_dir);
11466               assert(setround_ok == 0);
11467               /* ... */
11468               fesetround(save_round);
11469               /* ... */
11470         }
11471 </pre>
11472  
11473
11474 <p><small><a href="#Contents">Contents</a></small>
11475 <h4><a name="7.6.4" href="#7.6.4">7.6.4 Environment</a></h4>
11476 <p><!--para 1 -->
11477  The functions in this section manage the floating-point environment -- status flags and
11478  control modes -- as one entity.
11479
11480 <p><small><a href="#Contents">Contents</a></small>
11481 <h5><a name="7.6.4.1" href="#7.6.4.1">7.6.4.1 The fegetenv function</a></h5>
11482 <p><b>Synopsis</b>
11483 <p><!--para 1 -->
11484 <pre>
11485         #include <a href="#7.6">&lt;fenv.h&gt;</a>
11486         int fegetenv(fenv_t *envp);
11487 </pre>
11488 <p><b>Description</b>
11489 <p><!--para 2 -->
11490  The fegetenv function attempts to store the current floating-point environment in the
11491  object pointed to by envp.
11492 <p><b>Returns</b>
11493 <p><!--para 3 -->
11494  The fegetenv function returns zero if the environment was successfully stored.
11495  Otherwise, it returns a nonzero value.
11496
11497 <p><small><a href="#Contents">Contents</a></small>
11498 <h5><a name="7.6.4.2" href="#7.6.4.2">7.6.4.2 The feholdexcept function</a></h5>
11499 <p><b>Synopsis</b>
11500 <p><!--para 1 -->
11501 <pre>
11502         #include <a href="#7.6">&lt;fenv.h&gt;</a>
11503         int feholdexcept(fenv_t *envp);
11504 </pre>
11505 <p><b>Description</b>
11506 <p><!--para 2 -->
11507  The feholdexcept function saves the current floating-point environment in the object
11508  pointed to by envp, clears the floating-point status flags, and then installs a non-stop
11509  (continue on floating-point exceptions) mode, if available, for all floating-point
11510  exceptions.<sup><a href="#note215"><b>215)</b></a></sup>
11511 <!--page 231 -->
11512 <p><b>Returns</b>
11513 <p><!--para 3 -->
11514  The feholdexcept function returns zero if and only if non-stop floating-point
11515  exception handling was successfully installed.
11516
11517 <p><b>Footnotes</b>
11518 <p><small><a name="note215" href="#note215">215)</a> IEC 60559 systems have a default non-stop mode, and typically at least one other mode for trap
11519  handling or aborting; if the system provides only the non-stop mode then installing it is trivial. For
11520  such systems, the feholdexcept function can be used in conjunction with the feupdateenv
11521  function to write routines that hide spurious floating-point exceptions from their callers.
11522 </small>
11523
11524 <p><small><a href="#Contents">Contents</a></small>
11525 <h5><a name="7.6.4.3" href="#7.6.4.3">7.6.4.3 The fesetenv function</a></h5>
11526 <p><b>Synopsis</b>
11527 <p><!--para 1 -->
11528 <pre>
11529          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11530          int fesetenv(const fenv_t *envp);
11531 </pre>
11532 <p><b>Description</b>
11533 <p><!--para 2 -->
11534  The fesetenv function attempts to establish the floating-point environment represented
11535  by the object pointed to by envp. The argument envp shall point to an object set by a
11536  call to fegetenv or feholdexcept, or equal a floating-point environment macro.
11537  Note that fesetenv merely installs the state of the floating-point status flags
11538  represented through its argument, and does not raise these floating-point exceptions.
11539 <p><b>Returns</b>
11540 <p><!--para 3 -->
11541  The fesetenv function returns zero if the environment was successfully established.
11542  Otherwise, it returns a nonzero value.
11543
11544 <p><small><a href="#Contents">Contents</a></small>
11545 <h5><a name="7.6.4.4" href="#7.6.4.4">7.6.4.4 The feupdateenv function</a></h5>
11546 <p><b>Synopsis</b>
11547 <p><!--para 1 -->
11548 <pre>
11549          #include <a href="#7.6">&lt;fenv.h&gt;</a>
11550          int feupdateenv(const fenv_t *envp);
11551 </pre>
11552 <p><b>Description</b>
11553 <p><!--para 2 -->
11554  The feupdateenv function attempts to save the currently raised floating-point
11555  exceptions in its automatic storage, install the floating-point environment represented by
11556  the object pointed to by envp, and then raise the saved floating-point exceptions. The
11557  argument envp shall point to an object set by a call to feholdexcept or fegetenv,
11558  or equal a floating-point environment macro.
11559 <p><b>Returns</b>
11560 <p><!--para 3 -->
11561  The feupdateenv function returns zero if all the actions were successfully carried out.
11562  Otherwise, it returns a nonzero value.
11563  
11564  
11565  
11566  
11567 <!--page 232 -->
11568 <p><!--para 4 -->
11569  EXAMPLE   Hide spurious underflow floating-point exceptions:
11570 <!--page 233 -->
11571 <pre>
11572        #include <a href="#7.6">&lt;fenv.h&gt;</a>
11573        double f(double x)
11574        {
11575              #pragma STDC FENV_ACCESS ON
11576              double result;
11577              fenv_t save_env;
11578              if (feholdexcept(&amp;save_env))
11579                    return /* indication of an environmental problem */;
11580              // compute result
11581              if (/* test spurious underflow */)
11582                    if (feclearexcept(FE_UNDERFLOW))
11583                             return /* indication of an environmental problem */;
11584              if (feupdateenv(&amp;save_env))
11585                    return /* indication of an environmental problem */;
11586              return result;
11587        }
11588 </pre>
11589
11590 <p><small><a href="#Contents">Contents</a></small>
11591 <h3><a name="7.7" href="#7.7">7.7 Characteristics of floating types &lt;float.h&gt;</a></h3>
11592 <p><!--para 1 -->
11593  The header <a href="#7.7">&lt;float.h&gt;</a> defines several macros that expand to various limits and
11594  parameters of the standard floating-point types.
11595 <p><!--para 2 -->
11596  The macros, their meanings, and the constraints (or restrictions) on their values are listed
11597  in <a href="#5.2.4.2.2">5.2.4.2.2</a>.
11598 <!--page 234 -->
11599
11600 <p><small><a href="#Contents">Contents</a></small>
11601 <h3><a name="7.8" href="#7.8">7.8 Format conversion of integer types &lt;inttypes.h&gt;</a></h3>
11602 <p><!--para 1 -->
11603  The header <a href="#7.8">&lt;inttypes.h&gt;</a> includes the header <a href="#7.20">&lt;stdint.h&gt;</a> and extends it with
11604  additional facilities provided by hosted implementations.
11605 <p><!--para 2 -->
11606  It declares functions for manipulating greatest-width integers and converting numeric
11607  character strings to greatest-width integers, and it declares the type
11608 <pre>
11609           imaxdiv_t
11610 </pre>
11611  which is a structure type that is the type of the value returned by the imaxdiv function.
11612  For each type declared in <a href="#7.20">&lt;stdint.h&gt;</a>, it defines corresponding macros for conversion
11613  specifiers for use with the formatted input/output functions.<sup><a href="#note216"><b>216)</b></a></sup>
11614 <p><b> Forward references</b>: integer types <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#7.20">7.20</a>), formatted input/output
11615  functions (<a href="#7.21.6">7.21.6</a>), formatted wide character input/output functions (<a href="#7.28.2">7.28.2</a>).
11616
11617 <p><b>Footnotes</b>
11618 <p><small><a name="note216" href="#note216">216)</a> See ''future library directions'' (<a href="#7.30.4">7.30.4</a>).
11619 </small>
11620
11621 <p><small><a href="#Contents">Contents</a></small>
11622 <h4><a name="7.8.1" href="#7.8.1">7.8.1 Macros for format specifiers</a></h4>
11623 <p><!--para 1 -->
11624  Each of the following object-like macros expands to a character string literal containing a *
11625  conversion specifier, possibly modified by a length modifier, suitable for use within the
11626  format argument of a formatted input/output function when converting the corresponding
11627  integer type. These macro names have the general form of PRI (character string literals
11628  for the fprintf and fwprintf family) or SCN (character string literals for the
11629  fscanf and fwscanf family),<sup><a href="#note217"><b>217)</b></a></sup> followed by the conversion specifier, followed by a
11630  name corresponding to a similar type name in <a href="#7.20.1">7.20.1</a>. In these names, N represents the
11631  width of the type as described in <a href="#7.20.1">7.20.1</a>. For example, PRIdFAST32 can be used in a
11632  format string to print the value of an integer of type int_fast32_t.
11633 <p><!--para 2 -->
11634  The fprintf macros for signed integers are:
11635 <pre>
11636         PRIdN             PRIdLEASTN                PRIdFASTN          PRIdMAX             PRIdPTR
11637         PRIiN             PRIiLEASTN                PRIiFASTN          PRIiMAX             PRIiPTR
11638 </pre>
11639 <p><!--para 3 -->
11640  The fprintf macros for unsigned integers are:
11641 <pre>
11642         PRIoN             PRIoLEASTN                PRIoFASTN          PRIoMAX             PRIoPTR
11643         PRIuN             PRIuLEASTN                PRIuFASTN          PRIuMAX             PRIuPTR
11644         PRIxN             PRIxLEASTN                PRIxFASTN          PRIxMAX             PRIxPTR
11645         PRIXN             PRIXLEASTN                PRIXFASTN          PRIXMAX             PRIXPTR
11646 </pre>
11647 <p><!--para 4 -->
11648  The fscanf macros for signed integers are:
11649  
11650  
11651  
11652 <!--page 235 -->
11653 <pre>
11654         SCNdN           SCNdLEASTN               SCNdFASTN              SCNdMAX             SCNdPTR
11655         SCNiN           SCNiLEASTN               SCNiFASTN              SCNiMAX             SCNiPTR
11656 </pre>
11657 <p><!--para 5 -->
11658  The fscanf macros for unsigned integers are:
11659 <pre>
11660         SCNoN           SCNoLEASTN               SCNoFASTN              SCNoMAX             SCNoPTR
11661         SCNuN           SCNuLEASTN               SCNuFASTN              SCNuMAX             SCNuPTR
11662         SCNxN           SCNxLEASTN               SCNxFASTN              SCNxMAX             SCNxPTR
11663 </pre>
11664 <p><!--para 6 -->
11665  For each type that the implementation provides in <a href="#7.20">&lt;stdint.h&gt;</a>, the corresponding
11666  fprintf macros shall be defined and the corresponding fscanf macros shall be
11667  defined unless the implementation does not have a suitable fscanf length modifier for
11668  the type.
11669 <p><!--para 7 -->
11670  EXAMPLE
11671 <pre>
11672          #include <a href="#7.8">&lt;inttypes.h&gt;</a>
11673          #include <a href="#7.28">&lt;wchar.h&gt;</a>
11674          int main(void)
11675          {
11676                uintmax_t i = UINTMAX_MAX;    // this type always exists
11677                wprintf(L"The largest integer value is %020"
11678                      PRIxMAX "\n", i);
11679                return 0;
11680          }
11681 </pre>
11682  
11683
11684 <p><b>Footnotes</b>
11685 <p><small><a name="note217" href="#note217">217)</a> Separate macros are given for use with fprintf and fscanf functions because, in the general case,
11686  different format specifiers may be required for fprintf and fscanf, even when the type is the
11687  same.
11688 </small>
11689
11690 <p><small><a href="#Contents">Contents</a></small>
11691 <h4><a name="7.8.2" href="#7.8.2">7.8.2 Functions for greatest-width integer types</a></h4>
11692
11693 <p><small><a href="#Contents">Contents</a></small>
11694 <h5><a name="7.8.2.1" href="#7.8.2.1">7.8.2.1 The imaxabs function</a></h5>
11695 <p><b>Synopsis</b>
11696 <p><!--para 1 -->
11697 <pre>
11698          #include <a href="#7.8">&lt;inttypes.h&gt;</a>
11699          intmax_t imaxabs(intmax_t j);
11700 </pre>
11701 <p><b>Description</b>
11702 <p><!--para 2 -->
11703  The imaxabs function computes the absolute value of an integer j. If the result cannot
11704  be represented, the behavior is undefined.<sup><a href="#note218"><b>218)</b></a></sup>
11705 <p><b>Returns</b>
11706 <p><!--para 3 -->
11707  The imaxabs function returns the absolute value.
11708  
11709  
11710  
11711  
11712 <!--page 236 -->
11713
11714 <p><b>Footnotes</b>
11715 <p><small><a name="note218" href="#note218">218)</a> The absolute value of the most negative number cannot be represented in two's complement.
11716 </small>
11717
11718 <p><small><a href="#Contents">Contents</a></small>
11719 <h5><a name="7.8.2.2" href="#7.8.2.2">7.8.2.2 The imaxdiv function</a></h5>
11720 <p><b>Synopsis</b>
11721 <p><!--para 1 -->
11722 <pre>
11723         #include <a href="#7.8">&lt;inttypes.h&gt;</a>
11724         imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
11725 </pre>
11726 <p><b>Description</b>
11727 <p><!--para 2 -->
11728  The imaxdiv function computes numer / denom and numer % denom in a single
11729  operation.
11730 <p><b>Returns</b>
11731 <p><!--para 3 -->
11732  The imaxdiv function returns a structure of type imaxdiv_t comprising both the
11733  quotient and the remainder. The structure shall contain (in either order) the members
11734  quot (the quotient) and rem (the remainder), each of which has type intmax_t. If
11735  either part of the result cannot be represented, the behavior is undefined.
11736
11737 <p><small><a href="#Contents">Contents</a></small>
11738 <h5><a name="7.8.2.3" href="#7.8.2.3">7.8.2.3 The strtoimax and strtoumax functions</a></h5>
11739 <p><b>Synopsis</b>
11740 <p><!--para 1 -->
11741 <pre>
11742         #include <a href="#7.8">&lt;inttypes.h&gt;</a>
11743         intmax_t strtoimax(const char * restrict nptr,
11744              char ** restrict endptr, int base);
11745         uintmax_t strtoumax(const char * restrict nptr,
11746              char ** restrict endptr, int base);
11747 </pre>
11748 <p><b>Description</b>
11749 <p><!--para 2 -->
11750  The strtoimax and strtoumax functions are equivalent to the strtol, strtoll,
11751  strtoul, and strtoull functions, except that the initial portion of the string is
11752  converted to intmax_t and uintmax_t representation, respectively.
11753 <p><b>Returns</b>
11754 <p><!--para 3 -->
11755  The strtoimax and strtoumax functions return the converted value, if any. If no
11756  conversion could be performed, zero is returned. If the correct value is outside the range
11757  of representable values, INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned
11758  (according to the return type and sign of the value, if any), and the value of the macro
11759  ERANGE is stored in errno.
11760 <p><b> Forward references</b>: the strtol, strtoll, strtoul, and strtoull functions
11761  (<a href="#7.22.1.4">7.22.1.4</a>).
11762 <!--page 237 -->
11763
11764 <p><small><a href="#Contents">Contents</a></small>
11765 <h5><a name="7.8.2.4" href="#7.8.2.4">7.8.2.4 The wcstoimax and wcstoumax functions</a></h5>
11766 <p><b>Synopsis</b>
11767 <p><!--para 1 -->
11768 <pre>
11769          #include <a href="#7.19">&lt;stddef.h&gt;</a>           // for wchar_t
11770          #include <a href="#7.8">&lt;inttypes.h&gt;</a>
11771          intmax_t wcstoimax(const wchar_t * restrict nptr,
11772               wchar_t ** restrict endptr, int base);
11773          uintmax_t wcstoumax(const wchar_t * restrict nptr,
11774               wchar_t ** restrict endptr, int base);
11775 </pre>
11776 <p><b>Description</b>
11777 <p><!--para 2 -->
11778  The wcstoimax and wcstoumax functions are equivalent to the wcstol, wcstoll,
11779  wcstoul, and wcstoull functions except that the initial portion of the wide string is
11780  converted to intmax_t and uintmax_t representation, respectively.
11781 <p><b>Returns</b>
11782 <p><!--para 3 -->
11783  The wcstoimax function returns the converted value, if any. If no conversion could be
11784  performed, zero is returned. If the correct value is outside the range of representable
11785  values, INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned (according to the
11786  return type and sign of the value, if any), and the value of the macro ERANGE is stored in
11787  errno.
11788 <p><b> Forward references</b>: the wcstol, wcstoll, wcstoul, and wcstoull functions
11789  (<a href="#7.28.4.1.2">7.28.4.1.2</a>).
11790 <!--page 238 -->
11791
11792 <p><small><a href="#Contents">Contents</a></small>
11793 <h3><a name="7.9" href="#7.9">7.9 Alternative spellings &lt;iso646.h&gt;</a></h3>
11794 <p><!--para 1 -->
11795  The header <a href="#7.9">&lt;iso646.h&gt;</a> defines the following eleven macros (on the left) that expand
11796  to the corresponding tokens (on the right):
11797 <!--page 239 -->
11798 <pre>
11799        and           &amp;&amp;
11800        and_eq        &amp;=
11801        bitand        &amp;
11802        bitor         |
11803        compl         ~
11804        not           !
11805        not_eq        !=
11806        or            ||
11807        or_eq         |=
11808        xor           ^
11809        xor_eq        ^=
11810 </pre>
11811
11812 <p><small><a href="#Contents">Contents</a></small>
11813 <h3><a name="7.10" href="#7.10">7.10 Sizes of integer types &lt;limits.h&gt;</a></h3>
11814 <p><!--para 1 -->
11815  The header <a href="#7.10">&lt;limits.h&gt;</a> defines several macros that expand to various limits and
11816  parameters of the standard integer types.
11817 <p><!--para 2 -->
11818  The macros, their meanings, and the constraints (or restrictions) on their values are listed
11819  in <a href="#5.2.4.2.1">5.2.4.2.1</a>.
11820 <!--page 240 -->
11821
11822 <p><small><a href="#Contents">Contents</a></small>
11823 <h3><a name="7.11" href="#7.11">7.11 Localization &lt;locale.h&gt;</a></h3>
11824 <p><!--para 1 -->
11825  The header <a href="#7.11">&lt;locale.h&gt;</a> declares two functions, one type, and defines several macros.
11826 <p><!--para 2 -->
11827  The type is
11828 <pre>
11829         struct lconv
11830 </pre>
11831  which contains members related to the formatting of numeric values. The structure shall
11832  contain at least the following members, in any order. The semantics of the members and
11833  their normal ranges are explained in <a href="#7.11.2.1">7.11.2.1</a>. In the "C" locale, the members shall have
11834  the values specified in the comments.
11835 <!--page 241 -->
11836 <pre>
11837         char   *decimal_point;                 //   "."
11838         char   *thousands_sep;                 //   ""
11839         char   *grouping;                      //   ""
11840         char   *mon_decimal_point;             //   ""
11841         char   *mon_thousands_sep;             //   ""
11842         char   *mon_grouping;                  //   ""
11843         char   *positive_sign;                 //   ""
11844         char   *negative_sign;                 //   ""
11845         char   *currency_symbol;               //   ""
11846         char   frac_digits;                    //   CHAR_MAX
11847         char   p_cs_precedes;                  //   CHAR_MAX
11848         char   n_cs_precedes;                  //   CHAR_MAX
11849         char   p_sep_by_space;                 //   CHAR_MAX
11850         char   n_sep_by_space;                 //   CHAR_MAX
11851         char   p_sign_posn;                    //   CHAR_MAX
11852         char   n_sign_posn;                    //   CHAR_MAX
11853         char   *int_curr_symbol;               //   ""
11854         char   int_frac_digits;                //   CHAR_MAX
11855         char   int_p_cs_precedes;              //   CHAR_MAX
11856         char   int_n_cs_precedes;              //   CHAR_MAX
11857         char   int_p_sep_by_space;             //   CHAR_MAX
11858         char   int_n_sep_by_space;             //   CHAR_MAX
11859         char   int_p_sign_posn;                //   CHAR_MAX
11860         char   int_n_sign_posn;                //   CHAR_MAX
11861 </pre>
11862 <p><!--para 3 -->
11863  The macros defined are NULL (described in <a href="#7.19">7.19</a>); and
11864 <pre>
11865           LC_ALL
11866           LC_COLLATE
11867           LC_CTYPE
11868           LC_MONETARY
11869           LC_NUMERIC
11870           LC_TIME
11871 </pre>
11872  which expand to integer constant expressions with distinct values, suitable for use as the
11873  first argument to the setlocale function.<sup><a href="#note219"><b>219)</b></a></sup> Additional macro definitions, beginning
11874  with the characters LC_ and an uppercase letter,<sup><a href="#note220"><b>220)</b></a></sup> may also be specified by the
11875  implementation.
11876
11877 <p><b>Footnotes</b>
11878 <p><small><a name="note219" href="#note219">219)</a> ISO/IEC 9945-2 specifies locale and charmap formats that may be used to specify locales for C.
11879 </small>
11880 <p><small><a name="note220" href="#note220">220)</a> See ''future library directions'' (<a href="#7.30.5">7.30.5</a>).
11881 </small>
11882
11883 <p><small><a href="#Contents">Contents</a></small>
11884 <h4><a name="7.11.1" href="#7.11.1">7.11.1 Locale control</a></h4>
11885
11886 <p><small><a href="#Contents">Contents</a></small>
11887 <h5><a name="7.11.1.1" href="#7.11.1.1">7.11.1.1 The setlocale function</a></h5>
11888 <p><b>Synopsis</b>
11889 <p><!--para 1 -->
11890 <pre>
11891           #include <a href="#7.11">&lt;locale.h&gt;</a>
11892           char *setlocale(int category, const char *locale);
11893 </pre>
11894 <p><b>Description</b>
11895 <p><!--para 2 -->
11896  The setlocale function selects the appropriate portion of the program's locale as
11897  specified by the category and locale arguments. The setlocale function may be
11898  used to change or query the program's entire current locale or portions thereof. The value
11899  LC_ALL for category names the program's entire locale; the other values for
11900  category name only a portion of the program's locale. LC_COLLATE affects the
11901  behavior of the strcoll and strxfrm functions. LC_CTYPE affects the behavior of
11902  the character handling functions<sup><a href="#note221"><b>221)</b></a></sup> and the multibyte and wide character functions.
11903  LC_MONETARY affects the monetary formatting information returned by the
11904  localeconv function. LC_NUMERIC affects the decimal-point character for the
11905  formatted input/output functions and the string conversion functions, as well as the
11906  nonmonetary formatting information returned by the localeconv function. LC_TIME
11907  affects the behavior of the strftime and wcsftime functions.
11908 <p><!--para 3 -->
11909  A value of "C" for locale specifies the minimal environment for C translation; a value
11910  of "" for locale specifies the locale-specific native environment. Other
11911  implementation-defined strings may be passed as the second argument to setlocale.
11912  
11913 <!--page 242 -->
11914 <p><!--para 4 -->
11915  At program startup, the equivalent of
11916 <pre>
11917          setlocale(LC_ALL, "C");
11918 </pre>
11919  is executed.
11920 <p><!--para 5 -->
11921  A call to the setlocale function may introduce a data race with other calls to the
11922  setlocale function or with calls to functions that are affected by the current locale.
11923  The implementation shall behave as if no library function calls the setlocale function.
11924 <p><b>Returns</b>
11925 <p><!--para 6 -->
11926  If a pointer to a string is given for locale and the selection can be honored, the
11927  setlocale function returns a pointer to the string associated with the specified
11928  category for the new locale. If the selection cannot be honored, the setlocale
11929  function returns a null pointer and the program's locale is not changed.
11930 <p><!--para 7 -->
11931  A null pointer for locale causes the setlocale function to return a pointer to the
11932  string associated with the category for the program's current locale; the program's
11933  locale is not changed.<sup><a href="#note222"><b>222)</b></a></sup>
11934 <p><!--para 8 -->
11935  The pointer to string returned by the setlocale function is such that a subsequent call
11936  with that string value and its associated category will restore that part of the program's
11937  locale. The string pointed to shall not be modified by the program, but may be
11938  overwritten by a subsequent call to the setlocale function.
11939 <p><b> Forward references</b>: formatted input/output functions (<a href="#7.21.6">7.21.6</a>), multibyte/wide
11940  character conversion functions (<a href="#7.22.7">7.22.7</a>), multibyte/wide string conversion functions
11941  (<a href="#7.22.8">7.22.8</a>), numeric conversion functions (<a href="#7.22.1">7.22.1</a>), the strcoll function (<a href="#7.23.4.3">7.23.4.3</a>), the
11942  strftime function (<a href="#7.26.3.5">7.26.3.5</a>), the strxfrm function (<a href="#7.23.4.5">7.23.4.5</a>).
11943
11944 <p><b>Footnotes</b>
11945 <p><small><a name="note221" href="#note221">221)</a> The only functions in <a href="#7.4">7.4</a> whose behavior is not affected by the current locale are isdigit and
11946  isxdigit.
11947 </small>
11948 <p><small><a name="note222" href="#note222">222)</a> The implementation shall arrange to encode in a string the various categories due to a heterogeneous
11949  locale when category has the value LC_ALL.
11950 </small>
11951
11952 <p><small><a href="#Contents">Contents</a></small>
11953 <h4><a name="7.11.2" href="#7.11.2">7.11.2 Numeric formatting convention inquiry</a></h4>
11954
11955 <p><small><a href="#Contents">Contents</a></small>
11956 <h5><a name="7.11.2.1" href="#7.11.2.1">7.11.2.1 The localeconv function</a></h5>
11957 <p><b>Synopsis</b>
11958 <p><!--para 1 -->
11959 <pre>
11960          #include <a href="#7.11">&lt;locale.h&gt;</a>
11961          struct lconv *localeconv(void);
11962 </pre>
11963 <p><b>Description</b>
11964 <p><!--para 2 -->
11965  The localeconv function sets the components of an object with type struct lconv
11966  with values appropriate for the formatting of numeric quantities (monetary and otherwise)
11967  according to the rules of the current locale.
11968  
11969  
11970  
11971 <!--page 243 -->
11972 <p><!--para 3 -->
11973  The members of the structure with type char * are pointers to strings, any of which
11974  (except decimal_point) can point to "", to indicate that the value is not available in
11975  the current locale or is of zero length. Apart from grouping and mon_grouping, the
11976  strings shall start and end in the initial shift state. The members with type char are
11977  nonnegative numbers, any of which can be CHAR_MAX to indicate that the value is not
11978  available in the current locale. The members include the following:
11979  char *decimal_point
11980 <pre>
11981            The decimal-point character used to format nonmonetary quantities.
11982 </pre>
11983  char *thousands_sep
11984 <pre>
11985            The character used to separate groups of digits before the decimal-point
11986            character in formatted nonmonetary quantities.
11987 </pre>
11988  char *grouping
11989 <pre>
11990            A string whose elements indicate the size of each group of digits in
11991            formatted nonmonetary quantities.
11992 </pre>
11993  char *mon_decimal_point
11994 <pre>
11995            The decimal-point used to format monetary quantities.
11996 </pre>
11997  char *mon_thousands_sep
11998 <pre>
11999            The separator for groups of digits before the decimal-point in formatted
12000            monetary quantities.
12001 </pre>
12002  char *mon_grouping
12003 <pre>
12004            A string whose elements indicate the size of each group of digits in
12005            formatted monetary quantities.
12006 </pre>
12007  char *positive_sign
12008 <pre>
12009            The string used to indicate a nonnegative-valued formatted monetary
12010            quantity.
12011 </pre>
12012  char *negative_sign
12013 <pre>
12014            The string used to indicate a negative-valued formatted monetary quantity.
12015 </pre>
12016  char *currency_symbol
12017 <pre>
12018            The local currency symbol applicable to the current locale.
12019 </pre>
12020  char frac_digits
12021 <pre>
12022            The number of fractional digits (those after the decimal-point) to be
12023            displayed in a locally formatted monetary quantity.
12024 </pre>
12025  char p_cs_precedes
12026 <!--page 244 -->
12027 <pre>
12028            Set to 1 or 0 if the currency_symbol respectively precedes or
12029            succeeds the value for a nonnegative locally formatted monetary quantity.
12030 </pre>
12031  char n_cs_precedes
12032 <pre>
12033            Set to 1 or 0 if the currency_symbol respectively precedes or
12034            succeeds the value for a negative locally formatted monetary quantity.
12035 </pre>
12036  char p_sep_by_space
12037 <pre>
12038            Set to a value indicating the separation of the currency_symbol, the
12039            sign string, and the value for a nonnegative locally formatted monetary
12040            quantity.
12041 </pre>
12042  char n_sep_by_space
12043 <pre>
12044            Set to a value indicating the separation of the currency_symbol, the
12045            sign string, and the value for a negative locally formatted monetary
12046            quantity.
12047 </pre>
12048  char p_sign_posn
12049 <pre>
12050            Set to a value indicating the positioning of the positive_sign for a
12051            nonnegative locally formatted monetary quantity.
12052 </pre>
12053  char n_sign_posn
12054 <pre>
12055            Set to a value indicating the positioning of the negative_sign for a
12056            negative locally formatted monetary quantity.
12057 </pre>
12058  char *int_curr_symbol
12059 <pre>
12060            The international currency symbol applicable to the current locale. The
12061            first three characters contain the alphabetic international currency symbol
12062            in accordance with those specified in ISO 4217. The fourth character
12063            (immediately preceding the null character) is the character used to separate
12064            the international currency symbol from the monetary quantity.
12065 </pre>
12066  char int_frac_digits
12067 <pre>
12068            The number of fractional digits (those after the decimal-point) to be
12069            displayed in an internationally formatted monetary quantity.
12070 </pre>
12071  char int_p_cs_precedes
12072 <pre>
12073            Set to 1 or 0 if the int_curr_symbol respectively precedes or
12074            succeeds the value for a nonnegative internationally formatted monetary
12075            quantity.
12076 </pre>
12077  char int_n_cs_precedes
12078 <pre>
12079            Set to 1 or 0 if the int_curr_symbol respectively precedes or
12080            succeeds the value for a negative internationally formatted monetary
12081            quantity.
12082 </pre>
12083  char int_p_sep_by_space
12084 <!--page 245 -->
12085 <pre>
12086            Set to a value indicating the separation of the int_curr_symbol, the
12087            sign string, and the value for a nonnegative internationally formatted
12088            monetary quantity.
12089 </pre>
12090  char int_n_sep_by_space
12091 <pre>
12092            Set to a value indicating the separation of the int_curr_symbol, the
12093            sign string, and the value for a negative internationally formatted monetary
12094            quantity.
12095 </pre>
12096  char int_p_sign_posn
12097 <pre>
12098            Set to a value indicating the positioning of the positive_sign for a
12099            nonnegative internationally formatted monetary quantity.
12100 </pre>
12101  char int_n_sign_posn
12102 <pre>
12103            Set to a value indicating the positioning of the negative_sign for a
12104            negative internationally formatted monetary quantity.
12105 </pre>
12106 <p><!--para 4 -->
12107  The elements of grouping and mon_grouping are interpreted according to the
12108  following:
12109  CHAR_MAX      No further grouping is to be performed.
12110  0             The previous element is to be repeatedly used for the remainder of the
12111 <pre>
12112                digits.
12113 </pre>
12114  other         The integer value is the number of digits that compose the current group.
12115 <pre>
12116                The next element is examined to determine the size of the next group of
12117                digits before the current group.
12118 </pre>
12119 <p><!--para 5 -->
12120  The values of p_sep_by_space, n_sep_by_space, int_p_sep_by_space,
12121  and int_n_sep_by_space are interpreted according to the following:
12122  0   No space separates the currency symbol and value.
12123  1   If the currency symbol and sign string are adjacent, a space separates them from the
12124 <pre>
12125      value; otherwise, a space separates the currency symbol from the value.
12126 </pre>
12127  2   If the currency symbol and sign string are adjacent, a space separates them;
12128 <pre>
12129      otherwise, a space separates the sign string from the value.
12130 </pre>
12131  For int_p_sep_by_space and int_n_sep_by_space, the fourth character of
12132  int_curr_symbol is used instead of a space.
12133 <p><!--para 6 -->
12134  The values of p_sign_posn, n_sign_posn, int_p_sign_posn,                            and
12135  int_n_sign_posn are interpreted according to the following:
12136  0   Parentheses surround the quantity and currency symbol.
12137  1   The sign string precedes the quantity and currency symbol.
12138  2   The sign string succeeds the quantity and currency symbol.
12139  3   The sign string immediately precedes the currency symbol.
12140  4   The sign string immediately succeeds the currency symbol.
12141 <!--page 246 -->
12142 <p><!--para 7 -->
12143  The implementation shall behave as if no library function calls the localeconv
12144  function.
12145 <p><b>Returns</b>
12146 <p><!--para 8 -->
12147  The localeconv function returns a pointer to the filled-in object. The structure
12148  pointed to by the return value shall not be modified by the program, but may be
12149  overwritten by a subsequent call to the localeconv function. In addition, calls to the
12150  setlocale function with categories LC_ALL, LC_MONETARY, or LC_NUMERIC may
12151  overwrite the contents of the structure.
12152 <p><!--para 9 -->
12153  EXAMPLE 1 The following table illustrates rules which may well be used by four countries to format
12154  monetary quantities.
12155 <pre>
12156                                Local format                                     International format
12157 </pre>
12158  
12159  Country            Positive                  Negative                    Positive               Negative
12160  
12161  Country1     1.234,56 mk             -1.234,56 mk                  FIM   1.234,56         FIM -1.234,56
12162  Country2     L.1.234                 -L.1.234                      ITL   1.234            -ITL 1.234
12163  Country3     fl. 1.234,56              fl. -1.234,56                   NLG   1.234,56         NLG -1.234,56
12164  Country4     SFrs.1,234.56           SFrs.1,234.56C                CHF   1,234.56         CHF 1,234.56C
12165 <p><!--para 10 -->
12166  For these four countries, the respective values for the monetary members of the structure returned by
12167  localeconv could be:
12168 <pre>
12169                                    Country1              Country2              Country3            Country4
12170 </pre>
12171  
12172  mon_decimal_point                 ","                   ""                   ","                 "."
12173  mon_thousands_sep                 "."                   "."                  "."                 ","
12174  mon_grouping                      "\3"                  "\3"                 "\3"                "\3"
12175  positive_sign                     ""                    ""                   ""                  ""
12176  negative_sign                     "-"                   "-"                  "-"                 "C"
12177  currency_symbol                   "mk"                  "L."                 "\u0192"            "SFrs."
12178  frac_digits                       2                     0                    2                   2
12179  p_cs_precedes                     0                     1                    1                   1
12180  n_cs_precedes                     0                     1                    1                   1
12181  p_sep_by_space                    1                     0                    1                   0
12182  n_sep_by_space                    1                     0                    2                   0
12183  p_sign_posn                       1                     1                    1                   1
12184  n_sign_posn                       1                     1                    4                   2
12185  int_curr_symbol                   "FIM "                "ITL "               "NLG "              "CHF "
12186  int_frac_digits                   2                     0                    2                   2
12187  int_p_cs_precedes                 1                     1                    1                   1
12188  int_n_cs_precedes                 1                     1                    1                   1
12189  int_p_sep_by_space                1                     1                    1                   1
12190  int_n_sep_by_space                2                     1                    2                   1
12191  int_p_sign_posn                   1                     1                    1                   1
12192  int_n_sign_posn                   4                     1                    4                   2
12193 <!--page 247 -->
12194 <p><!--para 11 -->
12195  EXAMPLE 2 The following table illustrates how the cs_precedes, sep_by_space, and sign_posn members
12196  affect the formatted value.
12197 <pre>
12198                                                                p_sep_by_space
12199 </pre>
12200  
12201  p_cs_precedes           p_sign_posn                0                   1                  2
12202  
12203 <pre>
12204                  0                    0         (<a href="#1.25">1.25</a>$)            (<a href="#1.25">1.25</a> $)            (<a href="#1.25">1.25</a>$)
12205                                       1         +1.25$             +1.25 $             + <a href="#1.25">1.25</a>$
12206                                       2         <a href="#1.25">1.25</a>$+             <a href="#1.25">1.25</a> $+             <a href="#1.25">1.25</a>$ +
12207                                       3         <a href="#1.25">1.25</a>+$             <a href="#1.25">1.25</a> +$             <a href="#1.25">1.25</a>+ $
12208                                       4         <a href="#1.25">1.25</a>$+             <a href="#1.25">1.25</a> $+             <a href="#1.25">1.25</a>$ +
12209 </pre>
12210  
12211 <!--page 248 -->
12212 <pre>
12213                  1                    0         ($1.25)            ($ <a href="#1.25">1.25</a>)            ($1.25)
12214                                       1         +$1.25             +$ <a href="#1.25">1.25</a>             + $1.25
12215                                       2         $1.25+             $ <a href="#1.25">1.25</a>+             $1.25 +
12216                                       3         +$1.25             +$ <a href="#1.25">1.25</a>             + $1.25
12217                                       4         $+1.25             $+ <a href="#1.25">1.25</a>             $ +1.25
12218 </pre>
12219
12220 <p><small><a href="#Contents">Contents</a></small>
12221 <h3><a name="7.12" href="#7.12">7.12 Mathematics &lt;math.h&gt;</a></h3>
12222 <p><!--para 1 -->
12223  The header <a href="#7.12">&lt;math.h&gt;</a> declares two types and many mathematical functions and defines
12224  several macros. Most synopses specify a family of functions consisting of a principal
12225  function with one or more double parameters, a double return value, or both; and
12226  other functions with the same name but with f and l suffixes, which are corresponding
12227  functions with float and long double parameters, return values, or both.<sup><a href="#note223"><b>223)</b></a></sup>
12228  Integer arithmetic functions and conversion functions are discussed later.
12229 <p><!--para 2 -->
12230  The types
12231 <pre>
12232          float_t
12233          double_t
12234 </pre>
12235  are floating types at least as wide as float and double, respectively, and such that
12236  double_t is at least as wide as float_t. If FLT_EVAL_METHOD equals 0,
12237  float_t and double_t are float and double, respectively; if
12238  FLT_EVAL_METHOD equals 1, they are both double; if FLT_EVAL_METHOD equals
12239  2, they are both long double; and for other values of FLT_EVAL_METHOD, they are
12240  otherwise implementation-defined.<sup><a href="#note224"><b>224)</b></a></sup>
12241 <p><!--para 3 -->
12242  The macro
12243 <pre>
12244          HUGE_VAL
12245 </pre>
12246  expands to a positive double constant expression, not necessarily representable as a
12247  float. The macros
12248 <pre>
12249          HUGE_VALF
12250          HUGE_VALL
12251 </pre>
12252  are respectively float and long double analogs of HUGE_VAL.<sup><a href="#note225"><b>225)</b></a></sup>
12253 <p><!--para 4 -->
12254  The macro
12255 <pre>
12256          INFINITY
12257 </pre>
12258  expands to a constant expression of type float representing positive or unsigned
12259  infinity, if available; else to a positive constant of type float that overflows at
12260  
12261  
12262  
12263 <!--page 249 -->
12264  translation time.<sup><a href="#note226"><b>226)</b></a></sup>
12265 <p><!--para 5 -->
12266  The macro
12267 <pre>
12268           NAN
12269 </pre>
12270  is defined if and only if the implementation supports quiet NaNs for the float type. It
12271  expands to a constant expression of type float representing a quiet NaN.
12272 <p><!--para 6 -->
12273  The number classification macros
12274 <pre>
12275           FP_INFINITE
12276           FP_NAN
12277           FP_NORMAL
12278           FP_SUBNORMAL
12279           FP_ZERO
12280 </pre>
12281  represent the mutually exclusive kinds of floating-point values. They expand to integer
12282  constant expressions with distinct values. Additional implementation-defined floating-
12283  point classifications, with macro definitions beginning with FP_ and an uppercase letter,
12284  may also be specified by the implementation.
12285 <p><!--para 7 -->
12286  The macro
12287 <pre>
12288           FP_FAST_FMA
12289 </pre>
12290  is optionally defined. If defined, it indicates that the fma function generally executes
12291  about as fast as, or faster than, a multiply and an add of double operands.<sup><a href="#note227"><b>227)</b></a></sup> The
12292  macros
12293 <pre>
12294           FP_FAST_FMAF
12295           FP_FAST_FMAL
12296 </pre>
12297  are, respectively, float and long double analogs of FP_FAST_FMA. If defined,
12298  these macros expand to the integer constant 1.
12299 <p><!--para 8 -->
12300  The macros
12301 <pre>
12302           FP_ILOGB0
12303           FP_ILOGBNAN
12304 </pre>
12305  expand to integer constant expressions whose values are returned by ilogb(x) if x is
12306  zero or NaN, respectively. The value of FP_ILOGB0 shall be either INT_MIN or
12307  -INT_MAX. The value of FP_ILOGBNAN shall be either INT_MAX or INT_MIN.
12308  
12309  
12310 <!--page 250 -->
12311 <p><!--para 9 -->
12312  The macros
12313 <pre>
12314          MATH_ERRNO
12315          MATH_ERREXCEPT
12316 </pre>
12317  expand to the integer constants 1 and 2, respectively; the macro
12318 <pre>
12319          math_errhandling
12320 </pre>
12321  expands to an expression that has type int and the value MATH_ERRNO,
12322  MATH_ERREXCEPT, or the bitwise OR of both. The value of math_errhandling is
12323  constant for the duration of the program. It is unspecified whether
12324  math_errhandling is a macro or an identifier with external linkage. If a macro
12325  definition is suppressed or a program defines an identifier with the name
12326  math_errhandling, the behavior is undefined.               If the expression
12327  math_errhandling &amp; MATH_ERREXCEPT can be nonzero, the implementation
12328  shall define the macros FE_DIVBYZERO, FE_INVALID, and FE_OVERFLOW in
12329  <a href="#7.6">&lt;fenv.h&gt;</a>.
12330
12331 <p><b>Footnotes</b>
12332 <p><small><a name="note223" href="#note223">223)</a> Particularly on systems with wide expression evaluation, a <a href="#7.12">&lt;math.h&gt;</a> function might pass arguments
12333  and return values in wider format than the synopsis prototype indicates.
12334 </small>
12335 <p><small><a name="note224" href="#note224">224)</a> The types float_t and double_t are intended to be the implementation's most efficient types at
12336  least as wide as float and double, respectively. For FLT_EVAL_METHOD equal 0, 1, or 2, the
12337  type float_t is the narrowest type used by the implementation to evaluate floating expressions.
12338 </small>
12339 <p><small><a name="note225" href="#note225">225)</a> HUGE_VAL, HUGE_VALF, and HUGE_VALL can be positive infinities in an implementation that
12340  supports infinities.
12341 </small>
12342 <p><small><a name="note226" href="#note226">226)</a> In this case, using INFINITY will violate the constraint in <a href="#6.4.4">6.4.4</a> and thus require a diagnostic.
12343 </small>
12344 <p><small><a name="note227" href="#note227">227)</a> Typically, the FP_FAST_FMA macro is defined if and only if the fma function is implemented
12345  directly with a hardware multiply-add instruction. Software implementations are expected to be
12346  substantially slower.
12347 </small>
12348
12349 <p><small><a href="#Contents">Contents</a></small>
12350 <h4><a name="7.12.1" href="#7.12.1">7.12.1 Treatment of error conditions</a></h4>
12351 <p><!--para 1 -->
12352  The behavior of each of the functions in <a href="#7.12">&lt;math.h&gt;</a> is specified for all representable
12353  values of its input arguments, except where stated otherwise. Each function shall execute
12354  as if it were a single operation without raising SIGFPE and without generating any of the
12355  floating-point exceptions ''invalid'', ''divide-by-zero'', or ''overflow'' except to reflect
12356  the result of the function.
12357 <p><!--para 2 -->
12358  For all functions, a domain error occurs if an input argument is outside the domain over
12359  which the mathematical function is defined. The description of each function lists any
12360  required domain errors; an implementation may define additional domain errors, provided
12361  that such errors are consistent with the mathematical definition of the function.<sup><a href="#note228"><b>228)</b></a></sup> On a
12362  domain error, the function returns an implementation-defined value; if the integer
12363  expression math_errhandling &amp; MATH_ERRNO is nonzero, the integer expression
12364  errno acquires the value EDOM; if the integer expression math_errhandling &amp;
12365  MATH_ERREXCEPT is nonzero, the ''invalid'' floating-point exception is raised.
12366 <p><!--para 3 -->
12367  Similarly, a pole error (also known as a singularity or infinitary) occurs if the
12368  mathematical function has an exact infinite result as the finite input argument(s) are
12369  approached in the limit (for example, log(0.0)). The description of each function lists
12370  any required pole errors; an implementation may define additional pole errors, provided
12371  that such errors are consistent with the mathematical definition of the function. On a pole
12372  error, the function returns an implementation-defined value; if the integer expression
12373  
12374  
12375 <!--page 251 -->
12376  math_errhandling &amp; MATH_ERRNO is nonzero, the integer expression errno
12377  acquires the value ERANGE; if the integer expression math_errhandling &amp;
12378  MATH_ERREXCEPT is nonzero, the ''divide-by-zero'' floating-point exception is raised.
12379 <p><!--para 4 -->
12380  Likewise, a range error occurs if the mathematical result of the function cannot be
12381  represented in an object of the specified type, due to extreme magnitude.
12382 <p><!--para 5 -->
12383  A floating result overflows if the magnitude of the mathematical result is finite but so
12384  large that the mathematical result cannot be represented without extraordinary roundoff
12385  error in an object of the specified type. If a floating result overflows and default rounding
12386  is in effect, then the function returns the value of the macro HUGE_VAL, HUGE_VALF, or *
12387  HUGE_VALL according to the return type, with the same sign as the correct value of the
12388  function; if the integer expression math_errhandling &amp; MATH_ERRNO is nonzero,
12389  the integer expression errno acquires the value ERANGE; if the integer expression
12390  math_errhandling &amp; MATH_ERREXCEPT is nonzero, the ''overflow'' floating-
12391  point exception is raised.
12392 <p><!--para 6 -->
12393  The result underflows if the magnitude of the mathematical result is so small that the
12394  mathematical result cannot be represented, without extraordinary roundoff error, in an
12395  object of the specified type.<sup><a href="#note229"><b>229)</b></a></sup> If the result underflows, the function returns an
12396  implementation-defined value whose magnitude is no greater than the smallest
12397  normalized positive number in the specified type; if the integer expression
12398  math_errhandling &amp; MATH_ERRNO is nonzero, whether errno acquires the
12399  value    ERANGE       is    implementation-defined;     if   the  integer   expression
12400  math_errhandling &amp; MATH_ERREXCEPT is nonzero, whether the ''underflow''
12401  floating-point exception is raised is implementation-defined.
12402 <p><!--para 7 -->
12403  If a domain, pole, or range error occurs and the integer expression
12404  math_errhandling &amp; MATH_ERRNO is zero,<sup><a href="#note230"><b>230)</b></a></sup> then errno shall either be set to
12405  the value corresponding to the error or left unmodified. If no such error occurs, errno
12406  shall be left unmodified regardless of the setting of math_errhandling.
12407  
12408  
12409  
12410  
12411 <!--page 252 -->
12412
12413 <p><b>Footnotes</b>
12414 <p><small><a name="note228" href="#note228">228)</a> In an implementation that supports infinities, this allows an infinity as an argument to be a domain
12415  error if the mathematical domain of the function does not include the infinity.
12416 </small>
12417 <p><small><a name="note229" href="#note229">229)</a> The term underflow here is intended to encompass both ''gradual underflow'' as in IEC 60559 and
12418  also ''flush-to-zero'' underflow.
12419 </small>
12420 <p><small><a name="note230" href="#note230">230)</a> Math errors are being indicated by the floating-point exception flags rather than by errno.
12421 </small>
12422
12423 <p><small><a href="#Contents">Contents</a></small>
12424 <h4><a name="7.12.2" href="#7.12.2">7.12.2 The FP_CONTRACT pragma</a></h4>
12425 <p><b>Synopsis</b>
12426 <p><!--para 1 -->
12427 <pre>
12428           #include <a href="#7.12">&lt;math.h&gt;</a>
12429           #pragma STDC FP_CONTRACT on-off-switch
12430 </pre>
12431 <p><b>Description</b>
12432 <p><!--para 2 -->
12433  The FP_CONTRACT pragma can be used to allow (if the state is ''on'') or disallow (if the
12434  state is ''off'') the implementation to contract expressions (<a href="#6.5">6.5</a>). Each pragma can occur
12435  either outside external declarations or preceding all explicit declarations and statements
12436  inside a compound statement. When outside external declarations, the pragma takes
12437  effect from its occurrence until another FP_CONTRACT pragma is encountered, or until
12438  the end of the translation unit. When inside a compound statement, the pragma takes
12439  effect from its occurrence until another FP_CONTRACT pragma is encountered
12440  (including within a nested compound statement), or until the end of the compound
12441  statement; at the end of a compound statement the state for the pragma is restored to its
12442  condition just before the compound statement. If this pragma is used in any other
12443  context, the behavior is undefined. The default state (''on'' or ''off'') for the pragma is
12444  implementation-defined.
12445
12446 <p><small><a href="#Contents">Contents</a></small>
12447 <h4><a name="7.12.3" href="#7.12.3">7.12.3 Classification macros</a></h4>
12448 <p><!--para 1 -->
12449  In the synopses in this subclause, real-floating indicates that the argument shall be an
12450  expression of real floating type.
12451
12452 <p><small><a href="#Contents">Contents</a></small>
12453 <h5><a name="7.12.3.1" href="#7.12.3.1">7.12.3.1 The fpclassify macro</a></h5>
12454 <p><b>Synopsis</b>
12455 <p><!--para 1 -->
12456 <pre>
12457           #include <a href="#7.12">&lt;math.h&gt;</a>
12458           int fpclassify(real-floating x);
12459 </pre>
12460 <p><b>Description</b>
12461 <p><!--para 2 -->
12462  The fpclassify macro classifies its argument value as NaN, infinite, normal,
12463  subnormal, zero, or into another implementation-defined category. First, an argument
12464  represented in a format wider than its semantic type is converted to its semantic type.
12465  Then classification is based on the type of the argument.<sup><a href="#note231"><b>231)</b></a></sup>
12466 <p><b>Returns</b>
12467 <p><!--para 3 -->
12468  The fpclassify macro returns the value of the number classification macro
12469  appropriate to the value of its argument.                                *
12470  
12471  
12472 <!--page 253 -->
12473
12474 <p><b>Footnotes</b>
12475 <p><small><a name="note231" href="#note231">231)</a> Since an expression can be evaluated with more range and precision than its type has, it is important to
12476  know the type that classification is based on. For example, a normal long double value might
12477  become subnormal when converted to double, and zero when converted to float.
12478 </small>
12479
12480 <p><small><a href="#Contents">Contents</a></small>
12481 <h5><a name="7.12.3.2" href="#7.12.3.2">7.12.3.2 The isfinite macro</a></h5>
12482 <p><b>Synopsis</b>
12483 <p><!--para 1 -->
12484 <pre>
12485          #include <a href="#7.12">&lt;math.h&gt;</a>
12486          int isfinite(real-floating x);
12487 </pre>
12488 <p><b>Description</b>
12489 <p><!--para 2 -->
12490  The isfinite macro determines whether its argument has a finite value (zero,
12491  subnormal, or normal, and not infinite or NaN). First, an argument represented in a
12492  format wider than its semantic type is converted to its semantic type. Then determination
12493  is based on the type of the argument.
12494 <p><b>Returns</b>
12495 <p><!--para 3 -->
12496  The isfinite macro returns a nonzero value if and only if its argument has a finite
12497  value.
12498
12499 <p><small><a href="#Contents">Contents</a></small>
12500 <h5><a name="7.12.3.3" href="#7.12.3.3">7.12.3.3 The isinf macro</a></h5>
12501 <p><b>Synopsis</b>
12502 <p><!--para 1 -->
12503 <pre>
12504          #include <a href="#7.12">&lt;math.h&gt;</a>
12505          int isinf(real-floating x);
12506 </pre>
12507 <p><b>Description</b>
12508 <p><!--para 2 -->
12509  The isinf macro determines whether its argument value is an infinity (positive or
12510  negative). First, an argument represented in a format wider than its semantic type is
12511  converted to its semantic type. Then determination is based on the type of the argument.
12512 <p><b>Returns</b>
12513 <p><!--para 3 -->
12514  The isinf macro returns a nonzero value if and only if its argument has an infinite
12515  value.
12516
12517 <p><small><a href="#Contents">Contents</a></small>
12518 <h5><a name="7.12.3.4" href="#7.12.3.4">7.12.3.4 The isnan macro</a></h5>
12519 <p><b>Synopsis</b>
12520 <p><!--para 1 -->
12521 <pre>
12522          #include <a href="#7.12">&lt;math.h&gt;</a>
12523          int isnan(real-floating x);
12524 </pre>
12525 <p><b>Description</b>
12526 <p><!--para 2 -->
12527  The isnan macro determines whether its argument value is a NaN. First, an argument
12528  represented in a format wider than its semantic type is converted to its semantic type.
12529  Then determination is based on the type of the argument.<sup><a href="#note232"><b>232)</b></a></sup>
12530  
12531  
12532 <!--page 254 -->
12533 <p><b>Returns</b>
12534 <p><!--para 3 -->
12535  The isnan macro returns a nonzero value if and only if its argument has a NaN value.
12536
12537 <p><b>Footnotes</b>
12538 <p><small><a name="note232" href="#note232">232)</a> For the isnan macro, the type for determination does not matter unless the implementation supports
12539  NaNs in the evaluation type but not in the semantic type.
12540 </small>
12541
12542 <p><small><a href="#Contents">Contents</a></small>
12543 <h5><a name="7.12.3.5" href="#7.12.3.5">7.12.3.5 The isnormal macro</a></h5>
12544 <p><b>Synopsis</b>
12545 <p><!--para 1 -->
12546 <pre>
12547          #include <a href="#7.12">&lt;math.h&gt;</a>
12548          int isnormal(real-floating x);
12549 </pre>
12550 <p><b>Description</b>
12551 <p><!--para 2 -->
12552  The isnormal macro determines whether its argument value is normal (neither zero,
12553  subnormal, infinite, nor NaN). First, an argument represented in a format wider than its
12554  semantic type is converted to its semantic type. Then determination is based on the type
12555  of the argument.
12556 <p><b>Returns</b>
12557 <p><!--para 3 -->
12558  The isnormal macro returns a nonzero value if and only if its argument has a normal
12559  value.
12560
12561 <p><small><a href="#Contents">Contents</a></small>
12562 <h5><a name="7.12.3.6" href="#7.12.3.6">7.12.3.6 The signbit macro</a></h5>
12563 <p><b>Synopsis</b>
12564 <p><!--para 1 -->
12565 <pre>
12566          #include <a href="#7.12">&lt;math.h&gt;</a>
12567          int signbit(real-floating x);
12568 </pre>
12569 <p><b>Description</b>
12570 <p><!--para 2 -->
12571  The signbit macro determines whether the sign of its argument value is negative.<sup><a href="#note233"><b>233)</b></a></sup>
12572 <p><b>Returns</b>
12573 <p><!--para 3 -->
12574  The signbit macro returns a nonzero value if and only if the sign of its argument value
12575  is negative.
12576  
12577  
12578  
12579  
12580 <!--page 255 -->
12581
12582 <p><b>Footnotes</b>
12583 <p><small><a name="note233" href="#note233">233)</a> The signbit macro reports the sign of all values, including infinities, zeros, and NaNs. If zero is
12584  unsigned, it is treated as positive.
12585 </small>
12586
12587 <p><small><a href="#Contents">Contents</a></small>
12588 <h4><a name="7.12.4" href="#7.12.4">7.12.4 Trigonometric functions</a></h4>
12589
12590 <p><small><a href="#Contents">Contents</a></small>
12591 <h5><a name="7.12.4.1" href="#7.12.4.1">7.12.4.1 The acos functions</a></h5>
12592 <p><b>Synopsis</b>
12593 <p><!--para 1 -->
12594 <pre>
12595          #include <a href="#7.12">&lt;math.h&gt;</a>
12596          double acos(double x);
12597          float acosf(float x);
12598          long double acosl(long double x);
12599 </pre>
12600 <p><b>Description</b>
12601 <p><!--para 2 -->
12602  The acos functions compute the principal value of the arc cosine of x. A domain error
12603  occurs for arguments not in the interval [-1, +1].
12604 <p><b>Returns</b>
12605 <p><!--para 3 -->
12606  The acos functions return arccos x in the interval [0, pi ] radians.
12607
12608 <p><small><a href="#Contents">Contents</a></small>
12609 <h5><a name="7.12.4.2" href="#7.12.4.2">7.12.4.2 The asin functions</a></h5>
12610 <p><b>Synopsis</b>
12611 <p><!--para 1 -->
12612 <pre>
12613          #include <a href="#7.12">&lt;math.h&gt;</a>
12614          double asin(double x);
12615          float asinf(float x);
12616          long double asinl(long double x);
12617 </pre>
12618 <p><b>Description</b>
12619 <p><!--para 2 -->
12620  The asin functions compute the principal value of the arc sine of x. A domain error
12621  occurs for arguments not in the interval [-1, +1].
12622 <p><b>Returns</b>
12623 <p><!--para 3 -->
12624  The asin functions return arcsin x in the interval [-pi /2, +pi /2] radians.
12625
12626 <p><small><a href="#Contents">Contents</a></small>
12627 <h5><a name="7.12.4.3" href="#7.12.4.3">7.12.4.3 The atan functions</a></h5>
12628 <p><b>Synopsis</b>
12629 <p><!--para 1 -->
12630 <pre>
12631          #include <a href="#7.12">&lt;math.h&gt;</a>
12632          double atan(double x);
12633          float atanf(float x);
12634          long double atanl(long double x);
12635 </pre>
12636 <p><b>Description</b>
12637 <p><!--para 2 -->
12638  The atan functions compute the principal value of the arc tangent of x.
12639 <!--page 256 -->
12640 <p><b>Returns</b>
12641 <p><!--para 3 -->
12642  The atan functions return arctan x in the interval [-pi /2, +pi /2] radians.
12643
12644 <p><small><a href="#Contents">Contents</a></small>
12645 <h5><a name="7.12.4.4" href="#7.12.4.4">7.12.4.4 The atan2 functions</a></h5>
12646 <p><b>Synopsis</b>
12647 <p><!--para 1 -->
12648 <pre>
12649         #include <a href="#7.12">&lt;math.h&gt;</a>
12650         double atan2(double y, double x);
12651         float atan2f(float y, float x);
12652         long double atan2l(long double y, long double x);
12653 </pre>
12654 <p><b>Description</b>
12655 <p><!--para 2 -->
12656  The atan2 functions compute the value of the arc tangent of y/x, using the signs of both
12657  arguments to determine the quadrant of the return value. A domain error may occur if
12658  both arguments are zero.
12659 <p><b>Returns</b>
12660 <p><!--para 3 -->
12661  The atan2 functions return arctan y/x in the interval [-pi , +pi ] radians.
12662
12663 <p><small><a href="#Contents">Contents</a></small>
12664 <h5><a name="7.12.4.5" href="#7.12.4.5">7.12.4.5 The cos functions</a></h5>
12665 <p><b>Synopsis</b>
12666 <p><!--para 1 -->
12667 <pre>
12668         #include <a href="#7.12">&lt;math.h&gt;</a>
12669         double cos(double x);
12670         float cosf(float x);
12671         long double cosl(long double x);
12672 </pre>
12673 <p><b>Description</b>
12674 <p><!--para 2 -->
12675  The cos functions compute the cosine of x (measured in radians).
12676 <p><b>Returns</b>
12677 <p><!--para 3 -->
12678  The cos functions return cos x.
12679
12680 <p><small><a href="#Contents">Contents</a></small>
12681 <h5><a name="7.12.4.6" href="#7.12.4.6">7.12.4.6 The sin functions</a></h5>
12682 <p><b>Synopsis</b>
12683 <p><!--para 1 -->
12684 <pre>
12685         #include <a href="#7.12">&lt;math.h&gt;</a>
12686         double sin(double x);
12687         float sinf(float x);
12688         long double sinl(long double x);
12689 </pre>
12690 <p><b>Description</b>
12691 <p><!--para 2 -->
12692  The sin functions compute the sine of x (measured in radians).
12693 <!--page 257 -->
12694 <p><b>Returns</b>
12695 <p><!--para 3 -->
12696  The sin functions return sin x.
12697
12698 <p><small><a href="#Contents">Contents</a></small>
12699 <h5><a name="7.12.4.7" href="#7.12.4.7">7.12.4.7 The tan functions</a></h5>
12700 <p><b>Synopsis</b>
12701 <p><!--para 1 -->
12702 <pre>
12703          #include <a href="#7.12">&lt;math.h&gt;</a>
12704          double tan(double x);
12705          float tanf(float x);
12706          long double tanl(long double x);
12707 </pre>
12708 <p><b>Description</b>
12709 <p><!--para 2 -->
12710  The tan functions return the tangent of x (measured in radians).
12711 <p><b>Returns</b>
12712 <p><!--para 3 -->
12713  The tan functions return tan x.
12714
12715 <p><small><a href="#Contents">Contents</a></small>
12716 <h4><a name="7.12.5" href="#7.12.5">7.12.5 Hyperbolic functions</a></h4>
12717
12718 <p><small><a href="#Contents">Contents</a></small>
12719 <h5><a name="7.12.5.1" href="#7.12.5.1">7.12.5.1 The acosh functions</a></h5>
12720 <p><b>Synopsis</b>
12721 <p><!--para 1 -->
12722 <pre>
12723          #include <a href="#7.12">&lt;math.h&gt;</a>
12724          double acosh(double x);
12725          float acoshf(float x);
12726          long double acoshl(long double x);
12727 </pre>
12728 <p><b>Description</b>
12729 <p><!--para 2 -->
12730  The acosh functions compute the (nonnegative) arc hyperbolic cosine of x. A domain
12731  error occurs for arguments less than 1.
12732 <p><b>Returns</b>
12733 <p><!--para 3 -->
12734  The acosh functions return arcosh x in the interval [0, +(inf)].
12735
12736 <p><small><a href="#Contents">Contents</a></small>
12737 <h5><a name="7.12.5.2" href="#7.12.5.2">7.12.5.2 The asinh functions</a></h5>
12738 <p><b>Synopsis</b>
12739 <p><!--para 1 -->
12740 <pre>
12741          #include <a href="#7.12">&lt;math.h&gt;</a>
12742          double asinh(double x);
12743          float asinhf(float x);
12744          long double asinhl(long double x);
12745 </pre>
12746 <p><b>Description</b>
12747 <p><!--para 2 -->
12748  The asinh functions compute the arc hyperbolic sine of x.
12749 <!--page 258 -->
12750 <p><b>Returns</b>
12751 <p><!--para 3 -->
12752  The asinh functions return arsinh x.
12753
12754 <p><small><a href="#Contents">Contents</a></small>
12755 <h5><a name="7.12.5.3" href="#7.12.5.3">7.12.5.3 The atanh functions</a></h5>
12756 <p><b>Synopsis</b>
12757 <p><!--para 1 -->
12758 <pre>
12759         #include <a href="#7.12">&lt;math.h&gt;</a>
12760         double atanh(double x);
12761         float atanhf(float x);
12762         long double atanhl(long double x);
12763 </pre>
12764 <p><b>Description</b>
12765 <p><!--para 2 -->
12766  The atanh functions compute the arc hyperbolic tangent of x. A domain error occurs
12767  for arguments not in the interval [-1, +1]. A pole error may occur if the argument equals
12768  -1 or +1.
12769 <p><b>Returns</b>
12770 <p><!--para 3 -->
12771  The atanh functions return artanh x.
12772
12773 <p><small><a href="#Contents">Contents</a></small>
12774 <h5><a name="7.12.5.4" href="#7.12.5.4">7.12.5.4 The cosh functions</a></h5>
12775 <p><b>Synopsis</b>
12776 <p><!--para 1 -->
12777 <pre>
12778         #include <a href="#7.12">&lt;math.h&gt;</a>
12779         double cosh(double x);
12780         float coshf(float x);
12781         long double coshl(long double x);
12782 </pre>
12783 <p><b>Description</b>
12784 <p><!--para 2 -->
12785  The cosh functions compute the hyperbolic cosine of x. A range error occurs if the
12786  magnitude of x is too large.
12787 <p><b>Returns</b>
12788 <p><!--para 3 -->
12789  The cosh functions return cosh x.
12790
12791 <p><small><a href="#Contents">Contents</a></small>
12792 <h5><a name="7.12.5.5" href="#7.12.5.5">7.12.5.5 The sinh functions</a></h5>
12793 <p><b>Synopsis</b>
12794 <p><!--para 1 -->
12795 <pre>
12796         #include <a href="#7.12">&lt;math.h&gt;</a>
12797         double sinh(double x);
12798         float sinhf(float x);
12799         long double sinhl(long double x);
12800 </pre>
12801 <p><b>Description</b>
12802 <p><!--para 2 -->
12803  The sinh functions compute the hyperbolic sine of x. A range error occurs if the
12804  magnitude of x is too large.
12805 <!--page 259 -->
12806 <p><b>Returns</b>
12807 <p><!--para 3 -->
12808  The sinh functions return sinh x.
12809
12810 <p><small><a href="#Contents">Contents</a></small>
12811 <h5><a name="7.12.5.6" href="#7.12.5.6">7.12.5.6 The tanh functions</a></h5>
12812 <p><b>Synopsis</b>
12813 <p><!--para 1 -->
12814 <pre>
12815          #include <a href="#7.12">&lt;math.h&gt;</a>
12816          double tanh(double x);
12817          float tanhf(float x);
12818          long double tanhl(long double x);
12819 </pre>
12820 <p><b>Description</b>
12821 <p><!--para 2 -->
12822  The tanh functions compute the hyperbolic tangent of x.
12823 <p><b>Returns</b>
12824 <p><!--para 3 -->
12825  The tanh functions return tanh x.
12826
12827 <p><small><a href="#Contents">Contents</a></small>
12828 <h4><a name="7.12.6" href="#7.12.6">7.12.6 Exponential and logarithmic functions</a></h4>
12829
12830 <p><small><a href="#Contents">Contents</a></small>
12831 <h5><a name="7.12.6.1" href="#7.12.6.1">7.12.6.1 The exp functions</a></h5>
12832 <p><b>Synopsis</b>
12833 <p><!--para 1 -->
12834 <pre>
12835          #include <a href="#7.12">&lt;math.h&gt;</a>
12836          double exp(double x);
12837          float expf(float x);
12838          long double expl(long double x);
12839 </pre>
12840 <p><b>Description</b>
12841 <p><!--para 2 -->
12842  The exp functions compute the base-e exponential of x. A range error occurs if the
12843  magnitude of x is too large.
12844 <p><b>Returns</b>
12845 <p><!--para 3 -->
12846  The exp functions return ex .
12847
12848 <p><small><a href="#Contents">Contents</a></small>
12849 <h5><a name="7.12.6.2" href="#7.12.6.2">7.12.6.2 The exp2 functions</a></h5>
12850 <p><b>Synopsis</b>
12851 <p><!--para 1 -->
12852 <pre>
12853          #include <a href="#7.12">&lt;math.h&gt;</a>
12854          double exp2(double x);
12855          float exp2f(float x);
12856          long double exp2l(long double x);
12857 </pre>
12858 <p><b>Description</b>
12859 <p><!--para 2 -->
12860  The exp2 functions compute the base-2 exponential of x. A range error occurs if the
12861  magnitude of x is too large.
12862 <!--page 260 -->
12863 <p><b>Returns</b>
12864 <p><!--para 3 -->
12865  The exp2 functions return 2x .
12866
12867 <p><small><a href="#Contents">Contents</a></small>
12868 <h5><a name="7.12.6.3" href="#7.12.6.3">7.12.6.3 The expm1 functions</a></h5>
12869 <p><b>Synopsis</b>
12870 <p><!--para 1 -->
12871 <pre>
12872          #include <a href="#7.12">&lt;math.h&gt;</a>
12873          double expm1(double x);
12874          float expm1f(float x);
12875          long double expm1l(long double x);
12876 </pre>
12877 <p><b>Description</b>
12878 <p><!--para 2 -->
12879  The expm1 functions compute the base-e exponential of the argument, minus 1. A range
12880  error occurs if x is too large.<sup><a href="#note234"><b>234)</b></a></sup>
12881 <p><b>Returns</b>
12882 <p><!--para 3 -->
12883  The expm1 functions return ex - 1.
12884
12885 <p><b>Footnotes</b>
12886 <p><small><a name="note234" href="#note234">234)</a> For small magnitude x, expm1(x) is expected to be more accurate than exp(x) - 1.
12887 </small>
12888
12889 <p><small><a href="#Contents">Contents</a></small>
12890 <h5><a name="7.12.6.4" href="#7.12.6.4">7.12.6.4 The frexp functions</a></h5>
12891 <p><b>Synopsis</b>
12892 <p><!--para 1 -->
12893 <pre>
12894          #include <a href="#7.12">&lt;math.h&gt;</a>
12895          double frexp(double value, int *exp);
12896          float frexpf(float value, int *exp);
12897          long double frexpl(long double value, int *exp);
12898 </pre>
12899 <p><b>Description</b>
12900 <p><!--para 2 -->
12901  The frexp functions break a floating-point number into a normalized fraction and an
12902  integral power of 2. They store the integer in the int object pointed to by exp.
12903 <p><b>Returns</b>
12904 <p><!--para 3 -->
12905  If value is not a floating-point number or if the integral power of 2 is outside the range
12906  of int, the results are unspecified. Otherwise, the frexp functions return the value x,
12907  such that x has a magnitude in the interval [1/2, 1) or zero, and value equals x x 2*exp .
12908  If value is zero, both parts of the result are zero.
12909  
12910  
12911  
12912  
12913 <!--page 261 -->
12914
12915 <p><small><a href="#Contents">Contents</a></small>
12916 <h5><a name="7.12.6.5" href="#7.12.6.5">7.12.6.5 The ilogb functions</a></h5>
12917 <p><b>Synopsis</b>
12918 <p><!--para 1 -->
12919 <pre>
12920          #include <a href="#7.12">&lt;math.h&gt;</a>
12921          int ilogb(double x);
12922          int ilogbf(float x);
12923          int ilogbl(long double x);
12924 </pre>
12925 <p><b>Description</b>
12926 <p><!--para 2 -->
12927  The ilogb functions extract the exponent of x as a signed int value. If x is zero they
12928  compute the value FP_ILOGB0; if x is infinite they compute the value INT_MAX; if x is
12929  a NaN they compute the value FP_ILOGBNAN; otherwise, they are equivalent to calling
12930  the corresponding logb function and casting the returned value to type int. A domain
12931  error or range error may occur if x is zero, infinite, or NaN. If the correct value is outside
12932  the range of the return type, the numeric result is unspecified.
12933 <p><b>Returns</b>
12934 <p><!--para 3 -->
12935  The ilogb functions return the exponent of x as a signed int value.
12936 <p><b> Forward references</b>: the logb functions (<a href="#7.12.6.11">7.12.6.11</a>).
12937
12938 <p><small><a href="#Contents">Contents</a></small>
12939 <h5><a name="7.12.6.6" href="#7.12.6.6">7.12.6.6 The ldexp functions</a></h5>
12940 <p><b>Synopsis</b>
12941 <p><!--para 1 -->
12942 <pre>
12943          #include <a href="#7.12">&lt;math.h&gt;</a>
12944          double ldexp(double x, int exp);
12945          float ldexpf(float x, int exp);
12946          long double ldexpl(long double x, int exp);
12947 </pre>
12948 <p><b>Description</b>
12949 <p><!--para 2 -->
12950  The ldexp functions multiply a floating-point number by an integral power of 2. A
12951  range error may occur.
12952 <p><b>Returns</b>
12953 <p><!--para 3 -->
12954  The ldexp functions return x x 2exp .
12955
12956 <p><small><a href="#Contents">Contents</a></small>
12957 <h5><a name="7.12.6.7" href="#7.12.6.7">7.12.6.7 The log functions</a></h5>
12958 <p><b>Synopsis</b>
12959 <p><!--para 1 -->
12960 <!--page 262 -->
12961 <pre>
12962          #include <a href="#7.12">&lt;math.h&gt;</a>
12963          double log(double x);
12964          float logf(float x);
12965          long double logl(long double x);
12966 </pre>
12967 <p><b>Description</b>
12968 <p><!--para 2 -->
12969  The log functions compute the base-e (natural) logarithm of x. A domain error occurs if
12970  the argument is negative. A pole error may occur if the argument is zero.
12971 <p><b>Returns</b>
12972 <p><!--para 3 -->
12973  The log functions return loge x.
12974
12975 <p><small><a href="#Contents">Contents</a></small>
12976 <h5><a name="7.12.6.8" href="#7.12.6.8">7.12.6.8 The log10 functions</a></h5>
12977 <p><b>Synopsis</b>
12978 <p><!--para 1 -->
12979 <pre>
12980          #include <a href="#7.12">&lt;math.h&gt;</a>
12981          double log10(double x);
12982          float log10f(float x);
12983          long double log10l(long double x);
12984 </pre>
12985 <p><b>Description</b>
12986 <p><!--para 2 -->
12987  The log10 functions compute the base-10 (common) logarithm of x. A domain error
12988  occurs if the argument is negative. A pole error may occur if the argument is zero.
12989 <p><b>Returns</b>
12990 <p><!--para 3 -->
12991  The log10 functions return log10 x.
12992
12993 <p><small><a href="#Contents">Contents</a></small>
12994 <h5><a name="7.12.6.9" href="#7.12.6.9">7.12.6.9 The log1p functions</a></h5>
12995 <p><b>Synopsis</b>
12996 <p><!--para 1 -->
12997 <pre>
12998          #include <a href="#7.12">&lt;math.h&gt;</a>
12999          double log1p(double x);
13000          float log1pf(float x);
13001          long double log1pl(long double x);
13002 </pre>
13003 <p><b>Description</b>
13004 <p><!--para 2 -->
13005  The log1p functions compute the base-e (natural) logarithm of 1 plus the argument.<sup><a href="#note235"><b>235)</b></a></sup>
13006  A domain error occurs if the argument is less than -1. A pole error may occur if the
13007  argument equals -1.
13008 <p><b>Returns</b>
13009 <p><!--para 3 -->
13010  The log1p functions return loge (1 + x).
13011  
13012  
13013  
13014  
13015 <!--page 263 -->
13016
13017 <p><b>Footnotes</b>
13018 <p><small><a name="note235" href="#note235">235)</a> For small magnitude x, log1p(x) is expected to be more accurate than log(1 + x).
13019 </small>
13020
13021 <p><small><a href="#Contents">Contents</a></small>
13022 <h5><a name="7.12.6.10" href="#7.12.6.10">7.12.6.10 The log2 functions</a></h5>
13023 <p><b>Synopsis</b>
13024 <p><!--para 1 -->
13025 <pre>
13026          #include <a href="#7.12">&lt;math.h&gt;</a>
13027          double log2(double x);
13028          float log2f(float x);
13029          long double log2l(long double x);
13030 </pre>
13031 <p><b>Description</b>
13032 <p><!--para 2 -->
13033  The log2 functions compute the base-2 logarithm of x. A domain error occurs if the
13034  argument is less than zero. A pole error may occur if the argument is zero.
13035 <p><b>Returns</b>
13036 <p><!--para 3 -->
13037  The log2 functions return log2 x.
13038
13039 <p><small><a href="#Contents">Contents</a></small>
13040 <h5><a name="7.12.6.11" href="#7.12.6.11">7.12.6.11 The logb functions</a></h5>
13041 <p><b>Synopsis</b>
13042 <p><!--para 1 -->
13043 <pre>
13044          #include <a href="#7.12">&lt;math.h&gt;</a>
13045          double logb(double x);
13046          float logbf(float x);
13047          long double logbl(long double x);
13048 </pre>
13049 <p><b>Description</b>
13050 <p><!--para 2 -->
13051  The logb functions extract the exponent of x, as a signed integer value in floating-point
13052  format. If x is subnormal it is treated as though it were normalized; thus, for positive
13053  finite x,
13054 <pre>
13055        1 &lt;= x x FLT_RADIX-logb(x) &lt; FLT_RADIX
13056 </pre>
13057  A domain error or pole error may occur if the argument is zero.
13058 <p><b>Returns</b>
13059 <p><!--para 3 -->
13060  The logb functions return the signed exponent of x.
13061
13062 <p><small><a href="#Contents">Contents</a></small>
13063 <h5><a name="7.12.6.12" href="#7.12.6.12">7.12.6.12 The modf functions</a></h5>
13064 <p><b>Synopsis</b>
13065 <p><!--para 1 -->
13066 <pre>
13067          #include <a href="#7.12">&lt;math.h&gt;</a>
13068          double modf(double value, double *iptr);
13069          float modff(float value, float *iptr);
13070          long double modfl(long double value, long double *iptr);
13071 </pre>
13072 <p><b>Description</b>
13073 <p><!--para 2 -->
13074  The modf functions break the argument value into integral and fractional parts, each of
13075  which has the same type and sign as the argument. They store the integral part (in
13076 <!--page 264 -->
13077  floating-point format) in the object pointed to by iptr.
13078 <p><b>Returns</b>
13079 <p><!--para 3 -->
13080  The modf functions return the signed fractional part of value.
13081
13082 <p><small><a href="#Contents">Contents</a></small>
13083 <h5><a name="7.12.6.13" href="#7.12.6.13">7.12.6.13 The scalbn and scalbln functions</a></h5>
13084 <p><b>Synopsis</b>
13085 <p><!--para 1 -->
13086 <pre>
13087         #include <a href="#7.12">&lt;math.h&gt;</a>
13088         double scalbn(double x, int n);
13089         float scalbnf(float x, int n);
13090         long double scalbnl(long double x, int n);
13091         double scalbln(double x, long int n);
13092         float scalblnf(float x, long int n);
13093         long double scalblnl(long double x, long int n);
13094 </pre>
13095 <p><b>Description</b>
13096 <p><!--para 2 -->
13097  The scalbn and scalbln functions compute x x FLT_RADIXn efficiently, not
13098  normally by computing FLT_RADIXn explicitly. A range error may occur.
13099 <p><b>Returns</b>
13100 <p><!--para 3 -->
13101  The scalbn and scalbln functions return x x FLT_RADIXn .
13102
13103 <p><small><a href="#Contents">Contents</a></small>
13104 <h4><a name="7.12.7" href="#7.12.7">7.12.7 Power and absolute-value functions</a></h4>
13105
13106 <p><small><a href="#Contents">Contents</a></small>
13107 <h5><a name="7.12.7.1" href="#7.12.7.1">7.12.7.1 The cbrt functions</a></h5>
13108 <p><b>Synopsis</b>
13109 <p><!--para 1 -->
13110 <pre>
13111         #include <a href="#7.12">&lt;math.h&gt;</a>
13112         double cbrt(double x);
13113         float cbrtf(float x);
13114         long double cbrtl(long double x);
13115 </pre>
13116 <p><b>Description</b>
13117 <p><!--para 2 -->
13118  The cbrt functions compute the real cube root of x.
13119 <p><b>Returns</b>
13120 <p><!--para 3 -->
13121  The cbrt functions return x1/3 .
13122 <!--page 265 -->
13123
13124 <p><small><a href="#Contents">Contents</a></small>
13125 <h5><a name="7.12.7.2" href="#7.12.7.2">7.12.7.2 The fabs functions</a></h5>
13126 <p><b>Synopsis</b>
13127 <p><!--para 1 -->
13128 <pre>
13129          #include <a href="#7.12">&lt;math.h&gt;</a>
13130          double fabs(double x);
13131          float fabsf(float x);
13132          long double fabsl(long double x);
13133 </pre>
13134 <p><b>Description</b>
13135 <p><!--para 2 -->
13136  The fabs functions compute the absolute value of a floating-point number x.
13137 <p><b>Returns</b>
13138 <p><!--para 3 -->
13139  The fabs functions return | x |.
13140
13141 <p><small><a href="#Contents">Contents</a></small>
13142 <h5><a name="7.12.7.3" href="#7.12.7.3">7.12.7.3 The hypot functions</a></h5>
13143 <p><b>Synopsis</b>
13144 <p><!--para 1 -->
13145 <pre>
13146          #include <a href="#7.12">&lt;math.h&gt;</a>
13147          double hypot(double x, double y);
13148          float hypotf(float x, float y);
13149          long double hypotl(long double x, long double y);
13150 </pre>
13151 <p><b>Description</b>
13152 <p><!--para 2 -->
13153  The hypot functions compute the square root of the sum of the squares of x and y,
13154  without undue overflow or underflow. A range error may occur.
13155 <p><!--para 3 -->
13156 <p><b>Returns</b>
13157 <p><!--para 4 -->
13158  The hypot functions return (sqrt)x2 + y2 .
13159 <pre>
13160                             -
13161                             -----
13162 </pre>
13163
13164 <p><small><a href="#Contents">Contents</a></small>
13165 <h5><a name="7.12.7.4" href="#7.12.7.4">7.12.7.4 The pow functions</a></h5>
13166 <p><b>Synopsis</b>
13167 <p><!--para 1 -->
13168 <pre>
13169          #include <a href="#7.12">&lt;math.h&gt;</a>
13170          double pow(double x, double y);
13171          float powf(float x, float y);
13172          long double powl(long double x, long double y);
13173 </pre>
13174 <p><b>Description</b>
13175 <p><!--para 2 -->
13176  The pow functions compute x raised to the power y. A domain error occurs if x is finite
13177  and negative and y is finite and not an integer value. A range error may occur. A domain
13178  error may occur if x is zero and y is zero. A domain error or pole error may occur if x is
13179  zero and y is less than zero.
13180 <!--page 266 -->
13181 <p><b>Returns</b>
13182 <p><!--para 3 -->
13183  The pow functions return xy .
13184
13185 <p><small><a href="#Contents">Contents</a></small>
13186 <h5><a name="7.12.7.5" href="#7.12.7.5">7.12.7.5 The sqrt functions</a></h5>
13187 <p><b>Synopsis</b>
13188 <p><!--para 1 -->
13189 <pre>
13190         #include <a href="#7.12">&lt;math.h&gt;</a>
13191         double sqrt(double x);
13192         float sqrtf(float x);
13193         long double sqrtl(long double x);
13194 </pre>
13195 <p><b>Description</b>
13196 <p><!--para 2 -->
13197  The sqrt functions compute the nonnegative square root of x. A domain error occurs if
13198  the argument is less than zero.
13199 <p><b>Returns</b>
13200 <p><!--para 3 -->
13201  The sqrt functions return (sqrt)x.
13202 <pre>
13203                            -
13204                            -
13205 </pre>
13206
13207 <p><small><a href="#Contents">Contents</a></small>
13208 <h4><a name="7.12.8" href="#7.12.8">7.12.8 Error and gamma functions</a></h4>
13209
13210 <p><small><a href="#Contents">Contents</a></small>
13211 <h5><a name="7.12.8.1" href="#7.12.8.1">7.12.8.1 The erf functions</a></h5>
13212 <p><b>Synopsis</b>
13213 <p><!--para 1 -->
13214 <pre>
13215         #include <a href="#7.12">&lt;math.h&gt;</a>
13216         double erf(double x);
13217         float erff(float x);
13218         long double erfl(long double x);
13219 </pre>
13220 <p><b>Description</b>
13221 <p><!--para 2 -->
13222  The erf functions compute the error function of x.
13223 <p><b>Returns</b>
13224 <p><!--para 3 -->
13225 <pre>
13226                                     2        x
13227                                          (integral)       e-t dt.
13228                                                    2
13229 </pre>
13230  The erf functions return erf x =
13231 <pre>
13232                                     (sqrt)pi
13233                                     -
13234                                     -    0
13235 </pre>
13236  
13237
13238 <p><small><a href="#Contents">Contents</a></small>
13239 <h5><a name="7.12.8.2" href="#7.12.8.2">7.12.8.2 The erfc functions</a></h5>
13240 <p><b>Synopsis</b>
13241 <p><!--para 1 -->
13242 <pre>
13243         #include <a href="#7.12">&lt;math.h&gt;</a>
13244         double erfc(double x);
13245         float erfcf(float x);
13246         long double erfcl(long double x);
13247 </pre>
13248 <p><b>Description</b>
13249 <p><!--para 2 -->
13250  The erfc functions compute the complementary error function of x. A range error
13251  occurs if x is too large.
13252 <!--page 267 -->
13253 <p><b>Returns</b>
13254 <p><!--para 3 -->
13255 <pre>
13256                                                      2       (inf)
13257                                                          (integral)       e-t dt.
13258                                                                    2
13259 </pre>
13260  The erfc functions return erfc x = 1 - erf x =
13261 <pre>
13262                                                   (sqrt)pi
13263                                                   -
13264                                                   -      x
13265 </pre>
13266  
13267
13268 <p><small><a href="#Contents">Contents</a></small>
13269 <h5><a name="7.12.8.3" href="#7.12.8.3">7.12.8.3 The lgamma functions</a></h5>
13270 <p><b>Synopsis</b>
13271 <p><!--para 1 -->
13272 <pre>
13273          #include <a href="#7.12">&lt;math.h&gt;</a>
13274          double lgamma(double x);
13275          float lgammaf(float x);
13276          long double lgammal(long double x);
13277 </pre>
13278 <p><b>Description</b>
13279 <p><!--para 2 -->
13280  The lgamma functions compute the natural logarithm of the absolute value of gamma of
13281  x. A range error occurs if x is too large. A pole error may occur if x is a negative integer
13282  or zero.
13283 <p><b>Returns</b>
13284 <p><!--para 3 -->
13285  The lgamma functions return loge | (Gamma)(x) |.
13286
13287 <p><small><a href="#Contents">Contents</a></small>
13288 <h5><a name="7.12.8.4" href="#7.12.8.4">7.12.8.4 The tgamma functions</a></h5>
13289 <p><b>Synopsis</b>
13290 <p><!--para 1 -->
13291 <pre>
13292          #include <a href="#7.12">&lt;math.h&gt;</a>
13293          double tgamma(double x);
13294          float tgammaf(float x);
13295          long double tgammal(long double x);
13296 </pre>
13297 <p><b>Description</b>
13298 <p><!--para 2 -->
13299  The tgamma functions compute the gamma function of x. A domain error or pole error
13300  may occur if x is a negative integer or zero. A range error occurs if the magnitude of x is
13301  too large and may occur if the magnitude of x is too small.
13302 <p><b>Returns</b>
13303 <p><!--para 3 -->
13304  The tgamma functions return (Gamma)(x).
13305 <!--page 268 -->
13306
13307 <p><small><a href="#Contents">Contents</a></small>
13308 <h4><a name="7.12.9" href="#7.12.9">7.12.9 Nearest integer functions</a></h4>
13309
13310 <p><small><a href="#Contents">Contents</a></small>
13311 <h5><a name="7.12.9.1" href="#7.12.9.1">7.12.9.1 The ceil functions</a></h5>
13312 <p><b>Synopsis</b>
13313 <p><!--para 1 -->
13314 <pre>
13315         #include <a href="#7.12">&lt;math.h&gt;</a>
13316         double ceil(double x);
13317         float ceilf(float x);
13318         long double ceill(long double x);
13319 </pre>
13320 <p><b>Description</b>
13321 <p><!--para 2 -->
13322  The ceil functions compute the smallest integer value not less than x.
13323 <p><b>Returns</b>
13324 <p><!--para 3 -->
13325  The ceil functions return [^x^], expressed as a floating-point number.
13326
13327 <p><small><a href="#Contents">Contents</a></small>
13328 <h5><a name="7.12.9.2" href="#7.12.9.2">7.12.9.2 The floor functions</a></h5>
13329 <p><b>Synopsis</b>
13330 <p><!--para 1 -->
13331 <pre>
13332         #include <a href="#7.12">&lt;math.h&gt;</a>
13333         double floor(double x);
13334         float floorf(float x);
13335         long double floorl(long double x);
13336 </pre>
13337 <p><b>Description</b>
13338 <p><!--para 2 -->
13339  The floor functions compute the largest integer value not greater than x.
13340 <p><b>Returns</b>
13341 <p><!--para 3 -->
13342  The floor functions return [_x_], expressed as a floating-point number.
13343
13344 <p><small><a href="#Contents">Contents</a></small>
13345 <h5><a name="7.12.9.3" href="#7.12.9.3">7.12.9.3 The nearbyint functions</a></h5>
13346 <p><b>Synopsis</b>
13347 <p><!--para 1 -->
13348 <pre>
13349         #include <a href="#7.12">&lt;math.h&gt;</a>
13350         double nearbyint(double x);
13351         float nearbyintf(float x);
13352         long double nearbyintl(long double x);
13353 </pre>
13354 <p><b>Description</b>
13355 <p><!--para 2 -->
13356  The nearbyint functions round their argument to an integer value in floating-point
13357  format, using the current rounding direction and without raising the ''inexact'' floating-
13358  point exception.
13359 <!--page 269 -->
13360 <p><b>Returns</b>
13361 <p><!--para 3 -->
13362  The nearbyint functions return the rounded integer value.
13363
13364 <p><small><a href="#Contents">Contents</a></small>
13365 <h5><a name="7.12.9.4" href="#7.12.9.4">7.12.9.4 The rint functions</a></h5>
13366 <p><b>Synopsis</b>
13367 <p><!--para 1 -->
13368 <pre>
13369          #include <a href="#7.12">&lt;math.h&gt;</a>
13370          double rint(double x);
13371          float rintf(float x);
13372          long double rintl(long double x);
13373 </pre>
13374 <p><b>Description</b>
13375 <p><!--para 2 -->
13376  The rint functions differ from the nearbyint functions (<a href="#7.12.9.3">7.12.9.3</a>) only in that the
13377  rint functions may raise the ''inexact'' floating-point exception if the result differs in
13378  value from the argument.
13379 <p><b>Returns</b>
13380 <p><!--para 3 -->
13381  The rint functions return the rounded integer value.
13382
13383 <p><small><a href="#Contents">Contents</a></small>
13384 <h5><a name="7.12.9.5" href="#7.12.9.5">7.12.9.5 The lrint and llrint functions</a></h5>
13385 <p><b>Synopsis</b>
13386 <p><!--para 1 -->
13387 <pre>
13388          #include <a href="#7.12">&lt;math.h&gt;</a>
13389          long int lrint(double x);
13390          long int lrintf(float x);
13391          long int lrintl(long double x);
13392          long long int llrint(double x);
13393          long long int llrintf(float x);
13394          long long int llrintl(long double x);
13395 </pre>
13396 <p><b>Description</b>
13397 <p><!--para 2 -->
13398  The lrint and llrint functions round their argument to the nearest integer value,
13399  rounding according to the current rounding direction. If the rounded value is outside the
13400  range of the return type, the numeric result is unspecified and a domain error or range
13401  error may occur.
13402 <p><b>Returns</b>
13403 <p><!--para 3 -->
13404  The lrint and llrint functions return the rounded integer value.
13405 <!--page 270 -->
13406
13407 <p><small><a href="#Contents">Contents</a></small>
13408 <h5><a name="7.12.9.6" href="#7.12.9.6">7.12.9.6 The round functions</a></h5>
13409 <p><b>Synopsis</b>
13410 <p><!--para 1 -->
13411 <pre>
13412         #include <a href="#7.12">&lt;math.h&gt;</a>
13413         double round(double x);
13414         float roundf(float x);
13415         long double roundl(long double x);
13416 </pre>
13417 <p><b>Description</b>
13418 <p><!--para 2 -->
13419  The round functions round their argument to the nearest integer value in floating-point
13420  format, rounding halfway cases away from zero, regardless of the current rounding
13421  direction.
13422 <p><b>Returns</b>
13423 <p><!--para 3 -->
13424  The round functions return the rounded integer value.
13425
13426 <p><small><a href="#Contents">Contents</a></small>
13427 <h5><a name="7.12.9.7" href="#7.12.9.7">7.12.9.7 The lround and llround functions</a></h5>
13428 <p><b>Synopsis</b>
13429 <p><!--para 1 -->
13430 <pre>
13431         #include <a href="#7.12">&lt;math.h&gt;</a>
13432         long int lround(double x);
13433         long int lroundf(float x);
13434         long int lroundl(long double x);
13435         long long int llround(double x);
13436         long long int llroundf(float x);
13437         long long int llroundl(long double x);
13438 </pre>
13439 <p><b>Description</b>
13440 <p><!--para 2 -->
13441  The lround and llround functions round their argument to the nearest integer value,
13442  rounding halfway cases away from zero, regardless of the current rounding direction. If
13443  the rounded value is outside the range of the return type, the numeric result is unspecified
13444  and a domain error or range error may occur.
13445 <p><b>Returns</b>
13446 <p><!--para 3 -->
13447  The lround and llround functions return the rounded integer value.
13448
13449 <p><small><a href="#Contents">Contents</a></small>
13450 <h5><a name="7.12.9.8" href="#7.12.9.8">7.12.9.8 The trunc functions</a></h5>
13451 <p><b>Synopsis</b>
13452 <p><!--para 1 -->
13453 <!--page 271 -->
13454 <pre>
13455         #include <a href="#7.12">&lt;math.h&gt;</a>
13456         double trunc(double x);
13457         float truncf(float x);
13458         long double truncl(long double x);
13459 </pre>
13460 <p><b>Description</b>
13461 <p><!--para 2 -->
13462  The trunc functions round their argument to the integer value, in floating format,
13463  nearest to but no larger in magnitude than the argument.
13464 <p><b>Returns</b>
13465 <p><!--para 3 -->
13466  The trunc functions return the truncated integer value.
13467
13468 <p><small><a href="#Contents">Contents</a></small>
13469 <h4><a name="7.12.10" href="#7.12.10">7.12.10 Remainder functions</a></h4>
13470
13471 <p><small><a href="#Contents">Contents</a></small>
13472 <h5><a name="7.12.10.1" href="#7.12.10.1">7.12.10.1 The fmod functions</a></h5>
13473 <p><b>Synopsis</b>
13474 <p><!--para 1 -->
13475 <pre>
13476           #include <a href="#7.12">&lt;math.h&gt;</a>
13477           double fmod(double x, double y);
13478           float fmodf(float x, float y);
13479           long double fmodl(long double x, long double y);
13480 </pre>
13481 <p><b>Description</b>
13482 <p><!--para 2 -->
13483  The fmod functions compute the floating-point remainder of x/y.
13484 <p><b>Returns</b>
13485 <p><!--para 3 -->
13486  The fmod functions return the value x - ny, for some integer n such that, if y is nonzero,
13487  the result has the same sign as x and magnitude less than the magnitude of y. If y is zero,
13488  whether a domain error occurs or the fmod functions return zero is implementation-
13489  defined.
13490
13491 <p><small><a href="#Contents">Contents</a></small>
13492 <h5><a name="7.12.10.2" href="#7.12.10.2">7.12.10.2 The remainder functions</a></h5>
13493 <p><b>Synopsis</b>
13494 <p><!--para 1 -->
13495 <pre>
13496           #include <a href="#7.12">&lt;math.h&gt;</a>
13497           double remainder(double x, double y);
13498           float remainderf(float x, float y);
13499           long double remainderl(long double x, long double y);
13500 </pre>
13501 <p><b>Description</b>
13502 <p><!--para 2 -->
13503  The remainder functions compute the remainder x REM y required by IEC 60559.<sup><a href="#note236"><b>236)</b></a></sup>
13504  
13505  
13506  
13507  
13508 <!--page 272 -->
13509 <p><b>Returns</b>
13510 <p><!--para 3 -->
13511  The remainder functions return x REM y. If y is zero, whether a domain error occurs
13512  or the functions return zero is implementation defined.
13513
13514 <p><b>Footnotes</b>
13515 <p><small><a name="note236" href="#note236">236)</a> ''When y != 0, the remainder r = x REM y is defined regardless of the rounding mode by the
13516  mathematical relation r = x - ny, where n is the integer nearest the exact value of x/y; whenever
13517  | n - x/y | = 1/2, then n is even. If r = 0, its sign shall be that of x.'' This definition is applicable for *
13518  all implementations.
13519 </small>
13520
13521 <p><small><a href="#Contents">Contents</a></small>
13522 <h5><a name="7.12.10.3" href="#7.12.10.3">7.12.10.3 The remquo functions</a></h5>
13523 <p><b>Synopsis</b>
13524 <p><!--para 1 -->
13525 <pre>
13526         #include <a href="#7.12">&lt;math.h&gt;</a>
13527         double remquo(double x, double y, int *quo);
13528         float remquof(float x, float y, int *quo);
13529         long double remquol(long double x, long double y,
13530              int *quo);
13531 </pre>
13532 <p><b>Description</b>
13533 <p><!--para 2 -->
13534  The remquo functions compute the same remainder as the remainder functions. In
13535  the object pointed to by quo they store a value whose sign is the sign of x/y and whose
13536  magnitude is congruent modulo 2n to the magnitude of the integral quotient of x/y, where
13537  n is an implementation-defined integer greater than or equal to 3.
13538 <p><b>Returns</b>
13539 <p><!--para 3 -->
13540  The remquo functions return x REM y. If y is zero, the value stored in the object
13541  pointed to by quo is unspecified and whether a domain error occurs or the functions
13542  return zero is implementation defined.
13543
13544 <p><small><a href="#Contents">Contents</a></small>
13545 <h4><a name="7.12.11" href="#7.12.11">7.12.11 Manipulation functions</a></h4>
13546
13547 <p><small><a href="#Contents">Contents</a></small>
13548 <h5><a name="7.12.11.1" href="#7.12.11.1">7.12.11.1 The copysign functions</a></h5>
13549 <p><b>Synopsis</b>
13550 <p><!--para 1 -->
13551 <pre>
13552         #include <a href="#7.12">&lt;math.h&gt;</a>
13553         double copysign(double x, double y);
13554         float copysignf(float x, float y);
13555         long double copysignl(long double x, long double y);
13556 </pre>
13557 <p><b>Description</b>
13558 <p><!--para 2 -->
13559  The copysign functions produce a value with the magnitude of x and the sign of y.
13560  They produce a NaN (with the sign of y) if x is a NaN. On implementations that
13561  represent a signed zero but do not treat negative zero consistently in arithmetic
13562  operations, the copysign functions regard the sign of zero as positive.
13563 <p><b>Returns</b>
13564 <p><!--para 3 -->
13565  The copysign functions return a value with the magnitude of x and the sign of y.
13566 <!--page 273 -->
13567
13568 <p><small><a href="#Contents">Contents</a></small>
13569 <h5><a name="7.12.11.2" href="#7.12.11.2">7.12.11.2 The nan functions</a></h5>
13570 <p><b>Synopsis</b>
13571 <p><!--para 1 -->
13572 <pre>
13573          #include <a href="#7.12">&lt;math.h&gt;</a>
13574          double nan(const char *tagp);
13575          float nanf(const char *tagp);
13576          long double nanl(const char *tagp);
13577 </pre>
13578 <p><b>Description</b>
13579 <p><!--para 2 -->
13580  The call nan("n-char-sequence") is equivalent to strtod("NAN(n-char-
13581  sequence)",     (char**)       NULL); the call nan("") is equivalent to
13582  strtod("NAN()", (char**) NULL). If tagp does not point to an n-char
13583  sequence or an empty string, the call is equivalent to strtod("NAN", (char**)
13584  NULL). Calls to nanf and nanl are equivalent to the corresponding calls to strtof
13585  and strtold.
13586 <p><b>Returns</b>
13587 <p><!--para 3 -->
13588  The nan functions return a quiet NaN, if available, with content indicated through tagp.
13589  If the implementation does not support quiet NaNs, the functions return zero.
13590 <p><b> Forward references</b>: the strtod, strtof, and strtold functions (<a href="#7.22.1.3">7.22.1.3</a>).
13591
13592 <p><small><a href="#Contents">Contents</a></small>
13593 <h5><a name="7.12.11.3" href="#7.12.11.3">7.12.11.3 The nextafter functions</a></h5>
13594 <p><b>Synopsis</b>
13595 <p><!--para 1 -->
13596 <pre>
13597          #include <a href="#7.12">&lt;math.h&gt;</a>
13598          double nextafter(double x, double y);
13599          float nextafterf(float x, float y);
13600          long double nextafterl(long double x, long double y);
13601 </pre>
13602 <p><b>Description</b>
13603 <p><!--para 2 -->
13604  The nextafter functions determine the next representable value, in the type of the
13605  function, after x in the direction of y, where x and y are first converted to the type of the
13606  function.<sup><a href="#note237"><b>237)</b></a></sup> The nextafter functions return y if x equals y. A range error may occur
13607  if the magnitude of x is the largest finite value representable in the type and the result is
13608  infinite or not representable in the type.
13609 <p><b>Returns</b>
13610 <p><!--para 3 -->
13611  The nextafter functions return the next representable value in the specified format
13612  after x in the direction of y.
13613  
13614  
13615 <!--page 274 -->
13616
13617 <p><b>Footnotes</b>
13618 <p><small><a name="note237" href="#note237">237)</a> The argument values are converted to the type of the function, even by a macro implementation of the
13619  function.
13620 </small>
13621
13622 <p><small><a href="#Contents">Contents</a></small>
13623 <h5><a name="7.12.11.4" href="#7.12.11.4">7.12.11.4 The nexttoward functions</a></h5>
13624 <p><b>Synopsis</b>
13625 <p><!--para 1 -->
13626 <pre>
13627          #include <a href="#7.12">&lt;math.h&gt;</a>
13628          double nexttoward(double x, long double y);
13629          float nexttowardf(float x, long double y);
13630          long double nexttowardl(long double x, long double y);
13631 </pre>
13632 <p><b>Description</b>
13633 <p><!--para 2 -->
13634  The nexttoward functions are equivalent to the nextafter functions except that the
13635  second parameter has type long double and the functions return y converted to the
13636  type of the function if x equals y.<sup><a href="#note238"><b>238)</b></a></sup>
13637
13638 <p><b>Footnotes</b>
13639 <p><small><a name="note238" href="#note238">238)</a> The result of the nexttoward functions is determined in the type of the function, without loss of
13640  range or precision in a floating second argument.
13641 </small>
13642
13643 <p><small><a href="#Contents">Contents</a></small>
13644 <h4><a name="7.12.12" href="#7.12.12">7.12.12 Maximum, minimum, and positive difference functions</a></h4>
13645
13646 <p><small><a href="#Contents">Contents</a></small>
13647 <h5><a name="7.12.12.1" href="#7.12.12.1">7.12.12.1 The fdim functions</a></h5>
13648 <p><b>Synopsis</b>
13649 <p><!--para 1 -->
13650 <pre>
13651          #include <a href="#7.12">&lt;math.h&gt;</a>
13652          double fdim(double x, double y);
13653          float fdimf(float x, float y);
13654          long double fdiml(long double x, long double y);
13655 </pre>
13656 <p><b>Description</b>
13657 <p><!--para 2 -->
13658  The fdim functions determine the positive difference between their arguments:
13659 <pre>
13660        {x - y if x &gt; y
13661        {
13662        {+0     if x &lt;= y
13663 </pre>
13664  A range error may occur.
13665 <p><b>Returns</b>
13666 <p><!--para 3 -->
13667  The fdim functions return the positive difference value.
13668
13669 <p><small><a href="#Contents">Contents</a></small>
13670 <h5><a name="7.12.12.2" href="#7.12.12.2">7.12.12.2 The fmax functions</a></h5>
13671 <p><b>Synopsis</b>
13672 <p><!--para 1 -->
13673 <pre>
13674          #include <a href="#7.12">&lt;math.h&gt;</a>
13675          double fmax(double x, double y);
13676          float fmaxf(float x, float y);
13677          long double fmaxl(long double x, long double y);
13678 </pre>
13679  
13680  
13681  
13682 <!--page 275 -->
13683 <p><b>Description</b>
13684 <p><!--para 2 -->
13685  The fmax functions determine the maximum numeric value of their arguments.<sup><a href="#note239"><b>239)</b></a></sup>
13686 <p><b>Returns</b>
13687 <p><!--para 3 -->
13688  The fmax functions return the maximum numeric value of their arguments.
13689
13690 <p><b>Footnotes</b>
13691 <p><small><a name="note239" href="#note239">239)</a> NaN arguments are treated as missing data: if one argument is a NaN and the other numeric, then the
13692  fmax functions choose the numeric value. See <a href="#F.10.9.2">F.10.9.2</a>.
13693 </small>
13694
13695 <p><small><a href="#Contents">Contents</a></small>
13696 <h5><a name="7.12.12.3" href="#7.12.12.3">7.12.12.3 The fmin functions</a></h5>
13697 <p><b>Synopsis</b>
13698 <p><!--para 1 -->
13699 <pre>
13700          #include <a href="#7.12">&lt;math.h&gt;</a>
13701          double fmin(double x, double y);
13702          float fminf(float x, float y);
13703          long double fminl(long double x, long double y);
13704 </pre>
13705 <p><b>Description</b>
13706 <p><!--para 2 -->
13707  The fmin functions determine the minimum numeric value of their arguments.<sup><a href="#note240"><b>240)</b></a></sup>
13708 <p><b>Returns</b>
13709 <p><!--para 3 -->
13710  The fmin functions return the minimum numeric value of their arguments.
13711
13712 <p><b>Footnotes</b>
13713 <p><small><a name="note240" href="#note240">240)</a> The fmin functions are analogous to the fmax functions in their treatment of NaNs.
13714 </small>
13715
13716 <p><small><a href="#Contents">Contents</a></small>
13717 <h4><a name="7.12.13" href="#7.12.13">7.12.13 Floating multiply-add</a></h4>
13718
13719 <p><small><a href="#Contents">Contents</a></small>
13720 <h5><a name="7.12.13.1" href="#7.12.13.1">7.12.13.1 The fma functions</a></h5>
13721 <p><b>Synopsis</b>
13722 <p><!--para 1 -->
13723 <pre>
13724          #include <a href="#7.12">&lt;math.h&gt;</a>
13725          double fma(double x, double y, double z);
13726          float fmaf(float x, float y, float z);
13727          long double fmal(long double x, long double y,
13728               long double z);
13729 </pre>
13730 <p><b>Description</b>
13731 <p><!--para 2 -->
13732  The fma functions compute (x x y) + z, rounded as one ternary operation: they compute
13733  the value (as if) to infinite precision and round once to the result format, according to the
13734  current rounding mode. A range error may occur.
13735 <p><b>Returns</b>
13736 <p><!--para 3 -->
13737  The fma functions return (x x y) + z, rounded as one ternary operation.
13738  
13739  
13740  
13741  
13742 <!--page 276 -->
13743
13744 <p><small><a href="#Contents">Contents</a></small>
13745 <h4><a name="7.12.14" href="#7.12.14">7.12.14 Comparison macros</a></h4>
13746 <p><!--para 1 -->
13747  The relational and equality operators support the usual mathematical relationships
13748  between numeric values. For any ordered pair of numeric values exactly one of the
13749  relationships -- less, greater, and equal -- is true. Relational operators may raise the
13750  ''invalid'' floating-point exception when argument values are NaNs. For a NaN and a
13751  numeric value, or for two NaNs, just the unordered relationship is true.<sup><a href="#note241"><b>241)</b></a></sup> The following
13752  subclauses provide macros that are quiet (non floating-point exception raising) versions
13753  of the relational operators, and other comparison macros that facilitate writing efficient
13754  code that accounts for NaNs without suffering the ''invalid'' floating-point exception. In
13755  the synopses in this subclause, real-floating indicates that the argument shall be an
13756  expression of real floating type<sup><a href="#note242"><b>242)</b></a></sup> (both arguments need not have the same type).<sup><a href="#note243"><b>243)</b></a></sup>
13757
13758 <p><b>Footnotes</b>
13759 <p><small><a name="note241" href="#note241">241)</a> IEC 60559 requires that the built-in relational operators raise the ''invalid'' floating-point exception if
13760  the operands compare unordered, as an error indicator for programs written without consideration of
13761  NaNs; the result in these cases is false.
13762 </small>
13763 <p><small><a name="note242" href="#note242">242)</a> If any argument is of integer type, or any other type that is not a real floating type, the behavior is
13764  undefined.
13765 </small>
13766 <p><small><a name="note243" href="#note243">243)</a> Whether an argument represented in a format wider than its semantic type is converted to the semantic
13767  type is unspecified.
13768 </small>
13769
13770 <p><small><a href="#Contents">Contents</a></small>
13771 <h5><a name="7.12.14.1" href="#7.12.14.1">7.12.14.1 The isgreater macro</a></h5>
13772 <p><b>Synopsis</b>
13773 <p><!--para 1 -->
13774 <pre>
13775           #include <a href="#7.12">&lt;math.h&gt;</a>
13776           int isgreater(real-floating x, real-floating y);
13777 </pre>
13778 <p><b>Description</b>
13779 <p><!--para 2 -->
13780  The isgreater macro determines whether its first argument is greater than its second
13781  argument. The value of isgreater(x, y) is always equal to (x) &gt; (y); however,
13782  unlike (x) &gt; (y), isgreater(x, y) does not raise the ''invalid'' floating-point
13783  exception when x and y are unordered.
13784 <p><b>Returns</b>
13785 <p><!--para 3 -->
13786  The isgreater macro returns the value of (x) &gt; (y).
13787
13788 <p><small><a href="#Contents">Contents</a></small>
13789 <h5><a name="7.12.14.2" href="#7.12.14.2">7.12.14.2 The isgreaterequal macro</a></h5>
13790 <p><b>Synopsis</b>
13791 <p><!--para 1 -->
13792 <pre>
13793           #include <a href="#7.12">&lt;math.h&gt;</a>
13794           int isgreaterequal(real-floating x, real-floating y);
13795 </pre>
13796  
13797  
13798  
13799  
13800 <!--page 277 -->
13801 <p><b>Description</b>
13802 <p><!--para 2 -->
13803  The isgreaterequal macro determines whether its first argument is greater than or
13804  equal to its second argument. The value of isgreaterequal(x, y) is always equal
13805  to (x) &gt;= (y); however, unlike (x) &gt;= (y), isgreaterequal(x, y) does
13806  not raise the ''invalid'' floating-point exception when x and y are unordered.
13807 <p><b>Returns</b>
13808 <p><!--para 3 -->
13809  The isgreaterequal macro returns the value of (x) &gt;= (y).
13810
13811 <p><small><a href="#Contents">Contents</a></small>
13812 <h5><a name="7.12.14.3" href="#7.12.14.3">7.12.14.3 The isless macro</a></h5>
13813 <p><b>Synopsis</b>
13814 <p><!--para 1 -->
13815 <pre>
13816          #include <a href="#7.12">&lt;math.h&gt;</a>
13817          int isless(real-floating x, real-floating y);
13818 </pre>
13819 <p><b>Description</b>
13820 <p><!--para 2 -->
13821  The isless macro determines whether its first argument is less than its second
13822  argument. The value of isless(x, y) is always equal to (x) &lt; (y); however,
13823  unlike (x) &lt; (y), isless(x, y) does not raise the ''invalid'' floating-point
13824  exception when x and y are unordered.
13825 <p><b>Returns</b>
13826 <p><!--para 3 -->
13827  The isless macro returns the value of (x) &lt; (y).
13828
13829 <p><small><a href="#Contents">Contents</a></small>
13830 <h5><a name="7.12.14.4" href="#7.12.14.4">7.12.14.4 The islessequal macro</a></h5>
13831 <p><b>Synopsis</b>
13832 <p><!--para 1 -->
13833 <pre>
13834          #include <a href="#7.12">&lt;math.h&gt;</a>
13835          int islessequal(real-floating x, real-floating y);
13836 </pre>
13837 <p><b>Description</b>
13838 <p><!--para 2 -->
13839  The islessequal macro determines whether its first argument is less than or equal to
13840  its second argument. The value of islessequal(x, y) is always equal to
13841  (x) &lt;= (y); however, unlike (x) &lt;= (y), islessequal(x, y) does not raise
13842  the ''invalid'' floating-point exception when x and y are unordered.
13843 <p><b>Returns</b>
13844 <p><!--para 3 -->
13845  The islessequal macro returns the value of (x) &lt;= (y).
13846 <!--page 278 -->
13847
13848 <p><small><a href="#Contents">Contents</a></small>
13849 <h5><a name="7.12.14.5" href="#7.12.14.5">7.12.14.5 The islessgreater macro</a></h5>
13850 <p><b>Synopsis</b>
13851 <p><!--para 1 -->
13852 <pre>
13853         #include <a href="#7.12">&lt;math.h&gt;</a>
13854         int islessgreater(real-floating x, real-floating y);
13855 </pre>
13856 <p><b>Description</b>
13857 <p><!--para 2 -->
13858  The islessgreater macro determines whether its first argument is less than or
13859  greater than its second argument. The islessgreater(x, y) macro is similar to
13860  (x) &lt; (y) || (x) &gt; (y); however, islessgreater(x, y) does not raise
13861  the ''invalid'' floating-point exception when x and y are unordered (nor does it evaluate x
13862  and y twice).
13863 <p><b>Returns</b>
13864 <p><!--para 3 -->
13865  The islessgreater macro returns the value of (x) &lt; (y) || (x) &gt; (y).
13866
13867 <p><small><a href="#Contents">Contents</a></small>
13868 <h5><a name="7.12.14.6" href="#7.12.14.6">7.12.14.6 The isunordered macro</a></h5>
13869 <p><b>Synopsis</b>
13870 <p><!--para 1 -->
13871 <pre>
13872         #include <a href="#7.12">&lt;math.h&gt;</a>
13873         int isunordered(real-floating x, real-floating y);
13874 </pre>
13875 <p><b>Description</b>
13876 <p><!--para 2 -->
13877  The isunordered macro determines whether its arguments are unordered.
13878 <p><b>Returns</b>
13879 <p><!--para 3 -->
13880  The isunordered macro returns 1 if its arguments are unordered and 0 otherwise.
13881 <!--page 279 -->
13882
13883 <p><small><a href="#Contents">Contents</a></small>
13884 <h3><a name="7.13" href="#7.13">7.13 Nonlocal jumps &lt;setjmp.h&gt;</a></h3>
13885 <p><!--para 1 -->
13886  The header <a href="#7.13">&lt;setjmp.h&gt;</a> defines the macro setjmp, and declares one function and
13887  one type, for bypassing the normal function call and return discipline.<sup><a href="#note244"><b>244)</b></a></sup>
13888 <p><!--para 2 -->
13889  The type declared is
13890 <pre>
13891          jmp_buf
13892 </pre>
13893  which is an array type suitable for holding the information needed to restore a calling
13894  environment. The environment of a call to the setjmp macro consists of information
13895  sufficient for a call to the longjmp function to return execution to the correct block and
13896  invocation of that block, were it called recursively. It does not include the state of the
13897  floating-point status flags, of open files, or of any other component of the abstract
13898  machine.
13899 <p><!--para 3 -->
13900  It is unspecified whether setjmp is a macro or an identifier declared with external
13901  linkage. If a macro definition is suppressed in order to access an actual function, or a
13902  program defines an external identifier with the name setjmp, the behavior is undefined.
13903
13904 <p><b>Footnotes</b>
13905 <p><small><a name="note244" href="#note244">244)</a> These functions are useful for dealing with unusual conditions encountered in a low-level function of
13906  a program.
13907 </small>
13908
13909 <p><small><a href="#Contents">Contents</a></small>
13910 <h4><a name="7.13.1" href="#7.13.1">7.13.1 Save calling environment</a></h4>
13911
13912 <p><small><a href="#Contents">Contents</a></small>
13913 <h5><a name="7.13.1.1" href="#7.13.1.1">7.13.1.1 The setjmp macro</a></h5>
13914 <p><b>Synopsis</b>
13915 <p><!--para 1 -->
13916 <pre>
13917          #include <a href="#7.13">&lt;setjmp.h&gt;</a>
13918          int setjmp(jmp_buf env);
13919 </pre>
13920 <p><b>Description</b>
13921 <p><!--para 2 -->
13922  The setjmp macro saves its calling environment in its jmp_buf argument for later use
13923  by the longjmp function.
13924 <p><b>Returns</b>
13925 <p><!--para 3 -->
13926  If the return is from a direct invocation, the setjmp macro returns the value zero. If the
13927  return is from a call to the longjmp function, the setjmp macro returns a nonzero
13928  value.
13929 <p><b>Environmental limits</b>
13930 <p><!--para 4 -->
13931  An invocation of the setjmp macro shall appear only in one of the following contexts:
13932 <ul>
13933 <li>  the entire controlling expression of a selection or iteration statement;
13934 <li>  one operand of a relational or equality operator with the other operand an integer
13935  constant expression, with the resulting expression being the entire controlling
13936  
13937  
13938 <!--page 280 -->
13939    expression of a selection or iteration statement;
13940 <li>  the operand of a unary ! operator with the resulting expression being the entire
13941  controlling expression of a selection or iteration statement; or
13942 <li>  the entire expression of an expression statement (possibly cast to void).
13943 </ul>
13944 <p><!--para 5 -->
13945  If the invocation appears in any other context, the behavior is undefined.
13946
13947 <p><small><a href="#Contents">Contents</a></small>
13948 <h4><a name="7.13.2" href="#7.13.2">7.13.2 Restore calling environment</a></h4>
13949
13950 <p><small><a href="#Contents">Contents</a></small>
13951 <h5><a name="7.13.2.1" href="#7.13.2.1">7.13.2.1 The longjmp function</a></h5>
13952 <p><b>Synopsis</b>
13953 <p><!--para 1 -->
13954 <pre>
13955           #include <a href="#7.13">&lt;setjmp.h&gt;</a>
13956           _Noreturn void longjmp(jmp_buf env, int val);
13957 </pre>
13958 <p><b>Description</b>
13959 <p><!--para 2 -->
13960  The longjmp function restores the environment saved by the most recent invocation of
13961  the setjmp macro in the same invocation of the program with the corresponding
13962  jmp_buf argument. If there has been no such invocation, or if the function containing
13963  the invocation of the setjmp macro has terminated execution<sup><a href="#note245"><b>245)</b></a></sup> in the interim, or if the
13964  invocation of the setjmp macro was within the scope of an identifier with variably
13965  modified type and execution has left that scope in the interim, the behavior is undefined.
13966 <p><!--para 3 -->
13967  All accessible objects have values, and all other components of the abstract machine<sup><a href="#note246"><b>246)</b></a></sup>
13968  have state, as of the time the longjmp function was called, except that the values of
13969  objects of automatic storage duration that are local to the function containing the
13970  invocation of the corresponding setjmp macro that do not have volatile-qualified type
13971  and have been changed between the setjmp invocation and longjmp call are
13972  indeterminate.
13973 <p><b>Returns</b>
13974 <p><!--para 4 -->
13975  After longjmp is completed, program execution continues as if the corresponding
13976  invocation of the setjmp macro had just returned the value specified by val. The
13977  longjmp function cannot cause the setjmp macro to return the value 0; if val is 0,
13978  the setjmp macro returns the value 1.
13979 <p><!--para 5 -->
13980  EXAMPLE The longjmp function that returns control back to the point of the setjmp invocation
13981  might cause memory associated with a variable length array object to be squandered.
13982  
13983  
13984  
13985  
13986 <!--page 281 -->
13987 <!--page 282 -->
13988 <pre>
13989          #include <a href="#7.13">&lt;setjmp.h&gt;</a>
13990          jmp_buf buf;
13991          void g(int n);
13992          void h(int n);
13993          int n = 6;
13994          void f(void)
13995          {
13996                int x[n];          // valid: f is not terminated
13997                setjmp(buf);
13998                g(n);
13999          }
14000          void g(int n)
14001          {
14002                int a[n];          // a may remain allocated
14003                h(n);
14004          }
14005          void h(int n)
14006          {
14007                int b[n];          // b may remain allocated
14008                longjmp(buf, 2);   // might cause memory loss
14009          }
14010 </pre>
14011
14012 <p><b>Footnotes</b>
14013 <p><small><a name="note245" href="#note245">245)</a> For example, by executing a return statement or because another longjmp call has caused a
14014  transfer to a setjmp invocation in a function earlier in the set of nested calls.
14015 </small>
14016 <p><small><a name="note246" href="#note246">246)</a> This includes, but is not limited to, the floating-point status flags and the state of open files.
14017 </small>
14018
14019 <p><small><a href="#Contents">Contents</a></small>
14020 <h3><a name="7.14" href="#7.14">7.14 Signal handling &lt;signal.h&gt;</a></h3>
14021 <p><!--para 1 -->
14022  The header <a href="#7.14">&lt;signal.h&gt;</a> declares a type and two functions and defines several macros,
14023  for handling various signals (conditions that may be reported during program execution).
14024 <p><!--para 2 -->
14025  The type defined is
14026 <pre>
14027           sig_atomic_t
14028 </pre>
14029  which is the (possibly volatile-qualified) integer type of an object that can be accessed as
14030  an atomic entity, even in the presence of asynchronous interrupts.
14031 <p><!--para 3 -->
14032  The macros defined are
14033 <pre>
14034           SIG_DFL
14035           SIG_ERR
14036           SIG_IGN
14037 </pre>
14038  which expand to constant expressions with distinct values that have type compatible with
14039  the second argument to, and the return value of, the signal function, and whose values
14040  compare unequal to the address of any declarable function; and the following, which
14041  expand to positive integer constant expressions with type int and distinct values that are
14042  the signal numbers, each corresponding to the specified condition:
14043 <pre>
14044           SIGABRT abnormal termination, such as is initiated by the abort function
14045           SIGFPE        an erroneous arithmetic operation, such as zero divide or an operation
14046                         resulting in overflow
14047           SIGILL        detection of an invalid function image, such as an invalid instruction
14048           SIGINT        receipt of an interactive attention signal
14049           SIGSEGV an invalid access to storage
14050           SIGTERM a termination request sent to the program
14051 </pre>
14052 <p><!--para 4 -->
14053  An implementation need not generate any of these signals, except as a result of explicit
14054  calls to the raise function. Additional signals and pointers to undeclarable functions,
14055  with macro definitions beginning, respectively, with the letters SIG and an uppercase
14056  letter or with SIG_ and an uppercase letter,<sup><a href="#note247"><b>247)</b></a></sup> may also be specified by the
14057  implementation. The complete set of signals, their semantics, and their default handling
14058  is implementation-defined; all signal numbers shall be positive.
14059  
14060  
14061  
14062  
14063 <!--page 283 -->
14064
14065 <p><b>Footnotes</b>
14066 <p><small><a name="note247" href="#note247">247)</a> See ''future library directions'' (<a href="#7.30.6">7.30.6</a>). The names of the signal numbers reflect the following terms
14067  (respectively): abort, floating-point exception, illegal instruction, interrupt, segmentation violation,
14068  and termination.
14069 </small>
14070
14071 <p><small><a href="#Contents">Contents</a></small>
14072 <h4><a name="7.14.1" href="#7.14.1">7.14.1 Specify signal handling</a></h4>
14073
14074 <p><small><a href="#Contents">Contents</a></small>
14075 <h5><a name="7.14.1.1" href="#7.14.1.1">7.14.1.1 The signal function</a></h5>
14076 <p><b>Synopsis</b>
14077 <p><!--para 1 -->
14078 <pre>
14079          #include <a href="#7.14">&lt;signal.h&gt;</a>
14080          void (*signal(int sig, void (*func)(int)))(int);
14081 </pre>
14082 <p><b>Description</b>
14083 <p><!--para 2 -->
14084  The signal function chooses one of three ways in which receipt of the signal number
14085  sig is to be subsequently handled. If the value of func is SIG_DFL, default handling
14086  for that signal will occur. If the value of func is SIG_IGN, the signal will be ignored.
14087  Otherwise, func shall point to a function to be called when that signal occurs. An
14088  invocation of such a function because of a signal, or (recursively) of any further functions
14089  called by that invocation (other than functions in the standard library),<sup><a href="#note248"><b>248)</b></a></sup> is called a
14090  signal handler.
14091 <p><!--para 3 -->
14092  When a signal occurs and func points to a function, it is implementation-defined
14093  whether the equivalent of signal(sig, SIG_DFL); is executed or the
14094  implementation prevents some implementation-defined set of signals (at least including
14095  sig) from occurring until the current signal handling has completed; in the case of
14096  SIGILL, the implementation may alternatively define that no action is taken. Then the
14097  equivalent of (*func)(sig); is executed. If and when the function returns, if the
14098  value of sig is SIGFPE, SIGILL, SIGSEGV, or any other implementation-defined
14099  value corresponding to a computational exception, the behavior is undefined; otherwise
14100  the program will resume execution at the point it was interrupted.
14101 <p><!--para 4 -->
14102  If the signal occurs as the result of calling the abort or raise function, the signal
14103  handler shall not call the raise function.
14104 <p><!--para 5 -->
14105  If the signal occurs other than as the result of calling the abort or raise function, the
14106  behavior is undefined if the signal handler refers to any object with static or thread
14107  storage duration that is not a lock-free atomic object other than by assigning a value to an
14108  object declared as volatile sig_atomic_t, or the signal handler calls any function
14109  in the standard library other than the abort function, the _Exit function, the
14110  quick_exit function, or the signal function with the first argument equal to the
14111  signal number corresponding to the signal that caused the invocation of the handler.
14112  Furthermore, if such a call to the signal function results in a SIG_ERR return, the
14113  value of errno is indeterminate.<sup><a href="#note249"><b>249)</b></a></sup>
14114  
14115  
14116 <!--page 284 -->
14117 <p><!--para 6 -->
14118  At program startup, the equivalent of
14119 <pre>
14120         signal(sig, SIG_IGN);
14121 </pre>
14122  may be executed for some signals selected in an implementation-defined manner; the
14123  equivalent of
14124 <pre>
14125         signal(sig, SIG_DFL);
14126 </pre>
14127  is executed for all other signals defined by the implementation.
14128 <p><!--para 7 -->
14129  The implementation shall behave as if no library function calls the signal function.
14130 <p><b>Returns</b>
14131 <p><!--para 8 -->
14132  If the request can be honored, the signal function returns the value of func for the
14133  most recent successful call to signal for the specified signal sig. Otherwise, a value of
14134  SIG_ERR is returned and a positive value is stored in errno.
14135 <p><b> Forward references</b>: the abort function (<a href="#7.22.4.1">7.22.4.1</a>), the exit function (<a href="#7.22.4.4">7.22.4.4</a>), the
14136  _Exit function (<a href="#7.22.4.5">7.22.4.5</a>), the quick_exit function (<a href="#7.22.4.7">7.22.4.7</a>).
14137
14138 <p><b>Footnotes</b>
14139 <p><small><a name="note248" href="#note248">248)</a> This includes functions called indirectly via standard library functions (e.g., a SIGABRT handler
14140  called via the abort function).
14141 </small>
14142 <p><small><a name="note249" href="#note249">249)</a> If any signal is generated by an asynchronous signal handler, the behavior is undefined.
14143 </small>
14144
14145 <p><small><a href="#Contents">Contents</a></small>
14146 <h4><a name="7.14.2" href="#7.14.2">7.14.2 Send signal</a></h4>
14147
14148 <p><small><a href="#Contents">Contents</a></small>
14149 <h5><a name="7.14.2.1" href="#7.14.2.1">7.14.2.1 The raise function</a></h5>
14150 <p><b>Synopsis</b>
14151 <p><!--para 1 -->
14152 <pre>
14153         #include <a href="#7.14">&lt;signal.h&gt;</a>
14154         int raise(int sig);
14155 </pre>
14156 <p><b>Description</b>
14157 <p><!--para 2 -->
14158  The raise function carries out the actions described in <a href="#7.14.1.1">7.14.1.1</a> for the signal sig. If a
14159  signal handler is called, the raise function shall not return until after the signal handler
14160  does.
14161 <p><b>Returns</b>
14162 <p><!--para 3 -->
14163  The raise function returns zero if successful, nonzero if unsuccessful.
14164 <!--page 285 -->
14165
14166 <p><small><a href="#Contents">Contents</a></small>
14167 <h3><a name="7.15" href="#7.15">7.15 Alignment &lt;stdalign.h&gt;</a></h3>
14168 <p><!--para 1 -->
14169  The header <a href="#7.15">&lt;stdalign.h&gt;</a> defines two macros.
14170 <p><!--para 2 -->
14171  The macro
14172 <pre>
14173          alignas
14174 </pre>
14175  expands to _Alignas.
14176 <p><!--para 3 -->
14177  The remaining macro is suitable for use in #if preprocessing directives. It is
14178 <pre>
14179          __alignas_is_defined
14180 </pre>
14181  which expands to the integer constant 1.
14182 <!--page 286 -->
14183
14184 <p><small><a href="#Contents">Contents</a></small>
14185 <h3><a name="7.16" href="#7.16">7.16 Variable arguments &lt;stdarg.h&gt;</a></h3>
14186 <p><!--para 1 -->
14187  The header <a href="#7.16">&lt;stdarg.h&gt;</a> declares a type and defines four macros, for advancing
14188  through a list of arguments whose number and types are not known to the called function
14189  when it is translated.
14190 <p><!--para 2 -->
14191  A function may be called with a variable number of arguments of varying types. As
14192  described in <a href="#6.9.1">6.9.1</a>, its parameter list contains one or more parameters. The rightmost
14193  parameter plays a special role in the access mechanism, and will be designated parmN in
14194  this description.
14195 <p><!--para 3 -->
14196  The type declared is
14197 <pre>
14198          va_list
14199 </pre>
14200  which is a complete object type suitable for holding information needed by the macros
14201  va_start, va_arg, va_end, and va_copy. If access to the varying arguments is
14202  desired, the called function shall declare an object (generally referred to as ap in this
14203  subclause) having type va_list. The object ap may be passed as an argument to
14204  another function; if that function invokes the va_arg macro with parameter ap, the
14205  value of ap in the calling function is indeterminate and shall be passed to the va_end
14206  macro prior to any further reference to ap.<sup><a href="#note250"><b>250)</b></a></sup>
14207
14208 <p><b>Footnotes</b>
14209 <p><small><a name="note250" href="#note250">250)</a> It is permitted to create a pointer to a va_list and pass that pointer to another function, in which
14210  case the original function may make further use of the original list after the other function returns.
14211 </small>
14212
14213 <p><small><a href="#Contents">Contents</a></small>
14214 <h4><a name="7.16.1" href="#7.16.1">7.16.1 Variable argument list access macros</a></h4>
14215 <p><!--para 1 -->
14216  The va_start and va_arg macros described in this subclause shall be implemented
14217  as macros, not functions. It is unspecified whether va_copy and va_end are macros or
14218  identifiers declared with external linkage. If a macro definition is suppressed in order to
14219  access an actual function, or a program defines an external identifier with the same name,
14220  the behavior is undefined. Each invocation of the va_start and va_copy macros
14221  shall be matched by a corresponding invocation of the va_end macro in the same
14222  function.
14223
14224 <p><small><a href="#Contents">Contents</a></small>
14225 <h5><a name="7.16.1.1" href="#7.16.1.1">7.16.1.1 The va_arg macro</a></h5>
14226 <p><b>Synopsis</b>
14227 <p><!--para 1 -->
14228 <pre>
14229          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
14230          type va_arg(va_list ap, type);
14231 </pre>
14232 <p><b>Description</b>
14233 <p><!--para 2 -->
14234  The va_arg macro expands to an expression that has the specified type and the value of
14235  the next argument in the call. The parameter ap shall have been initialized by the
14236  va_start or va_copy macro (without an intervening invocation of the va_end
14237  
14238 <!--page 287 -->
14239  macro for the same ap). Each invocation of the va_arg macro modifies ap so that the
14240  values of successive arguments are returned in turn. The parameter type shall be a type
14241  name specified such that the type of a pointer to an object that has the specified type can
14242  be obtained simply by postfixing a * to type. If there is no actual next argument, or if
14243  type is not compatible with the type of the actual next argument (as promoted according
14244  to the default argument promotions), the behavior is undefined, except for the following
14245  cases:
14246 <ul>
14247 <li>  one type is a signed integer type, the other type is the corresponding unsigned integer
14248  type, and the value is representable in both types;
14249 <li>  one type is pointer to void and the other is a pointer to a character type.
14250 </ul>
14251 <p><b>Returns</b>
14252 <p><!--para 3 -->
14253  The first invocation of the va_arg macro after that of the va_start macro returns the
14254  value of the argument after that specified by parmN . Successive invocations return the
14255  values of the remaining arguments in succession.
14256
14257 <p><small><a href="#Contents">Contents</a></small>
14258 <h5><a name="7.16.1.2" href="#7.16.1.2">7.16.1.2 The va_copy macro</a></h5>
14259 <p><b>Synopsis</b>
14260 <p><!--para 1 -->
14261 <pre>
14262          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
14263          void va_copy(va_list dest, va_list src);
14264 </pre>
14265 <p><b>Description</b>
14266 <p><!--para 2 -->
14267  The va_copy macro initializes dest as a copy of src, as if the va_start macro had
14268  been applied to dest followed by the same sequence of uses of the va_arg macro as
14269  had previously been used to reach the present state of src. Neither the va_copy nor
14270  va_start macro shall be invoked to reinitialize dest without an intervening
14271  invocation of the va_end macro for the same dest.
14272 <p><b>Returns</b>
14273 <p><!--para 3 -->
14274  The va_copy macro returns no value.
14275
14276 <p><small><a href="#Contents">Contents</a></small>
14277 <h5><a name="7.16.1.3" href="#7.16.1.3">7.16.1.3 The va_end macro</a></h5>
14278 <p><b>Synopsis</b>
14279 <p><!--para 1 -->
14280 <pre>
14281          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
14282          void va_end(va_list ap);
14283 </pre>
14284 <p><b>Description</b>
14285 <p><!--para 2 -->
14286  The va_end macro facilitates a normal return from the function whose variable
14287  argument list was referred to by the expansion of the va_start macro, or the function
14288  containing the expansion of the va_copy macro, that initialized the va_list ap. The
14289  va_end macro may modify ap so that it is no longer usable (without being reinitialized
14290 <!--page 288 -->
14291  by the va_start or va_copy macro). If there is no corresponding invocation of the
14292  va_start or va_copy macro, or if the va_end macro is not invoked before the
14293  return, the behavior is undefined.
14294 <p><b>Returns</b>
14295 <p><!--para 3 -->
14296  The va_end macro returns no value.
14297
14298 <p><small><a href="#Contents">Contents</a></small>
14299 <h5><a name="7.16.1.4" href="#7.16.1.4">7.16.1.4 The va_start macro</a></h5>
14300 <p><b>Synopsis</b>
14301 <p><!--para 1 -->
14302 <pre>
14303          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
14304          void va_start(va_list ap, parmN);
14305 </pre>
14306 <p><b>Description</b>
14307 <p><!--para 2 -->
14308  The va_start macro shall be invoked before any access to the unnamed arguments.
14309 <p><!--para 3 -->
14310  The va_start macro initializes ap for subsequent use by the va_arg and va_end
14311  macros. Neither the va_start nor va_copy macro shall be invoked to reinitialize ap
14312  without an intervening invocation of the va_end macro for the same ap.
14313 <p><!--para 4 -->
14314  The parameter parmN is the identifier of the rightmost parameter in the variable
14315  parameter list in the function definition (the one just before the , ...). If the parameter
14316  parmN is declared with the register storage class, with a function or array type, or
14317  with a type that is not compatible with the type that results after application of the default
14318  argument promotions, the behavior is undefined.
14319 <p><b>Returns</b>
14320 <p><!--para 5 -->
14321  The va_start macro returns no value.
14322 <p><!--para 6 -->
14323  EXAMPLE 1 The function f1 gathers into an array a list of arguments that are pointers to strings (but not
14324  more than MAXARGS arguments), then passes the array as a single argument to function f2. The number of
14325  pointers is specified by the first argument to f1.
14326 <!--page 289 -->
14327 <pre>
14328          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
14329          #define MAXARGS   31
14330          void f1(int n_ptrs, ...)
14331          {
14332                va_list ap;
14333                char *array[MAXARGS];
14334                int ptr_no = 0;
14335                    if (n_ptrs &gt; MAXARGS)
14336                          n_ptrs = MAXARGS;
14337                    va_start(ap, n_ptrs);
14338                    while (ptr_no &lt; n_ptrs)
14339                          array[ptr_no++] = va_arg(ap, char *);
14340                    va_end(ap);
14341                    f2(n_ptrs, array);
14342           }
14343 </pre>
14344  Each call to f1 is required to have visible the definition of the function or a declaration such as
14345 <pre>
14346           void f1(int, ...);
14347 </pre>
14348  
14349 <p><!--para 7 -->
14350  EXAMPLE 2 The function f3 is similar, but saves the status of the variable argument list after the
14351  indicated number of arguments; after f2 has been called once with the whole list, the trailing part of the list
14352  is gathered again and passed to function f4.
14353 <!--page 290 -->
14354 <pre>
14355           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
14356           #define MAXARGS 31
14357           void f3(int n_ptrs, int f4_after, ...)
14358           {
14359                 va_list ap, ap_save;
14360                 char *array[MAXARGS];
14361                 int ptr_no = 0;
14362                 if (n_ptrs &gt; MAXARGS)
14363                       n_ptrs = MAXARGS;
14364                 va_start(ap, f4_after);
14365                 while (ptr_no &lt; n_ptrs) {
14366                       array[ptr_no++] = va_arg(ap, char *);
14367                       if (ptr_no == f4_after)
14368                             va_copy(ap_save, ap);
14369                 }
14370                 va_end(ap);
14371                 f2(n_ptrs, array);
14372                    // Now process the saved copy.
14373                    n_ptrs -= f4_after;
14374                    ptr_no = 0;
14375                    while (ptr_no &lt; n_ptrs)
14376                          array[ptr_no++] = va_arg(ap_save, char *);
14377                    va_end(ap_save);
14378                    f4(n_ptrs, array);
14379           }
14380 </pre>
14381
14382 <p><small><a href="#Contents">Contents</a></small>
14383 <h3><a name="7.17" href="#7.17">7.17 Atomics &lt;stdatomic.h&gt;</a></h3>
14384
14385 <p><small><a href="#Contents">Contents</a></small>
14386 <h4><a name="7.17.1" href="#7.17.1">7.17.1 Introduction</a></h4>
14387 <p><!--para 1 -->
14388  The header <a href="#7.17">&lt;stdatomic.h&gt;</a> defines several macros and declares several types and
14389  functions for performing atomic operations on data shared between threads.
14390 <p><!--para 2 -->
14391  Implementations that define the macro __STDC_NO_THREADS__ need not provide
14392  this header nor support any of its facilities.
14393 <p><!--para 3 -->
14394  The macros defined are the atomic lock-free macros
14395 <pre>
14396         ATOMIC_CHAR_LOCK_FREE
14397         ATOMIC_CHAR16_T_LOCK_FREE
14398         ATOMIC_CHAR32_T_LOCK_FREE
14399         ATOMIC_WCHAR_T_LOCK_FREE
14400         ATOMIC_SHORT_LOCK_FREE
14401         ATOMIC_INT_LOCK_FREE
14402         ATOMIC_LONG_LOCK_FREE
14403         ATOMIC_LLONG_LOCK_FREE
14404         ATOMIC_ADDRESS_LOCK_FREE
14405 </pre>
14406  which indicate the lock-free property of the corresponding atomic types (both signed and
14407  unsigned); and
14408 <pre>
14409         ATOMIC_FLAG_INIT
14410 </pre>
14411  which expands to an initializer for an object of type atomic_flag.
14412 <p><!--para 4 -->
14413  The types include
14414 <pre>
14415         memory_order
14416 </pre>
14417  which is an enumerated type whose enumerators identify memory ordering constraints;
14418 <pre>
14419         atomic_flag
14420 </pre>
14421  which is a structure type representing a lock-free, primitive atomic flag;
14422 <pre>
14423         atomic_bool
14424 </pre>
14425  which is a structure type representing the atomic analog of the type _Bool;
14426 <pre>
14427         atomic_address
14428 </pre>
14429  which is a structure type representing the atomic analog of a pointer type; and several
14430  atomic analogs of integer types.
14431 <p><!--para 5 -->
14432  In the following operation definitions:
14433 <ul>
14434 <li>  An A refers to one of the atomic types.
14435 <!--page 291 -->
14436 <li>  A C refers to its corresponding non-atomic type. The atomic_address atomic
14437  type corresponds to the void * non-atomic type.
14438 <li>  An M refers to the type of the other argument for arithmetic operations. For atomic
14439  integer types, M is C. For atomic address types, M is ptrdiff_t.
14440 <li>  The functions not ending in _explicit have the same semantics as the
14441  corresponding _explicit function with memory_order_seq_cst for the
14442  memory_order argument.
14443 </ul>
14444 <p><!--para 6 -->
14445  NOTE Many operations are volatile-qualified. The ''volatile as device register'' semantics have not
14446  changed in the standard. This qualification means that volatility is preserved when applying these
14447  operations to volatile objects.
14448  
14449
14450 <p><small><a href="#Contents">Contents</a></small>
14451 <h4><a name="7.17.2" href="#7.17.2">7.17.2 Initialization</a></h4>
14452
14453 <p><small><a href="#Contents">Contents</a></small>
14454 <h5><a name="7.17.2.1" href="#7.17.2.1">7.17.2.1 The ATOMIC_VAR_INIT macro</a></h5>
14455 <p><b>Synopsis</b>
14456 <p><!--para 1 -->
14457 <pre>
14458          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14459          #define ATOMIC_VAR_INIT(C value)
14460 </pre>
14461 <p><b>Description</b>
14462 <p><!--para 2 -->
14463  The ATOMIC_VAR_INIT macro expands to a token sequence suitable for initializing an
14464  atomic object of a type that is initialization-compatible with value. An atomic object
14465  with automatic storage duration that is not explicitly initialized using
14466  ATOMIC_VAR_INIT is initially in an indeterminate state; however, the default (zero)
14467  initialization for objects with static or thread-local storage duration is guaranteed to
14468  produce a valid state.
14469 <p><!--para 3 -->
14470  Concurrent access to the variable being initialized, even via an atomic operation,
14471  constitutes a data race.
14472 <p><!--para 4 -->
14473  EXAMPLE
14474 <pre>
14475          atomic_int guide = ATOMIC_VAR_INIT(42);
14476 </pre>
14477  
14478
14479 <p><small><a href="#Contents">Contents</a></small>
14480 <h5><a name="7.17.2.2" href="#7.17.2.2">7.17.2.2 The atomic_init generic function</a></h5>
14481 <p><b>Synopsis</b>
14482 <p><!--para 1 -->
14483 <pre>
14484          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14485          void atomic_init(volatile A *obj, C value);
14486 </pre>
14487 <p><b>Description</b>
14488 <p><!--para 2 -->
14489  The atomic_init generic function initializes the atomic object pointed to by obj to
14490  the value value, while also initializing any additional state that the implementation
14491  might need to carry for the atomic object.
14492 <!--page 292 -->
14493 <p><!--para 3 -->
14494  Although this function initializes an atomic object, it does not avoid data races;
14495  concurrent access to the variable being initialized, even via an atomic operation,
14496  constitutes a data race.
14497 <p><b>Returns</b>
14498 <p><!--para 4 -->
14499  The atomic_init generic function returns no value.
14500 <p><!--para 5 -->
14501  EXAMPLE
14502 <pre>
14503          atomic_int guide;
14504          atomic_init(&amp;guide, 42);
14505 </pre>
14506  
14507
14508 <p><small><a href="#Contents">Contents</a></small>
14509 <h4><a name="7.17.3" href="#7.17.3">7.17.3 Order and consistency</a></h4>
14510 <p><!--para 1 -->
14511  The enumerated type memory_order specifies the detailed regular (non-atomic)
14512  memory synchronization operations as defined in <a href="#5.1.2.4">5.1.2.4</a> and may provide for operation
14513  ordering. Its enumeration constants are as follows:
14514 <pre>
14515          memory_order_relaxed
14516          memory_order_consume
14517          memory_order_acquire
14518          memory_order_release
14519          memory_order_acq_rel
14520          memory_order_seq_cst
14521 </pre>
14522 <p><!--para 2 -->
14523  For memory_order_relaxed, no operation orders memory.
14524 <p><!--para 3 -->
14525  For       memory_order_release,       memory_order_acq_rel,             and
14526  memory_order_seq_cst, a store operation performs a release operation on the
14527  affected memory location.
14528 <p><!--para 4 -->
14529  For       memory_order_acquire,       memory_order_acq_rel,             and
14530  memory_order_seq_cst, a load operation performs an acquire operation on the
14531  affected memory location.
14532 <p><!--para 5 -->
14533  For memory_order_consume, a load operation performs a consume operation on the
14534  affected memory location.
14535 <p><!--para 6 -->
14536  For memory_order_seq_cst, there shall be a single total order S on all operations,
14537  consistent with the ''happens before'' order and modification orders for all affected
14538  locations, such that each memory_order_seq_cst operation that loads a value
14539  observes either the last preceding modification according to this order S, or the result of
14540  an operation that is not memory_order_seq_cst.
14541 <p><!--para 7 -->
14542  NOTE 1 Although it is not explicitly required that S include lock operations, it can always be extended to
14543  an order that does include lock and unlock operations, since the ordering between those is already included
14544  in the ''happens before'' ordering.
14545  
14546 <p><!--para 8 -->
14547  NOTE 2 Atomic operations specifying memory_order_relaxed are relaxed only with respect to
14548  memory ordering. Implementations must still guarantee that any given atomic access to a particular atomic
14549 <!--page 293 -->
14550  object be indivisible with respect to all other atomic accesses to that object.
14551  
14552 <p><!--para 9 -->
14553  For an atomic operation B that reads the value of an atomic object M, if there is a
14554  memory_order_seq_cst fence X sequenced before B, then B observes either the
14555  last memory_order_seq_cst modification of M preceding X in the total order S or
14556  a later modification of M in its modification order.
14557 <p><!--para 10 -->
14558  For atomic operations A and B on an atomic object M, where A modifies M and B takes
14559  its value, if there is a memory_order_seq_cst fence X such that A is sequenced
14560  before X and B follows X in S, then B observes either the effects of A or a later
14561  modification of M in its modification order.
14562 <p><!--para 11 -->
14563  For atomic operations A and B on an atomic object M, where A modifies M and B takes
14564  its value, if there are memory_order_seq_cst fences X and Y such that A is
14565  sequenced before X, Y is sequenced before B, and X precedes Y in S, then B observes
14566  either the effects of A or a later modification of M in its modification order.
14567 <p><!--para 12 -->
14568  Atomic read-modify-write operations shall always read the last value (in the modification
14569  order) stored before the write associated with the read-modify-write operation.
14570 <p><!--para 13 -->
14571  An atomic store shall only store a value that has been computed from constants and
14572  program input values by a finite sequence of program evaluations, such that each
14573  evaluation observes the values of variables as computed by the last prior assignment in
14574  the sequence.<sup><a href="#note251"><b>251)</b></a></sup> The ordering of evaluations in this sequence shall be such that
14575 <ul>
14576 <li>  If an evaluation B observes a value computed by A in a different thread, then B does
14577  not happen before A.
14578 <li>  If an evaluation A is included in the sequence, then all evaluations that assign to the
14579  same variable and happen before A are also included.
14580 </ul>
14581 <p><!--para 14 -->
14582  NOTE 3 The second requirement disallows ''out-of-thin-air'', or ''speculative'' stores of atomics when
14583  relaxed atomics are used. Since unordered operations are involved, evaluations may appear in this
14584  sequence out of thread order. For example, with x and y initially zero,
14585 <pre>
14586           // Thread 1:
14587           r1 = atomic_load_explicit(&amp;y, memory_order_relaxed);
14588           atomic_store_explicit(&amp;x, r1, memory_order_relaxed);
14589 </pre>
14590  
14591 <pre>
14592           // Thread 2:
14593           r2 = atomic_load_explicit(&amp;x, memory_order_relaxed);
14594           atomic_store_explicit(&amp;y, 42, memory_order_relaxed);
14595 </pre>
14596  is allowed to produce r1 == 42 &amp;&amp; r2 == 42. The sequence of evaluations justifying this consists of:
14597  
14598  
14599  
14600  
14601 <!--page 294 -->
14602 <pre>
14603          atomic_store_explicit(&amp;y, 42,               memory_order_relaxed);
14604          r1 = atomic_load_explicit(&amp;y,               memory_order_relaxed);
14605          atomic_store_explicit(&amp;x, r1,               memory_order_relaxed);
14606          r2 = atomic_load_explicit(&amp;x,               memory_order_relaxed);
14607 </pre>
14608  On the other hand,
14609 <pre>
14610          // Thread 1:
14611          r1 = atomic_load_explicit(&amp;y, memory_order_relaxed);
14612          atomic_store_explicit(&amp;x, r1, memory_order_relaxed);
14613 </pre>
14614  
14615 <pre>
14616          // Thread 2:
14617          r2 = atomic_load_explicit(&amp;x, memory_order_relaxed);
14618          atomic_store_explicit(&amp;y, r2, memory_order_relaxed);
14619 </pre>
14620  is not allowed to produce r1 == 42 &amp;&amp; r2 = 42, since there is no sequence of evaluations that results
14621  in the computation of 42. In the absence of ''relaxed'' operations and read-modify-write operations with
14622  weaker than memory_order_acq_rel ordering, the second requirement has no impact.
14623  
14624 <p><b>Recommended practice</b>
14625 <p><!--para 15 -->
14626  The requirements do not forbid r1 == 42 &amp;&amp; r2 == 42 in the following example,
14627  with x and y initially zero:
14628 <pre>
14629          // Thread 1:
14630          r1 = atomic_load_explicit(&amp;x, memory_order_relaxed);
14631          if (r1 == 42)
14632               atomic_store_explicit(&amp;y, r1, memory_order_relaxed);
14633 </pre>
14634  
14635 <pre>
14636          // Thread 2:
14637          r2 = atomic_load_explicit(&amp;y, memory_order_relaxed);
14638          if (r2 == 42)
14639               atomic_store_explicit(&amp;x, 42, memory_order_relaxed);
14640 </pre>
14641  However, this is not useful behavior, and implementations should not allow it.
14642 <p><!--para 16 -->
14643  Implementations should make atomic stores visible to atomic loads within a reasonable
14644  amount of time.
14645
14646 <p><b>Footnotes</b>
14647 <p><small><a name="note251" href="#note251">251)</a> Among other implications, atomic variables shall not decay.
14648 </small>
14649
14650 <p><small><a href="#Contents">Contents</a></small>
14651 <h5><a name="7.17.3.1" href="#7.17.3.1">7.17.3.1 The kill_dependency macro</a></h5>
14652 <p><b>Synopsis</b>
14653 <p><!--para 1 -->
14654 <pre>
14655          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14656          type kill_dependency(type y);
14657 </pre>
14658 <p><b>Description</b>
14659 <p><!--para 2 -->
14660  The kill_dependency macro terminates a dependency chain; the argument does not
14661  carry a dependency to the return value.
14662 <!--page 295 -->
14663 <p><b>Returns</b>
14664 <p><!--para 3 -->
14665  The kill_dependency macro returns the value of y.
14666
14667 <p><small><a href="#Contents">Contents</a></small>
14668 <h4><a name="7.17.4" href="#7.17.4">7.17.4 Fences</a></h4>
14669 <p><!--para 1 -->
14670  This subclause introduces synchronization primitives called fences. Fences can have
14671  acquire semantics, release semantics, or both. A fence with acquire semantics is called
14672  an acquire fence; a fence with release semantics is called a release fence.
14673 <p><!--para 2 -->
14674  A release fence A synchronizes with an acquire fence B if there exist atomic operations
14675  X and Y , both operating on some atomic object M, such that A is sequenced before X, X
14676  modifies M, Y is sequenced before B, and Y reads the value written by X or a value
14677  written by any side effect in the hypothetical release sequence X would head if it were a
14678  release operation.
14679 <p><!--para 3 -->
14680  A release fence A synchronizes with an atomic operation B that performs an acquire
14681  operation on an atomic object M if there exists an atomic operation X such that A is
14682  sequenced before X, X modifies M, and B reads the value written by X or a value written
14683  by any side effect in the hypothetical release sequence X would head if it were a release
14684  operation.
14685 <p><!--para 4 -->
14686  An atomic operation A that is a release operation on an atomic object M synchronizes
14687  with an acquire fence B if there exists some atomic operation X on M such that X is
14688  sequenced before B and reads the value written by A or a value written by any side effect
14689  in the release sequence headed by A.
14690
14691 <p><small><a href="#Contents">Contents</a></small>
14692 <h5><a name="7.17.4.1" href="#7.17.4.1">7.17.4.1 The atomic_thread_fence function</a></h5>
14693 <p><b>Synopsis</b>
14694 <p><!--para 1 -->
14695 <pre>
14696          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14697          void atomic_thread_fence(memory_order order);
14698 </pre>
14699 <p><b>Description</b>
14700 <p><!--para 2 -->
14701  Depending on the value of order, this operation:
14702 <ul>
14703 <li>  has no effects, if order == memory_order_relaxed;
14704 <li>  is an acquire fence, if order == memory_order_acquire or order ==
14705  memory_order_consume;
14706 <li>  is a release fence, if order == memory_order_release;
14707 <li>  is both an acquire fence              and   a    release   fence,    if   order     ==
14708  memory_order_acq_rel;
14709 <li>  is a sequentially consistent acquire and release fence, if order                    ==
14710  memory_order_seq_cst.
14711 <!--page 296 -->
14712 </ul>
14713 <p><b>Returns</b>
14714 <p><!--para 3 -->
14715  The atomic_thread_fence function returns no value.
14716
14717 <p><small><a href="#Contents">Contents</a></small>
14718 <h5><a name="7.17.4.2" href="#7.17.4.2">7.17.4.2 The atomic_signal_fence function</a></h5>
14719 <p><b>Synopsis</b>
14720 <p><!--para 1 -->
14721 <pre>
14722          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14723          void atomic_signal_fence(memory_order order);
14724 </pre>
14725 <p><b>Description</b>
14726 <p><!--para 2 -->
14727  Equivalent to atomic_thread_fence(order), except that ''synchronizes with''
14728  relationships are established only between a thread and a signal handler executed in the
14729  same thread.
14730 <p><!--para 3 -->
14731  NOTE 1 The atomic_signal_fence function can be used to specify the order in which actions
14732  performed by the thread become visible to the signal handler.
14733  
14734 <p><!--para 4 -->
14735  NOTE 2 Compiler optimizations and reorderings of loads and stores are inhibited in the same way as with
14736  atomic_thread_fence, but the hardware fence instructions that atomic_thread_fence would
14737  have inserted are not emitted.
14738  
14739 <p><b>Returns</b>
14740 <p><!--para 5 -->
14741  The atomic_signal_fence function returns no value.
14742
14743 <p><small><a href="#Contents">Contents</a></small>
14744 <h4><a name="7.17.5" href="#7.17.5">7.17.5 Lock-free property</a></h4>
14745 <p><!--para 1 -->
14746  The atomic lock-free macros indicate the lock-free property of integer and address atomic
14747  types. A value of 0 indicates that the type is never lock-free; a value of 1 indicates that
14748  the type is sometimes lock-free; a value of 2 indicates that the type is always lock-free.
14749 <p><!--para 2 -->
14750  NOTE Operations that are lock-free should also be address-free. That is, atomic operations on the same
14751  memory location via two different addresses will communicate atomically. The implementation should not
14752  depend on any per-process state. This restriction enables communication via memory mapped into a
14753  process more than once and memory shared between two processes.
14754  
14755
14756 <p><small><a href="#Contents">Contents</a></small>
14757 <h5><a name="7.17.5.1" href="#7.17.5.1">7.17.5.1 The atomic_is_lock_free generic function</a></h5>
14758 <p><b>Synopsis</b>
14759 <p><!--para 1 -->
14760 <pre>
14761          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14762          _Bool atomic_is_lock_free(atomic_type const volatile *obj);
14763 </pre>
14764 <p><b>Description</b>
14765 <p><!--para 2 -->
14766  The atomic_is_lock_free generic function indicates whether or not the object
14767  pointed to by obj is lock-free. atomic_type can be any atomic type.
14768 <p><b>Returns</b>
14769 <p><!--para 3 -->
14770  The atomic_is_lock_free generic function returns nonzero (true) if and only if the
14771  object's operations are lock-free. The result of a lock-free query on one object cannot be
14772 <!--page 297 -->
14773  inferred from the result of a lock-free query on another object.
14774
14775 <p><small><a href="#Contents">Contents</a></small>
14776 <h4><a name="7.17.6" href="#7.17.6">7.17.6 Atomic integer and address types</a></h4>
14777 <p><!--para 1 -->
14778  For each line in the following table, the atomic type name is declared as the
14779  corresponding direct type.
14780 <!--page 298 -->
14781 <pre>
14782             Atomic type name                              Direct type
14783         atomic_char                           _Atomic    char
14784         atomic_schar                          _Atomic    signed char
14785         atomic_uchar                          _Atomic    unsigned char
14786         atomic_short                          _Atomic    short
14787         atomic_ushort                         _Atomic    unsigned short
14788         atomic_int                            _Atomic    int
14789         atomic_uint                           _Atomic    unsigned int
14790         atomic_long                           _Atomic    long
14791         atomic_ulong                          _Atomic    unsigned long
14792         atomic_llong                          _Atomic    long long
14793         atomic_ullong                         _Atomic    unsigned long long
14794         atomic_char16_t                       _Atomic    char16_t
14795         atomic_char32_t                       _Atomic    char32_t
14796         atomic_wchar_t                        _Atomic    wchar_t
14797         atomic_int_least8_t                   _Atomic    int_least8_t
14798         atomic_uint_least8_t                  _Atomic    uint_least8_t
14799         atomic_int_least16_t                  _Atomic    int_least16_t
14800         atomic_uint_least16_t                 _Atomic    uint_least16_t
14801         atomic_int_least32_t                  _Atomic    int_least32_t
14802         atomic_uint_least32_t                 _Atomic    uint_least32_t
14803         atomic_int_least64_t                  _Atomic    int_least64_t
14804         atomic_uint_least64_t                 _Atomic    uint_least64_t
14805         atomic_int_fast8_t                    _Atomic    int_fast8_t
14806         atomic_uint_fast8_t                   _Atomic    uint_fast8_t
14807         atomic_int_fast16_t                   _Atomic    int_fast16_t
14808         atomic_uint_fast16_t                  _Atomic    uint_fast16_t
14809         atomic_int_fast32_t                   _Atomic    int_fast32_t
14810         atomic_uint_fast32_t                  _Atomic    uint_fast32_t
14811         atomic_int_fast64_t                   _Atomic    int_fast64_t
14812         atomic_uint_fast64_t                  _Atomic    uint_fast64_t
14813         atomic_intptr_t                       _Atomic    intptr_t
14814         atomic_uintptr_t                      _Atomic    uintptr_t
14815         atomic_size_t                         _Atomic    size_t
14816         atomic_ptrdiff_t                      _Atomic    ptrdiff_t
14817         atomic_intmax_t                       _Atomic    intmax_t
14818         atomic_uintmax_t                      _Atomic    uintmax_t
14819 </pre>
14820 <p><!--para 2 -->
14821  The semantics of the operations on these types are defined in <a href="#7.17.7">7.17.7</a>.
14822 <p><!--para 3 -->
14823  The atomic_bool type provides an atomic boolean.
14824 <!--page 299 -->
14825 <p><!--para 4 -->
14826  The atomic_address type provides atomic void * operations. The unit of
14827  addition/subtraction shall be one byte.
14828 <p><!--para 5 -->
14829  NOTE The representation of atomic integer and address types need not have the same size as their
14830  corresponding regular types. They should have the same size whenever possible, as it eases effort required
14831  to port existing code.
14832  
14833
14834 <p><small><a href="#Contents">Contents</a></small>
14835 <h4><a name="7.17.7" href="#7.17.7">7.17.7 Operations on atomic types</a></h4>
14836 <p><!--para 1 -->
14837  There are only a few kinds of operations on atomic types, though there are many
14838  instances of those kinds. This subclause specifies each general kind.
14839
14840 <p><small><a href="#Contents">Contents</a></small>
14841 <h5><a name="7.17.7.1" href="#7.17.7.1">7.17.7.1 The atomic_store generic functions</a></h5>
14842 <p><b>Synopsis</b>
14843 <p><!--para 1 -->
14844 <pre>
14845          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14846          void atomic_store(volatile A *object, C desired);
14847          void atomic_store_explicit(volatile A *object,
14848               C desired, memory_order order);
14849 </pre>
14850 <p><b>Description</b>
14851 <p><!--para 2 -->
14852  The      order      argument    shall    not    be    memory_order_acquire,
14853  memory_order_consume, nor memory_order_acq_rel. Atomically replace the
14854  value pointed to by object with the value of desired. Memory is affected according
14855  to the value of order.
14856 <p><b>Returns</b>
14857 <p><!--para 3 -->
14858  The atomic_store generic functions return no value.
14859
14860 <p><small><a href="#Contents">Contents</a></small>
14861 <h5><a name="7.17.7.2" href="#7.17.7.2">7.17.7.2 The atomic_load generic functions</a></h5>
14862 <p><b>Synopsis</b>
14863 <p><!--para 1 -->
14864 <pre>
14865          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14866          C atomic_load(volatile A *object);
14867          C atomic_load_explicit(volatile A *object,
14868               memory_order order);
14869 </pre>
14870 <p><b>Description</b>
14871 <p><!--para 2 -->
14872  The order argument shall not be memory_order_release nor
14873  memory_order_acq_rel. Memory is affected according to the value of order.
14874 <p><b>Returns</b>
14875  Atomically returns the value pointed to by object.
14876 <!--page 300 -->
14877
14878 <p><small><a href="#Contents">Contents</a></small>
14879 <h5><a name="7.17.7.3" href="#7.17.7.3">7.17.7.3 The atomic_exchange generic functions</a></h5>
14880 <p><b>Synopsis</b>
14881 <p><!--para 1 -->
14882 <pre>
14883           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14884           C atomic_exchange(volatile A *object, C desired);
14885           C atomic_exchange_explicit(volatile A *object,
14886                C desired, memory_order order);
14887 </pre>
14888 <p><b>Description</b>
14889 <p><!--para 2 -->
14890  Atomically replace the value pointed to by object with desired. Memory is affected
14891  according to the value of order. These operations are read-modify-write operations
14892  (<a href="#5.1.2.4">5.1.2.4</a>).
14893 <p><b>Returns</b>
14894 <p><!--para 3 -->
14895  Atomically returns the value pointed to by object immediately before the effects.
14896
14897 <p><small><a href="#Contents">Contents</a></small>
14898 <h5><a name="7.17.7.4" href="#7.17.7.4">7.17.7.4 The atomic_compare_exchange generic functions</a></h5>
14899 <p><b>Synopsis</b>
14900 <p><!--para 1 -->
14901 <pre>
14902           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14903           _Bool atomic_compare_exchange_strong(volatile A *object,
14904                C *expected, C desired);
14905           _Bool atomic_compare_exchange_strong_explicit(
14906                volatile A *object, C *expected, C desired,
14907                memory_order success, memory_order failure);
14908           _Bool atomic_compare_exchange_weak(volatile A *object,
14909                C *expected, C desired);
14910           _Bool atomic_compare_exchange_weak_explicit(
14911                volatile A *object, C *expected, C desired,
14912                memory_order success, memory_order failure);
14913 </pre>
14914 <p><b>Description</b>
14915 <p><!--para 2 -->
14916  The failure argument shall not be memory_order_release nor
14917  memory_order_acq_rel. The failure argument shall be no stronger than the
14918  success argument. Atomically, compares the value pointed to by object for equality
14919  with that in expected, and if true, replaces the value pointed to by object with
14920  desired, and if false, updates the value in expected with the value pointed to by
14921  object. Further, if the comparison is true, memory is affected according to the value of
14922  success, and if the comparison is false, memory is affected according to the value of
14923  failure. These operations are atomic read-modify-write operations (<a href="#5.1.2.4">5.1.2.4</a>).
14924 <p><!--para 3 -->
14925  NOTE 1    The effect of the compare-and-exchange operations is
14926 <!--page 301 -->
14927 <pre>
14928           if (*object == *expected)
14929                 *object = desired;
14930           else
14931                 *expected = *object;
14932 </pre>
14933  
14934 <p><!--para 4 -->
14935  The weak compare-and-exchange operations may fail spuriously, that is, return zero
14936  while leaving the value pointed to by expected unchanged.
14937 <p><!--para 5 -->
14938  NOTE 2 This spurious failure enables implementation of compare-and-exchange on a broader class of
14939  machines, e.g. load-locked store-conditional machines.
14940  
14941 <p><!--para 6 -->
14942  EXAMPLE         A consequence of spurious failure is that nearly all uses of weak compare-and-exchange will
14943  be in a loop.
14944 <pre>
14945           exp = atomic_load(&amp;cur);
14946           do {
14947                 des = function(exp);
14948           } while (!atomic_compare_exchange_weak(&amp;cur, &amp;exp, des));
14949 </pre>
14950  When a compare-and-exchange is in a loop, the weak version will yield better performance on some
14951  platforms. When a weak compare-and-exchange would require a loop and a strong one would not, the
14952  strong one is preferable.
14953  
14954 <p><b>Returns</b>
14955 <p><!--para 7 -->
14956  The result of the comparison.
14957
14958 <p><small><a href="#Contents">Contents</a></small>
14959 <h5><a name="7.17.7.5" href="#7.17.7.5">7.17.7.5 The atomic_fetch and modify generic functions</a></h5>
14960 <p><!--para 1 -->
14961  The following operations perform arithmetic and bitwise computations. All of these
14962  operations are applicable to an object of any atomic integer type. Only addition and
14963  subtraction are applicable to atomic_address. None of these operations is applicable
14964  to atomic_bool. The key, operator, and computation correspondence is:
14965   key            op          computation
14966   add            +       addition
14967   sub            -       subtraction
14968   or             |       bitwise inclusive or
14969   xor            ^       bitwise exclusive or
14970   and            &amp;       bitwise and
14971 <p><b>Synopsis</b>
14972 <p><!--para 2 -->
14973 <pre>
14974           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
14975           C atomic_fetch_key(volatile A *object, M operand);
14976           C atomic_fetch_key_explicit(volatile A *object,
14977                M operand, memory_order order);
14978 </pre>
14979 <p><b>Description</b>
14980 <p><!--para 3 -->
14981  Atomically replaces the value pointed to by object with the result of the computation
14982  applied to the value pointed to by object and the given operand. Memory is affected
14983  according to the value of order. These operations are atomic read-modify-write
14984 <!--page 302 -->
14985  operations (<a href="#5.1.2.4">5.1.2.4</a>). For signed integer types, arithmetic is defined to use two's
14986  complement representation with silent wrap-around on overflow; there are no undefined
14987  results. For address types, the result may be an undefined address, but the operations
14988  otherwise have no undefined behavior.
14989 <p><b>Returns</b>
14990 <p><!--para 4 -->
14991  Atomically, the value pointed to by object immediately before the effects.
14992 <p><!--para 5 -->
14993  NOTE The operation of the atomic_fetch and modify generic functions are nearly equivalent to the
14994  operation of the corresponding op= compound assignment operators. The only differences are that the
14995  compound assignment operators are not guaranteed to operate atomically, and the value yielded by a
14996  compound assignment operator is the updated value of the object, whereas the value returned by the
14997  atomic_fetch and modify generic functions is the previous value of the atomic object.
14998  
14999
15000 <p><small><a href="#Contents">Contents</a></small>
15001 <h4><a name="7.17.8" href="#7.17.8">7.17.8 Atomic flag type and operations</a></h4>
15002 <p><!--para 1 -->
15003  The atomic_flag type provides the classic test-and-set functionality. It has two
15004  states, set and clear.
15005 <p><!--para 2 -->
15006  Operations on an object of type atomic_flag shall be lock free.
15007 <p><!--para 3 -->
15008  NOTE Hence the operations should also be address-free. No other type requires lock-free operations, so
15009  the atomic_flag type is the minimum hardware-implemented type needed to conform to this
15010  International standard. The remaining types can be emulated with atomic_flag, though with less than
15011  ideal properties.
15012  
15013 <p><!--para 4 -->
15014  The macro ATOMIC_FLAG_INIT may be used to initialize an atomic_flag to the
15015  clear state. An atomic_flag that is not explicitly initialized with
15016  ATOMIC_FLAG_INIT is initially in an indeterminate state.
15017 <p><!--para 5 -->
15018  EXAMPLE
15019 <pre>
15020          atomic_flag guard = ATOMIC_FLAG_INIT;
15021 </pre>
15022  
15023
15024 <p><small><a href="#Contents">Contents</a></small>
15025 <h5><a name="7.17.8.1" href="#7.17.8.1">7.17.8.1 The atomic_flag_test_and_set functions</a></h5>
15026 <p><b>Synopsis</b>
15027 <p><!--para 1 -->
15028 <pre>
15029          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
15030          bool atomic_flag_test_and_set(
15031               volatile atomic_flag *object);
15032          bool atomic_flag_test_and_set_explicit(
15033               volatile atomic_flag *object, memory_order order);
15034 </pre>
15035 <p><b>Description</b>
15036 <p><!--para 2 -->
15037  Atomically sets the value pointed to by object to true. Memory is affected according
15038  to the value of order. These operations are atomic read-modify-write operations
15039  (<a href="#5.1.2.4">5.1.2.4</a>).
15040 <!--page 303 -->
15041 <p><b>Returns</b>
15042 <p><!--para 3 -->
15043  Atomically, the value of the object immediately before the effects.
15044
15045 <p><small><a href="#Contents">Contents</a></small>
15046 <h5><a name="7.17.8.2" href="#7.17.8.2">7.17.8.2 The atomic_flag_clear functions</a></h5>
15047 <p><b>Synopsis</b>
15048 <p><!--para 1 -->
15049 <pre>
15050          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
15051          void atomic_flag_clear(volatile atomic_flag *object);
15052          void atomic_flag_clear_explicit(
15053               volatile atomic_flag *object, memory_order order);
15054 </pre>
15055 <p><b>Description</b>
15056 <p><!--para 2 -->
15057  The order argument shall not be memory_order_acquire nor
15058  memory_order_acq_rel. Atomically sets the value pointed to by object to false.
15059  Memory is affected according to the value of order.
15060 <p><b>Returns</b>
15061 <p><!--para 3 -->
15062  The atomic_flag_clear functions return no value.
15063 <!--page 304 -->
15064
15065 <p><small><a href="#Contents">Contents</a></small>
15066 <h3><a name="7.18" href="#7.18">7.18 Boolean type and values &lt;stdbool.h&gt;</a></h3>
15067 <p><!--para 1 -->
15068  The header <a href="#7.18">&lt;stdbool.h&gt;</a> defines four macros.
15069 <p><!--para 2 -->
15070  The macro
15071 <pre>
15072           bool
15073 </pre>
15074  expands to _Bool.
15075 <p><!--para 3 -->
15076  The remaining three macros are suitable for use in #if preprocessing directives. They
15077  are
15078 <pre>
15079           true
15080 </pre>
15081  which expands to the integer constant 1,
15082 <pre>
15083           false
15084 </pre>
15085  which expands to the integer constant 0, and
15086 <pre>
15087           __bool_true_false_are_defined
15088 </pre>
15089  which expands to the integer constant 1.
15090 <p><!--para 4 -->
15091  Notwithstanding the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and perhaps then
15092  redefine the macros bool, true, and false.<sup><a href="#note252"><b>252)</b></a></sup>
15093  
15094  
15095  
15096  
15097 <!--page 305 -->
15098
15099 <p><b>Footnotes</b>
15100 <p><small><a name="note252" href="#note252">252)</a> See ''future library directions'' (<a href="#7.30.7">7.30.7</a>).
15101 </small>
15102
15103 <p><small><a href="#Contents">Contents</a></small>
15104 <h3><a name="7.19" href="#7.19">7.19 Common definitions &lt;stddef.h&gt;</a></h3>
15105 <p><!--para 1 -->
15106  The header <a href="#7.19">&lt;stddef.h&gt;</a> defines the following macros and declares the following types.
15107  Some are also defined in other headers, as noted in their respective subclauses.
15108 <p><!--para 2 -->
15109  The types are
15110 <pre>
15111          ptrdiff_t
15112 </pre>
15113  which is the signed integer type of the result of subtracting two pointers;
15114 <pre>
15115          size_t
15116 </pre>
15117  which is the unsigned integer type of the result of the sizeof operator;
15118 <pre>
15119          max_align_t
15120 </pre>
15121  which is an object type whose alignment is as great as is supported by the implementation
15122  in all contexts; and
15123 <pre>
15124          wchar_t
15125 </pre>
15126  which is an integer type whose range of values can represent distinct codes for all
15127  members of the largest extended character set specified among the supported locales; the
15128  null character shall have the code value zero. Each member of the basic character set
15129  shall have a code value equal to its value when used as the lone character in an integer
15130  character      constant     if     an      implementation      does      not      define
15131  __STDC_MB_MIGHT_NEQ_WC__.
15132 <p><!--para 3 -->
15133  The macros are
15134 <pre>
15135          NULL
15136 </pre>
15137  which expands to an implementation-defined null pointer constant; and
15138 <pre>
15139          offsetof(type, member-designator)
15140 </pre>
15141  which expands to an integer constant expression that has type size_t, the value of
15142  which is the offset in bytes, to the structure member (designated by member-designator),
15143  from the beginning of its structure (designated by type). The type and member designator
15144  shall be such that given
15145 <pre>
15146          static type t;
15147 </pre>
15148  then the expression &amp;(t.member-designator) evaluates to an address constant. (If the
15149  specified member is a bit-field, the behavior is undefined.)
15150 <p><b>Recommended practice</b>
15151 <p><!--para 4 -->
15152  The types used for size_t and ptrdiff_t should not have an integer conversion rank
15153  greater than that of signed long int unless the implementation supports objects
15154  large enough to make this necessary.
15155 <!--page 306 -->
15156 <p><b> Forward references</b>: localization (<a href="#7.11">7.11</a>).
15157 <!--page 307 -->
15158
15159 <p><small><a href="#Contents">Contents</a></small>
15160 <h3><a name="7.20" href="#7.20">7.20 Integer types &lt;stdint.h&gt;</a></h3>
15161 <p><!--para 1 -->
15162  The header <a href="#7.20">&lt;stdint.h&gt;</a> declares sets of integer types having specified widths, and
15163  defines corresponding sets of macros.<sup><a href="#note253"><b>253)</b></a></sup> It also defines macros that specify limits of
15164  integer types corresponding to types defined in other standard headers.
15165 <p><!--para 2 -->
15166  Types are defined in the following categories:
15167 <ul>
15168 <li>  integer types having certain exact widths;
15169 <li>  integer types having at least certain specified widths;
15170 <li>  fastest integer types having at least certain specified widths;
15171 <li>  integer types wide enough to hold pointers to objects;
15172 <li>  integer types having greatest width.
15173 </ul>
15174  (Some of these types may denote the same type.)
15175 <p><!--para 3 -->
15176  Corresponding macros specify limits of the declared types and construct suitable
15177  constants.
15178 <p><!--para 4 -->
15179  For each type described herein that the implementation provides,<sup><a href="#note254"><b>254)</b></a></sup> <a href="#7.20">&lt;stdint.h&gt;</a> shall
15180  declare that typedef name and define the associated macros. Conversely, for each type
15181  described herein that the implementation does not provide, <a href="#7.20">&lt;stdint.h&gt;</a> shall not
15182  declare that typedef name nor shall it define the associated macros. An implementation
15183  shall provide those types described as ''required'', but need not provide any of the others
15184  (described as ''optional'').
15185
15186 <p><b>Footnotes</b>
15187 <p><small><a name="note253" href="#note253">253)</a> See ''future library directions'' (<a href="#7.30.8">7.30.8</a>).
15188 </small>
15189 <p><small><a name="note254" href="#note254">254)</a> Some of these types may denote implementation-defined extended integer types.
15190 </small>
15191
15192 <p><small><a href="#Contents">Contents</a></small>
15193 <h4><a name="7.20.1" href="#7.20.1">7.20.1 Integer types</a></h4>
15194 <p><!--para 1 -->
15195  When typedef names differing only in the absence or presence of the initial u are defined,
15196  they shall denote corresponding signed and unsigned types as described in <a href="#6.2.5">6.2.5</a>; an
15197  implementation providing one of these corresponding types shall also provide the other.
15198 <p><!--para 2 -->
15199  In the following descriptions, the symbol N represents an unsigned decimal integer with
15200  no leading zeros (e.g., 8 or 24, but not 04 or 048).
15201  
15202  
15203  
15204  
15205 <!--page 308 -->
15206
15207 <p><small><a href="#Contents">Contents</a></small>
15208 <h5><a name="7.20.1.1" href="#7.20.1.1">7.20.1.1 Exact-width integer types</a></h5>
15209 <p><!--para 1 -->
15210  The typedef name intN_t designates a signed integer type with width N , no padding
15211  bits, and a two's complement representation. Thus, int8_t denotes such a signed
15212  integer type with a width of exactly 8 bits.
15213 <p><!--para 2 -->
15214  The typedef name uintN_t designates an unsigned integer type with width N and no
15215  padding bits. Thus, uint24_t denotes such an unsigned integer type with a width of
15216  exactly 24 bits.
15217 <p><!--para 3 -->
15218  These types are optional. However, if an implementation provides integer types with
15219  widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a
15220  two's complement representation, it shall define the corresponding typedef names.
15221
15222 <p><small><a href="#Contents">Contents</a></small>
15223 <h5><a name="7.20.1.2" href="#7.20.1.2">7.20.1.2 Minimum-width integer types</a></h5>
15224 <p><!--para 1 -->
15225  The typedef name int_leastN_t designates a signed integer type with a width of at
15226  least N , such that no signed integer type with lesser size has at least the specified width.
15227  Thus, int_least32_t denotes a signed integer type with a width of at least 32 bits.
15228 <p><!--para 2 -->
15229  The typedef name uint_leastN_t designates an unsigned integer type with a width
15230  of at least N , such that no unsigned integer type with lesser size has at least the specified
15231  width. Thus, uint_least16_t denotes an unsigned integer type with a width of at
15232  least 16 bits.
15233 <p><!--para 3 -->
15234  The following types are required:
15235 <pre>
15236           int_least8_t                                      uint_least8_t
15237           int_least16_t                                     uint_least16_t
15238           int_least32_t                                     uint_least32_t
15239           int_least64_t                                     uint_least64_t
15240 </pre>
15241  All other types of this form are optional.
15242
15243 <p><small><a href="#Contents">Contents</a></small>
15244 <h5><a name="7.20.1.3" href="#7.20.1.3">7.20.1.3 Fastest minimum-width integer types</a></h5>
15245 <p><!--para 1 -->
15246  Each of the following types designates an integer type that is usually fastest<sup><a href="#note255"><b>255)</b></a></sup> to operate
15247  with among all integer types that have at least the specified width.
15248 <p><!--para 2 -->
15249  The typedef name int_fastN_t designates the fastest signed integer type with a width
15250  of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer
15251  type with a width of at least N .
15252  
15253  
15254  
15255  
15256 <!--page 309 -->
15257 <p><!--para 3 -->
15258  The following types are required:
15259 <pre>
15260          int_fast8_t                                    uint_fast8_t
15261          int_fast16_t                                   uint_fast16_t
15262          int_fast32_t                                   uint_fast32_t
15263          int_fast64_t                                   uint_fast64_t
15264 </pre>
15265  All other types of this form are optional.
15266
15267 <p><b>Footnotes</b>
15268 <p><small><a name="note255" href="#note255">255)</a> The designated type is not guaranteed to be fastest for all purposes; if the implementation has no clear
15269  grounds for choosing one type over another, it will simply pick some integer type satisfying the
15270  signedness and width requirements.
15271 </small>
15272
15273 <p><small><a href="#Contents">Contents</a></small>
15274 <h5><a name="7.20.1.4" href="#7.20.1.4">7.20.1.4 Integer types capable of holding object pointers</a></h5>
15275 <p><!--para 1 -->
15276  The following type designates a signed integer type with the property that any valid
15277  pointer to void can be converted to this type, then converted back to pointer to void,
15278  and the result will compare equal to the original pointer:
15279 <pre>
15280          intptr_t
15281 </pre>
15282  The following type designates an unsigned integer type with the property that any valid
15283  pointer to void can be converted to this type, then converted back to pointer to void,
15284  and the result will compare equal to the original pointer:
15285 <pre>
15286          uintptr_t
15287 </pre>
15288  These types are optional.
15289
15290 <p><small><a href="#Contents">Contents</a></small>
15291 <h5><a name="7.20.1.5" href="#7.20.1.5">7.20.1.5 Greatest-width integer types</a></h5>
15292 <p><!--para 1 -->
15293  The following type designates a signed integer type capable of representing any value of
15294  any signed integer type:
15295 <pre>
15296          intmax_t
15297 </pre>
15298  The following type designates an unsigned integer type capable of representing any value
15299  of any unsigned integer type:
15300 <pre>
15301          uintmax_t
15302 </pre>
15303  These types are required.
15304
15305 <p><small><a href="#Contents">Contents</a></small>
15306 <h4><a name="7.20.2" href="#7.20.2">7.20.2 Limits of specified-width integer types</a></h4>
15307 <p><!--para 1 -->
15308  The following object-like macros specify the minimum and maximum limits of the types *
15309  declared in <a href="#7.20">&lt;stdint.h&gt;</a>. Each macro name corresponds to a similar type name in
15310  <a href="#7.20.1">7.20.1</a>.
15311 <p><!--para 2 -->
15312  Each instance of any defined macro shall be replaced by a constant expression suitable
15313  for use in #if preprocessing directives, and this expression shall have the same type as
15314  would an expression that is an object of the corresponding type converted according to
15315  the integer promotions. Its implementation-defined value shall be equal to or greater in
15316  magnitude (absolute value) than the corresponding value given below, with the same sign,
15317  except where stated to be exactly the given value.
15318 <!--page 310 -->
15319
15320 <p><small><a href="#Contents">Contents</a></small>
15321 <h5><a name="7.20.2.1" href="#7.20.2.1">7.20.2.1 Limits of exact-width integer types</a></h5>
15322 <p><!--para 1 -->
15323 <ul>
15324 <li>  minimum values of exact-width signed integer types
15325 <pre>
15326      INTN_MIN                                  exactly -(2 N -1 )
15327 </pre>
15328 <li>  maximum values of exact-width signed integer types
15329 <pre>
15330      INTN_MAX                                  exactly 2 N -1 - 1
15331 </pre>
15332 <li>  maximum values of exact-width unsigned integer types
15333   UINTN_MAX                                    exactly 2 N - 1
15334 </ul>
15335
15336 <p><small><a href="#Contents">Contents</a></small>
15337 <h5><a name="7.20.2.2" href="#7.20.2.2">7.20.2.2 Limits of minimum-width integer types</a></h5>
15338 <p><!--para 1 -->
15339 <ul>
15340 <li>  minimum values of minimum-width signed integer types
15341 <pre>
15342      INT_LEASTN_MIN                                    -(2 N -1 - 1)
15343 </pre>
15344 <li>  maximum values of minimum-width signed integer types
15345 <pre>
15346      INT_LEASTN_MAX                                    2 N -1 - 1
15347 </pre>
15348 <li>  maximum values of minimum-width unsigned integer types
15349   UINT_LEASTN_MAX                                      2N - 1
15350 </ul>
15351
15352 <p><small><a href="#Contents">Contents</a></small>
15353 <h5><a name="7.20.2.3" href="#7.20.2.3">7.20.2.3 Limits of fastest minimum-width integer types</a></h5>
15354 <p><!--para 1 -->
15355 <ul>
15356 <li>  minimum values of fastest minimum-width signed integer types
15357 <pre>
15358      INT_FASTN_MIN                                     -(2 N -1 - 1)
15359 </pre>
15360 <li>  maximum values of fastest minimum-width signed integer types
15361   INT_FASTN_MAX                                        2 N -1 - 1
15362 <li>  maximum values of fastest minimum-width unsigned integer types
15363   UINT_FASTN_MAX                                       2N - 1
15364 </ul>
15365
15366 <p><small><a href="#Contents">Contents</a></small>
15367 <h5><a name="7.20.2.4" href="#7.20.2.4">7.20.2.4 Limits of integer types capable of holding object pointers</a></h5>
15368 <p><!--para 1 -->
15369 <ul>
15370 <li>  minimum value of pointer-holding signed integer type
15371 <pre>
15372      INTPTR_MIN                                        -(215 - 1)
15373 </pre>
15374 <li>  maximum value of pointer-holding signed integer type
15375   INTPTR_MAX                                           215 - 1
15376 <li>  maximum value of pointer-holding unsigned integer type
15377   UINTPTR_MAX                                          216 - 1
15378 <!--page 311 -->
15379 </ul>
15380
15381 <p><small><a href="#Contents">Contents</a></small>
15382 <h5><a name="7.20.2.5" href="#7.20.2.5">7.20.2.5 Limits of greatest-width integer types</a></h5>
15383 <p><!--para 1 -->
15384 <ul>
15385 <li>  minimum value of greatest-width signed integer type
15386    INTMAX_MIN                                                    -(263 - 1)
15387 <li>  maximum value of greatest-width signed integer type
15388    INTMAX_MAX                                                    263 - 1
15389 <li>  maximum value of greatest-width unsigned integer type
15390    UINTMAX_MAX                                                   264 - 1
15391 </ul>
15392
15393 <p><small><a href="#Contents">Contents</a></small>
15394 <h4><a name="7.20.3" href="#7.20.3">7.20.3 Limits of other integer types</a></h4>
15395 <p><!--para 1 -->
15396  The following object-like macros specify the minimum and maximum limits of integer *
15397  types corresponding to types defined in other standard headers.
15398 <p><!--para 2 -->
15399  Each instance of these macros shall be replaced by a constant expression suitable for use
15400  in #if preprocessing directives, and this expression shall have the same type as would an
15401  expression that is an object of the corresponding type converted according to the integer
15402  promotions. Its implementation-defined value shall be equal to or greater in magnitude
15403  (absolute value) than the corresponding value given below, with the same sign. An
15404  implementation shall define only the macros corresponding to those typedef names it
15405  actually provides.<sup><a href="#note256"><b>256)</b></a></sup>
15406 <ul>
15407 <li>  limits of ptrdiff_t
15408    PTRDIFF_MIN                                                 -65535
15409    PTRDIFF_MAX                                                 +65535
15410 <li>  limits of sig_atomic_t
15411    SIG_ATOMIC_MIN                                              see below
15412    SIG_ATOMIC_MAX                                              see below
15413 <li>  limit of size_t
15414    SIZE_MAX                                                      65535
15415 <li>  limits of wchar_t
15416    WCHAR_MIN                                                   see below
15417    WCHAR_MAX                                                   see below
15418 <li>  limits of wint_t
15419  
15420  
15421  
15422  
15423 <!--page 312 -->
15424    WINT_MIN                                              see below
15425    WINT_MAX                                              see below
15426 </ul>
15427 <p><!--para 3 -->
15428  If sig_atomic_t (see <a href="#7.14">7.14</a>) is defined as a signed integer type, the value of
15429  SIG_ATOMIC_MIN shall be no greater than -127 and the value of SIG_ATOMIC_MAX
15430  shall be no less than 127; otherwise, sig_atomic_t is defined as an unsigned integer
15431  type, and the value of SIG_ATOMIC_MIN shall be 0 and the value of
15432  SIG_ATOMIC_MAX shall be no less than 255.
15433 <p><!--para 4 -->
15434  If wchar_t (see <a href="#7.19">7.19</a>) is defined as a signed integer type, the value of WCHAR_MIN
15435  shall be no greater than -127 and the value of WCHAR_MAX shall be no less than 127;
15436  otherwise, wchar_t is defined as an unsigned integer type, and the value of
15437  WCHAR_MIN shall be 0 and the value of WCHAR_MAX shall be no less than 255.<sup><a href="#note257"><b>257)</b></a></sup>
15438 <p><!--para 5 -->
15439  If wint_t (see <a href="#7.28">7.28</a>) is defined as a signed integer type, the value of WINT_MIN shall
15440  be no greater than -32767 and the value of WINT_MAX shall be no less than 32767;
15441  otherwise, wint_t is defined as an unsigned integer type, and the value of WINT_MIN
15442  shall be 0 and the value of WINT_MAX shall be no less than 65535.
15443
15444 <p><b>Footnotes</b>
15445 <p><small><a name="note256" href="#note256">256)</a> A freestanding implementation need not provide all of these types.
15446 </small>
15447 <p><small><a name="note257" href="#note257">257)</a> The values WCHAR_MIN and WCHAR_MAX do not necessarily correspond to members of the extended
15448  character set.
15449 </small>
15450
15451 <p><small><a href="#Contents">Contents</a></small>
15452 <h4><a name="7.20.4" href="#7.20.4">7.20.4 Macros for integer constants</a></h4>
15453 <p><!--para 1 -->
15454  The following function-like macros expand to integer constants suitable for initializing *
15455  objects that have integer types corresponding to types defined in <a href="#7.20">&lt;stdint.h&gt;</a>. Each
15456  macro name corresponds to a similar type name in <a href="#7.20.1.2">7.20.1.2</a> or <a href="#7.20.1.5">7.20.1.5</a>.
15457 <p><!--para 2 -->
15458  The argument in any instance of these macros shall be an unsuffixed integer constant (as
15459  defined in <a href="#6.4.4.1">6.4.4.1</a>) with a value that does not exceed the limits for the corresponding type.
15460 <p><!--para 3 -->
15461  Each invocation of one of these macros shall expand to an integer constant expression
15462  suitable for use in #if preprocessing directives. The type of the expression shall have
15463  the same type as would an expression of the corresponding type converted according to
15464  the integer promotions. The value of the expression shall be that of the argument.
15465
15466 <p><small><a href="#Contents">Contents</a></small>
15467 <h5><a name="7.20.4.1" href="#7.20.4.1">7.20.4.1 Macros for minimum-width integer constants</a></h5>
15468 <p><!--para 1 -->
15469  The macro INTN_C(value) shall expand to an integer constant expression
15470  corresponding to the type int_leastN_t. The macro UINTN_C(value) shall expand
15471  to an integer constant expression corresponding to the type uint_leastN_t. For
15472  example, if uint_least64_t is a name for the type unsigned long long int,
15473  then UINT64_C(0x123) might expand to the integer constant 0x123ULL.
15474  
15475  
15476  
15477  
15478 <!--page 313 -->
15479
15480 <p><small><a href="#Contents">Contents</a></small>
15481 <h5><a name="7.20.4.2" href="#7.20.4.2">7.20.4.2 Macros for greatest-width integer constants</a></h5>
15482 <p><!--para 1 -->
15483  The following macro expands to an integer constant expression having the value specified
15484  by its argument and the type intmax_t:
15485 <pre>
15486          INTMAX_C(value)
15487 </pre>
15488  The following macro expands to an integer constant expression having the value specified
15489  by its argument and the type uintmax_t:
15490 <!--page 314 -->
15491 <pre>
15492          UINTMAX_C(value)
15493 </pre>
15494
15495 <p><small><a href="#Contents">Contents</a></small>
15496 <h3><a name="7.21" href="#7.21">7.21 Input/output &lt;stdio.h&gt;</a></h3>
15497
15498 <p><small><a href="#Contents">Contents</a></small>
15499 <h4><a name="7.21.1" href="#7.21.1">7.21.1 Introduction</a></h4>
15500 <p><!--para 1 -->
15501  The header <a href="#7.21">&lt;stdio.h&gt;</a> defines several macros, and declares three types and many
15502  functions for performing input and output.
15503 <p><!--para 2 -->
15504  The types declared are size_t (described in <a href="#7.19">7.19</a>);
15505 <pre>
15506         FILE
15507 </pre>
15508  which is an object type capable of recording all the information needed to control a
15509  stream, including its file position indicator, a pointer to its associated buffer (if any), an
15510  error indicator that records whether a read/write error has occurred, and an end-of-file
15511  indicator that records whether the end of the file has been reached; and
15512 <pre>
15513         fpos_t
15514 </pre>
15515  which is a complete object type other than an array type capable of recording all the
15516  information needed to specify uniquely every position within a file.
15517 <p><!--para 3 -->
15518  The macros are NULL (described in <a href="#7.19">7.19</a>);
15519 <pre>
15520         _IOFBF
15521         _IOLBF
15522         _IONBF
15523 </pre>
15524  which expand to integer constant expressions with distinct values, suitable for use as the
15525  third argument to the setvbuf function;
15526 <pre>
15527         BUFSIZ
15528 </pre>
15529  which expands to an integer constant expression that is the size of the buffer used by the
15530  setbuf function;
15531 <pre>
15532         EOF
15533 </pre>
15534  which expands to an integer constant expression, with type int and a negative value, that
15535  is returned by several functions to indicate end-of-file, that is, no more input from a
15536  stream;
15537 <pre>
15538         FOPEN_MAX
15539 </pre>
15540  which expands to an integer constant expression that is the minimum number of files that
15541  the implementation guarantees can be open simultaneously;
15542 <pre>
15543         FILENAME_MAX
15544 </pre>
15545  which expands to an integer constant expression that is the size needed for an array of
15546  char large enough to hold the longest file name string that the implementation
15547 <!--page 315 -->
15548  guarantees can be opened;<sup><a href="#note258"><b>258)</b></a></sup>
15549 <pre>
15550          L_tmpnam
15551 </pre>
15552  which expands to an integer constant expression that is the size needed for an array of
15553  char large enough to hold a temporary file name string generated by the tmpnam
15554  function;
15555 <pre>
15556          SEEK_CUR
15557          SEEK_END
15558          SEEK_SET
15559 </pre>
15560  which expand to integer constant expressions with distinct values, suitable for use as the
15561  third argument to the fseek function;
15562 <pre>
15563          TMP_MAX
15564 </pre>
15565  which expands to an integer constant expression that is the minimum number of unique
15566  file names that can be generated by the tmpnam function;
15567 <pre>
15568          stderr
15569          stdin
15570          stdout
15571 </pre>
15572  which are expressions of type ''pointer to FILE'' that point to the FILE objects
15573  associated, respectively, with the standard error, input, and output streams.
15574 <p><!--para 4 -->
15575  The header <a href="#7.28">&lt;wchar.h&gt;</a> declares a number of functions useful for wide character input
15576  and output. The wide character input/output functions described in that subclause
15577  provide operations analogous to most of those described here, except that the
15578  fundamental units internal to the program are wide characters. The external
15579  representation (in the file) is a sequence of ''generalized'' multibyte characters, as
15580  described further in <a href="#7.21.3">7.21.3</a>.
15581 <p><!--para 5 -->
15582  The input/output functions are given the following collective terms:
15583 <ul>
15584 <li>  The wide character input functions -- those functions described in <a href="#7.28">7.28</a> that perform
15585  input into wide characters and wide strings: fgetwc, fgetws, getwc, getwchar,
15586  fwscanf, wscanf, vfwscanf, and vwscanf.
15587 <li>  The wide character output functions -- those functions described in <a href="#7.28">7.28</a> that perform
15588  output from wide characters and wide strings: fputwc, fputws, putwc,
15589  putwchar, fwprintf, wprintf, vfwprintf, and vwprintf.
15590  
15591  
15592 <!--page 316 -->
15593 <li>  The wide character input/output functions -- the union of the ungetwc function, the
15594  wide character input functions, and the wide character output functions.
15595 <li>  The byte input/output functions -- those functions described in this subclause that
15596  perform input/output: fgetc, fgets, fprintf, fputc, fputs, fread,
15597  fscanf, fwrite, getc, getchar, printf, putc, putchar, puts, scanf, *
15598  ungetc, vfprintf, vfscanf, vprintf, and vscanf.
15599 </ul>
15600 <p><b> Forward references</b>: files (<a href="#7.21.3">7.21.3</a>), the fseek function (<a href="#7.21.9.2">7.21.9.2</a>), streams (<a href="#7.21.2">7.21.2</a>), the
15601  tmpnam function (<a href="#7.21.4.4">7.21.4.4</a>), <a href="#7.28">&lt;wchar.h&gt;</a> (<a href="#7.28">7.28</a>).
15602
15603 <p><b>Footnotes</b>
15604 <p><small><a name="note258" href="#note258">258)</a> If the implementation imposes no practical limit on the length of file name strings, the value of
15605  FILENAME_MAX should instead be the recommended size of an array intended to hold a file name
15606  string. Of course, file name string contents are subject to other system-specific constraints; therefore
15607  all possible strings of length FILENAME_MAX cannot be expected to be opened successfully.
15608 </small>
15609
15610 <p><small><a href="#Contents">Contents</a></small>
15611 <h4><a name="7.21.2" href="#7.21.2">7.21.2 Streams</a></h4>
15612 <p><!--para 1 -->
15613  Input and output, whether to or from physical devices such as terminals and tape drives,
15614  or whether to or from files supported on structured storage devices, are mapped into
15615  logical data streams, whose properties are more uniform than their various inputs and
15616  outputs. Two forms of mapping are supported, for text streams and for binary
15617  streams.<sup><a href="#note259"><b>259)</b></a></sup>
15618 <p><!--para 2 -->
15619  A text stream is an ordered sequence of characters composed into lines, each line
15620  consisting of zero or more characters plus a terminating new-line character. Whether the
15621  last line requires a terminating new-line character is implementation-defined. Characters
15622  may have to be added, altered, or deleted on input and output to conform to differing
15623  conventions for representing text in the host environment. Thus, there need not be a one-
15624  to-one correspondence between the characters in a stream and those in the external
15625  representation. Data read in from a text stream will necessarily compare equal to the data
15626  that were earlier written out to that stream only if: the data consist only of printing
15627  characters and the control characters horizontal tab and new-line; no new-line character is
15628  immediately preceded by space characters; and the last character is a new-line character.
15629  Whether space characters that are written out immediately before a new-line character
15630  appear when read in is implementation-defined.
15631 <p><!--para 3 -->
15632  A binary stream is an ordered sequence of characters that can transparently record
15633  internal data. Data read in from a binary stream shall compare equal to the data that were
15634  earlier written out to that stream, under the same implementation. Such a stream may,
15635  however, have an implementation-defined number of null characters appended to the end
15636  of the stream.
15637 <p><!--para 4 -->
15638  Each stream has an orientation. After a stream is associated with an external file, but
15639  before any operations are performed on it, the stream is without orientation. Once a wide
15640  character input/output function has been applied to a stream without orientation, the
15641  
15642  
15643 <!--page 317 -->
15644  stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
15645  been applied to a stream without orientation, the stream becomes a byte-oriented stream.
15646  Only a call to the freopen function or the fwide function can otherwise alter the
15647  orientation of a stream. (A successful call to freopen removes any orientation.)<sup><a href="#note260"><b>260)</b></a></sup>
15648 <p><!--para 5 -->
15649  Byte input/output functions shall not be applied to a wide-oriented stream and wide
15650  character input/output functions shall not be applied to a byte-oriented stream. The
15651  remaining stream operations do not affect, and are not affected by, a stream's orientation,
15652  except for the following additional restrictions:
15653 <ul>
15654 <li>  Binary wide-oriented streams have the file-positioning restrictions ascribed to both
15655  text and binary streams.
15656 <li>  For wide-oriented streams, after a successful call to a file-positioning function that
15657  leaves the file position indicator prior to the end-of-file, a wide character output
15658  function can overwrite a partial multibyte character; any file contents beyond the
15659  byte(s) written are henceforth indeterminate.
15660 </ul>
15661 <p><!--para 6 -->
15662  Each wide-oriented stream has an associated mbstate_t object that stores the current
15663  parse state of the stream. A successful call to fgetpos stores a representation of the
15664  value of this mbstate_t object as part of the value of the fpos_t object. A later
15665  successful call to fsetpos using the same stored fpos_t value restores the value of
15666  the associated mbstate_t object as well as the position within the controlled stream.
15667 <p><b>Environmental limits</b>
15668 <p><!--para 7 -->
15669  An implementation shall support text files with lines containing at least 254 characters,
15670  including the terminating new-line character. The value of the macro BUFSIZ shall be at
15671  least 256.
15672 <p><b> Forward references</b>: the freopen function (<a href="#7.21.5.4">7.21.5.4</a>), the fwide function (<a href="#7.28.3.5">7.28.3.5</a>),
15673  mbstate_t (<a href="#7.29.1">7.29.1</a>), the fgetpos function (<a href="#7.21.9.1">7.21.9.1</a>), the fsetpos function
15674  (<a href="#7.21.9.3">7.21.9.3</a>).
15675  
15676  
15677  
15678  
15679 <!--page 318 -->
15680
15681 <p><b>Footnotes</b>
15682 <p><small><a name="note259" href="#note259">259)</a> An implementation need not distinguish between text streams and binary streams. In such an
15683  implementation, there need be no new-line characters in a text stream nor any limit to the length of a
15684  line.
15685 </small>
15686 <p><small><a name="note260" href="#note260">260)</a> The three predefined streams stdin, stdout, and stderr are unoriented at program startup.
15687 </small>
15688
15689 <p><small><a href="#Contents">Contents</a></small>
15690 <h4><a name="7.21.3" href="#7.21.3">7.21.3 Files</a></h4>
15691 <p><!--para 1 -->
15692  A stream is associated with an external file (which may be a physical device) by opening
15693  a file, which may involve creating a new file. Creating an existing file causes its former
15694  contents to be discarded, if necessary. If a file can support positioning requests (such as a
15695  disk file, as opposed to a terminal), then a file position indicator associated with the
15696  stream is positioned at the start (character number zero) of the file, unless the file is
15697  opened with append mode in which case it is implementation-defined whether the file
15698  position indicator is initially positioned at the beginning or the end of the file. The file
15699  position indicator is maintained by subsequent reads, writes, and positioning requests, to
15700  facilitate an orderly progression through the file.
15701 <p><!--para 2 -->
15702  Binary files are not truncated, except as defined in <a href="#7.21.5.3">7.21.5.3</a>. Whether a write on a text
15703  stream causes the associated file to be truncated beyond that point is implementation-
15704  defined.
15705 <p><!--para 3 -->
15706  When a stream is unbuffered, characters are intended to appear from the source or at the
15707  destination as soon as possible. Otherwise characters may be accumulated and
15708  transmitted to or from the host environment as a block. When a stream is fully buffered,
15709  characters are intended to be transmitted to or from the host environment as a block when
15710  a buffer is filled. When a stream is line buffered, characters are intended to be
15711  transmitted to or from the host environment as a block when a new-line character is
15712  encountered. Furthermore, characters are intended to be transmitted as a block to the host
15713  environment when a buffer is filled, when input is requested on an unbuffered stream, or
15714  when input is requested on a line buffered stream that requires the transmission of
15715  characters from the host environment. Support for these characteristics is
15716  implementation-defined, and may be affected via the setbuf and setvbuf functions.
15717 <p><!--para 4 -->
15718  A file may be disassociated from a controlling stream by closing the file. Output streams
15719  are flushed (any unwritten buffer contents are transmitted to the host environment) before
15720  the stream is disassociated from the file. The value of a pointer to a FILE object is
15721  indeterminate after the associated file is closed (including the standard text streams).
15722  Whether a file of zero length (on which no characters have been written by an output
15723  stream) actually exists is implementation-defined.
15724 <p><!--para 5 -->
15725  The file may be subsequently reopened, by the same or another program execution, and
15726  its contents reclaimed or modified (if it can be repositioned at its start). If the main
15727  function returns to its original caller, or if the exit function is called, all open files are
15728  closed (hence all output streams are flushed) before program termination. Other paths to
15729  program termination, such as calling the abort function, need not close all files
15730  properly.
15731 <p><!--para 6 -->
15732  The address of the FILE object used to control a stream may be significant; a copy of a
15733  FILE object need not serve in place of the original.
15734 <!--page 319 -->
15735 <p><!--para 7 -->
15736  At program startup, three text streams are predefined and need not be opened explicitly
15737 <ul>
15738 <li>  standard input (for reading conventional input), standard output (for writing
15739 </ul>
15740  conventional output), and standard error (for writing diagnostic output). As initially
15741  opened, the standard error stream is not fully buffered; the standard input and standard
15742  output streams are fully buffered if and only if the stream can be determined not to refer
15743  to an interactive device.
15744 <p><!--para 8 -->
15745  Functions that open additional (nontemporary) files require a file name, which is a string.
15746  The rules for composing valid file names are implementation-defined. Whether the same
15747  file can be simultaneously open multiple times is also implementation-defined.
15748 <p><!--para 9 -->
15749  Although both text and binary wide-oriented streams are conceptually sequences of wide
15750  characters, the external file associated with a wide-oriented stream is a sequence of
15751  multibyte characters, generalized as follows:
15752 <ul>
15753 <li>  Multibyte encodings within files may contain embedded null bytes (unlike multibyte
15754  encodings valid for use internal to the program).
15755 <li>  A file need not begin nor end in the initial shift state.<sup><a href="#note261"><b>261)</b></a></sup>
15756 </ul>
15757 <p><!--para 10 -->
15758  Moreover, the encodings used for multibyte characters may differ among files. Both the
15759  nature and choice of such encodings are implementation-defined.
15760 <p><!--para 11 -->
15761  The wide character input functions read multibyte characters from the stream and convert
15762  them to wide characters as if they were read by successive calls to the fgetwc function.
15763  Each conversion occurs as if by a call to the mbrtowc function, with the conversion state
15764  described by the stream's own mbstate_t object. The byte input functions read
15765  characters from the stream as if by successive calls to the fgetc function.
15766 <p><!--para 12 -->
15767  The wide character output functions convert wide characters to multibyte characters and
15768  write them to the stream as if they were written by successive calls to the fputwc
15769  function. Each conversion occurs as if by a call to the wcrtomb function, with the
15770  conversion state described by the stream's own mbstate_t object. The byte output
15771  functions write characters to the stream as if by successive calls to the fputc function.
15772 <p><!--para 13 -->
15773  In some cases, some of the byte input/output functions also perform conversions between
15774  multibyte characters and wide characters. These conversions also occur as if by calls to
15775  the mbrtowc and wcrtomb functions.
15776 <p><!--para 14 -->
15777  An encoding error occurs if the character sequence presented to the underlying
15778  mbrtowc function does not form a valid (generalized) multibyte character, or if the code
15779  value passed to the underlying wcrtomb does not correspond to a valid (generalized)
15780  
15781  
15782 <!--page 320 -->
15783  multibyte character. The wide character input/output functions and the byte input/output
15784  functions store the value of the macro EILSEQ in errno if and only if an encoding error
15785  occurs.
15786 <p><b>Environmental limits</b>
15787 <p><!--para 15 -->
15788  The value of FOPEN_MAX shall be at least eight, including the three standard text
15789  streams.
15790 <p><b> Forward references</b>: the exit function (<a href="#7.22.4.4">7.22.4.4</a>), the fgetc function (<a href="#7.21.7.1">7.21.7.1</a>), the
15791  fopen function (<a href="#7.21.5.3">7.21.5.3</a>), the fputc function (<a href="#7.21.7.3">7.21.7.3</a>), the setbuf function
15792  (<a href="#7.21.5.5">7.21.5.5</a>), the setvbuf function (<a href="#7.21.5.6">7.21.5.6</a>), the fgetwc function (<a href="#7.28.3.1">7.28.3.1</a>), the
15793  fputwc function (<a href="#7.28.3.3">7.28.3.3</a>), conversion state (<a href="#7.28.6">7.28.6</a>), the mbrtowc function
15794  (<a href="#7.28.6.3.2">7.28.6.3.2</a>), the wcrtomb function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
15795
15796 <p><b>Footnotes</b>
15797 <p><small><a name="note261" href="#note261">261)</a> Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has
15798  undefined behavior for a binary stream (because of possible trailing null characters) or for any stream
15799  with state-dependent encoding that does not assuredly end in the initial shift state.
15800 </small>
15801
15802 <p><small><a href="#Contents">Contents</a></small>
15803 <h4><a name="7.21.4" href="#7.21.4">7.21.4 Operations on files</a></h4>
15804
15805 <p><small><a href="#Contents">Contents</a></small>
15806 <h5><a name="7.21.4.1" href="#7.21.4.1">7.21.4.1 The remove function</a></h5>
15807 <p><b>Synopsis</b>
15808 <p><!--para 1 -->
15809 <pre>
15810         #include <a href="#7.21">&lt;stdio.h&gt;</a>
15811         int remove(const char *filename);
15812 </pre>
15813 <p><b>Description</b>
15814 <p><!--para 2 -->
15815  The remove function causes the file whose name is the string pointed to by filename
15816  to be no longer accessible by that name. A subsequent attempt to open that file using that
15817  name will fail, unless it is created anew. If the file is open, the behavior of the remove
15818  function is implementation-defined.
15819 <p><b>Returns</b>
15820 <p><!--para 3 -->
15821  The remove function returns zero if the operation succeeds, nonzero if it fails.
15822
15823 <p><small><a href="#Contents">Contents</a></small>
15824 <h5><a name="7.21.4.2" href="#7.21.4.2">7.21.4.2 The rename function</a></h5>
15825 <p><b>Synopsis</b>
15826 <p><!--para 1 -->
15827 <pre>
15828         #include <a href="#7.21">&lt;stdio.h&gt;</a>
15829         int rename(const char *old, const char *new);
15830 </pre>
15831 <p><b>Description</b>
15832 <p><!--para 2 -->
15833  The rename function causes the file whose name is the string pointed to by old to be
15834  henceforth known by the name given by the string pointed to by new. The file named
15835  old is no longer accessible by that name. If a file named by the string pointed to by new
15836  exists prior to the call to the rename function, the behavior is implementation-defined.
15837 <!--page 321 -->
15838 <p><b>Returns</b>
15839 <p><!--para 3 -->
15840  The rename function returns zero if the operation succeeds, nonzero if it fails,<sup><a href="#note262"><b>262)</b></a></sup> in
15841  which case if the file existed previously it is still known by its original name.
15842
15843 <p><b>Footnotes</b>
15844 <p><small><a name="note262" href="#note262">262)</a> Among the reasons the implementation may cause the rename function to fail are that the file is open
15845  or that it is necessary to copy its contents to effectuate its renaming.
15846 </small>
15847
15848 <p><small><a href="#Contents">Contents</a></small>
15849 <h5><a name="7.21.4.3" href="#7.21.4.3">7.21.4.3 The tmpfile function</a></h5>
15850 <p><b>Synopsis</b>
15851 <p><!--para 1 -->
15852 <pre>
15853          #include <a href="#7.21">&lt;stdio.h&gt;</a>
15854          FILE *tmpfile(void);
15855 </pre>
15856 <p><b>Description</b>
15857 <p><!--para 2 -->
15858  The tmpfile function creates a temporary binary file that is different from any other
15859  existing file and that will automatically be removed when it is closed or at program
15860  termination. If the program terminates abnormally, whether an open temporary file is
15861  removed is implementation-defined. The file is opened for update with "wb+" mode.
15862 <p><b>Recommended practice</b>
15863 <p><!--para 3 -->
15864  It should be possible to open at least TMP_MAX temporary files during the lifetime of the
15865  program (this limit may be shared with tmpnam) and there should be no limit on the
15866  number simultaneously open other than this limit and any limit on the number of open
15867  files (FOPEN_MAX).
15868 <p><b>Returns</b>
15869 <p><!--para 4 -->
15870  The tmpfile function returns a pointer to the stream of the file that it created. If the file
15871  cannot be created, the tmpfile function returns a null pointer.
15872 <p><b> Forward references</b>: the fopen function (<a href="#7.21.5.3">7.21.5.3</a>).
15873
15874 <p><small><a href="#Contents">Contents</a></small>
15875 <h5><a name="7.21.4.4" href="#7.21.4.4">7.21.4.4 The tmpnam function</a></h5>
15876 <p><b>Synopsis</b>
15877 <p><!--para 1 -->
15878 <pre>
15879          #include <a href="#7.21">&lt;stdio.h&gt;</a>
15880          char *tmpnam(char *s);
15881 </pre>
15882 <p><b>Description</b>
15883 <p><!--para 2 -->
15884  The tmpnam function generates a string that is a valid file name and that is not the same
15885  as the name of an existing file.<sup><a href="#note263"><b>263)</b></a></sup> The function is potentially capable of generating at
15886  
15887  
15888 <!--page 322 -->
15889  least TMP_MAX different strings, but any or all of them may already be in use by existing
15890  files and thus not be suitable return values.
15891 <p><!--para 3 -->
15892  The tmpnam function generates a different string each time it is called.
15893 <p><!--para 4 -->
15894  Calls to the tmpnam function with a null pointer argument may introduce data races with
15895  each other. The implementation shall behave as if no library function calls the tmpnam
15896  function.
15897 <p><b>Returns</b>
15898 <p><!--para 5 -->
15899  If no suitable string can be generated, the tmpnam function returns a null pointer.
15900  Otherwise, if the argument is a null pointer, the tmpnam function leaves its result in an
15901  internal static object and returns a pointer to that object (subsequent calls to the tmpnam
15902  function may modify the same object). If the argument is not a null pointer, it is assumed
15903  to point to an array of at least L_tmpnam chars; the tmpnam function writes its result
15904  in that array and returns the argument as its value.
15905 <p><b>Environmental limits</b>
15906 <p><!--para 6 -->
15907  The value of the macro TMP_MAX shall be at least 25.
15908
15909 <p><b>Footnotes</b>
15910 <p><small><a name="note263" href="#note263">263)</a> Files created using strings generated by the tmpnam function are temporary only in the sense that
15911  their names should not collide with those generated by conventional naming rules for the
15912  implementation. It is still necessary to use the remove function to remove such files when their use
15913  is ended, and before program termination.
15914 </small>
15915
15916 <p><small><a href="#Contents">Contents</a></small>
15917 <h4><a name="7.21.5" href="#7.21.5">7.21.5 File access functions</a></h4>
15918
15919 <p><small><a href="#Contents">Contents</a></small>
15920 <h5><a name="7.21.5.1" href="#7.21.5.1">7.21.5.1 The fclose function</a></h5>
15921 <p><b>Synopsis</b>
15922 <p><!--para 1 -->
15923 <pre>
15924         #include <a href="#7.21">&lt;stdio.h&gt;</a>
15925         int fclose(FILE *stream);
15926 </pre>
15927 <p><b>Description</b>
15928 <p><!--para 2 -->
15929  A successful call to the fclose function causes the stream pointed to by stream to be
15930  flushed and the associated file to be closed. Any unwritten buffered data for the stream
15931  are delivered to the host environment to be written to the file; any unread buffered data
15932  are discarded. Whether or not the call succeeds, the stream is disassociated from the file
15933  and any buffer set by the setbuf or setvbuf function is disassociated from the stream
15934  (and deallocated if it was automatically allocated).
15935 <p><b>Returns</b>
15936 <p><!--para 3 -->
15937  The fclose function returns zero if the stream was successfully closed, or EOF if any
15938  errors were detected.
15939 <!--page 323 -->
15940
15941 <p><small><a href="#Contents">Contents</a></small>
15942 <h5><a name="7.21.5.2" href="#7.21.5.2">7.21.5.2 The fflush function</a></h5>
15943 <p><b>Synopsis</b>
15944 <p><!--para 1 -->
15945 <pre>
15946          #include <a href="#7.21">&lt;stdio.h&gt;</a>
15947          int fflush(FILE *stream);
15948 </pre>
15949 <p><b>Description</b>
15950 <p><!--para 2 -->
15951  If stream points to an output stream or an update stream in which the most recent
15952  operation was not input, the fflush function causes any unwritten data for that stream
15953  to be delivered to the host environment to be written to the file; otherwise, the behavior is
15954  undefined.
15955 <p><!--para 3 -->
15956  If stream is a null pointer, the fflush function performs this flushing action on all
15957  streams for which the behavior is defined above.
15958 <p><b>Returns</b>
15959 <p><!--para 4 -->
15960  The fflush function sets the error indicator for the stream and returns EOF if a write
15961  error occurs, otherwise it returns zero.
15962 <p><b> Forward references</b>: the fopen function (<a href="#7.21.5.3">7.21.5.3</a>).
15963
15964 <p><small><a href="#Contents">Contents</a></small>
15965 <h5><a name="7.21.5.3" href="#7.21.5.3">7.21.5.3 The fopen function</a></h5>
15966 <p><b>Synopsis</b>
15967 <p><!--para 1 -->
15968 <pre>
15969          #include <a href="#7.21">&lt;stdio.h&gt;</a>
15970          FILE *fopen(const char * restrict filename,
15971               const char * restrict mode);
15972 </pre>
15973 <p><b>Description</b>
15974 <p><!--para 2 -->
15975  The fopen function opens the file whose name is the string pointed to by filename,
15976  and associates a stream with it.
15977 <p><!--para 3 -->
15978  The argument mode points to a string. If the string is one of the following, the file is
15979  open in the indicated mode. Otherwise, the behavior is undefined.<sup><a href="#note264"><b>264)</b></a></sup>
15980  r                     open text file for reading
15981  w                     truncate to zero length or create text file for writing
15982  wx                    create text file for writing
15983  a                     append; open or create text file for writing at end-of-file
15984  rb                    open binary file for reading
15985  wb                    truncate to zero length or create binary file for writing
15986  
15987  
15988 <!--page 324 -->
15989  wbx               create binary file for writing
15990  ab                append; open or create binary file for writing at end-of-file
15991  r+                open text file for update (reading and writing)
15992  w+                truncate to zero length or create text file for update
15993  w+x               create text file for update
15994  a+                append; open or create text file for update, writing at end-of-file
15995  r+b or rb+        open binary file for update (reading and writing)
15996  w+b or wb+        truncate to zero length or create binary file for update
15997  w+bx or wb+x      create binary file for update
15998  a+b or ab+        append; open or create binary file for update, writing at end-of-file
15999 <p><!--para 4 -->
16000  Opening a file with read mode ('r' as the first character in the mode argument) fails if
16001  the file does not exist or cannot be read.
16002 <p><!--para 5 -->
16003  Opening a file with exclusive mode ('x' as the last character in the mode argument)
16004  fails if the file already exists or cannot be created. Otherwise, the file is created with
16005  exclusive (also known as non-shared) access to the extent that the underlying system
16006  supports exclusive access.
16007 <p><!--para 6 -->
16008  Opening a file with append mode ('a' as the first character in the mode argument)
16009  causes all subsequent writes to the file to be forced to the then current end-of-file,
16010  regardless of intervening calls to the fseek function. In some implementations, opening
16011  a binary file with append mode ('b' as the second or third character in the above list of
16012  mode argument values) may initially position the file position indicator for the stream
16013  beyond the last data written, because of null character padding.
16014 <p><!--para 7 -->
16015  When a file is opened with update mode ('+' as the second or third character in the
16016  above list of mode argument values), both input and output may be performed on the
16017  associated stream. However, output shall not be directly followed by input without an
16018  intervening call to the fflush function or to a file positioning function (fseek,
16019  fsetpos, or rewind), and input shall not be directly followed by output without an
16020  intervening call to a file positioning function, unless the input operation encounters end-
16021  of-file. Opening (or creating) a text file with update mode may instead open (or create) a
16022  binary stream in some implementations.
16023 <p><!--para 8 -->
16024  When opened, a stream is fully buffered if and only if it can be determined not to refer to
16025  an interactive device. The error and end-of-file indicators for the stream are cleared.
16026 <p><b>Returns</b>
16027 <p><!--para 9 -->
16028  The fopen function returns a pointer to the object controlling the stream. If the open
16029  operation fails, fopen returns a null pointer.
16030 <p><b> Forward references</b>: file positioning functions (<a href="#7.21.9">7.21.9</a>).
16031 <!--page 325 -->
16032
16033 <p><b>Footnotes</b>
16034 <p><small><a name="note264" href="#note264">264)</a> If the string begins with one of the above sequences, the implementation might choose to ignore the
16035  remaining characters, or it might use them to select different kinds of a file (some of which might not
16036  conform to the properties in <a href="#7.21.2">7.21.2</a>).
16037 </small>
16038
16039 <p><small><a href="#Contents">Contents</a></small>
16040 <h5><a name="7.21.5.4" href="#7.21.5.4">7.21.5.4 The freopen function</a></h5>
16041 <p><b>Synopsis</b>
16042 <p><!--para 1 -->
16043 <pre>
16044          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16045          FILE *freopen(const char * restrict filename,
16046               const char * restrict mode,
16047               FILE * restrict stream);
16048 </pre>
16049 <p><b>Description</b>
16050 <p><!--para 2 -->
16051  The freopen function opens the file whose name is the string pointed to by filename
16052  and associates the stream pointed to by stream with it. The mode argument is used just
16053  as in the fopen function.<sup><a href="#note265"><b>265)</b></a></sup>
16054 <p><!--para 3 -->
16055  If filename is a null pointer, the freopen function attempts to change the mode of
16056  the stream to that specified by mode, as if the name of the file currently associated with
16057  the stream had been used. It is implementation-defined which changes of mode are
16058  permitted (if any), and under what circumstances.
16059 <p><!--para 4 -->
16060  The freopen function first attempts to close any file that is associated with the specified
16061  stream. Failure to close the file is ignored. The error and end-of-file indicators for the
16062  stream are cleared.
16063 <p><b>Returns</b>
16064 <p><!--para 5 -->
16065  The freopen function returns a null pointer if the open operation fails. Otherwise,
16066  freopen returns the value of stream.
16067
16068 <p><b>Footnotes</b>
16069 <p><small><a name="note265" href="#note265">265)</a> The primary use of the freopen function is to change the file associated with a standard text stream
16070  (stderr, stdin, or stdout), as those identifiers need not be modifiable lvalues to which the value
16071  returned by the fopen function may be assigned.
16072 </small>
16073
16074 <p><small><a href="#Contents">Contents</a></small>
16075 <h5><a name="7.21.5.5" href="#7.21.5.5">7.21.5.5 The setbuf function</a></h5>
16076 <p><b>Synopsis</b>
16077 <p><!--para 1 -->
16078 <pre>
16079          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16080          void setbuf(FILE * restrict stream,
16081               char * restrict buf);
16082 </pre>
16083 <p><b>Description</b>
16084 <p><!--para 2 -->
16085  Except that it returns no value, the setbuf function is equivalent to the setvbuf
16086  function invoked with the values _IOFBF for mode and BUFSIZ for size, or (if buf
16087  is a null pointer), with the value _IONBF for mode.
16088  
16089  
16090  
16091  
16092 <!--page 326 -->
16093 <p><b>Returns</b>
16094 <p><!--para 3 -->
16095  The setbuf function returns no value.
16096 <p><b> Forward references</b>: the setvbuf function (<a href="#7.21.5.6">7.21.5.6</a>).
16097
16098 <p><small><a href="#Contents">Contents</a></small>
16099 <h5><a name="7.21.5.6" href="#7.21.5.6">7.21.5.6 The setvbuf function</a></h5>
16100 <p><b>Synopsis</b>
16101 <p><!--para 1 -->
16102 <pre>
16103          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16104          int setvbuf(FILE * restrict stream,
16105               char * restrict buf,
16106               int mode, size_t size);
16107 </pre>
16108 <p><b>Description</b>
16109 <p><!--para 2 -->
16110  The setvbuf function may be used only after the stream pointed to by stream has
16111  been associated with an open file and before any other operation (other than an
16112  unsuccessful call to setvbuf) is performed on the stream. The argument mode
16113  determines how stream will be buffered, as follows: _IOFBF causes input/output to be
16114  fully buffered; _IOLBF causes input/output to be line buffered; _IONBF causes
16115  input/output to be unbuffered. If buf is not a null pointer, the array it points to may be
16116  used instead of a buffer allocated by the setvbuf function<sup><a href="#note266"><b>266)</b></a></sup> and the argument size
16117  specifies the size of the array; otherwise, size may determine the size of a buffer
16118  allocated by the setvbuf function. The contents of the array at any time are
16119  indeterminate.
16120 <p><b>Returns</b>
16121 <p><!--para 3 -->
16122  The setvbuf function returns zero on success, or nonzero if an invalid value is given
16123  for mode or if the request cannot be honored.
16124  
16125  
16126  
16127  
16128 <!--page 327 -->
16129
16130 <p><b>Footnotes</b>
16131 <p><small><a name="note266" href="#note266">266)</a> The buffer has to have a lifetime at least as great as the open stream, so the stream should be closed
16132  before a buffer that has automatic storage duration is deallocated upon block exit.
16133 </small>
16134
16135 <p><small><a href="#Contents">Contents</a></small>
16136 <h4><a name="7.21.6" href="#7.21.6">7.21.6 Formatted input/output functions</a></h4>
16137 <p><!--para 1 -->
16138  The formatted input/output functions shall behave as if there is a sequence point after the
16139  actions associated with each specifier.<sup><a href="#note267"><b>267)</b></a></sup>
16140
16141 <p><b>Footnotes</b>
16142 <p><small><a name="note267" href="#note267">267)</a> The fprintf functions perform writes to memory for the %n specifier.
16143 </small>
16144
16145 <p><small><a href="#Contents">Contents</a></small>
16146 <h5><a name="7.21.6.1" href="#7.21.6.1">7.21.6.1 The fprintf function</a></h5>
16147 <p><b>Synopsis</b>
16148 <p><!--para 1 -->
16149 <pre>
16150           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16151           int fprintf(FILE * restrict stream,
16152                const char * restrict format, ...);
16153 </pre>
16154 <p><b>Description</b>
16155 <p><!--para 2 -->
16156  The fprintf function writes output to the stream pointed to by stream, under control
16157  of the string pointed to by format that specifies how subsequent arguments are
16158  converted for output. If there are insufficient arguments for the format, the behavior is
16159  undefined. If the format is exhausted while arguments remain, the excess arguments are
16160  evaluated (as always) but are otherwise ignored. The fprintf function returns when
16161  the end of the format string is encountered.
16162 <p><!--para 3 -->
16163  The format shall be a multibyte character sequence, beginning and ending in its initial
16164  shift state. The format is composed of zero or more directives: ordinary multibyte
16165  characters (not %), which are copied unchanged to the output stream; and conversion
16166  specifications, each of which results in fetching zero or more subsequent arguments,
16167  converting them, if applicable, according to the corresponding conversion specifier, and
16168  then writing the result to the output stream.
16169 <p><!--para 4 -->
16170  Each conversion specification is introduced by the character %. After the %, the following
16171  appear in sequence:
16172 <ul>
16173 <li>  Zero or more flags (in any order) that modify the meaning of the conversion
16174  specification.
16175 <li>  An optional minimum field width. If the converted value has fewer characters than the
16176  field width, it is padded with spaces (by default) on the left (or right, if the left
16177  adjustment flag, described later, has been given) to the field width. The field width
16178  takes the form of an asterisk * (described later) or a nonnegative decimal integer.<sup><a href="#note268"><b>268)</b></a></sup>
16179 <li>  An optional precision that gives the minimum number of digits to appear for the d, i,
16180  o, u, x, and X conversions, the number of digits to appear after the decimal-point
16181  character for a, A, e, E, f, and F conversions, the maximum number of significant
16182  digits for the g and G conversions, or the maximum number of bytes to be written for
16183  
16184  
16185 <!--page 328 -->
16186    s conversions. The precision takes the form of a period (.) followed either by an
16187    asterisk * (described later) or by an optional decimal integer; if only the period is
16188    specified, the precision is taken as zero. If a precision appears with any other
16189    conversion specifier, the behavior is undefined.
16190 <li>  An optional length modifier that specifies the size of the argument.
16191 <li>  A conversion specifier character that specifies the type of conversion to be applied.
16192 </ul>
16193 <p><!--para 5 -->
16194  As noted above, a field width, or precision, or both, may be indicated by an asterisk. In
16195  this case, an int argument supplies the field width or precision. The arguments
16196  specifying field width, or precision, or both, shall appear (in that order) before the
16197  argument (if any) to be converted. A negative field width argument is taken as a - flag
16198  followed by a positive field width. A negative precision argument is taken as if the
16199  precision were omitted.
16200 <p><!--para 6 -->
16201  The flag characters and their meanings are:
16202  -       The result of the conversion is left-justified within the field. (It is right-justified if
16203 <pre>
16204          this flag is not specified.)
16205 </pre>
16206  +       The result of a signed conversion always begins with a plus or minus sign. (It
16207 <pre>
16208          begins with a sign only when a negative value is converted if this flag is not
16209          specified.)<sup><a href="#note269"><b>269)</b></a></sup>
16210 </pre>
16211  space If the first character of a signed conversion is not a sign, or if a signed conversion
16212 <pre>
16213        results in no characters, a space is prefixed to the result. If the space and + flags
16214        both appear, the space flag is ignored.
16215 </pre>
16216  #       The result is converted to an ''alternative form''. For o conversion, it increases
16217 <pre>
16218          the precision, if and only if necessary, to force the first digit of the result to be a
16219          zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
16220          conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,
16221          and G conversions, the result of converting a floating-point number always
16222          contains a decimal-point character, even if no digits follow it. (Normally, a
16223          decimal-point character appears in the result of these conversions only if a digit
16224          follows it.) For g and G conversions, trailing zeros are not removed from the
16225          result. For other conversions, the behavior is undefined.
16226 </pre>
16227  0       For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros
16228 <pre>
16229          (following any indication of sign or base) are used to pad to the field width rather
16230          than performing space padding, except when converting an infinity or NaN. If the
16231          0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X
16232 </pre>
16233  
16234  
16235 <!--page 329 -->
16236 <pre>
16237            conversions, if a precision is specified, the 0 flag is ignored. For other
16238            conversions, the behavior is undefined.
16239 </pre>
16240 <p><!--para 7 -->
16241  The length modifiers and their meanings are:
16242  hh            Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16243 <pre>
16244                signed char or unsigned char argument (the argument will have
16245                been promoted according to the integer promotions, but its value shall be
16246                converted to signed char or unsigned char before printing); or that
16247                a following n conversion specifier applies to a pointer to a signed char
16248                argument.
16249 </pre>
16250  h             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16251 <pre>
16252                short int or unsigned short int argument (the argument will
16253                have been promoted according to the integer promotions, but its value shall
16254                be converted to short int or unsigned short int before printing);
16255                or that a following n conversion specifier applies to a pointer to a short
16256                int argument.
16257 </pre>
16258  l (ell)       Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16259 <pre>
16260                long int or unsigned long int argument; that a following n
16261                conversion specifier applies to a pointer to a long int argument; that a
16262                following c conversion specifier applies to a wint_t argument; that a
16263                following s conversion specifier applies to a pointer to a wchar_t
16264                argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
16265                specifier.
16266 </pre>
16267  ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16268 <pre>
16269               long long int or unsigned long long int argument; or that a
16270               following n conversion specifier applies to a pointer to a long long int
16271               argument.
16272 </pre>
16273  j             Specifies that a following d, i, o, u, x, or X conversion specifier applies to
16274 <pre>
16275                an intmax_t or uintmax_t argument; or that a following n conversion
16276                specifier applies to a pointer to an intmax_t argument.
16277 </pre>
16278  z             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16279 <pre>
16280                size_t or the corresponding signed integer type argument; or that a
16281                following n conversion specifier applies to a pointer to a signed integer type
16282                corresponding to size_t argument.
16283 </pre>
16284  t             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16285 <!--page 330 -->
16286 <pre>
16287                ptrdiff_t or the corresponding unsigned integer type argument; or that a
16288                following n conversion specifier applies to a pointer to a ptrdiff_t
16289                argument.
16290 </pre>
16291  L              Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
16292 <pre>
16293                 applies to a long double argument.
16294 </pre>
16295  If a length modifier appears with any conversion specifier other than as specified above,
16296  the behavior is undefined.
16297 <p><!--para 8 -->
16298  The conversion specifiers and their meanings are:
16299  d,i          The int argument is converted to signed decimal in the style [-]dddd. The
16300 <pre>
16301               precision specifies the minimum number of digits to appear; if the value
16302               being converted can be represented in fewer digits, it is expanded with
16303               leading zeros. The default precision is 1. The result of converting a zero
16304               value with a precision of zero is no characters.
16305 </pre>
16306  o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned
16307 <pre>
16308          decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the
16309          letters abcdef are used for x conversion and the letters ABCDEF for X
16310          conversion. The precision specifies the minimum number of digits to appear;
16311          if the value being converted can be represented in fewer digits, it is expanded
16312          with leading zeros. The default precision is 1. The result of converting a
16313          zero value with a precision of zero is no characters.
16314 </pre>
16315  f,F          A double argument representing a floating-point number is converted to
16316 <pre>
16317               decimal notation in the style [-]ddd.ddd, where the number of digits after
16318               the decimal-point character is equal to the precision specification. If the
16319               precision is missing, it is taken as 6; if the precision is zero and the # flag is
16320               not specified, no decimal-point character appears. If a decimal-point
16321               character appears, at least one digit appears before it. The value is rounded to
16322               the appropriate number of digits.
16323               A double argument representing an infinity is converted in one of the styles
16324               [-]inf or [-]infinity -- which style is implementation-defined. A
16325               double argument representing a NaN is converted in one of the styles
16326               [-]nan or [-]nan(n-char-sequence) -- which style, and the meaning of
16327               any n-char-sequence, is implementation-defined. The F conversion specifier
16328               produces INF, INFINITY, or NAN instead of inf, infinity, or nan,
16329               respectively.<sup><a href="#note270"><b>270)</b></a></sup>
16330 </pre>
16331  e,E          A double argument representing a floating-point number is converted in the
16332 <pre>
16333               style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
16334               argument is nonzero) before the decimal-point character and the number of
16335               digits after it is equal to the precision; if the precision is missing, it is taken as
16336 </pre>
16337  
16338  
16339 <!--page 331 -->
16340 <pre>
16341                6; if the precision is zero and the # flag is not specified, no decimal-point
16342                character appears. The value is rounded to the appropriate number of digits.
16343                The E conversion specifier produces a number with E instead of e
16344                introducing the exponent. The exponent always contains at least two digits,
16345                and only as many more digits as necessary to represent the exponent. If the
16346                value is zero, the exponent is zero.
16347                A double argument representing an infinity or NaN is converted in the style
16348                of an f or F conversion specifier.
16349 </pre>
16350  g,G           A double argument representing a floating-point number is converted in
16351 <pre>
16352                style f or e (or in style F or E in the case of a G conversion specifier),
16353                depending on the value converted and the precision. Let P equal the
16354                precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero.
16355                Then, if a conversion with style E would have an exponent of X:
16356                -- if P &gt; X &gt;= -4, the conversion is with style f (or F) and precision
16357                  P - (X + 1).
16358                -- otherwise, the conversion is with style e (or E) and precision P - 1.
16359                Finally, unless the # flag is used, any trailing zeros are removed from the
16360                fractional portion of the result and the decimal-point character is removed if
16361                there is no fractional portion remaining.
16362                A double argument representing an infinity or NaN is converted in the style
16363                of an f or F conversion specifier.
16364 </pre>
16365  a,A           A double argument representing a floating-point number is converted in the
16366 <pre>
16367                style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
16368                nonzero if the argument is a normalized floating-point number and is
16369                otherwise unspecified) before the decimal-point character<sup><a href="#note271"><b>271)</b></a></sup> and the number
16370                of hexadecimal digits after it is equal to the precision; if the precision is
16371                missing and FLT_RADIX is a power of 2, then the precision is sufficient for
16372                an exact representation of the value; if the precision is missing and
16373                FLT_RADIX is not a power of 2, then the precision is sufficient to
16374 </pre>
16375  
16376  
16377  
16378  
16379 <!--page 332 -->
16380 <pre>
16381                distinguish<sup><a href="#note272"><b>272)</b></a></sup> values of type double, except that trailing zeros may be
16382                omitted; if the precision is zero and the # flag is not specified, no decimal-
16383                point character appears. The letters abcdef are used for a conversion and
16384                the letters ABCDEF for A conversion. The A conversion specifier produces a
16385                number with X and P instead of x and p. The exponent always contains at
16386                least one digit, and only as many more digits as necessary to represent the
16387                decimal exponent of 2. If the value is zero, the exponent is zero.
16388                A double argument representing an infinity or NaN is converted in the style
16389                of an f or F conversion specifier.
16390 </pre>
16391  c             If no l length modifier is present, the int argument is converted to an
16392 <pre>
16393                unsigned char, and the resulting character is written.
16394                If an l length modifier is present, the wint_t argument is converted as if by
16395                an ls conversion specification with no precision and an argument that points
16396                to the initial element of a two-element array of wchar_t, the first element
16397                containing the wint_t argument to the lc conversion specification and the
16398                second a null wide character.
16399 </pre>
16400  s             If no l length modifier is present, the argument shall be a pointer to the initial
16401 <pre>
16402                element of an array of character type.<sup><a href="#note273"><b>273)</b></a></sup> Characters from the array are
16403                written up to (but not including) the terminating null character. If the
16404                precision is specified, no more than that many bytes are written. If the
16405                precision is not specified or is greater than the size of the array, the array shall
16406                contain a null character.
16407                If an l length modifier is present, the argument shall be a pointer to the initial
16408                element of an array of wchar_t type. Wide characters from the array are
16409                converted to multibyte characters (each as if by a call to the wcrtomb
16410                function, with the conversion state described by an mbstate_t object
16411                initialized to zero before the first wide character is converted) up to and
16412                including a terminating null wide character. The resulting multibyte
16413                characters are written up to (but not including) the terminating null character
16414                (byte). If no precision is specified, the array shall contain a null wide
16415                character. If a precision is specified, no more than that many bytes are
16416                written (including shift sequences, if any), and the array shall contain a null
16417                wide character if, to equal the multibyte character sequence length given by
16418 </pre>
16419  
16420 <!--page 333 -->
16421 <pre>
16422                 the precision, the function would need to access a wide character one past the
16423                 end of the array. In no case is a partial multibyte character written.<sup><a href="#note274"><b>274)</b></a></sup>
16424 </pre>
16425  p              The argument shall be a pointer to void. The value of the pointer is
16426 <pre>
16427                 converted to a sequence of printing characters, in an implementation-defined
16428                 manner.
16429 </pre>
16430  n              The argument shall be a pointer to signed integer into which is written the
16431 <pre>
16432                 number of characters written to the output stream so far by this call to
16433                 fprintf. No argument is converted, but one is consumed. If the conversion
16434                 specification includes any flags, a field width, or a precision, the behavior is
16435                 undefined.
16436 </pre>
16437  %              A % character is written. No argument is converted. The complete
16438 <pre>
16439                 conversion specification shall be %%.
16440 </pre>
16441 <p><!--para 9 -->
16442  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note275"><b>275)</b></a></sup> If any argument is
16443  not the correct type for the corresponding conversion specification, the behavior is
16444  undefined.
16445 <p><!--para 10 -->
16446  In no case does a nonexistent or small field width cause truncation of a field; if the result
16447  of a conversion is wider than the field width, the field is expanded to contain the
16448  conversion result.
16449 <p><!--para 11 -->
16450  For a and A conversions, if FLT_RADIX is a power of 2, the value is correctly rounded
16451  to a hexadecimal floating number with the given precision.
16452 <p><b>Recommended practice</b>
16453 <p><!--para 12 -->
16454  For a and A conversions, if FLT_RADIX is not a power of 2 and the result is not exactly
16455  representable in the given precision, the result should be one of the two adjacent numbers
16456  in hexadecimal floating style with the given precision, with the extra stipulation that the
16457  error should have a correct sign for the current rounding direction.
16458 <p><!--para 13 -->
16459  For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
16460  DECIMAL_DIG, then the result should be correctly rounded.<sup><a href="#note276"><b>276)</b></a></sup> If the number of
16461  significant decimal digits is more than DECIMAL_DIG but the source value is exactly
16462  representable with DECIMAL_DIG digits, then the result should be an exact
16463  representation with trailing zeros. Otherwise, the source value is bounded by two
16464  adjacent decimal strings L &lt; U, both having DECIMAL_DIG significant digits; the value
16465  
16466  
16467 <!--page 334 -->
16468  of the resultant decimal string D should satisfy L &lt;= D &lt;= U, with the extra stipulation that
16469  the error should have a correct sign for the current rounding direction.
16470 <p><b>Returns</b>
16471 <p><!--para 14 -->
16472  The fprintf function returns the number of characters transmitted, or a negative value
16473  if an output or encoding error occurred.
16474 <p><b>Environmental limits</b>
16475 <p><!--para 15 -->
16476  The number of characters that can be produced by any single conversion shall be at least
16477  4095.
16478 <p><!--para 16 -->
16479  EXAMPLE 1         To print a date and time in the form ''Sunday, July 3, 10:02'' followed by pi to five decimal
16480  places:
16481 <pre>
16482           #include <a href="#7.12">&lt;math.h&gt;</a>
16483           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16484           /* ... */
16485           char *weekday, *month;      // pointers to strings
16486           int day, hour, min;
16487           fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
16488                   weekday, month, day, hour, min);
16489           fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));
16490 </pre>
16491  
16492 <p><!--para 17 -->
16493  EXAMPLE 2 In this example, multibyte characters do not have a state-dependent encoding, and the
16494  members of the extended character set that consist of more than one byte each consist of exactly two bytes,
16495  the first of which is denoted here by a and the second by an uppercase letter.
16496 <p><!--para 18 -->
16497  Given the following wide string with length seven,
16498 <pre>
16499           static wchar_t wstr[] = L" X Yabc Z W";
16500 </pre>
16501  the seven calls
16502 <pre>
16503           fprintf(stdout,          "|1234567890123|\n");
16504           fprintf(stdout,          "|%13ls|\n", wstr);
16505           fprintf(stdout,          "|%-13.9ls|\n", wstr);
16506           fprintf(stdout,          "|%13.10ls|\n", wstr);
16507           fprintf(stdout,          "|%13.11ls|\n", wstr);
16508           fprintf(stdout,          "|%13.15ls|\n", &amp;wstr[2]);
16509           fprintf(stdout,          "|%13lc|\n", (wint_t) wstr[5]);
16510 </pre>
16511  will print the following seven lines:
16512 <pre>
16513           |1234567890123|
16514           |   X Yabc Z W|
16515           | X Yabc Z    |
16516           |     X Yabc Z|
16517           |   X Yabc Z W|
16518           |      abc Z W|
16519           |            Z|
16520 </pre>
16521  
16522 <p><b> Forward references</b>: conversion state (<a href="#7.28.6">7.28.6</a>), the wcrtomb function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
16523 <!--page 335 -->
16524
16525 <p><b>Footnotes</b>
16526 <p><small><a name="note268" href="#note268">268)</a> Note that 0 is taken as a flag, not as the beginning of a field width.
16527 </small>
16528 <p><small><a name="note269" href="#note269">269)</a> The results of all floating conversions of a negative zero, and of negative values that round to zero,
16529  include a minus sign.
16530 </small>
16531 <p><small><a name="note270" href="#note270">270)</a> When applied to infinite and NaN values, the -, +, and space flag characters have their usual meaning;
16532  the # and 0 flag characters have no effect.
16533 </small>
16534 <p><small><a name="note271" href="#note271">271)</a> Binary implementations can choose the hexadecimal digit to the left of the decimal-point character so
16535  that subsequent digits align to nibble (4-bit) boundaries.
16536 </small>
16537 <p><small><a name="note272" href="#note272">272)</a> The precision p is sufficient to distinguish values of the source type if 16 p-1 &gt; b n where b is
16538  FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
16539  might suffice depending on the implementation's scheme for determining the digit to the left of the
16540  decimal-point character.
16541 </small>
16542 <p><small><a name="note273" href="#note273">273)</a> No special provisions are made for multibyte characters.
16543 </small>
16544 <p><small><a name="note274" href="#note274">274)</a> Redundant shift sequences may result if multibyte characters have a state-dependent encoding.
16545 </small>
16546 <p><small><a name="note275" href="#note275">275)</a> See ''future library directions'' (<a href="#7.30.9">7.30.9</a>).
16547 </small>
16548 <p><small><a name="note276" href="#note276">276)</a> For binary-to-decimal conversion, the result format's values are the numbers representable with the
16549  given format specifier. The number of significant digits is determined by the format specifier, and in
16550  the case of fixed-point conversion by the source value as well.
16551 </small>
16552
16553 <p><small><a href="#Contents">Contents</a></small>
16554 <h5><a name="7.21.6.2" href="#7.21.6.2">7.21.6.2 The fscanf function</a></h5>
16555 <p><b>Synopsis</b>
16556 <p><!--para 1 -->
16557 <pre>
16558          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16559          int fscanf(FILE * restrict stream,
16560               const char * restrict format, ...);
16561 </pre>
16562 <p><b>Description</b>
16563 <p><!--para 2 -->
16564  The fscanf function reads input from the stream pointed to by stream, under control
16565  of the string pointed to by format that specifies the admissible input sequences and how
16566  they are to be converted for assignment, using subsequent arguments as pointers to the
16567  objects to receive the converted input. If there are insufficient arguments for the format,
16568  the behavior is undefined. If the format is exhausted while arguments remain, the excess
16569  arguments are evaluated (as always) but are otherwise ignored.
16570 <p><!--para 3 -->
16571  The format shall be a multibyte character sequence, beginning and ending in its initial
16572  shift state. The format is composed of zero or more directives: one or more white-space
16573  characters, an ordinary multibyte character (neither % nor a white-space character), or a
16574  conversion specification. Each conversion specification is introduced by the character %.
16575  After the %, the following appear in sequence:
16576 <ul>
16577 <li>  An optional assignment-suppressing character *.
16578 <li>  An optional decimal integer greater than zero that specifies the maximum field width
16579  (in characters).
16580 <li>  An optional length modifier that specifies the size of the receiving object.
16581 <li>  A conversion specifier character that specifies the type of conversion to be applied.
16582 </ul>
16583 <p><!--para 4 -->
16584  The fscanf function executes each directive of the format in turn. When all directives
16585  have been executed, or if a directive fails (as detailed below), the function returns.
16586  Failures are described as input failures (due to the occurrence of an encoding error or the
16587  unavailability of input characters), or matching failures (due to inappropriate input).
16588 <p><!--para 5 -->
16589  A directive composed of white-space character(s) is executed by reading input up to the
16590  first non-white-space character (which remains unread), or until no more characters can
16591  be read.
16592 <p><!--para 6 -->
16593  A directive that is an ordinary multibyte character is executed by reading the next
16594  characters of the stream. If any of those characters differ from the ones composing the
16595  directive, the directive fails and the differing and subsequent characters remain unread.
16596  Similarly, if end-of-file, an encoding error, or a read error prevents a character from being
16597  read, the directive fails.
16598 <p><!--para 7 -->
16599  A directive that is a conversion specification defines a set of matching input sequences, as
16600  described below for each specifier. A conversion specification is executed in the
16601 <!--page 336 -->
16602  following steps:
16603 <p><!--para 8 -->
16604  Input white-space characters (as specified by the isspace function) are skipped, unless
16605  the specification includes a [, c, or n specifier.<sup><a href="#note277"><b>277)</b></a></sup>
16606 <p><!--para 9 -->
16607  An input item is read from the stream, unless the specification includes an n specifier. An
16608  input item is defined as the longest sequence of input characters which does not exceed
16609  any specified field width and which is, or is a prefix of, a matching input sequence.<sup><a href="#note278"><b>278)</b></a></sup>
16610  The first character, if any, after the input item remains unread. If the length of the input
16611  item is zero, the execution of the directive fails; this condition is a matching failure unless
16612  end-of-file, an encoding error, or a read error prevented input from the stream, in which
16613  case it is an input failure.
16614 <p><!--para 10 -->
16615  Except in the case of a % specifier, the input item (or, in the case of a %n directive, the
16616  count of input characters) is converted to a type appropriate to the conversion specifier. If
16617  the input item is not a matching sequence, the execution of the directive fails: this
16618  condition is a matching failure. Unless assignment suppression was indicated by a *, the
16619  result of the conversion is placed in the object pointed to by the first argument following
16620  the format argument that has not already received a conversion result. If this object
16621  does not have an appropriate type, or if the result of the conversion cannot be represented
16622  in the object, the behavior is undefined.
16623 <p><!--para 11 -->
16624  The length modifiers and their meanings are:
16625  hh             Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16626 <pre>
16627                 to an argument with type pointer to signed char or unsigned char.
16628 </pre>
16629  h              Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16630 <pre>
16631                 to an argument with type pointer to short int or unsigned short
16632                 int.
16633 </pre>
16634  l (ell)        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16635 <pre>
16636                 to an argument with type pointer to long int or unsigned long
16637                 int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to
16638                 an argument with type pointer to double; or that a following c, s, or [
16639                 conversion specifier applies to an argument with type pointer to wchar_t.
16640 </pre>
16641  ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16642 <pre>
16643               to an argument with type pointer to long long int or unsigned
16644               long long int.
16645 </pre>
16646  
16647  
16648  
16649 <!--page 337 -->
16650  j            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16651 <pre>
16652               to an argument with type pointer to intmax_t or uintmax_t.
16653 </pre>
16654  z            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16655 <pre>
16656               to an argument with type pointer to size_t or the corresponding signed
16657               integer type.
16658 </pre>
16659  t            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16660 <pre>
16661               to an argument with type pointer to ptrdiff_t or the corresponding
16662               unsigned integer type.
16663 </pre>
16664  L            Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
16665 <pre>
16666               applies to an argument with type pointer to long double.
16667 </pre>
16668  If a length modifier appears with any conversion specifier other than as specified above,
16669  the behavior is undefined.
16670 <p><!--para 12 -->
16671  The conversion specifiers and their meanings are:
16672  d           Matches an optionally signed decimal integer, whose format is the same as
16673 <pre>
16674              expected for the subject sequence of the strtol function with the value 10
16675              for the base argument. The corresponding argument shall be a pointer to
16676              signed integer.
16677 </pre>
16678  i           Matches an optionally signed integer, whose format is the same as expected
16679 <pre>
16680              for the subject sequence of the strtol function with the value 0 for the
16681              base argument. The corresponding argument shall be a pointer to signed
16682              integer.
16683 </pre>
16684  o           Matches an optionally signed octal integer, whose format is the same as
16685 <pre>
16686              expected for the subject sequence of the strtoul function with the value 8
16687              for the base argument. The corresponding argument shall be a pointer to
16688              unsigned integer.
16689 </pre>
16690  u           Matches an optionally signed decimal integer, whose format is the same as
16691 <pre>
16692              expected for the subject sequence of the strtoul function with the value 10
16693              for the base argument. The corresponding argument shall be a pointer to
16694              unsigned integer.
16695 </pre>
16696  x           Matches an optionally signed hexadecimal integer, whose format is the same
16697 <pre>
16698              as expected for the subject sequence of the strtoul function with the value
16699              16 for the base argument. The corresponding argument shall be a pointer to
16700              unsigned integer.
16701 </pre>
16702  a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
16703 <!--page 338 -->
16704 <pre>
16705          format is the same as expected for the subject sequence of the strtod
16706          function. The corresponding argument shall be a pointer to floating.
16707 </pre>
16708  c             Matches a sequence of characters of exactly the number specified by the field
16709 <pre>
16710                width (1 if no field width is present in the directive).<sup><a href="#note279"><b>279)</b></a></sup>
16711                If no l length modifier is present, the corresponding argument shall be a
16712                pointer to the initial element of a character array large enough to accept the
16713                sequence. No null character is added.
16714                If an l length modifier is present, the input shall be a sequence of multibyte
16715                characters that begins in the initial shift state. Each multibyte character in the
16716                sequence is converted to a wide character as if by a call to the mbrtowc
16717                function, with the conversion state described by an mbstate_t object
16718                initialized to zero before the first multibyte character is converted. The
16719                corresponding argument shall be a pointer to the initial element of an array of
16720                wchar_t large enough to accept the resulting sequence of wide characters.
16721                No null wide character is added.
16722 </pre>
16723  s             Matches a sequence of non-white-space characters.<sup><a href="#note279"><b>279)</b></a></sup>
16724 <pre>
16725                If no l length modifier is present, the corresponding argument shall be a
16726                pointer to the initial element of a character array large enough to accept the
16727                sequence and a terminating null character, which will be added automatically.
16728                If an l length modifier is present, the input shall be a sequence of multibyte
16729                characters that begins in the initial shift state. Each multibyte character is
16730                converted to a wide character as if by a call to the mbrtowc function, with
16731                the conversion state described by an mbstate_t object initialized to zero
16732                before the first multibyte character is converted. The corresponding argument
16733                shall be a pointer to the initial element of an array of wchar_t large enough
16734                to accept the sequence and the terminating null wide character, which will be
16735                added automatically.
16736 </pre>
16737  [             Matches a nonempty sequence of characters from a set of expected characters
16738 <pre>
16739                (the scanset).<sup><a href="#note279"><b>279)</b></a></sup>
16740                If no l length modifier is present, the corresponding argument shall be a
16741                pointer to the initial element of a character array large enough to accept the
16742                sequence and a terminating null character, which will be added automatically.
16743                If an l length modifier is present, the input shall be a sequence of multibyte
16744                characters that begins in the initial shift state. Each multibyte character is
16745                converted to a wide character as if by a call to the mbrtowc function, with
16746                the conversion state described by an mbstate_t object initialized to zero
16747 </pre>
16748  
16749 <!--page 339 -->
16750 <pre>
16751                 before the first multibyte character is converted. The corresponding argument
16752                 shall be a pointer to the initial element of an array of wchar_t large enough
16753                 to accept the sequence and the terminating null wide character, which will be
16754                 added automatically.
16755                 The conversion specifier includes all subsequent characters in the format
16756                 string, up to and including the matching right bracket (]). The characters
16757                 between the brackets (the scanlist) compose the scanset, unless the character
16758                 after the left bracket is a circumflex (^), in which case the scanset contains all
16759                 characters that do not appear in the scanlist between the circumflex and the
16760                 right bracket. If the conversion specifier begins with [] or [^], the right
16761                 bracket character is in the scanlist and the next following right bracket
16762                 character is the matching right bracket that ends the specification; otherwise
16763                 the first following right bracket character is the one that ends the
16764                 specification. If a - character is in the scanlist and is not the first, nor the
16765                 second where the first character is a ^, nor the last character, the behavior is
16766                 implementation-defined.
16767 </pre>
16768  p              Matches an implementation-defined set of sequences, which should be the
16769 <pre>
16770                 same as the set of sequences that may be produced by the %p conversion of
16771                 the fprintf function. The corresponding argument shall be a pointer to a
16772                 pointer to void. The input item is converted to a pointer value in an
16773                 implementation-defined manner. If the input item is a value converted earlier
16774                 during the same program execution, the pointer that results shall compare
16775                 equal to that value; otherwise the behavior of the %p conversion is undefined.
16776 </pre>
16777  n              No input is consumed. The corresponding argument shall be a pointer to
16778 <pre>
16779                 signed integer into which is to be written the number of characters read from
16780                 the input stream so far by this call to the fscanf function. Execution of a
16781                 %n directive does not increment the assignment count returned at the
16782                 completion of execution of the fscanf function. No argument is converted,
16783                 but one is consumed. If the conversion specification includes an assignment-
16784                 suppressing character or a field width, the behavior is undefined.
16785 </pre>
16786  %              Matches a single % character; no conversion or assignment occurs. The
16787 <pre>
16788                 complete conversion specification shall be %%.
16789 </pre>
16790 <p><!--para 13 -->
16791  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note280"><b>280)</b></a></sup>
16792 <p><!--para 14 -->
16793  The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
16794  respectively, a, e, f, g, and x.
16795  
16796  
16797  
16798 <!--page 340 -->
16799 <p><!--para 15 -->
16800  Trailing white space (including new-line characters) is left unread unless matched by a
16801  directive. The success of literal matches and suppressed assignments is not directly
16802  determinable other than via the %n directive.
16803 <p><b>Returns</b>
16804 <p><!--para 16 -->
16805  The fscanf function returns the value of the macro EOF if an input failure occurs
16806  before the first conversion (if any) has completed. Otherwise, the function returns the
16807  number of input items assigned, which can be fewer than provided for, or even zero, in
16808  the event of an early matching failure.
16809 <p><!--para 17 -->
16810  EXAMPLE 1        The call:
16811 <pre>
16812           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16813           /* ... */
16814           int n, i; float x; char name[50];
16815           n = fscanf(stdin, "%d%f%s", &amp;i, &amp;x, name);
16816 </pre>
16817  with the input line:
16818 <pre>
16819           25 54.32E-1 thompson
16820 </pre>
16821  will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
16822  thompson\0.
16823  
16824 <p><!--para 18 -->
16825  EXAMPLE 2        The call:
16826 <pre>
16827           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16828           /* ... */
16829           int i; float x; char name[50];
16830           fscanf(stdin, "%2d%f%*d %[0123456789]", &amp;i, &amp;x, name);
16831 </pre>
16832  with input:
16833 <pre>
16834           56789 0123 56a72
16835 </pre>
16836  will assign to i the value 56 and to x the value 789.0, will skip 0123, and will assign to name the
16837  sequence 56\0. The next character read from the input stream will be a.
16838  
16839 <p><!--para 19 -->
16840  EXAMPLE 3        To accept repeatedly from stdin a quantity, a unit of measure, and an item name:
16841 <pre>
16842           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16843           /* ... */
16844           int count; float quant; char units[21], item[21];
16845           do {
16846                   count = fscanf(stdin, "%f%20s of %20s", &amp;quant, units, item);
16847                   fscanf(stdin,"%*[^\n]");
16848           } while (!feof(stdin) &amp;&amp; !ferror(stdin));
16849 </pre>
16850 <p><!--para 20 -->
16851  If the stdin stream contains the following lines:
16852 <!--page 341 -->
16853 <pre>
16854           2 quarts of oil
16855           -12.8degrees Celsius
16856           lots of luck
16857           10.0LBS     of
16858           dirt
16859           100ergs of energy
16860 </pre>
16861  the execution of the above example will be analogous to the following assignments:
16862 <pre>
16863            quant     =   2; strcpy(units, "quarts"); strcpy(item, "oil");
16864            count     =   3;
16865            quant     =   -12.8; strcpy(units, "degrees");
16866            count     =   2; // "C" fails to match "o"
16867            count     =   0; // "l" fails to match "%f"
16868            quant     =   10.0; strcpy(units, "LBS"); strcpy(item, "dirt");
16869            count     =   3;
16870            count     =   0; // "100e" fails to match "%f"
16871            count     =   EOF;
16872 </pre>
16873  
16874 <p><!--para 21 -->
16875  EXAMPLE 4         In:
16876 <pre>
16877            #include <a href="#7.21">&lt;stdio.h&gt;</a>
16878            /* ... */
16879            int d1, d2, n1, n2, i;
16880            i = sscanf("123", "%d%n%n%d", &amp;d1, &amp;n1, &amp;n2, &amp;d2);
16881 </pre>
16882  the value 123 is assigned to d1 and the value 3 to n1. Because %n can never get an input failure the value
16883  of 3 is also assigned to n2. The value of d2 is not affected. The value 1 is assigned to i.
16884  
16885 <p><!--para 22 -->
16886  EXAMPLE 5 In these examples, multibyte characters do have a state-dependent encoding, and the
16887  members of the extended character set that consist of more than one byte each consist of exactly two bytes,
16888  the first of which is denoted here by a and the second by an uppercase letter, but are only recognized as
16889  such when in the alternate shift state. The shift sequences are denoted by (uparrow) and (downarrow), in which the first causes
16890  entry into the alternate shift state.
16891 <p><!--para 23 -->
16892  After the call:
16893 <pre>
16894            #include <a href="#7.21">&lt;stdio.h&gt;</a>
16895            /* ... */
16896            char str[50];
16897            fscanf(stdin, "a%s", str);
16898 </pre>
16899  with the input line:
16900 <pre>
16901            a(uparrow) X Y(downarrow) bc
16902 </pre>
16903  str will contain (uparrow) X Y(downarrow)\0 assuming that none of the bytes of the shift sequences (or of the multibyte
16904  characters, in the more general case) appears to be a single-byte white-space character.
16905 <p><!--para 24 -->
16906  In contrast, after the call:
16907 <pre>
16908            #include <a href="#7.21">&lt;stdio.h&gt;</a>
16909            #include <a href="#7.19">&lt;stddef.h&gt;</a>
16910            /* ... */
16911            wchar_t wstr[50];
16912            fscanf(stdin, "a%ls", wstr);
16913 </pre>
16914  with the same input line, wstr will contain the two wide characters that correspond to X and Y and a
16915  terminating null wide character.
16916 <p><!--para 25 -->
16917  However, the call:
16918 <!--page 342 -->
16919 <pre>
16920          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16921          #include <a href="#7.19">&lt;stddef.h&gt;</a>
16922          /* ... */
16923          wchar_t wstr[50];
16924          fscanf(stdin, "a(uparrow) X(downarrow)%ls", wstr);
16925 </pre>
16926  with the same input line will return zero due to a matching failure against the (downarrow) sequence in the format
16927  string.
16928 <p><!--para 26 -->
16929  Assuming that the first byte of the multibyte character X is the same as the first byte of the multibyte
16930  character Y, after the call:
16931 <pre>
16932          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16933          #include <a href="#7.19">&lt;stddef.h&gt;</a>
16934          /* ... */
16935          wchar_t wstr[50];
16936          fscanf(stdin, "a(uparrow) Y(downarrow)%ls", wstr);
16937 </pre>
16938  with the same input line, zero will again be returned, but stdin will be left with a partially consumed
16939  multibyte character.
16940  
16941 <p><b> Forward references</b>: the strtod, strtof, and strtold functions (<a href="#7.22.1.3">7.22.1.3</a>), the
16942  strtol, strtoll, strtoul, and strtoull functions (<a href="#7.22.1.4">7.22.1.4</a>), conversion state
16943  (<a href="#7.28.6">7.28.6</a>), the wcrtomb function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
16944
16945 <p><b>Footnotes</b>
16946 <p><small><a name="note277" href="#note277">277)</a> These white-space characters are not counted against a specified field width.
16947 </small>
16948 <p><small><a name="note278" href="#note278">278)</a> fscanf pushes back at most one input character onto the input stream. Therefore, some sequences
16949  that are acceptable to strtod, strtol, etc., are unacceptable to fscanf.
16950 </small>
16951 <p><small><a name="note279" href="#note279">279)</a> No special provisions are made for multibyte characters in the matching rules used by the c, s, and [
16952  conversion specifiers -- the extent of the input field is determined on a byte-by-byte basis. The
16953  resulting field is nevertheless a sequence of multibyte characters that begins in the initial shift state.
16954 </small>
16955 <p><small><a name="note280" href="#note280">280)</a> See ''future library directions'' (<a href="#7.30.9">7.30.9</a>).
16956 </small>
16957
16958 <p><small><a href="#Contents">Contents</a></small>
16959 <h5><a name="7.21.6.3" href="#7.21.6.3">7.21.6.3 The printf function</a></h5>
16960 <p><b>Synopsis</b>
16961 <p><!--para 1 -->
16962 <pre>
16963          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16964          int printf(const char * restrict format, ...);
16965 </pre>
16966 <p><b>Description</b>
16967 <p><!--para 2 -->
16968  The printf function is equivalent to fprintf with the argument stdout interposed
16969  before the arguments to printf.
16970 <p><b>Returns</b>
16971 <p><!--para 3 -->
16972  The printf function returns the number of characters transmitted, or a negative value if
16973  an output or encoding error occurred.
16974
16975 <p><small><a href="#Contents">Contents</a></small>
16976 <h5><a name="7.21.6.4" href="#7.21.6.4">7.21.6.4 The scanf function</a></h5>
16977 <p><b>Synopsis</b>
16978 <p><!--para 1 -->
16979 <pre>
16980          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16981          int scanf(const char * restrict format, ...);
16982 </pre>
16983 <p><b>Description</b>
16984 <p><!--para 2 -->
16985  The scanf function is equivalent to fscanf with the argument stdin interposed
16986  before the arguments to scanf.
16987 <!--page 343 -->
16988 <p><b>Returns</b>
16989 <p><!--para 3 -->
16990  The scanf function returns the value of the macro EOF if an input failure occurs before
16991  the first conversion (if any) has completed. Otherwise, the scanf function returns the
16992  number of input items assigned, which can be fewer than provided for, or even zero, in
16993  the event of an early matching failure.
16994
16995 <p><small><a href="#Contents">Contents</a></small>
16996 <h5><a name="7.21.6.5" href="#7.21.6.5">7.21.6.5 The snprintf function</a></h5>
16997 <p><b>Synopsis</b>
16998 <p><!--para 1 -->
16999 <pre>
17000          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17001          int snprintf(char * restrict s, size_t n,
17002               const char * restrict format, ...);
17003 </pre>
17004 <p><b>Description</b>
17005 <p><!--para 2 -->
17006  The snprintf function is equivalent to fprintf, except that the output is written into
17007  an array (specified by argument s) rather than to a stream. If n is zero, nothing is written,
17008  and s may be a null pointer. Otherwise, output characters beyond the n-1st are
17009  discarded rather than being written to the array, and a null character is written at the end
17010  of the characters actually written into the array. If copying takes place between objects
17011  that overlap, the behavior is undefined.
17012 <p><b>Returns</b>
17013 <p><!--para 3 -->
17014  The snprintf function returns the number of characters that would have been written
17015  had n been sufficiently large, not counting the terminating null character, or a negative
17016  value if an encoding error occurred. Thus, the null-terminated output has been
17017  completely written if and only if the returned value is nonnegative and less than n.
17018
17019 <p><small><a href="#Contents">Contents</a></small>
17020 <h5><a name="7.21.6.6" href="#7.21.6.6">7.21.6.6 The sprintf function</a></h5>
17021 <p><b>Synopsis</b>
17022 <p><!--para 1 -->
17023 <pre>
17024          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17025          int sprintf(char * restrict s,
17026               const char * restrict format, ...);
17027 </pre>
17028 <p><b>Description</b>
17029 <p><!--para 2 -->
17030  The sprintf function is equivalent to fprintf, except that the output is written into
17031  an array (specified by the argument s) rather than to a stream. A null character is written
17032  at the end of the characters written; it is not counted as part of the returned value. If
17033  copying takes place between objects that overlap, the behavior is undefined.
17034 <p><b>Returns</b>
17035 <p><!--para 3 -->
17036  The sprintf function returns the number of characters written in the array, not
17037  counting the terminating null character, or a negative value if an encoding error occurred.
17038 <!--page 344 -->
17039
17040 <p><small><a href="#Contents">Contents</a></small>
17041 <h5><a name="7.21.6.7" href="#7.21.6.7">7.21.6.7 The sscanf function</a></h5>
17042 <p><b>Synopsis</b>
17043 <p><!--para 1 -->
17044 <pre>
17045         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17046         int sscanf(const char * restrict s,
17047              const char * restrict format, ...);
17048 </pre>
17049 <p><b>Description</b>
17050 <p><!--para 2 -->
17051  The sscanf function is equivalent to fscanf, except that input is obtained from a
17052  string (specified by the argument s) rather than from a stream. Reaching the end of the
17053  string is equivalent to encountering end-of-file for the fscanf function. If copying
17054  takes place between objects that overlap, the behavior is undefined.
17055 <p><b>Returns</b>
17056 <p><!--para 3 -->
17057  The sscanf function returns the value of the macro EOF if an input failure occurs
17058  before the first conversion (if any) has completed. Otherwise, the sscanf function
17059  returns the number of input items assigned, which can be fewer than provided for, or even
17060  zero, in the event of an early matching failure.
17061
17062 <p><small><a href="#Contents">Contents</a></small>
17063 <h5><a name="7.21.6.8" href="#7.21.6.8">7.21.6.8 The vfprintf function</a></h5>
17064 <p><b>Synopsis</b>
17065 <p><!--para 1 -->
17066 <pre>
17067         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17068         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17069         int vfprintf(FILE * restrict stream,
17070              const char * restrict format,
17071              va_list arg);
17072 </pre>
17073 <p><b>Description</b>
17074 <p><!--para 2 -->
17075  The vfprintf function is equivalent to fprintf, with the variable argument list
17076  replaced by arg, which shall have been initialized by the va_start macro (and
17077  possibly subsequent va_arg calls). The vfprintf function does not invoke the
17078  va_end macro.<sup><a href="#note281"><b>281)</b></a></sup>
17079 <p><b>Returns</b>
17080 <p><!--para 3 -->
17081  The vfprintf function returns the number of characters transmitted, or a negative
17082  value if an output or encoding error occurred.
17083 <p><!--para 4 -->
17084  EXAMPLE       The following shows the use of the vfprintf function in a general error-reporting routine.
17085  
17086  
17087  
17088  
17089 <!--page 345 -->
17090 <pre>
17091          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17092          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17093          void error(char *function_name, char *format, ...)
17094          {
17095                va_list args;
17096                va_start(args, format);
17097                // print out name of function causing error
17098                fprintf(stderr, "ERROR in %s: ", function_name);
17099                // print out remainder of message
17100                vfprintf(stderr, format, args);
17101                va_end(args);
17102          }
17103 </pre>
17104  
17105
17106 <p><b>Footnotes</b>
17107 <p><small><a name="note281" href="#note281">281)</a> As the functions vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf, and
17108  vsscanf invoke the va_arg macro, the value of arg after the return is indeterminate.
17109 </small>
17110
17111 <p><small><a href="#Contents">Contents</a></small>
17112 <h5><a name="7.21.6.9" href="#7.21.6.9">7.21.6.9 The vfscanf function</a></h5>
17113 <p><b>Synopsis</b>
17114 <p><!--para 1 -->
17115 <pre>
17116          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17117          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17118          int vfscanf(FILE * restrict stream,
17119               const char * restrict format,
17120               va_list arg);
17121 </pre>
17122 <p><b>Description</b>
17123 <p><!--para 2 -->
17124  The vfscanf function is equivalent to fscanf, with the variable argument list
17125  replaced by arg, which shall have been initialized by the va_start macro (and
17126  possibly subsequent va_arg calls). The vfscanf function does not invoke the
17127  va_end macro.<sup><a href="#note281"><b>281)</b></a></sup>
17128 <p><b>Returns</b>
17129 <p><!--para 3 -->
17130  The vfscanf function returns the value of the macro EOF if an input failure occurs
17131  before the first conversion (if any) has completed. Otherwise, the vfscanf function
17132  returns the number of input items assigned, which can be fewer than provided for, or even
17133  zero, in the event of an early matching failure.
17134
17135 <p><small><a href="#Contents">Contents</a></small>
17136 <h5><a name="7.21.6.10" href="#7.21.6.10">7.21.6.10 The vprintf function</a></h5>
17137 <p><b>Synopsis</b>
17138 <p><!--para 1 -->
17139 <pre>
17140          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17141          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17142          int vprintf(const char * restrict format,
17143               va_list arg);
17144 </pre>
17145 <p><b>Description</b>
17146 <p><!--para 2 -->
17147  The vprintf function is equivalent to printf, with the variable argument list
17148  replaced by arg, which shall have been initialized by the va_start macro (and
17149 <!--page 346 -->
17150  possibly subsequent va_arg calls). The vprintf function does not invoke the
17151  va_end macro.<sup><a href="#note281"><b>281)</b></a></sup>
17152 <p><b>Returns</b>
17153 <p><!--para 3 -->
17154  The vprintf function returns the number of characters transmitted, or a negative value
17155  if an output or encoding error occurred.
17156
17157 <p><small><a href="#Contents">Contents</a></small>
17158 <h5><a name="7.21.6.11" href="#7.21.6.11">7.21.6.11 The vscanf function</a></h5>
17159 <p><b>Synopsis</b>
17160 <p><!--para 1 -->
17161 <pre>
17162         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17163         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17164         int vscanf(const char * restrict format,
17165              va_list arg);
17166 </pre>
17167 <p><b>Description</b>
17168 <p><!--para 2 -->
17169  The vscanf function is equivalent to scanf, with the variable argument list replaced
17170  by arg, which shall have been initialized by the va_start macro (and possibly
17171  subsequent va_arg calls). The vscanf function does not invoke the va_end
17172  macro.<sup><a href="#note281"><b>281)</b></a></sup>
17173 <p><b>Returns</b>
17174 <p><!--para 3 -->
17175  The vscanf function returns the value of the macro EOF if an input failure occurs
17176  before the first conversion (if any) has completed. Otherwise, the vscanf function
17177  returns the number of input items assigned, which can be fewer than provided for, or even
17178  zero, in the event of an early matching failure.
17179
17180 <p><small><a href="#Contents">Contents</a></small>
17181 <h5><a name="7.21.6.12" href="#7.21.6.12">7.21.6.12 The vsnprintf function</a></h5>
17182 <p><b>Synopsis</b>
17183 <p><!--para 1 -->
17184 <pre>
17185         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17186         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17187         int vsnprintf(char * restrict s, size_t n,
17188              const char * restrict format,
17189              va_list arg);
17190 </pre>
17191 <p><b>Description</b>
17192 <p><!--para 2 -->
17193  The vsnprintf function is equivalent to snprintf, with the variable argument list
17194  replaced by arg, which shall have been initialized by the va_start macro (and
17195  possibly subsequent va_arg calls). The vsnprintf function does not invoke the
17196  va_end macro.<sup><a href="#note281"><b>281)</b></a></sup> If copying takes place between objects that overlap, the behavior is
17197  undefined.
17198 <!--page 347 -->
17199 <p><b>Returns</b>
17200 <p><!--para 3 -->
17201  The vsnprintf function returns the number of characters that would have been written
17202  had n been sufficiently large, not counting the terminating null character, or a negative
17203  value if an encoding error occurred. Thus, the null-terminated output has been
17204  completely written if and only if the returned value is nonnegative and less than n.
17205
17206 <p><small><a href="#Contents">Contents</a></small>
17207 <h5><a name="7.21.6.13" href="#7.21.6.13">7.21.6.13 The vsprintf function</a></h5>
17208 <p><b>Synopsis</b>
17209 <p><!--para 1 -->
17210 <pre>
17211          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17212          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17213          int vsprintf(char * restrict s,
17214               const char * restrict format,
17215               va_list arg);
17216 </pre>
17217 <p><b>Description</b>
17218 <p><!--para 2 -->
17219  The vsprintf function is equivalent to sprintf, with the variable argument list
17220  replaced by arg, which shall have been initialized by the va_start macro (and
17221  possibly subsequent va_arg calls). The vsprintf function does not invoke the
17222  va_end macro.<sup><a href="#note281"><b>281)</b></a></sup> If copying takes place between objects that overlap, the behavior is
17223  undefined.
17224 <p><b>Returns</b>
17225 <p><!--para 3 -->
17226  The vsprintf function returns the number of characters written in the array, not
17227  counting the terminating null character, or a negative value if an encoding error occurred.
17228
17229 <p><small><a href="#Contents">Contents</a></small>
17230 <h5><a name="7.21.6.14" href="#7.21.6.14">7.21.6.14 The vsscanf function</a></h5>
17231 <p><b>Synopsis</b>
17232 <p><!--para 1 -->
17233 <pre>
17234          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
17235          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17236          int vsscanf(const char * restrict s,
17237               const char * restrict format,
17238               va_list arg);
17239 </pre>
17240 <p><b>Description</b>
17241 <p><!--para 2 -->
17242  The vsscanf function is equivalent to sscanf, with the variable argument list
17243  replaced by arg, which shall have been initialized by the va_start macro (and
17244  possibly subsequent va_arg calls). The vsscanf function does not invoke the
17245  va_end macro.<sup><a href="#note281"><b>281)</b></a></sup>
17246 <p><b>Returns</b>
17247 <p><!--para 3 -->
17248  The vsscanf function returns the value of the macro EOF if an input failure occurs
17249  before the first conversion (if any) has completed. Otherwise, the vsscanf function
17250 <!--page 348 -->
17251  returns the number of input items assigned, which can be fewer than provided for, or even
17252  zero, in the event of an early matching failure.
17253
17254 <p><small><a href="#Contents">Contents</a></small>
17255 <h4><a name="7.21.7" href="#7.21.7">7.21.7 Character input/output functions</a></h4>
17256
17257 <p><small><a href="#Contents">Contents</a></small>
17258 <h5><a name="7.21.7.1" href="#7.21.7.1">7.21.7.1 The fgetc function</a></h5>
17259 <p><b>Synopsis</b>
17260 <p><!--para 1 -->
17261 <pre>
17262          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17263          int fgetc(FILE *stream);
17264 </pre>
17265 <p><b>Description</b>
17266 <p><!--para 2 -->
17267  If the end-of-file indicator for the input stream pointed to by stream is not set and a
17268  next character is present, the fgetc function obtains that character as an unsigned
17269  char converted to an int and advances the associated file position indicator for the
17270  stream (if defined).
17271 <p><b>Returns</b>
17272 <p><!--para 3 -->
17273  If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-
17274  of-file indicator for the stream is set and the fgetc function returns EOF. Otherwise, the
17275  fgetc function returns the next character from the input stream pointed to by stream.
17276  If a read error occurs, the error indicator for the stream is set and the fgetc function
17277  returns EOF.<sup><a href="#note282"><b>282)</b></a></sup>
17278
17279 <p><b>Footnotes</b>
17280 <p><small><a name="note282" href="#note282">282)</a> An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
17281 </small>
17282
17283 <p><small><a href="#Contents">Contents</a></small>
17284 <h5><a name="7.21.7.2" href="#7.21.7.2">7.21.7.2 The fgets function</a></h5>
17285 <p><b>Synopsis</b>
17286 <p><!--para 1 -->
17287 <pre>
17288          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17289          char *fgets(char * restrict s, int n,
17290               FILE * restrict stream);
17291 </pre>
17292 <p><b>Description</b>
17293 <p><!--para 2 -->
17294  The fgets function reads at most one less than the number of characters specified by n
17295  from the stream pointed to by stream into the array pointed to by s. No additional
17296  characters are read after a new-line character (which is retained) or after end-of-file. A
17297  null character is written immediately after the last character read into the array.
17298 <p><b>Returns</b>
17299 <p><!--para 3 -->
17300  The fgets function returns s if successful. If end-of-file is encountered and no
17301  characters have been read into the array, the contents of the array remain unchanged and a
17302  null pointer is returned. If a read error occurs during the operation, the array contents are
17303  indeterminate and a null pointer is returned.
17304  
17305 <!--page 349 -->
17306
17307 <p><small><a href="#Contents">Contents</a></small>
17308 <h5><a name="7.21.7.3" href="#7.21.7.3">7.21.7.3 The fputc function</a></h5>
17309 <p><b>Synopsis</b>
17310 <p><!--para 1 -->
17311 <pre>
17312          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17313          int fputc(int c, FILE *stream);
17314 </pre>
17315 <p><b>Description</b>
17316 <p><!--para 2 -->
17317  The fputc function writes the character specified by c (converted to an unsigned
17318  char) to the output stream pointed to by stream, at the position indicated by the
17319  associated file position indicator for the stream (if defined), and advances the indicator
17320  appropriately. If the file cannot support positioning requests, or if the stream was opened
17321  with append mode, the character is appended to the output stream.
17322 <p><b>Returns</b>
17323 <p><!--para 3 -->
17324  The fputc function returns the character written. If a write error occurs, the error
17325  indicator for the stream is set and fputc returns EOF.
17326
17327 <p><small><a href="#Contents">Contents</a></small>
17328 <h5><a name="7.21.7.4" href="#7.21.7.4">7.21.7.4 The fputs function</a></h5>
17329 <p><b>Synopsis</b>
17330 <p><!--para 1 -->
17331 <pre>
17332          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17333          int fputs(const char * restrict s,
17334               FILE * restrict stream);
17335 </pre>
17336 <p><b>Description</b>
17337 <p><!--para 2 -->
17338  The fputs function writes the string pointed to by s to the stream pointed to by
17339  stream. The terminating null character is not written.
17340 <p><b>Returns</b>
17341 <p><!--para 3 -->
17342  The fputs function returns EOF if a write error occurs; otherwise it returns a
17343  nonnegative value.
17344
17345 <p><small><a href="#Contents">Contents</a></small>
17346 <h5><a name="7.21.7.5" href="#7.21.7.5">7.21.7.5 The getc function</a></h5>
17347 <p><b>Synopsis</b>
17348 <p><!--para 1 -->
17349 <pre>
17350          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17351          int getc(FILE *stream);
17352 </pre>
17353 <p><b>Description</b>
17354 <p><!--para 2 -->
17355  The getc function is equivalent to fgetc, except that if it is implemented as a macro, it
17356  may evaluate stream more than once, so the argument should never be an expression
17357  with side effects.
17358 <!--page 350 -->
17359 <p><b>Returns</b>
17360 <p><!--para 3 -->
17361  The getc function returns the next character from the input stream pointed to by
17362  stream. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
17363  getc returns EOF. If a read error occurs, the error indicator for the stream is set and
17364  getc returns EOF.
17365
17366 <p><small><a href="#Contents">Contents</a></small>
17367 <h5><a name="7.21.7.6" href="#7.21.7.6">7.21.7.6 The getchar function</a></h5>
17368 <p><b>Synopsis</b>
17369 <p><!--para 1 -->
17370 <pre>
17371         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17372         int getchar(void);
17373 </pre>
17374 <p><b>Description</b>
17375 <p><!--para 2 -->
17376  The getchar function is equivalent to getc with the argument stdin.
17377 <p><b>Returns</b>
17378 <p><!--para 3 -->
17379  The getchar function returns the next character from the input stream pointed to by
17380  stdin. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
17381  getchar returns EOF. If a read error occurs, the error indicator for the stream is set and
17382  getchar returns EOF.                                                                       *
17383
17384 <p><small><a href="#Contents">Contents</a></small>
17385 <h5><a name="7.21.7.7" href="#7.21.7.7">7.21.7.7 The putc function</a></h5>
17386 <p><b>Synopsis</b>
17387 <p><!--para 1 -->
17388 <pre>
17389         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17390         int putc(int c, FILE *stream);
17391 </pre>
17392 <p><b>Description</b>
17393 <p><!--para 2 -->
17394  The putc function is equivalent to fputc, except that if it is implemented as a macro, it
17395  may evaluate stream more than once, so that argument should never be an expression
17396  with side effects.
17397 <p><b>Returns</b>
17398 <p><!--para 3 -->
17399  The putc function returns the character written. If a write error occurs, the error
17400  indicator for the stream is set and putc returns EOF.
17401
17402 <p><small><a href="#Contents">Contents</a></small>
17403 <h5><a name="7.21.7.8" href="#7.21.7.8">7.21.7.8 The putchar function</a></h5>
17404 <p><b>Synopsis</b>
17405 <p><!--para 1 -->
17406 <pre>
17407         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17408         int putchar(int c);
17409 </pre>
17410 <p><b>Description</b>
17411 <p><!--para 2 -->
17412  The putchar function is equivalent to putc with the second argument stdout.
17413 <!--page 351 -->
17414 <p><b>Returns</b>
17415 <p><!--para 3 -->
17416  The putchar function returns the character written. If a write error occurs, the error
17417  indicator for the stream is set and putchar returns EOF.
17418
17419 <p><small><a href="#Contents">Contents</a></small>
17420 <h5><a name="7.21.7.9" href="#7.21.7.9">7.21.7.9 The puts function</a></h5>
17421 <p><b>Synopsis</b>
17422 <p><!--para 1 -->
17423 <pre>
17424          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17425          int puts(const char *s);
17426 </pre>
17427 <p><b>Description</b>
17428 <p><!--para 2 -->
17429  The puts function writes the string pointed to by s to the stream pointed to by stdout,
17430  and appends a new-line character to the output. The terminating null character is not
17431  written.
17432 <p><b>Returns</b>
17433 <p><!--para 3 -->
17434  The puts function returns EOF if a write error occurs; otherwise it returns a nonnegative
17435  value.
17436
17437 <p><small><a href="#Contents">Contents</a></small>
17438 <h5><a name="7.21.7.10" href="#7.21.7.10">7.21.7.10 The ungetc function</a></h5>
17439 <p><b>Synopsis</b>
17440 <p><!--para 1 -->
17441 <pre>
17442          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17443          int ungetc(int c, FILE *stream);
17444 </pre>
17445 <p><b>Description</b>
17446 <p><!--para 2 -->
17447  The ungetc function pushes the character specified by c (converted to an unsigned
17448  char) back onto the input stream pointed to by stream. Pushed-back characters will be
17449  returned by subsequent reads on that stream in the reverse order of their pushing. A
17450  successful intervening call (with the stream pointed to by stream) to a file positioning
17451  function (fseek, fsetpos, or rewind) discards any pushed-back characters for the
17452  stream. The external storage corresponding to the stream is unchanged.
17453 <p><!--para 3 -->
17454  One character of pushback is guaranteed. If the ungetc function is called too many
17455  times on the same stream without an intervening read or file positioning operation on that
17456  stream, the operation may fail.
17457 <p><!--para 4 -->
17458  If the value of c equals that of the macro EOF, the operation fails and the input stream is
17459  unchanged.
17460 <p><!--para 5 -->
17461  A successful call to the ungetc function clears the end-of-file indicator for the stream.
17462  The value of the file position indicator for the stream after reading or discarding all
17463  pushed-back characters shall be the same as it was before the characters were pushed
17464  back. For a text stream, the value of its file position indicator after a successful call to the
17465  ungetc function is unspecified until all pushed-back characters are read or discarded.
17466 <!--page 352 -->
17467  For a binary stream, its file position indicator is decremented by each successful call to
17468  the ungetc function; if its value was zero before a call, it is indeterminate after the
17469  call.<sup><a href="#note283"><b>283)</b></a></sup>
17470 <p><b>Returns</b>
17471 <p><!--para 6 -->
17472  The ungetc function returns the character pushed back after conversion, or EOF if the
17473  operation fails.
17474 <p><b> Forward references</b>: file positioning functions (<a href="#7.21.9">7.21.9</a>).
17475
17476 <p><b>Footnotes</b>
17477 <p><small><a name="note283" href="#note283">283)</a> See ''future library directions'' (<a href="#7.30.9">7.30.9</a>).
17478 </small>
17479
17480 <p><small><a href="#Contents">Contents</a></small>
17481 <h4><a name="7.21.8" href="#7.21.8">7.21.8 Direct input/output functions</a></h4>
17482
17483 <p><small><a href="#Contents">Contents</a></small>
17484 <h5><a name="7.21.8.1" href="#7.21.8.1">7.21.8.1 The fread function</a></h5>
17485 <p><b>Synopsis</b>
17486 <p><!--para 1 -->
17487 <pre>
17488           #include <a href="#7.21">&lt;stdio.h&gt;</a>
17489           size_t fread(void * restrict ptr,
17490                size_t size, size_t nmemb,
17491                FILE * restrict stream);
17492 </pre>
17493 <p><b>Description</b>
17494 <p><!--para 2 -->
17495  The fread function reads, into the array pointed to by ptr, up to nmemb elements
17496  whose size is specified by size, from the stream pointed to by stream. For each
17497  object, size calls are made to the fgetc function and the results stored, in the order
17498  read, in an array of unsigned char exactly overlaying the object. The file position
17499  indicator for the stream (if defined) is advanced by the number of characters successfully
17500  read. If an error occurs, the resulting value of the file position indicator for the stream is
17501  indeterminate. If a partial element is read, its value is indeterminate.
17502 <p><b>Returns</b>
17503 <p><!--para 3 -->
17504  The fread function returns the number of elements successfully read, which may be
17505  less than nmemb if a read error or end-of-file is encountered. If size or nmemb is zero,
17506  fread returns zero and the contents of the array and the state of the stream remain
17507  unchanged.
17508  
17509  
17510  
17511  
17512 <!--page 353 -->
17513
17514 <p><small><a href="#Contents">Contents</a></small>
17515 <h5><a name="7.21.8.2" href="#7.21.8.2">7.21.8.2 The fwrite function</a></h5>
17516 <p><b>Synopsis</b>
17517 <p><!--para 1 -->
17518 <pre>
17519          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17520          size_t fwrite(const void * restrict ptr,
17521               size_t size, size_t nmemb,
17522               FILE * restrict stream);
17523 </pre>
17524 <p><b>Description</b>
17525 <p><!--para 2 -->
17526  The fwrite function writes, from the array pointed to by ptr, up to nmemb elements
17527  whose size is specified by size, to the stream pointed to by stream. For each object,
17528  size calls are made to the fputc function, taking the values (in order) from an array of
17529  unsigned char exactly overlaying the object. The file position indicator for the
17530  stream (if defined) is advanced by the number of characters successfully written. If an
17531  error occurs, the resulting value of the file position indicator for the stream is
17532  indeterminate.
17533 <p><b>Returns</b>
17534 <p><!--para 3 -->
17535  The fwrite function returns the number of elements successfully written, which will be
17536  less than nmemb only if a write error is encountered. If size or nmemb is zero,
17537  fwrite returns zero and the state of the stream remains unchanged.
17538
17539 <p><small><a href="#Contents">Contents</a></small>
17540 <h4><a name="7.21.9" href="#7.21.9">7.21.9 File positioning functions</a></h4>
17541
17542 <p><small><a href="#Contents">Contents</a></small>
17543 <h5><a name="7.21.9.1" href="#7.21.9.1">7.21.9.1 The fgetpos function</a></h5>
17544 <p><b>Synopsis</b>
17545 <p><!--para 1 -->
17546 <pre>
17547          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17548          int fgetpos(FILE * restrict stream,
17549               fpos_t * restrict pos);
17550 </pre>
17551 <p><b>Description</b>
17552 <p><!--para 2 -->
17553  The fgetpos function stores the current values of the parse state (if any) and file
17554  position indicator for the stream pointed to by stream in the object pointed to by pos.
17555  The values stored contain unspecified information usable by the fsetpos function for
17556  repositioning the stream to its position at the time of the call to the fgetpos function.
17557 <p><b>Returns</b>
17558 <p><!--para 3 -->
17559  If successful, the fgetpos function returns zero; on failure, the fgetpos function
17560  returns nonzero and stores an implementation-defined positive value in errno.
17561 <p><b> Forward references</b>: the fsetpos function (<a href="#7.21.9.3">7.21.9.3</a>).
17562 <!--page 354 -->
17563
17564 <p><small><a href="#Contents">Contents</a></small>
17565 <h5><a name="7.21.9.2" href="#7.21.9.2">7.21.9.2 The fseek function</a></h5>
17566 <p><b>Synopsis</b>
17567 <p><!--para 1 -->
17568 <pre>
17569         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17570         int fseek(FILE *stream, long int offset, int whence);
17571 </pre>
17572 <p><b>Description</b>
17573 <p><!--para 2 -->
17574  The fseek function sets the file position indicator for the stream pointed to by stream.
17575  If a read or write error occurs, the error indicator for the stream is set and fseek fails.
17576 <p><!--para 3 -->
17577  For a binary stream, the new position, measured in characters from the beginning of the
17578  file, is obtained by adding offset to the position specified by whence. The specified
17579  position is the beginning of the file if whence is SEEK_SET, the current value of the file
17580  position indicator if SEEK_CUR, or end-of-file if SEEK_END. A binary stream need not
17581  meaningfully support fseek calls with a whence value of SEEK_END.
17582 <p><!--para 4 -->
17583  For a text stream, either offset shall be zero, or offset shall be a value returned by
17584  an earlier successful call to the ftell function on a stream associated with the same file
17585  and whence shall be SEEK_SET.
17586 <p><!--para 5 -->
17587  After determining the new position, a successful call to the fseek function undoes any
17588  effects of the ungetc function on the stream, clears the end-of-file indicator for the
17589  stream, and then establishes the new position. After a successful fseek call, the next
17590  operation on an update stream may be either input or output.
17591 <p><b>Returns</b>
17592 <p><!--para 6 -->
17593  The fseek function returns nonzero only for a request that cannot be satisfied.
17594 <p><b> Forward references</b>: the ftell function (<a href="#7.21.9.4">7.21.9.4</a>).
17595
17596 <p><small><a href="#Contents">Contents</a></small>
17597 <h5><a name="7.21.9.3" href="#7.21.9.3">7.21.9.3 The fsetpos function</a></h5>
17598 <p><b>Synopsis</b>
17599 <p><!--para 1 -->
17600 <pre>
17601         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17602         int fsetpos(FILE *stream, const fpos_t *pos);
17603 </pre>
17604 <p><b>Description</b>
17605 <p><!--para 2 -->
17606  The fsetpos function sets the mbstate_t object (if any) and file position indicator
17607  for the stream pointed to by stream according to the value of the object pointed to by
17608  pos, which shall be a value obtained from an earlier successful call to the fgetpos
17609  function on a stream associated with the same file. If a read or write error occurs, the
17610  error indicator for the stream is set and fsetpos fails.
17611 <p><!--para 3 -->
17612  A successful call to the fsetpos function undoes any effects of the ungetc function
17613  on the stream, clears the end-of-file indicator for the stream, and then establishes the new
17614  parse state and position. After a successful fsetpos call, the next operation on an
17615 <!--page 355 -->
17616  update stream may be either input or output.
17617 <p><b>Returns</b>
17618 <p><!--para 4 -->
17619  If successful, the fsetpos function returns zero; on failure, the fsetpos function
17620  returns nonzero and stores an implementation-defined positive value in errno.
17621
17622 <p><small><a href="#Contents">Contents</a></small>
17623 <h5><a name="7.21.9.4" href="#7.21.9.4">7.21.9.4 The ftell function</a></h5>
17624 <p><b>Synopsis</b>
17625 <p><!--para 1 -->
17626 <pre>
17627          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17628          long int ftell(FILE *stream);
17629 </pre>
17630 <p><b>Description</b>
17631 <p><!--para 2 -->
17632  The ftell function obtains the current value of the file position indicator for the stream
17633  pointed to by stream. For a binary stream, the value is the number of characters from
17634  the beginning of the file. For a text stream, its file position indicator contains unspecified
17635  information, usable by the fseek function for returning the file position indicator for the
17636  stream to its position at the time of the ftell call; the difference between two such
17637  return values is not necessarily a meaningful measure of the number of characters written
17638  or read.
17639 <p><b>Returns</b>
17640 <p><!--para 3 -->
17641  If successful, the ftell function returns the current value of the file position indicator
17642  for the stream. On failure, the ftell function returns -1L and stores an
17643  implementation-defined positive value in errno.
17644
17645 <p><small><a href="#Contents">Contents</a></small>
17646 <h5><a name="7.21.9.5" href="#7.21.9.5">7.21.9.5 The rewind function</a></h5>
17647 <p><b>Synopsis</b>
17648 <p><!--para 1 -->
17649 <pre>
17650          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17651          void rewind(FILE *stream);
17652 </pre>
17653 <p><b>Description</b>
17654 <p><!--para 2 -->
17655  The rewind function sets the file position indicator for the stream pointed to by
17656  stream to the beginning of the file. It is equivalent to
17657 <pre>
17658          (void)fseek(stream, 0L, SEEK_SET)
17659 </pre>
17660  except that the error indicator for the stream is also cleared.
17661 <p><b>Returns</b>
17662 <p><!--para 3 -->
17663  The rewind function returns no value.
17664 <!--page 356 -->
17665
17666 <p><small><a href="#Contents">Contents</a></small>
17667 <h4><a name="7.21.10" href="#7.21.10">7.21.10 Error-handling functions</a></h4>
17668
17669 <p><small><a href="#Contents">Contents</a></small>
17670 <h5><a name="7.21.10.1" href="#7.21.10.1">7.21.10.1 The clearerr function</a></h5>
17671 <p><b>Synopsis</b>
17672 <p><!--para 1 -->
17673 <pre>
17674         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17675         void clearerr(FILE *stream);
17676 </pre>
17677 <p><b>Description</b>
17678 <p><!--para 2 -->
17679  The clearerr function clears the end-of-file and error indicators for the stream pointed
17680  to by stream.
17681 <p><b>Returns</b>
17682 <p><!--para 3 -->
17683  The clearerr function returns no value.
17684
17685 <p><small><a href="#Contents">Contents</a></small>
17686 <h5><a name="7.21.10.2" href="#7.21.10.2">7.21.10.2 The feof function</a></h5>
17687 <p><b>Synopsis</b>
17688 <p><!--para 1 -->
17689 <pre>
17690         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17691         int feof(FILE *stream);
17692 </pre>
17693 <p><b>Description</b>
17694 <p><!--para 2 -->
17695  The feof function tests the end-of-file indicator for the stream pointed to by stream.
17696 <p><b>Returns</b>
17697 <p><!--para 3 -->
17698  The feof function returns nonzero if and only if the end-of-file indicator is set for
17699  stream.
17700
17701 <p><small><a href="#Contents">Contents</a></small>
17702 <h5><a name="7.21.10.3" href="#7.21.10.3">7.21.10.3 The ferror function</a></h5>
17703 <p><b>Synopsis</b>
17704 <p><!--para 1 -->
17705 <pre>
17706         #include <a href="#7.21">&lt;stdio.h&gt;</a>
17707         int ferror(FILE *stream);
17708 </pre>
17709 <p><b>Description</b>
17710 <p><!--para 2 -->
17711  The ferror function tests the error indicator for the stream pointed to by stream.
17712 <p><b>Returns</b>
17713 <p><!--para 3 -->
17714  The ferror function returns nonzero if and only if the error indicator is set for
17715  stream.
17716 <!--page 357 -->
17717
17718 <p><small><a href="#Contents">Contents</a></small>
17719 <h5><a name="7.21.10.4" href="#7.21.10.4">7.21.10.4 The perror function</a></h5>
17720 <p><b>Synopsis</b>
17721 <p><!--para 1 -->
17722 <pre>
17723          #include <a href="#7.21">&lt;stdio.h&gt;</a>
17724          void perror(const char *s);
17725 </pre>
17726 <p><b>Description</b>
17727 <p><!--para 2 -->
17728  The perror function maps the error number in the integer expression errno to an
17729  error message. It writes a sequence of characters to the standard error stream thus: first
17730  (if s is not a null pointer and the character pointed to by s is not the null character), the
17731  string pointed to by s followed by a colon (:) and a space; then an appropriate error
17732  message string followed by a new-line character. The contents of the error message
17733  strings are the same as those returned by the strerror function with argument errno.
17734 <p><b>Returns</b>
17735 <p><!--para 3 -->
17736  The perror function returns no value.
17737 <p><b> Forward references</b>: the strerror function (<a href="#7.23.6.2">7.23.6.2</a>).
17738 <!--page 358 -->
17739
17740 <p><small><a href="#Contents">Contents</a></small>
17741 <h3><a name="7.22" href="#7.22">7.22 General utilities &lt;stdlib.h&gt;</a></h3>
17742 <p><!--para 1 -->
17743  The header <a href="#7.22">&lt;stdlib.h&gt;</a> declares five types and several functions of general utility, and
17744  defines several macros.<sup><a href="#note284"><b>284)</b></a></sup>
17745 <p><!--para 2 -->
17746  The types declared are size_t and wchar_t (both described in <a href="#7.19">7.19</a>),
17747 <pre>
17748           div_t
17749 </pre>
17750  which is a structure type that is the type of the value returned by the div function,
17751 <pre>
17752           ldiv_t
17753 </pre>
17754  which is a structure type that is the type of the value returned by the ldiv function, and
17755 <pre>
17756           lldiv_t
17757 </pre>
17758  which is a structure type that is the type of the value returned by the lldiv function.
17759 <p><!--para 3 -->
17760  The macros defined are NULL (described in <a href="#7.19">7.19</a>);
17761 <pre>
17762           EXIT_FAILURE
17763 </pre>
17764  and
17765 <pre>
17766           EXIT_SUCCESS
17767 </pre>
17768  which expand to integer constant expressions that can be used as the argument to the
17769  exit function to return unsuccessful or successful termination status, respectively, to the
17770  host environment;
17771 <pre>
17772           RAND_MAX
17773 </pre>
17774  which expands to an integer constant expression that is the maximum value returned by
17775  the rand function; and
17776 <pre>
17777           MB_CUR_MAX
17778 </pre>
17779  which expands to a positive integer expression with type size_t that is the maximum
17780  number of bytes in a multibyte character for the extended character set specified by the
17781  current locale (category LC_CTYPE), which is never greater than MB_LEN_MAX.
17782  
17783  
17784  
17785  
17786 <!--page 359 -->
17787
17788 <p><b>Footnotes</b>
17789 <p><small><a name="note284" href="#note284">284)</a> See ''future library directions'' (<a href="#7.30.10">7.30.10</a>).
17790 </small>
17791
17792 <p><small><a href="#Contents">Contents</a></small>
17793 <h4><a name="7.22.1" href="#7.22.1">7.22.1 Numeric conversion functions</a></h4>
17794 <p><!--para 1 -->
17795  The functions atof, atoi, atol, and atoll need not affect the value of the integer
17796  expression errno on an error. If the value of the result cannot be represented, the
17797  behavior is undefined.
17798
17799 <p><small><a href="#Contents">Contents</a></small>
17800 <h5><a name="7.22.1.1" href="#7.22.1.1">7.22.1.1 The atof function</a></h5>
17801 <p><b>Synopsis</b>
17802 <p><!--para 1 -->
17803 <pre>
17804          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
17805          double atof(const char *nptr);
17806 </pre>
17807 <p><b>Description</b>
17808 <p><!--para 2 -->
17809  The atof function converts the initial portion of the string pointed to by nptr to
17810  double representation. Except for the behavior on error, it is equivalent to
17811 <pre>
17812          strtod(nptr, (char **)NULL)
17813 </pre>
17814 <p><b>Returns</b>
17815 <p><!--para 3 -->
17816  The atof function returns the converted value.
17817 <p><b> Forward references</b>: the strtod, strtof, and strtold functions (<a href="#7.22.1.3">7.22.1.3</a>).
17818
17819 <p><small><a href="#Contents">Contents</a></small>
17820 <h5><a name="7.22.1.2" href="#7.22.1.2">7.22.1.2 The atoi, atol, and atoll functions</a></h5>
17821 <p><b>Synopsis</b>
17822 <p><!--para 1 -->
17823 <pre>
17824          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
17825          int atoi(const char *nptr);
17826          long int atol(const char *nptr);
17827          long long int atoll(const char *nptr);
17828 </pre>
17829 <p><b>Description</b>
17830 <p><!--para 2 -->
17831  The atoi, atol, and atoll functions convert the initial portion of the string pointed
17832  to by nptr to int, long int, and long long int representation, respectively.
17833  Except for the behavior on error, they are equivalent to
17834 <pre>
17835          atoi: (int)strtol(nptr, (char **)NULL, 10)
17836          atol: strtol(nptr, (char **)NULL, 10)
17837          atoll: strtoll(nptr, (char **)NULL, 10)
17838 </pre>
17839 <p><b>Returns</b>
17840 <p><!--para 3 -->
17841  The atoi, atol, and atoll functions return the converted value.
17842 <p><b> Forward references</b>: the strtol, strtoll, strtoul, and strtoull functions
17843  (<a href="#7.22.1.4">7.22.1.4</a>).
17844 <!--page 360 -->
17845
17846 <p><small><a href="#Contents">Contents</a></small>
17847 <h5><a name="7.22.1.3" href="#7.22.1.3">7.22.1.3 The strtod, strtof, and strtold functions</a></h5>
17848 <p><b>Synopsis</b>
17849 <p><!--para 1 -->
17850 <pre>
17851         #include <a href="#7.22">&lt;stdlib.h&gt;</a>
17852         double strtod(const char * restrict nptr,
17853              char ** restrict endptr);
17854         float strtof(const char * restrict nptr,
17855              char ** restrict endptr);
17856         long double strtold(const char * restrict nptr,
17857              char ** restrict endptr);
17858 </pre>
17859 <p><b>Description</b>
17860 <p><!--para 2 -->
17861  The strtod, strtof, and strtold functions convert the initial portion of the string
17862  pointed to by nptr to double, float, and long double representation,
17863  respectively. First, they decompose the input string into three parts: an initial, possibly
17864  empty, sequence of white-space characters (as specified by the isspace function), a
17865  subject sequence resembling a floating-point constant or representing an infinity or NaN;
17866  and a final string of one or more unrecognized characters, including the terminating null
17867  character of the input string. Then, they attempt to convert the subject sequence to a
17868  floating-point number, and return the result.
17869 <p><!--para 3 -->
17870  The expected form of the subject sequence is an optional plus or minus sign, then one of
17871  the following:
17872 <ul>
17873 <li>  a nonempty sequence of decimal digits optionally containing a decimal-point
17874  character, then an optional exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
17875 <li>  a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
17876  decimal-point character, then an optional binary exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
17877 <li>  INF or INFINITY, ignoring case
17878 <li>  NAN or NAN(n-char-sequence<sub>opt</sub>), ignoring case in the NAN part, where:
17879 <pre>
17880           n-char-sequence:
17881                  digit
17882                  nondigit
17883                  n-char-sequence digit
17884                  n-char-sequence nondigit
17885 </pre>
17886 </ul>
17887  The subject sequence is defined as the longest initial subsequence of the input string,
17888  starting with the first non-white-space character, that is of the expected form. The subject
17889  sequence contains no characters if the input string is not of the expected form.
17890 <p><!--para 4 -->
17891  If the subject sequence has the expected form for a floating-point number, the sequence of
17892  characters starting with the first digit or the decimal-point character (whichever occurs
17893  first) is interpreted as a floating constant according to the rules of <a href="#6.4.4.2">6.4.4.2</a>, except that the
17894 <!--page 361 -->
17895  decimal-point character is used in place of a period, and that if neither an exponent part
17896  nor a decimal-point character appears in a decimal floating point number, or if a binary
17897  exponent part does not appear in a hexadecimal floating point number, an exponent part
17898  of the appropriate type with value zero is assumed to follow the last digit in the string. If
17899  the subject sequence begins with a minus sign, the sequence is interpreted as negated.<sup><a href="#note285"><b>285)</b></a></sup>
17900  A character sequence INF or INFINITY is interpreted as an infinity, if representable in
17901  the return type, else like a floating constant that is too large for the range of the return
17902  type. A character sequence NAN or NAN(n-char-sequence<sub>opt</sub>), is interpreted as a quiet
17903  NaN, if supported in the return type, else like a subject sequence part that does not have
17904  the expected form; the meaning of the n-char sequences is implementation-defined.<sup><a href="#note286"><b>286)</b></a></sup> A
17905  pointer to the final string is stored in the object pointed to by endptr, provided that
17906  endptr is not a null pointer.
17907 <p><!--para 5 -->
17908  If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
17909  value resulting from the conversion is correctly rounded.
17910 <p><!--para 6 -->
17911  In other than the "C" locale, additional locale-specific subject sequence forms may be
17912  accepted.
17913 <p><!--para 7 -->
17914  If the subject sequence is empty or does not have the expected form, no conversion is
17915  performed; the value of nptr is stored in the object pointed to by endptr, provided
17916  that endptr is not a null pointer.
17917 <p><b>Recommended practice</b>
17918 <p><!--para 8 -->
17919  If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
17920  the result is not exactly representable, the result should be one of the two numbers in the
17921  appropriate internal format that are adjacent to the hexadecimal floating source value,
17922  with the extra stipulation that the error should have a correct sign for the current rounding
17923  direction.
17924 <p><!--para 9 -->
17925  If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in
17926  <a href="#7.7">&lt;float.h&gt;</a>) significant digits, the result should be correctly rounded. If the subject
17927  sequence D has the decimal form and more than DECIMAL_DIG significant digits,
17928  consider the two bounding, adjacent decimal strings L and U, both having
17929  DECIMAL_DIG significant digits, such that the values of L, D, and U satisfy L &lt;= D &lt;= U.
17930  The result should be one of the (equal or adjacent) values that would be obtained by
17931  correctly rounding L and U according to the current rounding direction, with the extra
17932  
17933 <!--page 362 -->
17934  stipulation that the error with respect to D should have a correct sign for the current
17935  rounding direction.<sup><a href="#note287"><b>287)</b></a></sup>
17936 <p><b>Returns</b>
17937 <p><!--para 10 -->
17938  The functions return the converted value, if any. If no conversion could be performed,
17939  zero is returned. If the correct value overflows and default rounding is in effect (<a href="#7.12.1">7.12.1</a>),
17940  plus or minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the
17941  return type and sign of the value), and the value of the macro ERANGE is stored in
17942  errno. If the result underflows (<a href="#7.12.1">7.12.1</a>), the functions return a value whose magnitude is
17943  no greater than the smallest normalized positive number in the return type; whether
17944  errno acquires the value ERANGE is implementation-defined.
17945
17946 <p><b>Footnotes</b>
17947 <p><small><a name="note285" href="#note285">285)</a> It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
17948  negating the value resulting from converting the corresponding unsigned sequence (see <a href="#F.5">F.5</a>); the two
17949  methods may yield different results if rounding is toward positive or negative infinity. In either case,
17950  the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
17951 </small>
17952 <p><small><a name="note286" href="#note286">286)</a> An implementation may use the n-char sequence to determine extra information to be represented in
17953  the NaN's significand.
17954 </small>
17955 <p><small><a name="note287" href="#note287">287)</a> DECIMAL_DIG, defined in <a href="#7.7">&lt;float.h&gt;</a>, should be sufficiently large that L and U will usually round
17956  to the same internal floating value, but if not will round to adjacent values.
17957 </small>
17958
17959 <p><small><a href="#Contents">Contents</a></small>
17960 <h5><a name="7.22.1.4" href="#7.22.1.4">7.22.1.4 The strtol, strtoll, strtoul, and strtoull functions</a></h5>
17961 <p><b>Synopsis</b>
17962 <p><!--para 1 -->
17963 <pre>
17964          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
17965          long int strtol(
17966               const char * restrict nptr,
17967               char ** restrict endptr,
17968               int base);
17969          long long int strtoll(
17970               const char * restrict nptr,
17971               char ** restrict endptr,
17972               int base);
17973          unsigned long int strtoul(
17974               const char * restrict nptr,
17975               char ** restrict endptr,
17976               int base);
17977          unsigned long long int strtoull(
17978               const char * restrict nptr,
17979               char ** restrict endptr,
17980               int base);
17981 </pre>
17982 <p><b>Description</b>
17983 <p><!--para 2 -->
17984  The strtol, strtoll, strtoul, and strtoull functions convert the initial
17985  portion of the string pointed to by nptr to long int, long long int, unsigned
17986  long int, and unsigned long long int representation, respectively. First,
17987  they decompose the input string into three parts: an initial, possibly empty, sequence of
17988  white-space characters (as specified by the isspace function), a subject sequence
17989  
17990  
17991 <!--page 363 -->
17992  resembling an integer represented in some radix determined by the value of base, and a
17993  final string of one or more unrecognized characters, including the terminating null
17994  character of the input string. Then, they attempt to convert the subject sequence to an
17995  integer, and return the result.
17996 <p><!--para 3 -->
17997  If the value of base is zero, the expected form of the subject sequence is that of an
17998  integer constant as described in <a href="#6.4.4.1">6.4.4.1</a>, optionally preceded by a plus or minus sign, but
17999  not including an integer suffix. If the value of base is between 2 and 36 (inclusive), the
18000  expected form of the subject sequence is a sequence of letters and digits representing an
18001  integer with the radix specified by base, optionally preceded by a plus or minus sign,
18002  but not including an integer suffix. The letters from a (or A) through z (or Z) are
18003  ascribed the values 10 through 35; only letters and digits whose ascribed values are less
18004  than that of base are permitted. If the value of base is 16, the characters 0x or 0X may
18005  optionally precede the sequence of letters and digits, following the sign if present.
18006 <p><!--para 4 -->
18007  The subject sequence is defined as the longest initial subsequence of the input string,
18008  starting with the first non-white-space character, that is of the expected form. The subject
18009  sequence contains no characters if the input string is empty or consists entirely of white
18010  space, or if the first non-white-space character is other than a sign or a permissible letter
18011  or digit.
18012 <p><!--para 5 -->
18013  If the subject sequence has the expected form and the value of base is zero, the sequence
18014  of characters starting with the first digit is interpreted as an integer constant according to
18015  the rules of <a href="#6.4.4.1">6.4.4.1</a>. If the subject sequence has the expected form and the value of base
18016  is between 2 and 36, it is used as the base for conversion, ascribing to each letter its value
18017  as given above. If the subject sequence begins with a minus sign, the value resulting from
18018  the conversion is negated (in the return type). A pointer to the final string is stored in the
18019  object pointed to by endptr, provided that endptr is not a null pointer.
18020 <p><!--para 6 -->
18021  In other than the "C" locale, additional locale-specific subject sequence forms may be
18022  accepted.
18023 <p><!--para 7 -->
18024  If the subject sequence is empty or does not have the expected form, no conversion is
18025  performed; the value of nptr is stored in the object pointed to by endptr, provided
18026  that endptr is not a null pointer.
18027 <p><b>Returns</b>
18028 <p><!--para 8 -->
18029  The strtol, strtoll, strtoul, and strtoull functions return the converted
18030  value, if any. If no conversion could be performed, zero is returned. If the correct value
18031  is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
18032  LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
18033  and sign of the value, if any), and the value of the macro ERANGE is stored in errno.
18034 <!--page 364 -->
18035
18036 <p><small><a href="#Contents">Contents</a></small>
18037 <h4><a name="7.22.2" href="#7.22.2">7.22.2 Pseudo-random sequence generation functions</a></h4>
18038
18039 <p><small><a href="#Contents">Contents</a></small>
18040 <h5><a name="7.22.2.1" href="#7.22.2.1">7.22.2.1 The rand function</a></h5>
18041 <p><b>Synopsis</b>
18042 <p><!--para 1 -->
18043 <pre>
18044          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18045          int rand(void);
18046 </pre>
18047 <p><b>Description</b>
18048 <p><!--para 2 -->
18049  The rand function computes a sequence of pseudo-random integers in the range 0 to
18050  RAND_MAX.<sup><a href="#note288"><b>288)</b></a></sup>
18051 <p><!--para 3 -->
18052  The rand function is not required to avoid data races. The implementation shall behave
18053  as if no library function calls the rand function.
18054 <p><b>Returns</b>
18055 <p><!--para 4 -->
18056  The rand function returns a pseudo-random integer.
18057 <p><b>Environmental limits</b>
18058 <p><!--para 5 -->
18059  The value of the RAND_MAX macro shall be at least 32767.
18060
18061 <p><b>Footnotes</b>
18062 <p><small><a name="note288" href="#note288">288)</a> There are no guarantees as to the quality of the random sequence produced and some implementations
18063  are known to produce sequences with distressingly non-random low-order bits. Applications with
18064  particular requirements should use a generator that is known to be sufficient for their needs.
18065 </small>
18066
18067 <p><small><a href="#Contents">Contents</a></small>
18068 <h5><a name="7.22.2.2" href="#7.22.2.2">7.22.2.2 The srand function</a></h5>
18069 <p><b>Synopsis</b>
18070 <p><!--para 1 -->
18071 <pre>
18072          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18073          void srand(unsigned int seed);
18074 </pre>
18075 <p><b>Description</b>
18076 <p><!--para 2 -->
18077  The srand function uses the argument as a seed for a new sequence of pseudo-random
18078  numbers to be returned by subsequent calls to rand. If srand is then called with the
18079  same seed value, the sequence of pseudo-random numbers shall be repeated. If rand is
18080  called before any calls to srand have been made, the same sequence shall be generated
18081  as when srand is first called with a seed value of 1.
18082 <p><!--para 3 -->
18083  The implementation shall behave as if no library function calls the srand function.
18084 <p><b>Returns</b>
18085 <p><!--para 4 -->
18086  The srand function returns no value.
18087  
18088  
18089  
18090  
18091 <!--page 365 -->
18092 <p><!--para 5 -->
18093  EXAMPLE       The following functions define a portable implementation of rand and srand.
18094 <pre>
18095          static unsigned long int next = 1;
18096          int rand(void)   // RAND_MAX assumed to be 32767
18097          {
18098                next = next * 1103515245 + 12345;
18099                return (unsigned int)(next/65536) % 32768;
18100          }
18101          void srand(unsigned int seed)
18102          {
18103                next = seed;
18104          }
18105 </pre>
18106  
18107
18108 <p><small><a href="#Contents">Contents</a></small>
18109 <h4><a name="7.22.3" href="#7.22.3">7.22.3 Memory management functions</a></h4>
18110 <p><!--para 1 -->
18111  The order and contiguity of storage allocated by successive calls to the
18112  aligned_alloc, calloc, malloc, and realloc functions is unspecified. The
18113  pointer returned if the allocation succeeds is suitably aligned so that it may be assigned to
18114  a pointer to any type of object with a fundamental alignment requirement and then used
18115  to access such an object or an array of such objects in the space allocated (until the space
18116  is explicitly deallocated). The lifetime of an allocated object extends from the allocation
18117  until the deallocation. Each such allocation shall yield a pointer to an object disjoint from
18118  any other object. The pointer returned points to the start (lowest byte address) of the
18119  allocated space. If the space cannot be allocated, a null pointer is returned. If the size of
18120  the space requested is zero, the behavior is implementation-defined: either a null pointer
18121  is returned, or the behavior is as if the size were some nonzero value, except that the
18122  returned pointer shall not be used to access an object.
18123
18124 <p><small><a href="#Contents">Contents</a></small>
18125 <h5><a name="7.22.3.1" href="#7.22.3.1">7.22.3.1 The aligned_alloc function</a></h5>
18126 <p><b>Synopsis</b>
18127 <p><!--para 1 -->
18128 <pre>
18129          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18130          void *aligned_alloc(size_t alignment, size_t size);
18131 </pre>
18132 <p><b>Description</b>
18133 <p><!--para 2 -->
18134  The aligned_alloc function allocates space for an object whose alignment is
18135  specified by alignment, whose size is specified by size, and whose value is
18136  indeterminate. The value of alignment shall be a valid alignment supported by the
18137  implementation and the value of size shall be an integral multiple of alignment.
18138 <p><b>Returns</b>
18139 <p><!--para 3 -->
18140  The aligned_alloc function returns either a null pointer or a pointer to the allocated
18141  space.
18142 <!--page 366 -->
18143
18144 <p><small><a href="#Contents">Contents</a></small>
18145 <h5><a name="7.22.3.2" href="#7.22.3.2">7.22.3.2 The calloc function</a></h5>
18146 <p><b>Synopsis</b>
18147 <p><!--para 1 -->
18148 <pre>
18149          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18150          void *calloc(size_t nmemb, size_t size);
18151 </pre>
18152 <p><b>Description</b>
18153 <p><!--para 2 -->
18154  The calloc function allocates space for an array of nmemb objects, each of whose size
18155  is size. The space is initialized to all bits zero.<sup><a href="#note289"><b>289)</b></a></sup>
18156 <p><b>Returns</b>
18157 <p><!--para 3 -->
18158  The calloc function returns either a null pointer or a pointer to the allocated space.
18159
18160 <p><b>Footnotes</b>
18161 <p><small><a name="note289" href="#note289">289)</a> Note that this need not be the same as the representation of floating-point zero or a null pointer
18162  constant.
18163 </small>
18164
18165 <p><small><a href="#Contents">Contents</a></small>
18166 <h5><a name="7.22.3.3" href="#7.22.3.3">7.22.3.3 The free function</a></h5>
18167 <p><b>Synopsis</b>
18168 <p><!--para 1 -->
18169 <pre>
18170          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18171          void free(void *ptr);
18172 </pre>
18173 <p><b>Description</b>
18174 <p><!--para 2 -->
18175  The free function causes the space pointed to by ptr to be deallocated, that is, made
18176  available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if
18177  the argument does not match a pointer earlier returned by a memory management
18178  function, or if the space has been deallocated by a call to free or realloc, the
18179  behavior is undefined.
18180 <p><b>Returns</b>
18181 <p><!--para 3 -->
18182  The free function returns no value.
18183
18184 <p><small><a href="#Contents">Contents</a></small>
18185 <h5><a name="7.22.3.4" href="#7.22.3.4">7.22.3.4 The malloc function</a></h5>
18186 <p><b>Synopsis</b>
18187 <p><!--para 1 -->
18188 <pre>
18189          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18190          void *malloc(size_t size);
18191 </pre>
18192 <p><b>Description</b>
18193 <p><!--para 2 -->
18194  The malloc function allocates space for an object whose size is specified by size and
18195  whose value is indeterminate.
18196  
18197  
18198  
18199  
18200 <!--page 367 -->
18201 <p><b>Returns</b>
18202 <p><!--para 3 -->
18203  The malloc function returns either a null pointer or a pointer to the allocated space.
18204
18205 <p><small><a href="#Contents">Contents</a></small>
18206 <h5><a name="7.22.3.5" href="#7.22.3.5">7.22.3.5 The realloc function</a></h5>
18207 <p><b>Synopsis</b>
18208 <p><!--para 1 -->
18209 <pre>
18210          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18211          void *realloc(void *ptr, size_t size);
18212 </pre>
18213 <p><b>Description</b>
18214 <p><!--para 2 -->
18215  The realloc function deallocates the old object pointed to by ptr and returns a
18216  pointer to a new object that has the size specified by size. The contents of the new
18217  object shall be the same as that of the old object prior to deallocation, up to the lesser of
18218  the new and old sizes. Any bytes in the new object beyond the size of the old object have
18219  indeterminate values.
18220 <p><!--para 3 -->
18221  If ptr is a null pointer, the realloc function behaves like the malloc function for the
18222  specified size. Otherwise, if ptr does not match a pointer earlier returned by a memory
18223  management function, or if the space has been deallocated by a call to the free or
18224  realloc function, the behavior is undefined. If memory for the new object cannot be
18225  allocated, the old object is not deallocated and its value is unchanged.
18226 <p><b>Returns</b>
18227 <p><!--para 4 -->
18228  The realloc function returns a pointer to the new object (which may have the same
18229  value as a pointer to the old object), or a null pointer if the new object could not be
18230  allocated.
18231
18232 <p><small><a href="#Contents">Contents</a></small>
18233 <h4><a name="7.22.4" href="#7.22.4">7.22.4 Communication with the environment</a></h4>
18234
18235 <p><small><a href="#Contents">Contents</a></small>
18236 <h5><a name="7.22.4.1" href="#7.22.4.1">7.22.4.1 The abort function</a></h5>
18237 <p><b>Synopsis</b>
18238 <p><!--para 1 -->
18239 <pre>
18240          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18241          _Noreturn void abort(void);
18242 </pre>
18243 <p><b>Description</b>
18244 <p><!--para 2 -->
18245  The abort function causes abnormal program termination to occur, unless the signal
18246  SIGABRT is being caught and the signal handler does not return. Whether open streams
18247  with unwritten buffered data are flushed, open streams are closed, or temporary files are
18248  removed is implementation-defined. An implementation-defined form of the status
18249  unsuccessful termination is returned to the host environment by means of the function
18250  call raise(SIGABRT).
18251 <!--page 368 -->
18252 <p><b>Returns</b>
18253 <p><!--para 3 -->
18254  The abort function does not return to its caller.
18255
18256 <p><small><a href="#Contents">Contents</a></small>
18257 <h5><a name="7.22.4.2" href="#7.22.4.2">7.22.4.2 The atexit function</a></h5>
18258 <p><b>Synopsis</b>
18259 <p><!--para 1 -->
18260 <pre>
18261         #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18262         int atexit(void (*func)(void));
18263 </pre>
18264 <p><b>Description</b>
18265 <p><!--para 2 -->
18266  The atexit function registers the function pointed to by func, to be called without
18267  arguments at normal program termination.<sup><a href="#note290"><b>290)</b></a></sup>
18268 <p><b>Environmental limits</b>
18269 <p><!--para 3 -->
18270  The implementation shall support the registration of at least 32 functions.
18271 <p><b>Returns</b>
18272 <p><!--para 4 -->
18273  The atexit function returns zero if the registration succeeds, nonzero if it fails.
18274 <p><b> Forward references</b>: the at_quick_exit function (<a href="#7.22.4.3">7.22.4.3</a>), the exit function
18275  (<a href="#7.22.4.4">7.22.4.4</a>).
18276
18277 <p><b>Footnotes</b>
18278 <p><small><a name="note290" href="#note290">290)</a> The atexit function registrations are distinct from the at_quick_exit registrations, so
18279  applications may need to call both registration functions with the same argument.
18280 </small>
18281
18282 <p><small><a href="#Contents">Contents</a></small>
18283 <h5><a name="7.22.4.3" href="#7.22.4.3">7.22.4.3 The at_quick_exit function</a></h5>
18284 <p><b>Synopsis</b>
18285 <p><!--para 1 -->
18286 <pre>
18287         #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18288         int at_quick_exit(void (*func)(void));
18289 </pre>
18290 <p><b>Description</b>
18291 <p><!--para 2 -->
18292  The at_quick_exit function registers the function pointed to by func, to be called
18293  without arguments should quick_exit be called.<sup><a href="#note291"><b>291)</b></a></sup>
18294 <p><b>Environmental limits</b>
18295 <p><!--para 3 -->
18296  The implementation shall support the registration of at least 32 functions.
18297 <p><b>Returns</b>
18298 <p><!--para 4 -->
18299  The at_quick_exit function returns zero if the registration succeeds, nonzero if it
18300  fails.
18301 <p><b> Forward references</b>: the quick_exit function (<a href="#7.22.4.7">7.22.4.7</a>).
18302  
18303  
18304 <!--page 369 -->
18305
18306 <p><b>Footnotes</b>
18307 <p><small><a name="note291" href="#note291">291)</a> The at_quick_exit function registrations are distinct from the atexit registrations, so
18308  applications may need to call both registration functions with the same argument.
18309 </small>
18310
18311 <p><small><a href="#Contents">Contents</a></small>
18312 <h5><a name="7.22.4.4" href="#7.22.4.4">7.22.4.4 The exit function</a></h5>
18313 <p><b>Synopsis</b>
18314 <p><!--para 1 -->
18315 <pre>
18316          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18317          _Noreturn void exit(int status);
18318 </pre>
18319 <p><b>Description</b>
18320 <p><!--para 2 -->
18321  The exit function causes normal program termination to occur. No functions registered
18322  by the at_quick_exit function are called. If a program calls the exit function
18323  more than once, or calls the quick_exit function in addition to the exit function, the
18324  behavior is undefined.
18325 <p><!--para 3 -->
18326  First, all functions registered by the atexit function are called, in the reverse order of
18327  their registration,<sup><a href="#note292"><b>292)</b></a></sup> except that a function is called after any previously registered
18328  functions that had already been called at the time it was registered. If, during the call to
18329  any such function, a call to the longjmp function is made that would terminate the call
18330  to the registered function, the behavior is undefined.
18331 <p><!--para 4 -->
18332  Next, all open streams with unwritten buffered data are flushed, all open streams are
18333  closed, and all files created by the tmpfile function are removed.
18334 <p><!--para 5 -->
18335  Finally, control is returned to the host environment. If the value of status is zero or
18336  EXIT_SUCCESS, an implementation-defined form of the status successful termination is
18337  returned. If the value of status is EXIT_FAILURE, an implementation-defined form
18338  of the status unsuccessful termination is returned. Otherwise the status returned is
18339  implementation-defined.
18340 <p><b>Returns</b>
18341 <p><!--para 6 -->
18342  The exit function cannot return to its caller.
18343
18344 <p><b>Footnotes</b>
18345 <p><small><a name="note292" href="#note292">292)</a> Each function is called as many times as it was registered, and in the correct order with respect to
18346  other registered functions.
18347 </small>
18348
18349 <p><small><a href="#Contents">Contents</a></small>
18350 <h5><a name="7.22.4.5" href="#7.22.4.5">7.22.4.5 The _Exit function</a></h5>
18351 <p><b>Synopsis</b>
18352 <p><!--para 1 -->
18353 <pre>
18354          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18355          _Noreturn void _Exit(int status);
18356 </pre>
18357 <p><b>Description</b>
18358 <p><!--para 2 -->
18359  The _Exit function causes normal program termination to occur and control to be
18360  returned to the host environment. No functions registered by the atexit function, the
18361  at_quick_exit function, or signal handlers registered by the signal function are
18362  called. The status returned to the host environment is determined in the same way as for
18363  
18364  
18365 <!--page 370 -->
18366  the exit function (<a href="#7.22.4.4">7.22.4.4</a>). Whether open streams with unwritten buffered data are
18367  flushed, open streams are closed, or temporary files are removed is implementation-
18368  defined.
18369 <p><b>Returns</b>
18370 <p><!--para 3 -->
18371  The _Exit function cannot return to its caller.
18372
18373 <p><small><a href="#Contents">Contents</a></small>
18374 <h5><a name="7.22.4.6" href="#7.22.4.6">7.22.4.6 The getenv function</a></h5>
18375 <p><b>Synopsis</b>
18376 <p><!--para 1 -->
18377 <pre>
18378          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18379          char *getenv(const char *name);
18380 </pre>
18381 <p><b>Description</b>
18382 <p><!--para 2 -->
18383  The getenv function searches an environment list, provided by the host environment,
18384  for a string that matches the string pointed to by name. The set of environment names
18385  and the method for altering the environment list are implementation-defined. The
18386  getenv function need not avoid data races with other threads of execution that modify
18387  the environment list.<sup><a href="#note293"><b>293)</b></a></sup>
18388 <p><!--para 3 -->
18389  The implementation shall behave as if no library function calls the getenv function.
18390 <p><b>Returns</b>
18391 <p><!--para 4 -->
18392  The getenv function returns a pointer to a string associated with the matched list
18393  member. The string pointed to shall not be modified by the program, but may be
18394  overwritten by a subsequent call to the getenv function. If the specified name cannot
18395  be found, a null pointer is returned.
18396
18397 <p><b>Footnotes</b>
18398 <p><small><a name="note293" href="#note293">293)</a> Many implementations provide non-standard functions that modify the environment list.
18399 </small>
18400
18401 <p><small><a href="#Contents">Contents</a></small>
18402 <h5><a name="7.22.4.7" href="#7.22.4.7">7.22.4.7 The quick_exit function</a></h5>
18403 <p><b>Synopsis</b>
18404 <p><!--para 1 -->
18405 <pre>
18406          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18407          _Noreturn void quick_exit(int status);
18408 </pre>
18409 <p><b>Description</b>
18410 <p><!--para 2 -->
18411  The quick_exit function causes normal program termination to occur. No functions
18412  registered by the atexit function or signal handlers registered by the signal function
18413  are called. If a program calls the quick_exit function more than once, or calls the
18414  exit function in addition to the quick_exit function, the behavior is undefined.
18415 <p><!--para 3 -->
18416  The quick_exit function first calls all functions registered by the at_quick_exit
18417  function, in the reverse order of their registration,<sup><a href="#note294"><b>294)</b></a></sup> except that a function is called after
18418  
18419  
18420 <!--page 371 -->
18421  any previously registered functions that had already been called at the time it was
18422  registered. If, during the call to any such function, a call to the longjmp function is
18423  made that would terminate the call to the registered function, the behavior is undefined.
18424 <p><!--para 4 -->
18425  Then control is returned to the host environment by means of the function call
18426  _Exit(status).
18427 <p><b>Returns</b>
18428 <p><!--para 5 -->
18429  The quick_exit function cannot return to its caller.
18430
18431 <p><b>Footnotes</b>
18432 <p><small><a name="note294" href="#note294">294)</a> Each function is called as many times as it was registered, and in the correct order with respect to
18433  other registered functions.
18434 </small>
18435
18436 <p><small><a href="#Contents">Contents</a></small>
18437 <h5><a name="7.22.4.8" href="#7.22.4.8">7.22.4.8 The system function</a></h5>
18438 <p><b>Synopsis</b>
18439 <p><!--para 1 -->
18440 <pre>
18441          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18442          int system(const char *string);
18443 </pre>
18444 <p><b>Description</b>
18445 <p><!--para 2 -->
18446  If string is a null pointer, the system function determines whether the host
18447  environment has a command processor. If string is not a null pointer, the system
18448  function passes the string pointed to by string to that command processor to be
18449  executed in a manner which the implementation shall document; this might then cause the
18450  program calling system to behave in a non-conforming manner or to terminate.
18451 <p><b>Returns</b>
18452 <p><!--para 3 -->
18453  If the argument is a null pointer, the system function returns nonzero only if a
18454  command processor is available. If the argument is not a null pointer, and the system
18455  function does return, it returns an implementation-defined value.
18456
18457 <p><small><a href="#Contents">Contents</a></small>
18458 <h4><a name="7.22.5" href="#7.22.5">7.22.5 Searching and sorting utilities</a></h4>
18459 <p><!--para 1 -->
18460  These utilities make use of a comparison function to search or sort arrays of unspecified
18461  type. Where an argument declared as size_t nmemb specifies the length of the array
18462  for a function, nmemb can have the value zero on a call to that function; the comparison
18463  function is not called, a search finds no matching element, and sorting performs no
18464  rearrangement. Pointer arguments on such a call shall still have valid values, as described
18465  in <a href="#7.1.4">7.1.4</a>.
18466 <p><!--para 2 -->
18467  The implementation shall ensure that the second argument of the comparison function
18468  (when called from bsearch), or both arguments (when called from qsort), are
18469  pointers to elements of the array.<sup><a href="#note295"><b>295)</b></a></sup> The first argument when called from bsearch
18470  shall equal key.
18471  
18472  
18473  
18474 <!--page 372 -->
18475 <p><!--para 3 -->
18476  The comparison function shall not alter the contents of the array. The implementation
18477  may reorder elements of the array between calls to the comparison function, but shall not
18478  alter the contents of any individual element.
18479 <p><!--para 4 -->
18480  When the same objects (consisting of size bytes, irrespective of their current positions
18481  in the array) are passed more than once to the comparison function, the results shall be
18482  consistent with one another. That is, for qsort they shall define a total ordering on the
18483  array, and for bsearch the same object shall always compare the same way with the
18484  key.
18485 <p><!--para 5 -->
18486  A sequence point occurs immediately before and immediately after each call to the
18487  comparison function, and also between any call to the comparison function and any
18488  movement of the objects passed as arguments to that call.
18489
18490 <p><b>Footnotes</b>
18491 <p><small><a name="note295" href="#note295">295)</a> That is, if the value passed is p, then the following expressions are always nonzero:
18492
18493 <pre>
18494           ((char *)p - (char *)base) % size == 0
18495           (char *)p &gt;= (char *)base
18496           (char *)p &lt; (char *)base + nmemb * size
18497 </pre>
18498  
18499 </small>
18500
18501 <p><small><a href="#Contents">Contents</a></small>
18502 <h5><a name="7.22.5.1" href="#7.22.5.1">7.22.5.1 The bsearch function</a></h5>
18503 <p><b>Synopsis</b>
18504 <p><!--para 1 -->
18505 <pre>
18506           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18507           void *bsearch(const void *key, const void *base,
18508                size_t nmemb, size_t size,
18509                int (*compar)(const void *, const void *));
18510 </pre>
18511 <p><b>Description</b>
18512 <p><!--para 2 -->
18513  The bsearch function searches an array of nmemb objects, the initial element of which
18514  is pointed to by base, for an element that matches the object pointed to by key. The
18515  size of each element of the array is specified by size.
18516 <p><!--para 3 -->
18517  The comparison function pointed to by compar is called with two arguments that point
18518  to the key object and to an array element, in that order. The function shall return an
18519  integer less than, equal to, or greater than zero if the key object is considered,
18520  respectively, to be less than, to match, or to be greater than the array element. The array
18521  shall consist of: all the elements that compare less than, all the elements that compare
18522  equal to, and all the elements that compare greater than the key object, in that order.<sup><a href="#note296"><b>296)</b></a></sup>
18523 <p><b>Returns</b>
18524 <p><!--para 4 -->
18525  The bsearch function returns a pointer to a matching element of the array, or a null
18526  pointer if no match is found. If two elements compare as equal, which element is
18527  
18528  
18529 <!--page 373 -->
18530  matched is unspecified.
18531
18532 <p><b>Footnotes</b>
18533 <p><small><a name="note296" href="#note296">296)</a> In practice, the entire array is sorted according to the comparison function.
18534 </small>
18535
18536 <p><small><a href="#Contents">Contents</a></small>
18537 <h5><a name="7.22.5.2" href="#7.22.5.2">7.22.5.2 The qsort function</a></h5>
18538 <p><b>Synopsis</b>
18539 <p><!--para 1 -->
18540 <pre>
18541          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18542          void qsort(void *base, size_t nmemb, size_t size,
18543               int (*compar)(const void *, const void *));
18544 </pre>
18545 <p><b>Description</b>
18546 <p><!--para 2 -->
18547  The qsort function sorts an array of nmemb objects, the initial element of which is
18548  pointed to by base. The size of each object is specified by size.
18549 <p><!--para 3 -->
18550  The contents of the array are sorted into ascending order according to a comparison
18551  function pointed to by compar, which is called with two arguments that point to the
18552  objects being compared. The function shall return an integer less than, equal to, or
18553  greater than zero if the first argument is considered to be respectively less than, equal to,
18554  or greater than the second.
18555 <p><!--para 4 -->
18556  If two elements compare as equal, their order in the resulting sorted array is unspecified.
18557 <p><b>Returns</b>
18558 <p><!--para 5 -->
18559  The qsort function returns no value.
18560
18561 <p><small><a href="#Contents">Contents</a></small>
18562 <h4><a name="7.22.6" href="#7.22.6">7.22.6 Integer arithmetic functions</a></h4>
18563
18564 <p><small><a href="#Contents">Contents</a></small>
18565 <h5><a name="7.22.6.1" href="#7.22.6.1">7.22.6.1 The abs, labs and llabs functions</a></h5>
18566 <p><b>Synopsis</b>
18567 <p><!--para 1 -->
18568 <pre>
18569          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18570          int abs(int j);
18571          long int labs(long int j);
18572          long long int llabs(long long int j);
18573 </pre>
18574 <p><b>Description</b>
18575 <p><!--para 2 -->
18576  The abs, labs, and llabs functions compute the absolute value of an integer j. If the
18577  result cannot be represented, the behavior is undefined.<sup><a href="#note297"><b>297)</b></a></sup>
18578 <p><b>Returns</b>
18579 <p><!--para 3 -->
18580  The abs, labs, and llabs, functions return the absolute value.
18581  
18582  
18583  
18584  
18585 <!--page 374 -->
18586
18587 <p><b>Footnotes</b>
18588 <p><small><a name="note297" href="#note297">297)</a> The absolute value of the most negative number cannot be represented in two's complement.
18589 </small>
18590
18591 <p><small><a href="#Contents">Contents</a></small>
18592 <h5><a name="7.22.6.2" href="#7.22.6.2">7.22.6.2 The div, ldiv, and lldiv functions</a></h5>
18593 <p><b>Synopsis</b>
18594 <p><!--para 1 -->
18595 <pre>
18596           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18597           div_t div(int numer, int denom);
18598           ldiv_t ldiv(long int numer, long int denom);
18599           lldiv_t lldiv(long long int numer, long long int denom);
18600 </pre>
18601 <p><b>Description</b>
18602 <p><!--para 2 -->
18603  The div, ldiv, and lldiv, functions compute numer / denom and numer %
18604  denom in a single operation.
18605 <p><b>Returns</b>
18606 <p><!--para 3 -->
18607  The div, ldiv, and lldiv functions return a structure of type div_t, ldiv_t, and
18608  lldiv_t, respectively, comprising both the quotient and the remainder. The structures
18609  shall contain (in either order) the members quot (the quotient) and rem (the remainder),
18610  each of which has the same type as the arguments numer and denom. If either part of
18611  the result cannot be represented, the behavior is undefined.
18612
18613 <p><small><a href="#Contents">Contents</a></small>
18614 <h4><a name="7.22.7" href="#7.22.7">7.22.7 Multibyte/wide character conversion functions</a></h4>
18615 <p><!--para 1 -->
18616  The behavior of the multibyte character functions is affected by the LC_CTYPE category
18617  of the current locale. For a state-dependent encoding, each function is placed into its
18618  initial conversion state at program startup and can be returned to that state by a call for
18619  which its character pointer argument, s, is a null pointer. Subsequent calls with s as
18620  other than a null pointer cause the internal conversion state of the function to be altered as
18621  necessary. A call with s as a null pointer causes these functions to return a nonzero value
18622  if encodings have state dependency, and zero otherwise.<sup><a href="#note298"><b>298)</b></a></sup> Changing the LC_CTYPE
18623  category causes the conversion state of these functions to be indeterminate.
18624
18625 <p><b>Footnotes</b>
18626 <p><small><a name="note298" href="#note298">298)</a> If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
18627  character codes, but are grouped with an adjacent multibyte character.
18628 </small>
18629
18630 <p><small><a href="#Contents">Contents</a></small>
18631 <h5><a name="7.22.7.1" href="#7.22.7.1">7.22.7.1 The mblen function</a></h5>
18632 <p><b>Synopsis</b>
18633 <p><!--para 1 -->
18634 <pre>
18635           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18636           int mblen(const char *s, size_t n);
18637 </pre>
18638 <p><b>Description</b>
18639 <p><!--para 2 -->
18640  If s is not a null pointer, the mblen function determines the number of bytes contained
18641  in the multibyte character pointed to by s. Except that the conversion state of the
18642  mbtowc function is not affected, it is equivalent to
18643  
18644  
18645  
18646 <!--page 375 -->
18647 <pre>
18648          mbtowc((wchar_t *)0, (const char *)0, 0);
18649          mbtowc((wchar_t *)0, s, n);
18650 </pre>
18651 <p><!--para 3 -->
18652  The implementation shall behave as if no library function calls the mblen function.
18653 <p><b>Returns</b>
18654 <p><!--para 4 -->
18655  If s is a null pointer, the mblen function returns a nonzero or zero value, if multibyte
18656  character encodings, respectively, do or do not have state-dependent encodings. If s is
18657  not a null pointer, the mblen function either returns 0 (if s points to the null character),
18658  or returns the number of bytes that are contained in the multibyte character (if the next n
18659  or fewer bytes form a valid multibyte character), or returns -1 (if they do not form a valid
18660  multibyte character).
18661 <p><b> Forward references</b>: the mbtowc function (<a href="#7.22.7.2">7.22.7.2</a>).
18662
18663 <p><small><a href="#Contents">Contents</a></small>
18664 <h5><a name="7.22.7.2" href="#7.22.7.2">7.22.7.2 The mbtowc function</a></h5>
18665 <p><b>Synopsis</b>
18666 <p><!--para 1 -->
18667 <pre>
18668          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18669          int mbtowc(wchar_t * restrict pwc,
18670               const char * restrict s,
18671               size_t n);
18672 </pre>
18673 <p><b>Description</b>
18674 <p><!--para 2 -->
18675  If s is not a null pointer, the mbtowc function inspects at most n bytes beginning with
18676  the byte pointed to by s to determine the number of bytes needed to complete the next
18677  multibyte character (including any shift sequences). If the function determines that the
18678  next multibyte character is complete and valid, it determines the value of the
18679  corresponding wide character and then, if pwc is not a null pointer, stores that value in
18680  the object pointed to by pwc. If the corresponding wide character is the null wide
18681  character, the function is left in the initial conversion state.
18682 <p><!--para 3 -->
18683  The implementation shall behave as if no library function calls the mbtowc function.
18684 <p><b>Returns</b>
18685 <p><!--para 4 -->
18686  If s is a null pointer, the mbtowc function returns a nonzero or zero value, if multibyte
18687  character encodings, respectively, do or do not have state-dependent encodings. If s is
18688  not a null pointer, the mbtowc function either returns 0 (if s points to the null character),
18689  or returns the number of bytes that are contained in the converted multibyte character (if
18690  the next n or fewer bytes form a valid multibyte character), or returns -1 (if they do not
18691  form a valid multibyte character).
18692 <p><!--para 5 -->
18693  In no case will the value returned be greater than n or the value of the MB_CUR_MAX
18694  macro.
18695 <!--page 376 -->
18696
18697 <p><small><a href="#Contents">Contents</a></small>
18698 <h5><a name="7.22.7.3" href="#7.22.7.3">7.22.7.3 The wctomb function</a></h5>
18699 <p><b>Synopsis</b>
18700 <p><!--para 1 -->
18701 <pre>
18702         #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18703         int wctomb(char *s, wchar_t wc);
18704 </pre>
18705 <p><b>Description</b>
18706 <p><!--para 2 -->
18707  The wctomb function determines the number of bytes needed to represent the multibyte
18708  character corresponding to the wide character given by wc (including any shift
18709  sequences), and stores the multibyte character representation in the array whose first
18710  element is pointed to by s (if s is not a null pointer). At most MB_CUR_MAX characters
18711  are stored. If wc is a null wide character, a null byte is stored, preceded by any shift
18712  sequence needed to restore the initial shift state, and the function is left in the initial
18713  conversion state.
18714 <p><!--para 3 -->
18715  The implementation shall behave as if no library function calls the wctomb function.
18716 <p><b>Returns</b>
18717 <p><!--para 4 -->
18718  If s is a null pointer, the wctomb function returns a nonzero or zero value, if multibyte
18719  character encodings, respectively, do or do not have state-dependent encodings. If s is
18720  not a null pointer, the wctomb function returns -1 if the value of wc does not correspond
18721  to a valid multibyte character, or returns the number of bytes that are contained in the
18722  multibyte character corresponding to the value of wc.
18723 <p><!--para 5 -->
18724  In no case will the value returned be greater than the value of the MB_CUR_MAX macro.
18725
18726 <p><small><a href="#Contents">Contents</a></small>
18727 <h4><a name="7.22.8" href="#7.22.8">7.22.8 Multibyte/wide string conversion functions</a></h4>
18728 <p><!--para 1 -->
18729  The behavior of the multibyte string functions is affected by the LC_CTYPE category of
18730  the current locale.
18731
18732 <p><small><a href="#Contents">Contents</a></small>
18733 <h5><a name="7.22.8.1" href="#7.22.8.1">7.22.8.1 The mbstowcs function</a></h5>
18734 <p><b>Synopsis</b>
18735 <p><!--para 1 -->
18736 <pre>
18737         #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18738         size_t mbstowcs(wchar_t * restrict pwcs,
18739              const char * restrict s,
18740              size_t n);
18741 </pre>
18742 <p><b>Description</b>
18743 <p><!--para 2 -->
18744  The mbstowcs function converts a sequence of multibyte characters that begins in the
18745  initial shift state from the array pointed to by s into a sequence of corresponding wide
18746  characters and stores not more than n wide characters into the array pointed to by pwcs.
18747  No multibyte characters that follow a null character (which is converted into a null wide
18748  character) will be examined or converted. Each multibyte character is converted as if by
18749  a call to the mbtowc function, except that the conversion state of the mbtowc function is
18750 <!--page 377 -->
18751  not affected.
18752 <p><!--para 3 -->
18753  No more than n elements will be modified in the array pointed to by pwcs. If copying
18754  takes place between objects that overlap, the behavior is undefined.
18755 <p><b>Returns</b>
18756 <p><!--para 4 -->
18757  If an invalid multibyte character is encountered, the mbstowcs function returns
18758  (size_t)(-1). Otherwise, the mbstowcs function returns the number of array
18759  elements modified, not including a terminating null wide character, if any.<sup><a href="#note299"><b>299)</b></a></sup>
18760
18761 <p><b>Footnotes</b>
18762 <p><small><a name="note299" href="#note299">299)</a> The array will not be null-terminated if the value returned is n.
18763 </small>
18764
18765 <p><small><a href="#Contents">Contents</a></small>
18766 <h5><a name="7.22.8.2" href="#7.22.8.2">7.22.8.2 The wcstombs function</a></h5>
18767 <p><b>Synopsis</b>
18768 <p><!--para 1 -->
18769 <pre>
18770           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
18771           size_t wcstombs(char * restrict s,
18772                const wchar_t * restrict pwcs,
18773                size_t n);
18774 </pre>
18775 <p><b>Description</b>
18776 <p><!--para 2 -->
18777  The wcstombs function converts a sequence of wide characters from the array pointed
18778  to by pwcs into a sequence of corresponding multibyte characters that begins in the
18779  initial shift state, and stores these multibyte characters into the array pointed to by s,
18780  stopping if a multibyte character would exceed the limit of n total bytes or if a null
18781  character is stored. Each wide character is converted as if by a call to the wctomb
18782  function, except that the conversion state of the wctomb function is not affected.
18783 <p><!--para 3 -->
18784  No more than n bytes will be modified in the array pointed to by s. If copying takes place
18785  between objects that overlap, the behavior is undefined.
18786 <p><b>Returns</b>
18787 <p><!--para 4 -->
18788  If a wide character is encountered that does not correspond to a valid multibyte character,
18789  the wcstombs function returns (size_t)(-1). Otherwise, the wcstombs function
18790  returns the number of bytes modified, not including a terminating null character, if
18791  any.<sup><a href="#note299"><b>299)</b></a></sup>
18792  
18793  
18794  
18795  
18796 <!--page 378 -->
18797
18798 <p><small><a href="#Contents">Contents</a></small>
18799 <h3><a name="7.23" href="#7.23">7.23 String handling &lt;string.h&gt;</a></h3>
18800
18801 <p><small><a href="#Contents">Contents</a></small>
18802 <h4><a name="7.23.1" href="#7.23.1">7.23.1 String function conventions</a></h4>
18803 <p><!--para 1 -->
18804  The header <a href="#7.23">&lt;string.h&gt;</a> declares one type and several functions, and defines one
18805  macro useful for manipulating arrays of character type and other objects treated as arrays
18806  of character type.<sup><a href="#note300"><b>300)</b></a></sup> The type is size_t and the macro is NULL (both described in
18807  <a href="#7.19">7.19</a>). Various methods are used for determining the lengths of the arrays, but in all cases
18808  a char * or void * argument points to the initial (lowest addressed) character of the
18809  array. If an array is accessed beyond the end of an object, the behavior is undefined.
18810 <p><!--para 2 -->
18811  Where an argument declared as size_t n specifies the length of the array for a
18812  function, n can have the value zero on a call to that function. Unless explicitly stated
18813  otherwise in the description of a particular function in this subclause, pointer arguments
18814  on such a call shall still have valid values, as described in <a href="#7.1.4">7.1.4</a>. On such a call, a
18815  function that locates a character finds no occurrence, a function that compares two
18816  character sequences returns zero, and a function that copies characters copies zero
18817  characters.
18818 <p><!--para 3 -->
18819  For all functions in this subclause, each character shall be interpreted as if it had the type
18820  unsigned char (and therefore every possible object representation is valid and has a
18821  different value).
18822
18823 <p><b>Footnotes</b>
18824 <p><small><a name="note300" href="#note300">300)</a> See ''future library directions'' (<a href="#7.30.11">7.30.11</a>).
18825 </small>
18826
18827 <p><small><a href="#Contents">Contents</a></small>
18828 <h4><a name="7.23.2" href="#7.23.2">7.23.2 Copying functions</a></h4>
18829
18830 <p><small><a href="#Contents">Contents</a></small>
18831 <h5><a name="7.23.2.1" href="#7.23.2.1">7.23.2.1 The memcpy function</a></h5>
18832 <p><b>Synopsis</b>
18833 <p><!--para 1 -->
18834 <pre>
18835           #include <a href="#7.23">&lt;string.h&gt;</a>
18836           void *memcpy(void * restrict s1,
18837                const void * restrict s2,
18838                size_t n);
18839 </pre>
18840 <p><b>Description</b>
18841 <p><!--para 2 -->
18842  The memcpy function copies n characters from the object pointed to by s2 into the
18843  object pointed to by s1. If copying takes place between objects that overlap, the behavior
18844  is undefined.
18845 <p><b>Returns</b>
18846 <p><!--para 3 -->
18847  The memcpy function returns the value of s1.
18848  
18849  
18850  
18851  
18852 <!--page 379 -->
18853
18854 <p><small><a href="#Contents">Contents</a></small>
18855 <h5><a name="7.23.2.2" href="#7.23.2.2">7.23.2.2 The memmove function</a></h5>
18856 <p><b>Synopsis</b>
18857 <p><!--para 1 -->
18858 <pre>
18859          #include <a href="#7.23">&lt;string.h&gt;</a>
18860          void *memmove(void *s1, const void *s2, size_t n);
18861 </pre>
18862 <p><b>Description</b>
18863 <p><!--para 2 -->
18864  The memmove function copies n characters from the object pointed to by s2 into the
18865  object pointed to by s1. Copying takes place as if the n characters from the object
18866  pointed to by s2 are first copied into a temporary array of n characters that does not
18867  overlap the objects pointed to by s1 and s2, and then the n characters from the
18868  temporary array are copied into the object pointed to by s1.
18869 <p><b>Returns</b>
18870 <p><!--para 3 -->
18871  The memmove function returns the value of s1.
18872
18873 <p><small><a href="#Contents">Contents</a></small>
18874 <h5><a name="7.23.2.3" href="#7.23.2.3">7.23.2.3 The strcpy function</a></h5>
18875 <p><b>Synopsis</b>
18876 <p><!--para 1 -->
18877 <pre>
18878          #include <a href="#7.23">&lt;string.h&gt;</a>
18879          char *strcpy(char * restrict s1,
18880               const char * restrict s2);
18881 </pre>
18882 <p><b>Description</b>
18883 <p><!--para 2 -->
18884  The strcpy function copies the string pointed to by s2 (including the terminating null
18885  character) into the array pointed to by s1. If copying takes place between objects that
18886  overlap, the behavior is undefined.
18887 <p><b>Returns</b>
18888 <p><!--para 3 -->
18889  The strcpy function returns the value of s1.
18890
18891 <p><small><a href="#Contents">Contents</a></small>
18892 <h5><a name="7.23.2.4" href="#7.23.2.4">7.23.2.4 The strncpy function</a></h5>
18893 <p><b>Synopsis</b>
18894 <p><!--para 1 -->
18895 <pre>
18896          #include <a href="#7.23">&lt;string.h&gt;</a>
18897          char *strncpy(char * restrict s1,
18898               const char * restrict s2,
18899               size_t n);
18900 </pre>
18901 <p><b>Description</b>
18902 <p><!--para 2 -->
18903  The strncpy function copies not more than n characters (characters that follow a null
18904  character are not copied) from the array pointed to by s2 to the array pointed to by
18905 <!--page 380 -->
18906  s1.<sup><a href="#note301"><b>301)</b></a></sup> If copying takes place between objects that overlap, the behavior is undefined.
18907 <p><!--para 3 -->
18908  If the array pointed to by s2 is a string that is shorter than n characters, null characters
18909  are appended to the copy in the array pointed to by s1, until n characters in all have been
18910  written.
18911 <p><b>Returns</b>
18912 <p><!--para 4 -->
18913  The strncpy function returns the value of s1.
18914
18915 <p><b>Footnotes</b>
18916 <p><small><a name="note301" href="#note301">301)</a> Thus, if there is no null character in the first n characters of the array pointed to by s2, the result will
18917  not be null-terminated.
18918 </small>
18919
18920 <p><small><a href="#Contents">Contents</a></small>
18921 <h4><a name="7.23.3" href="#7.23.3">7.23.3 Concatenation functions</a></h4>
18922
18923 <p><small><a href="#Contents">Contents</a></small>
18924 <h5><a name="7.23.3.1" href="#7.23.3.1">7.23.3.1 The strcat function</a></h5>
18925 <p><b>Synopsis</b>
18926 <p><!--para 1 -->
18927 <pre>
18928           #include <a href="#7.23">&lt;string.h&gt;</a>
18929           char *strcat(char * restrict s1,
18930                const char * restrict s2);
18931 </pre>
18932 <p><b>Description</b>
18933 <p><!--para 2 -->
18934  The strcat function appends a copy of the string pointed to by s2 (including the
18935  terminating null character) to the end of the string pointed to by s1. The initial character
18936  of s2 overwrites the null character at the end of s1. If copying takes place between
18937  objects that overlap, the behavior is undefined.
18938 <p><b>Returns</b>
18939 <p><!--para 3 -->
18940  The strcat function returns the value of s1.
18941
18942 <p><small><a href="#Contents">Contents</a></small>
18943 <h5><a name="7.23.3.2" href="#7.23.3.2">7.23.3.2 The strncat function</a></h5>
18944 <p><b>Synopsis</b>
18945 <p><!--para 1 -->
18946 <pre>
18947           #include <a href="#7.23">&lt;string.h&gt;</a>
18948           char *strncat(char * restrict s1,
18949                const char * restrict s2,
18950                size_t n);
18951 </pre>
18952 <p><b>Description</b>
18953 <p><!--para 2 -->
18954  The strncat function appends not more than n characters (a null character and
18955  characters that follow it are not appended) from the array pointed to by s2 to the end of
18956  the string pointed to by s1. The initial character of s2 overwrites the null character at the
18957  end of s1. A terminating null character is always appended to the result.<sup><a href="#note302"><b>302)</b></a></sup> If copying
18958  
18959 <!--page 381 -->
18960  takes place between objects that overlap, the behavior is undefined.
18961 <p><b>Returns</b>
18962 <p><!--para 3 -->
18963  The strncat function returns the value of s1.
18964 <p><b> Forward references</b>: the strlen function (<a href="#7.23.6.3">7.23.6.3</a>).
18965
18966 <p><b>Footnotes</b>
18967 <p><small><a name="note302" href="#note302">302)</a> Thus, the maximum number of characters that can end up in the array pointed to by s1 is
18968  strlen(s1)+n+1.
18969 </small>
18970
18971 <p><small><a href="#Contents">Contents</a></small>
18972 <h4><a name="7.23.4" href="#7.23.4">7.23.4 Comparison functions</a></h4>
18973 <p><!--para 1 -->
18974  The sign of a nonzero value returned by the comparison functions memcmp, strcmp,
18975  and strncmp is determined by the sign of the difference between the values of the first
18976  pair of characters (both interpreted as unsigned char) that differ in the objects being
18977  compared.
18978
18979 <p><small><a href="#Contents">Contents</a></small>
18980 <h5><a name="7.23.4.1" href="#7.23.4.1">7.23.4.1 The memcmp function</a></h5>
18981 <p><b>Synopsis</b>
18982 <p><!--para 1 -->
18983 <pre>
18984          #include <a href="#7.23">&lt;string.h&gt;</a>
18985          int memcmp(const void *s1, const void *s2, size_t n);
18986 </pre>
18987 <p><b>Description</b>
18988 <p><!--para 2 -->
18989  The memcmp function compares the first n characters of the object pointed to by s1 to
18990  the first n characters of the object pointed to by s2.<sup><a href="#note303"><b>303)</b></a></sup>
18991 <p><b>Returns</b>
18992 <p><!--para 3 -->
18993  The memcmp function returns an integer greater than, equal to, or less than zero,
18994  accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
18995  pointed to by s2.
18996
18997 <p><b>Footnotes</b>
18998 <p><small><a name="note303" href="#note303">303)</a> The contents of ''holes'' used as padding for purposes of alignment within structure objects are
18999  indeterminate. Strings shorter than their allocated space and unions may also cause problems in
19000  comparison.
19001 </small>
19002
19003 <p><small><a href="#Contents">Contents</a></small>
19004 <h5><a name="7.23.4.2" href="#7.23.4.2">7.23.4.2 The strcmp function</a></h5>
19005 <p><b>Synopsis</b>
19006 <p><!--para 1 -->
19007 <pre>
19008          #include <a href="#7.23">&lt;string.h&gt;</a>
19009          int strcmp(const char *s1, const char *s2);
19010 </pre>
19011 <p><b>Description</b>
19012 <p><!--para 2 -->
19013  The strcmp function compares the string pointed to by s1 to the string pointed to by
19014  s2.
19015 <p><b>Returns</b>
19016 <p><!--para 3 -->
19017  The strcmp function returns an integer greater than, equal to, or less than zero,
19018  accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
19019  
19020 <!--page 382 -->
19021  pointed to by s2.
19022
19023 <p><small><a href="#Contents">Contents</a></small>
19024 <h5><a name="7.23.4.3" href="#7.23.4.3">7.23.4.3 The strcoll function</a></h5>
19025 <p><b>Synopsis</b>
19026 <p><!--para 1 -->
19027 <pre>
19028         #include <a href="#7.23">&lt;string.h&gt;</a>
19029         int strcoll(const char *s1, const char *s2);
19030 </pre>
19031 <p><b>Description</b>
19032 <p><!--para 2 -->
19033  The strcoll function compares the string pointed to by s1 to the string pointed to by
19034  s2, both interpreted as appropriate to the LC_COLLATE category of the current locale.
19035 <p><b>Returns</b>
19036 <p><!--para 3 -->
19037  The strcoll function returns an integer greater than, equal to, or less than zero,
19038  accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
19039  pointed to by s2 when both are interpreted as appropriate to the current locale.
19040
19041 <p><small><a href="#Contents">Contents</a></small>
19042 <h5><a name="7.23.4.4" href="#7.23.4.4">7.23.4.4 The strncmp function</a></h5>
19043 <p><b>Synopsis</b>
19044 <p><!--para 1 -->
19045 <pre>
19046         #include <a href="#7.23">&lt;string.h&gt;</a>
19047         int strncmp(const char *s1, const char *s2, size_t n);
19048 </pre>
19049 <p><b>Description</b>
19050 <p><!--para 2 -->
19051  The strncmp function compares not more than n characters (characters that follow a
19052  null character are not compared) from the array pointed to by s1 to the array pointed to
19053  by s2.
19054 <p><b>Returns</b>
19055 <p><!--para 3 -->
19056  The strncmp function returns an integer greater than, equal to, or less than zero,
19057  accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
19058  to, or less than the possibly null-terminated array pointed to by s2.
19059
19060 <p><small><a href="#Contents">Contents</a></small>
19061 <h5><a name="7.23.4.5" href="#7.23.4.5">7.23.4.5 The strxfrm function</a></h5>
19062 <p><b>Synopsis</b>
19063 <p><!--para 1 -->
19064 <pre>
19065         #include <a href="#7.23">&lt;string.h&gt;</a>
19066         size_t strxfrm(char * restrict s1,
19067              const char * restrict s2,
19068              size_t n);
19069 </pre>
19070 <p><b>Description</b>
19071 <p><!--para 2 -->
19072  The strxfrm function transforms the string pointed to by s2 and places the resulting
19073  string into the array pointed to by s1. The transformation is such that if the strcmp
19074  function is applied to two transformed strings, it returns a value greater than, equal to, or
19075 <!--page 383 -->
19076  less than zero, corresponding to the result of the strcoll function applied to the same
19077  two original strings. No more than n characters are placed into the resulting array
19078  pointed to by s1, including the terminating null character. If n is zero, s1 is permitted to
19079  be a null pointer. If copying takes place between objects that overlap, the behavior is
19080  undefined.
19081 <p><b>Returns</b>
19082 <p><!--para 3 -->
19083  The strxfrm function returns the length of the transformed string (not including the
19084  terminating null character). If the value returned is n or more, the contents of the array
19085  pointed to by s1 are indeterminate.
19086 <p><!--para 4 -->
19087  EXAMPLE The value of the following expression is the size of the array needed to hold the
19088  transformation of the string pointed to by s.
19089 <pre>
19090          1 + strxfrm(NULL, s, 0)
19091 </pre>
19092  
19093
19094 <p><small><a href="#Contents">Contents</a></small>
19095 <h4><a name="7.23.5" href="#7.23.5">7.23.5 Search functions</a></h4>
19096
19097 <p><small><a href="#Contents">Contents</a></small>
19098 <h5><a name="7.23.5.1" href="#7.23.5.1">7.23.5.1 The memchr function</a></h5>
19099 <p><b>Synopsis</b>
19100 <p><!--para 1 -->
19101 <pre>
19102          #include <a href="#7.23">&lt;string.h&gt;</a>
19103          void *memchr(const void *s, int c, size_t n);
19104 </pre>
19105 <p><b>Description</b>
19106 <p><!--para 2 -->
19107  The memchr function locates the first occurrence of c (converted to an unsigned
19108  char) in the initial n characters (each interpreted as unsigned char) of the object
19109  pointed to by s. The implementation shall behave as if it reads the characters sequentially
19110  and stops as soon as a matching character is found.
19111 <p><b>Returns</b>
19112 <p><!--para 3 -->
19113  The memchr function returns a pointer to the located character, or a null pointer if the
19114  character does not occur in the object.
19115
19116 <p><small><a href="#Contents">Contents</a></small>
19117 <h5><a name="7.23.5.2" href="#7.23.5.2">7.23.5.2 The strchr function</a></h5>
19118 <p><b>Synopsis</b>
19119 <p><!--para 1 -->
19120 <pre>
19121          #include <a href="#7.23">&lt;string.h&gt;</a>
19122          char *strchr(const char *s, int c);
19123 </pre>
19124 <p><b>Description</b>
19125 <p><!--para 2 -->
19126  The strchr function locates the first occurrence of c (converted to a char) in the
19127  string pointed to by s. The terminating null character is considered to be part of the
19128  string.
19129 <!--page 384 -->
19130 <p><b>Returns</b>
19131 <p><!--para 3 -->
19132  The strchr function returns a pointer to the located character, or a null pointer if the
19133  character does not occur in the string.
19134
19135 <p><small><a href="#Contents">Contents</a></small>
19136 <h5><a name="7.23.5.3" href="#7.23.5.3">7.23.5.3 The strcspn function</a></h5>
19137 <p><b>Synopsis</b>
19138 <p><!--para 1 -->
19139 <pre>
19140         #include <a href="#7.23">&lt;string.h&gt;</a>
19141         size_t strcspn(const char *s1, const char *s2);
19142 </pre>
19143 <p><b>Description</b>
19144 <p><!--para 2 -->
19145  The strcspn function computes the length of the maximum initial segment of the string
19146  pointed to by s1 which consists entirely of characters not from the string pointed to by
19147  s2.
19148 <p><b>Returns</b>
19149 <p><!--para 3 -->
19150  The strcspn function returns the length of the segment.
19151
19152 <p><small><a href="#Contents">Contents</a></small>
19153 <h5><a name="7.23.5.4" href="#7.23.5.4">7.23.5.4 The strpbrk function</a></h5>
19154 <p><b>Synopsis</b>
19155 <p><!--para 1 -->
19156 <pre>
19157         #include <a href="#7.23">&lt;string.h&gt;</a>
19158         char *strpbrk(const char *s1, const char *s2);
19159 </pre>
19160 <p><b>Description</b>
19161 <p><!--para 2 -->
19162  The strpbrk function locates the first occurrence in the string pointed to by s1 of any
19163  character from the string pointed to by s2.
19164 <p><b>Returns</b>
19165 <p><!--para 3 -->
19166  The strpbrk function returns a pointer to the character, or a null pointer if no character
19167  from s2 occurs in s1.
19168
19169 <p><small><a href="#Contents">Contents</a></small>
19170 <h5><a name="7.23.5.5" href="#7.23.5.5">7.23.5.5 The strrchr function</a></h5>
19171 <p><b>Synopsis</b>
19172 <p><!--para 1 -->
19173 <pre>
19174         #include <a href="#7.23">&lt;string.h&gt;</a>
19175         char *strrchr(const char *s, int c);
19176 </pre>
19177 <p><b>Description</b>
19178 <p><!--para 2 -->
19179  The strrchr function locates the last occurrence of c (converted to a char) in the
19180  string pointed to by s. The terminating null character is considered to be part of the
19181  string.
19182 <!--page 385 -->
19183 <p><b>Returns</b>
19184 <p><!--para 3 -->
19185  The strrchr function returns a pointer to the character, or a null pointer if c does not
19186  occur in the string.
19187
19188 <p><small><a href="#Contents">Contents</a></small>
19189 <h5><a name="7.23.5.6" href="#7.23.5.6">7.23.5.6 The strspn function</a></h5>
19190 <p><b>Synopsis</b>
19191 <p><!--para 1 -->
19192 <pre>
19193          #include <a href="#7.23">&lt;string.h&gt;</a>
19194          size_t strspn(const char *s1, const char *s2);
19195 </pre>
19196 <p><b>Description</b>
19197 <p><!--para 2 -->
19198  The strspn function computes the length of the maximum initial segment of the string
19199  pointed to by s1 which consists entirely of characters from the string pointed to by s2.
19200 <p><b>Returns</b>
19201 <p><!--para 3 -->
19202  The strspn function returns the length of the segment.
19203
19204 <p><small><a href="#Contents">Contents</a></small>
19205 <h5><a name="7.23.5.7" href="#7.23.5.7">7.23.5.7 The strstr function</a></h5>
19206 <p><b>Synopsis</b>
19207 <p><!--para 1 -->
19208 <pre>
19209          #include <a href="#7.23">&lt;string.h&gt;</a>
19210          char *strstr(const char *s1, const char *s2);
19211 </pre>
19212 <p><b>Description</b>
19213 <p><!--para 2 -->
19214  The strstr function locates the first occurrence in the string pointed to by s1 of the
19215  sequence of characters (excluding the terminating null character) in the string pointed to
19216  by s2.
19217 <p><b>Returns</b>
19218 <p><!--para 3 -->
19219  The strstr function returns a pointer to the located string, or a null pointer if the string
19220  is not found. If s2 points to a string with zero length, the function returns s1.
19221
19222 <p><small><a href="#Contents">Contents</a></small>
19223 <h5><a name="7.23.5.8" href="#7.23.5.8">7.23.5.8 The strtok function</a></h5>
19224 <p><b>Synopsis</b>
19225 <p><!--para 1 -->
19226 <pre>
19227          #include <a href="#7.23">&lt;string.h&gt;</a>
19228          char *strtok(char * restrict s1,
19229               const char * restrict s2);
19230 </pre>
19231 <p><b>Description</b>
19232 <p><!--para 2 -->
19233  A sequence of calls to the strtok function breaks the string pointed to by s1 into a
19234  sequence of tokens, each of which is delimited by a character from the string pointed to
19235  by s2. The first call in the sequence has a non-null first argument; subsequent calls in the
19236  sequence have a null first argument. The separator string pointed to by s2 may be
19237  different from call to call.
19238 <!--page 386 -->
19239 <p><!--para 3 -->
19240  The first call in the sequence searches the string pointed to by s1 for the first character
19241  that is not contained in the current separator string pointed to by s2. If no such character
19242  is found, then there are no tokens in the string pointed to by s1 and the strtok function
19243  returns a null pointer. If such a character is found, it is the start of the first token.
19244 <p><!--para 4 -->
19245  The strtok function then searches from there for a character that is contained in the
19246  current separator string. If no such character is found, the current token extends to the
19247  end of the string pointed to by s1, and subsequent searches for a token will return a null
19248  pointer. If such a character is found, it is overwritten by a null character, which
19249  terminates the current token. The strtok function saves a pointer to the following
19250  character, from which the next search for a token will start.
19251 <p><!--para 5 -->
19252  Each subsequent call, with a null pointer as the value of the first argument, starts
19253  searching from the saved pointer and behaves as described above.
19254 <p><!--para 6 -->
19255  The strtok function is not required to avoid data races. The implementation shall
19256  behave as if no library function calls the strtok function.
19257 <p><b>Returns</b>
19258 <p><!--para 7 -->
19259  The strtok function returns a pointer to the first character of a token, or a null pointer
19260  if there is no token.
19261 <p><!--para 8 -->
19262  EXAMPLE
19263 <pre>
19264         #include <a href="#7.23">&lt;string.h&gt;</a>
19265         static char str[] = "?a???b,,,#c";
19266         char *t;
19267         t   =   strtok(str, "?");      //   t   points to the token "a"
19268         t   =   strtok(NULL, ",");     //   t   points to the token "??b"
19269         t   =   strtok(NULL, "#,");    //   t   points to the token "c"
19270         t   =   strtok(NULL, "?");     //   t   is a null pointer
19271 </pre>
19272  
19273
19274 <p><small><a href="#Contents">Contents</a></small>
19275 <h4><a name="7.23.6" href="#7.23.6">7.23.6 Miscellaneous functions</a></h4>
19276
19277 <p><small><a href="#Contents">Contents</a></small>
19278 <h5><a name="7.23.6.1" href="#7.23.6.1">7.23.6.1 The memset function</a></h5>
19279 <p><b>Synopsis</b>
19280 <p><!--para 1 -->
19281 <pre>
19282         #include <a href="#7.23">&lt;string.h&gt;</a>
19283         void *memset(void *s, int c, size_t n);
19284 </pre>
19285 <p><b>Description</b>
19286 <p><!--para 2 -->
19287  The memset function copies the value of c (converted to an unsigned char) into
19288  each of the first n characters of the object pointed to by s.
19289 <p><b>Returns</b>
19290 <p><!--para 3 -->
19291  The memset function returns the value of s.
19292 <!--page 387 -->
19293
19294 <p><small><a href="#Contents">Contents</a></small>
19295 <h5><a name="7.23.6.2" href="#7.23.6.2">7.23.6.2 The strerror function</a></h5>
19296 <p><b>Synopsis</b>
19297 <p><!--para 1 -->
19298 <pre>
19299          #include <a href="#7.23">&lt;string.h&gt;</a>
19300          char *strerror(int errnum);
19301 </pre>
19302 <p><b>Description</b>
19303 <p><!--para 2 -->
19304  The strerror function maps the number in errnum to a message string. Typically,
19305  the values for errnum come from errno, but strerror shall map any value of type
19306  int to a message.
19307 <p><!--para 3 -->
19308  The strerror function is not required to avoid data races. The implementation shall
19309  behave as if no library function calls the strerror function.
19310 <p><b>Returns</b>
19311 <p><!--para 4 -->
19312  The strerror function returns a pointer to the string, the contents of which are locale-
19313  specific. The array pointed to shall not be modified by the program, but may be
19314  overwritten by a subsequent call to the strerror function.
19315
19316 <p><small><a href="#Contents">Contents</a></small>
19317 <h5><a name="7.23.6.3" href="#7.23.6.3">7.23.6.3 The strlen function</a></h5>
19318 <p><b>Synopsis</b>
19319 <p><!--para 1 -->
19320 <pre>
19321          #include <a href="#7.23">&lt;string.h&gt;</a>
19322          size_t strlen(const char *s);
19323 </pre>
19324 <p><b>Description</b>
19325 <p><!--para 2 -->
19326  The strlen function computes the length of the string pointed to by s.
19327 <p><b>Returns</b>
19328 <p><!--para 3 -->
19329  The strlen function returns the number of characters that precede the terminating null
19330  character.
19331 <!--page 388 -->
19332
19333 <p><small><a href="#Contents">Contents</a></small>
19334 <h3><a name="7.24" href="#7.24">7.24 Type-generic math &lt;tgmath.h&gt;</a></h3>
19335 <p><!--para 1 -->
19336  The header <a href="#7.24">&lt;tgmath.h&gt;</a> includes the headers <a href="#7.12">&lt;math.h&gt;</a> and <a href="#7.3">&lt;complex.h&gt;</a> and
19337  defines several type-generic macros.
19338 <p><!--para 2 -->
19339  Of the <a href="#7.12">&lt;math.h&gt;</a> and <a href="#7.3">&lt;complex.h&gt;</a> functions without an f (float) or l (long
19340  double) suffix, several have one or more parameters whose corresponding real type is
19341  double. For each such function, except modf, there is a corresponding type-generic
19342  macro.<sup><a href="#note304"><b>304)</b></a></sup> The parameters whose corresponding real type is double in the function
19343  synopsis are generic parameters. Use of the macro invokes a function whose
19344  corresponding real type and type domain are determined by the arguments for the generic
19345  parameters.<sup><a href="#note305"><b>305)</b></a></sup>
19346 <p><!--para 3 -->
19347  Use of the macro invokes a function whose generic parameters have the corresponding
19348  real type determined as follows:
19349 <ul>
19350 <li>  First, if any argument for generic parameters has type long double, the type
19351  determined is long double.
19352 <li>  Otherwise, if any argument for generic parameters has type double or is of integer
19353  type, the type determined is double.
19354 <li>  Otherwise, the type determined is float.
19355 </ul>
19356 <p><!--para 4 -->
19357  For each unsuffixed function in <a href="#7.12">&lt;math.h&gt;</a> for which there is a function in
19358  <a href="#7.3">&lt;complex.h&gt;</a> with the same name except for a c prefix, the corresponding type-
19359  generic macro (for both functions) has the same name as the function in <a href="#7.12">&lt;math.h&gt;</a>. The
19360  corresponding type-generic macro for fabs and cabs is fabs.
19361  
19362  
19363  
19364  
19365 <!--page 389 -->
19366 <pre>
19367           <a href="#7.12">&lt;math.h&gt;</a>         <a href="#7.3">&lt;complex.h&gt;</a>              type-generic
19368            function           function                 macro
19369             acos              cacos                   acos
19370             asin              casin                   asin
19371             atan              catan                   atan
19372             acosh             cacosh                  acosh
19373             asinh             casinh                  asinh
19374             atanh             catanh                  atanh
19375             cos               ccos                    cos
19376             sin               csin                    sin
19377             tan               ctan                    tan
19378             cosh              ccosh                   cosh
19379             sinh              csinh                   sinh
19380             tanh              ctanh                   tanh
19381             exp               cexp                    exp
19382             log               clog                    log
19383             pow               cpow                    pow
19384             sqrt              csqrt                   sqrt
19385             fabs              cabs                    fabs
19386 </pre>
19387  If at least one argument for a generic parameter is complex, then use of the macro invokes
19388  a complex function; otherwise, use of the macro invokes a real function.
19389 <p><!--para 5 -->
19390  For each unsuffixed function in <a href="#7.12">&lt;math.h&gt;</a> without a c-prefixed counterpart in
19391  <a href="#7.3">&lt;complex.h&gt;</a> (except modf), the corresponding type-generic macro has the same
19392  name as the function. These type-generic macros are:
19393 <pre>
19394          atan2              fma                  llround              remainder
19395          cbrt               fmax                 log10                remquo
19396          ceil               fmin                 log1p                rint
19397          copysign           fmod                 log2                 round
19398          erf                frexp                logb                 scalbn
19399          erfc               hypot                lrint                scalbln
19400          exp2               ilogb                lround               tgamma
19401          expm1              ldexp                nearbyint            trunc
19402          fdim               lgamma               nextafter
19403          floor              llrint               nexttoward
19404 </pre>
19405  If all arguments for generic parameters are real, then use of the macro invokes a real
19406  function; otherwise, use of the macro results in undefined behavior.
19407 <!--page 390 -->
19408 <p><!--para 6 -->
19409  For each unsuffixed function in <a href="#7.3">&lt;complex.h&gt;</a> that is not a c-prefixed counterpart to a
19410  function in <a href="#7.12">&lt;math.h&gt;</a>, the corresponding type-generic macro has the same name as the
19411  function. These type-generic macros are:
19412 <pre>
19413         carg                     conj                     creal
19414         cimag                    cproj
19415 </pre>
19416  Use of the macro with any real or complex argument invokes a complex function.
19417 <p><!--para 7 -->
19418  EXAMPLE       With the declarations
19419 <pre>
19420          #include <a href="#7.24">&lt;tgmath.h&gt;</a>
19421          int n;
19422          float f;
19423          double d;
19424          long double ld;
19425          float complex fc;
19426          double complex dc;
19427          long double complex ldc;
19428 </pre>
19429  functions invoked by use of type-generic macros are shown in the following table:
19430 <!--page 391 -->
19431 <pre>
19432                   macro use                                  invokes
19433              exp(n)                              exp(n), the function
19434              acosh(f)                            acoshf(f)
19435              sin(d)                              sin(d), the function
19436              atan(ld)                            atanl(ld)
19437              log(fc)                             clogf(fc)
19438              sqrt(dc)                            csqrt(dc)
19439              pow(ldc, f)                         cpowl(ldc, f)
19440              remainder(n, n)                     remainder(n, n), the function
19441              nextafter(d, f)                     nextafter(d, f), the function
19442              nexttoward(f, ld)                   nexttowardf(f, ld)
19443              copysign(n, ld)                     copysignl(n, ld)
19444              ceil(fc)                            undefined behavior
19445              rint(dc)                            undefined behavior
19446              fmax(ldc, ld)                       undefined behavior
19447              carg(n)                             carg(n), the function
19448              cproj(f)                            cprojf(f)
19449              creal(d)                            creal(d), the function
19450              cimag(ld)                           cimagl(ld)
19451              fabs(fc)                            cabsf(fc)
19452              carg(dc)                            carg(dc), the function
19453              cproj(ldc)                          cprojl(ldc)
19454 </pre>
19455
19456 <p><b>Footnotes</b>
19457 <p><small><a name="note304" href="#note304">304)</a> Like other function-like macros in Standard libraries, each type-generic macro can be suppressed to
19458  make available the corresponding ordinary function.
19459 </small>
19460 <p><small><a name="note305" href="#note305">305)</a> If the type of the argument is not compatible with the type of the parameter for the selected function,
19461  the behavior is undefined.
19462 </small>
19463
19464 <p><small><a href="#Contents">Contents</a></small>
19465 <h3><a name="7.25" href="#7.25">7.25 Threads &lt;threads.h&gt;</a></h3>
19466
19467 <p><small><a href="#Contents">Contents</a></small>
19468 <h4><a name="7.25.1" href="#7.25.1">7.25.1 Introduction</a></h4>
19469 <p><!--para 1 -->
19470  The header <a href="#7.25">&lt;threads.h&gt;</a> defines macros, and declares types, enumeration constants,
19471  and functions that support multiple threads of execution.
19472 <p><!--para 2 -->
19473  Implementations that define the macro __STDC_NO_THREADS__ need not provide
19474  this header nor support any of its facilities.
19475 <p><!--para 3 -->
19476  The macros are
19477 <pre>
19478          ONCE_FLAG_INIT
19479 </pre>
19480  which expands to a value that can be used to initialize an object of type once_flag;
19481  and
19482 <pre>
19483          TSS_DTOR_ITERATIONS
19484 </pre>
19485  which expands to an integer constant expression representing the maximum number of
19486  times that destructors will be called when a thread terminates.
19487 <p><!--para 4 -->
19488  The types are
19489 <pre>
19490          cnd_t
19491 </pre>
19492  which is a complete object type that holds an identifier for a condition variable;
19493 <pre>
19494          thrd_t
19495 </pre>
19496  which is a complete object type that holds an identifier for a thread;
19497 <pre>
19498          tss_t
19499 </pre>
19500  which is a complete object type that holds an identifier for a thread-specific storage
19501  pointer;
19502 <pre>
19503          mtx_t
19504 </pre>
19505  which is a complete object type that holds an identifier for a mutex;
19506 <pre>
19507          tss_dtor_t
19508 </pre>
19509  which is the function pointer type void (*)(void*), used for a destructor for a
19510  thread-specific storage pointer;
19511 <pre>
19512          thrd_start_t
19513 </pre>
19514  which is the function pointer type int (*)(void*) that is passed to thrd_create
19515  to create a new thread;
19516 <pre>
19517          once_flag
19518 </pre>
19519  which is a complete object type that holds a flag for use by call_once; and
19520 <!--page 392 -->
19521 <pre>
19522         xtime
19523 </pre>
19524  which is a structure type that holds a time specified in seconds and nanoseconds. The
19525  structure shall contain at least the following members, in any order.
19526 <pre>
19527         time_t sec;
19528         long nsec;
19529 </pre>
19530 <p><!--para 5 -->
19531  The enumeration constants are
19532 <pre>
19533         mtx_plain
19534 </pre>
19535  which is passed to mtx_init to create a mutex object that supports neither timeout nor
19536  test and return;
19537 <pre>
19538         mtx_recursive
19539 </pre>
19540  which is passed to mtx_init to create a mutex object that supports recursive locking;
19541 <pre>
19542         mtx_timed
19543 </pre>
19544  which is passed to mtx_init to create a mutex object that supports timeout;
19545 <pre>
19546         mtx_try
19547 </pre>
19548  which is passed to mtx_init to create a mutex object that supports test and return;
19549 <pre>
19550         thrd_timeout
19551 </pre>
19552  which is returned by a timed wait function to indicate that the time specified in the call
19553  was reached without acquiring the requested resource;
19554 <pre>
19555         thrd_success
19556 </pre>
19557  which is returned by a function to indicate that the requested operation succeeded;
19558 <pre>
19559         thrd_busy
19560 </pre>
19561  which is returned by a function to indicate that the requested operation failed because a
19562  resource requested by a test and return function is already in use;
19563 <pre>
19564         thrd_error
19565 </pre>
19566  which is returned by a function to indicate that the requested operation failed; and
19567 <pre>
19568         thrd_nomem
19569 </pre>
19570  which is returned by a function to indicate that the requested operation failed because it
19571  was unable to allocate memory.
19572 <!--page 393 -->
19573
19574 <p><small><a href="#Contents">Contents</a></small>
19575 <h4><a name="7.25.2" href="#7.25.2">7.25.2 Initialization functions</a></h4>
19576
19577 <p><small><a href="#Contents">Contents</a></small>
19578 <h5><a name="7.25.2.1" href="#7.25.2.1">7.25.2.1 The call_once function</a></h5>
19579 <p><b>Synopsis</b>
19580 <p><!--para 1 -->
19581 <pre>
19582          #include <a href="#7.25">&lt;threads.h&gt;</a>
19583          void call_once(once_flag *flag, void (*func)(void));
19584 </pre>
19585 <p><b>Description</b>
19586 <p><!--para 2 -->
19587  The call_once function uses the once_flag pointed to by flag to ensure that
19588  func is called exactly once, the first time the call_once function is called with that
19589  value of flag. Completion of an effective call to the call_once function synchronizes
19590  with all subsequent calls to the call_once function with the same value of flag.
19591 <p><b>Returns</b>
19592 <p><!--para 3 -->
19593  The call_once function returns no value.
19594
19595 <p><small><a href="#Contents">Contents</a></small>
19596 <h4><a name="7.25.3" href="#7.25.3">7.25.3 Condition variable functions</a></h4>
19597
19598 <p><small><a href="#Contents">Contents</a></small>
19599 <h5><a name="7.25.3.1" href="#7.25.3.1">7.25.3.1 The cnd_broadcast function</a></h5>
19600 <p><b>Synopsis</b>
19601 <p><!--para 1 -->
19602 <pre>
19603          #include <a href="#7.25">&lt;threads.h&gt;</a>
19604          int cnd_broadcast(cnd_t *cond);
19605 </pre>
19606 <p><b>Description</b>
19607 <p><!--para 2 -->
19608  The cnd_broadcast function unblocks all of the threads that are blocked on the
19609  condition variable pointed to by cond at the time of the call. If no threads are blocked
19610  on the condition variable pointed to by cond at the time of the call, the function does
19611  nothing.
19612 <p><b>Returns</b>
19613 <p><!--para 3 -->
19614  The cnd_broadcast function returns thrd_success on success, or thrd_error
19615  if the request could not be honored.
19616
19617 <p><small><a href="#Contents">Contents</a></small>
19618 <h5><a name="7.25.3.2" href="#7.25.3.2">7.25.3.2 The cnd_destroy function</a></h5>
19619 <p><b>Synopsis</b>
19620 <p><!--para 1 -->
19621 <pre>
19622          #include <a href="#7.25">&lt;threads.h&gt;</a>
19623          void cnd_destroy(cnd_t *cond);
19624 </pre>
19625 <p><b>Description</b>
19626 <p><!--para 2 -->
19627  The cnd_destroy function releases all resources used by the condition variable
19628  pointed to by cond. The cnd_destroy function requires that no threads be blocked
19629  waiting for the condition variable pointed to by cond.
19630 <!--page 394 -->
19631 <p><b>Returns</b>
19632 <p><!--para 3 -->
19633  The cnd_destroy function returns no value.
19634
19635 <p><small><a href="#Contents">Contents</a></small>
19636 <h5><a name="7.25.3.3" href="#7.25.3.3">7.25.3.3 The cnd_init function</a></h5>
19637 <p><b>Synopsis</b>
19638 <p><!--para 1 -->
19639 <pre>
19640         #include <a href="#7.25">&lt;threads.h&gt;</a>
19641         int cnd_init(cnd_t *cond);
19642 </pre>
19643 <p><b>Description</b>
19644 <p><!--para 2 -->
19645  The cnd_init function creates a condition variable. If it succeeds it sets the variable
19646  pointed to by cond to a value that uniquely identifies the newly created condition
19647  variable. A thread that calls cnd_wait on a newly created condition variable will
19648  block.
19649 <p><b>Returns</b>
19650 <p><!--para 3 -->
19651  The cnd_init function returns thrd_success on success, or thrd_nomem if no
19652  memory could be allocated for the newly created condition, or thrd_error if the
19653  request could not be honored.
19654
19655 <p><small><a href="#Contents">Contents</a></small>
19656 <h5><a name="7.25.3.4" href="#7.25.3.4">7.25.3.4 The cnd_signal function</a></h5>
19657 <p><b>Synopsis</b>
19658 <p><!--para 1 -->
19659 <pre>
19660         #include <a href="#7.25">&lt;threads.h&gt;</a>
19661         int cnd_signal(cnd_t *cond);
19662 </pre>
19663 <p><b>Description</b>
19664 <p><!--para 2 -->
19665  The cnd_signal function unblocks one of the threads that are blocked on the
19666  condition variable pointed to by cond at the time of the call. If no threads are blocked
19667  on the condition variable at the time of the call, the function does nothing and return
19668  success.
19669 <p><b>Returns</b>
19670 <p><!--para 3 -->
19671  The cnd_signal function returns thrd_success on success or thrd_error if
19672  the request could not be honored.
19673
19674 <p><small><a href="#Contents">Contents</a></small>
19675 <h5><a name="7.25.3.5" href="#7.25.3.5">7.25.3.5 The cnd_timedwait function</a></h5>
19676 <p><b>Synopsis</b>
19677 <p><!--para 1 -->
19678 <!--page 395 -->
19679 <pre>
19680         #include <a href="#7.25">&lt;threads.h&gt;</a>
19681         int cnd_timedwait(cnd_t *cond, mtx_t *mtx,
19682              const xtime *xt);
19683 </pre>
19684 <p><b>Description</b>
19685 <p><!--para 2 -->
19686  The cnd_timedwait function atomically unlocks the mutex pointed to by mtx and
19687  endeavors to block until the condition variable pointed to by cond is signaled by a call to
19688  cnd_signal or to cnd_broadcast, or until after the time specified by the xtime
19689  object pointed to by xt. When the calling thread becomes unblocked it locks the variable
19690  pointed to by mtx before it returns. The cnd_timedwait function requires that the
19691  mutex pointed to by mtx be locked by the calling thread.
19692 <p><b>Returns</b>
19693 <p><!--para 3 -->
19694  The cnd_timedwait function returns thrd_success upon success, or
19695  thrd_timeout if the time specified in the call was reached without acquiring the
19696  requested resource, or thrd_error if the request could not be honored.
19697
19698 <p><small><a href="#Contents">Contents</a></small>
19699 <h5><a name="7.25.3.6" href="#7.25.3.6">7.25.3.6 The cnd_wait function</a></h5>
19700 <p><b>Synopsis</b>
19701 <p><!--para 1 -->
19702 <pre>
19703          #include <a href="#7.25">&lt;threads.h&gt;</a>
19704          int cnd_wait(cnd_t *cond, mtx_t *mtx);
19705 </pre>
19706 <p><b>Description</b>
19707 <p><!--para 2 -->
19708  The cnd_wait function atomically unlocks the mutex pointed to by mtx and endeavors
19709  to block until the condition variable pointed to by cond is signaled by a call to
19710  cnd_signal or to cnd_broadcast. When the calling thread becomes unblocked it
19711  locks the mutex pointed to by mtx before it returns. If the mutex pointed to by mtx is
19712  not locked by the calling thread, the cnd_wait function will act as if the abort
19713  function is called.
19714 <p><b>Returns</b>
19715 <p><!--para 3 -->
19716  The cnd_wait function returns thrd_success on success or thrd_error if the
19717  request could not be honored.
19718
19719 <p><small><a href="#Contents">Contents</a></small>
19720 <h4><a name="7.25.4" href="#7.25.4">7.25.4 Mutex functions</a></h4>
19721
19722 <p><small><a href="#Contents">Contents</a></small>
19723 <h5><a name="7.25.4.1" href="#7.25.4.1">7.25.4.1 The mtx_destroy function</a></h5>
19724 <p><b>Synopsis</b>
19725 <p><!--para 1 -->
19726 <pre>
19727          #include <a href="#7.25">&lt;threads.h&gt;</a>
19728          void mtx_destroy(mtx_t *mtx);
19729 </pre>
19730 <p><b>Description</b>
19731 <p><!--para 2 -->
19732  The mtx_destroy function releases any resources used by the mutex pointed to by
19733  mtx. No threads can be blocked waiting for the mutex pointed to by mtx.
19734 <!--page 396 -->
19735 <p><b>Returns</b>
19736 <p><!--para 3 -->
19737  The mtx_destroy function returns no value.
19738
19739 <p><small><a href="#Contents">Contents</a></small>
19740 <h5><a name="7.25.4.2" href="#7.25.4.2">7.25.4.2 The mtx_init function</a></h5>
19741 <p><b>Synopsis</b>
19742 <p><!--para 1 -->
19743 <pre>
19744         #include <a href="#7.25">&lt;threads.h&gt;</a>
19745         int mtx_init(mtx_t *mtx, int type);
19746 </pre>
19747 <p><b>Description</b>
19748 <p><!--para 2 -->
19749  The mtx_init function creates a mutex object with properties indicated by type,
19750  which must have one of the six values:
19751  mtx_plain for a simple non-recursive mutex,
19752  mtx_timed for a non-recursive mutex that supports timeout,
19753  mtx_try      for a non-recursive mutex that supports test and return,
19754  mtx_plain | mtx_recursive for a simple recursive mutex,
19755  mtx_timed | mtx_recursive for a recursive mutex that supports timeout, or
19756  mtx_try | mtx_recursive for a recursive mutex that supports test and return.
19757 <p><!--para 3 -->
19758  If the mtx_init function succeeds, it sets the mutex pointed to by mtx to a value that
19759  uniquely identifies the newly created mutex.
19760 <p><b>Returns</b>
19761 <p><!--para 4 -->
19762  The mtx_init function returns thrd_success on success, or thrd_error if the
19763  request could not be honored.
19764
19765 <p><small><a href="#Contents">Contents</a></small>
19766 <h5><a name="7.25.4.3" href="#7.25.4.3">7.25.4.3 The mtx_lock function</a></h5>
19767 <p><b>Synopsis</b>
19768 <p><!--para 1 -->
19769 <pre>
19770         #include <a href="#7.25">&lt;threads.h&gt;</a>
19771         int mtx_lock(mtx_t *mtx);
19772 </pre>
19773 <p><b>Description</b>
19774 <p><!--para 2 -->
19775  The mtx_lock function blocks until it locks the mutex pointed to by mtx. If the mutex
19776  is non-recursive, it shall not be locked by the calling thread. Prior calls to mtx_unlock
19777  on the same mutex shall synchronize with this operation.
19778 <p><b>Returns</b>
19779 <p><!--para 3 -->
19780  The mtx_lock function returns thrd_success on success, or thrd_busy if the
19781  resource requested is already in use, or thrd_error if the request could not be
19782  honored.
19783 <!--page 397 -->
19784
19785 <p><small><a href="#Contents">Contents</a></small>
19786 <h5><a name="7.25.4.4" href="#7.25.4.4">7.25.4.4 The mtx_timedlock function</a></h5>
19787 <p><b>Synopsis</b>
19788 <p><!--para 1 -->
19789 <pre>
19790          #include <a href="#7.25">&lt;threads.h&gt;</a>
19791          int mtx_timedlock(mtx_t *mtx, const xtime *xt);
19792 </pre>
19793 <p><b>Description</b>
19794 <p><!--para 2 -->
19795  The mtx_timedlock function endeavors to block until it locks the mutex pointed to by
19796  mtx or until the time specified by the xtime object xt has passed. The specified mutex
19797  shall support timeout. If the operation succeeds, prior calls to mtx_unlock on the same
19798  mutex shall synchronize with this operation.
19799 <p><b>Returns</b>
19800 <p><!--para 3 -->
19801  The mtx_timedlock function returns thrd_success on success, or thrd_busy
19802  if the resource requested is already in use, or thrd_timeout if the time specified was
19803  reached without acquiring the requested resource, or thrd_error if the request could
19804  not be honored.
19805
19806 <p><small><a href="#Contents">Contents</a></small>
19807 <h5><a name="7.25.4.5" href="#7.25.4.5">7.25.4.5 The mtx_trylock function</a></h5>
19808 <p><b>Synopsis</b>
19809 <p><!--para 1 -->
19810 <pre>
19811          #include <a href="#7.25">&lt;threads.h&gt;</a>
19812          int mtx_trylock(mtx_t *mtx);
19813 </pre>
19814 <p><b>Description</b>
19815 <p><!--para 2 -->
19816  The mtx_trylock function endeavors to lock the mutex pointed to by mtx. The
19817  specified mutex shall support either test and return or timeout. If the mutex is already
19818  locked, the function returns without blocking. If the operation succeeds, prior calls to
19819  mtx_unlock on the same mutex shall synchronize with this operation.
19820 <p><b>Returns</b>
19821 <p><!--para 3 -->
19822  The mtx_trylock function returns thrd_success on success, or thrd_busy if
19823  the resource requested is already in use, or thrd_error if the request could not be
19824  honored.
19825
19826 <p><small><a href="#Contents">Contents</a></small>
19827 <h5><a name="7.25.4.6" href="#7.25.4.6">7.25.4.6 The mtx_unlock function</a></h5>
19828 <p><b>Synopsis</b>
19829 <p><!--para 1 -->
19830 <pre>
19831          #include <a href="#7.25">&lt;threads.h&gt;</a>
19832          int mtx_unlock(mtx_t *mtx);
19833 </pre>
19834 <p><b>Description</b>
19835 <p><!--para 2 -->
19836  The mtx_unlock function unlocks the mutex pointed to by mtx. The mutex pointed to
19837  by mtx shall be locked by the calling thread.
19838 <!--page 398 -->
19839 <p><b>Returns</b>
19840 <p><!--para 3 -->
19841  The mtx_unlock function returns thrd_success on success or thrd_error if
19842  the request could not be honored.
19843
19844 <p><small><a href="#Contents">Contents</a></small>
19845 <h4><a name="7.25.5" href="#7.25.5">7.25.5 Thread functions</a></h4>
19846
19847 <p><small><a href="#Contents">Contents</a></small>
19848 <h5><a name="7.25.5.1" href="#7.25.5.1">7.25.5.1 The thrd_create function</a></h5>
19849 <p><b>Synopsis</b>
19850 <p><!--para 1 -->
19851 <pre>
19852         #include <a href="#7.25">&lt;threads.h&gt;</a>
19853         int thrd_create(thrd_t *thr, thrd_start_t func,
19854              void *arg);
19855 </pre>
19856 <p><b>Description</b>
19857 <p><!--para 2 -->
19858  The thrd_create function creates a new thread executing func(arg). If the
19859  thrd_create function succeeds, it sets the object pointed to by thr to the identifier of
19860  the newly created thread. (A thread's identifier may be reused for a different thread once
19861  the original thread has exited and either been detached or joined to another thread.) The
19862  completion of the thrd_create function synchronizes with the beginning of the
19863  execution of the new thread.
19864 <p><b>Returns</b>
19865 <p><!--para 3 -->
19866  The thrd_create function returns thrd_success on success, or thrd_nomem if
19867  no memory could be allocated for the thread requested, or thrd_error if the request
19868  could not be honored.
19869
19870 <p><small><a href="#Contents">Contents</a></small>
19871 <h5><a name="7.25.5.2" href="#7.25.5.2">7.25.5.2 The thrd_current function</a></h5>
19872 <p><b>Synopsis</b>
19873 <p><!--para 1 -->
19874 <pre>
19875         #include <a href="#7.25">&lt;threads.h&gt;</a>
19876         thrd_t thrd_current(void);
19877 </pre>
19878 <p><b>Description</b>
19879 <p><!--para 2 -->
19880  The thrd_current function identifies the thread that called it.
19881 <p><b>Returns</b>
19882 <p><!--para 3 -->
19883  The thrd_current function returns the identifier of the thread that called it.
19884
19885 <p><small><a href="#Contents">Contents</a></small>
19886 <h5><a name="7.25.5.3" href="#7.25.5.3">7.25.5.3 The thrd_detach function</a></h5>
19887 <p><b>Synopsis</b>
19888 <p><!--para 1 -->
19889 <!--page 399 -->
19890 <pre>
19891         #include <a href="#7.25">&lt;threads.h&gt;</a>
19892         int thrd_detach(thrd_t thr);
19893 </pre>
19894 <p><b>Description</b>
19895 <p><!--para 2 -->
19896  The thrd_detach function tells the operating system to dispose of any resources
19897  allocated to the thread identified by thr when that thread terminates. The thread
19898  identified by thr shall not have been previously detached or joined with another thread.
19899 <p><b>Returns</b>
19900 <p><!--para 3 -->
19901  The thrd_detach function returns thrd_success on success or thrd_error if
19902  the request could not be honored.
19903
19904 <p><small><a href="#Contents">Contents</a></small>
19905 <h5><a name="7.25.5.4" href="#7.25.5.4">7.25.5.4 The thrd_equal function</a></h5>
19906 <p><b>Synopsis</b>
19907 <p><!--para 1 -->
19908 <pre>
19909          #include <a href="#7.25">&lt;threads.h&gt;</a>
19910          int thrd_equal(thrd_t thr0, thrd_t thr1);
19911 </pre>
19912 <p><b>Description</b>
19913 <p><!--para 2 -->
19914  The thrd_equal function will determine whether the thread identified by thr0 refers
19915  to the thread identified by thr1.
19916 <p><b>Returns</b>
19917 <p><!--para 3 -->
19918  The thrd_equal function returns zero if the thread thr0 and the thread thr1 refer to
19919  different threads. Otherwise the thrd_equal function returns a nonzero value.
19920
19921 <p><small><a href="#Contents">Contents</a></small>
19922 <h5><a name="7.25.5.5" href="#7.25.5.5">7.25.5.5 The thrd_exit function</a></h5>
19923 <p><b>Synopsis</b>
19924 <p><!--para 1 -->
19925 <pre>
19926          #include <a href="#7.25">&lt;threads.h&gt;</a>
19927          void thrd_exit(int res);
19928 </pre>
19929 <p><b>Description</b>
19930 <p><!--para 2 -->
19931  The thrd_exit function terminates execution of the calling thread and sets its result
19932  code to res.
19933 <p><b>Returns</b>
19934 <p><!--para 3 -->
19935  The thrd_exit function returns no value.
19936
19937 <p><small><a href="#Contents">Contents</a></small>
19938 <h5><a name="7.25.5.6" href="#7.25.5.6">7.25.5.6 The thrd_join function</a></h5>
19939 <p><b>Synopsis</b>
19940 <p><!--para 1 -->
19941 <pre>
19942          #include <a href="#7.25">&lt;threads.h&gt;</a>
19943          int thrd_join(thrd_t thr, int *res);
19944 </pre>
19945 <p><b>Description</b>
19946 <p><!--para 2 -->
19947  The thrd_join function joins the thread identified by thr with the current thread by
19948  blocking until the other thread has terminated. If the parameter res is not a null pointer,
19949 <!--page 400 -->
19950  it stores the thread's result code in the integer pointed to by res. The termination of the
19951  other thread synchronizes with the completion of the thrd_join function. The thread
19952  identified by thr shall not have been previously detached or joined with another thread.
19953 <p><b>Returns</b>
19954 <p><!--para 3 -->
19955  The thrd_join function returns thrd_success on success or thrd_error if the
19956  request could not be honored.
19957
19958 <p><small><a href="#Contents">Contents</a></small>
19959 <h5><a name="7.25.5.7" href="#7.25.5.7">7.25.5.7 The thrd_sleep function</a></h5>
19960 <p><b>Synopsis</b>
19961 <p><!--para 1 -->
19962 <pre>
19963         #include <a href="#7.25">&lt;threads.h&gt;</a>
19964         void thrd_sleep(const xtime *xt);
19965 </pre>
19966 <p><b>Description</b>
19967 <p><!--para 2 -->
19968  The thrd_sleep function suspends execution of the calling thread until after the time
19969  specified by the xtime object pointed to by xt.
19970 <p><b>Returns</b>
19971 <p><!--para 3 -->
19972  The thrd_sleep function returns no value.
19973
19974 <p><small><a href="#Contents">Contents</a></small>
19975 <h5><a name="7.25.5.8" href="#7.25.5.8">7.25.5.8 The thrd_yield function</a></h5>
19976 <p><b>Synopsis</b>
19977 <p><!--para 1 -->
19978 <pre>
19979         #include <a href="#7.25">&lt;threads.h&gt;</a>
19980         void thrd_yield(void);
19981 </pre>
19982 <p><b>Description</b>
19983 <p><!--para 2 -->
19984  The thrd_yield function endeavors to permit other threads to run, even if the current
19985  thread would ordinarily continue to run.
19986 <p><b>Returns</b>
19987 <p><!--para 3 -->
19988  The thrd_yield function returns no value.
19989
19990 <p><small><a href="#Contents">Contents</a></small>
19991 <h4><a name="7.25.6" href="#7.25.6">7.25.6 Thread-specific storage functions</a></h4>
19992
19993 <p><small><a href="#Contents">Contents</a></small>
19994 <h5><a name="7.25.6.1" href="#7.25.6.1">7.25.6.1 The tss_create function</a></h5>
19995 <p><b>Synopsis</b>
19996 <p><!--para 1 -->
19997 <pre>
19998         #include <a href="#7.25">&lt;threads.h&gt;</a>
19999         int tss_create(tss_t *key, tss_dtor_t dtor);
20000 </pre>
20001 <p><b>Description</b>
20002 <p><!--para 2 -->
20003  The tss_create function creates a thread-specific storage pointer with destructor
20004  dtor, which may be null.
20005 <!--page 401 -->
20006 <p><b>Returns</b>
20007 <p><!--para 3 -->
20008  If the tss_create function is successful, it sets the thread-specific storage pointed to
20009  by key to a value that uniquely identifies the newly created pointer and returns
20010  thrd_success; otherwise, thrd_error is returned and the thread-specific storage
20011  pointed to by key is set to an undefined value.
20012
20013 <p><small><a href="#Contents">Contents</a></small>
20014 <h5><a name="7.25.6.2" href="#7.25.6.2">7.25.6.2 The tss_delete function</a></h5>
20015 <p><b>Synopsis</b>
20016 <p><!--para 1 -->
20017 <pre>
20018          #include <a href="#7.25">&lt;threads.h&gt;</a>
20019          void tss_delete(tss_t key);
20020 </pre>
20021 <p><b>Description</b>
20022 <p><!--para 2 -->
20023  The tss_delete function releases any resources used by the thread-specific storage
20024  identified by key.
20025 <p><b>Returns</b>
20026 <p><!--para 3 -->
20027  The tss_delete function returns no value.
20028
20029 <p><small><a href="#Contents">Contents</a></small>
20030 <h5><a name="7.25.6.3" href="#7.25.6.3">7.25.6.3 The tss_get function</a></h5>
20031 <p><b>Synopsis</b>
20032 <p><!--para 1 -->
20033 <pre>
20034          #include <a href="#7.25">&lt;threads.h&gt;</a>
20035          void *tss_get(tss_t key);
20036 </pre>
20037 <p><b>Description</b>
20038 <p><!--para 2 -->
20039  The tss_get function returns the value for the current thread held in the thread-specific
20040  storage identified by key.
20041 <p><b>Returns</b>
20042 <p><!--para 3 -->
20043  The tss_get function returns the value for the current thread if successful, or zero if
20044  unsuccessful.
20045
20046 <p><small><a href="#Contents">Contents</a></small>
20047 <h5><a name="7.25.6.4" href="#7.25.6.4">7.25.6.4 The tss_set function</a></h5>
20048 <p><b>Synopsis</b>
20049 <p><!--para 1 -->
20050 <pre>
20051          #include <a href="#7.25">&lt;threads.h&gt;</a>
20052          int tss_set(tss_t key, void *val);
20053 </pre>
20054 <p><b>Description</b>
20055 <p><!--para 2 -->
20056  The tss_set function sets the value for the current thread held in the thread-specific
20057  storage identified by key to val.
20058 <!--page 402 -->
20059 <p><b>Returns</b>
20060 <p><!--para 3 -->
20061  The tss_set function returns thrd_success on success or thrd_error if the
20062  request could not be honored.
20063
20064 <p><small><a href="#Contents">Contents</a></small>
20065 <h4><a name="7.25.7" href="#7.25.7">7.25.7 Time functions</a></h4>
20066
20067 <p><small><a href="#Contents">Contents</a></small>
20068 <h5><a name="7.25.7.1" href="#7.25.7.1">7.25.7.1 The xtime_get function</a></h5>
20069 <p><b>Synopsis</b>
20070 <p><!--para 1 -->
20071 <pre>
20072          #include <a href="#7.25">&lt;threads.h&gt;</a>
20073          int xtime_get(xtime *xt, int base);
20074 </pre>
20075 <p><b>Description</b>
20076 <p><!--para 2 -->
20077  The xtime_get function sets the xtime object pointed to by xt to hold the current
20078  time based on the time base base.
20079 <p><b>Returns</b>
20080 <p><!--para 3 -->
20081  If the xtime_get function is successful it returns the nonzero value base, which must
20082  be TIME_UTC; otherwise, it returns zero.<sup><a href="#note306"><b>306)</b></a></sup>
20083  
20084  
20085  
20086  
20087 <!--page 403 -->
20088
20089 <p><b>Footnotes</b>
20090 <p><small><a name="note306" href="#note306">306)</a> Although an xtime object describes times with nanosecond resolution, the actual resolution in an
20091  xtime object is system dependent.
20092 </small>
20093
20094 <p><small><a href="#Contents">Contents</a></small>
20095 <h3><a name="7.26" href="#7.26">7.26 Date and time &lt;time.h&gt;</a></h3>
20096
20097 <p><small><a href="#Contents">Contents</a></small>
20098 <h4><a name="7.26.1" href="#7.26.1">7.26.1 Components of time</a></h4>
20099 <p><!--para 1 -->
20100  The header <a href="#7.26">&lt;time.h&gt;</a> defines two macros, and declares several types and functions for
20101  manipulating time. Many functions deal with a calendar time that represents the current
20102  date (according to the Gregorian calendar) and time. Some functions deal with local
20103  time, which is the calendar time expressed for some specific time zone, and with Daylight
20104  Saving Time, which is a temporary change in the algorithm for determining local time.
20105  The local time zone and Daylight Saving Time are implementation-defined.
20106 <p><!--para 2 -->
20107  The macros defined are NULL (described in <a href="#7.19">7.19</a>); and
20108 <pre>
20109          CLOCKS_PER_SEC
20110 </pre>
20111  which expands to an expression with type clock_t (described below) that is the
20112  number per second of the value returned by the clock function.
20113 <p><!--para 3 -->
20114  The types declared are size_t (described in <a href="#7.19">7.19</a>);
20115 <pre>
20116          clock_t
20117 </pre>
20118  and
20119 <pre>
20120          time_t
20121 </pre>
20122  which are arithmetic types capable of representing times; and
20123 <pre>
20124          struct tm
20125 </pre>
20126  which holds the components of a calendar time, called the broken-down time.
20127 <p><!--para 4 -->
20128  The range and precision of times representable in clock_t and time_t are
20129  implementation-defined. The tm structure shall contain at least the following members,
20130  in any order. The semantics of the members and their normal ranges are expressed in the
20131  comments.<sup><a href="#note307"><b>307)</b></a></sup>
20132 <pre>
20133          int    tm_sec;           //   seconds after the minute -- [0, 60]
20134          int    tm_min;           //   minutes after the hour -- [0, 59]
20135          int    tm_hour;          //   hours since midnight -- [0, 23]
20136          int    tm_mday;          //   day of the month -- [1, 31]
20137          int    tm_mon;           //   months since January -- [0, 11]
20138          int    tm_year;          //   years since 1900
20139          int    tm_wday;          //   days since Sunday -- [0, 6]
20140          int    tm_yday;          //   days since January 1 -- [0, 365]
20141          int    tm_isdst;         //   Daylight Saving Time flag
20142 </pre>
20143  
20144  
20145  
20146 <!--page 404 -->
20147  The value of tm_isdst is positive if Daylight Saving Time is in effect, zero if Daylight
20148  Saving Time is not in effect, and negative if the information is not available.
20149
20150 <p><b>Footnotes</b>
20151 <p><small><a name="note307" href="#note307">307)</a> The range [0, 60] for tm_sec allows for a positive leap second.
20152 </small>
20153
20154 <p><small><a href="#Contents">Contents</a></small>
20155 <h4><a name="7.26.2" href="#7.26.2">7.26.2 Time manipulation functions</a></h4>
20156
20157 <p><small><a href="#Contents">Contents</a></small>
20158 <h5><a name="7.26.2.1" href="#7.26.2.1">7.26.2.1 The clock function</a></h5>
20159 <p><b>Synopsis</b>
20160 <p><!--para 1 -->
20161 <pre>
20162          #include <a href="#7.26">&lt;time.h&gt;</a>
20163          clock_t clock(void);
20164 </pre>
20165 <p><b>Description</b>
20166 <p><!--para 2 -->
20167  The clock function determines the processor time used.
20168 <p><b>Returns</b>
20169 <p><!--para 3 -->
20170  The clock function returns the implementation's best approximation to the processor
20171  time used by the program since the beginning of an implementation-defined era related
20172  only to the program invocation. To determine the time in seconds, the value returned by
20173  the clock function should be divided by the value of the macro CLOCKS_PER_SEC. If
20174  the processor time used is not available or its value cannot be represented, the function
20175  returns the value (clock_t)(-1).<sup><a href="#note308"><b>308)</b></a></sup>
20176
20177 <p><b>Footnotes</b>
20178 <p><small><a name="note308" href="#note308">308)</a> In order to measure the time spent in a program, the clock function should be called at the start of
20179  the program and its return value subtracted from the value returned by subsequent calls.
20180 </small>
20181
20182 <p><small><a href="#Contents">Contents</a></small>
20183 <h5><a name="7.26.2.2" href="#7.26.2.2">7.26.2.2 The difftime function</a></h5>
20184 <p><b>Synopsis</b>
20185 <p><!--para 1 -->
20186 <pre>
20187          #include <a href="#7.26">&lt;time.h&gt;</a>
20188          double difftime(time_t time1, time_t time0);
20189 </pre>
20190 <p><b>Description</b>
20191 <p><!--para 2 -->
20192  The difftime function computes the difference between two calendar times: time1 -
20193  time0.
20194 <p><b>Returns</b>
20195 <p><!--para 3 -->
20196  The difftime function returns the difference expressed in seconds as a double.
20197  
20198  
20199  
20200  
20201 <!--page 405 -->
20202
20203 <p><small><a href="#Contents">Contents</a></small>
20204 <h5><a name="7.26.2.3" href="#7.26.2.3">7.26.2.3 The mktime function</a></h5>
20205 <p><b>Synopsis</b>
20206 <p><!--para 1 -->
20207 <pre>
20208          #include <a href="#7.26">&lt;time.h&gt;</a>
20209          time_t mktime(struct tm *timeptr);
20210 </pre>
20211 <p><b>Description</b>
20212 <p><!--para 2 -->
20213  The mktime function converts the broken-down time, expressed as local time, in the
20214  structure pointed to by timeptr into a calendar time value with the same encoding as
20215  that of the values returned by the time function. The original values of the tm_wday
20216  and tm_yday components of the structure are ignored, and the original values of the
20217  other components are not restricted to the ranges indicated above.<sup><a href="#note309"><b>309)</b></a></sup> On successful
20218  completion, the values of the tm_wday and tm_yday components of the structure are
20219  set appropriately, and the other components are set to represent the specified calendar
20220  time, but with their values forced to the ranges indicated above; the final value of
20221  tm_mday is not set until tm_mon and tm_year are determined.
20222 <p><b>Returns</b>
20223 <p><!--para 3 -->
20224  The mktime function returns the specified calendar time encoded as a value of type
20225  time_t. If the calendar time cannot be represented, the function returns the value
20226  (time_t)(-1).
20227 <p><!--para 4 -->
20228  EXAMPLE       What day of the week is July 4, 2001?
20229 <pre>
20230          #include <a href="#7.21">&lt;stdio.h&gt;</a>
20231          #include <a href="#7.26">&lt;time.h&gt;</a>
20232          static const char *const wday[] = {
20233                  "Sunday", "Monday", "Tuesday", "Wednesday",
20234                  "Thursday", "Friday", "Saturday", "-unknown-"
20235          };
20236          struct tm time_str;
20237          /* ... */
20238 </pre>
20239  
20240  
20241  
20242  
20243 <!--page 406 -->
20244 <pre>
20245         time_str.tm_year   = 2001 - 1900;
20246         time_str.tm_mon    = 7 - 1;
20247         time_str.tm_mday   = 4;
20248         time_str.tm_hour   = 0;
20249         time_str.tm_min    = 0;
20250         time_str.tm_sec    = 1;
20251         time_str.tm_isdst = -1;
20252         if (mktime(&amp;time_str) == (time_t)(-1))
20253               time_str.tm_wday = 7;
20254         printf("%s\n", wday[time_str.tm_wday]);
20255 </pre>
20256  
20257
20258 <p><b>Footnotes</b>
20259 <p><small><a name="note309" href="#note309">309)</a> Thus, a positive or zero value for tm_isdst causes the mktime function to presume initially that
20260  Daylight Saving Time, respectively, is or is not in effect for the specified time. A negative value
20261  causes it to attempt to determine whether Daylight Saving Time is in effect for the specified time.
20262 </small>
20263
20264 <p><small><a href="#Contents">Contents</a></small>
20265 <h5><a name="7.26.2.4" href="#7.26.2.4">7.26.2.4 The time function</a></h5>
20266 <p><b>Synopsis</b>
20267 <p><!--para 1 -->
20268 <pre>
20269         #include <a href="#7.26">&lt;time.h&gt;</a>
20270         time_t time(time_t *timer);
20271 </pre>
20272 <p><b>Description</b>
20273 <p><!--para 2 -->
20274  The time function determines the current calendar time. The encoding of the value is
20275  unspecified.
20276 <p><b>Returns</b>
20277 <p><!--para 3 -->
20278  The time function returns the implementation's best approximation to the current
20279  calendar time. The value (time_t)(-1) is returned if the calendar time is not
20280  available. If timer is not a null pointer, the return value is also assigned to the object it
20281  points to.
20282
20283 <p><small><a href="#Contents">Contents</a></small>
20284 <h4><a name="7.26.3" href="#7.26.3">7.26.3 Time conversion functions</a></h4>
20285 <p><!--para 1 -->
20286  Except for the strftime function, these functions each return a pointer to one of two
20287  types of static objects: a broken-down time structure or an array of char. Execution of
20288  any of the functions that return a pointer to one of these object types may overwrite the
20289  information in any object of the same type pointed to by the value returned from any
20290  previous call to any of them and the functions are not required to avoid data races. The
20291  implementation shall behave as if no other library functions call these functions.
20292
20293 <p><small><a href="#Contents">Contents</a></small>
20294 <h5><a name="7.26.3.1" href="#7.26.3.1">7.26.3.1 The asctime function</a></h5>
20295 <p><b>Synopsis</b>
20296 <p><!--para 1 -->
20297 <pre>
20298         #include <a href="#7.26">&lt;time.h&gt;</a>
20299         char *asctime(const struct tm *timeptr);
20300 </pre>
20301 <p><b>Description</b>
20302 <p><!--para 2 -->
20303  The asctime function converts the broken-down time in the structure pointed to by
20304  timeptr into a string in the form
20305 <!--page 407 -->
20306 <pre>
20307         Sun Sep 16 01:03:52 1973\n\0
20308 </pre>
20309  using the equivalent of the following algorithm.
20310  char *asctime(const struct tm *timeptr)
20311  {
20312 <pre>
20313       static const char wday_name[7][3] = {
20314            "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
20315       };
20316       static const char mon_name[12][3] = {
20317            "Jan", "Feb", "Mar", "Apr", "May", "Jun",
20318            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
20319       };
20320       static char result[26];
20321          sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
20322               wday_name[timeptr-&gt;tm_wday],
20323               mon_name[timeptr-&gt;tm_mon],
20324               timeptr-&gt;tm_mday, timeptr-&gt;tm_hour,
20325               timeptr-&gt;tm_min, timeptr-&gt;tm_sec,
20326               1900 + timeptr-&gt;tm_year);
20327          return result;
20328 </pre>
20329  }
20330 <p><!--para 3 -->
20331  If any of the fields of the broken-down time contain values that are outside their normal
20332  ranges,<sup><a href="#note310"><b>310)</b></a></sup> the behavior of the asctime function is undefined. Likewise, if the
20333  calculated year exceeds four digits or is less than the year 1000, the behavior is
20334  undefined.
20335 <p><b>Returns</b>
20336 <p><!--para 4 -->
20337  The asctime function returns a pointer to the string.
20338
20339 <p><b>Footnotes</b>
20340 <p><small><a name="note310" href="#note310">310)</a> See <a href="#7.26.1">7.26.1</a>.
20341 </small>
20342
20343 <p><small><a href="#Contents">Contents</a></small>
20344 <h5><a name="7.26.3.2" href="#7.26.3.2">7.26.3.2 The ctime function</a></h5>
20345 <p><b>Synopsis</b>
20346 <p><!--para 1 -->
20347 <pre>
20348          #include <a href="#7.26">&lt;time.h&gt;</a>
20349          char *ctime(const time_t *timer);
20350 </pre>
20351 <p><b>Description</b>
20352 <p><!--para 2 -->
20353  The ctime function converts the calendar time pointed to by timer to local time in the
20354  form of a string. It is equivalent to
20355 <pre>
20356          asctime(localtime(timer))
20357 </pre>
20358  
20359  
20360  
20361 <!--page 408 -->
20362 <p><b>Returns</b>
20363 <p><!--para 3 -->
20364  The ctime function returns the pointer returned by the asctime function with that
20365  broken-down time as argument.
20366 <p><b> Forward references</b>: the localtime function (<a href="#7.26.3.4">7.26.3.4</a>).
20367
20368 <p><small><a href="#Contents">Contents</a></small>
20369 <h5><a name="7.26.3.3" href="#7.26.3.3">7.26.3.3 The gmtime function</a></h5>
20370 <p><b>Synopsis</b>
20371 <p><!--para 1 -->
20372 <pre>
20373         #include <a href="#7.26">&lt;time.h&gt;</a>
20374         struct tm *gmtime(const time_t *timer);
20375 </pre>
20376 <p><b>Description</b>
20377 <p><!--para 2 -->
20378  The gmtime function converts the calendar time pointed to by timer into a broken-
20379  down time, expressed as UTC.
20380 <p><b>Returns</b>
20381 <p><!--para 3 -->
20382  The gmtime function returns a pointer to the broken-down time, or a null pointer if the
20383  specified time cannot be converted to UTC.
20384
20385 <p><small><a href="#Contents">Contents</a></small>
20386 <h5><a name="7.26.3.4" href="#7.26.3.4">7.26.3.4 The localtime function</a></h5>
20387 <p><b>Synopsis</b>
20388 <p><!--para 1 -->
20389 <pre>
20390         #include <a href="#7.26">&lt;time.h&gt;</a>
20391         struct tm *localtime(const time_t *timer);
20392 </pre>
20393 <p><b>Description</b>
20394 <p><!--para 2 -->
20395  The localtime function converts the calendar time pointed to by timer into a
20396  broken-down time, expressed as local time.
20397 <p><b>Returns</b>
20398 <p><!--para 3 -->
20399  The localtime function returns a pointer to the broken-down time, or a null pointer if
20400  the specified time cannot be converted to local time.
20401
20402 <p><small><a href="#Contents">Contents</a></small>
20403 <h5><a name="7.26.3.5" href="#7.26.3.5">7.26.3.5 The strftime function</a></h5>
20404 <p><b>Synopsis</b>
20405 <p><!--para 1 -->
20406 <!--page 409 -->
20407 <pre>
20408         #include <a href="#7.26">&lt;time.h&gt;</a>
20409         size_t strftime(char * restrict s,
20410              size_t maxsize,
20411              const char * restrict format,
20412              const struct tm * restrict timeptr);
20413 </pre>
20414 <p><b>Description</b>
20415 <p><!--para 2 -->
20416  The strftime function places characters into the array pointed to by s as controlled by
20417  the string pointed to by format. The format shall be a multibyte character sequence,
20418  beginning and ending in its initial shift state. The format string consists of zero or
20419  more conversion specifiers and ordinary multibyte characters. A conversion specifier
20420  consists of a % character, possibly followed by an E or O modifier character (described
20421  below), followed by a character that determines the behavior of the conversion specifier.
20422  All ordinary multibyte characters (including the terminating null character) are copied
20423  unchanged into the array. If copying takes place between objects that overlap, the
20424  behavior is undefined. No more than maxsize characters are placed into the array.
20425 <p><!--para 3 -->
20426  Each conversion specifier is replaced by appropriate characters as described in the
20427  following list. The appropriate characters are determined using the LC_TIME category
20428  of the current locale and by the values of zero or more members of the broken-down time
20429  structure pointed to by timeptr, as specified in brackets in the description. If any of
20430  the specified values is outside the normal range, the characters stored are unspecified.
20431  %a   is replaced by the locale's abbreviated weekday name. [tm_wday]
20432  %A   is replaced by the locale's full weekday name. [tm_wday]
20433  %b   is replaced by the locale's abbreviated month name. [tm_mon]
20434  %B   is replaced by the locale's full month name. [tm_mon]
20435  %c   is replaced by the locale's appropriate date and time representation. [all specified
20436 <pre>
20437       in <a href="#7.26.1">7.26.1</a>]
20438 </pre>
20439  %C   is replaced by the year divided by 100 and truncated to an integer, as a decimal
20440 <pre>
20441       number (00-99). [tm_year]
20442 </pre>
20443  %d   is replaced by the day of the month as a decimal number (01-31). [tm_mday]
20444  %D   is equivalent to ''%m/%d/%y''. [tm_mon, tm_mday, tm_year]
20445  %e   is replaced by the day of the month as a decimal number (1-31); a single digit is
20446 <pre>
20447       preceded by a space. [tm_mday]
20448 </pre>
20449  %F   is equivalent to ''%Y-%m-%d'' (the ISO 8601 date format). [tm_year, tm_mon,
20450 <pre>
20451       tm_mday]
20452 </pre>
20453  %g   is replaced by the last 2 digits of the week-based year (see below) as a decimal
20454 <pre>
20455       number (00-99). [tm_year, tm_wday, tm_yday]
20456 </pre>
20457  %G   is replaced by the week-based year (see below) as a decimal number (e.g., 1997).
20458 <pre>
20459       [tm_year, tm_wday, tm_yday]
20460 </pre>
20461  %h   is equivalent to ''%b''. [tm_mon]
20462  %H   is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour]
20463  %I   is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour]
20464  %j   is replaced by the day of the year as a decimal number (001-366). [tm_yday]
20465  %m   is replaced by the month as a decimal number (01-12). [tm_mon]
20466  %M   is replaced by the minute as a decimal number (00-59). [tm_min]
20467  %n   is replaced by a new-line character.
20468 <!--page 410 -->
20469  %p    is replaced by the locale's equivalent of the AM/PM designations associated with a
20470 <pre>
20471        12-hour clock. [tm_hour]
20472 </pre>
20473  %r    is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec]
20474  %R    is equivalent to ''%H:%M''. [tm_hour, tm_min]
20475  %S    is replaced by the second as a decimal number (00-60). [tm_sec]
20476  %t    is replaced by a horizontal-tab character.
20477  %T    is equivalent to ''%H:%M:%S'' (the ISO 8601 time format). [tm_hour, tm_min,
20478 <pre>
20479        tm_sec]
20480 </pre>
20481  %u    is replaced by the ISO 8601 weekday as a decimal number (1-7), where Monday
20482 <pre>
20483        is 1. [tm_wday]
20484 </pre>
20485  %U    is replaced by the week number of the year (the first Sunday as the first day of week
20486 <pre>
20487        1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
20488 </pre>
20489  %V    is replaced by the ISO 8601 week number (see below) as a decimal number
20490 <pre>
20491        (01-53). [tm_year, tm_wday, tm_yday]
20492 </pre>
20493  %w    is replaced by the weekday as a decimal number (0-6), where Sunday is 0.
20494 <pre>
20495        [tm_wday]
20496 </pre>
20497  %W    is replaced by the week number of the year (the first Monday as the first day of
20498 <pre>
20499        week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
20500 </pre>
20501  %x    is replaced by the locale's appropriate date representation. [all specified in <a href="#7.26.1">7.26.1</a>]
20502  %X    is replaced by the locale's appropriate time representation. [all specified in <a href="#7.26.1">7.26.1</a>]
20503  %y    is replaced by the last 2 digits of the year as a decimal number (00-99).
20504 <pre>
20505        [tm_year]
20506 </pre>
20507  %Y    is replaced by the year as a decimal number (e.g., 1997). [tm_year]
20508  %z    is replaced by the offset from UTC in the ISO 8601 format ''-0430'' (meaning 4
20509 <pre>
20510        hours 30 minutes behind UTC, west of Greenwich), or by no characters if no time
20511        zone is determinable. [tm_isdst]
20512 </pre>
20513  %Z    is replaced by the locale's time zone name or abbreviation, or by no characters if no
20514 <pre>
20515        time zone is determinable. [tm_isdst]
20516 </pre>
20517  %%    is replaced by %.
20518 <p><!--para 4 -->
20519  Some conversion specifiers can be modified by the inclusion of an E or O modifier
20520  character to indicate an alternative format or specification. If the alternative format or
20521  specification does not exist for the current locale, the modifier is ignored.
20522  %Ec is replaced by the locale's alternative date and time representation.
20523  %EC is replaced by the name of the base year (period) in the locale's alternative
20524 <pre>
20525      representation.
20526 </pre>
20527  %Ex is replaced by the locale's alternative date representation.
20528  %EX is replaced by the locale's alternative time representation.
20529  %Ey is replaced by the offset from %EC (year only) in the locale's alternative
20530 <pre>
20531      representation.
20532 </pre>
20533  %EY is replaced by the locale's full alternative year representation.
20534 <!--page 411 -->
20535  %Od is replaced by the day of the month, using the locale's alternative numeric symbols
20536 <pre>
20537      (filled as needed with leading zeros, or with leading spaces if there is no alternative
20538      symbol for zero).
20539 </pre>
20540  %Oe is replaced by the day of the month, using the locale's alternative numeric symbols
20541 <pre>
20542      (filled as needed with leading spaces).
20543 </pre>
20544  %OH is replaced by the hour (24-hour clock), using the locale's alternative numeric
20545 <pre>
20546      symbols.
20547 </pre>
20548  %OI is replaced by the hour (12-hour clock), using the locale's alternative numeric
20549 <pre>
20550      symbols.
20551 </pre>
20552  %Om is replaced by the month, using the locale's alternative numeric symbols.
20553  %OM is replaced by the minutes, using the locale's alternative numeric symbols.
20554  %OS is replaced by the seconds, using the locale's alternative numeric symbols.
20555  %Ou is replaced by the ISO 8601 weekday as a number in the locale's alternative
20556 <pre>
20557      representation, where Monday is 1.
20558 </pre>
20559  %OU is replaced by the week number, using the locale's alternative numeric symbols.
20560  %OV is replaced by the ISO 8601 week number, using the locale's alternative numeric
20561 <pre>
20562      symbols.
20563 </pre>
20564  %Ow is replaced by the weekday as a number, using the locale's alternative numeric
20565 <pre>
20566      symbols.
20567 </pre>
20568  %OW is replaced by the week number of the year, using the locale's alternative numeric
20569 <pre>
20570      symbols.
20571 </pre>
20572  %Oy is replaced by the last 2 digits of the year, using the locale's alternative numeric
20573 <pre>
20574      symbols.
20575 </pre>
20576 <p><!--para 5 -->
20577  %g, %G, and %V give values according to the ISO 8601 week-based year. In this system,
20578  weeks begin on a Monday and week 1 of the year is the week that includes January 4th,
20579  which is also the week that includes the first Thursday of the year, and is also the first
20580  week that contains at least four days in the year. If the first Monday of January is the
20581  2nd, 3rd, or 4th, the preceding days are part of the last week of the preceding year; thus,
20582  for Saturday 2nd January 1999, %G is replaced by 1998 and %V is replaced by 53. If
20583  December 29th, 30th, or 31st is a Monday, it and any following days are part of week 1 of
20584  the following year. Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and
20585  %V is replaced by 01.
20586 <p><!--para 6 -->
20587  If a conversion specifier is not one of the above, the behavior is undefined.
20588 <p><!--para 7 -->
20589  In the "C" locale, the E and O modifiers are ignored and the replacement strings for the
20590  following specifiers are:
20591  %a the first three characters of %A.
20592  %A one of ''Sunday'', ''Monday'', ... , ''Saturday''.
20593  %b the first three characters of %B.
20594  %B one of ''January'', ''February'', ... , ''December''.
20595  %c equivalent to ''%a %b %e %T %Y''.
20596 <!--page 412 -->
20597  %p    one of ''AM'' or ''PM''.
20598  %r    equivalent to ''%I:%M:%S %p''.
20599  %x    equivalent to ''%m/%d/%y''.
20600  %X    equivalent to %T.
20601  %Z    implementation-defined.
20602 <p><b>Returns</b>
20603 <p><!--para 8 -->
20604  If the total number of resulting characters including the terminating null character is not
20605  more than maxsize, the strftime function returns the number of characters placed
20606  into the array pointed to by s not including the terminating null character. Otherwise,
20607  zero is returned and the contents of the array are indeterminate.
20608 <!--page 413 -->
20609
20610 <p><small><a href="#Contents">Contents</a></small>
20611 <h3><a name="7.27" href="#7.27">7.27 Unicode utilities &lt;uchar.h&gt;</a></h3>
20612 <p><!--para 1 -->
20613  The header <a href="#7.27">&lt;uchar.h&gt;</a> declares types and functions for manipulating Unicode
20614  characters.
20615 <p><!--para 2 -->
20616  The types declared are mbstate_t (described in <a href="#7.29.1">7.29.1</a>) and size_t (described in
20617  <a href="#7.19">7.19</a>);
20618 <pre>
20619          char16_t
20620 </pre>
20621  which is an unsigned integer type used for 16-bit characters and is the same type as
20622  uint_least16_t (described in <a href="#7.20.1.2">7.20.1.2</a>); and
20623 <pre>
20624          char32_t
20625 </pre>
20626  which is an unsigned integer type used for 32-bit characters and is the same type as
20627  uint_least32_t (also described in <a href="#7.20.1.2">7.20.1.2</a>).
20628
20629 <p><small><a href="#Contents">Contents</a></small>
20630 <h4><a name="7.27.1" href="#7.27.1">7.27.1 Restartable multibyte/wide character conversion functions</a></h4>
20631 <p><!--para 1 -->
20632  These functions have a parameter, ps, of type pointer to mbstate_t that points to an
20633  object that can completely describe the current conversion state of the associated
20634  multibyte character sequence, which the functions alter as necessary. If ps is a null
20635  pointer, each function uses its own internal mbstate_t object instead, which is
20636  initialized at program startup to the initial conversion state; the functions are not required
20637  to avoid data races in this case. The implementation behaves as if no library function
20638  calls these functions with a null pointer for ps.
20639
20640 <p><small><a href="#Contents">Contents</a></small>
20641 <h5><a name="7.27.1.1" href="#7.27.1.1">7.27.1.1 The mbrtoc16 function</a></h5>
20642 <p><b>Synopsis</b>
20643 <p><!--para 1 -->
20644 <pre>
20645          #include <a href="#7.27">&lt;uchar.h&gt;</a>
20646          size_t mbrtoc16(char16_t * restrict pc16,
20647               const char * restrict s, size_t n,
20648               mbstate_t * restrict ps);
20649 </pre>
20650 <p><b>Description</b>
20651 <p><!--para 2 -->
20652  If s is a null pointer, the mbrtoc16 function is equivalent to the call:
20653 <pre>
20654                 mbrtoc16(NULL, "", 1, ps)
20655 </pre>
20656  In this case, the values of the parameters pc16 and n are ignored.
20657 <p><!--para 3 -->
20658  If s is not a null pointer, the mbrtoc16 function inspects at most n bytes beginning with
20659  the byte pointed to by s to determine the number of bytes needed to complete the next
20660  multibyte character (including any shift sequences). If the function determines that the
20661  next multibyte character is complete and valid, it determines the values of the
20662  corresponding wide characters and then, if pc16 is not a null pointer, stores the value of
20663  the first (or only) such character in the object pointed to by pc16. Subsequent calls will
20664 <!--page 414 -->
20665  store successive wide characters without consuming any additional input until all the
20666  characters have been stored. If the corresponding wide character is the null wide
20667  character, the resulting state described is the initial conversion state.
20668 <p><b>Returns</b>
20669 <p><!--para 4 -->
20670  The mbrtoc16 function returns the first of the following that applies (given the current
20671  conversion state):
20672  0                     if the next n or fewer bytes complete the multibyte character that
20673 <pre>
20674                        corresponds to the null wide character (which is the value stored).
20675 </pre>
20676  between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte
20677 <pre>
20678                     character (which is the value stored); the value returned is the number
20679                     of bytes that complete the multibyte character.
20680 </pre>
20681  (size_t)(-3) if the next character resulting from a previous call has been stored (no
20682 <pre>
20683               bytes from the input have been consumed by this call).
20684 </pre>
20685  (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
20686 <pre>
20687               multibyte character, and all n bytes have been processed (no value is
20688               stored).<sup><a href="#note311"><b>311)</b></a></sup>
20689 </pre>
20690  (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
20691 <pre>
20692               do not contribute to a complete and valid multibyte character (no
20693               value is stored); the value of the macro EILSEQ is stored in errno,
20694               and the conversion state is unspecified.
20695 </pre>
20696
20697 <p><b>Footnotes</b>
20698 <p><small><a name="note311" href="#note311">311)</a> When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
20699  sequence of redundant shift sequences (for implementations with state-dependent encodings).
20700 </small>
20701
20702 <p><small><a href="#Contents">Contents</a></small>
20703 <h5><a name="7.27.1.2" href="#7.27.1.2">7.27.1.2 The c16rtomb function</a></h5>
20704 <p><b>Synopsis</b>
20705 <p><!--para 1 -->
20706 <pre>
20707          #include <a href="#7.27">&lt;uchar.h&gt;</a>
20708          size_t c16rtomb(char * restrict s, char16_t c16,
20709               mbstate_t * restrict ps);
20710 </pre>
20711 <p><b>Description</b>
20712 <p><!--para 2 -->
20713  If s is a null pointer, the c16rtomb function is equivalent to the call
20714 <pre>
20715                  c16rtomb(buf, L'\0', ps)
20716 </pre>
20717  where buf is an internal buffer.
20718 <p><!--para 3 -->
20719  If s is not a null pointer, the c16rtomb function determines the number of bytes needed
20720  to represent the multibyte character that corresponds to the wide character given by c16
20721  (including any shift sequences), and stores the multibyte character representation in the
20722  
20723  
20724 <!--page 415 -->
20725  array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
20726  c16 is a null wide character, a null byte is stored, preceded by any shift sequence needed
20727  to restore the initial shift state; the resulting state described is the initial conversion state.
20728 <p><b>Returns</b>
20729 <p><!--para 4 -->
20730  The c16rtomb function returns the number of bytes stored in the array object (including
20731  any shift sequences). When c16 is not a valid wide character, an encoding error occurs:
20732  the function stores the value of the macro EILSEQ in errno and returns
20733  (size_t)(-1); the conversion state is unspecified.
20734
20735 <p><small><a href="#Contents">Contents</a></small>
20736 <h5><a name="7.27.1.3" href="#7.27.1.3">7.27.1.3 The mbrtoc32 function</a></h5>
20737 <p><b>Synopsis</b>
20738 <p><!--para 1 -->
20739 <pre>
20740          #include <a href="#7.27">&lt;uchar.h&gt;</a>
20741          size_t mbrtoc32(char32_t * restrict pc32,
20742               const char * restrict s, size_t n,
20743               mbstate_t * restrict ps);
20744 </pre>
20745 <p><b>Description</b>
20746 <p><!--para 2 -->
20747  If s is a null pointer, the mbrtoc32 function is equivalent to the call:
20748 <pre>
20749                  mbrtoc32(NULL, "", 1, ps)
20750 </pre>
20751  In this case, the values of the parameters pc32 and n are ignored.
20752 <p><!--para 3 -->
20753  If s is not a null pointer, the mbrtoc32 function inspects at most n bytes beginning with
20754  the byte pointed to by s to determine the number of bytes needed to complete the next
20755  multibyte character (including any shift sequences). If the function determines that the
20756  next multibyte character is complete and valid, it determines the values of the
20757  corresponding wide characters and then, if pc32 is not a null pointer, stores the value of
20758  the first (or only) such character in the object pointed to by pc32. Subsequent calls will
20759  store successive wide characters without consuming any additional input until all the
20760  characters have been stored. If the corresponding wide character is the null wide
20761  character, the resulting state described is the initial conversion state.
20762 <p><b>Returns</b>
20763 <p><!--para 4 -->
20764  The mbrtoc32 function returns the first of the following that applies (given the current
20765  conversion state):
20766  0                    if the next n or fewer bytes complete the multibyte character that
20767 <pre>
20768                       corresponds to the null wide character (which is the value stored).
20769 </pre>
20770  between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte
20771 <!--page 416 -->
20772 <pre>
20773                     character (which is the value stored); the value returned is the number
20774                     of bytes that complete the multibyte character.
20775 </pre>
20776  (size_t)(-3) if the next character resulting from a previous call has been stored (no
20777 <pre>
20778               bytes from the input have been consumed by this call).
20779 </pre>
20780  (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
20781 <pre>
20782               multibyte character, and all n bytes have been processed (no value is
20783               stored).<sup><a href="#note312"><b>312)</b></a></sup>
20784 </pre>
20785  (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
20786 <pre>
20787               do not contribute to a complete and valid multibyte character (no
20788               value is stored); the value of the macro EILSEQ is stored in errno,
20789               and the conversion state is unspecified.
20790 </pre>
20791
20792 <p><b>Footnotes</b>
20793 <p><small><a name="note312" href="#note312">312)</a> When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
20794  sequence of redundant shift sequences (for implementations with state-dependent encodings).
20795 </small>
20796
20797 <p><small><a href="#Contents">Contents</a></small>
20798 <h5><a name="7.27.1.4" href="#7.27.1.4">7.27.1.4 The c32rtomb function</a></h5>
20799 <p><b>Synopsis</b>
20800 <p><!--para 1 -->
20801 <pre>
20802          #include <a href="#7.27">&lt;uchar.h&gt;</a>
20803          size_t c32rtomb(char * restrict s, char32_t c32,
20804               mbstate_t * restrict ps);
20805 </pre>
20806 <p><b>Description</b>
20807 <p><!--para 2 -->
20808  If s is a null pointer, the c32rtomb function is equivalent to the call
20809 <pre>
20810                  c32rtomb(buf, L'\0', ps)
20811 </pre>
20812  where buf is an internal buffer.
20813 <p><!--para 3 -->
20814  If s is not a null pointer, the c32rtomb function determines the number of bytes needed
20815  to represent the multibyte character that corresponds to the wide character given by c32
20816  (including any shift sequences), and stores the multibyte character representation in the
20817  array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
20818  c32 is a null wide character, a null byte is stored, preceded by any shift sequence needed
20819  to restore the initial shift state; the resulting state described is the initial conversion state.
20820 <p><b>Returns</b>
20821 <p><!--para 4 -->
20822  The c32rtomb function returns the number of bytes stored in the array object (including
20823  any shift sequences). When c32 is not a valid wide character, an encoding error occurs:
20824  the function stores the value of the macro EILSEQ in errno and returns
20825  (size_t)(-1); the conversion state is unspecified.
20826  
20827  
20828  
20829  
20830 <!--page 417 -->
20831
20832 <p><small><a href="#Contents">Contents</a></small>
20833 <h3><a name="7.28" href="#7.28">7.28 Extended multibyte and wide character utilities &lt;wchar.h&gt;</a></h3>
20834
20835 <p><small><a href="#Contents">Contents</a></small>
20836 <h4><a name="7.28.1" href="#7.28.1">7.28.1 Introduction</a></h4>
20837 <p><!--para 1 -->
20838  The header <a href="#7.28">&lt;wchar.h&gt;</a> defines four macros, and declares four data types, one tag, and
20839  many functions.<sup><a href="#note313"><b>313)</b></a></sup>
20840 <p><!--para 2 -->
20841  The types declared are wchar_t and size_t (both described in <a href="#7.19">7.19</a>);
20842 <pre>
20843            mbstate_t
20844 </pre>
20845  which is a complete object type other than an array type that can hold the conversion state
20846  information necessary to convert between sequences of multibyte characters and wide
20847  characters;
20848 <pre>
20849           wint_t
20850 </pre>
20851  which is an integer type unchanged by default argument promotions that can hold any
20852  value corresponding to members of the extended character set, as well as at least one
20853  value that does not correspond to any member of the extended character set (see WEOF
20854  below);<sup><a href="#note314"><b>314)</b></a></sup> and
20855 <pre>
20856           struct tm
20857 </pre>
20858  which is declared as an incomplete structure type (the contents are described in <a href="#7.26.1">7.26.1</a>).
20859 <p><!--para 3 -->
20860  The macros defined are NULL (described in <a href="#7.19">7.19</a>); WCHAR_MIN and WCHAR_MAX
20861  (described in <a href="#7.20.3">7.20.3</a>); and
20862 <pre>
20863           WEOF
20864 </pre>
20865  which expands to a constant expression of type wint_t whose value does not
20866  correspond to any member of the extended character set.<sup><a href="#note315"><b>315)</b></a></sup> It is accepted (and returned)
20867  by several functions in this subclause to indicate end-of-file, that is, no more input from a
20868  stream. It is also used as a wide character value that does not correspond to any member
20869  of the extended character set.
20870 <p><!--para 4 -->
20871  The functions declared are grouped as follows:
20872 <ul>
20873 <li>  Functions that perform input and output of wide characters, or multibyte characters,
20874  or both;
20875 <li>  Functions that provide wide string numeric conversion;
20876 <li>  Functions that perform general wide string manipulation;
20877  
20878  
20879 <!--page 418 -->
20880 <li>  Functions for wide string date and time conversion; and
20881 <li>  Functions that provide extended capabilities for conversion between multibyte and
20882  wide character sequences.
20883 </ul>
20884 <p><!--para 5 -->
20885  Unless explicitly stated otherwise, if the execution of a function described in this
20886  subclause causes copying to take place between objects that overlap, the behavior is
20887  undefined.
20888
20889 <p><b>Footnotes</b>
20890 <p><small><a name="note313" href="#note313">313)</a> See ''future library directions'' (<a href="#7.30.12">7.30.12</a>).
20891 </small>
20892 <p><small><a name="note314" href="#note314">314)</a> wchar_t and wint_t can be the same integer type.
20893 </small>
20894 <p><small><a name="note315" href="#note315">315)</a> The value of the macro WEOF may differ from that of EOF and need not be negative.
20895 </small>
20896
20897 <p><small><a href="#Contents">Contents</a></small>
20898 <h4><a name="7.28.2" href="#7.28.2">7.28.2 Formatted wide character input/output functions</a></h4>
20899 <p><!--para 1 -->
20900  The formatted wide character input/output functions shall behave as if there is a sequence
20901  point after the actions associated with each specifier.<sup><a href="#note316"><b>316)</b></a></sup>
20902
20903 <p><b>Footnotes</b>
20904 <p><small><a name="note316" href="#note316">316)</a> The fwprintf functions perform writes to memory for the %n specifier.
20905 </small>
20906
20907 <p><small><a href="#Contents">Contents</a></small>
20908 <h5><a name="7.28.2.1" href="#7.28.2.1">7.28.2.1 The fwprintf function</a></h5>
20909 <p><b>Synopsis</b>
20910 <p><!--para 1 -->
20911 <pre>
20912          #include <a href="#7.21">&lt;stdio.h&gt;</a>
20913          #include <a href="#7.28">&lt;wchar.h&gt;</a>
20914          int fwprintf(FILE * restrict stream,
20915               const wchar_t * restrict format, ...);
20916 </pre>
20917 <p><b>Description</b>
20918 <p><!--para 2 -->
20919  The fwprintf function writes output to the stream pointed to by stream, under
20920  control of the wide string pointed to by format that specifies how subsequent arguments
20921  are converted for output. If there are insufficient arguments for the format, the behavior
20922  is undefined. If the format is exhausted while arguments remain, the excess arguments
20923  are evaluated (as always) but are otherwise ignored. The fwprintf function returns
20924  when the end of the format string is encountered.
20925 <p><!--para 3 -->
20926  The format is composed of zero or more directives: ordinary wide characters (not %),
20927  which are copied unchanged to the output stream; and conversion specifications, each of
20928  which results in fetching zero or more subsequent arguments, converting them, if
20929  applicable, according to the corresponding conversion specifier, and then writing the
20930  result to the output stream.
20931 <p><!--para 4 -->
20932  Each conversion specification is introduced by the wide character %. After the %, the
20933  following appear in sequence:
20934 <ul>
20935 <li>  Zero or more flags (in any order) that modify the meaning of the conversion
20936  specification.
20937 <li>  An optional minimum field width. If the converted value has fewer wide characters
20938  than the field width, it is padded with spaces (by default) on the left (or right, if the
20939  
20940  
20941 <!--page 419 -->
20942    left adjustment flag, described later, has been given) to the field width. The field
20943    width takes the form of an asterisk * (described later) or a nonnegative decimal
20944    integer.<sup><a href="#note317"><b>317)</b></a></sup>
20945 <li>  An optional precision that gives the minimum number of digits to appear for the d, i,
20946  o, u, x, and X conversions, the number of digits to appear after the decimal-point
20947  wide character for a, A, e, E, f, and F conversions, the maximum number of
20948  significant digits for the g and G conversions, or the maximum number of wide
20949  characters to be written for s conversions. The precision takes the form of a period
20950  (.) followed either by an asterisk * (described later) or by an optional decimal
20951  integer; if only the period is specified, the precision is taken as zero. If a precision
20952  appears with any other conversion specifier, the behavior is undefined.
20953 <li>  An optional length modifier that specifies the size of the argument.
20954 <li>  A conversion specifier wide character that specifies the type of conversion to be
20955  applied.
20956 </ul>
20957 <p><!--para 5 -->
20958  As noted above, a field width, or precision, or both, may be indicated by an asterisk. In
20959  this case, an int argument supplies the field width or precision. The arguments
20960  specifying field width, or precision, or both, shall appear (in that order) before the
20961  argument (if any) to be converted. A negative field width argument is taken as a - flag
20962  followed by a positive field width. A negative precision argument is taken as if the
20963  precision were omitted.
20964 <p><!--para 6 -->
20965  The flag wide characters and their meanings are:
20966  -        The result of the conversion is left-justified within the field. (It is right-justified if
20967 <pre>
20968           this flag is not specified.)
20969 </pre>
20970  +        The result of a signed conversion always begins with a plus or minus sign. (It
20971 <pre>
20972           begins with a sign only when a negative value is converted if this flag is not
20973           specified.)<sup><a href="#note318"><b>318)</b></a></sup>
20974 </pre>
20975  space If the first wide character of a signed conversion is not a sign, or if a signed
20976 <pre>
20977        conversion results in no wide characters, a space is prefixed to the result. If the
20978        space and + flags both appear, the space flag is ignored.
20979 </pre>
20980  #        The result is converted to an ''alternative form''. For o conversion, it increases
20981 <pre>
20982           the precision, if and only if necessary, to force the first digit of the result to be a
20983           zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
20984           conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,
20985 </pre>
20986  
20987  
20988 <!--page 420 -->
20989 <pre>
20990            and G conversions, the result of converting a floating-point number always
20991            contains a decimal-point wide character, even if no digits follow it. (Normally, a
20992            decimal-point wide character appears in the result of these conversions only if a
20993            digit follows it.) For g and G conversions, trailing zeros are not removed from the
20994            result. For other conversions, the behavior is undefined.
20995 </pre>
20996  0         For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros
20997 <pre>
20998            (following any indication of sign or base) are used to pad to the field width rather
20999            than performing space padding, except when converting an infinity or NaN. If the
21000            0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X
21001            conversions, if a precision is specified, the 0 flag is ignored. For other
21002            conversions, the behavior is undefined.
21003 </pre>
21004 <p><!--para 7 -->
21005  The length modifiers and their meanings are:
21006  hh             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
21007 <pre>
21008                 signed char or unsigned char argument (the argument will have
21009                 been promoted according to the integer promotions, but its value shall be
21010                 converted to signed char or unsigned char before printing); or that
21011                 a following n conversion specifier applies to a pointer to a signed char
21012                 argument.
21013 </pre>
21014  h              Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
21015 <pre>
21016                 short int or unsigned short int argument (the argument will
21017                 have been promoted according to the integer promotions, but its value shall
21018                 be converted to short int or unsigned short int before printing);
21019                 or that a following n conversion specifier applies to a pointer to a short
21020                 int argument.
21021 </pre>
21022  l (ell)        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
21023 <pre>
21024                 long int or unsigned long int argument; that a following n
21025                 conversion specifier applies to a pointer to a long int argument; that a
21026                 following c conversion specifier applies to a wint_t argument; that a
21027                 following s conversion specifier applies to a pointer to a wchar_t
21028                 argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
21029                 specifier.
21030 </pre>
21031  ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
21032 <pre>
21033               long long int or unsigned long long int argument; or that a
21034               following n conversion specifier applies to a pointer to a long long int
21035               argument.
21036 </pre>
21037  j              Specifies that a following d, i, o, u, x, or X conversion specifier applies to
21038 <!--page 421 -->
21039 <pre>
21040                 an intmax_t or uintmax_t argument; or that a following n conversion
21041                 specifier applies to a pointer to an intmax_t argument.
21042 </pre>
21043  z            Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
21044 <pre>
21045               size_t or the corresponding signed integer type argument; or that a
21046               following n conversion specifier applies to a pointer to a signed integer type
21047               corresponding to size_t argument.
21048 </pre>
21049  t            Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
21050 <pre>
21051               ptrdiff_t or the corresponding unsigned integer type argument; or that a
21052               following n conversion specifier applies to a pointer to a ptrdiff_t
21053               argument.
21054 </pre>
21055  L            Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
21056 <pre>
21057               applies to a long double argument.
21058 </pre>
21059  If a length modifier appears with any conversion specifier other than as specified above,
21060  the behavior is undefined.
21061 <p><!--para 8 -->
21062  The conversion specifiers and their meanings are:
21063  d,i         The int argument is converted to signed decimal in the style [-]dddd. The
21064 <pre>
21065              precision specifies the minimum number of digits to appear; if the value
21066              being converted can be represented in fewer digits, it is expanded with
21067              leading zeros. The default precision is 1. The result of converting a zero
21068              value with a precision of zero is no wide characters.
21069 </pre>
21070  o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned
21071 <pre>
21072          decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the
21073          letters abcdef are used for x conversion and the letters ABCDEF for X
21074          conversion. The precision specifies the minimum number of digits to appear;
21075          if the value being converted can be represented in fewer digits, it is expanded
21076          with leading zeros. The default precision is 1. The result of converting a
21077          zero value with a precision of zero is no wide characters.
21078 </pre>
21079  f,F         A double argument representing a floating-point number is converted to
21080 <!--page 422 -->
21081 <pre>
21082              decimal notation in the style [-]ddd.ddd, where the number of digits after
21083              the decimal-point wide character is equal to the precision specification. If the
21084              precision is missing, it is taken as 6; if the precision is zero and the # flag is
21085              not specified, no decimal-point wide character appears. If a decimal-point
21086              wide character appears, at least one digit appears before it. The value is
21087              rounded to the appropriate number of digits.
21088              A double argument representing an infinity is converted in one of the styles
21089              [-]inf or [-]infinity -- which style is implementation-defined. A
21090              double argument representing a NaN is converted in one of the styles
21091              [-]nan or [-]nan(n-wchar-sequence) -- which style, and the meaning of
21092              any n-wchar-sequence, is implementation-defined. The F conversion
21093              specifier produces INF, INFINITY, or NAN instead of inf, infinity, or
21094               nan, respectively.<sup><a href="#note319"><b>319)</b></a></sup>
21095 </pre>
21096  e,E          A double argument representing a floating-point number is converted in the
21097 <pre>
21098               style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
21099               argument is nonzero) before the decimal-point wide character and the number
21100               of digits after it is equal to the precision; if the precision is missing, it is taken
21101               as 6; if the precision is zero and the # flag is not specified, no decimal-point
21102               wide character appears. The value is rounded to the appropriate number of
21103               digits. The E conversion specifier produces a number with E instead of e
21104               introducing the exponent. The exponent always contains at least two digits,
21105               and only as many more digits as necessary to represent the exponent. If the
21106               value is zero, the exponent is zero.
21107               A double argument representing an infinity or NaN is converted in the style
21108               of an f or F conversion specifier.
21109 </pre>
21110  g,G          A double argument representing a floating-point number is converted in
21111 <pre>
21112               style f or e (or in style F or E in the case of a G conversion specifier),
21113               depending on the value converted and the precision. Let P equal the
21114               precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero.
21115               Then, if a conversion with style E would have an exponent of X:
21116               -- if P &gt; X &gt;= -4, the conversion is with style f (or F) and precision
21117                 P - (X + 1).
21118               -- otherwise, the conversion is with style e (or E) and precision P - 1.
21119               Finally, unless the # flag is used, any trailing zeros are removed from the
21120               fractional portion of the result and the decimal-point wide character is
21121               removed if there is no fractional portion remaining.
21122               A double argument representing an infinity or NaN is converted in the style
21123               of an f or F conversion specifier.
21124 </pre>
21125  a,A          A double argument representing a floating-point number is converted in the
21126 <pre>
21127               style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
21128               nonzero if the argument is a normalized floating-point number and is
21129               otherwise unspecified) before the decimal-point wide character<sup><a href="#note320"><b>320)</b></a></sup> and the
21130               number of hexadecimal digits after it is equal to the precision; if the precision
21131               is missing and FLT_RADIX is a power of 2, then the precision is sufficient
21132 </pre>
21133  
21134  
21135 <!--page 423 -->
21136 <pre>
21137               for an exact representation of the value; if the precision is missing and
21138               FLT_RADIX is not a power of 2, then the precision is sufficient to
21139               distinguish<sup><a href="#note321"><b>321)</b></a></sup> values of type double, except that trailing zeros may be
21140               omitted; if the precision is zero and the # flag is not specified, no decimal-
21141               point wide character appears. The letters abcdef are used for a conversion
21142               and the letters ABCDEF for A conversion. The A conversion specifier
21143               produces a number with X and P instead of x and p. The exponent always
21144               contains at least one digit, and only as many more digits as necessary to
21145               represent the decimal exponent of 2. If the value is zero, the exponent is
21146               zero.
21147               A double argument representing an infinity or NaN is converted in the style
21148               of an f or F conversion specifier.
21149 </pre>
21150  c            If no l length modifier is present, the int argument is converted to a wide
21151 <pre>
21152               character as if by calling btowc and the resulting wide character is written.
21153               If an l length modifier is present, the wint_t argument is converted to
21154               wchar_t and written.
21155 </pre>
21156  s            If no l length modifier is present, the argument shall be a pointer to the initial
21157 <pre>
21158               element of a character array containing a multibyte character sequence
21159               beginning in the initial shift state. Characters from the array are converted as
21160               if by repeated calls to the mbrtowc function, with the conversion state
21161               described by an mbstate_t object initialized to zero before the first
21162               multibyte character is converted, and written up to (but not including) the
21163               terminating null wide character. If the precision is specified, no more than
21164               that many wide characters are written. If the precision is not specified or is
21165               greater than the size of the converted array, the converted array shall contain a
21166               null wide character.
21167               If an l length modifier is present, the argument shall be a pointer to the initial
21168               element of an array of wchar_t type. Wide characters from the array are
21169               written up to (but not including) a terminating null wide character. If the
21170               precision is specified, no more than that many wide characters are written. If
21171               the precision is not specified or is greater than the size of the array, the array
21172               shall contain a null wide character.
21173 </pre>
21174  p            The argument shall be a pointer to void. The value of the pointer is
21175 <pre>
21176               converted to a sequence of printing wide characters, in an implementation-
21177 </pre>
21178  
21179 <!--page 424 -->
21180 <pre>
21181                 defined manner.
21182 </pre>
21183  n              The argument shall be a pointer to signed integer into which is written the
21184 <pre>
21185                 number of wide characters written to the output stream so far by this call to
21186                 fwprintf. No argument is converted, but one is consumed. If the
21187                 conversion specification includes any flags, a field width, or a precision, the
21188                 behavior is undefined.
21189 </pre>
21190  %              A % wide character is written. No argument is converted. The complete
21191 <pre>
21192                 conversion specification shall be %%.
21193 </pre>
21194 <p><!--para 9 -->
21195  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note322"><b>322)</b></a></sup> If any argument is
21196  not the correct type for the corresponding conversion specification, the behavior is
21197  undefined.
21198 <p><!--para 10 -->
21199  In no case does a nonexistent or small field width cause truncation of a field; if the result
21200  of a conversion is wider than the field width, the field is expanded to contain the
21201  conversion result.
21202 <p><!--para 11 -->
21203  For a and A conversions, if FLT_RADIX is a power of 2, the value is correctly rounded
21204  to a hexadecimal floating number with the given precision.
21205 <p><b>Recommended practice</b>
21206 <p><!--para 12 -->
21207  For a and A conversions, if FLT_RADIX is not a power of 2 and the result is not exactly
21208  representable in the given precision, the result should be one of the two adjacent numbers
21209  in hexadecimal floating style with the given precision, with the extra stipulation that the
21210  error should have a correct sign for the current rounding direction.
21211 <p><!--para 13 -->
21212  For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
21213  DECIMAL_DIG, then the result should be correctly rounded.<sup><a href="#note323"><b>323)</b></a></sup> If the number of
21214  significant decimal digits is more than DECIMAL_DIG but the source value is exactly
21215  representable with DECIMAL_DIG digits, then the result should be an exact
21216  representation with trailing zeros. Otherwise, the source value is bounded by two
21217  adjacent decimal strings L &lt; U, both having DECIMAL_DIG significant digits; the value
21218  of the resultant decimal string D should satisfy L &lt;= D &lt;= U, with the extra stipulation that
21219  the error should have a correct sign for the current rounding direction.
21220 <p><b>Returns</b>
21221 <p><!--para 14 -->
21222  The fwprintf function returns the number of wide characters transmitted, or a negative
21223  value if an output or encoding error occurred.
21224  
21225 <!--page 425 -->
21226 <p><b>Environmental limits</b>
21227 <p><!--para 15 -->
21228  The number of wide characters that can be produced by any single conversion shall be at
21229  least 4095.
21230 <p><!--para 16 -->
21231  EXAMPLE       To print a date and time in the form ''Sunday, July 3, 10:02'' followed by pi to five decimal
21232  places:
21233 <pre>
21234          #include <a href="#7.12">&lt;math.h&gt;</a>
21235          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21236          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21237          /* ... */
21238          wchar_t *weekday, *month; // pointers to wide strings
21239          int day, hour, min;
21240          fwprintf(stdout, L"%ls, %ls %d, %.2d:%.2d\n",
21241                  weekday, month, day, hour, min);
21242          fwprintf(stdout, L"pi = %.5f\n", 4 * atan(1.0));
21243 </pre>
21244  
21245 <p><b> Forward references</b>:          the btowc function (<a href="#7.28.6.1.1">7.28.6.1.1</a>), the mbrtowc function
21246  (<a href="#7.28.6.3.2">7.28.6.3.2</a>).
21247
21248 <p><b>Footnotes</b>
21249 <p><small><a name="note317" href="#note317">317)</a> Note that 0 is taken as a flag, not as the beginning of a field width.
21250 </small>
21251 <p><small><a name="note318" href="#note318">318)</a> The results of all floating conversions of a negative zero, and of negative values that round to zero,
21252  include a minus sign.
21253 </small>
21254 <p><small><a name="note319" href="#note319">319)</a> When applied to infinite and NaN values, the -, +, and space flag wide characters have their usual
21255  meaning; the # and 0 flag wide characters have no effect.
21256 </small>
21257 <p><small><a name="note320" href="#note320">320)</a> Binary implementations can choose the hexadecimal digit to the left of the decimal-point wide
21258  character so that subsequent digits align to nibble (4-bit) boundaries.
21259 </small>
21260 <p><small><a name="note321" href="#note321">321)</a> The precision p is sufficient to distinguish values of the source type if 16 p-1 &gt; b n where b is
21261  FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
21262  might suffice depending on the implementation's scheme for determining the digit to the left of the
21263  decimal-point wide character.
21264 </small>
21265 <p><small><a name="note322" href="#note322">322)</a> See ''future library directions'' (<a href="#7.30.12">7.30.12</a>).
21266 </small>
21267 <p><small><a name="note323" href="#note323">323)</a> For binary-to-decimal conversion, the result format's values are the numbers representable with the
21268  given format specifier. The number of significant digits is determined by the format specifier, and in
21269  the case of fixed-point conversion by the source value as well.
21270 </small>
21271
21272 <p><small><a href="#Contents">Contents</a></small>
21273 <h5><a name="7.28.2.2" href="#7.28.2.2">7.28.2.2 The fwscanf function</a></h5>
21274 <p><b>Synopsis</b>
21275 <p><!--para 1 -->
21276 <pre>
21277          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21278          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21279          int fwscanf(FILE * restrict stream,
21280               const wchar_t * restrict format, ...);
21281 </pre>
21282 <p><b>Description</b>
21283 <p><!--para 2 -->
21284  The fwscanf function reads input from the stream pointed to by stream, under
21285  control of the wide string pointed to by format that specifies the admissible input
21286  sequences and how they are to be converted for assignment, using subsequent arguments
21287  as pointers to the objects to receive the converted input. If there are insufficient
21288  arguments for the format, the behavior is undefined. If the format is exhausted while
21289  arguments remain, the excess arguments are evaluated (as always) but are otherwise
21290  ignored.
21291 <p><!--para 3 -->
21292  The format is composed of zero or more directives: one or more white-space wide
21293  characters, an ordinary wide character (neither % nor a white-space wide character), or a
21294  conversion specification. Each conversion specification is introduced by the wide
21295  character %. After the %, the following appear in sequence:
21296 <ul>
21297 <li>  An optional assignment-suppressing wide character *.
21298 <li>  An optional decimal integer greater than zero that specifies the maximum field width
21299  (in wide characters).
21300 <!--page 426 -->
21301 <li>  An optional length modifier that specifies the size of the receiving object.
21302 <li>  A conversion specifier wide character that specifies the type of conversion to be
21303  applied.
21304 </ul>
21305 <p><!--para 4 -->
21306  The fwscanf function executes each directive of the format in turn. When all directives
21307  have been executed, or if a directive fails (as detailed below), the function returns.
21308  Failures are described as input failures (due to the occurrence of an encoding error or the
21309  unavailability of input characters), or matching failures (due to inappropriate input).
21310 <p><!--para 5 -->
21311  A directive composed of white-space wide character(s) is executed by reading input up to
21312  the first non-white-space wide character (which remains unread), or until no more wide
21313  characters can be read.
21314 <p><!--para 6 -->
21315  A directive that is an ordinary wide character is executed by reading the next wide
21316  character of the stream. If that wide character differs from the directive, the directive
21317  fails and the differing and subsequent wide characters remain unread. Similarly, if end-
21318  of-file, an encoding error, or a read error prevents a wide character from being read, the
21319  directive fails.
21320 <p><!--para 7 -->
21321  A directive that is a conversion specification defines a set of matching input sequences, as
21322  described below for each specifier. A conversion specification is executed in the
21323  following steps:
21324 <p><!--para 8 -->
21325  Input white-space wide characters (as specified by the iswspace function) are skipped,
21326  unless the specification includes a [, c, or n specifier.<sup><a href="#note324"><b>324)</b></a></sup>
21327 <p><!--para 9 -->
21328  An input item is read from the stream, unless the specification includes an n specifier. An
21329  input item is defined as the longest sequence of input wide characters which does not
21330  exceed any specified field width and which is, or is a prefix of, a matching input
21331  sequence.<sup><a href="#note325"><b>325)</b></a></sup> The first wide character, if any, after the input item remains unread. If the
21332  length of the input item is zero, the execution of the directive fails; this condition is a
21333  matching failure unless end-of-file, an encoding error, or a read error prevented input
21334  from the stream, in which case it is an input failure.
21335 <p><!--para 10 -->
21336  Except in the case of a % specifier, the input item (or, in the case of a %n directive, the
21337  count of input wide characters) is converted to a type appropriate to the conversion
21338  specifier. If the input item is not a matching sequence, the execution of the directive fails:
21339  this condition is a matching failure. Unless assignment suppression was indicated by a *,
21340  the result of the conversion is placed in the object pointed to by the first argument
21341  following the format argument that has not already received a conversion result. If this
21342  
21343  
21344 <!--page 427 -->
21345  object does not have an appropriate type, or if the result of the conversion cannot be
21346  represented in the object, the behavior is undefined.
21347 <p><!--para 11 -->
21348  The length modifiers and their meanings are:
21349  hh           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
21350 <pre>
21351               to an argument with type pointer to signed char or unsigned char.
21352 </pre>
21353  h            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
21354 <pre>
21355               to an argument with type pointer to short int or unsigned short
21356               int.
21357 </pre>
21358  l (ell)      Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
21359 <pre>
21360               to an argument with type pointer to long int or unsigned long
21361               int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to
21362               an argument with type pointer to double; or that a following c, s, or [
21363               conversion specifier applies to an argument with type pointer to wchar_t.
21364 </pre>
21365  ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
21366 <pre>
21367               to an argument with type pointer to long long int or unsigned
21368               long long int.
21369 </pre>
21370  j            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
21371 <pre>
21372               to an argument with type pointer to intmax_t or uintmax_t.
21373 </pre>
21374  z            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
21375 <pre>
21376               to an argument with type pointer to size_t or the corresponding signed
21377               integer type.
21378 </pre>
21379  t            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
21380 <pre>
21381               to an argument with type pointer to ptrdiff_t or the corresponding
21382               unsigned integer type.
21383 </pre>
21384  L            Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
21385 <pre>
21386               applies to an argument with type pointer to long double.
21387 </pre>
21388  If a length modifier appears with any conversion specifier other than as specified above,
21389  the behavior is undefined.
21390 <p><!--para 12 -->
21391  The conversion specifiers and their meanings are:
21392  d           Matches an optionally signed decimal integer, whose format is the same as
21393 <pre>
21394              expected for the subject sequence of the wcstol function with the value 10
21395              for the base argument. The corresponding argument shall be a pointer to
21396              signed integer.
21397 </pre>
21398  i           Matches an optionally signed integer, whose format is the same as expected
21399 <!--page 428 -->
21400 <pre>
21401              for the subject sequence of the wcstol function with the value 0 for the
21402              base argument. The corresponding argument shall be a pointer to signed
21403            integer.
21404 </pre>
21405  o         Matches an optionally signed octal integer, whose format is the same as
21406 <pre>
21407            expected for the subject sequence of the wcstoul function with the value 8
21408            for the base argument. The corresponding argument shall be a pointer to
21409            unsigned integer.
21410 </pre>
21411  u         Matches an optionally signed decimal integer, whose format is the same as
21412 <pre>
21413            expected for the subject sequence of the wcstoul function with the value 10
21414            for the base argument. The corresponding argument shall be a pointer to
21415            unsigned integer.
21416 </pre>
21417  x         Matches an optionally signed hexadecimal integer, whose format is the same
21418 <pre>
21419            as expected for the subject sequence of the wcstoul function with the value
21420            16 for the base argument. The corresponding argument shall be a pointer to
21421            unsigned integer.
21422 </pre>
21423  a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
21424 <pre>
21425          format is the same as expected for the subject sequence of the wcstod
21426          function. The corresponding argument shall be a pointer to floating.
21427 </pre>
21428  c         Matches a sequence of wide characters of exactly the number specified by the
21429 <pre>
21430            field width (1 if no field width is present in the directive).
21431            If no l length modifier is present, characters from the input field are
21432            converted as if by repeated calls to the wcrtomb function, with the
21433            conversion state described by an mbstate_t object initialized to zero
21434            before the first wide character is converted. The corresponding argument
21435            shall be a pointer to the initial element of a character array large enough to
21436            accept the sequence. No null character is added.
21437            If an l length modifier is present, the corresponding argument shall be a
21438            pointer to the initial element of an array of wchar_t large enough to accept
21439            the sequence. No null wide character is added.
21440 </pre>
21441  s         Matches a sequence of non-white-space wide characters.
21442 <!--page 429 -->
21443 <pre>
21444            If no l length modifier is present, characters from the input field are
21445            converted as if by repeated calls to the wcrtomb function, with the
21446            conversion state described by an mbstate_t object initialized to zero
21447            before the first wide character is converted. The corresponding argument
21448            shall be a pointer to the initial element of a character array large enough to
21449            accept the sequence and a terminating null character, which will be added
21450            automatically.
21451            If an l length modifier is present, the corresponding argument shall be a
21452            pointer to the initial element of an array of wchar_t large enough to accept
21453              the sequence and the terminating null wide character, which will be added
21454              automatically.
21455 </pre>
21456  [           Matches a nonempty sequence of wide characters from a set of expected
21457 <pre>
21458              characters (the scanset).
21459              If no l length modifier is present, characters from the input field are
21460              converted as if by repeated calls to the wcrtomb function, with the
21461              conversion state described by an mbstate_t object initialized to zero
21462              before the first wide character is converted. The corresponding argument
21463              shall be a pointer to the initial element of a character array large enough to
21464              accept the sequence and a terminating null character, which will be added
21465              automatically.
21466              If an l length modifier is present, the corresponding argument shall be a
21467              pointer to the initial element of an array of wchar_t large enough to accept
21468              the sequence and the terminating null wide character, which will be added
21469              automatically.
21470              The conversion specifier includes all subsequent wide characters in the
21471              format string, up to and including the matching right bracket (]). The wide
21472              characters between the brackets (the scanlist) compose the scanset, unless the
21473              wide character after the left bracket is a circumflex (^), in which case the
21474              scanset contains all wide characters that do not appear in the scanlist between
21475              the circumflex and the right bracket. If the conversion specifier begins with
21476              [] or [^], the right bracket wide character is in the scanlist and the next
21477              following right bracket wide character is the matching right bracket that ends
21478              the specification; otherwise the first following right bracket wide character is
21479              the one that ends the specification. If a - wide character is in the scanlist and
21480              is not the first, nor the second where the first wide character is a ^, nor the
21481              last character, the behavior is implementation-defined.
21482 </pre>
21483  p           Matches an implementation-defined set of sequences, which should be the
21484 <pre>
21485              same as the set of sequences that may be produced by the %p conversion of
21486              the fwprintf function. The corresponding argument shall be a pointer to a
21487              pointer to void. The input item is converted to a pointer value in an
21488              implementation-defined manner. If the input item is a value converted earlier
21489              during the same program execution, the pointer that results shall compare
21490              equal to that value; otherwise the behavior of the %p conversion is undefined.
21491 </pre>
21492  n           No input is consumed. The corresponding argument shall be a pointer to
21493 <!--page 430 -->
21494 <pre>
21495              signed integer into which is to be written the number of wide characters read
21496              from the input stream so far by this call to the fwscanf function. Execution
21497              of a %n directive does not increment the assignment count returned at the
21498              completion of execution of the fwscanf function. No argument is
21499                 converted, but one is consumed. If the conversion specification includes an
21500                 assignment-suppressing wide character or a field width, the behavior is
21501                 undefined.
21502 </pre>
21503  %              Matches a single % wide character; no conversion or assignment occurs. The
21504 <pre>
21505                 complete conversion specification shall be %%.
21506 </pre>
21507 <p><!--para 13 -->
21508  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note326"><b>326)</b></a></sup>
21509 <p><!--para 14 -->
21510  The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
21511  respectively, a, e, f, g, and x.
21512 <p><!--para 15 -->
21513  Trailing white space (including new-line wide characters) is left unread unless matched
21514  by a directive. The success of literal matches and suppressed assignments is not directly
21515  determinable other than via the %n directive.
21516 <p><b>Returns</b>
21517 <p><!--para 16 -->
21518  The fwscanf function returns the value of the macro EOF if an input failure occurs
21519  before the first conversion (if any) has completed. Otherwise, the function returns the
21520  number of input items assigned, which can be fewer than provided for, or even zero, in
21521  the event of an early matching failure.
21522 <p><!--para 17 -->
21523  EXAMPLE 1        The call:
21524 <pre>
21525           #include <a href="#7.21">&lt;stdio.h&gt;</a>
21526           #include <a href="#7.28">&lt;wchar.h&gt;</a>
21527           /* ... */
21528           int n, i; float x; wchar_t name[50];
21529           n = fwscanf(stdin, L"%d%f%ls", &amp;i, &amp;x, name);
21530 </pre>
21531  with the input line:
21532 <pre>
21533           25 54.32E-1 thompson
21534 </pre>
21535  will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
21536  thompson\0.
21537  
21538 <p><!--para 18 -->
21539  EXAMPLE 2        The call:
21540 <pre>
21541           #include <a href="#7.21">&lt;stdio.h&gt;</a>
21542           #include <a href="#7.28">&lt;wchar.h&gt;</a>
21543           /* ... */
21544           int i; float x; double y;
21545           fwscanf(stdin, L"%2d%f%*d %lf", &amp;i, &amp;x, &amp;y);
21546 </pre>
21547  with input:
21548 <pre>
21549           56789 0123 56a72
21550 </pre>
21551  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
21552  56.0. The next wide character read from the input stream will be a.
21553  
21554  
21555 <!--page 431 -->
21556 <p><b> Forward references</b>: the wcstod, wcstof, and wcstold functions (<a href="#7.28.4.1.1">7.28.4.1.1</a>), the
21557  wcstol, wcstoll, wcstoul, and wcstoull functions (<a href="#7.28.4.1.2">7.28.4.1.2</a>), the wcrtomb
21558  function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
21559
21560 <p><b>Footnotes</b>
21561 <p><small><a name="note324" href="#note324">324)</a> These white-space wide characters are not counted against a specified field width.
21562 </small>
21563 <p><small><a name="note325" href="#note325">325)</a> fwscanf pushes back at most one input wide character onto the input stream. Therefore, some
21564  sequences that are acceptable to wcstod, wcstol, etc., are unacceptable to fwscanf.
21565 </small>
21566 <p><small><a name="note326" href="#note326">326)</a> See ''future library directions'' (<a href="#7.30.12">7.30.12</a>).
21567 </small>
21568
21569 <p><small><a href="#Contents">Contents</a></small>
21570 <h5><a name="7.28.2.3" href="#7.28.2.3">7.28.2.3 The swprintf function</a></h5>
21571 <p><b>Synopsis</b>
21572 <p><!--para 1 -->
21573 <pre>
21574          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21575          int swprintf(wchar_t * restrict s,
21576               size_t n,
21577               const wchar_t * restrict format, ...);
21578 </pre>
21579 <p><b>Description</b>
21580 <p><!--para 2 -->
21581  The swprintf function is equivalent to fwprintf, except that the argument s
21582  specifies an array of wide characters into which the generated output is to be written,
21583  rather than written to a stream. No more than n wide characters are written, including a
21584  terminating null wide character, which is always added (unless n is zero).
21585 <p><b>Returns</b>
21586 <p><!--para 3 -->
21587  The swprintf function returns the number of wide characters written in the array, not
21588  counting the terminating null wide character, or a negative value if an encoding error
21589  occurred or if n or more wide characters were requested to be written.
21590
21591 <p><small><a href="#Contents">Contents</a></small>
21592 <h5><a name="7.28.2.4" href="#7.28.2.4">7.28.2.4 The swscanf function</a></h5>
21593 <p><b>Synopsis</b>
21594 <p><!--para 1 -->
21595 <pre>
21596          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21597          int swscanf(const wchar_t * restrict s,
21598               const wchar_t * restrict format, ...);
21599 </pre>
21600 <p><b>Description</b>
21601 <p><!--para 2 -->
21602  The swscanf function is equivalent to fwscanf, except that the argument s specifies a
21603  wide string from which the input is to be obtained, rather than from a stream. Reaching
21604  the end of the wide string is equivalent to encountering end-of-file for the fwscanf
21605  function.
21606 <p><b>Returns</b>
21607 <p><!--para 3 -->
21608  The swscanf function returns the value of the macro EOF if an input failure occurs
21609  before the first conversion (if any) has completed. Otherwise, the swscanf function
21610  returns the number of input items assigned, which can be fewer than provided for, or even
21611  zero, in the event of an early matching failure.
21612 <!--page 432 -->
21613
21614 <p><small><a href="#Contents">Contents</a></small>
21615 <h5><a name="7.28.2.5" href="#7.28.2.5">7.28.2.5 The vfwprintf function</a></h5>
21616 <p><b>Synopsis</b>
21617 <p><!--para 1 -->
21618 <pre>
21619         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
21620         #include <a href="#7.21">&lt;stdio.h&gt;</a>
21621         #include <a href="#7.28">&lt;wchar.h&gt;</a>
21622         int vfwprintf(FILE * restrict stream,
21623              const wchar_t * restrict format,
21624              va_list arg);
21625 </pre>
21626 <p><b>Description</b>
21627 <p><!--para 2 -->
21628  The vfwprintf function is equivalent to fwprintf, with the variable argument list
21629  replaced by arg, which shall have been initialized by the va_start macro (and
21630  possibly subsequent va_arg calls). The vfwprintf function does not invoke the
21631  va_end macro.<sup><a href="#note327"><b>327)</b></a></sup>
21632 <p><b>Returns</b>
21633 <p><!--para 3 -->
21634  The vfwprintf function returns the number of wide characters transmitted, or a
21635  negative value if an output or encoding error occurred.
21636 <p><!--para 4 -->
21637  EXAMPLE       The following shows the use of the vfwprintf function in a general error-reporting
21638  routine.
21639 <pre>
21640         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
21641         #include <a href="#7.21">&lt;stdio.h&gt;</a>
21642         #include <a href="#7.28">&lt;wchar.h&gt;</a>
21643         void error(char *function_name, wchar_t *format, ...)
21644         {
21645               va_list args;
21646                  va_start(args, format);
21647                  // print out name of function causing error
21648                  fwprintf(stderr, L"ERROR in %s: ", function_name);
21649                  // print out remainder of message
21650                  vfwprintf(stderr, format, args);
21651                  va_end(args);
21652         }
21653 </pre>
21654  
21655  
21656  
21657  
21658 <!--page 433 -->
21659
21660 <p><b>Footnotes</b>
21661 <p><small><a name="note327" href="#note327">327)</a> As the functions vfwprintf, vswprintf, vfwscanf, vwprintf, vwscanf, and vswscanf
21662  invoke the va_arg macro, the value of arg after the return is indeterminate.
21663 </small>
21664
21665 <p><small><a href="#Contents">Contents</a></small>
21666 <h5><a name="7.28.2.6" href="#7.28.2.6">7.28.2.6 The vfwscanf function</a></h5>
21667 <p><b>Synopsis</b>
21668 <p><!--para 1 -->
21669 <pre>
21670          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
21671          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21672          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21673          int vfwscanf(FILE * restrict stream,
21674               const wchar_t * restrict format,
21675               va_list arg);
21676 </pre>
21677 <p><b>Description</b>
21678 <p><!--para 2 -->
21679  The vfwscanf function is equivalent to fwscanf, with the variable argument list
21680  replaced by arg, which shall have been initialized by the va_start macro (and
21681  possibly subsequent va_arg calls). The vfwscanf function does not invoke the
21682  va_end macro.<sup><a href="#note327"><b>327)</b></a></sup>
21683 <p><b>Returns</b>
21684 <p><!--para 3 -->
21685  The vfwscanf function returns the value of the macro EOF if an input failure occurs
21686  before the first conversion (if any) has completed. Otherwise, the vfwscanf function
21687  returns the number of input items assigned, which can be fewer than provided for, or even
21688  zero, in the event of an early matching failure.
21689
21690 <p><small><a href="#Contents">Contents</a></small>
21691 <h5><a name="7.28.2.7" href="#7.28.2.7">7.28.2.7 The vswprintf function</a></h5>
21692 <p><b>Synopsis</b>
21693 <p><!--para 1 -->
21694 <pre>
21695          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
21696          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21697          int vswprintf(wchar_t * restrict s,
21698               size_t n,
21699               const wchar_t * restrict format,
21700               va_list arg);
21701 </pre>
21702 <p><b>Description</b>
21703 <p><!--para 2 -->
21704  The vswprintf function is equivalent to swprintf, with the variable argument list
21705  replaced by arg, which shall have been initialized by the va_start macro (and
21706  possibly subsequent va_arg calls). The vswprintf function does not invoke the
21707  va_end macro.<sup><a href="#note327"><b>327)</b></a></sup>
21708 <p><b>Returns</b>
21709 <p><!--para 3 -->
21710  The vswprintf function returns the number of wide characters written in the array, not
21711  counting the terminating null wide character, or a negative value if an encoding error
21712  occurred or if n or more wide characters were requested to be generated.
21713 <!--page 434 -->
21714
21715 <p><small><a href="#Contents">Contents</a></small>
21716 <h5><a name="7.28.2.8" href="#7.28.2.8">7.28.2.8 The vswscanf function</a></h5>
21717 <p><b>Synopsis</b>
21718 <p><!--para 1 -->
21719 <pre>
21720         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
21721         #include <a href="#7.28">&lt;wchar.h&gt;</a>
21722         int vswscanf(const wchar_t * restrict s,
21723              const wchar_t * restrict format,
21724              va_list arg);
21725 </pre>
21726 <p><b>Description</b>
21727 <p><!--para 2 -->
21728  The vswscanf function is equivalent to swscanf, with the variable argument list
21729  replaced by arg, which shall have been initialized by the va_start macro (and
21730  possibly subsequent va_arg calls). The vswscanf function does not invoke the
21731  va_end macro.<sup><a href="#note327"><b>327)</b></a></sup>
21732 <p><b>Returns</b>
21733 <p><!--para 3 -->
21734  The vswscanf function returns the value of the macro EOF if an input failure occurs
21735  before the first conversion (if any) has completed. Otherwise, the vswscanf function
21736  returns the number of input items assigned, which can be fewer than provided for, or even
21737  zero, in the event of an early matching failure.
21738
21739 <p><small><a href="#Contents">Contents</a></small>
21740 <h5><a name="7.28.2.9" href="#7.28.2.9">7.28.2.9 The vwprintf function</a></h5>
21741 <p><b>Synopsis</b>
21742 <p><!--para 1 -->
21743 <pre>
21744         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
21745         #include <a href="#7.28">&lt;wchar.h&gt;</a>
21746         int vwprintf(const wchar_t * restrict format,
21747              va_list arg);
21748 </pre>
21749 <p><b>Description</b>
21750 <p><!--para 2 -->
21751  The vwprintf function is equivalent to wprintf, with the variable argument list
21752  replaced by arg, which shall have been initialized by the va_start macro (and
21753  possibly subsequent va_arg calls). The vwprintf function does not invoke the
21754  va_end macro.<sup><a href="#note327"><b>327)</b></a></sup>
21755 <p><b>Returns</b>
21756 <p><!--para 3 -->
21757  The vwprintf function returns the number of wide characters transmitted, or a negative
21758  value if an output or encoding error occurred.
21759 <!--page 435 -->
21760
21761 <p><small><a href="#Contents">Contents</a></small>
21762 <h5><a name="7.28.2.10" href="#7.28.2.10">7.28.2.10 The vwscanf function</a></h5>
21763 <p><b>Synopsis</b>
21764 <p><!--para 1 -->
21765 <pre>
21766          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
21767          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21768          int vwscanf(const wchar_t * restrict format,
21769               va_list arg);
21770 </pre>
21771 <p><b>Description</b>
21772 <p><!--para 2 -->
21773  The vwscanf function is equivalent to wscanf, with the variable argument list
21774  replaced by arg, which shall have been initialized by the va_start macro (and
21775  possibly subsequent va_arg calls). The vwscanf function does not invoke the
21776  va_end macro.<sup><a href="#note327"><b>327)</b></a></sup>
21777 <p><b>Returns</b>
21778 <p><!--para 3 -->
21779  The vwscanf function returns the value of the macro EOF if an input failure occurs
21780  before the first conversion (if any) has completed. Otherwise, the vwscanf function
21781  returns the number of input items assigned, which can be fewer than provided for, or even
21782  zero, in the event of an early matching failure.
21783
21784 <p><small><a href="#Contents">Contents</a></small>
21785 <h5><a name="7.28.2.11" href="#7.28.2.11">7.28.2.11 The wprintf function</a></h5>
21786 <p><b>Synopsis</b>
21787 <p><!--para 1 -->
21788 <pre>
21789          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21790          int wprintf(const wchar_t * restrict format, ...);
21791 </pre>
21792 <p><b>Description</b>
21793 <p><!--para 2 -->
21794  The wprintf function is equivalent to fwprintf with the argument stdout
21795  interposed before the arguments to wprintf.
21796 <p><b>Returns</b>
21797 <p><!--para 3 -->
21798  The wprintf function returns the number of wide characters transmitted, or a negative
21799  value if an output or encoding error occurred.
21800
21801 <p><small><a href="#Contents">Contents</a></small>
21802 <h5><a name="7.28.2.12" href="#7.28.2.12">7.28.2.12 The wscanf function</a></h5>
21803 <p><b>Synopsis</b>
21804 <p><!--para 1 -->
21805 <pre>
21806          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21807          int wscanf(const wchar_t * restrict format, ...);
21808 </pre>
21809 <p><b>Description</b>
21810 <p><!--para 2 -->
21811  The wscanf function is equivalent to fwscanf with the argument stdin interposed
21812  before the arguments to wscanf.
21813 <!--page 436 -->
21814 <p><b>Returns</b>
21815 <p><!--para 3 -->
21816  The wscanf function returns the value of the macro EOF if an input failure occurs
21817  before the first conversion (if any) has completed. Otherwise, the wscanf function
21818  returns the number of input items assigned, which can be fewer than provided for, or even
21819  zero, in the event of an early matching failure.
21820
21821 <p><small><a href="#Contents">Contents</a></small>
21822 <h4><a name="7.28.3" href="#7.28.3">7.28.3 Wide character input/output functions</a></h4>
21823
21824 <p><small><a href="#Contents">Contents</a></small>
21825 <h5><a name="7.28.3.1" href="#7.28.3.1">7.28.3.1 The fgetwc function</a></h5>
21826 <p><b>Synopsis</b>
21827 <p><!--para 1 -->
21828 <pre>
21829          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21830          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21831          wint_t fgetwc(FILE *stream);
21832 </pre>
21833 <p><b>Description</b>
21834 <p><!--para 2 -->
21835  If the end-of-file indicator for the input stream pointed to by stream is not set and a
21836  next wide character is present, the fgetwc function obtains that wide character as a
21837  wchar_t converted to a wint_t and advances the associated file position indicator for
21838  the stream (if defined).
21839 <p><b>Returns</b>
21840 <p><!--para 3 -->
21841  If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-
21842  of-file indicator for the stream is set and the fgetwc function returns WEOF. Otherwise,
21843  the fgetwc function returns the next wide character from the input stream pointed to by
21844  stream. If a read error occurs, the error indicator for the stream is set and the fgetwc
21845  function returns WEOF. If an encoding error occurs (including too few bytes), the value of
21846  the macro EILSEQ is stored in errno and the fgetwc function returns WEOF.<sup><a href="#note328"><b>328)</b></a></sup>
21847
21848 <p><b>Footnotes</b>
21849 <p><small><a name="note328" href="#note328">328)</a> An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
21850  Also, errno will be set to EILSEQ by input/output functions only if an encoding error occurs.
21851 </small>
21852
21853 <p><small><a href="#Contents">Contents</a></small>
21854 <h5><a name="7.28.3.2" href="#7.28.3.2">7.28.3.2 The fgetws function</a></h5>
21855 <p><b>Synopsis</b>
21856 <p><!--para 1 -->
21857 <pre>
21858          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21859          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21860          wchar_t *fgetws(wchar_t * restrict s,
21861               int n, FILE * restrict stream);
21862 </pre>
21863 <p><b>Description</b>
21864 <p><!--para 2 -->
21865  The fgetws function reads at most one less than the number of wide characters
21866  specified by n from the stream pointed to by stream into the array pointed to by s. No
21867  
21868  
21869 <!--page 437 -->
21870  additional wide characters are read after a new-line wide character (which is retained) or
21871  after end-of-file. A null wide character is written immediately after the last wide
21872  character read into the array.
21873 <p><b>Returns</b>
21874 <p><!--para 3 -->
21875  The fgetws function returns s if successful. If end-of-file is encountered and no
21876  characters have been read into the array, the contents of the array remain unchanged and a
21877  null pointer is returned. If a read or encoding error occurs during the operation, the array
21878  contents are indeterminate and a null pointer is returned.
21879
21880 <p><small><a href="#Contents">Contents</a></small>
21881 <h5><a name="7.28.3.3" href="#7.28.3.3">7.28.3.3 The fputwc function</a></h5>
21882 <p><b>Synopsis</b>
21883 <p><!--para 1 -->
21884 <pre>
21885          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21886          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21887          wint_t fputwc(wchar_t c, FILE *stream);
21888 </pre>
21889 <p><b>Description</b>
21890 <p><!--para 2 -->
21891  The fputwc function writes the wide character specified by c to the output stream
21892  pointed to by stream, at the position indicated by the associated file position indicator
21893  for the stream (if defined), and advances the indicator appropriately. If the file cannot
21894  support positioning requests, or if the stream was opened with append mode, the
21895  character is appended to the output stream.
21896 <p><b>Returns</b>
21897 <p><!--para 3 -->
21898  The fputwc function returns the wide character written. If a write error occurs, the
21899  error indicator for the stream is set and fputwc returns WEOF. If an encoding error
21900  occurs, the value of the macro EILSEQ is stored in errno and fputwc returns WEOF.
21901
21902 <p><small><a href="#Contents">Contents</a></small>
21903 <h5><a name="7.28.3.4" href="#7.28.3.4">7.28.3.4 The fputws function</a></h5>
21904 <p><b>Synopsis</b>
21905 <p><!--para 1 -->
21906 <pre>
21907          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21908          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21909          int fputws(const wchar_t * restrict s,
21910               FILE * restrict stream);
21911 </pre>
21912 <p><b>Description</b>
21913 <p><!--para 2 -->
21914  The fputws function writes the wide string pointed to by s to the stream pointed to by
21915  stream. The terminating null wide character is not written.
21916 <p><b>Returns</b>
21917 <p><!--para 3 -->
21918  The fputws function returns EOF if a write or encoding error occurs; otherwise, it
21919  returns a nonnegative value.
21920 <!--page 438 -->
21921
21922 <p><small><a href="#Contents">Contents</a></small>
21923 <h5><a name="7.28.3.5" href="#7.28.3.5">7.28.3.5 The fwide function</a></h5>
21924 <p><b>Synopsis</b>
21925 <p><!--para 1 -->
21926 <pre>
21927          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21928          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21929          int fwide(FILE *stream, int mode);
21930 </pre>
21931 <p><b>Description</b>
21932 <p><!--para 2 -->
21933  The fwide function determines the orientation of the stream pointed to by stream. If
21934  mode is greater than zero, the function first attempts to make the stream wide oriented. If
21935  mode is less than zero, the function first attempts to make the stream byte oriented.<sup><a href="#note329"><b>329)</b></a></sup>
21936  Otherwise, mode is zero and the function does not alter the orientation of the stream.
21937 <p><b>Returns</b>
21938 <p><!--para 3 -->
21939  The fwide function returns a value greater than zero if, after the call, the stream has
21940  wide orientation, a value less than zero if the stream has byte orientation, or zero if the
21941  stream has no orientation.
21942
21943 <p><b>Footnotes</b>
21944 <p><small><a name="note329" href="#note329">329)</a> If the orientation of the stream has already been determined, fwide does not change it.
21945 </small>
21946
21947 <p><small><a href="#Contents">Contents</a></small>
21948 <h5><a name="7.28.3.6" href="#7.28.3.6">7.28.3.6 The getwc function</a></h5>
21949 <p><b>Synopsis</b>
21950 <p><!--para 1 -->
21951 <pre>
21952          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21953          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21954          wint_t getwc(FILE *stream);
21955 </pre>
21956 <p><b>Description</b>
21957 <p><!--para 2 -->
21958  The getwc function is equivalent to fgetwc, except that if it is implemented as a
21959  macro, it may evaluate stream more than once, so the argument should never be an
21960  expression with side effects.
21961 <p><b>Returns</b>
21962 <p><!--para 3 -->
21963  The getwc function returns the next wide character from the input stream pointed to by
21964  stream, or WEOF.
21965
21966 <p><small><a href="#Contents">Contents</a></small>
21967 <h5><a name="7.28.3.7" href="#7.28.3.7">7.28.3.7 The getwchar function</a></h5>
21968 <p><b>Synopsis</b>
21969 <p><!--para 1 -->
21970 <pre>
21971          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21972          wint_t getwchar(void);
21973 </pre>
21974  
21975  
21976  
21977  
21978 <!--page 439 -->
21979 <p><b>Description</b>
21980 <p><!--para 2 -->
21981  The getwchar function is equivalent to getwc with the argument stdin.
21982 <p><b>Returns</b>
21983 <p><!--para 3 -->
21984  The getwchar function returns the next wide character from the input stream pointed to
21985  by stdin, or WEOF.
21986
21987 <p><small><a href="#Contents">Contents</a></small>
21988 <h5><a name="7.28.3.8" href="#7.28.3.8">7.28.3.8 The putwc function</a></h5>
21989 <p><b>Synopsis</b>
21990 <p><!--para 1 -->
21991 <pre>
21992          #include <a href="#7.21">&lt;stdio.h&gt;</a>
21993          #include <a href="#7.28">&lt;wchar.h&gt;</a>
21994          wint_t putwc(wchar_t c, FILE *stream);
21995 </pre>
21996 <p><b>Description</b>
21997 <p><!--para 2 -->
21998  The putwc function is equivalent to fputwc, except that if it is implemented as a
21999  macro, it may evaluate stream more than once, so that argument should never be an
22000  expression with side effects.
22001 <p><b>Returns</b>
22002 <p><!--para 3 -->
22003  The putwc function returns the wide character written, or WEOF.
22004
22005 <p><small><a href="#Contents">Contents</a></small>
22006 <h5><a name="7.28.3.9" href="#7.28.3.9">7.28.3.9 The putwchar function</a></h5>
22007 <p><b>Synopsis</b>
22008 <p><!--para 1 -->
22009 <pre>
22010          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22011          wint_t putwchar(wchar_t c);
22012 </pre>
22013 <p><b>Description</b>
22014 <p><!--para 2 -->
22015  The putwchar function is equivalent to putwc with the second argument stdout.
22016 <p><b>Returns</b>
22017 <p><!--para 3 -->
22018  The putwchar function returns the character written, or WEOF.
22019
22020 <p><small><a href="#Contents">Contents</a></small>
22021 <h5><a name="7.28.3.10" href="#7.28.3.10">7.28.3.10 The ungetwc function</a></h5>
22022 <p><b>Synopsis</b>
22023 <p><!--para 1 -->
22024 <pre>
22025          #include <a href="#7.21">&lt;stdio.h&gt;</a>
22026          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22027          wint_t ungetwc(wint_t c, FILE *stream);
22028 </pre>
22029 <p><b>Description</b>
22030 <p><!--para 2 -->
22031  The ungetwc function pushes the wide character specified by c back onto the input
22032  stream pointed to by stream. Pushed-back wide characters will be returned by
22033  subsequent reads on that stream in the reverse order of their pushing. A successful
22034 <!--page 440 -->
22035  intervening call (with the stream pointed to by stream) to a file positioning function
22036  (fseek, fsetpos, or rewind) discards any pushed-back wide characters for the
22037  stream. The external storage corresponding to the stream is unchanged.
22038 <p><!--para 3 -->
22039  One wide character of pushback is guaranteed, even if the call to the ungetwc function
22040  follows just after a call to a formatted wide character input function fwscanf,
22041  vfwscanf, vwscanf, or wscanf. If the ungetwc function is called too many times
22042  on the same stream without an intervening read or file positioning operation on that
22043  stream, the operation may fail.
22044 <p><!--para 4 -->
22045  If the value of c equals that of the macro WEOF, the operation fails and the input stream is
22046  unchanged.
22047 <p><!--para 5 -->
22048  A successful call to the ungetwc function clears the end-of-file indicator for the stream.
22049  The value of the file position indicator for the stream after reading or discarding all
22050  pushed-back wide characters is the same as it was before the wide characters were pushed
22051  back. For a text or binary stream, the value of its file position indicator after a successful
22052  call to the ungetwc function is unspecified until all pushed-back wide characters are
22053  read or discarded.
22054 <p><b>Returns</b>
22055 <p><!--para 6 -->
22056  The ungetwc function returns the wide character pushed back, or WEOF if the operation
22057  fails.
22058
22059 <p><small><a href="#Contents">Contents</a></small>
22060 <h4><a name="7.28.4" href="#7.28.4">7.28.4 General wide string utilities</a></h4>
22061 <p><!--para 1 -->
22062  The header <a href="#7.28">&lt;wchar.h&gt;</a> declares a number of functions useful for wide string
22063  manipulation. Various methods are used for determining the lengths of the arrays, but in
22064  all cases a wchar_t * argument points to the initial (lowest addressed) element of the
22065  array. If an array is accessed beyond the end of an object, the behavior is undefined.
22066 <p><!--para 2 -->
22067  Where an argument declared as size_t n determines the length of the array for a
22068  function, n can have the value zero on a call to that function. Unless explicitly stated
22069  otherwise in the description of a particular function in this subclause, pointer arguments
22070  on such a call shall still have valid values, as described in <a href="#7.1.4">7.1.4</a>. On such a call, a
22071  function that locates a wide character finds no occurrence, a function that compares two
22072  wide character sequences returns zero, and a function that copies wide characters copies
22073  zero wide characters.
22074 <!--page 441 -->
22075
22076 <p><small><a href="#Contents">Contents</a></small>
22077 <h5><a name="7.28.4.1" href="#7.28.4.1">7.28.4.1 Wide string numeric conversion functions</a></h5>
22078
22079 <p><small><a href="#Contents">Contents</a></small>
22080 <h5><a name="7.28.4.1.1" href="#7.28.4.1.1">7.28.4.1.1 The wcstod, wcstof, and wcstold functions</a></h5>
22081 <p><b>Synopsis</b>
22082 <p><!--para 1 -->
22083 <pre>
22084          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22085          double wcstod(const wchar_t * restrict nptr,
22086               wchar_t ** restrict endptr);
22087          float wcstof(const wchar_t * restrict nptr,
22088               wchar_t ** restrict endptr);
22089          long double wcstold(const wchar_t * restrict nptr,
22090               wchar_t ** restrict endptr);
22091 </pre>
22092 <p><b>Description</b>
22093 <p><!--para 2 -->
22094  The wcstod, wcstof, and wcstold functions convert the initial portion of the wide
22095  string pointed to by nptr to double, float, and long double representation,
22096  respectively. First, they decompose the input string into three parts: an initial, possibly
22097  empty, sequence of white-space wide characters (as specified by the iswspace
22098  function), a subject sequence resembling a floating-point constant or representing an
22099  infinity or NaN; and a final wide string of one or more unrecognized wide characters,
22100  including the terminating null wide character of the input wide string. Then, they attempt
22101  to convert the subject sequence to a floating-point number, and return the result.
22102 <p><!--para 3 -->
22103  The expected form of the subject sequence is an optional plus or minus sign, then one of
22104  the following:
22105 <ul>
22106 <li>  a nonempty sequence of decimal digits optionally containing a decimal-point wide
22107  character, then an optional exponent part as defined for the corresponding single-byte
22108  characters in <a href="#6.4.4.2">6.4.4.2</a>;
22109 <li>  a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
22110  decimal-point wide character, then an optional binary exponent part as defined in
22111  <a href="#6.4.4.2">6.4.4.2</a>;
22112 <li>  INF or INFINITY, or any other wide string equivalent except for case
22113 <li>  NAN or NAN(n-wchar-sequence<sub>opt</sub>), or any other wide string equivalent except for
22114  case in the NAN part, where:
22115 <pre>
22116           n-wchar-sequence:
22117                 digit
22118                 nondigit
22119                 n-wchar-sequence digit
22120                 n-wchar-sequence nondigit
22121 </pre>
22122 </ul>
22123  The subject sequence is defined as the longest initial subsequence of the input wide
22124  string, starting with the first non-white-space wide character, that is of the expected form.
22125 <!--page 442 -->
22126  The subject sequence contains no wide characters if the input wide string is not of the
22127  expected form.
22128 <p><!--para 4 -->
22129  If the subject sequence has the expected form for a floating-point number, the sequence of
22130  wide characters starting with the first digit or the decimal-point wide character
22131  (whichever occurs first) is interpreted as a floating constant according to the rules of
22132  <a href="#6.4.4.2">6.4.4.2</a>, except that the decimal-point wide character is used in place of a period, and that
22133  if neither an exponent part nor a decimal-point wide character appears in a decimal
22134  floating point number, or if a binary exponent part does not appear in a hexadecimal
22135  floating point number, an exponent part of the appropriate type with value zero is
22136  assumed to follow the last digit in the string. If the subject sequence begins with a minus
22137  sign, the sequence is interpreted as negated.<sup><a href="#note330"><b>330)</b></a></sup> A wide character sequence INF or
22138  INFINITY is interpreted as an infinity, if representable in the return type, else like a
22139  floating constant that is too large for the range of the return type. A wide character
22140  sequence NAN or NAN(n-wchar-sequence<sub>opt</sub>) is interpreted as a quiet NaN, if supported
22141  in the return type, else like a subject sequence part that does not have the expected form;
22142  the meaning of the n-wchar sequences is implementation-defined.<sup><a href="#note331"><b>331)</b></a></sup> A pointer to the
22143  final wide string is stored in the object pointed to by endptr, provided that endptr is
22144  not a null pointer.
22145 <p><!--para 5 -->
22146  If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
22147  value resulting from the conversion is correctly rounded.
22148 <p><!--para 6 -->
22149  In other than the "C" locale, additional locale-specific subject sequence forms may be
22150  accepted.
22151 <p><!--para 7 -->
22152  If the subject sequence is empty or does not have the expected form, no conversion is
22153  performed; the value of nptr is stored in the object pointed to by endptr, provided
22154  that endptr is not a null pointer.
22155 <p><b>Recommended practice</b>
22156 <p><!--para 8 -->
22157  If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
22158  the result is not exactly representable, the result should be one of the two numbers in the
22159  appropriate internal format that are adjacent to the hexadecimal floating source value,
22160  with the extra stipulation that the error should have a correct sign for the current rounding
22161  direction.
22162  
22163  
22164  
22165 <!--page 443 -->
22166 <p><!--para 9 -->
22167  If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in
22168  <a href="#7.7">&lt;float.h&gt;</a>) significant digits, the result should be correctly rounded. If the subject
22169  sequence D has the decimal form and more than DECIMAL_DIG significant digits,
22170  consider the two bounding, adjacent decimal strings L and U, both having
22171  DECIMAL_DIG significant digits, such that the values of L, D, and U satisfy L &lt;= D &lt;= U.
22172  The result should be one of the (equal or adjacent) values that would be obtained by
22173  correctly rounding L and U according to the current rounding direction, with the extra
22174  stipulation that the error with respect to D should have a correct sign for the current
22175  rounding direction.<sup><a href="#note332"><b>332)</b></a></sup>
22176 <p><b>Returns</b>
22177 <p><!--para 10 -->
22178  The functions return the converted value, if any. If no conversion could be performed,
22179  zero is returned. If the correct value overflows and default rounding is in effect (<a href="#7.12.1">7.12.1</a>),
22180  plus or minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the
22181  return type and sign of the value), and the value of the macro ERANGE is stored in
22182  errno. If the result underflows (<a href="#7.12.1">7.12.1</a>), the functions return a value whose magnitude is
22183  no greater than the smallest normalized positive number in the return type; whether
22184  errno acquires the value ERANGE is implementation-defined.
22185  
22186  
22187  
22188  
22189 <!--page 444 -->
22190
22191 <p><b>Footnotes</b>
22192 <p><small><a name="note330" href="#note330">330)</a> It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
22193  negating the value resulting from converting the corresponding unsigned sequence (see <a href="#F.5">F.5</a>); the two
22194  methods may yield different results if rounding is toward positive or negative infinity. In either case,
22195  the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
22196 </small>
22197 <p><small><a name="note331" href="#note331">331)</a> An implementation may use the n-wchar sequence to determine extra information to be represented in
22198  the NaN's significand.
22199 </small>
22200 <p><small><a name="note332" href="#note332">332)</a> DECIMAL_DIG, defined in <a href="#7.7">&lt;float.h&gt;</a>, should be sufficiently large that L and U will usually round
22201  to the same internal floating value, but if not will round to adjacent values.
22202 </small>
22203
22204 <p><small><a href="#Contents">Contents</a></small>
22205 <h5><a name="7.28.4.1.2" href="#7.28.4.1.2">7.28.4.1.2 The wcstol, wcstoll, wcstoul, and wcstoull functions</a></h5>
22206 <p><b>Synopsis</b>
22207 <p><!--para 1 -->
22208 <pre>
22209         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22210         long int wcstol(
22211              const wchar_t * restrict nptr,
22212              wchar_t ** restrict endptr,
22213              int base);
22214         long long int wcstoll(
22215              const wchar_t * restrict nptr,
22216              wchar_t ** restrict endptr,
22217              int base);
22218         unsigned long int wcstoul(
22219              const wchar_t * restrict nptr,
22220              wchar_t ** restrict endptr,
22221              int base);
22222         unsigned long long int wcstoull(
22223              const wchar_t * restrict nptr,
22224              wchar_t ** restrict endptr,
22225              int base);
22226 </pre>
22227 <p><b>Description</b>
22228 <p><!--para 2 -->
22229  The wcstol, wcstoll, wcstoul, and wcstoull functions convert the initial
22230  portion of the wide string pointed to by nptr to long int, long long int,
22231  unsigned long int, and unsigned long long int representation,
22232  respectively. First, they decompose the input string into three parts: an initial, possibly
22233  empty, sequence of white-space wide characters (as specified by the iswspace
22234  function), a subject sequence resembling an integer represented in some radix determined
22235  by the value of base, and a final wide string of one or more unrecognized wide
22236  characters, including the terminating null wide character of the input wide string. Then,
22237  they attempt to convert the subject sequence to an integer, and return the result.
22238 <p><!--para 3 -->
22239  If the value of base is zero, the expected form of the subject sequence is that of an
22240  integer constant as described for the corresponding single-byte characters in <a href="#6.4.4.1">6.4.4.1</a>,
22241  optionally preceded by a plus or minus sign, but not including an integer suffix. If the
22242  value of base is between 2 and 36 (inclusive), the expected form of the subject sequence
22243  is a sequence of letters and digits representing an integer with the radix specified by
22244  base, optionally preceded by a plus or minus sign, but not including an integer suffix.
22245  The letters from a (or A) through z (or Z) are ascribed the values 10 through 35; only
22246  letters and digits whose ascribed values are less than that of base are permitted. If the
22247  value of base is 16, the wide characters 0x or 0X may optionally precede the sequence
22248  of letters and digits, following the sign if present.
22249 <!--page 445 -->
22250 <p><!--para 4 -->
22251  The subject sequence is defined as the longest initial subsequence of the input wide
22252  string, starting with the first non-white-space wide character, that is of the expected form.
22253  The subject sequence contains no wide characters if the input wide string is empty or
22254  consists entirely of white space, or if the first non-white-space wide character is other
22255  than a sign or a permissible letter or digit.
22256 <p><!--para 5 -->
22257  If the subject sequence has the expected form and the value of base is zero, the sequence
22258  of wide characters starting with the first digit is interpreted as an integer constant
22259  according to the rules of <a href="#6.4.4.1">6.4.4.1</a>. If the subject sequence has the expected form and the
22260  value of base is between 2 and 36, it is used as the base for conversion, ascribing to each
22261  letter its value as given above. If the subject sequence begins with a minus sign, the value
22262  resulting from the conversion is negated (in the return type). A pointer to the final wide
22263  string is stored in the object pointed to by endptr, provided that endptr is not a null
22264  pointer.
22265 <p><!--para 6 -->
22266  In other than the "C" locale, additional locale-specific subject sequence forms may be
22267  accepted.
22268 <p><!--para 7 -->
22269  If the subject sequence is empty or does not have the expected form, no conversion is
22270  performed; the value of nptr is stored in the object pointed to by endptr, provided
22271  that endptr is not a null pointer.
22272 <p><b>Returns</b>
22273 <p><!--para 8 -->
22274  The wcstol, wcstoll, wcstoul, and wcstoull functions return the converted
22275  value, if any. If no conversion could be performed, zero is returned. If the correct value
22276  is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
22277  LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
22278  sign of the value, if any), and the value of the macro ERANGE is stored in errno.
22279
22280 <p><small><a href="#Contents">Contents</a></small>
22281 <h5><a name="7.28.4.2" href="#7.28.4.2">7.28.4.2 Wide string copying functions</a></h5>
22282
22283 <p><small><a href="#Contents">Contents</a></small>
22284 <h5><a name="7.28.4.2.1" href="#7.28.4.2.1">7.28.4.2.1 The wcscpy function</a></h5>
22285 <p><b>Synopsis</b>
22286 <p><!--para 1 -->
22287 <pre>
22288          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22289          wchar_t *wcscpy(wchar_t * restrict s1,
22290               const wchar_t * restrict s2);
22291 </pre>
22292 <p><b>Description</b>
22293 <p><!--para 2 -->
22294  The wcscpy function copies the wide string pointed to by s2 (including the terminating
22295  null wide character) into the array pointed to by s1.
22296 <p><b>Returns</b>
22297 <p><!--para 3 -->
22298  The wcscpy function returns the value of s1.
22299 <!--page 446 -->
22300
22301 <p><small><a href="#Contents">Contents</a></small>
22302 <h5><a name="7.28.4.2.2" href="#7.28.4.2.2">7.28.4.2.2 The wcsncpy function</a></h5>
22303 <p><b>Synopsis</b>
22304 <p><!--para 1 -->
22305 <pre>
22306           #include <a href="#7.28">&lt;wchar.h&gt;</a>
22307           wchar_t *wcsncpy(wchar_t * restrict s1,
22308                const wchar_t * restrict s2,
22309                size_t n);
22310 </pre>
22311 <p><b>Description</b>
22312 <p><!--para 2 -->
22313  The wcsncpy function copies not more than n wide characters (those that follow a null
22314  wide character are not copied) from the array pointed to by s2 to the array pointed to by
22315  s1.<sup><a href="#note333"><b>333)</b></a></sup>
22316 <p><!--para 3 -->
22317  If the array pointed to by s2 is a wide string that is shorter than n wide characters, null
22318  wide characters are appended to the copy in the array pointed to by s1, until n wide
22319  characters in all have been written.
22320 <p><b>Returns</b>
22321 <p><!--para 4 -->
22322  The wcsncpy function returns the value of s1.
22323
22324 <p><b>Footnotes</b>
22325 <p><small><a name="note333" href="#note333">333)</a> Thus, if there is no null wide character in the first n wide characters of the array pointed to by s2, the
22326  result will not be null-terminated.
22327 </small>
22328
22329 <p><small><a href="#Contents">Contents</a></small>
22330 <h5><a name="7.28.4.2.3" href="#7.28.4.2.3">7.28.4.2.3 The wmemcpy function</a></h5>
22331 <p><b>Synopsis</b>
22332 <p><!--para 1 -->
22333 <pre>
22334           #include <a href="#7.28">&lt;wchar.h&gt;</a>
22335           wchar_t *wmemcpy(wchar_t * restrict s1,
22336                const wchar_t * restrict s2,
22337                size_t n);
22338 </pre>
22339 <p><b>Description</b>
22340 <p><!--para 2 -->
22341  The wmemcpy function copies n wide characters from the object pointed to by s2 to the
22342  object pointed to by s1.
22343 <p><b>Returns</b>
22344 <p><!--para 3 -->
22345  The wmemcpy function returns the value of s1.
22346  
22347  
22348  
22349  
22350 <!--page 447 -->
22351
22352 <p><small><a href="#Contents">Contents</a></small>
22353 <h5><a name="7.28.4.2.4" href="#7.28.4.2.4">7.28.4.2.4 The wmemmove function</a></h5>
22354 <p><b>Synopsis</b>
22355 <p><!--para 1 -->
22356 <pre>
22357          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22358          wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
22359               size_t n);
22360 </pre>
22361 <p><b>Description</b>
22362 <p><!--para 2 -->
22363  The wmemmove function copies n wide characters from the object pointed to by s2 to
22364  the object pointed to by s1. Copying takes place as if the n wide characters from the
22365  object pointed to by s2 are first copied into a temporary array of n wide characters that
22366  does not overlap the objects pointed to by s1 or s2, and then the n wide characters from
22367  the temporary array are copied into the object pointed to by s1.
22368 <p><b>Returns</b>
22369 <p><!--para 3 -->
22370  The wmemmove function returns the value of s1.
22371
22372 <p><small><a href="#Contents">Contents</a></small>
22373 <h5><a name="7.28.4.3" href="#7.28.4.3">7.28.4.3 Wide string concatenation functions</a></h5>
22374
22375 <p><small><a href="#Contents">Contents</a></small>
22376 <h5><a name="7.28.4.3.1" href="#7.28.4.3.1">7.28.4.3.1 The wcscat function</a></h5>
22377 <p><b>Synopsis</b>
22378 <p><!--para 1 -->
22379 <pre>
22380          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22381          wchar_t *wcscat(wchar_t * restrict s1,
22382               const wchar_t * restrict s2);
22383 </pre>
22384 <p><b>Description</b>
22385 <p><!--para 2 -->
22386  The wcscat function appends a copy of the wide string pointed to by s2 (including the
22387  terminating null wide character) to the end of the wide string pointed to by s1. The initial
22388  wide character of s2 overwrites the null wide character at the end of s1.
22389 <p><b>Returns</b>
22390 <p><!--para 3 -->
22391  The wcscat function returns the value of s1.
22392
22393 <p><small><a href="#Contents">Contents</a></small>
22394 <h5><a name="7.28.4.3.2" href="#7.28.4.3.2">7.28.4.3.2 The wcsncat function</a></h5>
22395 <p><b>Synopsis</b>
22396 <p><!--para 1 -->
22397 <pre>
22398          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22399          wchar_t *wcsncat(wchar_t * restrict s1,
22400               const wchar_t * restrict s2,
22401               size_t n);
22402 </pre>
22403 <p><b>Description</b>
22404 <p><!--para 2 -->
22405  The wcsncat function appends not more than n wide characters (a null wide character
22406  and those that follow it are not appended) from the array pointed to by s2 to the end of
22407 <!--page 448 -->
22408  the wide string pointed to by s1. The initial wide character of s2 overwrites the null
22409  wide character at the end of s1. A terminating null wide character is always appended to
22410  the result.<sup><a href="#note334"><b>334)</b></a></sup>
22411 <p><b>Returns</b>
22412 <p><!--para 3 -->
22413  The wcsncat function returns the value of s1.
22414
22415 <p><b>Footnotes</b>
22416 <p><small><a name="note334" href="#note334">334)</a> Thus, the maximum number of wide characters that can end up in the array pointed to by s1 is
22417  wcslen(s1)+n+1.
22418 </small>
22419
22420 <p><small><a href="#Contents">Contents</a></small>
22421 <h5><a name="7.28.4.4" href="#7.28.4.4">7.28.4.4 Wide string comparison functions</a></h5>
22422 <p><!--para 1 -->
22423  Unless explicitly stated otherwise, the functions described in this subclause order two
22424  wide characters the same way as two integers of the underlying integer type designated
22425  by wchar_t.
22426
22427 <p><small><a href="#Contents">Contents</a></small>
22428 <h5><a name="7.28.4.4.1" href="#7.28.4.4.1">7.28.4.4.1 The wcscmp function</a></h5>
22429 <p><b>Synopsis</b>
22430 <p><!--para 1 -->
22431 <pre>
22432          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22433          int wcscmp(const wchar_t *s1, const wchar_t *s2);
22434 </pre>
22435 <p><b>Description</b>
22436 <p><!--para 2 -->
22437  The wcscmp function compares the wide string pointed to by s1 to the wide string
22438  pointed to by s2.
22439 <p><b>Returns</b>
22440 <p><!--para 3 -->
22441  The wcscmp function returns an integer greater than, equal to, or less than zero,
22442  accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
22443  wide string pointed to by s2.
22444
22445 <p><small><a href="#Contents">Contents</a></small>
22446 <h5><a name="7.28.4.4.2" href="#7.28.4.4.2">7.28.4.4.2 The wcscoll function</a></h5>
22447 <p><b>Synopsis</b>
22448 <p><!--para 1 -->
22449 <pre>
22450          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22451          int wcscoll(const wchar_t *s1, const wchar_t *s2);
22452 </pre>
22453 <p><b>Description</b>
22454 <p><!--para 2 -->
22455  The wcscoll function compares the wide string pointed to by s1 to the wide string
22456  pointed to by s2, both interpreted as appropriate to the LC_COLLATE category of the
22457  current locale.
22458 <p><b>Returns</b>
22459 <p><!--para 3 -->
22460  The wcscoll function returns an integer greater than, equal to, or less than zero,
22461  accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
22462  
22463  
22464 <!--page 449 -->
22465  wide string pointed to by s2 when both are interpreted as appropriate to the current
22466  locale.
22467
22468 <p><small><a href="#Contents">Contents</a></small>
22469 <h5><a name="7.28.4.4.3" href="#7.28.4.4.3">7.28.4.4.3 The wcsncmp function</a></h5>
22470 <p><b>Synopsis</b>
22471 <p><!--para 1 -->
22472 <pre>
22473          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22474          int wcsncmp(const wchar_t *s1, const wchar_t *s2,
22475               size_t n);
22476 </pre>
22477 <p><b>Description</b>
22478 <p><!--para 2 -->
22479  The wcsncmp function compares not more than n wide characters (those that follow a
22480  null wide character are not compared) from the array pointed to by s1 to the array
22481  pointed to by s2.
22482 <p><b>Returns</b>
22483 <p><!--para 3 -->
22484  The wcsncmp function returns an integer greater than, equal to, or less than zero,
22485  accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
22486  to, or less than the possibly null-terminated array pointed to by s2.
22487
22488 <p><small><a href="#Contents">Contents</a></small>
22489 <h5><a name="7.28.4.4.4" href="#7.28.4.4.4">7.28.4.4.4 The wcsxfrm function</a></h5>
22490 <p><b>Synopsis</b>
22491 <p><!--para 1 -->
22492 <pre>
22493          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22494          size_t wcsxfrm(wchar_t * restrict s1,
22495               const wchar_t * restrict s2,
22496               size_t n);
22497 </pre>
22498 <p><b>Description</b>
22499 <p><!--para 2 -->
22500  The wcsxfrm function transforms the wide string pointed to by s2 and places the
22501  resulting wide string into the array pointed to by s1. The transformation is such that if
22502  the wcscmp function is applied to two transformed wide strings, it returns a value greater
22503  than, equal to, or less than zero, corresponding to the result of the wcscoll function
22504  applied to the same two original wide strings. No more than n wide characters are placed
22505  into the resulting array pointed to by s1, including the terminating null wide character. If
22506  n is zero, s1 is permitted to be a null pointer.
22507 <p><b>Returns</b>
22508 <p><!--para 3 -->
22509  The wcsxfrm function returns the length of the transformed wide string (not including
22510  the terminating null wide character). If the value returned is n or greater, the contents of
22511  the array pointed to by s1 are indeterminate.
22512 <p><!--para 4 -->
22513  EXAMPLE The value of the following expression is the length of the array needed to hold the
22514  transformation of the wide string pointed to by s:
22515 <!--page 450 -->
22516 <pre>
22517         1 + wcsxfrm(NULL, s, 0)
22518 </pre>
22519  
22520
22521 <p><small><a href="#Contents">Contents</a></small>
22522 <h5><a name="7.28.4.4.5" href="#7.28.4.4.5">7.28.4.4.5 The wmemcmp function</a></h5>
22523 <p><b>Synopsis</b>
22524 <p><!--para 1 -->
22525 <pre>
22526         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22527         int wmemcmp(const wchar_t *s1, const wchar_t *s2,
22528              size_t n);
22529 </pre>
22530 <p><b>Description</b>
22531 <p><!--para 2 -->
22532  The wmemcmp function compares the first n wide characters of the object pointed to by
22533  s1 to the first n wide characters of the object pointed to by s2.
22534 <p><b>Returns</b>
22535 <p><!--para 3 -->
22536  The wmemcmp function returns an integer greater than, equal to, or less than zero,
22537  accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
22538  pointed to by s2.
22539
22540 <p><small><a href="#Contents">Contents</a></small>
22541 <h5><a name="7.28.4.5" href="#7.28.4.5">7.28.4.5 Wide string search functions</a></h5>
22542
22543 <p><small><a href="#Contents">Contents</a></small>
22544 <h5><a name="7.28.4.5.1" href="#7.28.4.5.1">7.28.4.5.1 The wcschr function</a></h5>
22545 <p><b>Synopsis</b>
22546 <p><!--para 1 -->
22547 <pre>
22548         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22549         wchar_t *wcschr(const wchar_t *s, wchar_t c);
22550 </pre>
22551 <p><b>Description</b>
22552 <p><!--para 2 -->
22553  The wcschr function locates the first occurrence of c in the wide string pointed to by s.
22554  The terminating null wide character is considered to be part of the wide string.
22555 <p><b>Returns</b>
22556 <p><!--para 3 -->
22557  The wcschr function returns a pointer to the located wide character, or a null pointer if
22558  the wide character does not occur in the wide string.
22559
22560 <p><small><a href="#Contents">Contents</a></small>
22561 <h5><a name="7.28.4.5.2" href="#7.28.4.5.2">7.28.4.5.2 The wcscspn function</a></h5>
22562 <p><b>Synopsis</b>
22563 <p><!--para 1 -->
22564 <pre>
22565         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22566         size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
22567 </pre>
22568 <p><b>Description</b>
22569 <p><!--para 2 -->
22570  The wcscspn function computes the length of the maximum initial segment of the wide
22571  string pointed to by s1 which consists entirely of wide characters not from the wide
22572  string pointed to by s2.
22573 <!--page 451 -->
22574 <p><b>Returns</b>
22575 <p><!--para 3 -->
22576  The wcscspn function returns the length of the segment.
22577
22578 <p><small><a href="#Contents">Contents</a></small>
22579 <h5><a name="7.28.4.5.3" href="#7.28.4.5.3">7.28.4.5.3 The wcspbrk function</a></h5>
22580 <p><b>Synopsis</b>
22581 <p><!--para 1 -->
22582 <pre>
22583          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22584          wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);
22585 </pre>
22586 <p><b>Description</b>
22587 <p><!--para 2 -->
22588  The wcspbrk function locates the first occurrence in the wide string pointed to by s1 of
22589  any wide character from the wide string pointed to by s2.
22590 <p><b>Returns</b>
22591 <p><!--para 3 -->
22592  The wcspbrk function returns a pointer to the wide character in s1, or a null pointer if
22593  no wide character from s2 occurs in s1.
22594
22595 <p><small><a href="#Contents">Contents</a></small>
22596 <h5><a name="7.28.4.5.4" href="#7.28.4.5.4">7.28.4.5.4 The wcsrchr function</a></h5>
22597 <p><b>Synopsis</b>
22598 <p><!--para 1 -->
22599 <pre>
22600          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22601          wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
22602 </pre>
22603 <p><b>Description</b>
22604 <p><!--para 2 -->
22605  The wcsrchr function locates the last occurrence of c in the wide string pointed to by
22606  s. The terminating null wide character is considered to be part of the wide string.
22607 <p><b>Returns</b>
22608 <p><!--para 3 -->
22609  The wcsrchr function returns a pointer to the wide character, or a null pointer if c does
22610  not occur in the wide string.
22611
22612 <p><small><a href="#Contents">Contents</a></small>
22613 <h5><a name="7.28.4.5.5" href="#7.28.4.5.5">7.28.4.5.5 The wcsspn function</a></h5>
22614 <p><b>Synopsis</b>
22615 <p><!--para 1 -->
22616 <pre>
22617          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22618          size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
22619 </pre>
22620 <p><b>Description</b>
22621 <p><!--para 2 -->
22622  The wcsspn function computes the length of the maximum initial segment of the wide
22623  string pointed to by s1 which consists entirely of wide characters from the wide string
22624  pointed to by s2.
22625 <p><b>Returns</b>
22626 <p><!--para 3 -->
22627  The wcsspn function returns the length of the segment.
22628 <!--page 452 -->
22629
22630 <p><small><a href="#Contents">Contents</a></small>
22631 <h5><a name="7.28.4.5.6" href="#7.28.4.5.6">7.28.4.5.6 The wcsstr function</a></h5>
22632 <p><b>Synopsis</b>
22633 <p><!--para 1 -->
22634 <pre>
22635         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22636         wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
22637 </pre>
22638 <p><b>Description</b>
22639 <p><!--para 2 -->
22640  The wcsstr function locates the first occurrence in the wide string pointed to by s1 of
22641  the sequence of wide characters (excluding the terminating null wide character) in the
22642  wide string pointed to by s2.
22643 <p><b>Returns</b>
22644 <p><!--para 3 -->
22645  The wcsstr function returns a pointer to the located wide string, or a null pointer if the
22646  wide string is not found. If s2 points to a wide string with zero length, the function
22647  returns s1.
22648
22649 <p><small><a href="#Contents">Contents</a></small>
22650 <h5><a name="7.28.4.5.7" href="#7.28.4.5.7">7.28.4.5.7 The wcstok function</a></h5>
22651 <p><b>Synopsis</b>
22652 <p><!--para 1 -->
22653 <pre>
22654         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22655         wchar_t *wcstok(wchar_t * restrict s1,
22656              const wchar_t * restrict s2,
22657              wchar_t ** restrict ptr);
22658 </pre>
22659 <p><b>Description</b>
22660 <p><!--para 2 -->
22661  A sequence of calls to the wcstok function breaks the wide string pointed to by s1 into
22662  a sequence of tokens, each of which is delimited by a wide character from the wide string
22663  pointed to by s2. The third argument points to a caller-provided wchar_t pointer into
22664  which the wcstok function stores information necessary for it to continue scanning the
22665  same wide string.
22666 <p><!--para 3 -->
22667  The first call in a sequence has a non-null first argument and stores an initial value in the
22668  object pointed to by ptr. Subsequent calls in the sequence have a null first argument and
22669  the object pointed to by ptr is required to have the value stored by the previous call in
22670  the sequence, which is then updated. The separator wide string pointed to by s2 may be
22671  different from call to call.
22672 <p><!--para 4 -->
22673  The first call in the sequence searches the wide string pointed to by s1 for the first wide
22674  character that is not contained in the current separator wide string pointed to by s2. If no
22675  such wide character is found, then there are no tokens in the wide string pointed to by s1
22676  and the wcstok function returns a null pointer. If such a wide character is found, it is
22677  the start of the first token.
22678 <p><!--para 5 -->
22679  The wcstok function then searches from there for a wide character that is contained in
22680  the current separator wide string. If no such wide character is found, the current token
22681 <!--page 453 -->
22682  extends to the end of the wide string pointed to by s1, and subsequent searches in the
22683  same wide string for a token return a null pointer. If such a wide character is found, it is
22684  overwritten by a null wide character, which terminates the current token.
22685 <p><!--para 6 -->
22686  In all cases, the wcstok function stores sufficient information in the pointer pointed to
22687  by ptr so that subsequent calls, with a null pointer for s1 and the unmodified pointer
22688  value for ptr, shall start searching just past the element overwritten by a null wide
22689  character (if any).
22690 <p><b>Returns</b>
22691 <p><!--para 7 -->
22692  The wcstok function returns a pointer to the first wide character of a token, or a null
22693  pointer if there is no token.
22694 <p><!--para 8 -->
22695  EXAMPLE
22696 <pre>
22697          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22698          static wchar_t str1[] = L"?a???b,,,#c";
22699          static wchar_t str2[] = L"\t \t";
22700          wchar_t *t, *ptr1, *ptr2;
22701          t   =   wcstok(str1,   L"?", &amp;ptr1);         //   t   points to the token L"a"
22702          t   =   wcstok(NULL,   L",", &amp;ptr1);         //   t   points to the token L"??b"
22703          t   =   wcstok(str2,   L" \t", &amp;ptr2);       //   t   is a null pointer
22704          t   =   wcstok(NULL,   L"#,", &amp;ptr1);        //   t   points to the token L"c"
22705          t   =   wcstok(NULL,   L"?", &amp;ptr1);         //   t   is a null pointer
22706 </pre>
22707  
22708
22709 <p><small><a href="#Contents">Contents</a></small>
22710 <h5><a name="7.28.4.5.8" href="#7.28.4.5.8">7.28.4.5.8 The wmemchr function</a></h5>
22711 <p><b>Synopsis</b>
22712 <p><!--para 1 -->
22713 <pre>
22714          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22715          wchar_t *wmemchr(const wchar_t *s, wchar_t c,
22716               size_t n);
22717 </pre>
22718 <p><b>Description</b>
22719 <p><!--para 2 -->
22720  The wmemchr function locates the first occurrence of c in the initial n wide characters of
22721  the object pointed to by s.
22722 <p><b>Returns</b>
22723 <p><!--para 3 -->
22724  The wmemchr function returns a pointer to the located wide character, or a null pointer if
22725  the wide character does not occur in the object.
22726 <!--page 454 -->
22727
22728 <p><small><a href="#Contents">Contents</a></small>
22729 <h5><a name="7.28.4.6" href="#7.28.4.6">7.28.4.6 Miscellaneous functions</a></h5>
22730
22731 <p><small><a href="#Contents">Contents</a></small>
22732 <h5><a name="7.28.4.6.1" href="#7.28.4.6.1">7.28.4.6.1 The wcslen function</a></h5>
22733 <p><b>Synopsis</b>
22734 <p><!--para 1 -->
22735 <pre>
22736         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22737         size_t wcslen(const wchar_t *s);
22738 </pre>
22739 <p><b>Description</b>
22740 <p><!--para 2 -->
22741  The wcslen function computes the length of the wide string pointed to by s.
22742 <p><b>Returns</b>
22743 <p><!--para 3 -->
22744  The wcslen function returns the number of wide characters that precede the terminating
22745  null wide character.
22746
22747 <p><small><a href="#Contents">Contents</a></small>
22748 <h5><a name="7.28.4.6.2" href="#7.28.4.6.2">7.28.4.6.2 The wmemset function</a></h5>
22749 <p><b>Synopsis</b>
22750 <p><!--para 1 -->
22751 <pre>
22752         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22753         wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);
22754 </pre>
22755 <p><b>Description</b>
22756 <p><!--para 2 -->
22757  The wmemset function copies the value of c into each of the first n wide characters of
22758  the object pointed to by s.
22759 <p><b>Returns</b>
22760 <p><!--para 3 -->
22761  The wmemset function returns the value of s.
22762
22763 <p><small><a href="#Contents">Contents</a></small>
22764 <h4><a name="7.28.5" href="#7.28.5">7.28.5 Wide character time conversion functions</a></h4>
22765
22766 <p><small><a href="#Contents">Contents</a></small>
22767 <h5><a name="7.28.5.1" href="#7.28.5.1">7.28.5.1 The wcsftime function</a></h5>
22768 <p><b>Synopsis</b>
22769 <p><!--para 1 -->
22770 <pre>
22771         #include <a href="#7.26">&lt;time.h&gt;</a>
22772         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22773         size_t wcsftime(wchar_t * restrict s,
22774              size_t maxsize,
22775              const wchar_t * restrict format,
22776              const struct tm * restrict timeptr);
22777 </pre>
22778 <p><b>Description</b>
22779 <p><!--para 2 -->
22780  The wcsftime function is equivalent to the strftime function, except that:
22781 <ul>
22782 <li>  The argument s points to the initial element of an array of wide characters into which
22783  the generated output is to be placed.
22784 <!--page 455 -->
22785 <li>  The argument maxsize indicates the limiting number of wide characters.
22786 <li>  The argument format is a wide string and the conversion specifiers are replaced by
22787  corresponding sequences of wide characters.
22788 <li>  The return value indicates the number of wide characters.
22789 </ul>
22790 <p><b>Returns</b>
22791 <p><!--para 3 -->
22792  If the total number of resulting wide characters including the terminating null wide
22793  character is not more than maxsize, the wcsftime function returns the number of
22794  wide characters placed into the array pointed to by s not including the terminating null
22795  wide character. Otherwise, zero is returned and the contents of the array are
22796  indeterminate.
22797
22798 <p><small><a href="#Contents">Contents</a></small>
22799 <h4><a name="7.28.6" href="#7.28.6">7.28.6 Extended multibyte/wide character conversion utilities</a></h4>
22800 <p><!--para 1 -->
22801  The header <a href="#7.28">&lt;wchar.h&gt;</a> declares an extended set of functions useful for conversion
22802  between multibyte characters and wide characters.
22803 <p><!--para 2 -->
22804  Most of the following functions -- those that are listed as ''restartable'', <a href="#7.28.6.3">7.28.6.3</a> and
22805  <a href="#7.28.6.4">7.28.6.4</a> -- take as a last argument a pointer to an object of type mbstate_t that is used
22806  to describe the current conversion state from a particular multibyte character sequence to
22807  a wide character sequence (or the reverse) under the rules of a particular setting for the
22808  LC_CTYPE category of the current locale.
22809 <p><!--para 3 -->
22810  The initial conversion state corresponds, for a conversion in either direction, to the
22811  beginning of a new multibyte character in the initial shift state. A zero-valued
22812  mbstate_t object is (at least) one way to describe an initial conversion state. A zero-
22813  valued mbstate_t object can be used to initiate conversion involving any multibyte
22814  character sequence, in any LC_CTYPE category setting. If an mbstate_t object has
22815  been altered by any of the functions described in this subclause, and is then used with a
22816  different multibyte character sequence, or in the other conversion direction, or with a
22817  different LC_CTYPE category setting than on earlier function calls, the behavior is
22818  undefined.<sup><a href="#note335"><b>335)</b></a></sup>
22819 <p><!--para 4 -->
22820  On entry, each function takes the described conversion state (either internal or pointed to
22821  by an argument) as current. The conversion state described by the referenced object is
22822  altered as needed to track the shift state, and the position within a multibyte character, for
22823  the associated multibyte character sequence.
22824  
22825  
22826  
22827  
22828 <!--page 456 -->
22829
22830 <p><b>Footnotes</b>
22831 <p><small><a name="note335" href="#note335">335)</a> Thus, a particular mbstate_t object can be used, for example, with both the mbrtowc and
22832  mbsrtowcs functions as long as they are used to step sequentially through the same multibyte
22833  character string.
22834 </small>
22835
22836 <p><small><a href="#Contents">Contents</a></small>
22837 <h5><a name="7.28.6.1" href="#7.28.6.1">7.28.6.1 Single-byte/wide character conversion functions</a></h5>
22838
22839 <p><small><a href="#Contents">Contents</a></small>
22840 <h5><a name="7.28.6.1.1" href="#7.28.6.1.1">7.28.6.1.1 The btowc function</a></h5>
22841 <p><b>Synopsis</b>
22842 <p><!--para 1 -->
22843 <pre>
22844         #include <a href="#7.28">&lt;wchar.h&gt;</a>                                                                        *
22845         wint_t btowc(int c);
22846 </pre>
22847 <p><b>Description</b>
22848 <p><!--para 2 -->
22849  The btowc function determines whether c constitutes a valid single-byte character in the
22850  initial shift state.
22851 <p><b>Returns</b>
22852 <p><!--para 3 -->
22853  The btowc function returns WEOF if c has the value EOF or if (unsigned char)c
22854  does not constitute a valid single-byte character in the initial shift state. Otherwise, it
22855  returns the wide character representation of that character.
22856
22857 <p><small><a href="#Contents">Contents</a></small>
22858 <h5><a name="7.28.6.1.2" href="#7.28.6.1.2">7.28.6.1.2 The wctob function</a></h5>
22859 <p><b>Synopsis</b>
22860 <p><!--para 1 -->
22861 <pre>
22862         #include <a href="#7.28">&lt;wchar.h&gt;</a>                                                                        *
22863         int wctob(wint_t c);
22864 </pre>
22865 <p><b>Description</b>
22866 <p><!--para 2 -->
22867  The wctob function determines whether c corresponds to a member of the extended
22868  character set whose multibyte character representation is a single byte when in the initial
22869  shift state.
22870 <p><b>Returns</b>
22871 <p><!--para 3 -->
22872  The wctob function returns EOF if c does not correspond to a multibyte character with
22873  length one in the initial shift state. Otherwise, it returns the single-byte representation of
22874  that character as an unsigned char converted to an int.
22875
22876 <p><small><a href="#Contents">Contents</a></small>
22877 <h5><a name="7.28.6.2" href="#7.28.6.2">7.28.6.2 Conversion state functions</a></h5>
22878
22879 <p><small><a href="#Contents">Contents</a></small>
22880 <h5><a name="7.28.6.2.1" href="#7.28.6.2.1">7.28.6.2.1 The mbsinit function</a></h5>
22881 <p><b>Synopsis</b>
22882 <p><!--para 1 -->
22883 <pre>
22884         #include <a href="#7.28">&lt;wchar.h&gt;</a>
22885         int mbsinit(const mbstate_t *ps);
22886 </pre>
22887 <p><b>Description</b>
22888 <p><!--para 2 -->
22889  If ps is not a null pointer, the mbsinit function determines whether the referenced
22890  mbstate_t object describes an initial conversion state.
22891 <!--page 457 -->
22892 <p><b>Returns</b>
22893 <p><!--para 3 -->
22894  The mbsinit function returns nonzero if ps is a null pointer or if the referenced object
22895  describes an initial conversion state; otherwise, it returns zero.
22896
22897 <p><small><a href="#Contents">Contents</a></small>
22898 <h5><a name="7.28.6.3" href="#7.28.6.3">7.28.6.3 Restartable multibyte/wide character conversion functions</a></h5>
22899 <p><!--para 1 -->
22900  These functions differ from the corresponding multibyte character functions of <a href="#7.22.7">7.22.7</a>
22901  (mblen, mbtowc, and wctomb) in that they have an extra parameter, ps, of type
22902  pointer to mbstate_t that points to an object that can completely describe the current
22903  conversion state of the associated multibyte character sequence. If ps is a null pointer,
22904  each function uses its own internal mbstate_t object instead, which is initialized at
22905  program startup to the initial conversion state; the functions are not required to avoid data
22906  races in this case. The implementation behaves as if no library function calls these
22907  functions with a null pointer for ps.
22908 <p><!--para 2 -->
22909  Also unlike their corresponding functions, the return value does not represent whether the
22910  encoding is state-dependent.
22911
22912 <p><small><a href="#Contents">Contents</a></small>
22913 <h5><a name="7.28.6.3.1" href="#7.28.6.3.1">7.28.6.3.1 The mbrlen function</a></h5>
22914 <p><b>Synopsis</b>
22915 <p><!--para 1 -->
22916 <pre>
22917          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22918          size_t mbrlen(const char * restrict s,
22919               size_t n,
22920               mbstate_t * restrict ps);
22921 </pre>
22922 <p><b>Description</b>
22923 <p><!--para 2 -->
22924  The mbrlen function is equivalent to the call:
22925 <pre>
22926          mbrtowc(NULL, s, n, ps != NULL ? ps : &amp;internal)
22927 </pre>
22928  where internal is the mbstate_t object for the mbrlen function, except that the
22929  expression designated by ps is evaluated only once.
22930 <p><b>Returns</b>
22931 <p><!--para 3 -->
22932  The mbrlen function returns a value between zero and n, inclusive, (size_t)(-2),
22933  or (size_t)(-1).
22934 <p><b> Forward references</b>: the mbrtowc function (<a href="#7.28.6.3.2">7.28.6.3.2</a>).
22935 <!--page 458 -->
22936
22937 <p><small><a href="#Contents">Contents</a></small>
22938 <h5><a name="7.28.6.3.2" href="#7.28.6.3.2">7.28.6.3.2 The mbrtowc function</a></h5>
22939 <p><b>Synopsis</b>
22940 <p><!--para 1 -->
22941 <pre>
22942          #include <a href="#7.28">&lt;wchar.h&gt;</a>
22943          size_t mbrtowc(wchar_t * restrict pwc,
22944               const char * restrict s,
22945               size_t n,
22946               mbstate_t * restrict ps);
22947 </pre>
22948 <p><b>Description</b>
22949 <p><!--para 2 -->
22950  If s is a null pointer, the mbrtowc function is equivalent to the call:
22951 <pre>
22952                  mbrtowc(NULL, "", 1, ps)
22953 </pre>
22954  In this case, the values of the parameters pwc and n are ignored.
22955 <p><!--para 3 -->
22956  If s is not a null pointer, the mbrtowc function inspects at most n bytes beginning with
22957  the byte pointed to by s to determine the number of bytes needed to complete the next
22958  multibyte character (including any shift sequences). If the function determines that the
22959  next multibyte character is complete and valid, it determines the value of the
22960  corresponding wide character and then, if pwc is not a null pointer, stores that value in
22961  the object pointed to by pwc. If the corresponding wide character is the null wide
22962  character, the resulting state described is the initial conversion state.
22963 <p><b>Returns</b>
22964 <p><!--para 4 -->
22965  The mbrtowc function returns the first of the following that applies (given the current
22966  conversion state):
22967  0                     if the next n or fewer bytes complete the multibyte character that
22968 <pre>
22969                        corresponds to the null wide character (which is the value stored).
22970 </pre>
22971  between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte
22972 <pre>
22973                     character (which is the value stored); the value returned is the number
22974                     of bytes that complete the multibyte character.
22975 </pre>
22976  (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
22977 <pre>
22978               multibyte character, and all n bytes have been processed (no value is
22979               stored).<sup><a href="#note336"><b>336)</b></a></sup>
22980 </pre>
22981  (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
22982 <pre>
22983               do not contribute to a complete and valid multibyte character (no
22984               value is stored); the value of the macro EILSEQ is stored in errno,
22985               and the conversion state is unspecified.
22986 </pre>
22987  
22988 <!--page 459 -->
22989
22990 <p><b>Footnotes</b>
22991 <p><small><a name="note336" href="#note336">336)</a> When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
22992  sequence of redundant shift sequences (for implementations with state-dependent encodings).
22993 </small>
22994
22995 <p><small><a href="#Contents">Contents</a></small>
22996 <h5><a name="7.28.6.3.3" href="#7.28.6.3.3">7.28.6.3.3 The wcrtomb function</a></h5>
22997 <p><b>Synopsis</b>
22998 <p><!--para 1 -->
22999 <pre>
23000          #include <a href="#7.28">&lt;wchar.h&gt;</a>
23001          size_t wcrtomb(char * restrict s,
23002               wchar_t wc,
23003               mbstate_t * restrict ps);
23004 </pre>
23005 <p><b>Description</b>
23006 <p><!--para 2 -->
23007  If s is a null pointer, the wcrtomb function is equivalent to the call
23008 <pre>
23009                  wcrtomb(buf, L'\0', ps)
23010 </pre>
23011  where buf is an internal buffer.
23012 <p><!--para 3 -->
23013  If s is not a null pointer, the wcrtomb function determines the number of bytes needed
23014  to represent the multibyte character that corresponds to the wide character given by wc
23015  (including any shift sequences), and stores the multibyte character representation in the
23016  array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
23017  wc is a null wide character, a null byte is stored, preceded by any shift sequence needed
23018  to restore the initial shift state; the resulting state described is the initial conversion state.
23019 <p><b>Returns</b>
23020 <p><!--para 4 -->
23021  The wcrtomb function returns the number of bytes stored in the array object (including
23022  any shift sequences). When wc is not a valid wide character, an encoding error occurs:
23023  the function stores the value of the macro EILSEQ in errno and returns
23024  (size_t)(-1); the conversion state is unspecified.
23025
23026 <p><small><a href="#Contents">Contents</a></small>
23027 <h5><a name="7.28.6.4" href="#7.28.6.4">7.28.6.4 Restartable multibyte/wide string conversion functions</a></h5>
23028 <p><!--para 1 -->
23029  These functions differ from the corresponding multibyte string functions of <a href="#7.22.8">7.22.8</a>
23030  (mbstowcs and wcstombs) in that they have an extra parameter, ps, of type pointer to
23031  mbstate_t that points to an object that can completely describe the current conversion
23032  state of the associated multibyte character sequence. If ps is a null pointer, each function
23033  uses its own internal mbstate_t object instead, which is initialized at program startup
23034  to the initial conversion state; the functions are not required to avoid data races in this
23035  case. The implementation behaves as if no library function calls these functions with a
23036  null pointer for ps.
23037 <p><!--para 2 -->
23038  Also unlike their corresponding functions, the conversion source parameter, src, has a
23039  pointer-to-pointer type. When the function is storing the results of conversions (that is,
23040  when dst is not a null pointer), the pointer object pointed to by this parameter is updated
23041  to reflect the amount of the source processed by that invocation.
23042 <!--page 460 -->
23043
23044 <p><small><a href="#Contents">Contents</a></small>
23045 <h5><a name="7.28.6.4.1" href="#7.28.6.4.1">7.28.6.4.1 The mbsrtowcs function</a></h5>
23046 <p><b>Synopsis</b>
23047 <p><!--para 1 -->
23048 <pre>
23049           #include <a href="#7.28">&lt;wchar.h&gt;</a>
23050           size_t mbsrtowcs(wchar_t * restrict dst,
23051                const char ** restrict src,
23052                size_t len,
23053                mbstate_t * restrict ps);
23054 </pre>
23055 <p><b>Description</b>
23056 <p><!--para 2 -->
23057  The mbsrtowcs function converts a sequence of multibyte characters that begins in the
23058  conversion state described by the object pointed to by ps, from the array indirectly
23059  pointed to by src into a sequence of corresponding wide characters. If dst is not a null
23060  pointer, the converted characters are stored into the array pointed to by dst. Conversion
23061  continues up to and including a terminating null character, which is also stored.
23062  Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
23063  not form a valid multibyte character, or (if dst is not a null pointer) when len wide
23064  characters have been stored into the array pointed to by dst.<sup><a href="#note337"><b>337)</b></a></sup> Each conversion takes
23065  place as if by a call to the mbrtowc function.
23066 <p><!--para 3 -->
23067  If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
23068  pointer (if conversion stopped due to reaching a terminating null character) or the address
23069  just past the last multibyte character converted (if any). If conversion stopped due to
23070  reaching a terminating null character and if dst is not a null pointer, the resulting state
23071  described is the initial conversion state.
23072 <p><b>Returns</b>
23073 <p><!--para 4 -->
23074  If the input conversion encounters a sequence of bytes that do not form a valid multibyte
23075  character, an encoding error occurs: the mbsrtowcs function stores the value of the
23076  macro EILSEQ in errno and returns (size_t)(-1); the conversion state is
23077  unspecified. Otherwise, it returns the number of multibyte characters successfully
23078  converted, not including the terminating null character (if any).
23079  
23080  
23081  
23082  
23083 <!--page 461 -->
23084
23085 <p><b>Footnotes</b>
23086 <p><small><a name="note337" href="#note337">337)</a> Thus, the value of len is ignored if dst is a null pointer.
23087 </small>
23088
23089 <p><small><a href="#Contents">Contents</a></small>
23090 <h5><a name="7.28.6.4.2" href="#7.28.6.4.2">7.28.6.4.2 The wcsrtombs function</a></h5>
23091 <p><b>Synopsis</b>
23092 <p><!--para 1 -->
23093 <pre>
23094          #include <a href="#7.28">&lt;wchar.h&gt;</a>
23095          size_t wcsrtombs(char * restrict dst,
23096               const wchar_t ** restrict src,
23097               size_t len,
23098               mbstate_t * restrict ps);
23099 </pre>
23100 <p><b>Description</b>
23101 <p><!--para 2 -->
23102  The wcsrtombs function converts a sequence of wide characters from the array
23103  indirectly pointed to by src into a sequence of corresponding multibyte characters that
23104  begins in the conversion state described by the object pointed to by ps. If dst is not a
23105  null pointer, the converted characters are then stored into the array pointed to by dst.
23106  Conversion continues up to and including a terminating null wide character, which is also
23107  stored. Conversion stops earlier in two cases: when a wide character is reached that does
23108  not correspond to a valid multibyte character, or (if dst is not a null pointer) when the
23109  next multibyte character would exceed the limit of len total bytes to be stored into the
23110  array pointed to by dst. Each conversion takes place as if by a call to the wcrtomb
23111  function.<sup><a href="#note338"><b>338)</b></a></sup>
23112 <p><!--para 3 -->
23113  If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
23114  pointer (if conversion stopped due to reaching a terminating null wide character) or the
23115  address just past the last wide character converted (if any). If conversion stopped due to
23116  reaching a terminating null wide character, the resulting state described is the initial
23117  conversion state.
23118 <p><b>Returns</b>
23119 <p><!--para 4 -->
23120  If conversion stops because a wide character is reached that does not correspond to a
23121  valid multibyte character, an encoding error occurs: the wcsrtombs function stores the
23122  value of the macro EILSEQ in errno and returns (size_t)(-1); the conversion
23123  state is unspecified. Otherwise, it returns the number of bytes in the resulting multibyte
23124  character sequence, not including the terminating null character (if any).
23125  
23126  
23127  
23128  
23129 <!--page 462 -->
23130
23131 <p><b>Footnotes</b>
23132 <p><small><a name="note338" href="#note338">338)</a> If conversion stops because a terminating null wide character has been reached, the bytes stored
23133  include those necessary to reach the initial shift state immediately before the null byte.
23134 </small>
23135
23136 <p><small><a href="#Contents">Contents</a></small>
23137 <h3><a name="7.29" href="#7.29">7.29 Wide character classification and mapping utilities &lt;wctype.h&gt;</a></h3>
23138
23139 <p><small><a href="#Contents">Contents</a></small>
23140 <h4><a name="7.29.1" href="#7.29.1">7.29.1 Introduction</a></h4>
23141 <p><!--para 1 -->
23142  The header <a href="#7.29">&lt;wctype.h&gt;</a> defines one macro, and declares three data types and many
23143  functions.<sup><a href="#note339"><b>339)</b></a></sup>
23144 <p><!--para 2 -->
23145  The types declared are
23146 <pre>
23147           wint_t
23148 </pre>
23149  described in <a href="#7.28.1">7.28.1</a>;
23150 <pre>
23151           wctrans_t
23152 </pre>
23153  which is a scalar type that can hold values which represent locale-specific character
23154  mappings; and
23155 <pre>
23156           wctype_t
23157 </pre>
23158  which is a scalar type that can hold values which represent locale-specific character
23159  classifications.
23160 <p><!--para 3 -->
23161  The macro defined is WEOF (described in <a href="#7.28.1">7.28.1</a>).
23162 <p><!--para 4 -->
23163  The functions declared are grouped as follows:
23164 <ul>
23165 <li>  Functions that provide wide character classification;
23166 <li>  Extensible functions that provide wide character classification;
23167 <li>  Functions that provide wide character case mapping;
23168 <li>  Extensible functions that provide wide character mapping.
23169 </ul>
23170 <p><!--para 5 -->
23171  For all functions described in this subclause that accept an argument of type wint_t, the
23172  value shall be representable as a wchar_t or shall equal the value of the macro WEOF. If
23173  this argument has any other value, the behavior is undefined.
23174 <p><!--para 6 -->
23175  The behavior of these functions is affected by the LC_CTYPE category of the current
23176  locale.
23177  
23178  
23179  
23180  
23181 <!--page 463 -->
23182
23183 <p><b>Footnotes</b>
23184 <p><small><a name="note339" href="#note339">339)</a> See ''future library directions'' (<a href="#7.30.13">7.30.13</a>).
23185 </small>
23186
23187 <p><small><a href="#Contents">Contents</a></small>
23188 <h4><a name="7.29.2" href="#7.29.2">7.29.2 Wide character classification utilities</a></h4>
23189 <p><!--para 1 -->
23190  The header <a href="#7.29">&lt;wctype.h&gt;</a> declares several functions useful for classifying wide
23191  characters.
23192 <p><!--para 2 -->
23193  The term printing wide character refers to a member of a locale-specific set of wide
23194  characters, each of which occupies at least one printing position on a display device. The
23195  term control wide character refers to a member of a locale-specific set of wide characters
23196  that are not printing wide characters.
23197
23198 <p><small><a href="#Contents">Contents</a></small>
23199 <h5><a name="7.29.2.1" href="#7.29.2.1">7.29.2.1 Wide character classification functions</a></h5>
23200 <p><!--para 1 -->
23201  The functions in this subclause return nonzero (true) if and only if the value of the
23202  argument wc conforms to that in the description of the function.
23203 <p><!--para 2 -->
23204  Each of the following functions returns true for each wide character that corresponds (as
23205  if by a call to the wctob function) to a single-byte character for which the corresponding
23206  character classification function from <a href="#7.4.1">7.4.1</a> returns true, except that the iswgraph and
23207  iswpunct functions may differ with respect to wide characters other than L' ' that are
23208  both printing and white-space wide characters.<sup><a href="#note340"><b>340)</b></a></sup>
23209 <p><b> Forward references</b>: the wctob function (<a href="#7.28.6.1.2">7.28.6.1.2</a>).
23210
23211 <p><b>Footnotes</b>
23212 <p><small><a name="note340" href="#note340">340)</a> For example, if the expression isalpha(wctob(wc)) evaluates to true, then the call
23213  iswalpha(wc) also returns true. But, if the expression isgraph(wctob(wc)) evaluates to true
23214  (which cannot occur for wc == L' ' of course), then either iswgraph(wc) or iswprint(wc)
23215  &amp;&amp; iswspace(wc) is true, but not both.
23216 </small>
23217
23218 <p><small><a href="#Contents">Contents</a></small>
23219 <h5><a name="7.29.2.1.1" href="#7.29.2.1.1">7.29.2.1.1 The iswalnum function</a></h5>
23220 <p><b>Synopsis</b>
23221 <p><!--para 1 -->
23222 <pre>
23223          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23224          int iswalnum(wint_t wc);
23225 </pre>
23226 <p><b>Description</b>
23227 <p><!--para 2 -->
23228  The iswalnum function tests for any wide character for which iswalpha or
23229  iswdigit is true.
23230
23231 <p><small><a href="#Contents">Contents</a></small>
23232 <h5><a name="7.29.2.1.2" href="#7.29.2.1.2">7.29.2.1.2 The iswalpha function</a></h5>
23233 <p><b>Synopsis</b>
23234 <p><!--para 1 -->
23235 <pre>
23236          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23237          int iswalpha(wint_t wc);
23238 </pre>
23239 <p><b>Description</b>
23240 <p><!--para 2 -->
23241  The iswalpha function tests for any wide character for which iswupper or
23242  iswlower is true, or any wide character that is one of a locale-specific set of alphabetic
23243  
23244 <!--page 464 -->
23245  wide characters for which none of iswcntrl, iswdigit, iswpunct, or iswspace
23246  is true.<sup><a href="#note341"><b>341)</b></a></sup>
23247
23248 <p><b>Footnotes</b>
23249 <p><small><a name="note341" href="#note341">341)</a> The functions iswlower and iswupper test true or false separately for each of these additional
23250  wide characters; all four combinations are possible.
23251 </small>
23252
23253 <p><small><a href="#Contents">Contents</a></small>
23254 <h5><a name="7.29.2.1.3" href="#7.29.2.1.3">7.29.2.1.3 The iswblank function</a></h5>
23255 <p><b>Synopsis</b>
23256 <p><!--para 1 -->
23257 <pre>
23258          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23259          int iswblank(wint_t wc);
23260 </pre>
23261 <p><b>Description</b>
23262 <p><!--para 2 -->
23263  The iswblank function tests for any wide character that is a standard blank wide
23264  character or is one of a locale-specific set of wide characters for which iswspace is true
23265  and that is used to separate words within a line of text. The standard blank wide
23266  characters are the following: space (L' '), and horizontal tab (L'\t'). In the "C"
23267  locale, iswblank returns true only for the standard blank characters.
23268
23269 <p><small><a href="#Contents">Contents</a></small>
23270 <h5><a name="7.29.2.1.4" href="#7.29.2.1.4">7.29.2.1.4 The iswcntrl function</a></h5>
23271 <p><b>Synopsis</b>
23272 <p><!--para 1 -->
23273 <pre>
23274          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23275          int iswcntrl(wint_t wc);
23276 </pre>
23277 <p><b>Description</b>
23278 <p><!--para 2 -->
23279  The iswcntrl function tests for any control wide character.
23280
23281 <p><small><a href="#Contents">Contents</a></small>
23282 <h5><a name="7.29.2.1.5" href="#7.29.2.1.5">7.29.2.1.5 The iswdigit function</a></h5>
23283 <p><b>Synopsis</b>
23284 <p><!--para 1 -->
23285 <pre>
23286          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23287          int iswdigit(wint_t wc);
23288 </pre>
23289 <p><b>Description</b>
23290 <p><!--para 2 -->
23291  The iswdigit function tests for any wide character that corresponds to a decimal-digit
23292  character (as defined in <a href="#5.2.1">5.2.1</a>).
23293
23294 <p><small><a href="#Contents">Contents</a></small>
23295 <h5><a name="7.29.2.1.6" href="#7.29.2.1.6">7.29.2.1.6 The iswgraph function</a></h5>
23296 <p><b>Synopsis</b>
23297 <p><!--para 1 -->
23298 <pre>
23299          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23300          int iswgraph(wint_t wc);
23301 </pre>
23302  
23303  
23304  
23305  
23306 <!--page 465 -->
23307 <p><b>Description</b>
23308 <p><!--para 2 -->
23309  The iswgraph function tests for any wide character for which iswprint is true and
23310  iswspace is false.<sup><a href="#note342"><b>342)</b></a></sup>
23311
23312 <p><b>Footnotes</b>
23313 <p><small><a name="note342" href="#note342">342)</a> Note that the behavior of the iswgraph and iswpunct functions may differ from their
23314  corresponding functions in <a href="#7.4.1">7.4.1</a> with respect to printing, white-space, single-byte execution
23315  characters other than ' '.
23316 </small>
23317
23318 <p><small><a href="#Contents">Contents</a></small>
23319 <h5><a name="7.29.2.1.7" href="#7.29.2.1.7">7.29.2.1.7 The iswlower function</a></h5>
23320 <p><b>Synopsis</b>
23321 <p><!--para 1 -->
23322 <pre>
23323          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23324          int iswlower(wint_t wc);
23325 </pre>
23326 <p><b>Description</b>
23327 <p><!--para 2 -->
23328  The iswlower function tests for any wide character that corresponds to a lowercase
23329  letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
23330  iswdigit, iswpunct, or iswspace is true.
23331
23332 <p><small><a href="#Contents">Contents</a></small>
23333 <h5><a name="7.29.2.1.8" href="#7.29.2.1.8">7.29.2.1.8 The iswprint function</a></h5>
23334 <p><b>Synopsis</b>
23335 <p><!--para 1 -->
23336 <pre>
23337          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23338          int iswprint(wint_t wc);
23339 </pre>
23340 <p><b>Description</b>
23341 <p><!--para 2 -->
23342  The iswprint function tests for any printing wide character.
23343
23344 <p><small><a href="#Contents">Contents</a></small>
23345 <h5><a name="7.29.2.1.9" href="#7.29.2.1.9">7.29.2.1.9 The iswpunct function</a></h5>
23346 <p><b>Synopsis</b>
23347 <p><!--para 1 -->
23348 <pre>
23349          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23350          int iswpunct(wint_t wc);
23351 </pre>
23352 <p><b>Description</b>
23353 <p><!--para 2 -->
23354  The iswpunct function tests for any printing wide character that is one of a locale-
23355  specific set of punctuation wide characters for which neither iswspace nor iswalnum
23356  is true.<sup><a href="#note342"><b>342)</b></a></sup>
23357
23358 <p><small><a href="#Contents">Contents</a></small>
23359 <h5><a name="7.29.2.1.10" href="#7.29.2.1.10">7.29.2.1.10 The iswspace function</a></h5>
23360 <p><b>Synopsis</b>
23361 <p><!--para 1 -->
23362 <pre>
23363          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23364          int iswspace(wint_t wc);
23365 </pre>
23366  
23367  
23368  
23369 <!--page 466 -->
23370 <p><b>Description</b>
23371 <p><!--para 2 -->
23372  The iswspace function tests for any wide character that corresponds to a locale-specific
23373  set of white-space wide characters for which none of iswalnum, iswgraph, or
23374  iswpunct is true.
23375
23376 <p><small><a href="#Contents">Contents</a></small>
23377 <h5><a name="7.29.2.1.11" href="#7.29.2.1.11">7.29.2.1.11 The iswupper function</a></h5>
23378 <p><b>Synopsis</b>
23379 <p><!--para 1 -->
23380 <pre>
23381         #include <a href="#7.29">&lt;wctype.h&gt;</a>
23382         int iswupper(wint_t wc);
23383 </pre>
23384 <p><b>Description</b>
23385 <p><!--para 2 -->
23386  The iswupper function tests for any wide character that corresponds to an uppercase
23387  letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
23388  iswdigit, iswpunct, or iswspace is true.
23389
23390 <p><small><a href="#Contents">Contents</a></small>
23391 <h5><a name="7.29.2.1.12" href="#7.29.2.1.12">7.29.2.1.12 The iswxdigit function</a></h5>
23392 <p><b>Synopsis</b>
23393 <p><!--para 1 -->
23394 <pre>
23395         #include <a href="#7.29">&lt;wctype.h&gt;</a>
23396         int iswxdigit(wint_t wc);
23397 </pre>
23398 <p><b>Description</b>
23399 <p><!--para 2 -->
23400  The iswxdigit function tests for any wide character that corresponds to a
23401  hexadecimal-digit character (as defined in <a href="#6.4.4.1">6.4.4.1</a>).
23402
23403 <p><small><a href="#Contents">Contents</a></small>
23404 <h5><a name="7.29.2.2" href="#7.29.2.2">7.29.2.2 Extensible wide character classification functions</a></h5>
23405 <p><!--para 1 -->
23406  The functions wctype and iswctype provide extensible wide character classification
23407  as well as testing equivalent to that performed by the functions described in the previous
23408  subclause (<a href="#7.29.2.1">7.29.2.1</a>).
23409
23410 <p><small><a href="#Contents">Contents</a></small>
23411 <h5><a name="7.29.2.2.1" href="#7.29.2.2.1">7.29.2.2.1 The iswctype function</a></h5>
23412 <p><b>Synopsis</b>
23413 <p><!--para 1 -->
23414 <pre>
23415         #include <a href="#7.29">&lt;wctype.h&gt;</a>
23416         int iswctype(wint_t wc, wctype_t desc);
23417 </pre>
23418 <p><b>Description</b>
23419 <p><!--para 2 -->
23420  The iswctype function determines whether the wide character wc has the property
23421  described by desc. The current setting of the LC_CTYPE category shall be the same as
23422  during the call to wctype that returned the value desc.
23423 <p><!--para 3 -->
23424  Each of the following expressions has a truth-value equivalent to the call to the wide
23425  character classification function (<a href="#7.29.2.1">7.29.2.1</a>) in the comment that follows the expression:
23426 <!--page 467 -->
23427 <pre>
23428          iswctype(wc,      wctype("alnum"))              //   iswalnum(wc)
23429          iswctype(wc,      wctype("alpha"))              //   iswalpha(wc)
23430          iswctype(wc,      wctype("blank"))              //   iswblank(wc)
23431          iswctype(wc,      wctype("cntrl"))              //   iswcntrl(wc)
23432          iswctype(wc,      wctype("digit"))              //   iswdigit(wc)
23433          iswctype(wc,      wctype("graph"))              //   iswgraph(wc)
23434          iswctype(wc,      wctype("lower"))              //   iswlower(wc)
23435          iswctype(wc,      wctype("print"))              //   iswprint(wc)
23436          iswctype(wc,      wctype("punct"))              //   iswpunct(wc)
23437          iswctype(wc,      wctype("space"))              //   iswspace(wc)
23438          iswctype(wc,      wctype("upper"))              //   iswupper(wc)
23439          iswctype(wc,      wctype("xdigit"))             //   iswxdigit(wc)
23440 </pre>
23441 <p><b>Returns</b>
23442 <p><!--para 4 -->
23443  The iswctype function returns nonzero (true) if and only if the value of the wide
23444  character wc has the property described by desc. If desc is zero, the iswctype
23445  function returns zero (false).
23446 <p><b> Forward references</b>: the wctype function (<a href="#7.29.2.2.2">7.29.2.2.2</a>).
23447
23448 <p><small><a href="#Contents">Contents</a></small>
23449 <h5><a name="7.29.2.2.2" href="#7.29.2.2.2">7.29.2.2.2 The wctype function</a></h5>
23450 <p><b>Synopsis</b>
23451 <p><!--para 1 -->
23452 <pre>
23453          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23454          wctype_t wctype(const char *property);
23455 </pre>
23456 <p><b>Description</b>
23457 <p><!--para 2 -->
23458  The wctype function constructs a value with type wctype_t that describes a class of
23459  wide characters identified by the string argument property.
23460 <p><!--para 3 -->
23461  The strings listed in the description of the iswctype function shall be valid in all
23462  locales as property arguments to the wctype function.
23463 <p><b>Returns</b>
23464 <p><!--para 4 -->
23465  If property identifies a valid class of wide characters according to the LC_CTYPE
23466  category of the current locale, the wctype function returns a nonzero value that is valid
23467  as the second argument to the iswctype function; otherwise, it returns zero.
23468 <!--page 468 -->
23469
23470 <p><small><a href="#Contents">Contents</a></small>
23471 <h4><a name="7.29.3" href="#7.29.3">7.29.3 Wide character case mapping utilities</a></h4>
23472 <p><!--para 1 -->
23473  The header <a href="#7.29">&lt;wctype.h&gt;</a> declares several functions useful for mapping wide characters.
23474
23475 <p><small><a href="#Contents">Contents</a></small>
23476 <h5><a name="7.29.3.1" href="#7.29.3.1">7.29.3.1 Wide character case mapping functions</a></h5>
23477
23478 <p><small><a href="#Contents">Contents</a></small>
23479 <h5><a name="7.29.3.1.1" href="#7.29.3.1.1">7.29.3.1.1 The towlower function</a></h5>
23480 <p><b>Synopsis</b>
23481 <p><!--para 1 -->
23482 <pre>
23483         #include <a href="#7.29">&lt;wctype.h&gt;</a>
23484         wint_t towlower(wint_t wc);
23485 </pre>
23486 <p><b>Description</b>
23487 <p><!--para 2 -->
23488  The towlower function converts an uppercase letter to a corresponding lowercase letter.
23489 <p><b>Returns</b>
23490 <p><!--para 3 -->
23491  If the argument is a wide character for which iswupper is true and there are one or
23492  more corresponding wide characters, as specified by the current locale, for which
23493  iswlower is true, the towlower function returns one of the corresponding wide
23494  characters (always the same one for any given locale); otherwise, the argument is
23495  returned unchanged.
23496
23497 <p><small><a href="#Contents">Contents</a></small>
23498 <h5><a name="7.29.3.1.2" href="#7.29.3.1.2">7.29.3.1.2 The towupper function</a></h5>
23499 <p><b>Synopsis</b>
23500 <p><!--para 1 -->
23501 <pre>
23502         #include <a href="#7.29">&lt;wctype.h&gt;</a>
23503         wint_t towupper(wint_t wc);
23504 </pre>
23505 <p><b>Description</b>
23506 <p><!--para 2 -->
23507  The towupper function converts a lowercase letter to a corresponding uppercase letter.
23508 <p><b>Returns</b>
23509 <p><!--para 3 -->
23510  If the argument is a wide character for which iswlower is true and there are one or
23511  more corresponding wide characters, as specified by the current locale, for which
23512  iswupper is true, the towupper function returns one of the corresponding wide
23513  characters (always the same one for any given locale); otherwise, the argument is
23514  returned unchanged.
23515
23516 <p><small><a href="#Contents">Contents</a></small>
23517 <h5><a name="7.29.3.2" href="#7.29.3.2">7.29.3.2 Extensible wide character case mapping functions</a></h5>
23518 <p><!--para 1 -->
23519  The functions wctrans and towctrans provide extensible wide character mapping as
23520  well as case mapping equivalent to that performed by the functions described in the
23521  previous subclause (<a href="#7.29.3.1">7.29.3.1</a>).
23522 <!--page 469 -->
23523
23524 <p><small><a href="#Contents">Contents</a></small>
23525 <h5><a name="7.29.3.2.1" href="#7.29.3.2.1">7.29.3.2.1 The towctrans function</a></h5>
23526 <p><b>Synopsis</b>
23527 <p><!--para 1 -->
23528 <pre>
23529          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23530          wint_t towctrans(wint_t wc, wctrans_t desc);
23531 </pre>
23532 <p><b>Description</b>
23533 <p><!--para 2 -->
23534  The towctrans function maps the wide character wc using the mapping described by
23535  desc. The current setting of the LC_CTYPE category shall be the same as during the call
23536  to wctrans that returned the value desc.
23537 <p><!--para 3 -->
23538  Each of the following expressions behaves the same as the call to the wide character case
23539  mapping function (<a href="#7.29.3.1">7.29.3.1</a>) in the comment that follows the expression:
23540 <pre>
23541          towctrans(wc, wctrans("tolower"))                     // towlower(wc)
23542          towctrans(wc, wctrans("toupper"))                     // towupper(wc)
23543 </pre>
23544 <p><b>Returns</b>
23545 <p><!--para 4 -->
23546  The towctrans function returns the mapped value of wc using the mapping described
23547  by desc. If desc is zero, the towctrans function returns the value of wc.
23548
23549 <p><small><a href="#Contents">Contents</a></small>
23550 <h5><a name="7.29.3.2.2" href="#7.29.3.2.2">7.29.3.2.2 The wctrans function</a></h5>
23551 <p><b>Synopsis</b>
23552 <p><!--para 1 -->
23553 <pre>
23554          #include <a href="#7.29">&lt;wctype.h&gt;</a>
23555          wctrans_t wctrans(const char *property);
23556 </pre>
23557 <p><b>Description</b>
23558 <p><!--para 2 -->
23559  The wctrans function constructs a value with type wctrans_t that describes a
23560  mapping between wide characters identified by the string argument property.
23561 <p><!--para 3 -->
23562  The strings listed in the description of the towctrans function shall be valid in all
23563  locales as property arguments to the wctrans function.
23564 <p><b>Returns</b>
23565 <p><!--para 4 -->
23566  If property identifies a valid mapping of wide characters according to the LC_CTYPE
23567  category of the current locale, the wctrans function returns a nonzero value that is valid
23568  as the second argument to the towctrans function; otherwise, it returns zero.
23569 <!--page 470 -->
23570
23571 <p><small><a href="#Contents">Contents</a></small>
23572 <h3><a name="7.30" href="#7.30">7.30 Future library directions</a></h3>
23573 <p><!--para 1 -->
23574  The following names are grouped under individual headers for convenience. All external
23575  names described below are reserved no matter what headers are included by the program.
23576
23577 <p><small><a href="#Contents">Contents</a></small>
23578 <h4><a name="7.30.1" href="#7.30.1">7.30.1 Complex arithmetic &lt;complex.h&gt;</a></h4>
23579 <p><!--para 1 -->
23580  The function names
23581 <pre>
23582        cerf               cexpm1              clog2
23583        cerfc              clog10              clgamma
23584        cexp2              clog1p              ctgamma
23585 </pre>
23586  and the same names suffixed with f or l may be added to the declarations in the
23587  <a href="#7.3">&lt;complex.h&gt;</a> header.
23588
23589 <p><small><a href="#Contents">Contents</a></small>
23590 <h4><a name="7.30.2" href="#7.30.2">7.30.2 Character handling &lt;ctype.h&gt;</a></h4>
23591 <p><!--para 1 -->
23592  Function names that begin with either is or to, and a lowercase letter may be added to
23593  the declarations in the <a href="#7.4">&lt;ctype.h&gt;</a> header.
23594
23595 <p><small><a href="#Contents">Contents</a></small>
23596 <h4><a name="7.30.3" href="#7.30.3">7.30.3 Errors &lt;errno.h&gt;</a></h4>
23597 <p><!--para 1 -->
23598  Macros that begin with E and a digit or E and an uppercase letter may be added to the
23599  declarations in the <a href="#7.5">&lt;errno.h&gt;</a> header.
23600
23601 <p><small><a href="#Contents">Contents</a></small>
23602 <h4><a name="7.30.4" href="#7.30.4">7.30.4 Format conversion of integer types &lt;inttypes.h&gt;</a></h4>
23603 <p><!--para 1 -->
23604  Macro names beginning with PRI or SCN followed by any lowercase letter or X may be
23605  added to the macros defined in the <a href="#7.8">&lt;inttypes.h&gt;</a> header.
23606
23607 <p><small><a href="#Contents">Contents</a></small>
23608 <h4><a name="7.30.5" href="#7.30.5">7.30.5 Localization &lt;locale.h&gt;</a></h4>
23609 <p><!--para 1 -->
23610  Macros that begin with LC_ and an uppercase letter may be added to the definitions in
23611  the <a href="#7.11">&lt;locale.h&gt;</a> header.
23612
23613 <p><small><a href="#Contents">Contents</a></small>
23614 <h4><a name="7.30.6" href="#7.30.6">7.30.6 Signal handling &lt;signal.h&gt;</a></h4>
23615 <p><!--para 1 -->
23616  Macros that begin with either SIG and an uppercase letter or SIG_ and an uppercase
23617  letter may be added to the definitions in the <a href="#7.14">&lt;signal.h&gt;</a> header.
23618
23619 <p><small><a href="#Contents">Contents</a></small>
23620 <h4><a name="7.30.7" href="#7.30.7">7.30.7 Boolean type and values &lt;stdbool.h&gt;</a></h4>
23621 <p><!--para 1 -->
23622  The ability to undefine and perhaps then redefine the macros bool, true, and false is
23623  an obsolescent feature.
23624
23625 <p><small><a href="#Contents">Contents</a></small>
23626 <h4><a name="7.30.8" href="#7.30.8">7.30.8 Integer types &lt;stdint.h&gt;</a></h4>
23627 <p><!--para 1 -->
23628  Typedef names beginning with int or uint and ending with _t may be added to the
23629  types defined in the <a href="#7.20">&lt;stdint.h&gt;</a> header. Macro names beginning with INT or UINT
23630  and ending with _MAX, _MIN, or _C may be added to the macros defined in the
23631  <a href="#7.20">&lt;stdint.h&gt;</a> header.
23632 <!--page 471 -->
23633
23634 <p><small><a href="#Contents">Contents</a></small>
23635 <h4><a name="7.30.9" href="#7.30.9">7.30.9 Input/output &lt;stdio.h&gt;</a></h4>
23636 <p><!--para 1 -->
23637  Lowercase letters may be added to the conversion specifiers and length modifiers in
23638  fprintf and fscanf. Other characters may be used in extensions.
23639 <p><!--para 2 -->
23640  The use of ungetc on a binary stream where the file position indicator is zero prior to *
23641  the call is an obsolescent feature.
23642
23643 <p><small><a href="#Contents">Contents</a></small>
23644 <h4><a name="7.30.10" href="#7.30.10">7.30.10 General utilities &lt;stdlib.h&gt;</a></h4>
23645 <p><!--para 1 -->
23646  Function names that begin with str and a lowercase letter may be added to the
23647  declarations in the <a href="#7.22">&lt;stdlib.h&gt;</a> header.
23648
23649 <p><small><a href="#Contents">Contents</a></small>
23650 <h4><a name="7.30.11" href="#7.30.11">7.30.11 String handling &lt;string.h&gt;</a></h4>
23651 <p><!--para 1 -->
23652  Function names that begin with str, mem, or wcs and a lowercase letter may be added
23653  to the declarations in the <a href="#7.23">&lt;string.h&gt;</a> header.
23654
23655 <p><small><a href="#Contents">Contents</a></small>
23656 <h4><a name="7.30.12" href="#7.30.12">7.30.12 Extended multibyte and wide character utilities &lt;wchar.h&gt;</a></h4>
23657 <p><!--para 1 -->
23658  Function names that begin with wcs and a lowercase letter may be added to the
23659  declarations in the <a href="#7.28">&lt;wchar.h&gt;</a> header.
23660 <p><!--para 2 -->
23661  Lowercase letters may be added to the conversion specifiers and length modifiers in
23662  fwprintf and fwscanf. Other characters may be used in extensions.
23663
23664 <p><small><a href="#Contents">Contents</a></small>
23665 <h4><a name="7.30.13" href="#7.30.13">7.30.13 Wide character classification and mapping utilities</a></h4>
23666  <a href="#7.29">&lt;wctype.h&gt;</a>
23667 <p><!--para 1 -->
23668  Function names that begin with is or to and a lowercase letter may be added to the
23669  declarations in the <a href="#7.29">&lt;wctype.h&gt;</a> header.
23670 <!--page 472 -->
23671
23672 <p><small><a href="#Contents">Contents</a></small>
23673 <h2><a name="A" href="#A">Annex A</a></h2>
23674 <pre>
23675                                             (informative)
23676                              Language syntax summary
23677 </pre>
23678 <p><!--para 1 -->
23679  NOTE   The notation is described in <a href="#6.1">6.1</a>.
23680  
23681
23682 <p><small><a href="#Contents">Contents</a></small>
23683 <h3><a name="A.1" href="#A.1">A.1 Lexical grammar</a></h3>
23684
23685 <p><small><a href="#Contents">Contents</a></small>
23686 <h4><a name="A.1.1" href="#A.1.1">A.1.1 Lexical elements</a></h4>
23687  (<a href="#6.4">6.4</a>) token:
23688 <pre>
23689                 keyword
23690                 identifier
23691                 constant
23692                 string-literal
23693                 punctuator
23694 </pre>
23695  (<a href="#6.4">6.4</a>) preprocessing-token:
23696 <!--page 473 -->
23697 <pre>
23698                header-name
23699                identifier
23700                pp-number
23701                character-constant
23702                string-literal
23703                punctuator
23704                each non-white-space character that cannot be one of the above
23705 </pre>
23706
23707 <p><small><a href="#Contents">Contents</a></small>
23708 <h4><a name="A.1.2" href="#A.1.2">A.1.2 Keywords</a></h4>
23709  (<a href="#6.4.1">6.4.1</a>) keyword: one of
23710 <pre>
23711                alignof                     goto                  union
23712                auto                        if                    unsigned
23713                break                       inline                void
23714                case                        int                   volatile
23715                char                        long                  while
23716                const                       register              _Alignas
23717                continue                    restrict              _Atomic
23718                default                     return                _Bool
23719                do                          short                 _Complex
23720                double                      signed                _Generic
23721                else                        sizeof                _Imaginary
23722                enum                        static                _Noreturn
23723                extern                      struct                _Static_assert
23724                float                       switch                _Thread_local
23725                for                         typedef
23726 </pre>
23727
23728 <p><small><a href="#Contents">Contents</a></small>
23729 <h4><a name="A.1.3" href="#A.1.3">A.1.3 Identifiers</a></h4>
23730  (<a href="#6.4.2.1">6.4.2.1</a>) identifier:
23731 <pre>
23732                 identifier-nondigit
23733                 identifier identifier-nondigit
23734                 identifier digit
23735 </pre>
23736  (<a href="#6.4.2.1">6.4.2.1</a>) identifier-nondigit:
23737 <pre>
23738                 nondigit
23739                 universal-character-name
23740                 other implementation-defined characters
23741 </pre>
23742  (<a href="#6.4.2.1">6.4.2.1</a>) nondigit: one of
23743 <pre>
23744                _ a b          c    d   e    f   g   h    i   j   k   l   m
23745                     n o       p    q   r    s   t   u    v   w   x   y   z
23746                     A B       C    D   E    F   G   H    I   J   K   L   M
23747                     N O       P    Q   R    S   T   U    V   W   X   Y   Z
23748 </pre>
23749  (<a href="#6.4.2.1">6.4.2.1</a>) digit: one of
23750 <!--page 474 -->
23751 <pre>
23752                 0 1 2         3    4   5    6   7   8    9
23753 </pre>
23754
23755 <p><small><a href="#Contents">Contents</a></small>
23756 <h4><a name="A.1.4" href="#A.1.4">A.1.4 Universal character names</a></h4>
23757  (<a href="#6.4.3">6.4.3</a>) universal-character-name:
23758 <pre>
23759                \u hex-quad
23760                \U hex-quad hex-quad
23761 </pre>
23762  (<a href="#6.4.3">6.4.3</a>) hex-quad:
23763 <pre>
23764                hexadecimal-digit hexadecimal-digit
23765                             hexadecimal-digit hexadecimal-digit
23766 </pre>
23767
23768 <p><small><a href="#Contents">Contents</a></small>
23769 <h4><a name="A.1.5" href="#A.1.5">A.1.5 Constants</a></h4>
23770  (<a href="#6.4.4">6.4.4</a>) constant:
23771 <pre>
23772                integer-constant
23773                floating-constant
23774                enumeration-constant
23775                character-constant
23776 </pre>
23777  (<a href="#6.4.4.1">6.4.4.1</a>) integer-constant:
23778 <pre>
23779                 decimal-constant integer-suffix<sub>opt</sub>
23780                 octal-constant integer-suffix<sub>opt</sub>
23781                 hexadecimal-constant integer-suffix<sub>opt</sub>
23782 </pre>
23783  (<a href="#6.4.4.1">6.4.4.1</a>) decimal-constant:
23784 <pre>
23785                nonzero-digit
23786                decimal-constant digit
23787 </pre>
23788  (<a href="#6.4.4.1">6.4.4.1</a>) octal-constant:
23789 <pre>
23790                 0
23791                 octal-constant octal-digit
23792 </pre>
23793  (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-constant:
23794 <pre>
23795                hexadecimal-prefix hexadecimal-digit
23796                hexadecimal-constant hexadecimal-digit
23797 </pre>
23798  (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-prefix: one of
23799 <pre>
23800                0x 0X
23801 </pre>
23802  (<a href="#6.4.4.1">6.4.4.1</a>) nonzero-digit: one of
23803 <pre>
23804                1 2 3 4 5              6      7   8   9
23805 </pre>
23806  (<a href="#6.4.4.1">6.4.4.1</a>) octal-digit: one of
23807 <!--page 475 -->
23808 <pre>
23809                 0 1 2 3           4   5      6   7
23810 </pre>
23811  (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-digit: one of
23812 <pre>
23813                0 1 2 3 4 5                6    7    8   9
23814                a b c d e f
23815                A B C D E F
23816 </pre>
23817  (<a href="#6.4.4.1">6.4.4.1</a>) integer-suffix:
23818 <pre>
23819                 unsigned-suffix long-suffix<sub>opt</sub>
23820                 unsigned-suffix long-long-suffix
23821                 long-suffix unsigned-suffix<sub>opt</sub>
23822                 long-long-suffix unsigned-suffix<sub>opt</sub>
23823 </pre>
23824  (<a href="#6.4.4.1">6.4.4.1</a>) unsigned-suffix: one of
23825 <pre>
23826                 u U
23827 </pre>
23828  (<a href="#6.4.4.1">6.4.4.1</a>) long-suffix: one of
23829 <pre>
23830                 l L
23831 </pre>
23832  (<a href="#6.4.4.1">6.4.4.1</a>) long-long-suffix: one of
23833 <pre>
23834                 ll LL
23835 </pre>
23836  (<a href="#6.4.4.2">6.4.4.2</a>) floating-constant:
23837 <pre>
23838                 decimal-floating-constant
23839                 hexadecimal-floating-constant
23840 </pre>
23841  (<a href="#6.4.4.2">6.4.4.2</a>) decimal-floating-constant:
23842 <pre>
23843                fractional-constant exponent-part<sub>opt</sub> floating-suffix<sub>opt</sub>
23844                digit-sequence exponent-part floating-suffix<sub>opt</sub>
23845 </pre>
23846  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-floating-constant:
23847 <pre>
23848                hexadecimal-prefix hexadecimal-fractional-constant
23849                              binary-exponent-part floating-suffix<sub>opt</sub>
23850                hexadecimal-prefix hexadecimal-digit-sequence
23851                              binary-exponent-part floating-suffix<sub>opt</sub>
23852 </pre>
23853  (<a href="#6.4.4.2">6.4.4.2</a>) fractional-constant:
23854 <pre>
23855                 digit-sequence<sub>opt</sub> . digit-sequence
23856                 digit-sequence .
23857 </pre>
23858  (<a href="#6.4.4.2">6.4.4.2</a>) exponent-part:
23859 <pre>
23860                e sign<sub>opt</sub> digit-sequence
23861                E sign<sub>opt</sub> digit-sequence
23862 </pre>
23863  (<a href="#6.4.4.2">6.4.4.2</a>) sign: one of
23864 <!--page 476 -->
23865 <pre>
23866                 + -
23867 </pre>
23868  (<a href="#6.4.4.2">6.4.4.2</a>) digit-sequence:
23869 <pre>
23870                 digit
23871                 digit-sequence digit
23872 </pre>
23873  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-fractional-constant:
23874 <pre>
23875                hexadecimal-digit-sequence<sub>opt</sub> .
23876                               hexadecimal-digit-sequence
23877                hexadecimal-digit-sequence .
23878 </pre>
23879  (<a href="#6.4.4.2">6.4.4.2</a>) binary-exponent-part:
23880 <pre>
23881                 p sign<sub>opt</sub> digit-sequence
23882                 P sign<sub>opt</sub> digit-sequence
23883 </pre>
23884  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-digit-sequence:
23885 <pre>
23886                hexadecimal-digit
23887                hexadecimal-digit-sequence hexadecimal-digit
23888 </pre>
23889  (<a href="#6.4.4.2">6.4.4.2</a>) floating-suffix: one of
23890 <pre>
23891                 f l F L
23892 </pre>
23893  (<a href="#6.4.4.3">6.4.4.3</a>) enumeration-constant:
23894 <pre>
23895                identifier
23896 </pre>
23897  (<a href="#6.4.4.4">6.4.4.4</a>) character-constant:
23898 <pre>
23899                ' c-char-sequence '
23900                L' c-char-sequence '
23901                u' c-char-sequence '
23902                U' c-char-sequence '
23903 </pre>
23904  (<a href="#6.4.4.4">6.4.4.4</a>) c-char-sequence:
23905 <pre>
23906                 c-char
23907                 c-char-sequence c-char
23908 </pre>
23909  (<a href="#6.4.4.4">6.4.4.4</a>) c-char:
23910 <pre>
23911                 any member of the source character set except
23912                              the single-quote ', backslash \, or new-line character
23913                 escape-sequence
23914 </pre>
23915  (<a href="#6.4.4.4">6.4.4.4</a>) escape-sequence:
23916 <!--page 477 -->
23917 <pre>
23918                simple-escape-sequence
23919                octal-escape-sequence
23920                hexadecimal-escape-sequence
23921                universal-character-name
23922 </pre>
23923  (<a href="#6.4.4.4">6.4.4.4</a>) simple-escape-sequence: one of
23924 <pre>
23925                \' \" \? \\
23926                \a \b \f \n \r \t                   \v
23927 </pre>
23928  (<a href="#6.4.4.4">6.4.4.4</a>) octal-escape-sequence:
23929 <pre>
23930                 \ octal-digit
23931                 \ octal-digit octal-digit
23932                 \ octal-digit octal-digit octal-digit
23933 </pre>
23934  (<a href="#6.4.4.4">6.4.4.4</a>) hexadecimal-escape-sequence:
23935 <pre>
23936                \x hexadecimal-digit
23937                hexadecimal-escape-sequence hexadecimal-digit
23938 </pre>
23939
23940 <p><small><a href="#Contents">Contents</a></small>
23941 <h4><a name="A.1.6" href="#A.1.6">A.1.6 String literals</a></h4>
23942  (<a href="#6.4.5">6.4.5</a>) string-literal:
23943 <pre>
23944                 encoding-prefix<sub>opt</sub> " s-char-sequence<sub>opt</sub> "
23945 </pre>
23946  (<a href="#6.4.5">6.4.5</a>) encoding-prefix:
23947 <pre>
23948                u8
23949                u
23950                U
23951                L
23952 </pre>
23953  (<a href="#6.4.5">6.4.5</a>) s-char-sequence:
23954 <pre>
23955                 s-char
23956                 s-char-sequence s-char
23957 </pre>
23958  (<a href="#6.4.5">6.4.5</a>) s-char:
23959 <pre>
23960                 any member of the source character set except
23961                              the double-quote ", backslash \, or new-line character
23962                 escape-sequence
23963 </pre>
23964
23965 <p><small><a href="#Contents">Contents</a></small>
23966 <h4><a name="A.1.7" href="#A.1.7">A.1.7 Punctuators</a></h4>
23967  (<a href="#6.4.6">6.4.6</a>) punctuator: one of
23968 <!--page 478 -->
23969 <pre>
23970                [ ] ( ) { } . -&gt;
23971                ++ -- &amp; * + - ~ !
23972                / % &lt;&lt; &gt;&gt; &lt; &gt; &lt;= &gt;=                      ==    !=    ^    |   &amp;&amp;   ||
23973                ? : ; ...
23974                = *= /= %= += -= &lt;&lt;=                     &gt;&gt;=    &amp;=       ^=   |=
23975                , # ##
23976                &lt;: :&gt; &lt;% %&gt; %: %:%:
23977 </pre>
23978
23979 <p><small><a href="#Contents">Contents</a></small>
23980 <h4><a name="A.1.8" href="#A.1.8">A.1.8 Header names</a></h4>
23981  (<a href="#6.4.7">6.4.7</a>) header-name:
23982 <pre>
23983                &lt; h-char-sequence &gt;
23984                " q-char-sequence "
23985 </pre>
23986  (<a href="#6.4.7">6.4.7</a>) h-char-sequence:
23987 <pre>
23988                h-char
23989                h-char-sequence h-char
23990 </pre>
23991  (<a href="#6.4.7">6.4.7</a>) h-char:
23992 <pre>
23993                any member of the source character set except
23994                             the new-line character and &gt;
23995 </pre>
23996  (<a href="#6.4.7">6.4.7</a>) q-char-sequence:
23997 <pre>
23998                q-char
23999                q-char-sequence q-char
24000 </pre>
24001  (<a href="#6.4.7">6.4.7</a>) q-char:
24002 <pre>
24003                any member of the source character set except
24004                             the new-line character and "
24005 </pre>
24006
24007 <p><small><a href="#Contents">Contents</a></small>
24008 <h4><a name="A.1.9" href="#A.1.9">A.1.9 Preprocessing numbers</a></h4>
24009  (<a href="#6.4.8">6.4.8</a>) pp-number:
24010 <!--page 479 -->
24011 <pre>
24012                digit
24013                . digit
24014                pp-number   digit
24015                pp-number   identifier-nondigit
24016                pp-number   e sign
24017                pp-number   E sign
24018                pp-number   p sign
24019                pp-number   P sign
24020                pp-number   .
24021 </pre>
24022
24023 <p><small><a href="#Contents">Contents</a></small>
24024 <h3><a name="A.2" href="#A.2">A.2 Phrase structure grammar</a></h3>
24025
24026 <p><small><a href="#Contents">Contents</a></small>
24027 <h4><a name="A.2.1" href="#A.2.1">A.2.1 Expressions</a></h4>
24028  (<a href="#6.5.1">6.5.1</a>) primary-expression:
24029 <pre>
24030                identifier
24031                constant
24032                string-literal
24033                ( expression )
24034                generic-selection
24035 </pre>
24036  (<a href="#6.5.1.1">6.5.1.1</a>) generic-selection:
24037 <pre>
24038                _Generic ( assignment-expression , generic-assoc-list )
24039 </pre>
24040  (<a href="#6.5.1.1">6.5.1.1</a>) generic-assoc-list:
24041 <pre>
24042                generic-association
24043                generic-assoc-list , generic-association
24044 </pre>
24045  (<a href="#6.5.1.1">6.5.1.1</a>) generic-association:
24046 <pre>
24047                type-name : assignment-expression
24048                default : assignment-expression
24049 </pre>
24050  (<a href="#6.5.2">6.5.2</a>) postfix-expression:
24051 <pre>
24052                primary-expression
24053                postfix-expression [ expression ]
24054                postfix-expression ( argument-expression-list<sub>opt</sub> )
24055                postfix-expression . identifier
24056                postfix-expression -&gt; identifier
24057                postfix-expression ++
24058                postfix-expression --
24059                ( type-name ) { initializer-list }
24060                ( type-name ) { initializer-list , }
24061 </pre>
24062  (<a href="#6.5.2">6.5.2</a>) argument-expression-list:
24063 <pre>
24064               assignment-expression
24065               argument-expression-list , assignment-expression
24066 </pre>
24067  (<a href="#6.5.3">6.5.3</a>) unary-expression:
24068 <!--page 480 -->
24069 <pre>
24070                postfix-expression
24071                ++ unary-expression
24072                -- unary-expression
24073                unary-operator cast-expression
24074                sizeof unary-expression
24075                sizeof ( type-name )
24076                alignof ( type-name )
24077 </pre>
24078  (<a href="#6.5.3">6.5.3</a>) unary-operator: one of
24079 <pre>
24080                &amp; * + - ~                !
24081 </pre>
24082  (<a href="#6.5.4">6.5.4</a>) cast-expression:
24083 <pre>
24084                 unary-expression
24085                 ( type-name ) cast-expression
24086 </pre>
24087  (<a href="#6.5.5">6.5.5</a>) multiplicative-expression:
24088 <pre>
24089                 cast-expression
24090                 multiplicative-expression * cast-expression
24091                 multiplicative-expression / cast-expression
24092                 multiplicative-expression % cast-expression
24093 </pre>
24094  (<a href="#6.5.6">6.5.6</a>) additive-expression:
24095 <pre>
24096                 multiplicative-expression
24097                 additive-expression + multiplicative-expression
24098                 additive-expression - multiplicative-expression
24099 </pre>
24100  (<a href="#6.5.7">6.5.7</a>) shift-expression:
24101 <pre>
24102                  additive-expression
24103                  shift-expression &lt;&lt; additive-expression
24104                  shift-expression &gt;&gt; additive-expression
24105 </pre>
24106  (<a href="#6.5.8">6.5.8</a>) relational-expression:
24107 <pre>
24108                 shift-expression
24109                 relational-expression   &lt;    shift-expression
24110                 relational-expression   &gt;    shift-expression
24111                 relational-expression   &lt;=   shift-expression
24112                 relational-expression   &gt;=   shift-expression
24113 </pre>
24114  (<a href="#6.5.9">6.5.9</a>) equality-expression:
24115 <pre>
24116                 relational-expression
24117                 equality-expression == relational-expression
24118                 equality-expression != relational-expression
24119 </pre>
24120  (<a href="#6.5.10">6.5.10</a>) AND-expression:
24121 <pre>
24122               equality-expression
24123               AND-expression &amp; equality-expression
24124 </pre>
24125  (<a href="#6.5.11">6.5.11</a>) exclusive-OR-expression:
24126 <!--page 481 -->
24127 <pre>
24128                AND-expression
24129                exclusive-OR-expression ^ AND-expression
24130 </pre>
24131  (<a href="#6.5.12">6.5.12</a>) inclusive-OR-expression:
24132 <pre>
24133                 exclusive-OR-expression
24134                 inclusive-OR-expression | exclusive-OR-expression
24135 </pre>
24136  (<a href="#6.5.13">6.5.13</a>) logical-AND-expression:
24137 <pre>
24138                inclusive-OR-expression
24139                logical-AND-expression &amp;&amp; inclusive-OR-expression
24140 </pre>
24141  (<a href="#6.5.14">6.5.14</a>) logical-OR-expression:
24142 <pre>
24143                logical-AND-expression
24144                logical-OR-expression || logical-AND-expression
24145 </pre>
24146  (<a href="#6.5.15">6.5.15</a>) conditional-expression:
24147 <pre>
24148                logical-OR-expression
24149                logical-OR-expression ? expression : conditional-expression
24150 </pre>
24151  (<a href="#6.5.16">6.5.16</a>) assignment-expression:
24152 <pre>
24153                conditional-expression
24154                unary-expression assignment-operator assignment-expression
24155 </pre>
24156  (<a href="#6.5.16">6.5.16</a>) assignment-operator: one of
24157 <pre>
24158                = *= /= %= +=                -=    &lt;&lt;=    &gt;&gt;=      &amp;=    ^=   |=
24159 </pre>
24160  (<a href="#6.5.17">6.5.17</a>) expression:
24161 <pre>
24162                assignment-expression
24163                expression , assignment-expression
24164 </pre>
24165  (<a href="#6.6">6.6</a>) constant-expression:
24166 <pre>
24167                conditional-expression
24168 </pre>
24169
24170 <p><small><a href="#Contents">Contents</a></small>
24171 <h4><a name="A.2.2" href="#A.2.2">A.2.2 Declarations</a></h4>
24172  (<a href="#6.7">6.7</a>) declaration:
24173 <pre>
24174                 declaration-specifiers init-declarator-list<sub>opt</sub> ;
24175                 static_assert-declaration
24176 </pre>
24177  (<a href="#6.7">6.7</a>) declaration-specifiers:
24178 <pre>
24179                 storage-class-specifier declaration-specifiers<sub>opt</sub>
24180                 type-specifier declaration-specifiers<sub>opt</sub>
24181                 type-qualifier declaration-specifiers<sub>opt</sub>
24182                 function-specifier declaration-specifiers<sub>opt</sub>
24183                 alignment-specifier declaration-specifiers<sub>opt</sub>
24184 </pre>
24185  (<a href="#6.7">6.7</a>) init-declarator-list:
24186 <!--page 482 -->
24187 <pre>
24188                 init-declarator
24189                 init-declarator-list , init-declarator
24190 </pre>
24191  (<a href="#6.7">6.7</a>) init-declarator:
24192 <pre>
24193                 declarator
24194                 declarator = initializer
24195 </pre>
24196  (<a href="#6.7.1">6.7.1</a>) storage-class-specifier:
24197 <pre>
24198                typedef
24199                extern
24200                static
24201                _Thread_local
24202                auto
24203                register
24204 </pre>
24205  (<a href="#6.7.2">6.7.2</a>) type-specifier:
24206 <pre>
24207                 void
24208                 char
24209                 short
24210                 int
24211                 long
24212                 float
24213                 double
24214                 signed
24215                 unsigned
24216                 _Bool
24217                 _Complex
24218                 atomic-type-specifier
24219                 struct-or-union-specifier
24220                 enum-specifier
24221                 typedef-name
24222 </pre>
24223  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union-specifier:
24224 <pre>
24225                 struct-or-union identifier<sub>opt</sub> { struct-declaration-list }
24226                 struct-or-union identifier
24227 </pre>
24228  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union:
24229 <pre>
24230                 struct
24231                 union
24232 </pre>
24233  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration-list:
24234 <pre>
24235                 struct-declaration
24236                 struct-declaration-list struct-declaration
24237 </pre>
24238  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration:
24239 <!--page 483 -->
24240 <pre>
24241                 specifier-qualifier-list struct-declarator-list<sub>opt</sub> ;
24242                 static_assert-declaration
24243 </pre>
24244  (<a href="#6.7.2.1">6.7.2.1</a>) specifier-qualifier-list:
24245 <pre>
24246                 type-specifier specifier-qualifier-list<sub>opt</sub>
24247                 type-qualifier specifier-qualifier-list<sub>opt</sub>
24248 </pre>
24249  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator-list:
24250 <pre>
24251                 struct-declarator
24252                 struct-declarator-list , struct-declarator
24253 </pre>
24254  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator:
24255 <pre>
24256                 declarator
24257                 declarator<sub>opt</sub> : constant-expression
24258 </pre>
24259  (<a href="#6.7.2.2">6.7.2.2</a>) enum-specifier:
24260 <pre>
24261                enum identifier<sub>opt</sub> { enumerator-list }
24262                enum identifier<sub>opt</sub> { enumerator-list , }
24263                enum identifier
24264 </pre>
24265  (<a href="#6.7.2.2">6.7.2.2</a>) enumerator-list:
24266 <pre>
24267                enumerator
24268                enumerator-list , enumerator
24269 </pre>
24270  (<a href="#6.7.2.2">6.7.2.2</a>) enumerator:
24271 <pre>
24272                enumeration-constant
24273                enumeration-constant = constant-expression
24274 </pre>
24275  (<a href="#6.7.2.4">6.7.2.4</a>) atomic-type-specifier:
24276 <pre>
24277                _Atomic ( type-name )
24278 </pre>
24279  (<a href="#6.7.3">6.7.3</a>) type-qualifier:
24280 <pre>
24281                const
24282                restrict
24283                volatile
24284                _Atomic
24285 </pre>
24286  (<a href="#6.7.4">6.7.4</a>) function-specifier:
24287 <pre>
24288                 inline
24289                 _Noreturn
24290 </pre>
24291  (<a href="#6.7.5">6.7.5</a>) alignment-specifier:
24292 <pre>
24293                _Alignas ( type-name )
24294                _Alignas ( constant-expression )
24295 </pre>
24296  (<a href="#6.7.6">6.7.6</a>) declarator:
24297 <!--page 484 -->
24298 <pre>
24299                pointer<sub>opt</sub> direct-declarator
24300 </pre>
24301  (<a href="#6.7.6">6.7.6</a>) direct-declarator:
24302 <pre>
24303                 identifier
24304                 ( declarator )
24305                 direct-declarator [ type-qualifier-list<sub>opt</sub> assignment-expression<sub>opt</sub> ]
24306                 direct-declarator [ static type-qualifier-list<sub>opt</sub> assignment-expression ]
24307                 direct-declarator [ type-qualifier-list static assignment-expression ]
24308                 direct-declarator [ type-qualifier-list<sub>opt</sub> * ]
24309                 direct-declarator ( parameter-type-list )
24310                 direct-declarator ( identifier-list<sub>opt</sub> )
24311 </pre>
24312  (<a href="#6.7.6">6.7.6</a>) pointer:
24313 <pre>
24314                 * type-qualifier-list<sub>opt</sub>
24315                 * type-qualifier-list<sub>opt</sub> pointer
24316 </pre>
24317  (<a href="#6.7.6">6.7.6</a>) type-qualifier-list:
24318 <pre>
24319                type-qualifier
24320                type-qualifier-list type-qualifier
24321 </pre>
24322  (<a href="#6.7.6">6.7.6</a>) parameter-type-list:
24323 <pre>
24324               parameter-list
24325               parameter-list , ...
24326 </pre>
24327  (<a href="#6.7.6">6.7.6</a>) parameter-list:
24328 <pre>
24329               parameter-declaration
24330               parameter-list , parameter-declaration
24331 </pre>
24332  (<a href="#6.7.6">6.7.6</a>) parameter-declaration:
24333 <pre>
24334               declaration-specifiers declarator
24335               declaration-specifiers abstract-declarator<sub>opt</sub>
24336 </pre>
24337  (<a href="#6.7.6">6.7.6</a>) identifier-list:
24338 <pre>
24339                 identifier
24340                 identifier-list , identifier
24341 </pre>
24342  (<a href="#6.7.7">6.7.7</a>) type-name:
24343 <pre>
24344                specifier-qualifier-list abstract-declarator<sub>opt</sub>
24345 </pre>
24346  (<a href="#6.7.7">6.7.7</a>) abstract-declarator:
24347 <!--page 485 -->
24348 <pre>
24349                pointer
24350                pointer<sub>opt</sub> direct-abstract-declarator
24351 </pre>
24352  (<a href="#6.7.7">6.7.7</a>) direct-abstract-declarator:
24353 <pre>
24354                 ( abstract-declarator )
24355                 direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list<sub>opt</sub>
24356                                assignment-expression<sub>opt</sub> ]
24357                 direct-abstract-declarator<sub>opt</sub> [ static type-qualifier-list<sub>opt</sub>
24358                                assignment-expression ]
24359                 direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list static
24360                                assignment-expression ]
24361                 direct-abstract-declarator<sub>opt</sub> [ * ]
24362                 direct-abstract-declarator<sub>opt</sub> ( parameter-type-list<sub>opt</sub> )
24363 </pre>
24364  (<a href="#6.7.8">6.7.8</a>) typedef-name:
24365 <pre>
24366                identifier
24367 </pre>
24368  (<a href="#6.7.9">6.7.9</a>) initializer:
24369 <pre>
24370                  assignment-expression
24371                  { initializer-list }
24372                  { initializer-list , }
24373 </pre>
24374  (<a href="#6.7.9">6.7.9</a>) initializer-list:
24375 <pre>
24376                  designation<sub>opt</sub> initializer
24377                  initializer-list , designation<sub>opt</sub> initializer
24378 </pre>
24379  (<a href="#6.7.9">6.7.9</a>) designation:
24380 <pre>
24381                designator-list =
24382 </pre>
24383  (<a href="#6.7.9">6.7.9</a>) designator-list:
24384 <pre>
24385                designator
24386                designator-list designator
24387 </pre>
24388  (<a href="#6.7.9">6.7.9</a>) designator:
24389 <pre>
24390                [ constant-expression ]
24391                . identifier
24392 </pre>
24393  (<a href="#6.7.10">6.7.10</a>) static_assert-declaration:
24394 <!--page 486 -->
24395 <pre>
24396                 _Static_assert ( constant-expression , string-literal ) ;
24397 </pre>
24398
24399 <p><small><a href="#Contents">Contents</a></small>
24400 <h4><a name="A.2.3" href="#A.2.3">A.2.3 Statements</a></h4>
24401  (<a href="#6.8">6.8</a>) statement:
24402 <pre>
24403                labeled-statement
24404                compound-statement
24405                expression-statement
24406                selection-statement
24407                iteration-statement
24408                jump-statement
24409 </pre>
24410  (<a href="#6.8.1">6.8.1</a>) labeled-statement:
24411 <pre>
24412                 identifier : statement
24413                 case constant-expression : statement
24414                 default : statement
24415 </pre>
24416  (<a href="#6.8.2">6.8.2</a>) compound-statement:
24417 <pre>
24418               { block-item-list<sub>opt</sub> }
24419 </pre>
24420  (<a href="#6.8.2">6.8.2</a>) block-item-list:
24421 <pre>
24422                 block-item
24423                 block-item-list block-item
24424 </pre>
24425  (<a href="#6.8.2">6.8.2</a>) block-item:
24426 <pre>
24427                 declaration
24428                 statement
24429 </pre>
24430  (<a href="#6.8.3">6.8.3</a>) expression-statement:
24431 <pre>
24432                expression<sub>opt</sub> ;
24433 </pre>
24434  (<a href="#6.8.4">6.8.4</a>) selection-statement:
24435 <pre>
24436                 if ( expression ) statement
24437                 if ( expression ) statement else statement
24438                 switch ( expression ) statement
24439 </pre>
24440  (<a href="#6.8.5">6.8.5</a>) iteration-statement:
24441 <pre>
24442                  while ( expression ) statement
24443                  do statement while ( expression ) ;
24444                  for ( expression<sub>opt</sub> ; expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement
24445                  for ( declaration expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement
24446 </pre>
24447  (<a href="#6.8.6">6.8.6</a>) jump-statement:
24448 <!--page 487 -->
24449 <pre>
24450                goto identifier ;
24451                continue ;
24452                break ;
24453                return expression<sub>opt</sub> ;
24454 </pre>
24455
24456 <p><small><a href="#Contents">Contents</a></small>
24457 <h4><a name="A.2.4" href="#A.2.4">A.2.4 External definitions</a></h4>
24458  (<a href="#6.9">6.9</a>) translation-unit:
24459 <pre>
24460                 external-declaration
24461                 translation-unit external-declaration
24462 </pre>
24463  (<a href="#6.9">6.9</a>) external-declaration:
24464 <pre>
24465                 function-definition
24466                 declaration
24467 </pre>
24468  (<a href="#6.9.1">6.9.1</a>) function-definition:
24469 <pre>
24470                 declaration-specifiers declarator declaration-list<sub>opt</sub> compound-statement
24471 </pre>
24472  (<a href="#6.9.1">6.9.1</a>) declaration-list:
24473 <pre>
24474                declaration
24475                declaration-list declaration
24476 </pre>
24477
24478 <p><small><a href="#Contents">Contents</a></small>
24479 <h3><a name="A.3" href="#A.3">A.3 Preprocessing directives</a></h3>
24480  (<a href="#6.10">6.10</a>) preprocessing-file:
24481 <pre>
24482                group<sub>opt</sub>
24483 </pre>
24484  (<a href="#6.10">6.10</a>) group:
24485 <pre>
24486                  group-part
24487                  group group-part
24488 </pre>
24489  (<a href="#6.10">6.10</a>) group-part:
24490 <pre>
24491                if-section
24492                control-line
24493                text-line
24494                # non-directive
24495 </pre>
24496  (<a href="#6.10">6.10</a>) if-section:
24497 <pre>
24498                  if-group elif-groups<sub>opt</sub> else-group<sub>opt</sub> endif-line
24499 </pre>
24500  (<a href="#6.10">6.10</a>) if-group:
24501 <pre>
24502                 # if     constant-expression new-line group<sub>opt</sub>
24503                 # ifdef identifier new-line group<sub>opt</sub>
24504                 # ifndef identifier new-line group<sub>opt</sub>
24505 </pre>
24506  (<a href="#6.10">6.10</a>) elif-groups:
24507 <pre>
24508                 elif-group
24509                 elif-groups elif-group
24510 </pre>
24511  (<a href="#6.10">6.10</a>) elif-group:
24512 <!--page 488 -->
24513 <pre>
24514                 # elif       constant-expression new-line group<sub>opt</sub>
24515 </pre>
24516  (<a href="#6.10">6.10</a>) else-group:
24517 <pre>
24518                 # else        new-line group<sub>opt</sub>
24519 </pre>
24520  (<a href="#6.10">6.10</a>) endif-line:
24521 <pre>
24522                 # endif       new-line
24523 </pre>
24524  (<a href="#6.10">6.10</a>) control-line:
24525 <pre>
24526                # include pp-tokens new-line
24527                # define identifier replacement-list new-line
24528                # define identifier lparen identifier-list<sub>opt</sub> )
24529                                                replacement-list new-line
24530                # define identifier lparen ... ) replacement-list new-line
24531                # define identifier lparen identifier-list , ... )
24532                                                replacement-list new-line
24533                # undef   identifier new-line
24534                # line    pp-tokens new-line
24535                # error   pp-tokens<sub>opt</sub> new-line
24536                # pragma pp-tokens<sub>opt</sub> new-line
24537                #         new-line
24538 </pre>
24539  (<a href="#6.10">6.10</a>) text-line:
24540 <pre>
24541                 pp-tokens<sub>opt</sub> new-line
24542 </pre>
24543  (<a href="#6.10">6.10</a>) non-directive:
24544 <pre>
24545                pp-tokens new-line
24546 </pre>
24547  (<a href="#6.10">6.10</a>) lparen:
24548 <pre>
24549                   a ( character not immediately preceded by white-space
24550 </pre>
24551  (<a href="#6.10">6.10</a>) replacement-list:
24552 <pre>
24553                pp-tokens<sub>opt</sub>
24554 </pre>
24555  (<a href="#6.10">6.10</a>) pp-tokens:
24556 <pre>
24557                preprocessing-token
24558                pp-tokens preprocessing-token
24559 </pre>
24560  (<a href="#6.10">6.10</a>) new-line:
24561 <!--page 489 -->
24562 <pre>
24563                the new-line character
24564 </pre>
24565
24566 <p><small><a href="#Contents">Contents</a></small>
24567 <h2><a name="B" href="#B">Annex B</a></h2>
24568 <pre>
24569                               (informative)
24570                           Library summary
24571 </pre>
24572
24573 <p><small><a href="#Contents">Contents</a></small>
24574 <h3><a name="B.1" href="#B.1">B.1 Diagnostics &lt;assert.h&gt;</a></h3>
24575 <pre>
24576          NDEBUG
24577          static_assert
24578          void assert(scalar expression);
24579 </pre>
24580
24581 <p><small><a href="#Contents">Contents</a></small>
24582 <h3><a name="B.2" href="#B.2">B.2 Complex &lt;complex.h&gt;</a></h3>
24583 <!--page 490 -->
24584 <!--page 491 -->
24585 <pre>
24586          __STDC_NO_COMPLEX__           imaginary
24587          complex                         _Imaginary_I
24588          _Complex_I                      I
24589          #pragma STDC CX_LIMITED_RANGE on-off-switch
24590          double complex cacos(double complex z);
24591          float complex cacosf(float complex z);
24592          long double complex cacosl(long double complex z);
24593          double complex casin(double complex z);
24594          float complex casinf(float complex z);
24595          long double complex casinl(long double complex z);
24596          double complex catan(double complex z);
24597          float complex catanf(float complex z);
24598          long double complex catanl(long double complex z);
24599          double complex ccos(double complex z);
24600          float complex ccosf(float complex z);
24601          long double complex ccosl(long double complex z);
24602          double complex csin(double complex z);
24603          float complex csinf(float complex z);
24604          long double complex csinl(long double complex z);
24605          double complex ctan(double complex z);
24606          float complex ctanf(float complex z);
24607          long double complex ctanl(long double complex z);
24608          double complex cacosh(double complex z);
24609          float complex cacoshf(float complex z);
24610          long double complex cacoshl(long double complex z);
24611          double complex casinh(double complex z);
24612          float complex casinhf(float complex z);
24613          long double complex casinhl(long double complex z);
24614        double complex catanh(double complex z);
24615        float complex catanhf(float complex z);
24616        long double complex catanhl(long double complex z);
24617        double complex ccosh(double complex z);
24618        float complex ccoshf(float complex z);
24619        long double complex ccoshl(long double complex z);
24620        double complex csinh(double complex z);
24621        float complex csinhf(float complex z);
24622        long double complex csinhl(long double complex z);
24623        double complex ctanh(double complex z);
24624        float complex ctanhf(float complex z);
24625        long double complex ctanhl(long double complex z);
24626        double complex cexp(double complex z);
24627        float complex cexpf(float complex z);
24628        long double complex cexpl(long double complex z);
24629        double complex clog(double complex z);
24630        float complex clogf(float complex z);
24631        long double complex clogl(long double complex z);
24632        double cabs(double complex z);
24633        float cabsf(float complex z);
24634        long double cabsl(long double complex z);
24635        double complex cpow(double complex x, double complex y);
24636        float complex cpowf(float complex x, float complex y);
24637        long double complex cpowl(long double complex x,
24638             long double complex y);
24639        double complex csqrt(double complex z);
24640        float complex csqrtf(float complex z);
24641        long double complex csqrtl(long double complex z);
24642        double carg(double complex z);
24643        float cargf(float complex z);
24644        long double cargl(long double complex z);
24645        double cimag(double complex z);
24646        float cimagf(float complex z);
24647        long double cimagl(long double complex z);
24648        double complex CMPLX(double x, double y);
24649        float complex CMPLXF(float x, float y);
24650        long double complex CMPLXL(long double x, long double y);
24651        double complex conj(double complex z);
24652        float complex conjf(float complex z);
24653        long double complex conjl(long double complex z);
24654        double complex cproj(double complex z);
24655          float complex cprojf(float complex z);
24656          long double complex cprojl(long double complex z);
24657          double creal(double complex z);
24658          float crealf(float complex z);
24659          long double creall(long double complex z);
24660 </pre>
24661
24662 <p><small><a href="#Contents">Contents</a></small>
24663 <h3><a name="B.3" href="#B.3">B.3 Character handling &lt;ctype.h&gt;</a></h3>
24664 <pre>
24665          int   isalnum(int c);
24666          int   isalpha(int c);
24667          int   isblank(int c);
24668          int   iscntrl(int c);
24669          int   isdigit(int c);
24670          int   isgraph(int c);
24671          int   islower(int c);
24672          int   isprint(int c);
24673          int   ispunct(int c);
24674          int   isspace(int c);
24675          int   isupper(int c);
24676          int   isxdigit(int c);
24677          int   tolower(int c);
24678          int   toupper(int c);
24679 </pre>
24680
24681 <p><small><a href="#Contents">Contents</a></small>
24682 <h3><a name="B.4" href="#B.4">B.4 Errors &lt;errno.h&gt;</a></h3>
24683 <pre>
24684          EDOM           EILSEQ            ERANGE           errno
24685          __STDC_WANT_LIB_EXT1__
24686          errno_t
24687 </pre>
24688
24689 <p><small><a href="#Contents">Contents</a></small>
24690 <h3><a name="B.5" href="#B.5">B.5 Floating-point environment &lt;fenv.h&gt;</a></h3>
24691 <!--page 492 -->
24692 <pre>
24693          fenv_t               FE_OVERFLOW             FE_TOWARDZERO
24694          fexcept_t            FE_UNDERFLOW            FE_UPWARD
24695          FE_DIVBYZERO         FE_ALL_EXCEPT           FE_DFL_ENV
24696          FE_INEXACT           FE_DOWNWARD
24697          FE_INVALID           FE_TONEAREST
24698          #pragma STDC FENV_ACCESS on-off-switch
24699          int feclearexcept(int excepts);
24700          int fegetexceptflag(fexcept_t *flagp, int excepts);
24701          int feraiseexcept(int excepts);
24702          int fesetexceptflag(const fexcept_t *flagp,
24703               int excepts);
24704          int fetestexcept(int excepts);
24705        int   fegetround(void);
24706        int   fesetround(int round);
24707        int   fegetenv(fenv_t *envp);
24708        int   feholdexcept(fenv_t *envp);
24709        int   fesetenv(const fenv_t *envp);
24710        int   feupdateenv(const fenv_t *envp);
24711 </pre>
24712
24713 <p><small><a href="#Contents">Contents</a></small>
24714 <h3><a name="B.6" href="#B.6">B.6 Characteristics of floating types &lt;float.h&gt;</a></h3>
24715 <pre>
24716        FLT_ROUNDS              DBL_DIG                 FLT_MAX
24717        FLT_EVAL_METHOD         LDBL_DIG                DBL_MAX
24718        FLT_HAS_SUBNORM         FLT_MIN_EXP             LDBL_MAX
24719        DBL_HAS_SUBNORM         DBL_MIN_EXP             FLT_EPSILON
24720        LDBL_HAS_SUBNORM        LDBL_MIN_EXP            DBL_EPSILON
24721        FLT_RADIX               FLT_MIN_10_EXP          LDBL_EPSILON
24722        FLT_MANT_DIG            DBL_MIN_10_EXP          FLT_MIN
24723        DBL_MANT_DIG            LDBL_MIN_10_EXP         DBL_MIN
24724        LDBL_MANT_DIG           FLT_MAX_EXP             LDBL_MIN
24725        FLT_DECIMAL_DIG         DBL_MAX_EXP             FLT_TRUE_MIN
24726        DBL_DECIMAL_DIG         LDBL_MAX_EXP            DBL_TRUE_MIN
24727        LDBL_DECIMAL_DIG        FLT_MAX_10_EXP          LDBL_TRUE_MIN
24728        DECIMAL_DIG             DBL_MAX_10_EXP
24729        FLT_DIG                 LDBL_MAX_10_EXP
24730 </pre>
24731
24732 <p><small><a href="#Contents">Contents</a></small>
24733 <h3><a name="B.7" href="#B.7">B.7 Format conversion of integer types &lt;inttypes.h&gt;</a></h3>
24734 <!--page 493 -->
24735 <pre>
24736        imaxdiv_t
24737        PRIdN         PRIdLEASTN       PRIdFASTN        PRIdMAX    PRIdPTR
24738        PRIiN         PRIiLEASTN       PRIiFASTN        PRIiMAX    PRIiPTR
24739        PRIoN         PRIoLEASTN       PRIoFASTN        PRIoMAX    PRIoPTR
24740        PRIuN         PRIuLEASTN       PRIuFASTN        PRIuMAX    PRIuPTR
24741        PRIxN         PRIxLEASTN       PRIxFASTN        PRIxMAX    PRIxPTR
24742        PRIXN         PRIXLEASTN       PRIXFASTN        PRIXMAX    PRIXPTR
24743        SCNdN         SCNdLEASTN       SCNdFASTN        SCNdMAX    SCNdPTR
24744        SCNiN         SCNiLEASTN       SCNiFASTN        SCNiMAX    SCNiPTR
24745        SCNoN         SCNoLEASTN       SCNoFASTN        SCNoMAX    SCNoPTR
24746        SCNuN         SCNuLEASTN       SCNuFASTN        SCNuMAX    SCNuPTR
24747        SCNxN         SCNxLEASTN       SCNxFASTN        SCNxMAX    SCNxPTR
24748        intmax_t imaxabs(intmax_t j);
24749        imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
24750        intmax_t strtoimax(const char * restrict nptr,
24751                char ** restrict endptr, int base);
24752          uintmax_t strtoumax(const char * restrict nptr,
24753                  char ** restrict endptr, int base);
24754          intmax_t wcstoimax(const wchar_t * restrict nptr,
24755                  wchar_t ** restrict endptr, int base);
24756          uintmax_t wcstoumax(const wchar_t * restrict nptr,
24757                  wchar_t ** restrict endptr, int base);
24758 </pre>
24759
24760 <p><small><a href="#Contents">Contents</a></small>
24761 <h3><a name="B.8" href="#B.8">B.8 Alternative spellings &lt;iso646.h&gt;</a></h3>
24762 <pre>
24763          and            bitor             not_eq           xor
24764          and_eq         compl             or               xor_eq
24765          bitand         not               or_eq
24766 </pre>
24767
24768 <p><small><a href="#Contents">Contents</a></small>
24769 <h3><a name="B.9" href="#B.9">B.9 Sizes of integer types &lt;limits.h&gt;</a></h3>
24770 <pre>
24771          CHAR_BIT       CHAR_MAX          INT_MIN          ULONG_MAX
24772          SCHAR_MIN      MB_LEN_MAX        INT_MAX          LLONG_MIN
24773          SCHAR_MAX      SHRT_MIN          UINT_MAX         LLONG_MAX
24774          UCHAR_MAX      SHRT_MAX          LONG_MIN         ULLONG_MAX
24775          CHAR_MIN       USHRT_MAX         LONG_MAX
24776 </pre>
24777
24778 <p><small><a href="#Contents">Contents</a></small>
24779 <h3><a name="B.10" href="#B.10">B.10 Localization &lt;locale.h&gt;</a></h3>
24780 <pre>
24781          struct lconv   LC_ALL            LC_CTYPE         LC_NUMERIC
24782          NULL           LC_COLLATE        LC_MONETARY      LC_TIME
24783          char *setlocale(int category, const char *locale);
24784          struct lconv *localeconv(void);
24785 </pre>
24786
24787 <p><small><a href="#Contents">Contents</a></small>
24788 <h3><a name="B.11" href="#B.11">B.11 Mathematics &lt;math.h&gt;</a></h3>
24789 <!--page 494 -->
24790 <!--page 495 -->
24791 <!--page 496 -->
24792 <!--page 497 -->
24793 <!--page 498 -->
24794 <pre>
24795          float_t              FP_INFINITE             FP_FAST_FMAL
24796          double_t             FP_NAN                  FP_ILOGB0
24797          HUGE_VAL             FP_NORMAL               FP_ILOGBNAN
24798          HUGE_VALF            FP_SUBNORMAL            MATH_ERRNO
24799          HUGE_VALL            FP_ZERO                 MATH_ERREXCEPT
24800          INFINITY             FP_FAST_FMA             math_errhandling
24801          NAN                  FP_FAST_FMAF
24802          #pragma STDC FP_CONTRACT on-off-switch
24803          int fpclassify(real-floating x);
24804          int isfinite(real-floating x);
24805          int isinf(real-floating x);
24806          int isnan(real-floating x);
24807          int isnormal(real-floating x);
24808          int signbit(real-floating x);
24809        double acos(double x);
24810        float acosf(float x);
24811        long double acosl(long double x);
24812        double asin(double x);
24813        float asinf(float x);
24814        long double asinl(long double x);
24815        double atan(double x);
24816        float atanf(float x);
24817        long double atanl(long double x);
24818        double atan2(double y, double x);
24819        float atan2f(float y, float x);
24820        long double atan2l(long double y, long double x);
24821        double cos(double x);
24822        float cosf(float x);
24823        long double cosl(long double x);
24824        double sin(double x);
24825        float sinf(float x);
24826        long double sinl(long double x);
24827        double tan(double x);
24828        float tanf(float x);
24829        long double tanl(long double x);
24830        double acosh(double x);
24831        float acoshf(float x);
24832        long double acoshl(long double x);
24833        double asinh(double x);
24834        float asinhf(float x);
24835        long double asinhl(long double x);
24836        double atanh(double x);
24837        float atanhf(float x);
24838        long double atanhl(long double x);
24839        double cosh(double x);
24840        float coshf(float x);
24841        long double coshl(long double x);
24842        double sinh(double x);
24843        float sinhf(float x);
24844        long double sinhl(long double x);
24845        double tanh(double x);
24846        float tanhf(float x);
24847        long double tanhl(long double x);
24848        double exp(double x);
24849        float expf(float x);
24850          long double expl(long double x);
24851          double exp2(double x);
24852          float exp2f(float x);
24853          long double exp2l(long double x);
24854          double expm1(double x);
24855          float expm1f(float x);
24856          long double expm1l(long double x);
24857          double frexp(double value, int *exp);
24858          float frexpf(float value, int *exp);
24859          long double frexpl(long double value, int *exp);
24860          int ilogb(double x);
24861          int ilogbf(float x);
24862          int ilogbl(long double x);
24863          double ldexp(double x, int exp);
24864          float ldexpf(float x, int exp);
24865          long double ldexpl(long double x, int exp);
24866          double log(double x);
24867          float logf(float x);
24868          long double logl(long double x);
24869          double log10(double x);
24870          float log10f(float x);
24871          long double log10l(long double x);
24872          double log1p(double x);
24873          float log1pf(float x);
24874          long double log1pl(long double x);
24875          double log2(double x);
24876          float log2f(float x);
24877          long double log2l(long double x);
24878          double logb(double x);
24879          float logbf(float x);
24880          long double logbl(long double x);
24881          double modf(double value, double *iptr);
24882          float modff(float value, float *iptr);
24883          long double modfl(long double value, long double *iptr);
24884          double scalbn(double x, int n);
24885          float scalbnf(float x, int n);
24886          long double scalbnl(long double x, int n);
24887          double scalbln(double x, long int n);
24888          float scalblnf(float x, long int n);
24889          long double scalblnl(long double x, long int n);
24890          double cbrt(double x);
24891        float cbrtf(float x);
24892        long double cbrtl(long double x);
24893        double fabs(double x);
24894        float fabsf(float x);
24895        long double fabsl(long double x);
24896        double hypot(double x, double y);
24897        float hypotf(float x, float y);
24898        long double hypotl(long double x, long double y);
24899        double pow(double x, double y);
24900        float powf(float x, float y);
24901        long double powl(long double x, long double y);
24902        double sqrt(double x);
24903        float sqrtf(float x);
24904        long double sqrtl(long double x);
24905        double erf(double x);
24906        float erff(float x);
24907        long double erfl(long double x);
24908        double erfc(double x);
24909        float erfcf(float x);
24910        long double erfcl(long double x);
24911        double lgamma(double x);
24912        float lgammaf(float x);
24913        long double lgammal(long double x);
24914        double tgamma(double x);
24915        float tgammaf(float x);
24916        long double tgammal(long double x);
24917        double ceil(double x);
24918        float ceilf(float x);
24919        long double ceill(long double x);
24920        double floor(double x);
24921        float floorf(float x);
24922        long double floorl(long double x);
24923        double nearbyint(double x);
24924        float nearbyintf(float x);
24925        long double nearbyintl(long double x);
24926        double rint(double x);
24927        float rintf(float x);
24928        long double rintl(long double x);
24929        long int lrint(double x);
24930        long int lrintf(float x);
24931        long int lrintl(long double x);
24932          long long int llrint(double x);
24933          long long int llrintf(float x);
24934          long long int llrintl(long double x);
24935          double round(double x);
24936          float roundf(float x);
24937          long double roundl(long double x);
24938          long int lround(double x);
24939          long int lroundf(float x);
24940          long int lroundl(long double x);
24941          long long int llround(double x);
24942          long long int llroundf(float x);
24943          long long int llroundl(long double x);
24944          double trunc(double x);
24945          float truncf(float x);
24946          long double truncl(long double x);
24947          double fmod(double x, double y);
24948          float fmodf(float x, float y);
24949          long double fmodl(long double x, long double y);
24950          double remainder(double x, double y);
24951          float remainderf(float x, float y);
24952          long double remainderl(long double x, long double y);
24953          double remquo(double x, double y, int *quo);
24954          float remquof(float x, float y, int *quo);
24955          long double remquol(long double x, long double y,
24956               int *quo);
24957          double copysign(double x, double y);
24958          float copysignf(float x, float y);
24959          long double copysignl(long double x, long double y);
24960          double nan(const char *tagp);
24961          float nanf(const char *tagp);
24962          long double nanl(const char *tagp);
24963          double nextafter(double x, double y);
24964          float nextafterf(float x, float y);
24965          long double nextafterl(long double x, long double y);
24966          double nexttoward(double x, long double y);
24967          float nexttowardf(float x, long double y);
24968          long double nexttowardl(long double x, long double y);
24969          double fdim(double x, double y);
24970          float fdimf(float x, float y);
24971          long double fdiml(long double x, long double y);
24972          double fmax(double x, double y);
24973        float fmaxf(float x, float y);
24974        long double fmaxl(long double x, long double y);
24975        double fmin(double x, double y);
24976        float fminf(float x, float y);
24977        long double fminl(long double x, long double y);
24978        double fma(double x, double y, double z);
24979        float fmaf(float x, float y, float z);
24980        long double fmal(long double x, long double y,
24981             long double z);
24982        int isgreater(real-floating x, real-floating y);
24983        int isgreaterequal(real-floating x, real-floating y);
24984        int isless(real-floating x, real-floating y);
24985        int islessequal(real-floating x, real-floating y);
24986        int islessgreater(real-floating x, real-floating y);
24987        int isunordered(real-floating x, real-floating y);
24988 </pre>
24989
24990 <p><small><a href="#Contents">Contents</a></small>
24991 <h3><a name="B.12" href="#B.12">B.12 Nonlocal jumps &lt;setjmp.h&gt;</a></h3>
24992 <pre>
24993        jmp_buf
24994        int setjmp(jmp_buf env);
24995        _Noreturn void longjmp(jmp_buf env, int val);
24996 </pre>
24997
24998 <p><small><a href="#Contents">Contents</a></small>
24999 <h3><a name="B.13" href="#B.13">B.13 Signal handling &lt;signal.h&gt;</a></h3>
25000 <!--page 499 -->
25001 <pre>
25002        sig_atomic_t    SIG_IGN           SIGILL           SIGTERM
25003        SIG_DFL         SIGABRT           SIGINT
25004        SIG_ERR         SIGFPE            SIGSEGV
25005        void (*signal(int sig, void (*func)(int)))(int);
25006        int raise(int sig);
25007 </pre>
25008
25009 <p><small><a href="#Contents">Contents</a></small>
25010 <h3><a name="B.14" href="#B.14">B.14 Alignment &lt;stdalign.h&gt;</a></h3>
25011 <pre>
25012          alignas
25013          __alignas_is_defined
25014 </pre>
25015
25016 <p><small><a href="#Contents">Contents</a></small>
25017 <h3><a name="B.15" href="#B.15">B.15 Variable arguments &lt;stdarg.h&gt;</a></h3>
25018 <pre>
25019          va_list
25020          type va_arg(va_list ap, type);
25021          void va_copy(va_list dest, va_list src);
25022          void va_end(va_list ap);
25023          void va_start(va_list ap, parmN);
25024 </pre>
25025
25026 <p><small><a href="#Contents">Contents</a></small>
25027 <h3><a name="B.16" href="#B.16">B.16 Atomics &lt;stdatomic.h&gt;</a></h3>
25028 <!--page 500 -->
25029 <!--page 501 -->
25030 <pre>
25031          ATOMIC_CHAR_LOCK_FREE           atomic_uint
25032          ATOMIC_CHAR16_T_LOCK_FREE       atomic_long
25033          ATOMIC_CHAR32_T_LOCK_FREE       atomic_ulong
25034          ATOMIC_WCHAR_T_LOCK_FREE        atomic_llong
25035          ATOMIC_SHORT_LOCK_FREE          atomic_ullong
25036          ATOMIC_INT_LOCK_FREE            atomic_char16_t
25037          ATOMIC_LONG_LOCK_FREE           atomic_char32_t
25038          ATOMIC_LLONG_LOCK_FREE          atomic_wchar_t
25039          ATOMIC_ADDRESS_LOCK_FREE        atomic_int_least8_t
25040          ATOMIC_FLAG_INIT                atomic_uint_least8_t
25041          memory_order                    atomic_int_least16_t
25042          atomic_flag                     atomic_uint_least16_t
25043          atomic_bool                     atomic_int_least32_t
25044          atomic_address                  atomic_uint_least32_t
25045          memory_order_relaxed            atomic_int_least64_t
25046          memory_order_consume            atomic_uint_least64_t
25047          memory_order_acquire            atomic_int_fast8_t
25048          memory_order_release            atomic_uint_fast8_t
25049          memory_order_acq_rel            atomic_int_fast16_t
25050          memory_order_seq_cst            atomic_uint_fast16_t
25051          atomic_char                     atomic_int_fast32_t
25052          atomic_schar                    atomic_uint_fast32_t
25053          atomic_uchar                    atomic_int_fast64_t
25054          atomic_short                    atomic_uint_fast64_t
25055          atomic_ushort                   atomic_intptr_t
25056          atomic_int                      atomic_uintptr_t
25057        atomic_size_t                     atomic_intmax_t
25058        atomic_ptrdiff_t                  atomic_uintmax_t
25059        #define ATOMIC_VAR_INIT(C value)
25060        void atomic_init(volatile A *obj, C value);
25061        type kill_dependency(type y);
25062        void atomic_thread_fence(memory_order order);
25063        void atomic_signal_fence(memory_order order);
25064        _Bool atomic_is_lock_free(atomic_type const volatile *obj);
25065        void atomic_store(volatile A *object, C desired);
25066        void atomic_store_explicit(volatile A *object,
25067              C desired, memory_order order);
25068        C atomic_load(volatile A *object);
25069        C atomic_load_explicit(volatile A *object,
25070              memory_order order);
25071        C atomic_exchange(volatile A *object, C desired);
25072        C atomic_exchange_explicit(volatile A *object,
25073              C desired, memory_order order);
25074        _Bool atomic_compare_exchange_strong(volatile A *object,
25075              C *expected, C desired);
25076        _Bool atomic_compare_exchange_strong_explicit(
25077              volatile A *object, C *expected, C desired,
25078              memory_order success, memory_order failure);
25079        _Bool atomic_compare_exchange_weak(volatile A *object,
25080              C *expected, C desired);
25081        _Bool atomic_compare_exchange_weak_explicit(
25082              volatile A *object, C *expected, C desired,
25083              memory_order success, memory_order failure);
25084        C atomic_fetch_key(volatile A *object, M operand);
25085        C atomic_fetch_key_explicit(volatile A *object,
25086              M operand, memory_order order);
25087        bool atomic_flag_test_and_set(
25088              volatile atomic_flag *object);
25089        bool atomic_flag_test_and_set_explicit(
25090              volatile atomic_flag *object, memory_order order);
25091        void atomic_flag_clear(volatile atomic_flag *object);
25092        void atomic_flag_clear_explicit(
25093              volatile atomic_flag *object, memory_order order);
25094 </pre>
25095
25096 <p><small><a href="#Contents">Contents</a></small>
25097 <h3><a name="B.17" href="#B.17">B.17 Boolean type and values &lt;stdbool.h&gt;</a></h3>
25098 <pre>
25099          bool
25100          true
25101          false
25102          __bool_true_false_are_defined
25103 </pre>
25104
25105 <p><small><a href="#Contents">Contents</a></small>
25106 <h3><a name="B.18" href="#B.18">B.18 Common definitions &lt;stddef.h&gt;</a></h3>
25107 <pre>
25108          ptrdiff_t       max_align_t       NULL
25109          size_t          wchar_t
25110          offsetof(type, member-designator)
25111          __STDC_WANT_LIB_EXT1__
25112          rsize_t
25113 </pre>
25114
25115 <p><small><a href="#Contents">Contents</a></small>
25116 <h3><a name="B.19" href="#B.19">B.19 Integer types &lt;stdint.h&gt;</a></h3>
25117 <!--page 502 -->
25118 <pre>
25119          intN_t                INT_LEASTN_MIN          PTRDIFF_MAX
25120          uintN_t               INT_LEASTN_MAX          SIG_ATOMIC_MIN
25121          int_leastN_t          UINT_LEASTN_MAX         SIG_ATOMIC_MAX
25122          uint_leastN_t         INT_FASTN_MIN           SIZE_MAX
25123          int_fastN_t           INT_FASTN_MAX           WCHAR_MIN
25124          uint_fastN_t          UINT_FASTN_MAX          WCHAR_MAX
25125          intptr_t              INTPTR_MIN              WINT_MIN
25126          uintptr_t             INTPTR_MAX              WINT_MAX
25127          intmax_t              UINTPTR_MAX             INTN_C(value)
25128          uintmax_t             INTMAX_MIN              UINTN_C(value)
25129          INTN_MIN              INTMAX_MAX              INTMAX_C(value)
25130          INTN_MAX              UINTMAX_MAX             UINTMAX_C(value)
25131          UINTN_MAX             PTRDIFF_MIN
25132          __STDC_WANT_LIB_EXT1__
25133          RSIZE_MAX
25134 </pre>
25135
25136 <p><small><a href="#Contents">Contents</a></small>
25137 <h3><a name="B.20" href="#B.20">B.20 Input/output &lt;stdio.h&gt;</a></h3>
25138 <!--page 503 -->
25139 <!--page 504 -->
25140 <!--page 505 -->
25141 <pre>
25142        size_t          _IOLBF            FILENAME_MAX     TMP_MAX
25143        FILE            _IONBF            L_tmpnam         stderr
25144        fpos_t          BUFSIZ            SEEK_CUR         stdin
25145        NULL            EOF               SEEK_END         stdout
25146        _IOFBF          FOPEN_MAX         SEEK_SET
25147        int remove(const char *filename);
25148        int rename(const char *old, const char *new);
25149        FILE *tmpfile(void);
25150        char *tmpnam(char *s);
25151        int fclose(FILE *stream);
25152        int fflush(FILE *stream);
25153        FILE *fopen(const char * restrict filename,
25154             const char * restrict mode);
25155        FILE *freopen(const char * restrict filename,
25156             const char * restrict mode,
25157             FILE * restrict stream);
25158        void setbuf(FILE * restrict stream,
25159             char * restrict buf);
25160        int setvbuf(FILE * restrict stream,
25161             char * restrict buf,
25162             int mode, size_t size);
25163        int fprintf(FILE * restrict stream,
25164             const char * restrict format, ...);
25165        int fscanf(FILE * restrict stream,
25166             const char * restrict format, ...);
25167        int printf(const char * restrict format, ...);
25168        int scanf(const char * restrict format, ...);
25169        int snprintf(char * restrict s, size_t n,
25170             const char * restrict format, ...);
25171        int sprintf(char * restrict s,
25172             const char * restrict format, ...);
25173        int sscanf(const char * restrict s,
25174             const char * restrict format, ...);
25175        int vfprintf(FILE * restrict stream,
25176             const char * restrict format, va_list arg);
25177        int vfscanf(FILE * restrict stream,
25178             const char * restrict format, va_list arg);
25179        int vprintf(const char * restrict format, va_list arg);
25180        int vscanf(const char * restrict format, va_list arg);
25181          int vsnprintf(char * restrict s, size_t n,
25182               const char * restrict format, va_list arg);
25183          int vsprintf(char * restrict s,
25184               const char * restrict format, va_list arg);
25185          int vsscanf(const char * restrict s,
25186               const char * restrict format, va_list arg);
25187          int fgetc(FILE *stream);
25188          char *fgets(char * restrict s, int n,
25189               FILE * restrict stream);
25190          int fputc(int c, FILE *stream);
25191          int fputs(const char * restrict s,
25192               FILE * restrict stream);
25193          int getc(FILE *stream);
25194          int getchar(void);
25195          int putc(int c, FILE *stream);                                       *
25196          int putchar(int c);
25197          int puts(const char *s);
25198          int ungetc(int c, FILE *stream);
25199          size_t fread(void * restrict ptr,
25200               size_t size, size_t nmemb,
25201               FILE * restrict stream);
25202          size_t fwrite(const void * restrict ptr,
25203               size_t size, size_t nmemb,
25204               FILE * restrict stream);
25205          int fgetpos(FILE * restrict stream,
25206               fpos_t * restrict pos);
25207          int fseek(FILE *stream, long int offset, int whence);
25208          int fsetpos(FILE *stream, const fpos_t *pos);
25209          long int ftell(FILE *stream);
25210          void rewind(FILE *stream);
25211          void clearerr(FILE *stream);
25212          int feof(FILE *stream);
25213          int ferror(FILE *stream);
25214          void perror(const char *s);
25215          __STDC_WANT_LIB_EXT1__
25216          L_tmpnam_s    TMP_MAX_S         errno_t          rsize_t
25217          errno_t tmpfile_s(FILE * restrict * restrict streamptr);
25218          errno_t tmpnam_s(char *s, rsize_t maxsize);
25219        errno_t fopen_s(FILE * restrict * restrict streamptr,
25220             const char * restrict filename,
25221             const char * restrict mode);
25222        errno_t freopen_s(FILE * restrict * restrict newstreamptr,
25223             const char * restrict filename,
25224             const char * restrict mode,
25225             FILE * restrict stream);
25226        int fprintf_s(FILE * restrict stream,
25227             const char * restrict format, ...);
25228        int fscanf_s(FILE * restrict stream,
25229             const char * restrict format, ...);
25230        int printf_s(const char * restrict format, ...);
25231        int scanf_s(const char * restrict format, ...);
25232        int snprintf_s(char * restrict s, rsize_t n,
25233             const char * restrict format, ...);
25234        int sprintf_s(char * restrict s, rsize_t n,
25235             const char * restrict format, ...);
25236        int sscanf_s(const char * restrict s,
25237             const char * restrict format, ...);
25238        int vfprintf_s(FILE * restrict stream,
25239             const char * restrict format,
25240             va_list arg);
25241        int vfscanf_s(FILE * restrict stream,
25242             const char * restrict format,
25243             va_list arg);
25244        int vprintf_s(const char * restrict format,
25245             va_list arg);
25246        int vscanf_s(const char * restrict format,
25247             va_list arg);
25248        int vsnprintf_s(char * restrict s, rsize_t n,
25249             const char * restrict format,
25250             va_list arg);
25251        int vsprintf_s(char * restrict s, rsize_t n,
25252             const char * restrict format,
25253             va_list arg);
25254        int vsscanf_s(const char * restrict s,
25255             const char * restrict format,
25256             va_list arg);
25257        char *gets_s(char *s, rsize_t n);
25258 </pre>
25259
25260 <p><small><a href="#Contents">Contents</a></small>
25261 <h3><a name="B.21" href="#B.21">B.21 General utilities &lt;stdlib.h&gt;</a></h3>
25262 <!--page 506 -->
25263 <!--page 507 -->
25264 <pre>
25265          size_t       ldiv_t            EXIT_FAILURE     MB_CUR_MAX
25266          wchar_t      lldiv_t           EXIT_SUCCESS
25267          div_t        NULL              RAND_MAX
25268          double atof(const char *nptr);
25269          int atoi(const char *nptr);
25270          long int atol(const char *nptr);
25271          long long int atoll(const char *nptr);
25272          double strtod(const char * restrict nptr,
25273               char ** restrict endptr);
25274          float strtof(const char * restrict nptr,
25275               char ** restrict endptr);
25276          long double strtold(const char * restrict nptr,
25277               char ** restrict endptr);
25278          long int strtol(const char * restrict nptr,
25279               char ** restrict endptr, int base);
25280          long long int strtoll(const char * restrict nptr,
25281               char ** restrict endptr, int base);
25282          unsigned long int strtoul(
25283               const char * restrict nptr,
25284               char ** restrict endptr, int base);
25285          unsigned long long int strtoull(
25286               const char * restrict nptr,
25287               char ** restrict endptr, int base);
25288          int rand(void);
25289          void srand(unsigned int seed);
25290          void *aligned_alloc(size_t alignment, size_t size);
25291          void *calloc(size_t nmemb, size_t size);
25292          void free(void *ptr);
25293          void *malloc(size_t size);
25294          void *realloc(void *ptr, size_t size);
25295          _Noreturn void abort(void);
25296          int atexit(void (*func)(void));
25297          int at_quick_exit(void (*func)(void));
25298          _Noreturn void exit(int status);
25299          _Noreturn void _Exit(int status);
25300          char *getenv(const char *name);
25301          _Noreturn void quick_exit(int status);
25302          int system(const char *string);
25303        void *bsearch(const void *key, const void *base,
25304             size_t nmemb, size_t size,
25305             int (*compar)(const void *, const void *));
25306        void qsort(void *base, size_t nmemb, size_t size,
25307             int (*compar)(const void *, const void *));
25308        int abs(int j);
25309        long int labs(long int j);
25310        long long int llabs(long long int j);
25311        div_t div(int numer, int denom);
25312        ldiv_t ldiv(long int numer, long int denom);
25313        lldiv_t lldiv(long long int numer,
25314             long long int denom);
25315        int mblen(const char *s, size_t n);
25316        int mbtowc(wchar_t * restrict pwc,
25317             const char * restrict s, size_t n);
25318        int wctomb(char *s, wchar_t wchar);
25319        size_t mbstowcs(wchar_t * restrict pwcs,
25320             const char * restrict s, size_t n);
25321        size_t wcstombs(char * restrict s,
25322             const wchar_t * restrict pwcs, size_t n);
25323        __STDC_WANT_LIB_EXT1__
25324        errno_t
25325        rsize_t
25326        constraint_handler_t
25327        constraint_handler_t set_constraint_handler_s(
25328             constraint_handler_t handler);
25329        void abort_handler_s(
25330             const char * restrict msg,
25331             void * restrict ptr,
25332             errno_t error);
25333        void ignore_handler_s(
25334             const char * restrict msg,
25335             void * restrict ptr,
25336             errno_t error);
25337        errno_t getenv_s(size_t * restrict len,
25338                  char * restrict value, rsize_t maxsize,
25339                  const char * restrict name);
25340          void *bsearch_s(const void *key, const void *base,
25341               rsize_t nmemb, rsize_t size,
25342               int (*compar)(const void *k, const void *y,
25343                               void *context),
25344               void *context);
25345          errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size,
25346               int (*compar)(const void *x, const void *y,
25347                               void *context),
25348               void *context);
25349          errno_t wctomb_s(int * restrict status,
25350               char * restrict s,
25351               rsize_t smax,
25352               wchar_t wc);
25353          errno_t mbstowcs_s(size_t * restrict retval,
25354               wchar_t * restrict dst, rsize_t dstmax,
25355               const char * restrict src, rsize_t len);
25356          errno_t wcstombs_s(size_t * restrict retval,
25357               char * restrict dst, rsize_t dstmax,
25358               const wchar_t * restrict src, rsize_t len);
25359 </pre>
25360
25361 <p><small><a href="#Contents">Contents</a></small>
25362 <h3><a name="B.22" href="#B.22">B.22 String handling &lt;string.h&gt;</a></h3>
25363 <!--page 508 -->
25364 <!--page 509 -->
25365 <pre>
25366          size_t
25367          NULL
25368          void *memcpy(void * restrict s1,
25369               const void * restrict s2, size_t n);
25370          void *memmove(void *s1, const void *s2, size_t n);
25371          char *strcpy(char * restrict s1,
25372               const char * restrict s2);
25373          char *strncpy(char * restrict s1,
25374               const char * restrict s2, size_t n);
25375          char *strcat(char * restrict s1,
25376               const char * restrict s2);
25377          char *strncat(char * restrict s1,
25378               const char * restrict s2, size_t n);
25379          int memcmp(const void *s1, const void *s2, size_t n);
25380          int strcmp(const char *s1, const char *s2);
25381          int strcoll(const char *s1, const char *s2);
25382          int strncmp(const char *s1, const char *s2, size_t n);
25383          size_t strxfrm(char * restrict s1,
25384               const char * restrict s2, size_t n);
25385          void *memchr(const void *s, int c, size_t n);
25386        char *strchr(const char *s, int c);
25387        size_t strcspn(const char *s1, const char *s2);
25388        char *strpbrk(const char *s1, const char *s2);
25389        char *strrchr(const char *s, int c);
25390        size_t strspn(const char *s1, const char *s2);
25391        char *strstr(const char *s1, const char *s2);
25392        char *strtok(char * restrict s1,
25393             const char * restrict s2);
25394        void *memset(void *s, int c, size_t n);
25395        char *strerror(int errnum);
25396        size_t strlen(const char *s);
25397        __STDC_WANT_LIB_EXT1__
25398        errno_t
25399        rsize_t
25400        errno_t memcpy_s(void * restrict s1, rsize_t s1max,
25401             const void * restrict s2, rsize_t n);
25402        errno_t memmove_s(void *s1, rsize_t s1max,
25403             const void *s2, rsize_t n);
25404        errno_t strcpy_s(char * restrict s1,
25405             rsize_t s1max,
25406             const char * restrict s2);
25407        errno_t strncpy_s(char * restrict s1,
25408             rsize_t s1max,
25409             const char * restrict s2,
25410             rsize_t n);
25411        errno_t strcat_s(char * restrict s1,
25412             rsize_t s1max,
25413             const char * restrict s2);
25414        errno_t strncat_s(char * restrict s1,
25415             rsize_t s1max,
25416             const char * restrict s2,
25417             rsize_t n);
25418        char *strtok_s(char * restrict s1,
25419             rsize_t * restrict s1max,
25420             const char * restrict s2,
25421             char ** restrict ptr);
25422        errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n)
25423        errno_t strerror_s(char *s, rsize_t maxsize,
25424             errno_t errnum);
25425        size_t strerrorlen_s(errno_t errnum);
25426          size_t strnlen_s(const char *s, size_t maxsize);
25427 </pre>
25428
25429 <p><small><a href="#Contents">Contents</a></small>
25430 <h3><a name="B.23" href="#B.23">B.23 Type-generic math &lt;tgmath.h&gt;</a></h3>
25431 <pre>
25432          acos         sqrt              fmod             nextafter
25433          asin         fabs              frexp            nexttoward
25434          atan         atan2             hypot            remainder
25435          acosh        cbrt              ilogb            remquo
25436          asinh        ceil              ldexp            rint
25437          atanh        copysign          lgamma           round
25438          cos          erf               llrint           scalbn
25439          sin          erfc              llround          scalbln
25440          tan          exp2              log10            tgamma
25441          cosh         expm1             log1p            trunc
25442          sinh         fdim              log2             carg
25443          tanh         floor             logb             cimag
25444          exp          fma               lrint            conj
25445          log          fmax              lround           cproj
25446          pow          fmin              nearbyint        creal
25447 </pre>
25448
25449 <p><small><a href="#Contents">Contents</a></small>
25450 <h3><a name="B.24" href="#B.24">B.24 Threads &lt;threads.h&gt;</a></h3>
25451 <!--page 510 -->
25452 <pre>
25453          ONCE_FLAG_INIT                 mtx_plain
25454          TSS_DTOR_ITERATIONS            mtx_recursive
25455          cnd_t                          mtx_timed
25456          thrd_t                         mtx_try
25457          tss_t                          thrd_timeout
25458          mtx_t                          thrd_success
25459          tss_dtor_t                     thrd_busy
25460          thrd_start_t                   thrd_error
25461          once_flag                      thrd_nomem
25462          xtime
25463        void call_once(once_flag *flag, void (*func)(void));
25464        int cnd_broadcast(cnd_t *cond);
25465        void cnd_destroy(cnd_t *cond);
25466        int cnd_init(cnd_t *cond);
25467        int cnd_signal(cnd_t *cond);
25468        int cnd_timedwait(cnd_t *cond, mtx_t *mtx,
25469             const xtime *xt);
25470        int cnd_wait(cnd_t *cond, mtx_t *mtx);
25471        void mtx_destroy(mtx_t *mtx);
25472        int mtx_init(mtx_t *mtx, int type);
25473        int mtx_lock(mtx_t *mtx);
25474        int mtx_timedlock(mtx_t *mtx, const xtime *xt);
25475        int mtx_trylock(mtx_t *mtx);
25476        int mtx_unlock(mtx_t *mtx);
25477        int thrd_create(thrd_t *thr, thrd_start_t func,
25478             void *arg);
25479        thrd_t thrd_current(void);
25480        int thrd_detach(thrd_t thr);
25481        int thrd_equal(thrd_t thr0, thrd_t thr1);
25482        void thrd_exit(int res);
25483        int thrd_join(thrd_t thr, int *res);
25484        void thrd_sleep(const xtime *xt);
25485        void thrd_yield(void);
25486        int tss_create(tss_t *key, tss_dtor_t dtor);
25487        void tss_delete(tss_t key);
25488        void *tss_get(tss_t key);
25489        int tss_set(tss_t key, void *val);
25490        int xtime_get(xtime *xt, int base);
25491 </pre>
25492
25493 <p><small><a href="#Contents">Contents</a></small>
25494 <h3><a name="B.25" href="#B.25">B.25 Date and time &lt;time.h&gt;</a></h3>
25495 <!--page 511 -->
25496 <pre>
25497        NULL                  size_t                  time_t
25498        CLOCKS_PER_SEC        clock_t                 struct tm
25499        clock_t clock(void);
25500        double difftime(time_t time1, time_t time0);
25501        time_t mktime(struct tm *timeptr);
25502        time_t time(time_t *timer);
25503        char *asctime(const struct tm *timeptr);
25504        char *ctime(const time_t *timer);
25505        struct tm *gmtime(const time_t *timer);
25506        struct tm *localtime(const time_t *timer);
25507        size_t strftime(char * restrict s,
25508             size_t maxsize,
25509             const char * restrict format,
25510             const struct tm * restrict timeptr);
25511        __STDC_WANT_LIB_EXT1__
25512        errno_t
25513        rsize_t
25514        errno_t asctime_s(char *s, rsize_t maxsize,
25515             const struct tm *timeptr);
25516          errno_t ctime_s(char *s, rsize_t maxsize,
25517               const time_t *timer);
25518          struct tm *gmtime_s(const time_t * restrict timer,
25519               struct tm * restrict result);
25520          struct tm *localtime_s(const time_t * restrict timer,
25521               struct tm * restrict result);
25522 </pre>
25523
25524 <p><small><a href="#Contents">Contents</a></small>
25525 <h3><a name="B.26" href="#B.26">B.26 Unicode utilities &lt;uchar.h&gt;</a></h3>
25526 <pre>
25527          mbstate_t     size_t            char16_t         char32_t
25528          size_t mbrtoc16(char16_t * restrict pc16,
25529               const char * restrict s, size_t n,
25530               mbstate_t * restrict ps);
25531          size_t c16rtomb(char * restrict s, char16_t c16,
25532               mbstate_t * restrict ps);
25533          size_t mbrtoc32(char32_t * restrict pc32,
25534               const char * restrict s, size_t n,
25535               mbstate_t * restrict ps);
25536          size_t c32rtomb(char * restrict s, char32_t c32,
25537               mbstate_t * restrict ps);
25538 </pre>
25539
25540 <p><small><a href="#Contents">Contents</a></small>
25541 <h3><a name="B.27" href="#B.27">B.27 Extended multibyte/wide character utilities &lt;wchar.h&gt;</a></h3>
25542 <!--page 512 -->
25543 <!--page 513 -->
25544 <!--page 514 -->
25545 <!--page 515 -->
25546 <!--page 516 -->
25547 <pre>
25548          wchar_t             wint_t                  WCHAR_MAX
25549          size_t              struct tm               WCHAR_MIN
25550          mbstate_t           NULL                    WEOF
25551          int fwprintf(FILE * restrict stream,
25552               const wchar_t * restrict format, ...);
25553          int fwscanf(FILE * restrict stream,
25554               const wchar_t * restrict format, ...);
25555          int swprintf(wchar_t * restrict s, size_t n,
25556               const wchar_t * restrict format, ...);
25557          int swscanf(const wchar_t * restrict s,
25558               const wchar_t * restrict format, ...);
25559          int vfwprintf(FILE * restrict stream,
25560               const wchar_t * restrict format, va_list arg);
25561          int vfwscanf(FILE * restrict stream,
25562               const wchar_t * restrict format, va_list arg);
25563          int vswprintf(wchar_t * restrict s, size_t n,
25564               const wchar_t * restrict format, va_list arg);
25565        int vswscanf(const wchar_t * restrict s,
25566             const wchar_t * restrict format, va_list arg);
25567        int vwprintf(const wchar_t * restrict format,
25568             va_list arg);
25569        int vwscanf(const wchar_t * restrict format,
25570             va_list arg);
25571        int wprintf(const wchar_t * restrict format, ...);
25572        int wscanf(const wchar_t * restrict format, ...);
25573        wint_t fgetwc(FILE *stream);
25574        wchar_t *fgetws(wchar_t * restrict s, int n,
25575             FILE * restrict stream);
25576        wint_t fputwc(wchar_t c, FILE *stream);
25577        int fputws(const wchar_t * restrict s,
25578             FILE * restrict stream);
25579        int fwide(FILE *stream, int mode);
25580        wint_t getwc(FILE *stream);
25581        wint_t getwchar(void);
25582        wint_t putwc(wchar_t c, FILE *stream);
25583        wint_t putwchar(wchar_t c);
25584        wint_t ungetwc(wint_t c, FILE *stream);
25585        double wcstod(const wchar_t * restrict nptr,
25586             wchar_t ** restrict endptr);
25587        float wcstof(const wchar_t * restrict nptr,
25588             wchar_t ** restrict endptr);
25589        long double wcstold(const wchar_t * restrict nptr,
25590             wchar_t ** restrict endptr);
25591        long int wcstol(const wchar_t * restrict nptr,
25592             wchar_t ** restrict endptr, int base);
25593        long long int wcstoll(const wchar_t * restrict nptr,
25594             wchar_t ** restrict endptr, int base);
25595        unsigned long int wcstoul(const wchar_t * restrict nptr,
25596             wchar_t ** restrict endptr, int base);
25597        unsigned long long int wcstoull(
25598             const wchar_t * restrict nptr,
25599             wchar_t ** restrict endptr, int base);
25600        wchar_t *wcscpy(wchar_t * restrict s1,
25601             const wchar_t * restrict s2);
25602        wchar_t *wcsncpy(wchar_t * restrict s1,
25603             const wchar_t * restrict s2, size_t n);
25604          wchar_t *wmemcpy(wchar_t * restrict s1,
25605               const wchar_t * restrict s2, size_t n);
25606          wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
25607               size_t n);
25608          wchar_t *wcscat(wchar_t * restrict s1,
25609               const wchar_t * restrict s2);
25610          wchar_t *wcsncat(wchar_t * restrict s1,
25611               const wchar_t * restrict s2, size_t n);
25612          int wcscmp(const wchar_t *s1, const wchar_t *s2);
25613          int wcscoll(const wchar_t *s1, const wchar_t *s2);
25614          int wcsncmp(const wchar_t *s1, const wchar_t *s2,
25615               size_t n);
25616          size_t wcsxfrm(wchar_t * restrict s1,
25617               const wchar_t * restrict s2, size_t n);
25618          int wmemcmp(const wchar_t *s1, const wchar_t *s2,
25619               size_t n);
25620          wchar_t *wcschr(const wchar_t *s, wchar_t c);
25621          size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
25622          wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);
25623          wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
25624          size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
25625          wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
25626          wchar_t *wcstok(wchar_t * restrict s1,
25627               const wchar_t * restrict s2,
25628               wchar_t ** restrict ptr);
25629          wchar_t *wmemchr(const wchar_t *s, wchar_t c, size_t n);
25630          size_t wcslen(const wchar_t *s);
25631          wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);
25632          size_t wcsftime(wchar_t * restrict s, size_t maxsize,
25633               const wchar_t * restrict format,
25634               const struct tm * restrict timeptr);
25635          wint_t btowc(int c);
25636          int wctob(wint_t c);
25637          int mbsinit(const mbstate_t *ps);
25638          size_t mbrlen(const char * restrict s, size_t n,
25639               mbstate_t * restrict ps);
25640          size_t mbrtowc(wchar_t * restrict pwc,
25641               const char * restrict s, size_t n,
25642               mbstate_t * restrict ps);
25643        size_t wcrtomb(char * restrict s, wchar_t wc,
25644             mbstate_t * restrict ps);
25645        size_t mbsrtowcs(wchar_t * restrict dst,
25646             const char ** restrict src, size_t len,
25647             mbstate_t * restrict ps);
25648        size_t wcsrtombs(char * restrict dst,
25649             const wchar_t ** restrict src, size_t len,
25650             mbstate_t * restrict ps);
25651        __STDC_WANT_LIB_EXT1__
25652        errno_t
25653        rsize_t
25654        int fwprintf_s(FILE * restrict stream,
25655             const wchar_t * restrict format, ...);
25656        int fwscanf_s(FILE * restrict stream,
25657             const wchar_t * restrict format, ...);
25658        int snwprintf_s(wchar_t * restrict s,
25659             rsize_t n,
25660             const wchar_t * restrict format, ...);
25661        int swprintf_s(wchar_t * restrict s, rsize_t n,
25662             const wchar_t * restrict format, ...);
25663        int swscanf_s(const wchar_t * restrict s,
25664             const wchar_t * restrict format, ...);
25665        int vfwprintf_s(FILE * restrict stream,
25666             const wchar_t * restrict format,
25667             va_list arg);
25668        int vfwscanf_s(FILE * restrict stream,
25669             const wchar_t * restrict format, va_list arg);
25670        int vsnwprintf_s(wchar_t * restrict s,
25671             rsize_t n,
25672             const wchar_t * restrict format,
25673             va_list arg);
25674        int vswprintf_s(wchar_t * restrict s,
25675             rsize_t n,
25676             const wchar_t * restrict format,
25677             va_list arg);
25678        int vswscanf_s(const wchar_t * restrict s,
25679             const wchar_t * restrict format,
25680             va_list arg);
25681          int vwprintf_s(const wchar_t * restrict format,
25682               va_list arg);
25683          int vwscanf_s(const wchar_t * restrict format,
25684               va_list arg);
25685          int wprintf_s(const wchar_t * restrict format, ...);
25686          int wscanf_s(const wchar_t * restrict format, ...);
25687          errno_t wcscpy_s(wchar_t * restrict s1,
25688               rsize_t s1max,
25689               const wchar_t * restrict s2);
25690          errno_t wcsncpy_s(wchar_t * restrict s1,
25691               rsize_t s1max,
25692               const wchar_t * restrict s2,
25693               rsize_t n);
25694          errno_t wmemcpy_s(wchar_t * restrict s1,
25695               rsize_t s1max,
25696               const wchar_t * restrict s2,
25697               rsize_t n);
25698          errno_t wmemmove_s(wchar_t *s1, rsize_t s1max,
25699               const wchar_t *s2, rsize_t n);
25700          errno_t wcscat_s(wchar_t * restrict s1,
25701               rsize_t s1max,
25702               const wchar_t * restrict s2);
25703          errno_t wcsncat_s(wchar_t * restrict s1,
25704               rsize_t s1max,
25705               const wchar_t * restrict s2,
25706               rsize_t n);
25707          wchar_t *wcstok_s(wchar_t * restrict s1,
25708               rsize_t * restrict s1max,
25709               const wchar_t * restrict s2,
25710               wchar_t ** restrict ptr);
25711          size_t wcsnlen_s(const wchar_t *s, size_t maxsize);
25712          errno_t wcrtomb_s(size_t * restrict retval,
25713               char * restrict s, rsize_t smax,
25714               wchar_t wc, mbstate_t * restrict ps);
25715          errno_t mbsrtowcs_s(size_t * restrict retval,
25716               wchar_t * restrict dst, rsize_t dstmax,
25717               const char ** restrict src, rsize_t len,
25718               mbstate_t * restrict ps);
25719        errno_t wcsrtombs_s(size_t * restrict retval,
25720             char * restrict dst, rsize_t dstmax,
25721             const wchar_t ** restrict src, rsize_t len,
25722             mbstate_t * restrict ps);
25723 </pre>
25724
25725 <p><small><a href="#Contents">Contents</a></small>
25726 <h3><a name="B.28" href="#B.28">B.28 Wide character classification and mapping utilities &lt;wctype.h&gt;</a></h3>
25727 <!--page 517 -->
25728 <pre>
25729        wint_t          wctrans_t         wctype_t         WEOF
25730        int iswalnum(wint_t wc);
25731        int iswalpha(wint_t wc);
25732        int iswblank(wint_t wc);
25733        int iswcntrl(wint_t wc);
25734        int iswdigit(wint_t wc);
25735        int iswgraph(wint_t wc);
25736        int iswlower(wint_t wc);
25737        int iswprint(wint_t wc);
25738        int iswpunct(wint_t wc);
25739        int iswspace(wint_t wc);
25740        int iswupper(wint_t wc);
25741        int iswxdigit(wint_t wc);
25742        int iswctype(wint_t wc, wctype_t desc);
25743        wctype_t wctype(const char *property);
25744        wint_t towlower(wint_t wc);
25745        wint_t towupper(wint_t wc);
25746        wint_t towctrans(wint_t wc, wctrans_t desc);
25747        wctrans_t wctrans(const char *property);
25748 </pre>
25749
25750 <p><small><a href="#Contents">Contents</a></small>
25751 <h2><a name="C" href="#C">Annex C</a></h2>
25752 <pre>
25753                                      (informative)
25754                                    Sequence points
25755 </pre>
25756 <p><!--para 1 -->
25757  The following are the sequence points described in <a href="#5.1.2.3">5.1.2.3</a>:
25758 <ul>
25759 <li>  Between the evaluations of the function designator and actual arguments in a function
25760  call and the actual call. (<a href="#6.5.2.2">6.5.2.2</a>).
25761 <li>  Between the evaluations of the first and second operands of the following operators:
25762  logical AND &amp;&amp; (<a href="#6.5.13">6.5.13</a>); logical OR || (<a href="#6.5.14">6.5.14</a>); comma , (<a href="#6.5.17">6.5.17</a>).                  *
25763 <li>  Between the evaluations of the first operand of the conditional ? : operator and
25764  whichever of the second and third operands is evaluated (<a href="#6.5.15">6.5.15</a>).
25765 <li>  The end of a full declarator: declarators (<a href="#6.7.6">6.7.6</a>);
25766 <li>  Between the evaluation of a full expression and the next full expression to be
25767  evaluated. The following are full expressions: an initializer that is not part of a
25768  compound literal (<a href="#6.7.9">6.7.9</a>); the expression in an expression statement (<a href="#6.8.3">6.8.3</a>); the
25769  controlling expression of a selection statement (if or switch) (<a href="#6.8.4">6.8.4</a>); the
25770  controlling expression of a while or do statement (<a href="#6.8.5">6.8.5</a>); each of the (optional)
25771  expressions of a for statement (<a href="#6.8.5.3">6.8.5.3</a>); the (optional) expression in a return
25772  statement (<a href="#6.8.6.4">6.8.6.4</a>).
25773 <li>  Immediately before a library function returns (<a href="#7.1.4">7.1.4</a>).
25774 <li>  After the actions associated with each formatted input/output function conversion
25775  specifier (<a href="#7.21.6">7.21.6</a>, <a href="#7.28.2">7.28.2</a>).
25776 <li>  Immediately before and immediately after each call to a comparison function, and
25777  also between any call to a comparison function and any movement of the objects
25778  passed as arguments to that call (<a href="#7.22.5">7.22.5</a>).
25779 <!--page 518 -->
25780 </ul>
25781
25782 <p><small><a href="#Contents">Contents</a></small>
25783 <h2><a name="D" href="#D">Annex D</a></h2>
25784 <pre>
25785                                      (normative)
25786                 Universal character names for identifiers
25787 </pre>
25788 <p><!--para 1 -->
25789  This clause lists the hexadecimal code values that are valid in universal character names
25790  in identifiers.
25791
25792 <p><small><a href="#Contents">Contents</a></small>
25793 <h3><a name="D.1" href="#D.1">D.1 Ranges of characters allowed</a></h3>
25794 <p><!--para 1 -->
25795  00A8, 00AA, 00AD, 00AF, 00B2-00B5, 00B7-00BA, 00BC-00BE, 00C0-00D6,
25796  00D8-00F6, 00F8-00FF
25797 <p><!--para 2 -->
25798  0100-167F, 1681-180D, 180F-1FFF
25799 <p><!--para 3 -->
25800  200B-200D, 202A-202E, 203F-2040, 2054, 2060-206F
25801 <p><!--para 4 -->
25802  2070-218F, 2460-24FF, 2776-2793, 2C00-2DFF, 2E80-2FFF
25803 <p><!--para 5 -->
25804  3004-3007, 3021-302F, 3031-303F
25805 <p><!--para 6 -->
25806  3040-D7FF
25807 <p><!--para 7 -->
25808  F900-FD3D, FD40-FDCF, FDF0-FE44, FE47-FFFD
25809 <p><!--para 8 -->
25810  10000-1FFFD, 20000-2FFFD, 30000-3FFFD, 40000-4FFFD, 50000-5FFFD,
25811  60000-6FFFD, 70000-7FFFD, 80000-8FFFD, 90000-9FFFD, A0000-AFFFD,
25812  B0000-BFFFD, C0000-CFFFD, D0000-DFFFD, E0000-EFFFD
25813
25814 <p><small><a href="#Contents">Contents</a></small>
25815 <h3><a name="D.2" href="#D.2">D.2 Ranges of characters disallowed initially</a></h3>
25816 <p><!--para 1 -->
25817  0300-036F, 1DC0-1DFF, 20D0-20FF, FE20-FE2F
25818 <!--page 519 -->
25819
25820 <p><small><a href="#Contents">Contents</a></small>
25821 <h2><a name="E" href="#E">Annex E</a></h2>
25822 <pre>
25823                                     (informative)
25824                              Implementation limits
25825 </pre>
25826 <p><!--para 1 -->
25827  The contents of the header <a href="#7.10">&lt;limits.h&gt;</a> are given below, in alphabetical order. The
25828  minimum magnitudes shown shall be replaced by implementation-defined magnitudes
25829  with the same sign. The values shall all be constant expressions suitable for use in #if
25830  preprocessing directives. The components are described further in <a href="#5.2.4.2.1">5.2.4.2.1</a>.
25831 <pre>
25832          #define    CHAR_BIT                               8
25833          #define    CHAR_MAX          UCHAR_MAX or SCHAR_MAX
25834          #define    CHAR_MIN                  0 or SCHAR_MIN
25835          #define    INT_MAX                           +32767
25836          #define    INT_MIN                           -32767
25837          #define    LONG_MAX                     +2147483647
25838          #define    LONG_MIN                     -2147483647
25839          #define    LLONG_MAX           +9223372036854775807
25840          #define    LLONG_MIN           -9223372036854775807
25841          #define    MB_LEN_MAX                             1
25842          #define    SCHAR_MAX                           +127
25843          #define    SCHAR_MIN                           -127
25844          #define    SHRT_MAX                          +32767
25845          #define    SHRT_MIN                          -32767
25846          #define    UCHAR_MAX                            255
25847          #define    USHRT_MAX                          65535
25848          #define    UINT_MAX                           65535
25849          #define    ULONG_MAX                     4294967295
25850          #define    ULLONG_MAX          18446744073709551615
25851 </pre>
25852 <p><!--para 2 -->
25853  The contents of the header <a href="#7.7">&lt;float.h&gt;</a> are given below. All integer values, except
25854  FLT_ROUNDS, shall be constant expressions suitable for use in #if preprocessing
25855  directives; all floating values shall be constant expressions. The components are
25856  described further in <a href="#5.2.4.2.2">5.2.4.2.2</a>.
25857 <p><!--para 3 -->
25858  The values given in the following list shall be replaced by implementation-defined
25859  expressions:
25860 <pre>
25861          #define FLT_EVAL_METHOD
25862          #define FLT_ROUNDS
25863 </pre>
25864 <p><!--para 4 -->
25865  The values given in the following list shall be replaced by implementation-defined
25866  constant expressions that are greater or equal in magnitude (absolute value) to those
25867  shown, with the same sign:
25868 <!--page 520 -->
25869 <pre>
25870         #define    DLB_DECIMAL_DIG                                10
25871         #define    DBL_DIG                                        10
25872         #define    DBL_MANT_DIG
25873         #define    DBL_MAX_10_EXP                               +37
25874         #define    DBL_MAX_EXP
25875         #define    DBL_MIN_10_EXP                               -37
25876         #define    DBL_MIN_EXP
25877         #define    DECIMAL_DIG                                    10
25878         #define    FLT_DECIMAL_DIG                                 6
25879         #define    FLT_DIG                                         6
25880         #define    FLT_MANT_DIG
25881         #define    FLT_MAX_10_EXP                               +37
25882         #define    FLT_MAX_EXP
25883         #define    FLT_MIN_10_EXP                               -37
25884         #define    FLT_MIN_EXP
25885         #define    FLT_RADIX                                       2
25886         #define    LDLB_DECIMAL_DIG                               10
25887         #define    LDBL_DIG                                       10
25888         #define    LDBL_MANT_DIG
25889         #define    LDBL_MAX_10_EXP                              +37
25890         #define    LDBL_MAX_EXP
25891         #define    LDBL_MIN_10_EXP                              -37
25892         #define    LDBL_MIN_EXP
25893 </pre>
25894 <p><!--para 5 -->
25895  The values given in the following list shall be replaced by implementation-defined
25896  constant expressions with values that are greater than or equal to those shown:
25897 <pre>
25898         #define DBL_MAX                                      1E+37
25899         #define FLT_MAX                                      1E+37
25900         #define LDBL_MAX                                     1E+37
25901 </pre>
25902 <p><!--para 6 -->
25903  The values given in the following list shall be replaced by implementation-defined
25904  constant expressions with (positive) values that are less than or equal to those shown:
25905 <!--page 521 -->
25906 <pre>
25907         #define    DBL_EPSILON                                1E-9
25908         #define    DBL_MIN                                   1E-37
25909         #define    FLT_EPSILON                                1E-5
25910         #define    FLT_MIN                                   1E-37
25911         #define    LDBL_EPSILON                               1E-9
25912         #define    LDBL_MIN                                  1E-37
25913 </pre>
25914
25915 <p><small><a href="#Contents">Contents</a></small>
25916 <h2><a name="F" href="#F">Annex F</a></h2>
25917 <pre>
25918                                            (normative)
25919                        IEC 60559 floating-point arithmetic
25920 </pre>
25921
25922 <p><small><a href="#Contents">Contents</a></small>
25923 <h3><a name="F.1" href="#F.1">F.1 Introduction</a></h3>
25924 <p><!--para 1 -->
25925  This annex specifies C language support for the IEC 60559 floating-point standard. The
25926  IEC 60559 floating-point standard is specifically Binary floating-point arithmetic for
25927  microprocessor systems, second edition (IEC 60559:1989), previously designated
25928  IEC 559:1989 and as IEEE Standard for Binary Floating-Point Arithmetic
25929  (ANSI/IEEE 754-1985). IEEE Standard for Radix-Independent Floating-Point
25930  Arithmetic (ANSI/IEEE 854-1987) generalizes the binary standard to remove
25931  dependencies on radix and word length. IEC 60559 generally refers to the floating-point
25932  standard, as in IEC 60559 operation, IEC 60559 format, etc. An implementation that
25933  defines __STDC_IEC_559__ shall conform to the specifications in this annex.<sup><a href="#note343"><b>343)</b></a></sup>
25934  Where a binding between the C language and IEC 60559 is indicated, the
25935  IEC 60559-specified behavior is adopted by reference, unless stated otherwise. Since
25936  negative and positive infinity are representable in IEC 60559 formats, all real numbers lie
25937  within the range of representable values.
25938
25939 <p><b>Footnotes</b>
25940 <p><small><a name="note343" href="#note343">343)</a> Implementations that do not define __STDC_IEC_559__ are not required to conform to these
25941  specifications.
25942 </small>
25943
25944 <p><small><a href="#Contents">Contents</a></small>
25945 <h3><a name="F.2" href="#F.2">F.2 Types</a></h3>
25946 <p><!--para 1 -->
25947  The C floating types match the IEC 60559 formats as follows:
25948 <ul>
25949 <li>  The float type matches the IEC 60559 single format.
25950 <li>  The double type matches the IEC 60559 double format.
25951 <li>  The long double type matches an IEC 60559 extended format,<sup><a href="#note344"><b>344)</b></a></sup> else a
25952  non-IEC 60559 extended format, else the IEC 60559 double format.
25953 </ul>
25954  Any non-IEC 60559 extended format used for the long double type shall have more
25955  precision than IEC 60559 double and at least the range of IEC 60559 double.<sup><a href="#note345"><b>345)</b></a></sup>
25956  
25957  
25958  
25959  
25960 <!--page 522 -->
25961 <p><b>Recommended practice</b>
25962 <p><!--para 2 -->
25963  The long double type should match an IEC 60559 extended format.
25964
25965 <p><b>Footnotes</b>
25966 <p><small><a name="note344" href="#note344">344)</a> ''Extended'' is IEC 60559's double-extended data format. Extended refers to both the common 80-bit
25967  and quadruple 128-bit IEC 60559 formats.
25968 </small>
25969 <p><small><a name="note345" href="#note345">345)</a> A non-IEC 60559 long double type is required to provide infinity and NaNs, as its values include
25970  all double values.
25971 </small>
25972
25973 <p><small><a href="#Contents">Contents</a></small>
25974 <h4><a name="F.2.1" href="#F.2.1">F.2.1 Infinities, signed zeros, and NaNs</a></h4>
25975 <p><!--para 1 -->
25976  This specification does not define the behavior of signaling NaNs.<sup><a href="#note346"><b>346)</b></a></sup> It generally uses
25977  the term NaN to denote quiet NaNs. The NAN and INFINITY macros and the nan
25978  functions in <a href="#7.12">&lt;math.h&gt;</a> provide designations for IEC 60559 NaNs and infinities.
25979
25980 <p><b>Footnotes</b>
25981 <p><small><a name="note346" href="#note346">346)</a> Since NaNs created by IEC 60559 operations are always quiet, quiet NaNs (along with infinities) are
25982  sufficient for closure of the arithmetic.
25983 </small>
25984
25985 <p><small><a href="#Contents">Contents</a></small>
25986 <h3><a name="F.3" href="#F.3">F.3 Operators and functions</a></h3>
25987 <p><!--para 1 -->
25988  C operators and functions provide IEC 60559 required and recommended facilities as
25989  listed below.
25990 <ul>
25991 <li>  The +, -, *, and / operators provide the IEC 60559 add, subtract, multiply, and
25992  divide operations.
25993 <li>  The sqrt functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 square root operation.
25994 <li>  The remainder functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 remainder
25995  operation. The remquo functions in <a href="#7.12">&lt;math.h&gt;</a> provide the same operation but
25996  with additional information.
25997 <li>  The rint functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 operation that rounds a
25998  floating-point number to an integer value (in the same precision). The nearbyint
25999  functions in <a href="#7.12">&lt;math.h&gt;</a> provide the nearbyinteger function recommended in the
26000  Appendix to ANSI/IEEE 854.
26001 <li>  The conversions for floating types provide the IEC 60559 conversions between
26002  floating-point precisions.
26003 <li>  The conversions from integer to floating types provide the IEC 60559 conversions
26004  from integer to floating point.
26005 <li>  The conversions from floating to integer types provide IEC 60559-like conversions
26006  but always round toward zero.
26007 <li>  The lrint and llrint functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559
26008  conversions, which honor the directed rounding mode, from floating point to the
26009  long int and long long int integer formats. The lrint and llrint
26010  functions can be used to implement IEC 60559 conversions from floating to other
26011  integer formats.
26012 <li>  The translation time conversion of floating constants and the strtod, strtof,
26013  strtold, fprintf, fscanf, and related library functions in <a href="#7.22">&lt;stdlib.h&gt;</a>,
26014  
26015  
26016 <!--page 523 -->
26017   <a href="#7.21">&lt;stdio.h&gt;</a>, and <a href="#7.28">&lt;wchar.h&gt;</a> provide IEC 60559 binary-decimal conversions. The
26018   strtold function in <a href="#7.22">&lt;stdlib.h&gt;</a> provides the conv function recommended in the
26019   Appendix to ANSI/IEEE 854.
26020 <li>  The relational and equality operators provide IEC 60559 comparisons. IEC 60559
26021  identifies a need for additional comparison predicates to facilitate writing code that
26022  accounts for NaNs. The comparison macros (isgreater, isgreaterequal,
26023  isless, islessequal, islessgreater, and isunordered) in <a href="#7.12">&lt;math.h&gt;</a>
26024  supplement the language operators to address this need. The islessgreater and
26025  isunordered macros provide respectively a quiet version of the &lt;&gt; predicate and
26026  the unordered predicate recommended in the Appendix to IEC 60559.
26027 <li>  The feclearexcept, feraiseexcept, and fetestexcept functions in
26028  <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility to test and alter the IEC 60559 floating-point
26029  exception status flags. The fegetexceptflag and fesetexceptflag
26030  functions in <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility to save and restore all five status flags at
26031  one time. These functions are used in conjunction with the type fexcept_t and the
26032  floating-point     exception      macros      (FE_INEXACT,         FE_DIVBYZERO,
26033  FE_UNDERFLOW, FE_OVERFLOW, FE_INVALID) also in <a href="#7.6">&lt;fenv.h&gt;</a>.
26034 <li>  The fegetround and fesetround functions in <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility
26035  to select among the IEC 60559 directed rounding modes represented by the rounding
26036  direction macros in <a href="#7.6">&lt;fenv.h&gt;</a> (FE_TONEAREST, FE_UPWARD, FE_DOWNWARD,
26037  FE_TOWARDZERO) and the values 0, 1, 2, and 3 of FLT_ROUNDS are the
26038  IEC 60559 directed rounding modes.
26039 <li>  The fegetenv, feholdexcept, fesetenv, and feupdateenv functions in
26040  <a href="#7.6">&lt;fenv.h&gt;</a> provide a facility to manage the floating-point environment, comprising
26041  the IEC 60559 status flags and control modes.
26042 <li>  The copysign functions in <a href="#7.12">&lt;math.h&gt;</a> provide the copysign function
26043  recommended in the Appendix to IEC 60559.
26044 <li>  The fabs functions in <a href="#7.12">&lt;math.h&gt;</a> provide the abs function recommended in the
26045  Appendix to IEC 60559.
26046 <li>  The unary minus (-) operator provides the unary minus (-) operation recommended
26047  in the Appendix to IEC 60559.
26048 <li>  The scalbn and scalbln functions in <a href="#7.12">&lt;math.h&gt;</a> provide the scalb function
26049  recommended in the Appendix to IEC 60559.
26050 <li>  The logb functions in <a href="#7.12">&lt;math.h&gt;</a> provide the logb function recommended in the
26051  Appendix to IEC 60559, but following the newer specifications in ANSI/IEEE 854.
26052 <li>  The nextafter and nexttoward functions in <a href="#7.12">&lt;math.h&gt;</a> provide the nextafter
26053  function recommended in the Appendix to IEC 60559 (but with a minor change to
26054 <!--page 524 -->
26055    better handle signed zeros).
26056 <li>  The isfinite macro in <a href="#7.12">&lt;math.h&gt;</a> provides the finite function recommended in
26057  the Appendix to IEC 60559.
26058 <li>  The isnan macro in <a href="#7.12">&lt;math.h&gt;</a> provides the isnan function recommended in the
26059  Appendix to IEC 60559.
26060 <li>  The signbit macro and the fpclassify macro in <a href="#7.12">&lt;math.h&gt;</a>, used in
26061  conjunction with the number classification macros (FP_NAN, FP_INFINITE,
26062  FP_NORMAL, FP_SUBNORMAL, FP_ZERO), provide the facility of the class
26063  function recommended in the Appendix to IEC 60559 (except that the classification
26064  macros defined in <a href="#7.12.3">7.12.3</a> do not distinguish signaling from quiet NaNs).
26065 </ul>
26066
26067 <p><small><a href="#Contents">Contents</a></small>
26068 <h3><a name="F.4" href="#F.4">F.4 Floating to integer conversion</a></h3>
26069 <p><!--para 1 -->
26070  If the integer type is _Bool, <a href="#6.3.1.2">6.3.1.2</a> applies and no floating-point exceptions are raised
26071  (even for NaN). Otherwise, if the floating value is infinite or NaN or if the integral part
26072  of the floating value exceeds the range of the integer type, then the ''invalid'' floating-
26073  point exception is raised and the resulting value is unspecified. Otherwise, the resulting
26074  value is determined by <a href="#6.3.1.4">6.3.1.4</a>. Conversion of an integral floating value that does not
26075  exceed the range of the integer type raises no floating-point exceptions; whether
26076  conversion of a non-integral floating value raises the ''inexact'' floating-point exception is
26077  unspecified.<sup><a href="#note347"><b>347)</b></a></sup>
26078
26079 <p><b>Footnotes</b>
26080 <p><small><a name="note347" href="#note347">347)</a> ANSI/IEEE 854, but not IEC 60559 (ANSI/IEEE 754), directly specifies that floating-to-integer
26081  conversions raise the ''inexact'' floating-point exception for non-integer in-range values. In those
26082  cases where it matters, library functions can be used to effect such conversions with or without raising
26083  the ''inexact'' floating-point exception. See rint, lrint, llrint, and nearbyint in
26084  <a href="#7.12">&lt;math.h&gt;</a>.
26085 </small>
26086
26087 <p><small><a href="#Contents">Contents</a></small>
26088 <h3><a name="F.5" href="#F.5">F.5 Binary-decimal conversion</a></h3>
26089 <p><!--para 1 -->
26090  Conversion from the widest supported IEC 60559 format to decimal with
26091  DECIMAL_DIG digits and back is the identity function.<sup><a href="#note348"><b>348)</b></a></sup>
26092 <p><!--para 2 -->
26093  Conversions involving IEC 60559 formats follow all pertinent recommended practice. In
26094  particular, conversion between any supported IEC 60559 format and decimal with
26095  DECIMAL_DIG or fewer significant digits is correctly rounded (honoring the current
26096  rounding mode), which assures that conversion from the widest supported IEC 60559
26097  format to decimal with DECIMAL_DIG digits and back is the identity function.
26098  
26099  
26100  
26101 <!--page 525 -->
26102 <p><!--para 3 -->
26103  Functions such as strtod that convert character sequences to floating types honor the
26104  rounding direction. Hence, if the rounding direction might be upward or downward, the
26105  implementation cannot convert a minus-signed sequence by negating the converted
26106  unsigned sequence.
26107
26108 <p><b>Footnotes</b>
26109 <p><small><a name="note348" href="#note348">348)</a> If the minimum-width IEC 60559 extended format (64 bits of precision) is supported,
26110  DECIMAL_DIG shall be at least 21. If IEC 60559 double (53 bits of precision) is the widest
26111  IEC 60559 format supported, then DECIMAL_DIG shall be at least 17. (By contrast, LDBL_DIG and
26112  DBL_DIG are 18 and 15, respectively, for these formats.)
26113 </small>
26114
26115 <p><small><a href="#Contents">Contents</a></small>
26116 <h3><a name="F.6" href="#F.6">F.6 The return statement</a></h3>
26117  If the return expression is evaluated in a floating-point format different from the return
26118  type, the expression is converted as if by assignment<sup><a href="#note349"><b>349)</b></a></sup> to the return type of the function
26119  and the resulting value is returned to the caller.
26120
26121 <p><b>Footnotes</b>
26122 <p><small><a name="note349" href="#note349">349)</a> Assignment removes any extra range and precision.
26123 </small>
26124
26125 <p><small><a href="#Contents">Contents</a></small>
26126 <h3><a name="F.7" href="#F.7">F.7 Contracted expressions</a></h3>
26127 <p><!--para 1 -->
26128  A contracted expression is correctly rounded (once) and treats infinities, NaNs, signed
26129  zeros, subnormals, and the rounding directions in a manner consistent with the basic
26130  arithmetic operations covered by IEC 60559.
26131 <p><b>Recommended practice</b>
26132 <p><!--para 2 -->
26133  A contracted expression should raise floating-point exceptions in a manner generally
26134  consistent with the basic arithmetic operations.                                    *
26135
26136 <p><small><a href="#Contents">Contents</a></small>
26137 <h3><a name="F.8" href="#F.8">F.8 Floating-point environment</a></h3>
26138 <p><!--para 1 -->
26139  The floating-point environment defined in <a href="#7.6">&lt;fenv.h&gt;</a> includes the IEC 60559 floating-
26140  point exception status flags and directed-rounding control modes. It includes also
26141  IEC 60559 dynamic rounding precision and trap enablement modes, if the
26142  implementation supports them.<sup><a href="#note350"><b>350)</b></a></sup>
26143
26144 <p><b>Footnotes</b>
26145 <p><small><a name="note350" href="#note350">350)</a> This specification does not require dynamic rounding precision nor trap enablement modes.
26146 </small>
26147
26148 <p><small><a href="#Contents">Contents</a></small>
26149 <h4><a name="F.8.1" href="#F.8.1">F.8.1 Environment management</a></h4>
26150 <p><!--para 1 -->
26151  IEC 60559 requires that floating-point operations implicitly raise floating-point exception
26152  status flags, and that rounding control modes can be set explicitly to affect result values of
26153  floating-point operations. When the state for the FENV_ACCESS pragma (defined in
26154  <a href="#7.6">&lt;fenv.h&gt;</a>) is ''on'', these changes to the floating-point state are treated as side effects
26155  which respect sequence points.<sup><a href="#note351"><b>351)</b></a></sup>
26156  
26157  
26158  
26159  
26160 <!--page 526 -->
26161
26162 <p><b>Footnotes</b>
26163 <p><small><a name="note351" href="#note351">351)</a> If the state for the FENV_ACCESS pragma is ''off'', the implementation is free to assume the floating-
26164  point control modes will be the default ones and the floating-point status flags will not be tested,
26165  which allows certain optimizations (see <a href="#F.9">F.9</a>).
26166 </small>
26167
26168 <p><small><a href="#Contents">Contents</a></small>
26169 <h4><a name="F.8.2" href="#F.8.2">F.8.2 Translation</a></h4>
26170 <p><!--para 1 -->
26171  During translation the IEC 60559 default modes are in effect:
26172 <ul>
26173 <li>  The rounding direction mode is rounding to nearest.
26174 <li>  The rounding precision mode (if supported) is set so that results are not shortened.
26175 <li>  Trapping or stopping (if supported) is disabled on all floating-point exceptions.
26176 </ul>
26177 <p><b>Recommended practice</b>
26178 <p><!--para 2 -->
26179  The implementation should produce a diagnostic message for each translation-time
26180  floating-point exception, other than ''inexact'';<sup><a href="#note352"><b>352)</b></a></sup> the implementation should then
26181  proceed with the translation of the program.
26182
26183 <p><b>Footnotes</b>
26184 <p><small><a name="note352" href="#note352">352)</a> As floating constants are converted to appropriate internal representations at translation time, their
26185  conversion is subject to default rounding modes and raises no execution-time floating-point exceptions
26186  (even where the state of the FENV_ACCESS pragma is ''on''). Library functions, for example
26187  strtod, provide execution-time conversion of numeric strings.
26188 </small>
26189
26190 <p><small><a href="#Contents">Contents</a></small>
26191 <h4><a name="F.8.3" href="#F.8.3">F.8.3 Execution</a></h4>
26192 <p><!--para 1 -->
26193  At program startup the floating-point environment is initialized as prescribed by
26194  IEC 60559:
26195 <ul>
26196 <li>  All floating-point exception status flags are cleared.
26197 <li>  The rounding direction mode is rounding to nearest.
26198 <li>  The dynamic rounding precision mode (if supported) is set so that results are not
26199  shortened.
26200 <li>  Trapping or stopping (if supported) is disabled on all floating-point exceptions.
26201 </ul>
26202
26203 <p><small><a href="#Contents">Contents</a></small>
26204 <h4><a name="F.8.4" href="#F.8.4">F.8.4 Constant expressions</a></h4>
26205 <p><!--para 1 -->
26206  An arithmetic constant expression of floating type, other than one in an initializer for an
26207  object that has static or thread storage duration, is evaluated (as if) during execution; thus,
26208  it is affected by any operative floating-point control modes and raises floating-point
26209  exceptions as required by IEC 60559 (provided the state for the FENV_ACCESS pragma
26210  is ''on'').<sup><a href="#note353"><b>353)</b></a></sup>
26211 <p><!--para 2 -->
26212  EXAMPLE
26213  
26214  
26215  
26216 <!--page 527 -->
26217 <pre>
26218           #include <a href="#7.6">&lt;fenv.h&gt;</a>
26219           #pragma STDC FENV_ACCESS ON
26220           void f(void)
26221           {
26222                 float w[] = { 0.0/0.0 };                  //   raises an exception
26223                 static float x = 0.0/0.0;                 //   does not raise an exception
26224                 float y = 0.0/0.0;                        //   raises an exception
26225                 double z = 0.0/0.0;                       //   raises an exception
26226                 /* ... */
26227           }
26228 </pre>
26229 <p><!--para 3 -->
26230  For the static initialization, the division is done at translation time, raising no (execution-time) floating-
26231  point exceptions. On the other hand, for the three automatic initializations the invalid division occurs at
26232  execution time.
26233  
26234
26235 <p><b>Footnotes</b>
26236 <p><small><a name="note353" href="#note353">353)</a> Where the state for the FENV_ACCESS pragma is ''on'', results of inexact expressions like 1.0/3.0
26237  are affected by rounding modes set at execution time, and expressions such as 0.0/0.0 and
26238  1.0/0.0 generate execution-time floating-point exceptions. The programmer can achieve the
26239  efficiency of translation-time evaluation through static initialization, such as
26240
26241 <pre>
26242           const static double one_third = 1.0/3.0;
26243 </pre>
26244 </small>
26245
26246 <p><small><a href="#Contents">Contents</a></small>
26247 <h4><a name="F.8.5" href="#F.8.5">F.8.5 Initialization</a></h4>
26248 <p><!--para 1 -->
26249  All computation for automatic initialization is done (as if) at execution time; thus, it is
26250  affected by any operative modes and raises floating-point exceptions as required by
26251  IEC 60559 (provided the state for the FENV_ACCESS pragma is ''on''). All computation
26252  for initialization of objects that have static or thread storage duration is done (as if) at
26253  translation time.
26254 <p><!--para 2 -->
26255  EXAMPLE
26256 <pre>
26257           #include <a href="#7.6">&lt;fenv.h&gt;</a>
26258           #pragma STDC FENV_ACCESS ON
26259           void f(void)
26260           {
26261                 float u[] = { 1.1e75 };                  //   raises exceptions
26262                 static float v = 1.1e75;                 //   does not raise exceptions
26263                 float w = 1.1e75;                        //   raises exceptions
26264                 double x = 1.1e75;                       //   may raise exceptions
26265                 float y = 1.1e75f;                       //   may raise exceptions
26266                 long double z = 1.1e75;                  //   does not raise exceptions
26267                 /* ... */
26268           }
26269 </pre>
26270 <p><!--para 3 -->
26271  The static initialization of v raises no (execution-time) floating-point exceptions because its computation is
26272  done at translation time. The automatic initialization of u and w require an execution-time conversion to
26273  float of the wider value 1.1e75, which raises floating-point exceptions. The automatic initializations
26274  of x and y entail execution-time conversion; however, in some expression evaluation methods, the
26275  conversions is not to a narrower format, in which case no floating-point exception is raised.<sup><a href="#note354"><b>354)</b></a></sup> The
26276  automatic initialization of z entails execution-time conversion, but not to a narrower format, so no floating-
26277  point exception is raised. Note that the conversions of the floating constants 1.1e75 and 1.1e75f to
26278  
26279  
26280  
26281 <!--page 528 -->
26282  their internal representations occur at translation time in all cases.
26283  
26284
26285 <p><b>Footnotes</b>
26286 <p><small><a name="note354" href="#note354">354)</a> Use of float_t and double_t variables increases the likelihood of translation-time computation.
26287  For example, the automatic initialization
26288
26289 <pre>
26290           double_t x = 1.1e75;
26291 </pre>
26292  could be done at translation time, regardless of the expression evaluation method.
26293 </small>
26294
26295 <p><small><a href="#Contents">Contents</a></small>
26296 <h4><a name="F.8.6" href="#F.8.6">F.8.6 Changing the environment</a></h4>
26297 <p><!--para 1 -->
26298  Operations defined in <a href="#6.5">6.5</a> and functions and macros defined for the standard libraries
26299  change floating-point status flags and control modes just as indicated by their
26300  specifications (including conformance to IEC 60559). They do not change flags or modes
26301  (so as to be detectable by the user) in any other cases.
26302 <p><!--para 2 -->
26303  If the argument to the feraiseexcept function in <a href="#7.6">&lt;fenv.h&gt;</a> represents IEC 60559
26304  valid coincident floating-point exceptions for atomic operations (namely ''overflow'' and
26305  ''inexact'', or ''underflow'' and ''inexact''), then ''overflow'' or ''underflow'' is raised
26306  before ''inexact''.
26307
26308 <p><small><a href="#Contents">Contents</a></small>
26309 <h3><a name="F.9" href="#F.9">F.9 Optimization</a></h3>
26310 <p><!--para 1 -->
26311  This section identifies code transformations that might subvert IEC 60559-specified
26312  behavior, and others that do not.
26313
26314 <p><small><a href="#Contents">Contents</a></small>
26315 <h4><a name="F.9.1" href="#F.9.1">F.9.1 Global transformations</a></h4>
26316 <p><!--para 1 -->
26317  Floating-point arithmetic operations and external function calls may entail side effects
26318  which optimization shall honor, at least where the state of the FENV_ACCESS pragma is
26319  ''on''. The flags and modes in the floating-point environment may be regarded as global
26320  variables; floating-point operations (+, *, etc.) implicitly read the modes and write the
26321  flags.
26322 <p><!--para 2 -->
26323  Concern about side effects may inhibit code motion and removal of seemingly useless
26324  code. For example, in
26325 <pre>
26326           #include <a href="#7.6">&lt;fenv.h&gt;</a>
26327           #pragma STDC FENV_ACCESS ON
26328           void f(double x)
26329           {
26330                /* ... */
26331                for (i = 0; i &lt; n; i++) x + 1;
26332                /* ... */
26333           }
26334 </pre>
26335  x + 1 might raise floating-point exceptions, so cannot be removed. And since the loop
26336  body might not execute (maybe 0 &gt;= n), x + 1 cannot be moved out of the loop. (Of
26337  course these optimizations are valid if the implementation can rule out the nettlesome
26338  cases.)
26339 <p><!--para 3 -->
26340  This specification does not require support for trap handlers that maintain information
26341  about the order or count of floating-point exceptions. Therefore, between function calls,
26342  floating-point exceptions need not be precise: the actual order and number of occurrences
26343  of floating-point exceptions (&gt; 1) may vary from what the source code expresses. Thus,
26344 <!--page 529 -->
26345  the preceding loop could be treated as
26346 <pre>
26347           if (0 &lt; n) x + 1;
26348 </pre>
26349
26350 <p><small><a href="#Contents">Contents</a></small>
26351 <h4><a name="F.9.2" href="#F.9.2">F.9.2 Expression transformations</a></h4>
26352 <p><!--para 1 -->
26353  x/2 &lt;-&gt; x x 0.5          Although similar transformations involving inexact constants
26354 <pre>
26355                         generally do not yield numerically equivalent expressions, if the
26356                         constants are exact then such transformations can be made on
26357                         IEC 60559 machines and others that round perfectly.
26358 </pre>
26359  1 x x and x/1 -&gt; x The expressions 1 x x, x/1, and x are equivalent (on IEC 60559
26360 <pre>
26361                    machines, among others).<sup><a href="#note355"><b>355)</b></a></sup>
26362 </pre>
26363  x/x -&gt; 1.0             The expressions x/x and 1.0 are not equivalent if x can be zero,
26364 <pre>
26365                         infinite, or NaN.
26366 </pre>
26367  x - y &lt;-&gt; x + (-y)       The expressions x - y, x + (-y), and (-y) + x are equivalent (on
26368 <pre>
26369                         IEC 60559 machines, among others).
26370 </pre>
26371  x - y &lt;-&gt; -(y - x)       The expressions x - y and -(y - x) are not equivalent because 1 - 1
26372 <pre>
26373                         is +0 but -(1 - 1) is -0 (in the default rounding direction).<sup><a href="#note356"><b>356)</b></a></sup>
26374 </pre>
26375  x - x -&gt; 0.0           The expressions x - x and 0.0 are not equivalent if x is a NaN or
26376 <pre>
26377                         infinite.
26378 </pre>
26379  0 x x -&gt; 0.0           The expressions 0 x x and 0.0 are not equivalent if x is a NaN,
26380 <pre>
26381                         infinite, or -0.
26382 </pre>
26383  x+0-&gt; x                 The expressions x + 0 and x are not equivalent if x is -0, because
26384 <pre>
26385                         (-0) + (+0) yields +0 (in the default rounding direction), not -0.
26386 </pre>
26387  x-0-&gt; x                 (+0) - (+0) yields -0 when rounding is downward (toward -(inf)), but
26388 <pre>
26389                         +0 otherwise, and (-0) - (+0) always yields -0; so, if the state of the
26390                         FENV_ACCESS pragma is ''off'', promising default rounding, then
26391                         the implementation can replace x - 0 by x, even if x might be zero.
26392 </pre>
26393  -x &lt;-&gt; 0 - x             The expressions -x and 0 - x are not equivalent if x is +0, because
26394 <pre>
26395                         -(+0) yields -0, but 0 - (+0) yields +0 (unless rounding is
26396                         downward).
26397 </pre>
26398  
26399 <!--page 530 -->
26400
26401 <p><b>Footnotes</b>
26402 <p><small><a name="note355" href="#note355">355)</a> Strict support for signaling NaNs -- not required by this specification -- would invalidate these and
26403  other transformations that remove arithmetic operators.
26404 </small>
26405 <p><small><a name="note356" href="#note356">356)</a> IEC 60559 prescribes a signed zero to preserve mathematical identities across certain discontinuities.
26406  Examples include:
26407
26408 <pre>
26409     1/(1/ (+-) (inf)) is (+-) (inf)
26410 </pre>
26411  and
26412
26413 <pre>
26414     conj(csqrt(z)) is csqrt(conj(z)),
26415 </pre>
26416  for complex z.
26417 </small>
26418
26419 <p><small><a href="#Contents">Contents</a></small>
26420 <h4><a name="F.9.3" href="#F.9.3">F.9.3 Relational operators</a></h4>
26421 <p><!--para 1 -->
26422  x != x -&gt; false           The expression x != x is true if x is a NaN.
26423  x = x -&gt; true            The expression x = x is false if x is a NaN.
26424  x &lt; y -&gt; isless(x,y) (and similarly for &lt;=, &gt;, &gt;=) Though numerically equal, these
26425 <pre>
26426                 expressions are not equivalent because of side effects when x or y is a
26427                 NaN and the state of the FENV_ACCESS pragma is ''on''. This
26428                 transformation, which would be desirable if extra code were required
26429                 to cause the ''invalid'' floating-point exception for unordered cases,
26430                 could be performed provided the state of the FENV_ACCESS pragma
26431                 is ''off''.
26432 </pre>
26433  The sense of relational operators shall be maintained. This includes handling unordered
26434  cases as expressed by the source code.
26435 <p><!--para 2 -->
26436  EXAMPLE
26437 <pre>
26438           // calls g and raises ''invalid'' if a and b are unordered
26439           if (a &lt; b)
26440                   f();
26441           else
26442                   g();
26443 </pre>
26444  is not equivalent to
26445 <pre>
26446           // calls f and raises ''invalid'' if a and b are unordered
26447           if (a &gt;= b)
26448                   g();
26449           else
26450                   f();
26451 </pre>
26452  nor to
26453 <pre>
26454           // calls f without raising ''invalid'' if a and b are unordered
26455           if (isgreaterequal(a,b))
26456                   g();
26457           else
26458                   f();
26459 </pre>
26460  nor, unless the state of the FENV_ACCESS pragma is ''off'', to
26461 <pre>
26462           // calls g without raising ''invalid'' if a and b are unordered
26463           if (isless(a,b))
26464                   f();
26465           else
26466                   g();
26467 </pre>
26468  but is equivalent to
26469 <!--page 531 -->
26470 <pre>
26471          if (!(a &lt; b))
26472                g();
26473          else
26474                f();
26475 </pre>
26476  
26477
26478 <p><small><a href="#Contents">Contents</a></small>
26479 <h4><a name="F.9.4" href="#F.9.4">F.9.4 Constant arithmetic</a></h4>
26480 <p><!--para 1 -->
26481  The implementation shall honor floating-point exceptions raised by execution-time
26482  constant arithmetic wherever the state of the FENV_ACCESS pragma is ''on''. (See <a href="#F.8.4">F.8.4</a>
26483  and <a href="#F.8.5">F.8.5</a>.) An operation on constants that raises no floating-point exception can be
26484  folded during translation, except, if the state of the FENV_ACCESS pragma is ''on'', a
26485  further check is required to assure that changing the rounding direction to downward does
26486  not alter the sign of the result,<sup><a href="#note357"><b>357)</b></a></sup> and implementations that support dynamic rounding
26487  precision modes shall assure further that the result of the operation raises no floating-
26488  point exception when converted to the semantic type of the operation.
26489
26490 <p><b>Footnotes</b>
26491 <p><small><a name="note357" href="#note357">357)</a> 0 - 0 yields -0 instead of +0 just when the rounding direction is downward.
26492 </small>
26493
26494 <p><small><a href="#Contents">Contents</a></small>
26495 <h3><a name="F.10" href="#F.10">F.10 Mathematics &lt;math.h&gt;</a></h3>
26496 <p><!--para 1 -->
26497  This subclause contains specifications of <a href="#7.12">&lt;math.h&gt;</a> facilities that are particularly suited
26498  for IEC 60559 implementations.
26499 <p><!--para 2 -->
26500  The Standard C macro HUGE_VAL and its float and long double analogs,
26501  HUGE_VALF and HUGE_VALL, expand to expressions whose values are positive
26502  infinities.
26503 <p><!--para 3 -->
26504  Special cases for functions in <a href="#7.12">&lt;math.h&gt;</a> are covered directly or indirectly by
26505  IEC 60559. The functions that IEC 60559 specifies directly are identified in <a href="#F.3">F.3</a>. The
26506  other functions in <a href="#7.12">&lt;math.h&gt;</a> treat infinities, NaNs, signed zeros, subnormals, and
26507  (provided the state of the FENV_ACCESS pragma is ''on'') the floating-point status flags
26508  in a manner consistent with the basic arithmetic operations covered by IEC 60559.
26509 <p><!--para 4 -->
26510  The expression math_errhandling &amp; MATH_ERREXCEPT shall evaluate to a
26511  nonzero value.
26512 <p><!--para 5 -->
26513  The ''invalid'' and ''divide-by-zero'' floating-point exceptions are raised as specified in
26514  subsequent subclauses of this annex.
26515 <p><!--para 6 -->
26516  The ''overflow'' floating-point exception is raised whenever an infinity -- or, because of
26517  rounding direction, a maximal-magnitude finite number -- is returned in lieu of a value
26518  whose magnitude is too large.
26519 <p><!--para 7 -->
26520  The ''underflow'' floating-point exception is raised whenever a result is tiny (essentially
26521  subnormal or zero) and suffers loss of accuracy.<sup><a href="#note358"><b>358)</b></a></sup>
26522  
26523  
26524 <!--page 532 -->
26525 <p><!--para 8 -->
26526  Whether or when library functions raise the ''inexact'' floating-point exception is
26527  unspecified, unless explicitly specified otherwise.
26528 <p><!--para 9 -->
26529  Whether or when library functions raise an undeserved ''underflow'' floating-point
26530  exception is unspecified.<sup><a href="#note359"><b>359)</b></a></sup> Otherwise, as implied by <a href="#F.8.6">F.8.6</a>, the <a href="#7.12">&lt;math.h&gt;</a> functions do
26531  not raise spurious floating-point exceptions (detectable by the user), other than the
26532  ''inexact'' floating-point exception.
26533 <p><!--para 10 -->
26534  Whether the functions honor the rounding direction mode is implementation-defined,
26535  unless explicitly specified otherwise.
26536 <p><!--para 11 -->
26537  Functions with a NaN argument return a NaN result and raise no floating-point exception,
26538  except where stated otherwise.
26539 <p><!--para 12 -->
26540  The specifications in the following subclauses append to the definitions in <a href="#7.12">&lt;math.h&gt;</a>.
26541  For families of functions, the specifications apply to all of the functions even though only
26542  the principal function is shown. Unless otherwise specified, where the symbol ''(+-)''
26543  occurs in both an argument and the result, the result has the same sign as the argument.
26544 <p><b>Recommended practice</b>
26545 <p><!--para 13 -->
26546  If a function with one or more NaN arguments returns a NaN result, the result should be
26547  the same as one of the NaN arguments (after possible type conversion), except perhaps
26548  for the sign.
26549
26550 <p><b>Footnotes</b>
26551 <p><small><a name="note358" href="#note358">358)</a> IEC 60559 allows different definitions of underflow. They all result in the same values, but differ on
26552  when the floating-point exception is raised.
26553 </small>
26554 <p><small><a name="note359" href="#note359">359)</a> It is intended that undeserved ''underflow'' and ''inexact'' floating-point exceptions are raised only if
26555  avoiding them would be too costly.
26556 </small>
26557
26558 <p><small><a href="#Contents">Contents</a></small>
26559 <h4><a name="F.10.1" href="#F.10.1">F.10.1 Trigonometric functions</a></h4>
26560
26561 <p><small><a href="#Contents">Contents</a></small>
26562 <h5><a name="F.10.1.1" href="#F.10.1.1">F.10.1.1 The acos functions</a></h5>
26563 <p><!--para 1 -->
26564 <ul>
26565 <li>  acos(1) returns +0.
26566 <li>  acos(x) returns a NaN and raises the ''invalid'' floating-point exception for
26567  | x | &gt; 1.
26568 </ul>
26569
26570 <p><small><a href="#Contents">Contents</a></small>
26571 <h5><a name="F.10.1.2" href="#F.10.1.2">F.10.1.2 The asin functions</a></h5>
26572 <p><!--para 1 -->
26573 <ul>
26574 <li>  asin((+-)0) returns (+-)0.
26575 <li>  asin(x) returns a NaN and raises the ''invalid'' floating-point exception for
26576  | x | &gt; 1.
26577  
26578  
26579  
26580  
26581 <!--page 533 -->
26582 </ul>
26583
26584 <p><small><a href="#Contents">Contents</a></small>
26585 <h5><a name="F.10.1.3" href="#F.10.1.3">F.10.1.3 The atan functions</a></h5>
26586 <p><!--para 1 -->
26587 <ul>
26588 <li>  atan((+-)0) returns (+-)0.
26589 <li>  atan((+-)(inf)) returns (+-)pi /2.
26590 </ul>
26591
26592 <p><small><a href="#Contents">Contents</a></small>
26593 <h5><a name="F.10.1.4" href="#F.10.1.4">F.10.1.4 The atan2 functions</a></h5>
26594 <p><!--para 1 -->
26595 <ul>
26596 <li>  atan2((+-)0, -0) returns (+-)pi .<sup><a href="#note360"><b>360)</b></a></sup>
26597 <li>  atan2((+-)0, +0) returns (+-)0.
26598 <li>  atan2((+-)0, x) returns (+-)pi for x &lt; 0.
26599 <li>  atan2((+-)0, x) returns (+-)0 for x &gt; 0.
26600 <li>  atan2(y, (+-)0) returns -pi /2 for y &lt; 0.
26601 <li>  atan2(y, (+-)0) returns pi /2 for y &gt; 0.
26602 <li>  atan2((+-)y, -(inf)) returns (+-)pi for finite y &gt; 0.
26603 <li>  atan2((+-)y, +(inf)) returns (+-)0 for finite y &gt; 0.
26604 <li>  atan2((+-)(inf), x) returns (+-)pi /2 for finite x.
26605 <li>  atan2((+-)(inf), -(inf)) returns (+-)3pi /4.
26606 <li>  atan2((+-)(inf), +(inf)) returns (+-)pi /4.
26607 </ul>
26608
26609 <p><b>Footnotes</b>
26610 <p><small><a name="note360" href="#note360">360)</a> atan2(0, 0) does not raise the ''invalid'' floating-point exception, nor does atan2( y , 0) raise
26611  the ''divide-by-zero'' floating-point exception.
26612 </small>
26613
26614 <p><small><a href="#Contents">Contents</a></small>
26615 <h5><a name="F.10.1.5" href="#F.10.1.5">F.10.1.5 The cos functions</a></h5>
26616 <p><!--para 1 -->
26617 <ul>
26618 <li>  cos((+-)0) returns 1.
26619 <li>  cos((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
26620 </ul>
26621
26622 <p><small><a href="#Contents">Contents</a></small>
26623 <h5><a name="F.10.1.6" href="#F.10.1.6">F.10.1.6 The sin functions</a></h5>
26624 <p><!--para 1 -->
26625 <ul>
26626 <li>  sin((+-)0) returns (+-)0.
26627 <li>  sin((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
26628 </ul>
26629
26630 <p><small><a href="#Contents">Contents</a></small>
26631 <h5><a name="F.10.1.7" href="#F.10.1.7">F.10.1.7 The tan functions</a></h5>
26632 <p><!--para 1 -->
26633 <ul>
26634 <li>  tan((+-)0) returns (+-)0.
26635 <li>  tan((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
26636  
26637  
26638  
26639  
26640 <!--page 534 -->
26641 </ul>
26642
26643 <p><small><a href="#Contents">Contents</a></small>
26644 <h4><a name="F.10.2" href="#F.10.2">F.10.2 Hyperbolic functions</a></h4>
26645
26646 <p><small><a href="#Contents">Contents</a></small>
26647 <h5><a name="F.10.2.1" href="#F.10.2.1">F.10.2.1 The acosh functions</a></h5>
26648 <p><!--para 1 -->
26649 <ul>
26650 <li>  acosh(1) returns +0.
26651 <li>  acosh(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 1.
26652 <li>  acosh(+(inf)) returns +(inf).
26653 </ul>
26654
26655 <p><small><a href="#Contents">Contents</a></small>
26656 <h5><a name="F.10.2.2" href="#F.10.2.2">F.10.2.2 The asinh functions</a></h5>
26657 <p><!--para 1 -->
26658 <ul>
26659 <li>  asinh((+-)0) returns (+-)0.
26660 <li>  asinh((+-)(inf)) returns (+-)(inf).
26661 </ul>
26662
26663 <p><small><a href="#Contents">Contents</a></small>
26664 <h5><a name="F.10.2.3" href="#F.10.2.3">F.10.2.3 The atanh functions</a></h5>
26665 <p><!--para 1 -->
26666 <ul>
26667 <li>  atanh((+-)0) returns (+-)0.
26668 <li>  atanh((+-)1) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception.
26669 <li>  atanh(x) returns a NaN and raises the ''invalid'' floating-point exception for
26670  | x | &gt; 1.
26671 </ul>
26672
26673 <p><small><a href="#Contents">Contents</a></small>
26674 <h5><a name="F.10.2.4" href="#F.10.2.4">F.10.2.4 The cosh functions</a></h5>
26675 <p><!--para 1 -->
26676 <ul>
26677 <li>  cosh((+-)0) returns 1.
26678 <li>  cosh((+-)(inf)) returns +(inf).
26679 </ul>
26680
26681 <p><small><a href="#Contents">Contents</a></small>
26682 <h5><a name="F.10.2.5" href="#F.10.2.5">F.10.2.5 The sinh functions</a></h5>
26683 <p><!--para 1 -->
26684 <ul>
26685 <li>  sinh((+-)0) returns (+-)0.
26686 <li>  sinh((+-)(inf)) returns (+-)(inf).
26687 </ul>
26688
26689 <p><small><a href="#Contents">Contents</a></small>
26690 <h5><a name="F.10.2.6" href="#F.10.2.6">F.10.2.6 The tanh functions</a></h5>
26691 <p><!--para 1 -->
26692 <ul>
26693 <li>  tanh((+-)0) returns (+-)0.
26694 <li>  tanh((+-)(inf)) returns (+-)1.
26695 </ul>
26696
26697 <p><small><a href="#Contents">Contents</a></small>
26698 <h4><a name="F.10.3" href="#F.10.3">F.10.3 Exponential and logarithmic functions</a></h4>
26699
26700 <p><small><a href="#Contents">Contents</a></small>
26701 <h5><a name="F.10.3.1" href="#F.10.3.1">F.10.3.1 The exp functions</a></h5>
26702 <p><!--para 1 -->
26703 <ul>
26704 <li>  exp((+-)0) returns 1.
26705 <li>  exp(-(inf)) returns +0.
26706 <li>  exp(+(inf)) returns +(inf).
26707 <!--page 535 -->
26708 </ul>
26709
26710 <p><small><a href="#Contents">Contents</a></small>
26711 <h5><a name="F.10.3.2" href="#F.10.3.2">F.10.3.2 The exp2 functions</a></h5>
26712 <p><!--para 1 -->
26713 <ul>
26714 <li>  exp2((+-)0) returns 1.
26715 <li>  exp2(-(inf)) returns +0.
26716 <li>  exp2(+(inf)) returns +(inf).
26717 </ul>
26718
26719 <p><small><a href="#Contents">Contents</a></small>
26720 <h5><a name="F.10.3.3" href="#F.10.3.3">F.10.3.3 The expm1 functions</a></h5>
26721 <p><!--para 1 -->
26722 <ul>
26723 <li>  expm1((+-)0) returns (+-)0.
26724 <li>  expm1(-(inf)) returns -1.
26725 <li>  expm1(+(inf)) returns +(inf).
26726 </ul>
26727
26728 <p><small><a href="#Contents">Contents</a></small>
26729 <h5><a name="F.10.3.4" href="#F.10.3.4">F.10.3.4 The frexp functions</a></h5>
26730 <p><!--para 1 -->
26731 <ul>
26732 <li>  frexp((+-)0, exp) returns (+-)0, and stores 0 in the object pointed to by exp.
26733 <li>  frexp((+-)(inf), exp) returns (+-)(inf), and stores an unspecified value in the object
26734  pointed to by exp.
26735 <li>  frexp(NaN, exp) stores an unspecified value in the object pointed to by exp
26736  (and returns a NaN).
26737 </ul>
26738 <p><!--para 2 -->
26739  frexp raises no floating-point exceptions.
26740 <p><!--para 3 -->
26741  When the radix of the argument is a power of 2, the returned value is exact and is
26742  independent of the current rounding direction mode.
26743 <p><!--para 4 -->
26744  On a binary system, the body of the frexp function might be
26745 <pre>
26746          {
26747                 *exp = (value == 0) ? 0 : (int)(1 + logb(value));
26748                 return scalbn(value, -(*exp));
26749          }
26750 </pre>
26751
26752 <p><small><a href="#Contents">Contents</a></small>
26753 <h5><a name="F.10.3.5" href="#F.10.3.5">F.10.3.5 The ilogb functions</a></h5>
26754 <p><!--para 1 -->
26755  When the correct result is representable in the range of the return type, the returned value
26756  is exact and is independent of the current rounding direction mode.
26757 <p><!--para 2 -->
26758  If the correct result is outside the range of the return type, the numeric result is
26759  unspecified and the ''invalid'' floating-point exception is raised.
26760 <!--page 536 -->
26761
26762 <p><small><a href="#Contents">Contents</a></small>
26763 <h5><a name="F.10.3.6" href="#F.10.3.6">F.10.3.6 The ldexp functions</a></h5>
26764 <p><!--para 1 -->
26765  On a binary system, ldexp(x, exp) is equivalent to scalbn(x, exp).
26766
26767 <p><small><a href="#Contents">Contents</a></small>
26768 <h5><a name="F.10.3.7" href="#F.10.3.7">F.10.3.7 The log functions</a></h5>
26769 <p><!--para 1 -->
26770 <ul>
26771 <li>  log((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
26772 <li>  log(1) returns +0.
26773 <li>  log(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
26774 <li>  log(+(inf)) returns +(inf).
26775 </ul>
26776
26777 <p><small><a href="#Contents">Contents</a></small>
26778 <h5><a name="F.10.3.8" href="#F.10.3.8">F.10.3.8 The log10 functions</a></h5>
26779 <p><!--para 1 -->
26780 <ul>
26781 <li>  log10((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
26782 <li>  log10(1) returns +0.
26783 <li>  log10(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
26784 <li>  log10(+(inf)) returns +(inf).
26785 </ul>
26786
26787 <p><small><a href="#Contents">Contents</a></small>
26788 <h5><a name="F.10.3.9" href="#F.10.3.9">F.10.3.9 The log1p functions</a></h5>
26789 <p><!--para 1 -->
26790 <ul>
26791 <li>  log1p((+-)0) returns (+-)0.
26792 <li>  log1p(-1) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
26793 <li>  log1p(x) returns a NaN and raises the ''invalid'' floating-point exception for
26794  x &lt; -1.
26795 <li>  log1p(+(inf)) returns +(inf).
26796 </ul>
26797
26798 <p><small><a href="#Contents">Contents</a></small>
26799 <h5><a name="F.10.3.10" href="#F.10.3.10">F.10.3.10 The log2 functions</a></h5>
26800 <p><!--para 1 -->
26801 <ul>
26802 <li>  log2((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
26803 <li>  log2(1) returns +0.
26804 <li>  log2(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
26805 <li>  log2(+(inf)) returns +(inf).
26806 </ul>
26807
26808 <p><small><a href="#Contents">Contents</a></small>
26809 <h5><a name="F.10.3.11" href="#F.10.3.11">F.10.3.11 The logb functions</a></h5>
26810 <p><!--para 1 -->
26811 <ul>
26812 <li>  logb((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
26813 <li>  logb((+-)(inf)) returns +(inf).
26814 </ul>
26815 <p><!--para 2 -->
26816  The returned value is exact and is independent of the current rounding direction mode.
26817 <!--page 537 -->
26818
26819 <p><small><a href="#Contents">Contents</a></small>
26820 <h5><a name="F.10.3.12" href="#F.10.3.12">F.10.3.12 The modf functions</a></h5>
26821 <p><!--para 1 -->
26822 <ul>
26823 <li>  modf((+-)x, iptr) returns a result with the same sign as x.
26824 <li>  modf((+-)(inf), iptr) returns (+-)0 and stores (+-)(inf) in the object pointed to by iptr.
26825 <li>  modf(NaN, iptr) stores a NaN in the object pointed to by iptr (and returns a
26826  NaN).
26827 </ul>
26828 <p><!--para 2 -->
26829  The returned values are exact and are independent of the current rounding direction
26830  mode.
26831 <p><!--para 3 -->
26832  modf behaves as though implemented by
26833 <pre>
26834          #include <a href="#7.12">&lt;math.h&gt;</a>
26835          #include <a href="#7.6">&lt;fenv.h&gt;</a>
26836          #pragma STDC FENV_ACCESS ON
26837          double modf(double value, double *iptr)
26838          {
26839               int save_round = fegetround();
26840               fesetround(FE_TOWARDZERO);
26841               *iptr = nearbyint(value);
26842               fesetround(save_round);
26843               return copysign(
26844                    isinf(value) ? 0.0 :
26845                         value - (*iptr), value);
26846          }
26847 </pre>
26848
26849 <p><small><a href="#Contents">Contents</a></small>
26850 <h5><a name="F.10.3.13" href="#F.10.3.13">F.10.3.13 The scalbn and scalbln functions</a></h5>
26851 <p><!--para 1 -->
26852 <ul>
26853 <li>  scalbn((+-)0, n) returns (+-)0.
26854 <li>  scalbn(x, 0) returns x.
26855 <li>  scalbn((+-)(inf), n) returns (+-)(inf).
26856 </ul>
26857 <p><!--para 2 -->
26858  If the calculation does not overflow or underflow, the returned value is exact and
26859  independent of the current rounding direction mode.
26860 <!--page 538 -->
26861
26862 <p><small><a href="#Contents">Contents</a></small>
26863 <h4><a name="F.10.4" href="#F.10.4">F.10.4 Power and absolute value functions</a></h4>
26864
26865 <p><small><a href="#Contents">Contents</a></small>
26866 <h5><a name="F.10.4.1" href="#F.10.4.1">F.10.4.1 The cbrt functions</a></h5>
26867 <p><!--para 1 -->
26868 <ul>
26869 <li>  cbrt((+-)0) returns (+-)0.
26870 <li>  cbrt((+-)(inf)) returns (+-)(inf).
26871 </ul>
26872
26873 <p><small><a href="#Contents">Contents</a></small>
26874 <h5><a name="F.10.4.2" href="#F.10.4.2">F.10.4.2 The fabs functions</a></h5>
26875 <p><!--para 1 -->
26876 <ul>
26877 <li>  fabs((+-)0) returns +0.
26878 <li>  fabs((+-)(inf)) returns +(inf).
26879 </ul>
26880 <p><!--para 2 -->
26881  The returned value is exact and is independent of the current rounding direction mode.
26882
26883 <p><small><a href="#Contents">Contents</a></small>
26884 <h5><a name="F.10.4.3" href="#F.10.4.3">F.10.4.3 The hypot functions</a></h5>
26885 <p><!--para 1 -->
26886 <ul>
26887 <li>  hypot(x, y), hypot(y, x), and hypot(x, -y) are equivalent.
26888 <li>  hypot(x, (+-)0) is equivalent to fabs(x).
26889 <li>  hypot((+-)(inf), y) returns +(inf), even if y is a NaN.
26890 </ul>
26891
26892 <p><small><a href="#Contents">Contents</a></small>
26893 <h5><a name="F.10.4.4" href="#F.10.4.4">F.10.4.4 The pow functions</a></h5>
26894 <p><!--para 1 -->
26895 <ul>
26896 <li>  pow((+-)0, y) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception
26897  for y an odd integer &lt; 0.
26898 <li>  pow((+-)0, y) returns +(inf) and raises the ''divide-by-zero'' floating-point exception
26899  for y &lt; 0, finite, and not an odd integer.
26900 <li>  pow((+-)0, -(inf)) returns +(inf) and may raise the ''divide-by-zero'' floating-point
26901  exception.
26902 <li>  pow((+-)0, y) returns (+-)0 for y an odd integer &gt; 0.
26903 <li>  pow((+-)0, y) returns +0 for y &gt; 0 and not an odd integer.
26904 <li>  pow(-1, (+-)(inf)) returns 1.
26905 <li>  pow(+1, y) returns 1 for any y, even a NaN.
26906 <li>  pow(x, (+-)0) returns 1 for any x, even a NaN.
26907 <li>  pow(x, y) returns a NaN and raises the ''invalid'' floating-point exception for
26908  finite x &lt; 0 and finite non-integer y.
26909 <li>  pow(x, -(inf)) returns +(inf) for | x | &lt; 1.
26910 <li>  pow(x, -(inf)) returns +0 for | x | &gt; 1.
26911 <li>  pow(x, +(inf)) returns +0 for | x | &lt; 1.
26912 <li>  pow(x, +(inf)) returns +(inf) for | x | &gt; 1.
26913 <!--page 539 -->
26914 <li>  pow(-(inf), y) returns -0 for y an odd integer &lt; 0.
26915 <li>  pow(-(inf), y) returns +0 for y &lt; 0 and not an odd integer.
26916 <li>  pow(-(inf), y) returns -(inf) for y an odd integer &gt; 0.
26917 <li>  pow(-(inf), y) returns +(inf) for y &gt; 0 and not an odd integer.
26918 <li>  pow(+(inf), y) returns +0 for y &lt; 0.
26919 <li>  pow(+(inf), y) returns +(inf) for y &gt; 0.
26920 </ul>
26921
26922 <p><small><a href="#Contents">Contents</a></small>
26923 <h5><a name="F.10.4.5" href="#F.10.4.5">F.10.4.5 The sqrt functions</a></h5>
26924 <p><!--para 1 -->
26925  sqrt is fully specified as a basic arithmetic operation in IEC 60559. The returned value
26926  is dependent on the current rounding direction mode.
26927
26928 <p><small><a href="#Contents">Contents</a></small>
26929 <h4><a name="F.10.5" href="#F.10.5">F.10.5 Error and gamma functions</a></h4>
26930
26931 <p><small><a href="#Contents">Contents</a></small>
26932 <h5><a name="F.10.5.1" href="#F.10.5.1">F.10.5.1 The erf functions</a></h5>
26933 <p><!--para 1 -->
26934 <ul>
26935 <li>  erf((+-)0) returns (+-)0.
26936 <li>  erf((+-)(inf)) returns (+-)1.
26937 </ul>
26938
26939 <p><small><a href="#Contents">Contents</a></small>
26940 <h5><a name="F.10.5.2" href="#F.10.5.2">F.10.5.2 The erfc functions</a></h5>
26941 <p><!--para 1 -->
26942 <ul>
26943 <li>  erfc(-(inf)) returns 2.
26944 <li>  erfc(+(inf)) returns +0.
26945 </ul>
26946
26947 <p><small><a href="#Contents">Contents</a></small>
26948 <h5><a name="F.10.5.3" href="#F.10.5.3">F.10.5.3 The lgamma functions</a></h5>
26949 <p><!--para 1 -->
26950 <ul>
26951 <li>  lgamma(1) returns +0.
26952 <li>  lgamma(2) returns +0.
26953 <li>  lgamma(x) returns +(inf) and raises the ''divide-by-zero'' floating-point exception for
26954  x a negative integer or zero.
26955 <li>  lgamma(-(inf)) returns +(inf).
26956 <li>  lgamma(+(inf)) returns +(inf).
26957 </ul>
26958
26959 <p><small><a href="#Contents">Contents</a></small>
26960 <h5><a name="F.10.5.4" href="#F.10.5.4">F.10.5.4 The tgamma functions</a></h5>
26961 <p><!--para 1 -->
26962 <ul>
26963 <li>  tgamma((+-)0) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception.
26964 <li>  tgamma(x) returns a NaN and raises the ''invalid'' floating-point exception for x a
26965  negative integer.
26966 <li>  tgamma(-(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
26967 <li>  tgamma(+(inf)) returns +(inf).
26968 <!--page 540 -->
26969 </ul>
26970
26971 <p><small><a href="#Contents">Contents</a></small>
26972 <h4><a name="F.10.6" href="#F.10.6">F.10.6 Nearest integer functions</a></h4>
26973
26974 <p><small><a href="#Contents">Contents</a></small>
26975 <h5><a name="F.10.6.1" href="#F.10.6.1">F.10.6.1 The ceil functions</a></h5>
26976 <p><!--para 1 -->
26977 <ul>
26978 <li>  ceil((+-)0) returns (+-)0.
26979 <li>  ceil((+-)(inf)) returns (+-)(inf).
26980 </ul>
26981 <p><!--para 2 -->
26982  The returned value is independent of the current rounding direction mode.
26983 <p><!--para 3 -->
26984  The double version of ceil behaves as though implemented by
26985 <pre>
26986         #include <a href="#7.12">&lt;math.h&gt;</a>
26987         #include <a href="#7.6">&lt;fenv.h&gt;</a>
26988         #pragma STDC FENV_ACCESS ON
26989         double ceil(double x)
26990         {
26991              double result;
26992              int save_round = fegetround();
26993              fesetround(FE_UPWARD);
26994              result = rint(x); // or nearbyint instead of rint
26995              fesetround(save_round);
26996              return result;
26997         }
26998 </pre>
26999 <p><!--para 4 -->
27000  The ceil functions may, but are not required to, raise the ''inexact'' floating-point
27001  exception for finite non-integer arguments, as this implementation does.
27002
27003 <p><small><a href="#Contents">Contents</a></small>
27004 <h5><a name="F.10.6.2" href="#F.10.6.2">F.10.6.2 The floor functions</a></h5>
27005 <p><!--para 1 -->
27006 <ul>
27007 <li>  floor((+-)0) returns (+-)0.
27008 <li>  floor((+-)(inf)) returns (+-)(inf).
27009 </ul>
27010 <p><!--para 2 -->
27011  The returned value and is independent of the current rounding direction mode.
27012 <p><!--para 3 -->
27013  See the sample implementation for ceil in <a href="#F.10.6.1">F.10.6.1</a>. The floor functions may, but are
27014  not required to, raise the ''inexact'' floating-point exception for finite non-integer
27015  arguments, as that implementation does.
27016
27017 <p><small><a href="#Contents">Contents</a></small>
27018 <h5><a name="F.10.6.3" href="#F.10.6.3">F.10.6.3 The nearbyint functions</a></h5>
27019 <p><!--para 1 -->
27020  The nearbyint functions use IEC 60559 rounding according to the current rounding
27021  direction. They do not raise the ''inexact'' floating-point exception if the result differs in
27022  value from the argument.
27023 <ul>
27024 <li>  nearbyint((+-)0) returns (+-)0 (for all rounding directions).
27025 <li>  nearbyint((+-)(inf)) returns (+-)(inf) (for all rounding directions).
27026 <!--page 541 -->
27027 </ul>
27028
27029 <p><small><a href="#Contents">Contents</a></small>
27030 <h5><a name="F.10.6.4" href="#F.10.6.4">F.10.6.4 The rint functions</a></h5>
27031 <p><!--para 1 -->
27032  The rint functions differ from the nearbyint functions only in that they do raise the
27033  ''inexact'' floating-point exception if the result differs in value from the argument.
27034
27035 <p><small><a href="#Contents">Contents</a></small>
27036 <h5><a name="F.10.6.5" href="#F.10.6.5">F.10.6.5 The lrint and llrint functions</a></h5>
27037 <p><!--para 1 -->
27038  The lrint and llrint functions provide floating-to-integer conversion as prescribed
27039  by IEC 60559. They round according to the current rounding direction. If the rounded
27040  value is outside the range of the return type, the numeric result is unspecified and the
27041  ''invalid'' floating-point exception is raised. When they raise no other floating-point
27042  exception and the result differs from the argument, they raise the ''inexact'' floating-point
27043  exception.
27044
27045 <p><small><a href="#Contents">Contents</a></small>
27046 <h5><a name="F.10.6.6" href="#F.10.6.6">F.10.6.6 The round functions</a></h5>
27047 <p><!--para 1 -->
27048 <ul>
27049 <li>  round((+-)0) returns (+-)0.
27050 <li>  round((+-)(inf)) returns (+-)(inf).
27051 </ul>
27052 <p><!--para 2 -->
27053  The returned value is independent of the current rounding direction mode.
27054 <p><!--para 3 -->
27055  The double version of round behaves as though implemented by
27056 <pre>
27057          #include <a href="#7.12">&lt;math.h&gt;</a>
27058          #include <a href="#7.6">&lt;fenv.h&gt;</a>
27059          #pragma STDC FENV_ACCESS ON
27060          double round(double x)
27061          {
27062               double result;
27063               fenv_t save_env;
27064               feholdexcept(&amp;save_env);
27065               result = rint(x);
27066               if (fetestexcept(FE_INEXACT)) {
27067                    fesetround(FE_TOWARDZERO);
27068                    result = rint(copysign(0.5 + fabs(x), x));
27069               }
27070               feupdateenv(&amp;save_env);
27071               return result;
27072          }
27073 </pre>
27074  The round functions may, but are not required to, raise the ''inexact'' floating-point
27075  exception for finite non-integer numeric arguments, as this implementation does.
27076 <!--page 542 -->
27077
27078 <p><small><a href="#Contents">Contents</a></small>
27079 <h5><a name="F.10.6.7" href="#F.10.6.7">F.10.6.7 The lround and llround functions</a></h5>
27080 <p><!--para 1 -->
27081  The lround and llround functions differ from the lrint and llrint functions
27082  with the default rounding direction just in that the lround and llround functions
27083  round halfway cases away from zero and need not raise the ''inexact'' floating-point
27084  exception for non-integer arguments that round to within the range of the return type.
27085
27086 <p><small><a href="#Contents">Contents</a></small>
27087 <h5><a name="F.10.6.8" href="#F.10.6.8">F.10.6.8 The trunc functions</a></h5>
27088 <p><!--para 1 -->
27089  The trunc functions use IEC 60559 rounding toward zero (regardless of the current
27090  rounding direction). The returned value is exact.
27091 <ul>
27092 <li>  trunc((+-)0) returns (+-)0.
27093 <li>  trunc((+-)(inf)) returns (+-)(inf).
27094 </ul>
27095 <p><!--para 2 -->
27096  The returned value is independent of the current rounding direction mode. The trunc
27097  functions may, but are not required to, raise the ''inexact'' floating-point exception for
27098  finite non-integer arguments.
27099
27100 <p><small><a href="#Contents">Contents</a></small>
27101 <h4><a name="F.10.7" href="#F.10.7">F.10.7 Remainder functions</a></h4>
27102
27103 <p><small><a href="#Contents">Contents</a></small>
27104 <h5><a name="F.10.7.1" href="#F.10.7.1">F.10.7.1 The fmod functions</a></h5>
27105 <p><!--para 1 -->
27106 <ul>
27107 <li>  fmod((+-)0, y) returns (+-)0 for y not zero.
27108 <li>  fmod(x, y) returns a NaN and raises the ''invalid'' floating-point exception for x
27109  infinite or y zero (and neither is a NaN).
27110 <li>  fmod(x, (+-)(inf)) returns x for x not infinite.
27111 </ul>
27112 <p><!--para 2 -->
27113  When subnormal results are supported, the returned value is exact and is independent of
27114  the current rounding direction mode.
27115 <p><!--para 3 -->
27116  The double version of fmod behaves as though implemented by
27117 <!--page 543 -->
27118 <pre>
27119         #include <a href="#7.12">&lt;math.h&gt;</a>
27120         #include <a href="#7.6">&lt;fenv.h&gt;</a>
27121         #pragma STDC FENV_ACCESS ON
27122         double fmod(double x, double y)
27123         {
27124              double result;
27125              result = remainder(fabs(x), (y = fabs(y)));
27126              if (signbit(result)) result += y;
27127              return copysign(result, x);
27128         }
27129 </pre>
27130
27131 <p><small><a href="#Contents">Contents</a></small>
27132 <h5><a name="F.10.7.2" href="#F.10.7.2">F.10.7.2 The remainder functions</a></h5>
27133 <p><!--para 1 -->
27134  The remainder functions are fully specified as a basic arithmetic operation in
27135  IEC 60559.
27136 <p><!--para 2 -->
27137  When subnormal results are supported, the returned value is exact and is independent of
27138  the current rounding direction mode.
27139
27140 <p><small><a href="#Contents">Contents</a></small>
27141 <h5><a name="F.10.7.3" href="#F.10.7.3">F.10.7.3 The remquo functions</a></h5>
27142 <p><!--para 1 -->
27143  The remquo functions follow the specifications for the remainder functions. They
27144  have no further specifications special to IEC 60559 implementations.
27145 <p><!--para 2 -->
27146  When subnormal results are supported, the returned value is exact and is independent of
27147  the current rounding direction mode.
27148
27149 <p><small><a href="#Contents">Contents</a></small>
27150 <h4><a name="F.10.8" href="#F.10.8">F.10.8 Manipulation functions</a></h4>
27151
27152 <p><small><a href="#Contents">Contents</a></small>
27153 <h5><a name="F.10.8.1" href="#F.10.8.1">F.10.8.1 The copysign functions</a></h5>
27154 <p><!--para 1 -->
27155  copysign is specified in the Appendix to IEC 60559.
27156 <p><!--para 2 -->
27157  The returned value is exact and is independent of the current rounding direction mode.
27158
27159 <p><small><a href="#Contents">Contents</a></small>
27160 <h5><a name="F.10.8.2" href="#F.10.8.2">F.10.8.2 The nan functions</a></h5>
27161 <p><!--para 1 -->
27162  All IEC 60559 implementations support quiet NaNs, in all floating formats.
27163 <p><!--para 2 -->
27164  The returned value is exact and is independent of the current rounding direction mode.
27165
27166 <p><small><a href="#Contents">Contents</a></small>
27167 <h5><a name="F.10.8.3" href="#F.10.8.3">F.10.8.3 The nextafter functions</a></h5>
27168 <p><!--para 1 -->
27169 <ul>
27170 <li>  nextafter(x, y) raises the ''overflow'' and ''inexact'' floating-point exceptions
27171  for x finite and the function value infinite.
27172 <li>  nextafter(x, y) raises the ''underflow'' and ''inexact'' floating-point
27173  exceptions for the function value subnormal or zero and x != y.
27174 </ul>
27175 <p><!--para 2 -->
27176  Even though underflow or overflow can occur, the returned value is independent of the
27177  current rounding direction mode.
27178
27179 <p><small><a href="#Contents">Contents</a></small>
27180 <h5><a name="F.10.8.4" href="#F.10.8.4">F.10.8.4 The nexttoward functions</a></h5>
27181 <p><!--para 1 -->
27182  No additional requirements beyond those on nextafter.
27183 <p><!--para 2 -->
27184  Even though underflow or overflow can occur, the returned value is independent of the
27185  current rounding direction mode.
27186 <!--page 544 -->
27187
27188 <p><small><a href="#Contents">Contents</a></small>
27189 <h4><a name="F.10.9" href="#F.10.9">F.10.9 Maximum, minimum, and positive difference functions</a></h4>
27190
27191 <p><small><a href="#Contents">Contents</a></small>
27192 <h5><a name="F.10.9.1" href="#F.10.9.1">F.10.9.1 The fdim functions</a></h5>
27193 <p><!--para 1 -->
27194  No additional requirements.
27195
27196 <p><small><a href="#Contents">Contents</a></small>
27197 <h5><a name="F.10.9.2" href="#F.10.9.2">F.10.9.2 The fmax functions</a></h5>
27198 <p><!--para 1 -->
27199  If just one argument is a NaN, the fmax functions return the other argument (if both
27200  arguments are NaNs, the functions return a NaN).
27201 <p><!--para 2 -->
27202  The returned value is exact and is independent of the current rounding direction mode.
27203 <p><!--para 3 -->
27204  The body of the fmax function might be<sup><a href="#note361"><b>361)</b></a></sup>
27205 <pre>
27206         { return (isgreaterequal(x, y) ||
27207              isnan(y)) ? x : y; }
27208 </pre>
27209
27210 <p><b>Footnotes</b>
27211 <p><small><a name="note361" href="#note361">361)</a> Ideally, fmax would be sensitive to the sign of zero, for example fmax(-0.0, +0.0) would
27212  return +0; however, implementation in software might be impractical.
27213 </small>
27214
27215 <p><small><a href="#Contents">Contents</a></small>
27216 <h5><a name="F.10.9.3" href="#F.10.9.3">F.10.9.3 The fmin functions</a></h5>
27217 <p><!--para 1 -->
27218  The fmin functions are analogous to the fmax functions (see <a href="#F.10.9.2">F.10.9.2</a>).
27219 <p><!--para 2 -->
27220  The returned value is exact and is independent of the current rounding direction mode.
27221
27222 <p><small><a href="#Contents">Contents</a></small>
27223 <h4><a name="F.10.10" href="#F.10.10">F.10.10 Floating multiply-add</a></h4>
27224
27225 <p><small><a href="#Contents">Contents</a></small>
27226 <h5><a name="F.10.10.1" href="#F.10.10.1">F.10.10.1 The fma functions</a></h5>
27227 <p><!--para 1 -->
27228 <ul>
27229 <li>  fma(x, y, z) computes xy + z, correctly rounded once.
27230 <li>  fma(x, y, z) returns a NaN and optionally raises the ''invalid'' floating-point
27231  exception if one of x and y is infinite, the other is zero, and z is a NaN.
27232 <li>  fma(x, y, z) returns a NaN and raises the ''invalid'' floating-point exception if
27233  one of x and y is infinite, the other is zero, and z is not a NaN.
27234 <li>  fma(x, y, z) returns a NaN and raises the ''invalid'' floating-point exception if x
27235  times y is an exact infinity and z is also an infinity but with the opposite sign.
27236  
27237  
27238  
27239  
27240 <!--page 545 -->
27241 </ul>
27242
27243 <p><small><a href="#Contents">Contents</a></small>
27244 <h4><a name="F.10.11" href="#F.10.11">F.10.11 Comparison macros</a></h4>
27245 <p><!--para 1 -->
27246  Relational operators and their corresponding comparison macros (<a href="#7.12.14">7.12.14</a>) produce
27247  equivalent result values, even if argument values are represented in wider formats. Thus,
27248  comparison macro arguments represented in formats wider than their semantic types are
27249  not converted to the semantic types, unless the wide evaluation method converts operands
27250  of relational operators to their semantic types. The standard wide evaluation methods
27251  characterized by FLT_EVAL_METHOD equal to 1 or 2 (<a href="#5.2.4.2.2">5.2.4.2.2</a>), do not convert
27252  operands of relational operators to their semantic types.
27253 <!--page 546 -->
27254
27255 <p><small><a href="#Contents">Contents</a></small>
27256 <h2><a name="G" href="#G">Annex G</a></h2>
27257 <pre>
27258                                        (normative)
27259                 IEC 60559-compatible complex arithmetic
27260 </pre>
27261
27262 <p><small><a href="#Contents">Contents</a></small>
27263 <h3><a name="G.1" href="#G.1">G.1 Introduction</a></h3>
27264 <p><!--para 1 -->
27265  This annex supplements <a href="#F">annex F</a> to specify complex arithmetic for compatibility with
27266  IEC 60559 real floating-point arithmetic. An implementation that defines *
27267  __STDC_IEC_559_COMPLEX__ shall conform to the specifications in this annex.<sup><a href="#note362"><b>362)</b></a></sup>
27268
27269 <p><b>Footnotes</b>
27270 <p><small><a name="note362" href="#note362">362)</a> Implementations that do not define __STDC_IEC_559_COMPLEX__ are not required to conform
27271  to these specifications.
27272 </small>
27273
27274 <p><small><a href="#Contents">Contents</a></small>
27275 <h3><a name="G.2" href="#G.2">G.2 Types</a></h3>
27276 <p><!--para 1 -->
27277  There is a new keyword _Imaginary, which is used to specify imaginary types. It is
27278  used as a type specifier within declaration specifiers in the same way as _Complex is
27279  (thus, _Imaginary float is a valid type name).
27280 <p><!--para 2 -->
27281  There are three imaginary types, designated as float _Imaginary, double
27282  _Imaginary, and long double _Imaginary. The imaginary types (along with
27283  the real floating and complex types) are floating types.
27284 <p><!--para 3 -->
27285  For imaginary types, the corresponding real type is given by deleting the keyword
27286  _Imaginary from the type name.
27287 <p><!--para 4 -->
27288  Each imaginary type has the same representation and alignment requirements as the
27289  corresponding real type. The value of an object of imaginary type is the value of the real
27290  representation times the imaginary unit.
27291 <p><!--para 5 -->
27292  The imaginary type domain comprises the imaginary types.
27293
27294 <p><small><a href="#Contents">Contents</a></small>
27295 <h3><a name="G.3" href="#G.3">G.3 Conventions</a></h3>
27296 <p><!--para 1 -->
27297  A complex or imaginary value with at least one infinite part is regarded as an infinity
27298  (even if its other part is a NaN). A complex or imaginary value is a finite number if each
27299  of its parts is a finite number (neither infinite nor NaN). A complex or imaginary value is
27300  a zero if each of its parts is a zero.
27301  
27302  
27303  
27304  
27305 <!--page 547 -->
27306
27307 <p><small><a href="#Contents">Contents</a></small>
27308 <h3><a name="G.4" href="#G.4">G.4 Conversions</a></h3>
27309
27310 <p><small><a href="#Contents">Contents</a></small>
27311 <h4><a name="G.4.1" href="#G.4.1">G.4.1 Imaginary types</a></h4>
27312 <p><!--para 1 -->
27313  Conversions among imaginary types follow rules analogous to those for real floating
27314  types.
27315
27316 <p><small><a href="#Contents">Contents</a></small>
27317 <h4><a name="G.4.2" href="#G.4.2">G.4.2 Real and imaginary</a></h4>
27318 <p><!--para 1 -->
27319  When a value of imaginary type is converted to a real type other than _Bool,<sup><a href="#note363"><b>363)</b></a></sup> the
27320  result is a positive zero.
27321 <p><!--para 2 -->
27322  When a value of real type is converted to an imaginary type, the result is a positive
27323  imaginary zero.
27324
27325 <p><b>Footnotes</b>
27326 <p><small><a name="note363" href="#note363">363)</a> See <a href="#6.3.1.2">6.3.1.2</a>.
27327 </small>
27328
27329 <p><small><a href="#Contents">Contents</a></small>
27330 <h4><a name="G.4.3" href="#G.4.3">G.4.3 Imaginary and complex</a></h4>
27331 <p><!--para 1 -->
27332  When a value of imaginary type is converted to a complex type, the real part of the
27333  complex result value is a positive zero and the imaginary part of the complex result value
27334  is determined by the conversion rules for the corresponding real types.
27335 <p><!--para 2 -->
27336  When a value of complex type is converted to an imaginary type, the real part of the
27337  complex value is discarded and the value of the imaginary part is converted according to
27338  the conversion rules for the corresponding real types.
27339
27340 <p><small><a href="#Contents">Contents</a></small>
27341 <h3><a name="G.5" href="#G.5">G.5 Binary operators</a></h3>
27342 <p><!--para 1 -->
27343  The following subclauses supplement <a href="#6.5">6.5</a> in order to specify the type of the result for an
27344  operation with an imaginary operand.
27345 <p><!--para 2 -->
27346  For most operand types, the value of the result of a binary operator with an imaginary or
27347  complex operand is completely determined, with reference to real arithmetic, by the usual
27348  mathematical formula. For some operand types, the usual mathematical formula is
27349  problematic because of its treatment of infinities and because of undue overflow or
27350  underflow; in these cases the result satisfies certain properties (specified in <a href="#G.5.1">G.5.1</a>), but is
27351  not completely determined.
27352  
27353  
27354  
27355  
27356 <!--page 548 -->
27357
27358 <p><small><a href="#Contents">Contents</a></small>
27359 <h4><a name="G.5.1" href="#G.5.1">G.5.1 Multiplicative operators</a></h4>
27360 <p><b>Semantics</b>
27361 <p><!--para 1 -->
27362  If one operand has real type and the other operand has imaginary type, then the result has
27363  imaginary type. If both operands have imaginary type, then the result has real type. (If
27364  either operand has complex type, then the result has complex type.)
27365 <p><!--para 2 -->
27366  If the operands are not both complex, then the result and floating-point exception
27367  behavior of the * operator is defined by the usual mathematical formula:
27368 <pre>
27369         *                  u                   iv                 u + iv
27370 </pre>
27371  
27372 <pre>
27373         x                  xu                i(xv)            (xu) + i(xv)
27374 </pre>
27375  
27376 <pre>
27377         iy               i(yu)                -yv            (-yv) + i(yu)
27378 </pre>
27379  
27380 <pre>
27381         x + iy       (xu) + i(yu)        (-yv) + i(xv)
27382 </pre>
27383 <p><!--para 3 -->
27384  If the second operand is not complex, then the result and floating-point exception
27385  behavior of the / operator is defined by the usual mathematical formula:
27386 <pre>
27387         /                   u                       iv
27388 </pre>
27389  
27390 <pre>
27391         x                  x/u                 i(-x/v)
27392 </pre>
27393  
27394 <pre>
27395         iy               i(y/u)                     y/v
27396 </pre>
27397  
27398 <pre>
27399         x + iy       (x/u) + i(y/u)        (y/v) + i(-x/v)
27400 </pre>
27401 <p><!--para 4 -->
27402  The * and / operators satisfy the following infinity properties for all real, imaginary, and
27403  complex operands:<sup><a href="#note364"><b>364)</b></a></sup>
27404 <ul>
27405 <li>  if one operand is an infinity and the other operand is a nonzero finite number or an
27406  infinity, then the result of the * operator is an infinity;
27407 <li>  if the first operand is an infinity and the second operand is a finite number, then the
27408  result of the / operator is an infinity;
27409 <li>  if the first operand is a finite number and the second operand is an infinity, then the
27410  result of the / operator is a zero;
27411  
27412  
27413  
27414  
27415 <!--page 549 -->
27416 <li>  if the first operand is a nonzero finite number or an infinity and the second operand is
27417  a zero, then the result of the / operator is an infinity.
27418 </ul>
27419 <p><!--para 5 -->
27420  If both operands of the * operator are complex or if the second operand of the / operator
27421  is complex, the operator raises floating-point exceptions if appropriate for the calculation
27422  of the parts of the result, and may raise spurious floating-point exceptions.
27423 <p><!--para 6 -->
27424  EXAMPLE 1 Multiplication of double _Complex operands could be implemented as follows. Note
27425  that the imaginary unit I has imaginary type (see <a href="#G.6">G.6</a>).
27426 <!--page 550 -->
27427 <pre>
27428           #include <a href="#7.12">&lt;math.h&gt;</a>
27429           #include <a href="#7.3">&lt;complex.h&gt;</a>
27430           /* Multiply z * w ... */
27431           double complex _Cmultd(double complex z, double complex w)
27432           {
27433                  #pragma STDC FP_CONTRACT OFF
27434                  double a, b, c, d, ac, bd, ad, bc, x, y;
27435                  a = creal(z); b = cimag(z);
27436                  c = creal(w); d = cimag(w);
27437                  ac = a * c;       bd = b * d;
27438                  ad = a * d;       bc = b * c;
27439                  x = ac - bd; y = ad + bc;
27440                  if (isnan(x) &amp;&amp; isnan(y)) {
27441                          /* Recover infinities that computed as NaN+iNaN ... */
27442                          int recalc = 0;
27443                          if ( isinf(a) || isinf(b) ) { // z is infinite
27444                                  /* "Box" the infinity and change NaNs in the other factor to 0 */
27445                                  a = copysign(isinf(a) ? 1.0 : 0.0, a);
27446                                  b = copysign(isinf(b) ? 1.0 : 0.0, b);
27447                                  if (isnan(c)) c = copysign(0.0, c);
27448                                  if (isnan(d)) d = copysign(0.0, d);
27449                                  recalc = 1;
27450                          }
27451                          if ( isinf(c) || isinf(d) ) { // w is infinite
27452                                  /* "Box" the infinity and change NaNs in the other factor to 0 */
27453                                  c = copysign(isinf(c) ? 1.0 : 0.0, c);
27454                                  d = copysign(isinf(d) ? 1.0 : 0.0, d);
27455                                  if (isnan(a)) a = copysign(0.0, a);
27456                                  if (isnan(b)) b = copysign(0.0, b);
27457                                  recalc = 1;
27458                          }
27459                          if (!recalc &amp;&amp; (isinf(ac) || isinf(bd) ||
27460                                                 isinf(ad) || isinf(bc))) {
27461                                  /* Recover infinities from overflow by changing NaNs to 0 ... */
27462                                  if (isnan(a)) a = copysign(0.0, a);
27463                                  if (isnan(b)) b = copysign(0.0, b);
27464                                  if (isnan(c)) c = copysign(0.0, c);
27465                                  if (isnan(d)) d = copysign(0.0, d);
27466                                  recalc = 1;
27467                          }
27468                          if (recalc) {
27469                                    x = INFINITY * ( a * c - b * d );
27470                                    y = INFINITY * ( a * d + b * c );
27471                         }
27472                   }
27473                   return x + I * y;
27474          }
27475 </pre>
27476 <p><!--para 7 -->
27477  This implementation achieves the required treatment of infinities at the cost of only one isnan test in
27478  ordinary (finite) cases. It is less than ideal in that undue overflow and underflow may occur.
27479  
27480 <p><!--para 8 -->
27481  EXAMPLE 2      Division of two double _Complex operands could be implemented as follows.
27482 <!--page 551 -->
27483 <pre>
27484          #include <a href="#7.12">&lt;math.h&gt;</a>
27485          #include <a href="#7.3">&lt;complex.h&gt;</a>
27486          /* Divide z / w ... */
27487          double complex _Cdivd(double complex z, double complex w)
27488          {
27489                 #pragma STDC FP_CONTRACT OFF
27490                 double a, b, c, d, logbw, denom, x, y;
27491                 int ilogbw = 0;
27492                 a = creal(z); b = cimag(z);
27493                 c = creal(w); d = cimag(w);
27494                 logbw = logb(fmax(fabs(c), fabs(d)));
27495                 if (logbw == INFINITY) {
27496                        ilogbw = (int)logbw;
27497                        c = scalbn(c, -ilogbw); d = scalbn(d, -ilogbw);
27498                 }
27499                 denom = c * c + d * d;
27500                 x = scalbn((a * c + b * d) / denom, -ilogbw);
27501                 y = scalbn((b * c - a * d) / denom, -ilogbw);
27502                   /* Recover infinities and zeros that computed as NaN+iNaN;                 */
27503                   /* the only cases are nonzero/zero, infinite/finite, and finite/infinite, ... */
27504                   if (isnan(x) &amp;&amp; isnan(y)) {
27505                         if ((denom == 0.0) &amp;&amp;
27506                               (!isnan(a) || !isnan(b))) {
27507                               x = copysign(INFINITY, c) * a;
27508                               y = copysign(INFINITY, c) * b;
27509                         }
27510                         else if ((isinf(a) || isinf(b)) &amp;&amp;
27511                               isfinite(c) &amp;&amp; isfinite(d)) {
27512                               a = copysign(isinf(a) ? 1.0 : 0.0,                        a);
27513                               b = copysign(isinf(b) ? 1.0 : 0.0,                        b);
27514                               x = INFINITY * ( a * c + b * d );
27515                               y = INFINITY * ( b * c - a * d );
27516                         }
27517                         else if (isinf(logbw) &amp;&amp;
27518                               isfinite(a) &amp;&amp; isfinite(b)) {
27519                               c = copysign(isinf(c) ? 1.0 : 0.0,                        c);
27520                               d = copysign(isinf(d) ? 1.0 : 0.0,                        d);
27521                               x = 0.0 * ( a * c + b * d );
27522                               y = 0.0 * ( b * c - a * d );
27523                         }
27524                   }
27525                   return x + I * y;
27526          }
27527 </pre>
27528 <p><!--para 9 -->
27529  Scaling the denominator alleviates the main overflow and underflow problem, which is more serious than
27530  for multiplication. In the spirit of the multiplication example above, this code does not defend against
27531  overflow and underflow in the calculation of the numerator. Scaling with the scalbn function, instead of
27532  with division, provides better roundoff characteristics.
27533  
27534
27535 <p><b>Footnotes</b>
27536 <p><small><a name="note364" href="#note364">364)</a> These properties are already implied for those cases covered in the tables, but are required for all cases
27537  (at least where the state for CX_LIMITED_RANGE is ''off'').
27538 </small>
27539
27540 <p><small><a href="#Contents">Contents</a></small>
27541 <h4><a name="G.5.2" href="#G.5.2">G.5.2 Additive operators</a></h4>
27542 <p><b>Semantics</b>
27543 <p><!--para 1 -->
27544  If both operands have imaginary type, then the result has imaginary type. (If one operand
27545  has real type and the other operand has imaginary type, or if either operand has complex
27546  type, then the result has complex type.)
27547 <p><!--para 2 -->
27548  In all cases the result and floating-point exception behavior of a + or - operator is defined
27549  by the usual mathematical formula:
27550 <pre>
27551         + or -              u                       iv                    u + iv
27552 </pre>
27553  
27554 <pre>
27555         x                 x(+-)u                     x (+-) iv              (x (+-) u) (+-) iv
27556 </pre>
27557  
27558 <pre>
27559         iy               (+-)u + iy                 i(y (+-) v)             (+-)u + i(y (+-) v)
27560 </pre>
27561  
27562 <pre>
27563         x + iy         (x (+-) u) + iy            x + i(y (+-) v)        (x (+-) u) + i(y (+-) v)
27564 </pre>
27565
27566 <p><small><a href="#Contents">Contents</a></small>
27567 <h3><a name="G.6" href="#G.6">G.6 Complex arithmetic &lt;complex.h&gt;</a></h3>
27568 <p><!--para 1 -->
27569  The macros
27570 <pre>
27571          imaginary
27572 </pre>
27573  and
27574 <pre>
27575          _Imaginary_I
27576 </pre>
27577  are defined, respectively, as _Imaginary and a constant expression of type const
27578  float _Imaginary with the value of the imaginary unit. The macro
27579 <pre>
27580          I
27581 </pre>
27582  is defined to be _Imaginary_I (not _Complex_I as stated in <a href="#7.3">7.3</a>). Notwithstanding
27583  the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and then perhaps redefine the macro
27584  imaginary.
27585 <p><!--para 2 -->
27586  This subclause contains specifications for the <a href="#7.3">&lt;complex.h&gt;</a> functions that are
27587  particularly suited to IEC 60559 implementations. For families of functions, the
27588  specifications apply to all of the functions even though only the principal function is
27589 <!--page 552 -->
27590  shown. Unless otherwise specified, where the symbol ''(+-)'' occurs in both an argument
27591  and the result, the result has the same sign as the argument.
27592 <p><!--para 3 -->
27593  The functions are continuous onto both sides of their branch cuts, taking into account the
27594  sign of zero. For example, csqrt(-2 (+-) i0) = (+-)i(sqrt)2.  -
27595 <p><!--para 4 -->
27596  Since complex and imaginary values are composed of real values, each function may be
27597  regarded as computing real values from real values. Except as noted, the functions treat
27598  real infinities, NaNs, signed zeros, subnormals, and the floating-point exception flags in a
27599  manner consistent with the specifications for real functions in F.10.<sup><a href="#note365"><b>365)</b></a></sup>
27600 <p><!--para 5 -->
27601  The functions cimag, conj, cproj, and creal are fully specified for all
27602  implementations, including IEC 60559 ones, in <a href="#7.3.9">7.3.9</a>. These functions raise no floating-
27603  point exceptions.
27604 <p><!--para 6 -->
27605  Each of the functions cabs and carg is specified by a formula in terms of a real
27606  function (whose special cases are covered in <a href="#F">annex F</a>):
27607 <pre>
27608          cabs(x + iy) = hypot(x, y)
27609          carg(x + iy) = atan2(y, x)
27610 </pre>
27611 <p><!--para 7 -->
27612  Each of the functions casin, catan, ccos, csin, and ctan is specified implicitly by
27613  a formula in terms of other complex functions (whose special cases are specified below):
27614 <pre>
27615          casin(z)        =   -i casinh(iz)
27616          catan(z)        =   -i catanh(iz)
27617          ccos(z)         =   ccosh(iz)
27618          csin(z)         =   -i csinh(iz)
27619          ctan(z)         =   -i ctanh(iz)
27620 </pre>
27621 <p><!--para 8 -->
27622  For the other functions, the following subclauses specify behavior for special cases,
27623  including treatment of the ''invalid'' and ''divide-by-zero'' floating-point exceptions. For
27624  families of functions, the specifications apply to all of the functions even though only the
27625  principal function is shown. For a function f satisfying f (conj(z)) = conj( f (z)), the
27626  specifications for the upper half-plane imply the specifications for the lower half-plane; if
27627  the function f is also either even, f (-z) = f (z), or odd, f (-z) = - f (z), then the
27628  specifications for the first quadrant imply the specifications for the other three quadrants.
27629 <p><!--para 9 -->
27630  In the following subclauses, cis(y) is defined as cos(y) + i sin(y).
27631  
27632  
27633  
27634  
27635 <!--page 553 -->
27636
27637 <p><b>Footnotes</b>
27638 <p><small><a name="note365" href="#note365">365)</a> As noted in <a href="#G.3">G.3</a>, a complex value with at least one infinite part is regarded as an infinity even if its
27639  other part is a NaN.
27640 </small>
27641
27642 <p><small><a href="#Contents">Contents</a></small>
27643 <h4><a name="G.6.1" href="#G.6.1">G.6.1 Trigonometric functions</a></h4>
27644
27645 <p><small><a href="#Contents">Contents</a></small>
27646 <h5><a name="G.6.1.1" href="#G.6.1.1">G.6.1.1 The cacos functions</a></h5>
27647 <p><!--para 1 -->
27648 <ul>
27649 <li>  cacos(conj(z)) = conj(cacos(z)).
27650 <li>  cacos((+-)0 + i0) returns pi /2 - i0.
27651 <li>  cacos((+-)0 + iNaN) returns pi /2 + iNaN.
27652 <li>  cacos(x + i (inf)) returns pi /2 - i (inf), for finite x.
27653 <li>  cacos(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27654  point exception, for nonzero finite x.
27655 <li>  cacos(-(inf) + iy) returns pi - i (inf), for positive-signed finite y.
27656 <li>  cacos(+(inf) + iy) returns +0 - i (inf), for positive-signed finite y.
27657 <li>  cacos(-(inf) + i (inf)) returns 3pi /4 - i (inf).
27658 <li>  cacos(+(inf) + i (inf)) returns pi /4 - i (inf).
27659 <li>  cacos((+-)(inf) + iNaN) returns NaN (+-) i (inf) (where the sign of the imaginary part of the
27660  result is unspecified).
27661 <li>  cacos(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27662  point exception, for finite y.
27663 <li>  cacos(NaN + i (inf)) returns NaN - i (inf).
27664 <li>  cacos(NaN + iNaN) returns NaN + iNaN.
27665 </ul>
27666
27667 <p><small><a href="#Contents">Contents</a></small>
27668 <h4><a name="G.6.2" href="#G.6.2">G.6.2 Hyperbolic functions</a></h4>
27669
27670 <p><small><a href="#Contents">Contents</a></small>
27671 <h5><a name="G.6.2.1" href="#G.6.2.1">G.6.2.1 The cacosh functions</a></h5>
27672 <p><!--para 1 -->
27673 <ul>
27674 <li>  cacosh(conj(z)) = conj(cacosh(z)).
27675 <li>  cacosh((+-)0 + i0) returns +0 + ipi /2.
27676 <li>  cacosh(x + i (inf)) returns +(inf) + ipi /2, for finite x.
27677 <li>  cacosh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
27678  floating-point exception, for finite x.
27679 <li>  cacosh(-(inf) + iy) returns +(inf) + ipi , for positive-signed finite y.
27680 <li>  cacosh(+(inf) + iy) returns +(inf) + i0, for positive-signed finite y.
27681 <li>  cacosh(-(inf) + i (inf)) returns +(inf) + i3pi /4.
27682 <li>  cacosh(+(inf) + i (inf)) returns +(inf) + ipi /4.
27683 <li>  cacosh((+-)(inf) + iNaN) returns +(inf) + iNaN.
27684 <!--page 554 -->
27685 <li>  cacosh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
27686  floating-point exception, for finite y.
27687 <li>  cacosh(NaN + i (inf)) returns +(inf) + iNaN.
27688 <li>  cacosh(NaN + iNaN) returns NaN + iNaN.
27689 </ul>
27690
27691 <p><small><a href="#Contents">Contents</a></small>
27692 <h5><a name="G.6.2.2" href="#G.6.2.2">G.6.2.2 The casinh functions</a></h5>
27693 <p><!--para 1 -->
27694 <ul>
27695 <li>  casinh(conj(z)) = conj(casinh(z)) and casinh is odd.
27696 <li>  casinh(+0 + i0) returns 0 + i0.
27697 <li>  casinh(x + i (inf)) returns +(inf) + ipi /2 for positive-signed finite x.
27698 <li>  casinh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
27699  floating-point exception, for finite x.
27700 <li>  casinh(+(inf) + iy) returns +(inf) + i0 for positive-signed finite y.
27701 <li>  casinh(+(inf) + i (inf)) returns +(inf) + ipi /4.
27702 <li>  casinh(+(inf) + iNaN) returns +(inf) + iNaN.
27703 <li>  casinh(NaN + i0) returns NaN + i0.
27704 <li>  casinh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
27705  floating-point exception, for finite nonzero y.
27706 <li>  casinh(NaN + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result
27707  is unspecified).
27708 <li>  casinh(NaN + iNaN) returns NaN + iNaN.
27709 </ul>
27710
27711 <p><small><a href="#Contents">Contents</a></small>
27712 <h5><a name="G.6.2.3" href="#G.6.2.3">G.6.2.3 The catanh functions</a></h5>
27713 <p><!--para 1 -->
27714 <ul>
27715 <li>  catanh(conj(z)) = conj(catanh(z)) and catanh is odd.
27716 <li>  catanh(+0 + i0) returns +0 + i0.
27717 <li>  catanh(+0 + iNaN) returns +0 + iNaN.
27718 <li>  catanh(+1 + i0) returns +(inf) + i0 and raises the ''divide-by-zero'' floating-point
27719  exception.
27720 <li>  catanh(x + i (inf)) returns +0 + ipi /2, for finite positive-signed x.
27721 <li>  catanh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
27722  floating-point exception, for nonzero finite x.
27723 <li>  catanh(+(inf) + iy) returns +0 + ipi /2, for finite positive-signed y.
27724 <li>  catanh(+(inf) + i (inf)) returns +0 + ipi /2.
27725 <li>  catanh(+(inf) + iNaN) returns +0 + iNaN.
27726 <!--page 555 -->
27727 <li>  catanh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
27728  floating-point exception, for finite y.
27729 <li>  catanh(NaN + i (inf)) returns (+-)0 + ipi /2 (where the sign of the real part of the result is
27730  unspecified).
27731 <li>  catanh(NaN + iNaN) returns NaN + iNaN.
27732 </ul>
27733
27734 <p><small><a href="#Contents">Contents</a></small>
27735 <h5><a name="G.6.2.4" href="#G.6.2.4">G.6.2.4 The ccosh functions</a></h5>
27736 <p><!--para 1 -->
27737 <ul>
27738 <li>  ccosh(conj(z)) = conj(ccosh(z)) and ccosh is even.
27739 <li>  ccosh(+0 + i0) returns 1 + i0.
27740 <li>  ccosh(+0 + i (inf)) returns NaN (+-) i0 (where the sign of the imaginary part of the
27741  result is unspecified) and raises the ''invalid'' floating-point exception.
27742 <li>  ccosh(+0 + iNaN) returns NaN (+-) i0 (where the sign of the imaginary part of the
27743  result is unspecified).
27744 <li>  ccosh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
27745  exception, for finite nonzero x.
27746 <li>  ccosh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27747  point exception, for finite nonzero x.
27748 <li>  ccosh(+(inf) + i0) returns +(inf) + i0.
27749 <li>  ccosh(+(inf) + iy) returns +(inf) cis(y), for finite nonzero y.
27750 <li>  ccosh(+(inf) + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result is
27751  unspecified) and raises the ''invalid'' floating-point exception.
27752 <li>  ccosh(+(inf) + iNaN) returns +(inf) + iNaN.
27753 <li>  ccosh(NaN + i0) returns NaN (+-) i0 (where the sign of the imaginary part of the
27754  result is unspecified).
27755 <li>  ccosh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27756  point exception, for all nonzero numbers y.
27757 <li>  ccosh(NaN + iNaN) returns NaN + iNaN.
27758 </ul>
27759
27760 <p><small><a href="#Contents">Contents</a></small>
27761 <h5><a name="G.6.2.5" href="#G.6.2.5">G.6.2.5 The csinh functions</a></h5>
27762 <p><!--para 1 -->
27763 <ul>
27764 <li>  csinh(conj(z)) = conj(csinh(z)) and csinh is odd.
27765 <li>  csinh(+0 + i0) returns +0 + i0.
27766 <li>  csinh(+0 + i (inf)) returns (+-)0 + iNaN (where the sign of the real part of the result is
27767  unspecified) and raises the ''invalid'' floating-point exception.
27768 <li>  csinh(+0 + iNaN) returns (+-)0 + iNaN (where the sign of the real part of the result is
27769  unspecified).
27770 <!--page 556 -->
27771 <li>  csinh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
27772  exception, for positive finite x.
27773 <li>  csinh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27774  point exception, for finite nonzero x.
27775 <li>  csinh(+(inf) + i0) returns +(inf) + i0.
27776 <li>  csinh(+(inf) + iy) returns +(inf) cis(y), for positive finite y.
27777 <li>  csinh(+(inf) + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result is
27778  unspecified) and raises the ''invalid'' floating-point exception.
27779 <li>  csinh(+(inf) + iNaN) returns (+-)(inf) + iNaN (where the sign of the real part of the result
27780  is unspecified).
27781 <li>  csinh(NaN + i0) returns NaN + i0.
27782 <li>  csinh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27783  point exception, for all nonzero numbers y.
27784 <li>  csinh(NaN + iNaN) returns NaN + iNaN.
27785 </ul>
27786
27787 <p><small><a href="#Contents">Contents</a></small>
27788 <h5><a name="G.6.2.6" href="#G.6.2.6">G.6.2.6 The ctanh functions</a></h5>
27789 <p><!--para 1 -->
27790 <ul>
27791 <li>  ctanh(conj(z)) = conj(ctanh(z))and ctanh is odd.
27792 <li>  ctanh(+0 + i0) returns +0 + i0.
27793 <li>  ctanh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
27794  exception, for finite x.
27795 <li>  ctanh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27796  point exception, for finite x.
27797 <li>  ctanh(+(inf) + iy) returns 1 + i0 sin(2y), for positive-signed finite y.
27798 <li>  ctanh(+(inf) + i (inf)) returns 1 (+-) i0 (where the sign of the imaginary part of the result
27799  is unspecified).
27800 <li>  ctanh(+(inf) + iNaN) returns 1 (+-) i0 (where the sign of the imaginary part of the
27801  result is unspecified).
27802 <li>  ctanh(NaN + i0) returns NaN + i0.
27803 <li>  ctanh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27804  point exception, for all nonzero numbers y.
27805 <li>  ctanh(NaN + iNaN) returns NaN + iNaN.
27806 <!--page 557 -->
27807 </ul>
27808
27809 <p><small><a href="#Contents">Contents</a></small>
27810 <h4><a name="G.6.3" href="#G.6.3">G.6.3 Exponential and logarithmic functions</a></h4>
27811
27812 <p><small><a href="#Contents">Contents</a></small>
27813 <h5><a name="G.6.3.1" href="#G.6.3.1">G.6.3.1 The cexp functions</a></h5>
27814 <p><!--para 1 -->
27815 <ul>
27816 <li>  cexp(conj(z)) = conj(cexp(z)).
27817 <li>  cexp((+-)0 + i0) returns 1 + i0.
27818 <li>  cexp(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
27819  exception, for finite x.
27820 <li>  cexp(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27821  point exception, for finite x.
27822 <li>  cexp(+(inf) + i0) returns +(inf) + i0.
27823 <li>  cexp(-(inf) + iy) returns +0 cis(y), for finite y.
27824 <li>  cexp(+(inf) + iy) returns +(inf) cis(y), for finite nonzero y.
27825 <li>  cexp(-(inf) + i (inf)) returns (+-)0 (+-) i0 (where the signs of the real and imaginary parts of
27826  the result are unspecified).
27827 <li>  cexp(+(inf) + i (inf)) returns (+-)(inf) + iNaN and raises the ''invalid'' floating-point
27828  exception (where the sign of the real part of the result is unspecified).
27829 <li>  cexp(-(inf) + iNaN) returns (+-)0 (+-) i0 (where the signs of the real and imaginary parts
27830  of the result are unspecified).
27831 <li>  cexp(+(inf) + iNaN) returns (+-)(inf) + iNaN (where the sign of the real part of the result
27832  is unspecified).
27833 <li>  cexp(NaN + i0) returns NaN + i0.
27834 <li>  cexp(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27835  point exception, for all nonzero numbers y.
27836 <li>  cexp(NaN + iNaN) returns NaN + iNaN.
27837 </ul>
27838
27839 <p><small><a href="#Contents">Contents</a></small>
27840 <h5><a name="G.6.3.2" href="#G.6.3.2">G.6.3.2 The clog functions</a></h5>
27841 <p><!--para 1 -->
27842 <ul>
27843 <li>  clog(conj(z)) = conj(clog(z)).
27844 <li>  clog(-0 + i0) returns -(inf) + ipi and raises the ''divide-by-zero'' floating-point
27845  exception.
27846 <li>  clog(+0 + i0) returns -(inf) + i0 and raises the ''divide-by-zero'' floating-point
27847  exception.
27848 <li>  clog(x + i (inf)) returns +(inf) + ipi /2, for finite x.
27849 <li>  clog(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27850  point exception, for finite x.
27851 <!--page 558 -->
27852 <li>  clog(-(inf) + iy) returns +(inf) + ipi , for finite positive-signed y.
27853 <li>  clog(+(inf) + iy) returns +(inf) + i0, for finite positive-signed y.
27854 <li>  clog(-(inf) + i (inf)) returns +(inf) + i3pi /4.
27855 <li>  clog(+(inf) + i (inf)) returns +(inf) + ipi /4.
27856 <li>  clog((+-)(inf) + iNaN) returns +(inf) + iNaN.
27857 <li>  clog(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27858  point exception, for finite y.
27859 <li>  clog(NaN + i (inf)) returns +(inf) + iNaN.
27860 <li>  clog(NaN + iNaN) returns NaN + iNaN.
27861 </ul>
27862
27863 <p><small><a href="#Contents">Contents</a></small>
27864 <h4><a name="G.6.4" href="#G.6.4">G.6.4 Power and absolute-value functions</a></h4>
27865
27866 <p><small><a href="#Contents">Contents</a></small>
27867 <h5><a name="G.6.4.1" href="#G.6.4.1">G.6.4.1 The cpow functions</a></h5>
27868 <p><!--para 1 -->
27869  The cpow functions raise floating-point exceptions if appropriate for the calculation of
27870  the parts of the result, and may also raise spurious floating-point exceptions.<sup><a href="#note366"><b>366)</b></a></sup>
27871
27872 <p><b>Footnotes</b>
27873 <p><small><a name="note366" href="#note366">366)</a> This allows cpow( z , c ) to be implemented as cexp(c      clog( z )) without precluding
27874  implementations that treat special cases more carefully.
27875 </small>
27876
27877 <p><small><a href="#Contents">Contents</a></small>
27878 <h5><a name="G.6.4.2" href="#G.6.4.2">G.6.4.2 The csqrt functions</a></h5>
27879 <p><!--para 1 -->
27880 <ul>
27881 <li>  csqrt(conj(z)) = conj(csqrt(z)).
27882 <li>  csqrt((+-)0 + i0) returns +0 + i0.
27883 <li>  csqrt(x + i (inf)) returns +(inf) + i (inf), for all x (including NaN).
27884 <li>  csqrt(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27885  point exception, for finite x.
27886 <li>  csqrt(-(inf) + iy) returns +0 + i (inf), for finite positive-signed y.
27887 <li>  csqrt(+(inf) + iy) returns +(inf) + i0, for finite positive-signed y.
27888 <li>  csqrt(-(inf) + iNaN) returns NaN (+-) i (inf) (where the sign of the imaginary part of the
27889  result is unspecified).
27890 <li>  csqrt(+(inf) + iNaN) returns +(inf) + iNaN.
27891 <li>  csqrt(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
27892  point exception, for finite y.
27893 <li>  csqrt(NaN + iNaN) returns NaN + iNaN.
27894  
27895  
27896  
27897  
27898 <!--page 559 -->
27899 </ul>
27900
27901 <p><small><a href="#Contents">Contents</a></small>
27902 <h3><a name="G.7" href="#G.7">G.7 Type-generic math &lt;tgmath.h&gt;</a></h3>
27903 <p><!--para 1 -->
27904  Type-generic macros that accept complex arguments also accept imaginary arguments. If
27905  an argument is imaginary, the macro expands to an expression whose type is real,
27906  imaginary, or complex, as appropriate for the particular function: if the argument is
27907  imaginary, then the types of cos, cosh, fabs, carg, cimag, and creal are real; the
27908  types of sin, tan, sinh, tanh, asin, atan, asinh, and atanh are imaginary; and
27909  the types of the others are complex.
27910 <p><!--para 2 -->
27911  Given an imaginary argument, each of the type-generic macros cos, sin, tan, cosh,
27912  sinh, tanh, asin, atan, asinh, atanh is specified by a formula in terms of real
27913  functions:
27914 <!--page 560 -->
27915 <pre>
27916          cos(iy)     =   cosh(y)
27917          sin(iy)     =   i sinh(y)
27918          tan(iy)     =   i tanh(y)
27919          cosh(iy)    =   cos(y)
27920          sinh(iy)    =   i sin(y)
27921          tanh(iy)    =   i tan(y)
27922          asin(iy)    =   i asinh(y)
27923          atan(iy)    =   i atanh(y)
27924          asinh(iy)   =   i asin(y)
27925          atanh(iy)   =   i atan(y)
27926 </pre>
27927
27928 <p><small><a href="#Contents">Contents</a></small>
27929 <h2><a name="H" href="#H">Annex H</a></h2>
27930 <pre>
27931                                      (informative)
27932                      Language independent arithmetic
27933 </pre>
27934
27935 <p><small><a href="#Contents">Contents</a></small>
27936 <h3><a name="H.1" href="#H.1">H.1 Introduction</a></h3>
27937 <p><!--para 1 -->
27938  This annex documents the extent to which the C language supports the ISO/IEC 10967-1
27939  standard for language-independent arithmetic (LIA-1). LIA-1 is more general than
27940  IEC 60559 (<a href="#F">annex F</a>) in that it covers integer and diverse floating-point arithmetics.
27941
27942 <p><small><a href="#Contents">Contents</a></small>
27943 <h3><a name="H.2" href="#H.2">H.2 Types</a></h3>
27944 <p><!--para 1 -->
27945  The relevant C arithmetic types meet the requirements of LIA-1 types if an
27946  implementation adds notification of exceptional arithmetic operations and meets the 1
27947  unit in the last place (ULP) accuracy requirement (LIA-1 subclause <a href="#5.2.8">5.2.8</a>).
27948
27949 <p><small><a href="#Contents">Contents</a></small>
27950 <h4><a name="H.2.1" href="#H.2.1">H.2.1 Boolean type</a></h4>
27951 <p><!--para 1 -->
27952  The LIA-1 data type Boolean is implemented by the C data type bool with values of
27953  true and false, all from <a href="#7.18">&lt;stdbool.h&gt;</a>.
27954
27955 <p><small><a href="#Contents">Contents</a></small>
27956 <h4><a name="H.2.2" href="#H.2.2">H.2.2 Integer types</a></h4>
27957 <p><!--para 1 -->
27958  The signed C integer types int, long int, long long int, and the corresponding
27959  unsigned types are compatible with LIA-1. If an implementation adds support for the
27960  LIA-1 exceptional values ''integer_overflow'' and ''undefined'', then those types are
27961  LIA-1 conformant types. C's unsigned integer types are ''modulo'' in the LIA-1 sense
27962  in that overflows or out-of-bounds results silently wrap. An implementation that defines
27963  signed integer types as also being modulo need not detect integer overflow, in which case,
27964  only integer divide-by-zero need be detected.
27965 <p><!--para 2 -->
27966  The parameters for the integer data types can be accessed by the following:
27967  maxint        INT_MAX, LONG_MAX, LLONG_MAX, UINT_MAX, ULONG_MAX,
27968 <pre>
27969                ULLONG_MAX
27970 </pre>
27971  minint        INT_MIN, LONG_MIN, LLONG_MIN
27972 <p><!--para 3 -->
27973  The parameter ''bounded'' is always true, and is not provided. The parameter ''minint''
27974  is always 0 for the unsigned types, and is not provided for those types.
27975 <!--page 561 -->
27976
27977 <p><small><a href="#Contents">Contents</a></small>
27978 <h5><a name="H.2.2.1" href="#H.2.2.1">H.2.2.1 Integer operations</a></h5>
27979 <p><!--para 1 -->
27980  The integer operations on integer types are the following:
27981  addI           x + y
27982  subI           x - y
27983  mulI           x * y
27984  divI, divtI    x / y
27985  remI, remtI    x % y
27986  negI           -x
27987  absI           abs(x), labs(x), llabs(x)
27988  eqI            x == y
27989  neqI           x != y
27990  lssI           x &lt; y
27991  leqI           x &lt;= y
27992  gtrI           x &gt; y
27993  geqI           x &gt;= y
27994  where x and y are expressions of the same integer type.
27995
27996 <p><small><a href="#Contents">Contents</a></small>
27997 <h4><a name="H.2.3" href="#H.2.3">H.2.3 Floating-point types</a></h4>
27998 <p><!--para 1 -->
27999  The C floating-point types float, double, and long double are compatible with
28000  LIA-1. If an implementation adds support for the LIA-1 exceptional values
28001  ''underflow'', ''floating_overflow'', and ''"undefined'', then those types are conformant
28002  with LIA-1. An implementation that uses IEC 60559 floating-point formats and
28003  operations (see <a href="#F">annex F</a>) along with IEC 60559 status flags and traps has LIA-1
28004  conformant types.
28005
28006 <p><small><a href="#Contents">Contents</a></small>
28007 <h5><a name="H.2.3.1" href="#H.2.3.1">H.2.3.1 Floating-point parameters</a></h5>
28008 <p><!--para 1 -->
28009  The parameters for a floating point data type can be accessed by the following:
28010  r              FLT_RADIX
28011  p              FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG
28012  emax           FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP
28013  emin           FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP
28014 <p><!--para 2 -->
28015  The derived constants for the floating point types are accessed by the following:
28016 <!--page 562 -->
28017  fmax          FLT_MAX, DBL_MAX, LDBL_MAX
28018  fminN         FLT_MIN, DBL_MIN, LDBL_MIN
28019  epsilon       FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON
28020  rnd_style     FLT_ROUNDS
28021
28022 <p><small><a href="#Contents">Contents</a></small>
28023 <h5><a name="H.2.3.2" href="#H.2.3.2">H.2.3.2 Floating-point operations</a></h5>
28024 <p><!--para 1 -->
28025  The floating-point operations on floating-point types are the following:
28026  addF          x + y
28027  subF          x - y
28028  mulF          x * y
28029  divF          x / y
28030  negF          -x
28031  absF          fabsf(x), fabs(x), fabsl(x)
28032  exponentF     1.f+logbf(x), 1.0+logb(x), 1.L+logbl(x)
28033  scaleF        scalbnf(x, n), scalbn(x, n), scalbnl(x, n),
28034 <pre>
28035                scalblnf(x, li), scalbln(x, li), scalblnl(x, li)
28036 </pre>
28037  intpartF      modff(x, &amp;y), modf(x, &amp;y), modfl(x, &amp;y)
28038  fractpartF    modff(x, &amp;y), modf(x, &amp;y), modfl(x, &amp;y)
28039  eqF           x == y
28040  neqF          x != y
28041  lssF          x &lt; y
28042  leqF          x &lt;= y
28043  gtrF          x &gt; y
28044  geqF          x &gt;= y
28045  where x and y are expressions of the same floating point type, n is of type int, and li
28046  is of type long int.
28047
28048 <p><small><a href="#Contents">Contents</a></small>
28049 <h5><a name="H.2.3.3" href="#H.2.3.3">H.2.3.3 Rounding styles</a></h5>
28050 <p><!--para 1 -->
28051  The C Standard requires all floating types to use the same radix and rounding style, so
28052  that only one identifier for each is provided to map to LIA-1.
28053 <p><!--para 2 -->
28054  The FLT_ROUNDS parameter can be used to indicate the LIA-1 rounding styles:
28055  truncate      FLT_ROUNDS == 0
28056 <!--page 563 -->
28057  nearest       FLT_ROUNDS == 1
28058  other         FLT_ROUNDS != 0 &amp;&amp; FLT_ROUNDS != 1
28059  provided that an implementation extends FLT_ROUNDS to cover the rounding style used
28060  in all relevant LIA-1 operations, not just addition as in C.
28061
28062 <p><small><a href="#Contents">Contents</a></small>
28063 <h4><a name="H.2.4" href="#H.2.4">H.2.4 Type conversions</a></h4>
28064 <p><!--para 1 -->
28065  The LIA-1 type conversions are the following type casts:
28066  cvtI' -&gt; I     (int)i, (long int)i, (long long int)i,
28067 <pre>
28068                (unsigned int)i, (unsigned long int)i,
28069                (unsigned long long int)i
28070 </pre>
28071  cvtF -&gt; I      (int)x, (long int)x, (long long int)x,
28072 <pre>
28073                (unsigned int)x, (unsigned long int)x,
28074                (unsigned long long int)x
28075 </pre>
28076  cvtI -&gt; F      (float)i, (double)i, (long double)i
28077  cvtF' -&gt; F     (float)x, (double)x, (long double)x
28078 <p><!--para 2 -->
28079  In the above conversions from floating to integer, the use of (cast)x can be replaced with
28080  (cast)round(x), (cast)rint(x), (cast)nearbyint(x), (cast)trunc(x),
28081  (cast)ceil(x), or (cast)floor(x). In addition, C's floating-point to integer
28082  conversion functions, lrint(), llrint(), lround(), and llround(), can be
28083  used. They all meet LIA-1's requirements on floating to integer rounding for in-range
28084  values. For out-of-range values, the conversions shall silently wrap for the modulo types.
28085 <p><!--para 3 -->
28086  The fmod() function is useful for doing silent wrapping to unsigned integer types, e.g.,
28087  fmod( fabs(rint(x)), 65536.0 ) or (0.0 &lt;= (y = fmod( rint(x),
28088  65536.0 )) ? y : 65536.0 + y) will compute an integer value in the range 0.0
28089  to 65535.0 which can then be cast to unsigned short int. But, the
28090  remainder() function is not useful for doing silent wrapping to signed integer types,
28091  e.g., remainder( rint(x), 65536.0 ) will compute an integer value in the
28092  range -32767.0 to +32768.0 which is not, in general, in the range of signed short
28093  int.
28094 <p><!--para 4 -->
28095  C's conversions (casts) from floating-point to floating-point can meet LIA-1
28096  requirements if an implementation uses round-to-nearest (IEC 60559 default).
28097 <p><!--para 5 -->
28098  C's conversions (casts) from integer to floating-point can meet LIA-1 requirements if an
28099  implementation uses round-to-nearest.
28100 <!--page 564 -->
28101
28102 <p><small><a href="#Contents">Contents</a></small>
28103 <h3><a name="H.3" href="#H.3">H.3 Notification</a></h3>
28104 <p><!--para 1 -->
28105  Notification is the process by which a user or program is informed that an exceptional
28106  arithmetic operation has occurred. C's operations are compatible with LIA-1 in that C
28107  allows an implementation to cause a notification to occur when any arithmetic operation
28108  returns an exceptional value as defined in LIA-1 clause 5.
28109
28110 <p><small><a href="#Contents">Contents</a></small>
28111 <h4><a name="H.3.1" href="#H.3.1">H.3.1 Notification alternatives</a></h4>
28112 <p><!--para 1 -->
28113  LIA-1 requires at least the following two alternatives for handling of notifications:
28114  setting indicators or trap-and-terminate. LIA-1 allows a third alternative: trap-and-
28115  resume.
28116 <p><!--para 2 -->
28117  An implementation need only support a given notification alternative for the entire
28118  program. An implementation may support the ability to switch between notification
28119  alternatives during execution, but is not required to do so. An implementation can
28120  provide separate selection for each kind of notification, but this is not required.
28121 <p><!--para 3 -->
28122  C allows an implementation to provide notification. C's SIGFPE (for traps) and
28123  FE_INVALID, FE_DIVBYZERO, FE_OVERFLOW, FE_UNDERFLOW (for indicators)
28124  can provide LIA-1 notification.
28125 <p><!--para 4 -->
28126  C's signal handlers are compatible with LIA-1. Default handling of SIGFPE can
28127  provide trap-and-terminate behavior, except for those LIA-1 operations implemented by
28128  math library function calls. User-provided signal handlers for SIGFPE allow for trap-
28129  and-resume behavior with the same constraint.
28130
28131 <p><small><a href="#Contents">Contents</a></small>
28132 <h5><a name="H.3.1.1" href="#H.3.1.1">H.3.1.1 Indicators</a></h5>
28133 <p><!--para 1 -->
28134  C's <a href="#7.6">&lt;fenv.h&gt;</a> status flags are compatible with the LIA-1 indicators.
28135 <p><!--para 2 -->
28136  The following mapping is for floating-point types:
28137  undefined                FE_INVALID, FE_DIVBYZERO
28138  floating_overflow         FE_OVERFLOW
28139  underflow                FE_UNDERFLOW
28140 <p><!--para 3 -->
28141  The floating-point indicator interrogation and manipulation operations are:
28142  set_indicators          feraiseexcept(i)
28143  clear_indicators        feclearexcept(i)
28144  test_indicators         fetestexcept(i)
28145  current_indicators      fetestexcept(FE_ALL_EXCEPT)
28146  where i is an expression of type int representing a subset of the LIA-1 indicators.
28147 <p><!--para 4 -->
28148  C allows an implementation to provide the following LIA-1 required behavior: at
28149  program termination if any indicator is set the implementation shall send an unambiguous
28150 <!--page 565 -->
28151  and ''hard to ignore'' message (see LIA-1 subclause <a href="#6.1.2">6.1.2</a>)
28152 <p><!--para 5 -->
28153  LIA-1 does not make the distinction between floating-point and integer for ''undefined''.
28154  This documentation makes that distinction because <a href="#7.6">&lt;fenv.h&gt;</a> covers only the floating-
28155  point indicators.
28156
28157 <p><small><a href="#Contents">Contents</a></small>
28158 <h5><a name="H.3.1.2" href="#H.3.1.2">H.3.1.2 Traps</a></h5>
28159 <p><!--para 1 -->
28160  C is compatible with LIA-1's trap requirements for arithmetic operations, but not for
28161  math library functions (which are not permitted to invoke a user's signal handler for
28162  SIGFPE). An implementation can provide an alternative of notification through
28163  termination with a ''hard-to-ignore'' message (see LIA-1 subclause <a href="#6.1.3">6.1.3</a>).
28164 <p><!--para 2 -->
28165  LIA-1 does not require that traps be precise.
28166 <p><!--para 3 -->
28167  C does require that SIGFPE be the signal corresponding to LIA-1 arithmetic exceptions,
28168  if there is any signal raised for them.
28169 <p><!--para 4 -->
28170  C supports signal handlers for SIGFPE and allows trapping of LIA-1 arithmetic
28171  exceptions. When LIA-1 arithmetic exceptions do trap, C's signal-handler mechanism
28172  allows trap-and-terminate (either default implementation behavior or user replacement for
28173  it) or trap-and-resume, at the programmer's option.
28174 <!--page 566 -->
28175
28176 <p><small><a href="#Contents">Contents</a></small>
28177 <h2><a name="I" href="#I">Annex I</a></h2>
28178 <pre>
28179                                      (informative)
28180                                 Common warnings
28181 </pre>
28182 <p><!--para 1 -->
28183  An implementation may generate warnings in many situations, none of which are
28184  specified as part of this International Standard. The following are a few of the more
28185  common situations.
28186 <p><!--para 2 -->
28187 <ul>
28188 <li>  A new struct or union type appears in a function prototype (<a href="#6.2.1">6.2.1</a>, <a href="#6.7.2.3">6.7.2.3</a>).
28189 <li>  A block with initialization of an object that has automatic storage duration is jumped
28190  into (<a href="#6.2.4">6.2.4</a>).
28191 <li>  An implicit narrowing conversion is encountered, such as the assignment of a long
28192  int or a double to an int, or a pointer to void to a pointer to any type other than
28193  a character type (<a href="#6.3">6.3</a>).
28194 <li>  A hexadecimal floating constant cannot be represented exactly in its evaluation format
28195  (<a href="#6.4.4.2">6.4.4.2</a>).
28196 <li>  An integer character constant includes more than one character or a wide character
28197  constant includes more than one multibyte character (<a href="#6.4.4.4">6.4.4.4</a>).
28198 <li>  The characters /* are found in a comment (<a href="#6.4.7">6.4.7</a>).
28199 <li>  An ''unordered'' binary operator (not comma, &amp;&amp;, or ||) contains a side effect to an
28200  lvalue in one operand, and a side effect to, or an access to the value of, the identical
28201  lvalue in the other operand (<a href="#6.5">6.5</a>).
28202 <li>  A function is called but no prototype has been supplied (<a href="#6.5.2.2">6.5.2.2</a>).
28203 <li>  The arguments in a function call do not agree in number and type with those of the
28204  parameters in a function definition that is not a prototype (<a href="#6.5.2.2">6.5.2.2</a>).
28205 <li>  An object is defined but not used (<a href="#6.7">6.7</a>).
28206 <li>  A value is given to an object of an enumerated type other than by assignment of an
28207  enumeration constant that is a member of that type, or an enumeration object that has
28208  the same type, or the value of a function that returns the same enumerated type
28209  (<a href="#6.7.2.2">6.7.2.2</a>).
28210 <li>  An aggregate has a partly bracketed initialization (<a href="#6.7.8">6.7.8</a>).
28211 <li>  A statement cannot be reached (<a href="#6.8">6.8</a>).
28212 <li>  A statement with no apparent effect is encountered (<a href="#6.8">6.8</a>).
28213 <li>  A constant expression is used as the controlling expression of a selection statement
28214  (<a href="#6.8.4">6.8.4</a>).
28215 <!--page 567 -->
28216 <li>  An incorrectly formed preprocessing group is encountered while skipping a
28217  preprocessing group (<a href="#6.10.1">6.10.1</a>).
28218 <li>  An unrecognized #pragma directive is encountered (<a href="#6.10.6">6.10.6</a>).
28219 <!--page 568 -->
28220 </ul>
28221
28222 <p><small><a href="#Contents">Contents</a></small>
28223 <h2><a name="J" href="#J">Annex J</a></h2>
28224 <pre>
28225                                       (informative)
28226                                    Portability issues
28227 </pre>
28228 <p><!--para 1 -->
28229  This annex collects some information about portability that appears in this International
28230  Standard.
28231
28232 <p><small><a href="#Contents">Contents</a></small>
28233 <h3><a name="J.1" href="#J.1">J.1 Unspecified behavior</a></h3>
28234 <p><!--para 1 -->
28235  The following are unspecified:
28236 <ul>
28237 <li>  The manner and timing of static initialization (<a href="#5.1.2">5.1.2</a>).
28238 <li>  The termination status returned to the hosted environment if the return type of main
28239  is not compatible with int (<a href="#5.1.2.2.3">5.1.2.2.3</a>).
28240 <li>  The behavior of the display device if a printing character is written when the active
28241  position is at the final position of a line (<a href="#5.2.2">5.2.2</a>).
28242 <li>  The behavior of the display device if a backspace character is written when the active
28243  position is at the initial position of a line (<a href="#5.2.2">5.2.2</a>).
28244 <li>  The behavior of the display device if a horizontal tab character is written when the
28245  active position is at or past the last defined horizontal tabulation position (<a href="#5.2.2">5.2.2</a>).
28246 <li>  The behavior of the display device if a vertical tab character is written when the active
28247  position is at or past the last defined vertical tabulation position (<a href="#5.2.2">5.2.2</a>).
28248 <li>  How an extended source character that does not correspond to a universal character
28249  name counts toward the significant initial characters in an external identifier (<a href="#5.2.4.1">5.2.4.1</a>).
28250 <li>  Many aspects of the representations of types (<a href="#6.2.6">6.2.6</a>).
28251 <li>  The value of padding bytes when storing values in structures or unions (<a href="#6.2.6.1">6.2.6.1</a>).
28252 <li>  The values of bytes that correspond to union members other than the one last stored
28253  into (<a href="#6.2.6.1">6.2.6.1</a>).
28254 <li>  The representation used when storing a value in an object that has more than one
28255  object representation for that value (<a href="#6.2.6.1">6.2.6.1</a>).
28256 <li>  The values of any padding bits in integer representations (<a href="#6.2.6.2">6.2.6.2</a>).
28257 <li>  Whether certain operators can generate negative zeros and whether a negative zero
28258  becomes a normal zero when stored in an object (<a href="#6.2.6.2">6.2.6.2</a>).
28259 <li>  Whether two string literals result in distinct arrays (<a href="#6.4.5">6.4.5</a>).
28260 <li>  The order in which subexpressions are evaluated and the order in which side effects
28261  take place, except as specified for the function-call (), &amp;&amp;, ||, ? :, and comma
28262 <!--page 569 -->
28263   operators (<a href="#6.5">6.5</a>).
28264 <li>  The order in which the function designator, arguments, and subexpressions within the
28265  arguments are evaluated in a function call (<a href="#6.5.2.2">6.5.2.2</a>).
28266 <li>  The order of side effects among compound literal initialization list expressions
28267  (<a href="#6.5.2.5">6.5.2.5</a>).
28268 <li>  The order in which the operands of an assignment operator are evaluated (<a href="#6.5.16">6.5.16</a>).
28269 <li>  The alignment of the addressable storage unit allocated to hold a bit-field (<a href="#6.7.2.1">6.7.2.1</a>).
28270 <li>  Whether a call to an inline function uses the inline definition or the external definition
28271  of the function (<a href="#6.7.4">6.7.4</a>).
28272 <li>  Whether or not a size expression is evaluated when it is part of the operand of a
28273  sizeof operator and changing the value of the size expression would not affect the
28274  result of the operator (<a href="#6.7.6.2">6.7.6.2</a>).
28275 <li>  The order in which any side effects occur among the initialization list expressions in
28276  an initializer (<a href="#6.7.9">6.7.9</a>).
28277 <li>  The layout of storage for function parameters (<a href="#6.9.1">6.9.1</a>).
28278 <li>  When a fully expanded macro replacement list contains a function-like macro name
28279  as its last preprocessing token and the next preprocessing token from the source file is
28280  a (, and the fully expanded replacement of that macro ends with the name of the first
28281  macro and the next preprocessing token from the source file is again a (, whether that
28282  is considered a nested replacement (<a href="#6.10.3">6.10.3</a>).
28283 <li>  The order in which # and ## operations are evaluated during macro substitution
28284  (<a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.3.3">6.10.3.3</a>).
28285 <li>  The state of the floating-point status flags when execution passes from a part of the *
28286  program translated with FENV_ACCESS ''off'' to a part translated with
28287  FENV_ACCESS ''on'' (<a href="#7.6.1">7.6.1</a>).
28288 <li>  The order in which feraiseexcept raises floating-point exceptions, except as
28289  stated in <a href="#F.8.6">F.8.6</a> (<a href="#7.6.2.3">7.6.2.3</a>).
28290 <li>  Whether math_errhandling is a macro or an identifier with external linkage
28291  (<a href="#7.12">7.12</a>).
28292 <li>  The results of the frexp functions when the specified value is not a floating-point
28293  number (<a href="#7.12.6.4">7.12.6.4</a>).
28294 <li>  The numeric result of the ilogb functions when the correct value is outside the
28295  range of the return type (<a href="#7.12.6.5">7.12.6.5</a>, <a href="#F.10.3.5">F.10.3.5</a>).
28296 <li>  The result of rounding when the value is out of range (<a href="#7.12.9.5">7.12.9.5</a>, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.10.6.5">F.10.6.5</a>).
28297 <!--page 570 -->
28298 <li>  The value stored by the remquo functions in the object pointed to by quo when y is
28299  zero (<a href="#7.12.10.3">7.12.10.3</a>).
28300 <li>  Whether a comparison macro argument that is represented in a format wider than its
28301  semantic type is converted to the semantic type (<a href="#7.12.14">7.12.14</a>).
28302 <li>  Whether setjmp is a macro or an identifier with external linkage (<a href="#7.13">7.13</a>).
28303 <li>  Whether va_copy and va_end are macros or identifiers with external linkage
28304  (<a href="#7.16.1">7.16.1</a>).
28305 <li>  The hexadecimal digit before the decimal point when a non-normalized floating-point
28306  number is printed with an a or A conversion specifier (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
28307 <li>  The value of the file position indicator after a successful call to the ungetc function
28308  for a text stream, or the ungetwc function for any stream, until all pushed-back
28309  characters are read or discarded (<a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.28.3.10">7.28.3.10</a>).
28310 <li>  The details of the value stored by the fgetpos function (<a href="#7.21.9.1">7.21.9.1</a>).
28311 <li>  The details of the value returned by the ftell function for a text stream (<a href="#7.21.9.4">7.21.9.4</a>).
28312 <li>  Whether the strtod, strtof, strtold, wcstod, wcstof, and wcstold
28313  functions convert a minus-signed sequence to a negative number directly or by
28314  negating the value resulting from converting the corresponding unsigned sequence
28315  (<a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>).
28316 <li>  The order and contiguity of storage allocated by successive calls to the calloc,
28317  malloc, and realloc functions (<a href="#7.22.3">7.22.3</a>).
28318 <li>  The amount of storage allocated by a successful call to the calloc, malloc, or
28319  realloc function when 0 bytes was requested (<a href="#7.22.3">7.22.3</a>).
28320 <li>  Which of two elements that compare as equal is matched by the bsearch function
28321  (<a href="#7.22.5.1">7.22.5.1</a>).
28322 <li>  The order of two elements that compare as equal in an array sorted by the qsort
28323  function (<a href="#7.22.5.2">7.22.5.2</a>).
28324 <li>  The encoding of the calendar time returned by the time function (<a href="#7.26.2.4">7.26.2.4</a>).
28325 <li>  The characters stored by the strftime or wcsftime function if any of the time
28326  values being converted is outside the normal range (<a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.5.1">7.28.5.1</a>).
28327 <li>  The conversion state after an encoding error occurs (<a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>,
28328  <a href="#7.28.6.4.2">7.28.6.4.2</a>,
28329 <li>  The resulting value when the ''invalid'' floating-point exception is raised during
28330  IEC 60559 floating to integer conversion (<a href="#F.4">F.4</a>).
28331 <!--page 571 -->
28332 <li>  Whether conversion of non-integer IEC 60559 floating values to integer raises the
28333  ''inexact'' floating-point exception (<a href="#F.4">F.4</a>).
28334 <li>  Whether or when library functions in <a href="#7.12">&lt;math.h&gt;</a> raise the ''inexact'' floating-point
28335  exception in an IEC 60559 conformant implementation (<a href="#F.10">F.10</a>).
28336 <li>  Whether or when library functions in <a href="#7.12">&lt;math.h&gt;</a> raise an undeserved ''underflow''
28337  floating-point exception in an IEC 60559 conformant implementation (<a href="#F.10">F.10</a>).
28338 <li>  The exponent value stored by frexp for a NaN or infinity (<a href="#F.10.3.4">F.10.3.4</a>).
28339 <li>  The numeric result returned by the lrint, llrint, lround, and llround
28340  functions if the rounded value is outside the range of the return type (<a href="#F.10.6.5">F.10.6.5</a>,
28341  <a href="#F.10.6.7">F.10.6.7</a>).
28342 <li>  The sign of one part of the complex result of several math functions for certain
28343  special cases in IEC 60559 compatible implementations (<a href="#G.6.1.1">G.6.1.1</a>, <a href="#G.6.2.2">G.6.2.2</a>, <a href="#G.6.2.3">G.6.2.3</a>,
28344  <a href="#G.6.2.4">G.6.2.4</a>, <a href="#G.6.2.5">G.6.2.5</a>, <a href="#G.6.2.6">G.6.2.6</a>, <a href="#G.6.3.1">G.6.3.1</a>, <a href="#G.6.4.2">G.6.4.2</a>).
28345 </ul>
28346
28347 <p><small><a href="#Contents">Contents</a></small>
28348 <h3><a name="J.2" href="#J.2">J.2 Undefined behavior</a></h3>
28349 <p><!--para 1 -->
28350  The behavior is undefined in the following circumstances:
28351 <ul>
28352 <li>  A ''shall'' or ''shall not'' requirement that appears outside of a constraint is violated
28353  (clause 4).
28354 <li>  A nonempty source file does not end in a new-line character which is not immediately
28355  preceded by a backslash character or ends in a partial preprocessing token or
28356  comment (<a href="#5.1.1.2">5.1.1.2</a>).
28357 <li>  Token concatenation produces a character sequence matching the syntax of a
28358  universal character name (<a href="#5.1.1.2">5.1.1.2</a>).
28359 <li>  A program in a hosted environment does not define a function named main using one
28360  of the specified forms (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
28361 <li>  The execution of a program contains a data race (<a href="#5.1.2.4">5.1.2.4</a>).
28362 <li>  A character not in the basic source character set is encountered in a source file, except
28363  in an identifier, a character constant, a string literal, a header name, a comment, or a
28364  preprocessing token that is never converted to a token (<a href="#5.2.1">5.2.1</a>).
28365 <li>  An identifier, comment, string literal, character constant, or header name contains an
28366  invalid multibyte character or does not begin and end in the initial shift state (<a href="#5.2.1.2">5.2.1.2</a>).
28367 <li>  The same identifier has both internal and external linkage in the same translation unit
28368  (<a href="#6.2.2">6.2.2</a>).
28369 <li>  An object is referred to outside of its lifetime (<a href="#6.2.4">6.2.4</a>).
28370 <!--page 572 -->
28371 <li>  The value of a pointer to an object whose lifetime has ended is used (<a href="#6.2.4">6.2.4</a>).
28372 <li>  The value of an object with automatic storage duration is used while it is
28373  indeterminate (<a href="#6.2.4">6.2.4</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.8">6.8</a>).
28374 <li>  A trap representation is read by an lvalue expression that does not have character type
28375  (<a href="#6.2.6.1">6.2.6.1</a>).
28376 <li>  A trap representation is produced by a side effect that modifies any part of the object
28377  using an lvalue expression that does not have character type (<a href="#6.2.6.1">6.2.6.1</a>).
28378 <li>  The operands to certain operators are such that they could produce a negative zero
28379  result, but the implementation does not support negative zeros (<a href="#6.2.6.2">6.2.6.2</a>).
28380 <li>  Two declarations of the same object or function specify types that are not compatible
28381  (<a href="#6.2.7">6.2.7</a>).
28382 <li>  A program requires the formation of a composite type from a variable length array
28383  type whose size is specified by an expression that is not evaluated (<a href="#6.2.7">6.2.7</a>).
28384 <li>  Conversion to or from an integer type produces a value outside the range that can be
28385  represented (<a href="#6.3.1.4">6.3.1.4</a>).
28386 <li>  Demotion of one real floating type to another produces a value outside the range that
28387  can be represented (<a href="#6.3.1.5">6.3.1.5</a>).
28388 <li>  An lvalue does not designate an object when evaluated (<a href="#6.3.2.1">6.3.2.1</a>).
28389 <li>  A non-array lvalue with an incomplete type is used in a context that requires the value
28390  of the designated object (<a href="#6.3.2.1">6.3.2.1</a>).
28391 <li>  An lvalue designating an object of automatic storage duration that could have been
28392  declared with the register storage class is used in a context that requires the value
28393  of the designated object, but the object is uninitialized. (<a href="#6.3.2.1">6.3.2.1</a>).
28394 <li>  An lvalue having array type is converted to a pointer to the initial element of the
28395  array, and the array object has register storage class (<a href="#6.3.2.1">6.3.2.1</a>).
28396 <li>  An attempt is made to use the value of a void expression, or an implicit or explicit
28397  conversion (except to void) is applied to a void expression (<a href="#6.3.2.2">6.3.2.2</a>).
28398 <li>  Conversion of a pointer to an integer type produces a value outside the range that can
28399  be represented (<a href="#6.3.2.3">6.3.2.3</a>).
28400 <li>  Conversion between two pointer types produces a result that is incorrectly aligned
28401  (<a href="#6.3.2.3">6.3.2.3</a>).
28402 <li>  A pointer is used to call a function whose type is not compatible with the referenced
28403  type (<a href="#6.3.2.3">6.3.2.3</a>).
28404 <!--page 573 -->
28405 <li>  An unmatched ' or " character is encountered on a logical source line during
28406  tokenization (<a href="#6.4">6.4</a>).
28407 <li>  A reserved keyword token is used in translation phase 7 or 8 for some purpose other
28408  than as a keyword (<a href="#6.4.1">6.4.1</a>).
28409 <li>  A universal character name in an identifier does not designate a character whose
28410  encoding falls into one of the specified ranges (<a href="#6.4.2.1">6.4.2.1</a>).
28411 <li>  The initial character of an identifier is a universal character name designating a digit
28412  (<a href="#6.4.2.1">6.4.2.1</a>).
28413 <li>  Two identifiers differ only in nonsignificant characters (<a href="#6.4.2.1">6.4.2.1</a>).
28414 <li>  The identifier __func__ is explicitly declared (<a href="#6.4.2.2">6.4.2.2</a>).
28415 <li>  The program attempts to modify a string literal (<a href="#6.4.5">6.4.5</a>).
28416 <li>  The characters ', \, ", //, or /* occur in the sequence between the &lt; and &gt;
28417  delimiters, or the characters ', \, //, or /* occur in the sequence between the "
28418  delimiters, in a header name preprocessing token (<a href="#6.4.7">6.4.7</a>).
28419 <li>  A side effect on a scalar object is unsequenced relative to either a different side effect
28420  on the same scalar object or a value computation using the value of the same scalar
28421  object (<a href="#6.5">6.5</a>).
28422 <li>  An exceptional condition occurs during the evaluation of an expression (<a href="#6.5">6.5</a>).
28423 <li>  An object has its stored value accessed other than by an lvalue of an allowable type
28424  (<a href="#6.5">6.5</a>).
28425 <li>  For a call to a function without a function prototype in scope, the number of *
28426  arguments does not equal the number of parameters (<a href="#6.5.2.2">6.5.2.2</a>).
28427 <li>  For call to a function without a function prototype in scope where the function is
28428  defined with a function prototype, either the prototype ends with an ellipsis or the
28429  types of the arguments after promotion are not compatible with the types of the
28430  parameters (<a href="#6.5.2.2">6.5.2.2</a>).
28431 <li>  For a call to a function without a function prototype in scope where the function is not
28432  defined with a function prototype, the types of the arguments after promotion are not
28433  compatible with those of the parameters after promotion (with certain exceptions)
28434  (<a href="#6.5.2.2">6.5.2.2</a>).
28435 <li>  A function is defined with a type that is not compatible with the type (of the
28436  expression) pointed to by the expression that denotes the called function (<a href="#6.5.2.2">6.5.2.2</a>).
28437 <li>  A member of an atomic structure or union is accessed (<a href="#6.5.2.3">6.5.2.3</a>).
28438 <li>  The operand of the unary * operator has an invalid value (<a href="#6.5.3.2">6.5.3.2</a>).
28439 <!--page 574 -->
28440 <li>  A pointer is converted to other than an integer or pointer type (<a href="#6.5.4">6.5.4</a>).
28441 <li>  The value of the second operand of the / or % operator is zero (<a href="#6.5.5">6.5.5</a>).
28442 <li>  Addition or subtraction of a pointer into, or just beyond, an array object and an
28443  integer type produces a result that does not point into, or just beyond, the same array
28444  object (<a href="#6.5.6">6.5.6</a>).
28445 <li>  Addition or subtraction of a pointer into, or just beyond, an array object and an
28446  integer type produces a result that points just beyond the array object and is used as
28447  the operand of a unary * operator that is evaluated (<a href="#6.5.6">6.5.6</a>).
28448 <li>  Pointers that do not point into, or just beyond, the same array object are subtracted
28449  (<a href="#6.5.6">6.5.6</a>).
28450 <li>  An array subscript is out of range, even if an object is apparently accessible with the
28451  given subscript (as in the lvalue expression a[1][7] given the declaration int
28452  a[4][5]) (<a href="#6.5.6">6.5.6</a>).
28453 <li>  The result of subtracting two pointers is not representable in an object of type
28454  ptrdiff_t (<a href="#6.5.6">6.5.6</a>).
28455 <li>  An expression is shifted by a negative number or by an amount greater than or equal
28456  to the width of the promoted expression (<a href="#6.5.7">6.5.7</a>).
28457 <li>  An expression having signed promoted type is left-shifted and either the value of the
28458  expression is negative or the result of shifting would be not be representable in the
28459  promoted type (<a href="#6.5.7">6.5.7</a>).
28460 <li>  Pointers that do not point to the same aggregate or union (nor just beyond the same
28461  array object) are compared using relational operators (<a href="#6.5.8">6.5.8</a>).
28462 <li>  An object is assigned to an inexactly overlapping object or to an exactly overlapping
28463  object with incompatible type (<a href="#6.5.16.1">6.5.16.1</a>).
28464 <li>  An expression that is required to be an integer constant expression does not have an
28465  integer type; has operands that are not integer constants, enumeration constants,
28466  character constants, sizeof expressions whose results are integer constants, or
28467  immediately-cast floating constants; or contains casts (outside operands to sizeof
28468  operators) other than conversions of arithmetic types to integer types (<a href="#6.6">6.6</a>).
28469 <li>  A constant expression in an initializer is not, or does not evaluate to, one of the
28470  following: an arithmetic constant expression, a null pointer constant, an address
28471  constant, or an address constant for a complete object type plus or minus an integer
28472  constant expression (<a href="#6.6">6.6</a>).
28473 <li>  An arithmetic constant expression does not have arithmetic type; has operands that
28474  are not integer constants, floating constants, enumeration constants, character
28475  constants, or sizeof expressions; or contains casts (outside operands to sizeof
28476 <!--page 575 -->
28477   operators) other than conversions of arithmetic types to arithmetic types (<a href="#6.6">6.6</a>).
28478 <li>  The value of an object is accessed by an array-subscript [], member-access . or -&gt;,
28479  address &amp;, or indirection * operator or a pointer cast in creating an address constant
28480  (<a href="#6.6">6.6</a>).
28481 <li>  An identifier for an object is declared with no linkage and the type of the object is
28482  incomplete after its declarator, or after its init-declarator if it has an initializer (<a href="#6.7">6.7</a>).
28483 <li>  A function is declared at block scope with an explicit storage-class specifier other
28484  than extern (<a href="#6.7.1">6.7.1</a>).
28485 <li>  A structure or union is defined as containing no named members, no anonymous
28486  structures, and no anonymous unions (<a href="#6.7.2.1">6.7.2.1</a>).
28487 <li>  An attempt is made to access, or generate a pointer to just past, a flexible array
28488  member of a structure when the referenced object provides no elements for that array
28489  (<a href="#6.7.2.1">6.7.2.1</a>).
28490 <li>  When the complete type is needed, an incomplete structure or union type is not
28491  completed in the same scope by another declaration of the tag that defines the content
28492  (<a href="#6.7.2.3">6.7.2.3</a>).
28493 <li>  An attempt is made to modify an object defined with a const-qualified type through
28494  use of an lvalue with non-const-qualified type (<a href="#6.7.3">6.7.3</a>).
28495 <li>  An attempt is made to refer to an object defined with a volatile-qualified type through
28496  use of an lvalue with non-volatile-qualified type (<a href="#6.7.3">6.7.3</a>).
28497 <li>  The specification of a function type includes any type qualifiers (<a href="#6.7.3">6.7.3</a>).                        *
28498 <li>  Two qualified types that are required to be compatible do not have the identically
28499  qualified version of a compatible type (<a href="#6.7.3">6.7.3</a>).
28500 <li>  An object which has been modified is accessed through a restrict-qualified pointer to
28501  a const-qualified type, or through a restrict-qualified pointer and another pointer that
28502  are not both based on the same object (<a href="#6.7.3.1">6.7.3.1</a>).
28503 <li>  A restrict-qualified pointer is assigned a value based on another restricted pointer
28504  whose associated block neither began execution before the block associated with this
28505  pointer, nor ended before the assignment (<a href="#6.7.3.1">6.7.3.1</a>).
28506 <li>  A function with external linkage is declared with an inline function specifier, but is
28507  not also defined in the same translation unit (<a href="#6.7.4">6.7.4</a>).
28508 <li>  A function declared with a _Noreturn function specifier returns to its caller (<a href="#6.7.4">6.7.4</a>).
28509 <li>  The definition of an object has an alignment specifier and another declaration of that
28510  object has a different alignment specifier (<a href="#6.7.5">6.7.5</a>).
28511 <!--page 576 -->
28512 <li>  Declarations of an object in different translation units have different alignment
28513  specifiers (<a href="#6.7.5">6.7.5</a>).
28514 <li>  Two pointer types that are required to be compatible are not identically qualified, or
28515  are not pointers to compatible types (<a href="#6.7.6.1">6.7.6.1</a>).
28516 <li>  The size expression in an array declaration is not a constant expression and evaluates
28517  at program execution time to a nonpositive value (<a href="#6.7.6.2">6.7.6.2</a>).
28518 <li>  In a context requiring two array types to be compatible, they do not have compatible
28519  element types, or their size specifiers evaluate to unequal values (<a href="#6.7.6.2">6.7.6.2</a>).
28520 <li>  A declaration of an array parameter includes the keyword static within the [ and
28521  ] and the corresponding argument does not provide access to the first element of an
28522  array with at least the specified number of elements (<a href="#6.7.6.3">6.7.6.3</a>).
28523 <li>  A storage-class specifier or type qualifier modifies the keyword void as a function
28524  parameter type list (<a href="#6.7.6.3">6.7.6.3</a>).
28525 <li>  In a context requiring two function types to be compatible, they do not have
28526  compatible return types, or their parameters disagree in use of the ellipsis terminator
28527  or the number and type of parameters (after default argument promotion, when there
28528  is no parameter type list or when one type is specified by a function definition with an
28529  identifier list) (<a href="#6.7.6.3">6.7.6.3</a>).
28530 <li>  The value of an unnamed member of a structure or union is used (<a href="#6.7.9">6.7.9</a>).
28531 <li>  The initializer for a scalar is neither a single expression nor a single expression
28532  enclosed in braces (<a href="#6.7.9">6.7.9</a>).
28533 <li>  The initializer for a structure or union object that has automatic storage duration is
28534  neither an initializer list nor a single expression that has compatible structure or union
28535  type (<a href="#6.7.9">6.7.9</a>).
28536 <li>  The initializer for an aggregate or union, other than an array initialized by a string
28537  literal, is not a brace-enclosed list of initializers for its elements or members (<a href="#6.7.9">6.7.9</a>).
28538 <li>  An identifier with external linkage is used, but in the program there does not exist
28539  exactly one external definition for the identifier, or the identifier is not used and there
28540  exist multiple external definitions for the identifier (<a href="#6.9">6.9</a>).
28541 <li>  A function definition includes an identifier list, but the types of the parameters are not
28542  declared in a following declaration list (<a href="#6.9.1">6.9.1</a>).
28543 <li>  An adjusted parameter type in a function definition is not a complete object type
28544  (<a href="#6.9.1">6.9.1</a>).
28545 <li>  A function that accepts a variable number of arguments is defined without a
28546  parameter type list that ends with the ellipsis notation (<a href="#6.9.1">6.9.1</a>).
28547 <!--page 577 -->
28548 <li>  The } that terminates a function is reached, and the value of the function call is used
28549  by the caller (<a href="#6.9.1">6.9.1</a>).
28550 <li>  An identifier for an object with internal linkage and an incomplete type is declared
28551  with a tentative definition (<a href="#6.9.2">6.9.2</a>).
28552 <li>  The token defined is generated during the expansion of a #if or #elif
28553  preprocessing directive, or the use of the defined unary operator does not match
28554  one of the two specified forms prior to macro replacement (<a href="#6.10.1">6.10.1</a>).
28555 <li>  The #include preprocessing directive that results after expansion does not match
28556  one of the two header name forms (<a href="#6.10.2">6.10.2</a>).
28557 <li>  The character sequence in an #include preprocessing directive does not start with a
28558  letter (<a href="#6.10.2">6.10.2</a>).
28559 <li>  There are sequences of preprocessing tokens within the list of macro arguments that
28560  would otherwise act as preprocessing directives (<a href="#6.10.3">6.10.3</a>).
28561 <li>  The result of the preprocessing operator # is not a valid character string literal
28562  (<a href="#6.10.3.2">6.10.3.2</a>).
28563 <li>  The result of the preprocessing operator ## is not a valid preprocessing token
28564  (<a href="#6.10.3.3">6.10.3.3</a>).
28565 <li>  The #line preprocessing directive that results after expansion does not match one of
28566  the two well-defined forms, or its digit sequence specifies zero or a number greater
28567  than 2147483647 (<a href="#6.10.4">6.10.4</a>).
28568 <li>  A non-STDC #pragma preprocessing directive that is documented as causing
28569  translation failure or some other form of undefined behavior is encountered (<a href="#6.10.6">6.10.6</a>).
28570 <li>  A #pragma STDC preprocessing directive does not match one of the well-defined
28571  forms (<a href="#6.10.6">6.10.6</a>).
28572 <li>  The name of a predefined macro, or the identifier defined, is the subject of a
28573  #define or #undef preprocessing directive (<a href="#6.10.8">6.10.8</a>).
28574 <li>  An attempt is made to copy an object to an overlapping object by use of a library
28575  function, other than as explicitly allowed (e.g., memmove) (clause 7).
28576 <li>  A file with the same name as one of the standard headers, not provided as part of the
28577  implementation, is placed in any of the standard places that are searched for included
28578  source files (<a href="#7.1.2">7.1.2</a>).
28579 <li>  A header is included within an external declaration or definition (<a href="#7.1.2">7.1.2</a>).
28580 <li>  A function, object, type, or macro that is specified as being declared or defined by
28581  some standard header is used before any header that declares or defines it is included
28582  (<a href="#7.1.2">7.1.2</a>).
28583 <!--page 578 -->
28584 <li>  A standard header is included while a macro is defined with the same name as a
28585  keyword (<a href="#7.1.2">7.1.2</a>).
28586 <li>  The program attempts to declare a library function itself, rather than via a standard
28587  header, but the declaration does not have external linkage (<a href="#7.1.2">7.1.2</a>).
28588 <li>  The program declares or defines a reserved identifier, other than as allowed by <a href="#7.1.4">7.1.4</a>
28589  (<a href="#7.1.3">7.1.3</a>).
28590 <li>  The program removes the definition of a macro whose name begins with an
28591  underscore and either an uppercase letter or another underscore (<a href="#7.1.3">7.1.3</a>).
28592 <li>  An argument to a library function has an invalid value or a type not expected by a
28593  function with variable number of arguments (<a href="#7.1.4">7.1.4</a>).
28594 <li>  The pointer passed to a library function array parameter does not have a value such
28595  that all address computations and object accesses are valid (<a href="#7.1.4">7.1.4</a>).
28596 <li>  The macro definition of assert is suppressed in order to access an actual function
28597  (<a href="#7.2">7.2</a>).
28598 <li>  The argument to the assert macro does not have a scalar type (<a href="#7.2">7.2</a>).
28599 <li>  The CX_LIMITED_RANGE, FENV_ACCESS, or FP_CONTRACT pragma is used in
28600  any context other than outside all external declarations or preceding all explicit
28601  declarations and statements inside a compound statement (<a href="#7.3.4">7.3.4</a>, <a href="#7.6.1">7.6.1</a>, <a href="#7.12.2">7.12.2</a>).
28602 <li>  The value of an argument to a character handling function is neither equal to the value
28603  of EOF nor representable as an unsigned char (<a href="#7.4">7.4</a>).
28604 <li>  A macro definition of errno is suppressed in order to access an actual object, or the
28605  program defines an identifier with the name errno (<a href="#7.5">7.5</a>).
28606 <li>  Part of the program tests floating-point status flags, sets floating-point control modes,
28607  or runs under non-default mode settings, but was translated with the state for the
28608  FENV_ACCESS pragma ''off'' (<a href="#7.6.1">7.6.1</a>).
28609 <li>  The exception-mask argument for one of the functions that provide access to the
28610  floating-point status flags has a nonzero value not obtained by bitwise OR of the
28611  floating-point exception macros (<a href="#7.6.2">7.6.2</a>).
28612 <li>  The fesetexceptflag function is used to set floating-point status flags that were
28613  not specified in the call to the fegetexceptflag function that provided the value
28614  of the corresponding fexcept_t object (<a href="#7.6.2.4">7.6.2.4</a>).
28615 <li>  The argument to fesetenv or feupdateenv is neither an object set by a call to
28616  fegetenv or feholdexcept, nor is it an environment macro (<a href="#7.6.4.3">7.6.4.3</a>, <a href="#7.6.4.4">7.6.4.4</a>).
28617 <li>  The value of the result of an integer arithmetic or conversion function cannot be
28618  represented (<a href="#7.8.2.1">7.8.2.1</a>, <a href="#7.8.2.2">7.8.2.2</a>, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.22.6.1">7.22.6.1</a>, <a href="#7.22.6.2">7.22.6.2</a>, <a href="#7.22.1">7.22.1</a>).
28619 <!--page 579 -->
28620 <li>  The program modifies the string pointed to by the value returned by the setlocale
28621  function (<a href="#7.11.1.1">7.11.1.1</a>).
28622 <li>  The program modifies the structure pointed to by the value returned by the
28623  localeconv function (<a href="#7.11.2.1">7.11.2.1</a>).
28624 <li>  A macro definition of math_errhandling is suppressed or the program defines
28625  an identifier with the name math_errhandling (<a href="#7.12">7.12</a>).
28626 <li>  An argument to a floating-point classification or comparison macro is not of real
28627  floating type (<a href="#7.12.3">7.12.3</a>, <a href="#7.12.14">7.12.14</a>).
28628 <li>  A macro definition of setjmp is suppressed in order to access an actual function, or
28629  the program defines an external identifier with the name setjmp (<a href="#7.13">7.13</a>).
28630 <li>  An invocation of the setjmp macro occurs other than in an allowed context
28631  (<a href="#7.13.2.1">7.13.2.1</a>).
28632 <li>  The longjmp function is invoked to restore a nonexistent environment (<a href="#7.13.2.1">7.13.2.1</a>).
28633 <li>  After a longjmp, there is an attempt to access the value of an object of automatic
28634  storage duration that does not have volatile-qualified type, local to the function
28635  containing the invocation of the corresponding setjmp macro, that was changed
28636  between the setjmp invocation and longjmp call (<a href="#7.13.2.1">7.13.2.1</a>).
28637 <li>  The program specifies an invalid pointer to a signal handler function (<a href="#7.14.1.1">7.14.1.1</a>).
28638 <li>  A signal handler returns when the signal corresponded to a computational exception
28639  (<a href="#7.14.1.1">7.14.1.1</a>).
28640 <li>  A signal occurs as the result of calling the abort or raise function, and the signal
28641  handler calls the raise function (<a href="#7.14.1.1">7.14.1.1</a>).
28642 <li>  A signal occurs other than as the result of calling the abort or raise function, and
28643  the signal handler refers to an object with static or thread storage duration that is not a
28644  lock-free atomic object other than by assigning a value to an object declared as
28645  volatile sig_atomic_t, or calls any function in the standard library other
28646  than the abort function, the _Exit function, the quick_exit function, or the
28647  signal function (for the same signal number) (<a href="#7.14.1.1">7.14.1.1</a>).
28648 <li>  The value of errno is referred to after a signal occurred other than as the result of
28649  calling the abort or raise function and the corresponding signal handler obtained
28650  a SIG_ERR return from a call to the signal function (<a href="#7.14.1.1">7.14.1.1</a>).
28651 <li>  A signal is generated by an asynchronous signal handler (<a href="#7.14.1.1">7.14.1.1</a>).
28652 <li>  A function with a variable number of arguments attempts to access its varying
28653  arguments other than through a properly declared and initialized va_list object, or
28654  before the va_start macro is invoked (<a href="#7.16">7.16</a>, <a href="#7.16.1.1">7.16.1.1</a>, <a href="#7.16.1.4">7.16.1.4</a>).
28655 <!--page 580 -->
28656 <li>  The macro va_arg is invoked using the parameter ap that was passed to a function
28657  that invoked the macro va_arg with the same parameter (<a href="#7.16">7.16</a>).
28658 <li>  A macro definition of va_start, va_arg, va_copy, or va_end is suppressed in
28659  order to access an actual function, or the program defines an external identifier with
28660  the name va_copy or va_end (<a href="#7.16.1">7.16.1</a>).
28661 <li>  The va_start or va_copy macro is invoked without a corresponding invocation
28662  of the va_end macro in the same function, or vice versa (<a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.3">7.16.1.3</a>,
28663  <a href="#7.16.1.4">7.16.1.4</a>).
28664 <li>  The type parameter to the va_arg macro is not such that a pointer to an object of
28665  that type can be obtained simply by postfixing a * (<a href="#7.16.1.1">7.16.1.1</a>).
28666 <li>  The va_arg macro is invoked when there is no actual next argument, or with a
28667  specified type that is not compatible with the promoted type of the actual next
28668  argument, with certain exceptions (<a href="#7.16.1.1">7.16.1.1</a>).
28669 <li>  The va_copy or va_start macro is called to initialize a va_list that was
28670  previously initialized by either macro without an intervening invocation of the
28671  va_end macro for the same va_list (<a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.4">7.16.1.4</a>).
28672 <li>  The parameter parmN of a va_start macro is declared with the register
28673  storage class, with a function or array type, or with a type that is not compatible with
28674  the type that results after application of the default argument promotions (<a href="#7.16.1.4">7.16.1.4</a>).
28675 <li>  The member designator parameter of an offsetof macro is an invalid right
28676  operand of the . operator for the type parameter, or designates a bit-field (<a href="#7.19">7.19</a>).
28677 <li>  The argument in an instance of one of the integer-constant macros is not a decimal,
28678  octal, or hexadecimal constant, or it has a value that exceeds the limits for the
28679  corresponding type (<a href="#7.20.4">7.20.4</a>).
28680 <li>  A byte input/output function is applied to a wide-oriented stream, or a wide character
28681  input/output function is applied to a byte-oriented stream (<a href="#7.21.2">7.21.2</a>).
28682 <li>  Use is made of any portion of a file beyond the most recent wide character written to
28683  a wide-oriented stream (<a href="#7.21.2">7.21.2</a>).
28684 <li>  The value of a pointer to a FILE object is used after the associated file is closed
28685  (<a href="#7.21.3">7.21.3</a>).
28686 <li>  The stream for the fflush function points to an input stream or to an update stream
28687  in which the most recent operation was input (<a href="#7.21.5.2">7.21.5.2</a>).
28688 <li>  The string pointed to by the mode argument in a call to the fopen function does not
28689  exactly match one of the specified character sequences (<a href="#7.21.5.3">7.21.5.3</a>).
28690 <li>  An output operation on an update stream is followed by an input operation without an
28691    intervening call to the fflush function or a file positioning function, or an input
28692 <!--page 581 -->
28693   operation on an update stream is followed by an output operation with an intervening
28694   call to a file positioning function (<a href="#7.21.5.3">7.21.5.3</a>).
28695 <li>  An attempt is made to use the contents of the array that was supplied in a call to the
28696  setvbuf function (<a href="#7.21.5.6">7.21.5.6</a>).
28697 <li>  There are insufficient arguments for the format in a call to one of the formatted
28698  input/output functions, or an argument does not have an appropriate type (<a href="#7.21.6.1">7.21.6.1</a>,
28699  <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28700 <li>  The format in a call to one of the formatted input/output functions or to the
28701  strftime or wcsftime function is not a valid multibyte character sequence that
28702  begins and ends in its initial shift state (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>,
28703  <a href="#7.28.5.1">7.28.5.1</a>).
28704 <li>  In a call to one of the formatted output functions, a precision appears with a
28705  conversion specifier other than those described (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
28706 <li>  A conversion specification for a formatted output function uses an asterisk to denote
28707  an argument-supplied field width or precision, but the corresponding argument is not
28708  provided (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
28709 <li>  A conversion specification for a formatted output function uses a # or 0 flag with a
28710  conversion specifier other than those described (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
28711 <li>  A conversion specification for one of the formatted input/output functions uses a
28712  length modifier with a conversion specifier other than those described (<a href="#7.21.6.1">7.21.6.1</a>,
28713  <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28714 <li>  An s conversion specifier is encountered by one of the formatted output functions,
28715  and the argument is missing the null terminator (unless a precision is specified that
28716  does not require null termination) (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
28717 <li>  An n conversion specification for one of the formatted input/output functions includes
28718  any flags, an assignment-suppressing character, a field width, or a precision (<a href="#7.21.6.1">7.21.6.1</a>,
28719  <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28720 <li>  A % conversion specifier is encountered by one of the formatted input/output
28721  functions, but the complete conversion specification is not exactly %% (<a href="#7.21.6.1">7.21.6.1</a>,
28722  <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28723 <li>  An invalid conversion specification is found in the format for one of the formatted
28724  input/output functions, or the strftime or wcsftime function (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
28725  <a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.5.1">7.28.5.1</a>).
28726 <li>  The number of characters transmitted by a formatted output function is greater than
28727  INT_MAX (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.3">7.21.6.3</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.10">7.21.6.10</a>).
28728 <!--page 582 -->
28729 <li>  The result of a conversion by one of the formatted input functions cannot be
28730  represented in the corresponding object, or the receiving object does not have an
28731  appropriate type (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28732 <li>  A c, s, or [ conversion specifier is encountered by one of the formatted input
28733  functions, and the array pointed to by the corresponding argument is not large enough
28734  to accept the input sequence (and a null terminator if the conversion specifier is s or
28735  [) (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28736 <li>  A c, s, or [ conversion specifier with an l qualifier is encountered by one of the
28737  formatted input functions, but the input is not a valid multibyte character sequence
28738  that begins in the initial shift state (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28739 <li>  The input item for a %p conversion by one of the formatted input functions is not a
28740  value converted earlier during the same program execution (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
28741 <li>  The vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf,
28742  vsscanf, vfwprintf, vfwscanf, vswprintf, vswscanf, vwprintf, or
28743  vwscanf function is called with an improperly initialized va_list argument, or
28744  the argument is used (other than in an invocation of va_end) after the function
28745  returns (<a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>, <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>,
28746  <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>).
28747 <li>  The contents of the array supplied in a call to the fgets or fgetws function are
28748  used after a read error occurred (<a href="#7.21.7.2">7.21.7.2</a>, <a href="#7.28.3.2">7.28.3.2</a>).
28749 <li>  The file position indicator for a binary stream is used after a call to the ungetc
28750  function where its value was zero before the call (<a href="#7.21.7.10">7.21.7.10</a>).
28751 <li>  The file position indicator for a stream is used after an error occurred during a call to
28752  the fread or fwrite function (<a href="#7.21.8.1">7.21.8.1</a>, <a href="#7.21.8.2">7.21.8.2</a>).
28753 <li>  A partial element read by a call to the fread function is used (<a href="#7.21.8.1">7.21.8.1</a>).
28754 <li>  The fseek function is called for a text stream with a nonzero offset and either the
28755  offset was not returned by a previous successful call to the ftell function on a
28756  stream associated with the same file or whence is not SEEK_SET (<a href="#7.21.9.2">7.21.9.2</a>).
28757 <li>  The fsetpos function is called to set a position that was not returned by a previous
28758  successful call to the fgetpos function on a stream associated with the same file
28759  (<a href="#7.21.9.3">7.21.9.3</a>).
28760 <li>  A non-null pointer returned by a call to the calloc, malloc, or realloc function
28761  with a zero requested size is used to access an object (<a href="#7.22.3">7.22.3</a>).
28762 <li>  The value of a pointer that refers to space deallocated by a call to the free or
28763  realloc function is used (<a href="#7.22.3">7.22.3</a>).
28764 <!--page 583 -->
28765 <li>  The alignment requested of the aligned_alloc function is not valid or not
28766  supported by the implementation, or the size requested is not an integral multiple of
28767  the alignment (<a href="#7.22.3.1">7.22.3.1</a>).
28768 <li>  The pointer argument to the free or realloc function does not match a pointer
28769  earlier returned by a memory management function, or the space has been deallocated
28770  by a call to free or realloc (<a href="#7.22.3.3">7.22.3.3</a>, <a href="#7.22.3.5">7.22.3.5</a>).
28771 <li>  The value of the object allocated by the malloc function is used (<a href="#7.22.3.4">7.22.3.4</a>).
28772 <li>  The value of any bytes in a new object allocated by the realloc function beyond
28773  the size of the old object are used (<a href="#7.22.3.5">7.22.3.5</a>).
28774 <li>  The program calls the exit or quick_exit function more than once, or calls both
28775  functions (<a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.7">7.22.4.7</a>).
28776 <li>  During the call to a function registered with the atexit or at_quick_exit
28777  function, a call is made to the longjmp function that would terminate the call to the
28778  registered function (<a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.7">7.22.4.7</a>).
28779 <li>  The string set up by the getenv or strerror function is modified by the program
28780  (<a href="#7.22.4.6">7.22.4.6</a>, <a href="#7.23.6.2">7.23.6.2</a>).
28781 <li>  A command is executed through the system function in a way that is documented as
28782  causing termination or some other form of undefined behavior (<a href="#7.22.4.8">7.22.4.8</a>).
28783 <li>  A searching or sorting utility function is called with an invalid pointer argument, even
28784  if the number of elements is zero (<a href="#7.22.5">7.22.5</a>).
28785 <li>  The comparison function called by a searching or sorting utility function alters the
28786  contents of the array being searched or sorted, or returns ordering values
28787  inconsistently (<a href="#7.22.5">7.22.5</a>).
28788 <li>  The array being searched by the bsearch function does not have its elements in
28789  proper order (<a href="#7.22.5.1">7.22.5.1</a>).
28790 <li>  The current conversion state is used by a multibyte/wide character conversion
28791  function after changing the LC_CTYPE category (<a href="#7.22.7">7.22.7</a>).
28792 <li>  A string or wide string utility function is instructed to access an array beyond the end
28793  of an object (<a href="#7.23.1">7.23.1</a>, <a href="#7.28.4">7.28.4</a>).
28794 <li>  A string or wide string utility function is called with an invalid pointer argument, even
28795  if the length is zero (<a href="#7.23.1">7.23.1</a>, <a href="#7.28.4">7.28.4</a>).
28796 <li>  The contents of the destination array are used after a call to the strxfrm,
28797  strftime, wcsxfrm, or wcsftime function in which the specified length was
28798  too small to hold the entire null-terminated result (<a href="#7.23.4.5">7.23.4.5</a>, <a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.4.4.4">7.28.4.4.4</a>,
28799  <a href="#7.28.5.1">7.28.5.1</a>).
28800 <!--page 584 -->
28801 <li>  The first argument in the very first call to the strtok or wcstok is a null pointer
28802  (<a href="#7.23.5.8">7.23.5.8</a>, <a href="#7.28.4.5.7">7.28.4.5.7</a>).
28803 <li>  The type of an argument to a type-generic macro is not compatible with the type of
28804  the corresponding parameter of the selected function (<a href="#7.24">7.24</a>).
28805 <li>  A complex argument is supplied for a generic parameter of a type-generic macro that
28806  has no corresponding complex function (<a href="#7.24">7.24</a>).
28807 <li>  At least one field of the broken-down time passed to asctime contains a value
28808  outside its normal range, or the calculated year exceeds four digits or is less than the
28809  year 1000 (<a href="#7.26.3.1">7.26.3.1</a>).
28810 <li>  The argument corresponding to an s specifier without an l qualifier in a call to the
28811  fwprintf function does not point to a valid multibyte character sequence that
28812  begins in the initial shift state (<a href="#7.28.2.11">7.28.2.11</a>).
28813 <li>  In a call to the wcstok function, the object pointed to by ptr does not have the
28814  value stored by the previous call for the same wide string (<a href="#7.28.4.5.7">7.28.4.5.7</a>).
28815 <li>  An mbstate_t object is used inappropriately (<a href="#7.28.6">7.28.6</a>).
28816 <li>  The value of an argument of type wint_t to a wide character classification or case
28817  mapping function is neither equal to the value of WEOF nor representable as a
28818  wchar_t (<a href="#7.29.1">7.29.1</a>).
28819 <li>  The iswctype function is called using a different LC_CTYPE category from the
28820  one in effect for the call to the wctype function that returned the description
28821  (<a href="#7.29.2.2.1">7.29.2.2.1</a>).
28822 <li>  The towctrans function is called using a different LC_CTYPE category from the
28823  one in effect for the call to the wctrans function that returned the description
28824  (<a href="#7.29.3.2.1">7.29.3.2.1</a>).
28825 </ul>
28826
28827 <p><small><a href="#Contents">Contents</a></small>
28828 <h3><a name="J.3" href="#J.3">J.3 Implementation-defined behavior</a></h3>
28829 <p><!--para 1 -->
28830  A conforming implementation is required to document its choice of behavior in each of
28831  the areas listed in this subclause. The following are implementation-defined:
28832 <!--page 585 -->
28833
28834 <p><small><a href="#Contents">Contents</a></small>
28835 <h4><a name="J.3.1" href="#J.3.1">J.3.1 Translation</a></h4>
28836 <p><!--para 1 -->
28837 <ul>
28838 <li>  How a diagnostic is identified (<a href="#3.10">3.10</a>, <a href="#5.1.1.3">5.1.1.3</a>).
28839 <li>  Whether each nonempty sequence of white-space characters other than new-line is
28840  retained or replaced by one space character in translation phase 3 (<a href="#5.1.1.2">5.1.1.2</a>).
28841 </ul>
28842
28843 <p><small><a href="#Contents">Contents</a></small>
28844 <h4><a name="J.3.2" href="#J.3.2">J.3.2 Environment</a></h4>
28845 <p><!--para 1 -->
28846 <ul>
28847 <li>  The mapping between physical source file multibyte characters and the source
28848  character set in translation phase 1 (<a href="#5.1.1.2">5.1.1.2</a>).
28849 <li>  The name and type of the function called at program startup in a freestanding
28850  environment (<a href="#5.1.2.1">5.1.2.1</a>).
28851 <li>  The effect of program termination in a freestanding environment (<a href="#5.1.2.1">5.1.2.1</a>).
28852 <li>  An alternative manner in which the main function may be defined (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
28853 <li>  The values given to the strings pointed to by the argv argument to main (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
28854 <li>  What constitutes an interactive device (<a href="#5.1.2.3">5.1.2.3</a>).
28855 <li>  Whether a program can have more than one thread of execution in a freestanding
28856  environment (<a href="#5.1.2.4">5.1.2.4</a>).
28857 <li>  The set of signals, their semantics, and their default handling (<a href="#7.14">7.14</a>).
28858 <li>  Signal values other than SIGFPE, SIGILL, and SIGSEGV that correspond to a
28859  computational exception (<a href="#7.14.1.1">7.14.1.1</a>).
28860 <li>  Signals for which the equivalent of signal(sig, SIG_IGN); is executed at
28861  program startup (<a href="#7.14.1.1">7.14.1.1</a>).
28862 <li>  The set of environment names and the method for altering the environment list used
28863  by the getenv function (<a href="#7.22.4.6">7.22.4.6</a>).
28864 <li>  The manner of execution of the string by the system function (<a href="#7.22.4.8">7.22.4.8</a>).
28865 </ul>
28866
28867 <p><small><a href="#Contents">Contents</a></small>
28868 <h4><a name="J.3.3" href="#J.3.3">J.3.3 Identifiers</a></h4>
28869 <p><!--para 1 -->
28870 <ul>
28871 <li>  Which additional multibyte characters may appear in identifiers and their
28872  correspondence to universal character names (<a href="#6.4.2">6.4.2</a>).
28873 <li>  The number of significant initial characters in an identifier (<a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2">6.4.2</a>).
28874 <!--page 586 -->
28875 </ul>
28876
28877 <p><small><a href="#Contents">Contents</a></small>
28878 <h4><a name="J.3.4" href="#J.3.4">J.3.4 Characters</a></h4>
28879 <p><!--para 1 -->
28880 <ul>
28881 <li>  The number of bits in a byte (<a href="#3.6">3.6</a>).
28882 <li>  The values of the members of the execution character set (<a href="#5.2.1">5.2.1</a>).
28883 <li>  The unique value of the member of the execution character set produced for each of
28884  the standard alphabetic escape sequences (<a href="#5.2.2">5.2.2</a>).
28885 <li>  The value of a char object into which has been stored any character other than a
28886  member of the basic execution character set (<a href="#6.2.5">6.2.5</a>).
28887 <li>  Which of signed char or unsigned char has the same range, representation,
28888  and behavior as ''plain'' char (<a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>).
28889 <li>  The mapping of members of the source character set (in character constants and string
28890  literals) to members of the execution character set (<a href="#6.4.4.4">6.4.4.4</a>, <a href="#5.1.1.2">5.1.1.2</a>).
28891 <li>  The value of an integer character constant containing more than one character or
28892  containing a character or escape sequence that does not map to a single-byte
28893  execution character (<a href="#6.4.4.4">6.4.4.4</a>).
28894 <li>  The value of a wide character constant containing more than one multibyte character
28895  or a single multibyte character that maps to multiple members of the extended
28896  execution character set, or containing a multibyte character or escape sequence not
28897  represented in the extended execution character set (<a href="#6.4.4.4">6.4.4.4</a>).
28898 <li>  The current locale used to convert a wide character constant consisting of a single
28899  multibyte character that maps to a member of the extended execution character set
28900  into a corresponding wide character code (<a href="#6.4.4.4">6.4.4.4</a>).
28901 <li>  Whether differently-prefixed wide string literal tokens can be concatenated and, if so,
28902  the treatment of the resulting multibyte character sequence (<a href="#6.4.5">6.4.5</a>).
28903 <li>  The current locale used to convert a wide string literal into corresponding wide
28904  character codes (<a href="#6.4.5">6.4.5</a>).
28905 <li>  The value of a string literal containing a multibyte character or escape sequence not
28906  represented in the execution character set (<a href="#6.4.5">6.4.5</a>).
28907 <li>  The encoding of any of wchar_t, char16_t, and char32_t where the
28908  corresponding  standard   encoding macro      (__STDC_ISO_10646__,
28909  __STDC_UTF_16__, or __STDC_UTF_32__) is not defined (<a href="#6.10.8.2">6.10.8.2</a>).
28910 <!--page 587 -->
28911 </ul>
28912
28913 <p><small><a href="#Contents">Contents</a></small>
28914 <h4><a name="J.3.5" href="#J.3.5">J.3.5 Integers</a></h4>
28915 <p><!--para 1 -->
28916 <ul>
28917 <li>  Any extended integer types that exist in the implementation (<a href="#6.2.5">6.2.5</a>).
28918 <li>  Whether signed integer types are represented using sign and magnitude, two's
28919  complement, or ones' complement, and whether the extraordinary value is a trap
28920  representation or an ordinary value (<a href="#6.2.6.2">6.2.6.2</a>).
28921 <li>  The rank of any extended integer type relative to another extended integer type with
28922  the same precision (<a href="#6.3.1.1">6.3.1.1</a>).
28923 <li>  The result of, or the signal raised by, converting an integer to a signed integer type
28924  when the value cannot be represented in an object of that type (<a href="#6.3.1.3">6.3.1.3</a>).
28925 <li>  The results of some bitwise operations on signed integers (<a href="#6.5">6.5</a>).
28926 </ul>
28927
28928 <p><small><a href="#Contents">Contents</a></small>
28929 <h4><a name="J.3.6" href="#J.3.6">J.3.6 Floating point</a></h4>
28930 <p><!--para 1 -->
28931 <ul>
28932 <li>  The accuracy of the floating-point operations and of the library functions in
28933  <a href="#7.12">&lt;math.h&gt;</a> and <a href="#7.3">&lt;complex.h&gt;</a> that return floating-point results (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
28934 <li>  The accuracy of the conversions between floating-point internal representations and
28935  string representations performed by the library functions in <a href="#7.21">&lt;stdio.h&gt;</a>,
28936  <a href="#7.22">&lt;stdlib.h&gt;</a>, and <a href="#7.28">&lt;wchar.h&gt;</a> (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
28937 <li>  The rounding behaviors characterized by non-standard values of FLT_ROUNDS
28938  (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
28939 <li>  The evaluation methods characterized by non-standard negative values of
28940  FLT_EVAL_METHOD (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
28941 <li>  The direction of rounding when an integer is converted to a floating-point number that
28942  cannot exactly represent the original value (<a href="#6.3.1.4">6.3.1.4</a>).
28943 <li>  The direction of rounding when a floating-point number is converted to a narrower
28944  floating-point number (<a href="#6.3.1.5">6.3.1.5</a>).
28945 <li>  How the nearest representable value or the larger or smaller representable value
28946  immediately adjacent to the nearest representable value is chosen for certain floating
28947  constants (<a href="#6.4.4.2">6.4.4.2</a>).
28948 <li>  Whether and how floating expressions are contracted when not disallowed by the
28949  FP_CONTRACT pragma (<a href="#6.5">6.5</a>).
28950 <li>  The default state for the FENV_ACCESS pragma (<a href="#7.6.1">7.6.1</a>).
28951 <li>  Additional floating-point exceptions, rounding           modes,     environments,   and
28952  classifications, and their macro names (<a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>).
28953 <li>  The default state for the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>).
28954 <!--page 588 -->
28955 </ul>
28956
28957 <p><small><a href="#Contents">Contents</a></small>
28958 <h4><a name="J.3.7" href="#J.3.7">J.3.7 Arrays and pointers</a></h4>
28959 <p><!--para 1 -->
28960 <ul>
28961 <li>  The result of converting a pointer to an integer or vice versa (<a href="#6.3.2.3">6.3.2.3</a>).
28962 <li>  The size of the result of subtracting two pointers to elements of the same array
28963  (<a href="#6.5.6">6.5.6</a>).
28964 </ul>
28965
28966 <p><small><a href="#Contents">Contents</a></small>
28967 <h4><a name="J.3.8" href="#J.3.8">J.3.8 Hints</a></h4>
28968 <p><!--para 1 -->
28969 <ul>
28970 <li>  The extent to which suggestions made by using the register storage-class
28971  specifier are effective (<a href="#6.7.1">6.7.1</a>).
28972 <li>  The extent to which suggestions made by using the inline function specifier are
28973  effective (<a href="#6.7.4">6.7.4</a>).
28974 </ul>
28975
28976 <p><small><a href="#Contents">Contents</a></small>
28977 <h4><a name="J.3.9" href="#J.3.9">J.3.9 Structures, unions, enumerations, and bit-fields</a></h4>
28978 <p><!--para 1 -->
28979 <ul>
28980 <li>  Whether a ''plain'' int bit-field is treated as a signed int bit-field or as an
28981  unsigned int bit-field (<a href="#6.7.2">6.7.2</a>, <a href="#6.7.2.1">6.7.2.1</a>).
28982 <li>  Allowable bit-field types other than _Bool, signed int, and unsigned int
28983  (<a href="#6.7.2.1">6.7.2.1</a>).
28984 <li>  Whether atomic types are permitted for bit-fields (<a href="#6.7.2.1">6.7.2.1</a>).
28985 <li>  Whether a bit-field can straddle a storage-unit boundary (<a href="#6.7.2.1">6.7.2.1</a>).
28986 <li>  The order of allocation of bit-fields within a unit (<a href="#6.7.2.1">6.7.2.1</a>).
28987 <li>  The alignment of non-bit-field members of structures (<a href="#6.7.2.1">6.7.2.1</a>). This should present
28988  no problem unless binary data written by one implementation is read by another.
28989 <li>  The integer type compatible with each enumerated type (<a href="#6.7.2.2">6.7.2.2</a>).
28990 </ul>
28991
28992 <p><small><a href="#Contents">Contents</a></small>
28993 <h4><a name="J.3.10" href="#J.3.10">J.3.10 Qualifiers</a></h4>
28994 <p><!--para 1 -->
28995 <ul>
28996 <li>  What constitutes an access to an object that has volatile-qualified type (<a href="#6.7.3">6.7.3</a>).
28997 </ul>
28998
28999 <p><small><a href="#Contents">Contents</a></small>
29000 <h4><a name="J.3.11" href="#J.3.11">J.3.11 Preprocessing directives</a></h4>
29001 <p><!--para 1 -->
29002 <ul>
29003 <li>  The locations within #pragma directives where header name preprocessing tokens
29004  are recognized (<a href="#6.4">6.4</a>, <a href="#6.4.7">6.4.7</a>).
29005 <li>  How sequences in both forms of header names are mapped to headers or external
29006  source file names (<a href="#6.4.7">6.4.7</a>).
29007 <li>  Whether the value of a character constant in a constant expression that controls
29008  conditional inclusion matches the value of the same character constant in the
29009  execution character set (<a href="#6.10.1">6.10.1</a>).
29010 <li>  Whether the value of a single-character character constant in a constant expression
29011  that controls conditional inclusion may have a negative value (<a href="#6.10.1">6.10.1</a>).
29012 <!--page 589 -->
29013 <li>  The places that are searched for an included &lt; &gt; delimited header, and how the places
29014  are specified or the header is identified (<a href="#6.10.2">6.10.2</a>).
29015 <li>  How the named source file is searched for in an included " " delimited header
29016  (<a href="#6.10.2">6.10.2</a>).
29017 <li>  The method by which preprocessing tokens (possibly resulting from macro
29018  expansion) in a #include directive are combined into a header name (<a href="#6.10.2">6.10.2</a>).
29019 <li>  The nesting limit for #include processing (<a href="#6.10.2">6.10.2</a>).
29020 <li>  Whether the # operator inserts a \ character before the \ character that begins a
29021  universal character name in a character constant or string literal (<a href="#6.10.3.2">6.10.3.2</a>).
29022 <li>  The behavior on each recognized non-STDC #pragma directive (<a href="#6.10.6">6.10.6</a>).
29023 <li>  The definitions for __DATE__ and __TIME__ when respectively, the date and
29024  time of translation are not available (<a href="#6.10.8.1">6.10.8.1</a>).
29025 </ul>
29026
29027 <p><small><a href="#Contents">Contents</a></small>
29028 <h4><a name="J.3.12" href="#J.3.12">J.3.12 Library functions</a></h4>
29029 <p><!--para 1 -->
29030 <ul>
29031 <li>  Any library facilities available to a freestanding program, other than the minimal set
29032  required by clause 4 (<a href="#5.1.2.1">5.1.2.1</a>).
29033 <li>  The format of the diagnostic printed by the assert macro (<a href="#7.2.1.1">7.2.1.1</a>).
29034 <li>  The representation of the floating-point               status   flags   stored   by   the
29035  fegetexceptflag function (<a href="#7.6.2.2">7.6.2.2</a>).
29036 <li>  Whether the feraiseexcept function raises the ''inexact'' floating-point
29037  exception in addition to the ''overflow'' or ''underflow'' floating-point exception
29038  (<a href="#7.6.2.3">7.6.2.3</a>).
29039 <li>  Strings other than "C" and "" that may be passed as the second argument to the
29040  setlocale function (<a href="#7.11.1.1">7.11.1.1</a>).
29041 <li>  The types defined for float_t and double_t when the value of the
29042  FLT_EVAL_METHOD macro is less than 0 (<a href="#7.12">7.12</a>).
29043 <li>  Domain errors for the mathematics functions, other than those required by this
29044  International Standard (<a href="#7.12.1">7.12.1</a>).
29045 <li>  The values returned by the mathematics functions on domain errors or pole errors
29046  (<a href="#7.12.1">7.12.1</a>).
29047 <li>  The values returned by the mathematics functions on underflow range errors, whether
29048  errno is set to the value of the macro ERANGE when the integer expression
29049  math_errhandling &amp; MATH_ERRNO is nonzero, and whether the ''underflow''
29050  floating-point exception is raised when the integer expression math_errhandling
29051  &amp; MATH_ERREXCEPT is nonzero. (<a href="#7.12.1">7.12.1</a>).
29052 <!--page 590 -->
29053 <li>  Whether a domain error occurs or zero is returned when an fmod function has a
29054  second argument of zero (<a href="#7.12.10.1">7.12.10.1</a>).
29055 <li>  Whether a domain error occurs or zero is returned when a remainder function has
29056  a second argument of zero (<a href="#7.12.10.2">7.12.10.2</a>).
29057 <li>  The base-2 logarithm of the modulus used by the remquo functions in reducing the
29058  quotient (<a href="#7.12.10.3">7.12.10.3</a>).
29059 <li>  Whether a domain error occurs or zero is returned when a remquo function has a
29060  second argument of zero (<a href="#7.12.10.3">7.12.10.3</a>).
29061 <li>  Whether the equivalent of signal(sig, SIG_DFL); is executed prior to the call
29062  of a signal handler, and, if not, the blocking of signals that is performed (<a href="#7.14.1.1">7.14.1.1</a>).
29063 <li>  The null pointer constant to which the macro NULL expands (<a href="#7.19">7.19</a>).
29064 <li>  Whether the last line of a text stream requires a terminating new-line character
29065  (<a href="#7.21.2">7.21.2</a>).
29066 <li>  Whether space characters that are written out to a text stream immediately before a
29067  new-line character appear when read in (<a href="#7.21.2">7.21.2</a>).
29068 <li>  The number of null characters that may be appended to data written to a binary
29069  stream (<a href="#7.21.2">7.21.2</a>).
29070 <li>  Whether the file position indicator of an append-mode stream is initially positioned at
29071  the beginning or end of the file (<a href="#7.21.3">7.21.3</a>).
29072 <li>  Whether a write on a text stream causes the associated file to be truncated beyond that
29073  point (<a href="#7.21.3">7.21.3</a>).
29074 <li>  The characteristics of file buffering (<a href="#7.21.3">7.21.3</a>).
29075 <li>  Whether a zero-length file actually exists (<a href="#7.21.3">7.21.3</a>).
29076 <li>  The rules for composing valid file names (<a href="#7.21.3">7.21.3</a>).
29077 <li>  Whether the same file can be simultaneously open multiple times (<a href="#7.21.3">7.21.3</a>).
29078 <li>  The nature and choice of encodings used for multibyte characters in files (<a href="#7.21.3">7.21.3</a>).
29079 <li>  The effect of the remove function on an open file (<a href="#7.21.4.1">7.21.4.1</a>).
29080 <li>  The effect if a file with the new name exists prior to a call to the rename function
29081  (<a href="#7.21.4.2">7.21.4.2</a>).
29082 <li>  Whether an open temporary file is removed upon abnormal program termination
29083  (<a href="#7.21.4.3">7.21.4.3</a>).
29084 <li>  Which changes of mode are permitted (if any), and under what circumstances
29085  (<a href="#7.21.5.4">7.21.5.4</a>).
29086 <!--page 591 -->
29087 <li>  The style used to print an infinity or NaN, and the meaning of any n-char or n-wchar
29088  sequence printed for a NaN (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
29089 <li>  The output for %p conversion in the fprintf or fwprintf function (<a href="#7.21.6.1">7.21.6.1</a>,
29090  <a href="#7.28.2.1">7.28.2.1</a>).
29091 <li>  The interpretation of a - character that is neither the first nor the last character, nor
29092  the second where a ^ character is the first, in the scanlist for %[ conversion in the
29093  fscanf or fwscanf function (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>).
29094 <li>  The set of sequences matched by a %p conversion and the interpretation of the
29095  corresponding input item in the fscanf or fwscanf function (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
29096 <li>  The value to which the macro errno is set by the fgetpos, fsetpos, or ftell
29097  functions on failure (<a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.9.4">7.21.9.4</a>).
29098 <li>  The meaning of any n-char or n-wchar sequence in a string representing a NaN that is
29099  converted by the strtod, strtof, strtold, wcstod, wcstof, or wcstold
29100  function (<a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>).
29101 <li>  Whether or not the strtod, strtof, strtold, wcstod, wcstof, or wcstold
29102  function sets errno to ERANGE when underflow occurs (<a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>).
29103 <li>  Whether the calloc, malloc, and realloc functions return a null pointer or a
29104  pointer to an allocated object when the size requested is zero (<a href="#7.22.3">7.22.3</a>).
29105 <li>  Whether open streams with unwritten buffered data are flushed, open streams are
29106  closed, or temporary files are removed when the abort or _Exit function is called
29107  (<a href="#7.22.4.1">7.22.4.1</a>, <a href="#7.22.4.5">7.22.4.5</a>).
29108 <li>  The termination status returned to the host environment by the abort, exit,
29109  _Exit, or quick_exit function (<a href="#7.22.4.1">7.22.4.1</a>, <a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>).
29110 <li>  The value returned by the system function when its argument is not a null pointer
29111  (<a href="#7.22.4.8">7.22.4.8</a>).
29112 <li>  The local time zone and Daylight Saving Time (<a href="#7.26.1">7.26.1</a>).
29113 <li>  The range and precision of times representable in clock_t and time_t (<a href="#7.26">7.26</a>).
29114 <li>  The era for the clock function (<a href="#7.26.2.1">7.26.2.1</a>).
29115 <li>  The replacement string for the %Z specifier to the strftime, and wcsftime
29116  functions in the "C" locale (<a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.5.1">7.28.5.1</a>).
29117 <li>  Whether the functions in <a href="#7.12">&lt;math.h&gt;</a> honor the rounding direction mode in an
29118  IEC 60559 conformant implementation, unless explicitly specified otherwise (<a href="#F.10">F.10</a>).
29119 <!--page 592 -->
29120 </ul>
29121
29122 <p><small><a href="#Contents">Contents</a></small>
29123 <h4><a name="J.3.13" href="#J.3.13">J.3.13 Architecture</a></h4>
29124 <p><!--para 1 -->
29125 <ul>
29126 <li>  The values or expressions assigned to the macros specified in the headers
29127  <a href="#7.7">&lt;float.h&gt;</a>, <a href="#7.10">&lt;limits.h&gt;</a>, and <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#5.2.4.2">5.2.4.2</a>, <a href="#7.20.2">7.20.2</a>, <a href="#7.20.3">7.20.3</a>).
29128 <li>  The result of attempting to indirectly access an object with automatic or thread
29129  storage duration from a thread other than the one with which it is associated (<a href="#6.2.4">6.2.4</a>).
29130 <li>  The number, order, and encoding of bytes in any object (when not explicitly specified
29131  in this International Standard) (<a href="#6.2.6.1">6.2.6.1</a>).
29132 <li>  Whether any extended alignments are supported and the contexts in which they are
29133  supported (<a href="#6.2.8">6.2.8</a>).
29134 <li>  Valid alignment values other than those returned by an alignof expression for
29135  fundamental types, if any (<a href="#6.2.8">6.2.8</a>).
29136 <li>  The value of the result of the sizeof and alignof operators (<a href="#6.5.3.4">6.5.3.4</a>).
29137 </ul>
29138
29139 <p><small><a href="#Contents">Contents</a></small>
29140 <h3><a name="J.4" href="#J.4">J.4 Locale-specific behavior</a></h3>
29141 <p><!--para 1 -->
29142  The following characteristics of a hosted environment are locale-specific and are required
29143  to be documented by the implementation:
29144 <ul>
29145 <li>  Additional members of the source and execution character sets beyond the basic
29146  character set (<a href="#5.2.1">5.2.1</a>).
29147 <li>  The presence, meaning, and representation of additional multibyte characters in the
29148  execution character set beyond the basic character set (<a href="#5.2.1.2">5.2.1.2</a>).
29149 <li>  The shift states used for the encoding of multibyte characters (<a href="#5.2.1.2">5.2.1.2</a>).
29150 <li>  The direction of writing of successive printing characters (<a href="#5.2.2">5.2.2</a>).
29151 <li>  The decimal-point character (<a href="#7.1.1">7.1.1</a>).
29152 <li>  The set of printing characters (<a href="#7.4">7.4</a>, <a href="#7.29.2">7.29.2</a>).
29153 <li>  The set of control characters (<a href="#7.4">7.4</a>, <a href="#7.29.2">7.29.2</a>).
29154 <li>  The sets of characters tested for by the isalpha, isblank, islower, ispunct,
29155  isspace, isupper, iswalpha, iswblank, iswlower, iswpunct,
29156  iswspace, or iswupper functions (<a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.3">7.4.1.3</a>, <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.1.9">7.4.1.9</a>, <a href="#7.4.1.10">7.4.1.10</a>,
29157  <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>, <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>, <a href="#7.29.2.1.10">7.29.2.1.10</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>).
29158 <li>  The native environment (<a href="#7.11.1.1">7.11.1.1</a>).
29159 <li>  Additional subject sequences accepted by the numeric conversion functions (<a href="#7.22.1">7.22.1</a>,
29160  <a href="#7.28.4.1">7.28.4.1</a>).
29161 <li>  The collation sequence of the execution character set (<a href="#7.23.4.3">7.23.4.3</a>, <a href="#7.28.4.4.2">7.28.4.4.2</a>).
29162 <!--page 593 -->
29163 <li>  The contents of the error message strings set up by the strerror function
29164  (<a href="#7.23.6.2">7.23.6.2</a>).
29165 <li>  The formats for time and date (<a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.5.1">7.28.5.1</a>).
29166 <li>  Character mappings that are supported by the towctrans function (<a href="#7.29.1">7.29.1</a>).
29167 <li>  Character classifications that are supported by the iswctype function (<a href="#7.29.1">7.29.1</a>).
29168 </ul>
29169
29170 <p><small><a href="#Contents">Contents</a></small>
29171 <h3><a name="J.5" href="#J.5">J.5 Common extensions</a></h3>
29172 <p><!--para 1 -->
29173  The following extensions are widely used in many systems, but are not portable to all
29174  implementations. The inclusion of any extension that may cause a strictly conforming
29175  program to become invalid renders an implementation nonconforming. Examples of such
29176  extensions are new keywords, extra library functions declared in standard headers, or
29177  predefined macros with names that do not begin with an underscore.
29178
29179 <p><small><a href="#Contents">Contents</a></small>
29180 <h4><a name="J.5.1" href="#J.5.1">J.5.1 Environment arguments</a></h4>
29181 <p><!--para 1 -->
29182  In a hosted environment, the main function receives a third argument, char *envp[],
29183  that points to a null-terminated array of pointers to char, each of which points to a string
29184  that provides information about the environment for this execution of the program
29185  (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
29186
29187 <p><small><a href="#Contents">Contents</a></small>
29188 <h4><a name="J.5.2" href="#J.5.2">J.5.2 Specialized identifiers</a></h4>
29189 <p><!--para 1 -->
29190  Characters other than the underscore _, letters, and digits, that are not part of the basic
29191  source character set (such as the dollar sign $, or characters in national character sets)
29192  may appear in an identifier (<a href="#6.4.2">6.4.2</a>).
29193
29194 <p><small><a href="#Contents">Contents</a></small>
29195 <h4><a name="J.5.3" href="#J.5.3">J.5.3 Lengths and cases of identifiers</a></h4>
29196 <p><!--para 1 -->
29197  All characters in identifiers (with or without external linkage) are significant (<a href="#6.4.2">6.4.2</a>).
29198
29199 <p><small><a href="#Contents">Contents</a></small>
29200 <h4><a name="J.5.4" href="#J.5.4">J.5.4 Scopes of identifiers</a></h4>
29201 <p><!--para 1 -->
29202  A function identifier, or the identifier of an object the declaration of which contains the
29203  keyword extern, has file scope (<a href="#6.2.1">6.2.1</a>).
29204
29205 <p><small><a href="#Contents">Contents</a></small>
29206 <h4><a name="J.5.5" href="#J.5.5">J.5.5 Writable string literals</a></h4>
29207 <p><!--para 1 -->
29208  String literals are modifiable (in which case, identical string literals should denote distinct
29209  objects) (<a href="#6.4.5">6.4.5</a>).
29210 <!--page 594 -->
29211
29212 <p><small><a href="#Contents">Contents</a></small>
29213 <h4><a name="J.5.6" href="#J.5.6">J.5.6 Other arithmetic types</a></h4>
29214 <p><!--para 1 -->
29215  Additional arithmetic types, such as __int128 or double double, and their
29216  appropriate conversions are defined (<a href="#6.2.5">6.2.5</a>, <a href="#6.3.1">6.3.1</a>). Additional floating types may have
29217  more range or precision than long double, may be used for evaluating expressions of
29218  other floating types, and may be used to define float_t or double_t.
29219
29220 <p><small><a href="#Contents">Contents</a></small>
29221 <h4><a name="J.5.7" href="#J.5.7">J.5.7 Function pointer casts</a></h4>
29222 <p><!--para 1 -->
29223  A pointer to an object or to void may be cast to a pointer to a function, allowing data to
29224  be invoked as a function (<a href="#6.5.4">6.5.4</a>).
29225 <p><!--para 2 -->
29226  A pointer to a function may be cast to a pointer to an object or to void, allowing a
29227  function to be inspected or modified (for example, by a debugger) (<a href="#6.5.4">6.5.4</a>).
29228
29229 <p><small><a href="#Contents">Contents</a></small>
29230 <h4><a name="J.5.8" href="#J.5.8">J.5.8 Extended bit-field types</a></h4>
29231 <p><!--para 1 -->
29232  A bit-field may be declared with a type other than _Bool, unsigned int, or
29233  signed int, with an appropriate maximum width (<a href="#6.7.2.1">6.7.2.1</a>).
29234
29235 <p><small><a href="#Contents">Contents</a></small>
29236 <h4><a name="J.5.9" href="#J.5.9">J.5.9 The fortran keyword</a></h4>
29237 <p><!--para 1 -->
29238  The fortran function specifier may be used in a function declaration to indicate that
29239  calls suitable for FORTRAN should be generated, or that a different representation for the
29240  external name is to be generated (<a href="#6.7.4">6.7.4</a>).
29241
29242 <p><small><a href="#Contents">Contents</a></small>
29243 <h4><a name="J.5.10" href="#J.5.10">J.5.10 The asm keyword</a></h4>
29244 <p><!--para 1 -->
29245  The asm keyword may be used to insert assembly language directly into the translator
29246  output (<a href="#6.8">6.8</a>). The most common implementation is via a statement of the form:
29247 <pre>
29248         asm ( character-string-literal );
29249 </pre>
29250
29251 <p><small><a href="#Contents">Contents</a></small>
29252 <h4><a name="J.5.11" href="#J.5.11">J.5.11 Multiple external definitions</a></h4>
29253 <p><!--para 1 -->
29254  There may be more than one external definition for the identifier of an object, with or
29255  without the explicit use of the keyword extern; if the definitions disagree, or more than
29256  one is initialized, the behavior is undefined (<a href="#6.9.2">6.9.2</a>).
29257
29258 <p><small><a href="#Contents">Contents</a></small>
29259 <h4><a name="J.5.12" href="#J.5.12">J.5.12 Predefined macro names</a></h4>
29260 <p><!--para 1 -->
29261  Macro names that do not begin with an underscore, describing the translation and
29262  execution environments, are defined by the implementation before translation begins
29263  (<a href="#6.10.8">6.10.8</a>).
29264 <!--page 595 -->
29265
29266 <p><small><a href="#Contents">Contents</a></small>
29267 <h4><a name="J.5.13" href="#J.5.13">J.5.13 Floating-point status flags</a></h4>
29268 <p><!--para 1 -->
29269  If any floating-point status flags are set on normal termination after all calls to functions
29270  registered by the atexit function have been made (see <a href="#7.22.4.4">7.22.4.4</a>), the implementation
29271  writes some diagnostics indicating the fact to the stderr stream, if it is still open,
29272
29273 <p><small><a href="#Contents">Contents</a></small>
29274 <h4><a name="J.5.14" href="#J.5.14">J.5.14 Extra arguments for signal handlers</a></h4>
29275 <p><!--para 1 -->
29276  Handlers for specific signals are called with extra arguments in addition to the signal
29277  number (<a href="#7.14.1.1">7.14.1.1</a>).
29278
29279 <p><small><a href="#Contents">Contents</a></small>
29280 <h4><a name="J.5.15" href="#J.5.15">J.5.15 Additional stream types and file-opening modes</a></h4>
29281 <p><!--para 1 -->
29282  Additional mappings from files to streams are supported (<a href="#7.21.2">7.21.2</a>).
29283 <p><!--para 2 -->
29284  Additional file-opening modes may be specified by characters appended to the mode
29285  argument of the fopen function (<a href="#7.21.5.3">7.21.5.3</a>).
29286
29287 <p><small><a href="#Contents">Contents</a></small>
29288 <h4><a name="J.5.16" href="#J.5.16">J.5.16 Defined file position indicator</a></h4>
29289 <p><!--para 1 -->
29290  The file position indicator is decremented by each successful call to the ungetc or
29291  ungetwc function for a text stream, except if its value was zero before a call (<a href="#7.21.7.10">7.21.7.10</a>,
29292  <a href="#7.28.3.10">7.28.3.10</a>).
29293
29294 <p><small><a href="#Contents">Contents</a></small>
29295 <h4><a name="J.5.17" href="#J.5.17">J.5.17 Math error reporting</a></h4>
29296 <p><!--para 1 -->
29297  Functions declared in <a href="#7.3">&lt;complex.h&gt;</a> and <a href="#7.12">&lt;math.h&gt;</a> raise SIGFPE to report errors
29298  instead of, or in addition to, setting errno or raising floating-point exceptions (<a href="#7.3">7.3</a>,
29299  <a href="#7.12">7.12</a>).
29300 <!--page 596 -->
29301
29302 <p><small><a href="#Contents">Contents</a></small>
29303 <h2><a name="K" href="#K">Annex K</a></h2>
29304 <pre>
29305                                        (normative)
29306                            Bounds-checking interfaces
29307 </pre>
29308
29309 <p><small><a href="#Contents">Contents</a></small>
29310 <h3><a name="K.1" href="#K.1">K.1 Background</a></h3>
29311 <p><!--para 1 -->
29312  Traditionally, the C Library has contained many functions that trust the programmer to
29313  provide output character arrays big enough to hold the result being produced. Not only
29314  do these functions not check that the arrays are big enough, they frequently lack the
29315  information needed to perform such checks. While it is possible to write safe, robust, and
29316  error-free code using the existing library, the library tends to promote programming styles
29317  that lead to mysterious failures if a result is too big for the provided array.
29318 <p><!--para 2 -->
29319  A common programming style is to declare character arrays large enough to handle most
29320  practical cases. However, if these arrays are not large enough to handle the resulting
29321  strings, data can be written past the end of the array overwriting other data and program
29322  structures. The program never gets any indication that a problem exists, and so never has
29323  a chance to recover or to fail gracefully.
29324 <p><!--para 3 -->
29325  Worse, this style of programming has compromised the security of computers and
29326  networks. Buffer overflows can often be exploited to run arbitrary code with the
29327  permissions of the vulnerable (defective) program.
29328 <p><!--para 4 -->
29329  If the programmer writes runtime checks to verify lengths before calling library
29330  functions, then those runtime checks frequently duplicate work done inside the library
29331  functions, which discover string lengths as a side effect of doing their job.
29332 <p><!--para 5 -->
29333  This annex provides alternative library functions that promote safer, more secure
29334  programming. The alternative functions verify that output buffers are large enough for
29335  the intended result and return a failure indicator if they are not. Data is never written past
29336  the end of an array. All string results are null terminated.
29337 <p><!--para 6 -->
29338  This annex also addresses another problem that complicates writing robust code:
29339  functions that are not reentrant because they return pointers to static objects owned by the
29340  function. Such functions can be troublesome since a previously returned result can
29341  change if the function is called again, perhaps by another thread.
29342 <!--page 597 -->
29343
29344 <p><small><a href="#Contents">Contents</a></small>
29345 <h3><a name="K.2" href="#K.2">K.2 Scope</a></h3>
29346 <p><!--para 1 -->
29347  This annex specifies a series of optional extensions that can be useful in the mitigation of
29348  security vulnerabilities in programs, and comprise new functions, macros, and types
29349  declared or defined in existing standard headers.
29350 <p><!--para 2 -->
29351  An implementation that defines __STDC_LIB_EXT1__ shall conform to the
29352  specifications in this annex.<sup><a href="#note367"><b>367)</b></a></sup>
29353 <p><!--para 3 -->
29354  Subclause <a href="#K.3">K.3</a> should be read as if it were merged into the parallel structure of named
29355  subclauses of clause 7.
29356
29357 <p><b>Footnotes</b>
29358 <p><small><a name="note367" href="#note367">367)</a> Implementations that do not define __STDC_LIB_EXT1__ are not required to conform to these
29359  specifications.
29360 </small>
29361
29362 <p><small><a href="#Contents">Contents</a></small>
29363 <h3><a name="K.3" href="#K.3">K.3 Library</a></h3>
29364
29365 <p><small><a href="#Contents">Contents</a></small>
29366 <h4><a name="K.3.1" href="#K.3.1">K.3.1 Introduction</a></h4>
29367
29368 <p><small><a href="#Contents">Contents</a></small>
29369 <h5><a name="K.3.1.1" href="#K.3.1.1">K.3.1.1 Standard headers</a></h5>
29370 <p><!--para 1 -->
29371  The functions, macros, and types declared or defined in <a href="#K.3">K.3</a> and its subclauses are not
29372  declared or defined by their respective headers if __STDC_WANT_LIB_EXT1__ is
29373  defined as a macro which expands to the integer constant 0 at the point in the source file
29374  where the appropriate header is first included.
29375 <p><!--para 2 -->
29376  The functions, macros, and types declared or defined in <a href="#K.3">K.3</a> and its subclauses are
29377  declared and defined by their respective headers if __STDC_WANT_LIB_EXT1__ is
29378  defined as a macro which expands to the integer constant 1 at the point in the source file
29379  where the appropriate header is first included.<sup><a href="#note368"><b>368)</b></a></sup>
29380 <p><!--para 3 -->
29381  It is implementation-defined whether the functions, macros, and types declared or defined
29382  in <a href="#K.3">K.3</a> and its subclauses are declared or defined by their respective headers if
29383  __STDC_WANT_LIB_EXT1__ is not defined as a macro at the point in the source file
29384  where the appropriate header is first included.<sup><a href="#note369"><b>369)</b></a></sup>
29385 <p><!--para 4 -->
29386  Within a preprocessing translation unit, __STDC_WANT_LIB_EXT1__ shall be
29387  defined identically for all inclusions of any headers from subclause <a href="#K.3">K.3</a>. If
29388  __STDC_WANT_LIB_EXT1__ is defined differently for any such inclusion, the
29389  implementation shall issue a diagnostic as if a preprocessor error directive were used.
29390  
29391  
29392 <!--page 598 -->
29393
29394 <p><b>Footnotes</b>
29395 <p><small><a name="note368" href="#note368">368)</a> Future revisions of this International Standard may define meanings for other values of
29396  __STDC_WANT_LIB_EXT1__.
29397 </small>
29398 <p><small><a name="note369" href="#note369">369)</a> Subclause <a href="#7.1.3">7.1.3</a> reserves certain names and patterns of names that an implementation may use in
29399  headers. All other names are not reserved, and a conforming implementation is not permitted to use
29400  them. While some of the names defined in <a href="#K.3">K.3</a> and its subclauses are reserved, others are not. If an
29401  unreserved name is defined in a header when __STDC_WANT_LIB_EXT1__ is defined as 0, the
29402  implementation is not conforming.
29403 </small>
29404
29405 <p><small><a href="#Contents">Contents</a></small>
29406 <h5><a name="K.3.1.2" href="#K.3.1.2">K.3.1.2 Reserved identifiers</a></h5>
29407 <p><!--para 1 -->
29408  Each macro name in any of the following subclauses is reserved for use as specified if it
29409  is defined by any of its associated headers when included; unless explicitly stated
29410  otherwise (see <a href="#7.1.4">7.1.4</a>).
29411 <p><!--para 2 -->
29412  All identifiers with external linkage in any of the following subclauses are reserved for
29413  use as identifiers with external linkage if any of them are used by the program. None of
29414  them are reserved if none of them are used.
29415 <p><!--para 3 -->
29416  Each identifier with file scope listed in any of the following subclauses is reserved for use
29417  as a macro name and as an identifier with file scope in the same name space if it is
29418  defined by any of its associated headers when included.
29419
29420 <p><small><a href="#Contents">Contents</a></small>
29421 <h5><a name="K.3.1.3" href="#K.3.1.3">K.3.1.3 Use of errno</a></h5>
29422 <p><!--para 1 -->
29423  An implementation may set errno for the functions defined in this annex, but is not
29424  required to.
29425
29426 <p><small><a href="#Contents">Contents</a></small>
29427 <h5><a name="K.3.1.4" href="#K.3.1.4">K.3.1.4 Runtime-constraint violations</a></h5>
29428 <p><!--para 1 -->
29429  Most functions in this annex include as part of their specification a list of runtime-
29430  constraints. These runtime-constraints are requirements on the program using the
29431  library.<sup><a href="#note370"><b>370)</b></a></sup>
29432 <p><!--para 2 -->
29433  Implementations shall verify that the runtime-constraints for a function are not violated
29434  by the program. If a runtime-constraint is violated, the implementation shall call the
29435  currently registered runtime-constraint handler (see set_constraint_handler_s
29436  in <a href="#7.22">&lt;stdlib.h&gt;</a>). Multiple runtime-constraint violations in the same call to a library
29437  function result in only one call to the runtime-constraint handler. It is unspecified which
29438  one of the multiple runtime-constraint violations cause the handler to be called.
29439 <p><!--para 3 -->
29440  If the runtime-constraints section for a function states an action to be performed when a
29441  runtime-constraint violation occurs, the function shall perform the action before calling
29442  the runtime-constraint handler. If the runtime-constraints section lists actions that are
29443  prohibited when a runtime-constraint violation occurs, then such actions are prohibited to
29444  the function both before calling the handler and after the handler returns.
29445 <p><!--para 4 -->
29446  The runtime-constraint handler might not return. If the handler does return, the library
29447  function whose runtime-constraint was violated shall return some indication of failure as
29448  given by the returns section in the function's specification.
29449  
29450  
29451  
29452 <!--page 599 -->
29453
29454 <p><b>Footnotes</b>
29455 <p><small><a name="note370" href="#note370">370)</a> Although runtime-constraints replace many cases of undefined behavior, undefined behavior still
29456  exists in this annex. Implementations are free to detect any case of undefined behavior and treat it as a
29457  runtime-constraint violation by calling the runtime-constraint handler. This license comes directly
29458  from the definition of undefined behavior.
29459 </small>
29460
29461 <p><small><a href="#Contents">Contents</a></small>
29462 <h4><a name="K.3.2" href="#K.3.2">K.3.2 Errors &lt;errno.h&gt;</a></h4>
29463 <p><!--para 1 -->
29464  The header <a href="#7.5">&lt;errno.h&gt;</a> defines a type.
29465 <p><!--para 2 -->
29466  The type is
29467 <pre>
29468           errno_t
29469 </pre>
29470  which is type int.<sup><a href="#note371"><b>371)</b></a></sup>
29471
29472 <p><b>Footnotes</b>
29473 <p><small><a name="note371" href="#note371">371)</a> As a matter of programming style, errno_t may be used as the type of something that deals only
29474  with the values that might be found in errno. For example, a function which returns the value of
29475  errno might be declared as having the return type errno_t.
29476 </small>
29477
29478 <p><small><a href="#Contents">Contents</a></small>
29479 <h4><a name="K.3.3" href="#K.3.3">K.3.3 Common definitions &lt;stddef.h&gt;</a></h4>
29480 <p><!--para 1 -->
29481  The header <a href="#7.19">&lt;stddef.h&gt;</a> defines a type.
29482 <p><!--para 2 -->
29483  The type is
29484 <pre>
29485           rsize_t
29486 </pre>
29487  which is the type size_t.<sup><a href="#note372"><b>372)</b></a></sup>
29488
29489 <p><b>Footnotes</b>
29490 <p><small><a name="note372" href="#note372">372)</a> See the description of the RSIZE_MAX macro in <a href="#7.20">&lt;stdint.h&gt;</a>.
29491 </small>
29492
29493 <p><small><a href="#Contents">Contents</a></small>
29494 <h4><a name="K.3.4" href="#K.3.4">K.3.4 Integer types &lt;stdint.h&gt;</a></h4>
29495 <p><!--para 1 -->
29496  The header <a href="#7.20">&lt;stdint.h&gt;</a> defines a macro.
29497 <p><!--para 2 -->
29498  The macro is
29499 <pre>
29500           RSIZE_MAX
29501 </pre>
29502  which expands to a value<sup><a href="#note373"><b>373)</b></a></sup> of type size_t. Functions that have parameters of type
29503  rsize_t consider it a runtime-constraint violation if the values of those parameters are
29504  greater than RSIZE_MAX.
29505 <p><b>Recommended practice</b>
29506 <p><!--para 3 -->
29507  Extremely large object sizes are frequently a sign that an object's size was calculated
29508  incorrectly. For example, negative numbers appear as very large positive numbers when
29509  converted to an unsigned type like size_t. Also, some implementations do not support
29510  objects as large as the maximum value that can be represented by type size_t.
29511 <p><!--para 4 -->
29512  For those reasons, it is sometimes beneficial to restrict the range of object sizes to detect
29513  programming errors. For implementations targeting machines with large address spaces,
29514  it is recommended that RSIZE_MAX be defined as the smaller of the size of the largest
29515  object supported or (SIZE_MAX &gt;&gt; 1), even if this limit is smaller than the size of
29516  some legitimate, but very large, objects. Implementations targeting machines with small
29517  address spaces may wish to define RSIZE_MAX as SIZE_MAX, which means that there
29518  
29519 <!--page 600 -->
29520  is no object size that is considered a runtime-constraint violation.
29521
29522 <p><b>Footnotes</b>
29523 <p><small><a name="note373" href="#note373">373)</a> The macro RSIZE_MAX need not expand to a constant expression.
29524 </small>
29525
29526 <p><small><a href="#Contents">Contents</a></small>
29527 <h4><a name="K.3.5" href="#K.3.5">K.3.5 Input/output &lt;stdio.h&gt;</a></h4>
29528 <p><!--para 1 -->
29529  The header <a href="#7.21">&lt;stdio.h&gt;</a> defines several macros and two types.
29530 <p><!--para 2 -->
29531  The macros are
29532 <pre>
29533         L_tmpnam_s
29534 </pre>
29535  which expands to an integer constant expression that is the size needed for an array of
29536  char large enough to hold a temporary file name string generated by the tmpnam_s
29537  function;
29538 <pre>
29539         TMP_MAX_S
29540 </pre>
29541  which expands to an integer constant expression that is the maximum number of unique
29542  file names that can be generated by the tmpnam_s function.
29543 <p><!--para 3 -->
29544  The types are
29545 <pre>
29546         errno_t
29547 </pre>
29548  which is type int; and
29549 <pre>
29550         rsize_t
29551 </pre>
29552  which is the type size_t.
29553
29554 <p><small><a href="#Contents">Contents</a></small>
29555 <h5><a name="K.3.5.1" href="#K.3.5.1">K.3.5.1 Operations on files</a></h5>
29556
29557 <p><small><a href="#Contents">Contents</a></small>
29558 <h5><a name="K.3.5.1.1" href="#K.3.5.1.1">K.3.5.1.1 The tmpfile_s function</a></h5>
29559 <p><b>Synopsis</b>
29560 <p><!--para 1 -->
29561 <pre>
29562         #define __STDC_WANT_LIB_EXT1__ 1
29563         #include <a href="#7.21">&lt;stdio.h&gt;</a>
29564         errno_t tmpfile_s(FILE * restrict * restrict streamptr);
29565 </pre>
29566  Runtime-constraints
29567 <p><!--para 2 -->
29568  streamptr shall not be a null pointer.
29569 <p><!--para 3 -->
29570  If there is a runtime-constraint violation, tmpfile_s does not attempt to create a file.
29571 <p><b>Description</b>
29572 <p><!--para 4 -->
29573  The tmpfile_s function creates a temporary binary file that is different from any other
29574  existing file and that will automatically be removed when it is closed or at program
29575  termination. If the program terminates abnormally, whether an open temporary file is
29576  removed is implementation-defined. The file is opened for update with "wb+" mode
29577  with the meaning that mode has in the fopen_s function (including the mode's effect
29578  on exclusive access and file permissions).
29579 <!--page 601 -->
29580 <p><!--para 5 -->
29581  If the file was created successfully, then the pointer to FILE pointed to by streamptr
29582  will be set to the pointer to the object controlling the opened file. Otherwise, the pointer
29583  to FILE pointed to by streamptr will be set to a null pointer.
29584 <p><b>Recommended practice</b>
29585  It should be possible to open at least TMP_MAX_S temporary files during the lifetime of
29586  the program (this limit may be shared with tmpnam_s) and there should be no limit on
29587  the number simultaneously open other than this limit and any limit on the number of open
29588  files (FOPEN_MAX).
29589 <p><b>Returns</b>
29590 <p><!--para 6 -->
29591  The tmpfile_s function returns zero if it created the file. If it did not create the file or
29592  there was a runtime-constraint violation, tmpfile_s returns a nonzero value.
29593
29594 <p><small><a href="#Contents">Contents</a></small>
29595 <h5><a name="K.3.5.1.2" href="#K.3.5.1.2">K.3.5.1.2 The tmpnam_s function</a></h5>
29596 <p><b>Synopsis</b>
29597 <p><!--para 1 -->
29598 <pre>
29599          #define __STDC_WANT_LIB_EXT1__ 1
29600          #include <a href="#7.21">&lt;stdio.h&gt;</a>
29601          errno_t tmpnam_s(char *s, rsize_t maxsize);
29602 </pre>
29603  Runtime-constraints
29604 <p><!--para 2 -->
29605  s shall not be a null pointer. maxsize shall be less than or equal to RSIZE_MAX.
29606  maxsize shall be greater than the length of the generated file name string.
29607 <p><b>Description</b>
29608 <p><!--para 3 -->
29609  The tmpnam_s function generates a string that is a valid file name and that is not the
29610  same as the name of an existing file.<sup><a href="#note374"><b>374)</b></a></sup> The function is potentially capable of generating
29611  TMP_MAX_S different strings, but any or all of them may already be in use by existing
29612  files and thus not be suitable return values. The lengths of these strings shall be less than
29613  the value of the L_tmpnam_s macro.
29614 <p><!--para 4 -->
29615  The tmpnam_s function generates a different string each time it is called.
29616 <p><!--para 5 -->
29617  It is assumed that s points to an array of at least maxsize characters. This array will be
29618  set to generated string, as specified below.
29619  
29620  
29621  
29622 <!--page 602 -->
29623 <p><!--para 6 -->
29624  The implementation shall behave as if no library function except tmpnam calls the
29625  tmpnam_s function.<sup><a href="#note375"><b>375)</b></a></sup>
29626 <p><b>Recommended practice</b>
29627 <p><!--para 7 -->
29628  After a program obtains a file name using the tmpnam_s function and before the
29629  program creates a file with that name, the possibility exists that someone else may create
29630  a file with that same name. To avoid this race condition, the tmpfile_s function
29631  should be used instead of tmpnam_s when possible. One situation that requires the use
29632  of the tmpnam_s function is when the program needs to create a temporary directory
29633  rather than a temporary file.
29634 <p><b>Returns</b>
29635 <p><!--para 8 -->
29636  If no suitable string can be generated, or if there is a runtime-constraint violation, the
29637  tmpnam_s function writes a null character to s[0] (only if s is not null and maxsize
29638  is greater than zero) and returns a nonzero value.
29639 <p><!--para 9 -->
29640  Otherwise, the tmpnam_s function writes the string in the array pointed to by s and
29641  returns zero.
29642 <p><b>Environmental limits</b>
29643 <p><!--para 10 -->
29644  The value of the macro TMP_MAX_S shall be at least 25.
29645
29646 <p><b>Footnotes</b>
29647 <p><small><a name="note374" href="#note374">374)</a> Files created using strings generated by the tmpnam_s function are temporary only in the sense that
29648  their names should not collide with those generated by conventional naming rules for the
29649  implementation. It is still necessary to use the remove function to remove such files when their use
29650  is ended, and before program termination. Implementations should take care in choosing the patterns
29651  used for names returned by tmpnam_s. For example, making a thread id part of the names avoids the
29652  race condition and possible conflict when multiple programs run simultaneously by the same user
29653  generate the same temporary file names.
29654 </small>
29655 <p><small><a name="note375" href="#note375">375)</a> An implementation may have tmpnam call tmpnam_s (perhaps so there is only one naming
29656  convention for temporary files), but this is not required.
29657 </small>
29658
29659 <p><small><a href="#Contents">Contents</a></small>
29660 <h5><a name="K.3.5.2" href="#K.3.5.2">K.3.5.2 File access functions</a></h5>
29661
29662 <p><small><a href="#Contents">Contents</a></small>
29663 <h5><a name="K.3.5.2.1" href="#K.3.5.2.1">K.3.5.2.1 The fopen_s function</a></h5>
29664 <p><b>Synopsis</b>
29665 <p><!--para 1 -->
29666 <pre>
29667         #define __STDC_WANT_LIB_EXT1__ 1
29668         #include <a href="#7.21">&lt;stdio.h&gt;</a>
29669         errno_t fopen_s(FILE * restrict * restrict streamptr,
29670              const char * restrict filename,
29671              const char * restrict mode);
29672 </pre>
29673  Runtime-constraints
29674 <p><!--para 2 -->
29675  None of streamptr, filename, or mode shall be a null pointer.
29676 <p><!--para 3 -->
29677  If there is a runtime-constraint violation, fopen_s does not attempt to open a file.
29678  Furthermore, if streamptr is not a null pointer, fopen_s sets *streamptr to the
29679  null pointer.
29680  
29681  
29682  
29683  
29684 <!--page 603 -->
29685 <p><b>Description</b>
29686 <p><!--para 4 -->
29687  The fopen_s function opens the file whose name is the string pointed to by
29688  filename, and associates a stream with it.
29689 <p><!--para 5 -->
29690  The mode string shall be as described for fopen, with the addition that modes starting
29691  with the character 'w' or 'a' may be preceded by the character 'u', see below:
29692  uw             truncate to zero length or create text file for writing, default
29693 <pre>
29694                 permissions
29695 </pre>
29696  uwx            create text file for writing, default permissions
29697  ua             append; open or create text file for writing at end-of-file, default
29698 <pre>
29699                 permissions
29700 </pre>
29701  uwb            truncate to zero length or create binary file for writing, default
29702 <pre>
29703                 permissions
29704 </pre>
29705  uwbx           create binary file for writing, default permissions
29706  uab            append; open or create binary file for writing at end-of-file, default
29707 <pre>
29708                 permissions
29709 </pre>
29710  uw+            truncate to zero length or create text file for update, default
29711 <pre>
29712                 permissions
29713 </pre>
29714  uw+x           create text file for update, default permissions
29715  ua+            append; open or create text file for update, writing at end-of-file,
29716 <pre>
29717                 default permissions
29718 </pre>
29719  uw+b or uwb+   truncate to zero length or create binary file for update, default
29720 <pre>
29721                 permissions
29722 </pre>
29723  uw+bx or uwb+x create binary file for update, default permissions
29724  ua+b or uab+   append; open or create binary file for update, writing at end-of-file,
29725 <pre>
29726                 default permissions
29727 </pre>
29728 <p><!--para 6 -->
29729  Opening a file with exclusive mode ('x' as the last character in the mode argument)
29730  fails if the file already exists or cannot be created.
29731 <p><!--para 7 -->
29732  To the extent that the underlying system supports the concepts, files opened for writing
29733  shall be opened with exclusive (also known as non-shared) access. If the file is being
29734  created, and the first character of the mode string is not 'u', to the extent that the
29735  underlying system supports it, the file shall have a file permission that prevents other
29736  users on the system from accessing the file. If the file is being created and first character
29737  of the mode string is 'u', then by the time the file has been closed, it shall have the
29738  system default file access permissions.<sup><a href="#note376"><b>376)</b></a></sup>
29739 <p><!--para 8 -->
29740  If the file was opened successfully, then the pointer to FILE pointed to by streamptr
29741  will be set to the pointer to the object controlling the opened file. Otherwise, the pointer
29742  
29743  
29744 <!--page 604 -->
29745  to FILE pointed to by streamptr will be set to a null pointer.
29746 <p><b>Returns</b>
29747 <p><!--para 9 -->
29748  The fopen_s function returns zero if it opened the file. If it did not open the file or if
29749  there was a runtime-constraint violation, fopen_s returns a nonzero value.
29750
29751 <p><b>Footnotes</b>
29752 <p><small><a name="note376" href="#note376">376)</a> These are the same permissions that the file would have been created with by fopen.
29753 </small>
29754
29755 <p><small><a href="#Contents">Contents</a></small>
29756 <h5><a name="K.3.5.2.2" href="#K.3.5.2.2">K.3.5.2.2 The freopen_s function</a></h5>
29757 <p><b>Synopsis</b>
29758 <p><!--para 1 -->
29759 <pre>
29760         #define __STDC_WANT_LIB_EXT1__ 1
29761         #include <a href="#7.21">&lt;stdio.h&gt;</a>
29762         errno_t freopen_s(FILE * restrict * restrict newstreamptr,
29763              const char * restrict filename,
29764              const char * restrict mode,
29765              FILE * restrict stream);
29766 </pre>
29767  Runtime-constraints
29768 <p><!--para 2 -->
29769  None of newstreamptr, mode, and stream shall be a null pointer.
29770 <p><!--para 3 -->
29771  If there is a runtime-constraint violation, freopen_s neither attempts to close any file
29772  associated with stream nor attempts to open a file. Furthermore, if newstreamptr is
29773  not a null pointer, fopen_s sets *newstreamptr to the null pointer.
29774 <p><b>Description</b>
29775 <p><!--para 4 -->
29776  The freopen_s function opens the file whose name is the string pointed to by
29777  filename and associates the stream pointed to by stream with it. The mode
29778  argument has the same meaning as in the fopen_s function (including the mode's effect
29779  on exclusive access and file permissions).
29780 <p><!--para 5 -->
29781  If filename is a null pointer, the freopen_s function attempts to change the mode of
29782  the stream to that specified by mode, as if the name of the file currently associated with
29783  the stream had been used. It is implementation-defined which changes of mode are
29784  permitted (if any), and under what circumstances.
29785 <p><!--para 6 -->
29786  The freopen_s function first attempts to close any file that is associated with stream.
29787  Failure to close the file is ignored. The error and end-of-file indicators for the stream are
29788  cleared.
29789 <p><!--para 7 -->
29790  If the file was opened successfully, then the pointer to FILE pointed to by
29791  newstreamptr will be set to the value of stream. Otherwise, the pointer to FILE
29792  pointed to by newstreamptr will be set to a null pointer.
29793 <p><b>Returns</b>
29794 <p><!--para 8 -->
29795  The freopen_s function returns zero if it opened the file. If it did not open the file or
29796  there was a runtime-constraint violation, freopen_s returns a nonzero value.
29797 <!--page 605 -->
29798
29799 <p><small><a href="#Contents">Contents</a></small>
29800 <h5><a name="K.3.5.3" href="#K.3.5.3">K.3.5.3 Formatted input/output functions</a></h5>
29801 <p><!--para 1 -->
29802  Unless explicitly stated otherwise, if the execution of a function described in this
29803  subclause causes copying to take place between objects that overlap, the objects take on
29804  unspecified values.
29805
29806 <p><small><a href="#Contents">Contents</a></small>
29807 <h5><a name="K.3.5.3.1" href="#K.3.5.3.1">K.3.5.3.1 The fprintf_s function</a></h5>
29808 <p><b>Synopsis</b>
29809 <p><!--para 1 -->
29810 <pre>
29811           #define __STDC_WANT_LIB_EXT1__ 1
29812           #include <a href="#7.21">&lt;stdio.h&gt;</a>
29813           int fprintf_s(FILE * restrict stream,
29814                const char * restrict format, ...);
29815 </pre>
29816  Runtime-constraints
29817 <p><!--para 2 -->
29818  Neither stream nor format shall be a null pointer. The %n specifier<sup><a href="#note377"><b>377)</b></a></sup> (modified or
29819  not by flags, field width, or precision) shall not appear in the string pointed to by
29820  format. Any argument to fprintf_s corresponding to a %s specifier shall not be a
29821  null pointer.
29822 <p><!--para 3 -->
29823  If there is a runtime-constraint violation,<sup><a href="#note378"><b>378)</b></a></sup> the fprintf_s function does not attempt
29824  to produce further output, and it is unspecified to what extent fprintf_s produced
29825  output before discovering the runtime-constraint violation.
29826 <p><b>Description</b>
29827 <p><!--para 4 -->
29828  The fprintf_s function is equivalent to the fprintf function except for the explicit
29829  runtime-constraints listed above.
29830 <p><b>Returns</b>
29831 <p><!--para 5 -->
29832  The fprintf_s function returns the number of characters transmitted, or a negative
29833  value if an output error, encoding error, or runtime-constraint violation occurred.
29834  
29835  
29836  
29837  
29838 <!--page 606 -->
29839
29840 <p><b>Footnotes</b>
29841 <p><small><a name="note377" href="#note377">377)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
29842  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
29843  format string was %%n.
29844 </small>
29845 <p><small><a name="note378" href="#note378">378)</a> Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
29846  implementation may treat any unsupported specifiers in the string pointed to by format as a runtime-
29847  constraint violation.
29848 </small>
29849
29850 <p><small><a href="#Contents">Contents</a></small>
29851 <h5><a name="K.3.5.3.2" href="#K.3.5.3.2">K.3.5.3.2 The fscanf_s function</a></h5>
29852 <p><b>Synopsis</b>
29853 <p><!--para 1 -->
29854 <pre>
29855          #define __STDC_WANT_LIB_EXT1__ 1
29856          #include <a href="#7.21">&lt;stdio.h&gt;</a>
29857          int fscanf_s(FILE * restrict stream,
29858               const char * restrict format, ...);
29859 </pre>
29860  Runtime-constraints
29861 <p><!--para 2 -->
29862  Neither stream nor format shall be a null pointer. Any argument indirected though in
29863  order to store converted input shall not be a null pointer.
29864 <p><!--para 3 -->
29865  If there is a runtime-constraint violation,<sup><a href="#note379"><b>379)</b></a></sup> the fscanf_s function does not attempt to
29866  perform further input, and it is unspecified to what extent fscanf_s performed input
29867  before discovering the runtime-constraint violation.
29868 <p><b>Description</b>
29869 <p><!--para 4 -->
29870  The fscanf_s function is equivalent to fscanf except that the c, s, and [ conversion
29871  specifiers apply to a pair of arguments (unless assignment suppression is indicated by a
29872  *). The first of these arguments is the same as for fscanf. That argument is
29873  immediately followed in the argument list by the second argument, which has type
29874  rsize_t and gives the number of elements in the array pointed to by the first argument
29875  of the pair. If the first argument points to a scalar object, it is considered to be an array of
29876  one element.<sup><a href="#note380"><b>380)</b></a></sup>
29877 <p><!--para 5 -->
29878  A matching failure occurs if the number of elements in a receiving object is insufficient to
29879  hold the converted input (including any trailing null character).
29880 <p><b>Returns</b>
29881 <p><!--para 6 -->
29882  The fscanf_s function returns the value of the macro EOF if an input failure occurs
29883  before any conversion or if there is a runtime-constraint violation. Otherwise, the
29884  
29885 <!--page 607 -->
29886  fscanf_s function returns the number of input items assigned, which can be fewer than
29887  provided for, or even zero, in the event of an early matching failure.
29888 <p><!--para 7 -->
29889  EXAMPLE 1        The call:
29890 <pre>
29891           #define __STDC_WANT_LIB_EXT1__ 1
29892           #include <a href="#7.21">&lt;stdio.h&gt;</a>
29893           /* ... */
29894           int n, i; float x; char name[50];
29895           n = fscanf_s(stdin, "%d%f%s", &amp;i, &amp;x, name, (rsize_t) 50);
29896 </pre>
29897  with the input line:
29898 <pre>
29899           25 54.32E-1 thompson
29900 </pre>
29901  will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
29902  thompson\0.
29903  
29904 <p><!--para 8 -->
29905  EXAMPLE 2        The call:
29906 <pre>
29907           #define __STDC_WANT_LIB_EXT1__ 1
29908           #include <a href="#7.21">&lt;stdio.h&gt;</a>
29909           /* ... */
29910           int n; char s[5];
29911           n = fscanf_s(stdin, "%s", s, sizeof s);
29912 </pre>
29913  with the input line:
29914 <pre>
29915           hello
29916 </pre>
29917  will assign to n the value 0 since a matching failure occurred because the sequence hello\0 requires an
29918  array of six characters to store it.
29919  
29920
29921 <p><b>Footnotes</b>
29922 <p><small><a name="note379" href="#note379">379)</a> Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
29923  implementation may treat any unsupported specifiers in the string pointed to by format as a runtime-
29924  constraint violation.
29925 </small>
29926 <p><small><a name="note380" href="#note380">380)</a> If the format is known at translation time, an implementation may issue a diagnostic for any argument
29927  used to store the result from a c, s, or [ conversion specifier if that argument is not followed by an
29928  argument of a type compatible with rsize_t. A limited amount of checking may be done if even if
29929  the format is not known at translation time. For example, an implementation may issue a diagnostic
29930  for each argument after format that has of type pointer to one of char, signed char,
29931  unsigned char, or void that is not followed by an argument of a type compatible with
29932  rsize_t. The diagnostic could warn that unless the pointer is being used with a conversion specifier
29933  using the hh length modifier, a length argument must follow the pointer argument. Another useful
29934  diagnostic could flag any non-pointer argument following format that did not have a type
29935  compatible with rsize_t.
29936 </small>
29937
29938 <p><small><a href="#Contents">Contents</a></small>
29939 <h5><a name="K.3.5.3.3" href="#K.3.5.3.3">K.3.5.3.3 The printf_s function</a></h5>
29940 <p><b>Synopsis</b>
29941 <p><!--para 1 -->
29942 <pre>
29943           #define __STDC_WANT_LIB_EXT1__ 1
29944           #include <a href="#7.21">&lt;stdio.h&gt;</a>
29945           int printf_s(const char * restrict format, ...);
29946 </pre>
29947  Runtime-constraints
29948 <p><!--para 2 -->
29949  format shall not be a null pointer. The %n specifier<sup><a href="#note381"><b>381)</b></a></sup> (modified or not by flags, field
29950  width, or precision) shall not appear in the string pointed to by format. Any argument
29951  to printf_s corresponding to a %s specifier shall not be a null pointer.
29952 <p><!--para 3 -->
29953  If there is a runtime-constraint violation, the printf_s function does not attempt to
29954  produce further output, and it is unspecified to what extent printf_s produced output
29955  before discovering the runtime-constraint violation.
29956  
29957  
29958 <!--page 608 -->
29959 <p><b>Description</b>
29960 <p><!--para 4 -->
29961  The printf_s function is equivalent to the printf function except for the explicit
29962  runtime-constraints listed above.
29963 <p><b>Returns</b>
29964 <p><!--para 5 -->
29965  The printf_s function returns the number of characters transmitted, or a negative
29966  value if an output error, encoding error, or runtime-constraint violation occurred.
29967
29968 <p><b>Footnotes</b>
29969 <p><small><a name="note381" href="#note381">381)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
29970  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
29971  format string was %%n.
29972 </small>
29973
29974 <p><small><a href="#Contents">Contents</a></small>
29975 <h5><a name="K.3.5.3.4" href="#K.3.5.3.4">K.3.5.3.4 The scanf_s function</a></h5>
29976 <p><b>Synopsis</b>
29977 <p><!--para 1 -->
29978 <pre>
29979         #define __STDC_WANT_LIB_EXT1__ 1
29980         #include <a href="#7.21">&lt;stdio.h&gt;</a>
29981         int scanf_s(const char * restrict format, ...);
29982 </pre>
29983  Runtime-constraints
29984 <p><!--para 2 -->
29985  format shall not be a null pointer. Any argument indirected though in order to store
29986  converted input shall not be a null pointer.
29987 <p><!--para 3 -->
29988  If there is a runtime-constraint violation, the scanf_s function does not attempt to
29989  perform further input, and it is unspecified to what extent scanf_s performed input
29990  before discovering the runtime-constraint violation.
29991 <p><b>Description</b>
29992 <p><!--para 4 -->
29993  The scanf_s function is equivalent to fscanf_s with the argument stdin
29994  interposed before the arguments to scanf_s.
29995 <p><b>Returns</b>
29996 <p><!--para 5 -->
29997  The scanf_s function returns the value of the macro EOF if an input failure occurs
29998  before any conversion or if there is a runtime-constraint violation. Otherwise, the
29999  scanf_s function returns the number of input items assigned, which can be fewer than
30000  provided for, or even zero, in the event of an early matching failure.
30001
30002 <p><small><a href="#Contents">Contents</a></small>
30003 <h5><a name="K.3.5.3.5" href="#K.3.5.3.5">K.3.5.3.5 The snprintf_s function</a></h5>
30004 <p><b>Synopsis</b>
30005 <p><!--para 1 -->
30006 <pre>
30007         #define __STDC_WANT_LIB_EXT1__ 1
30008         #include <a href="#7.21">&lt;stdio.h&gt;</a>
30009         int snprintf_s(char * restrict s, rsize_t n,
30010              const char * restrict format, ...);
30011 </pre>
30012  Runtime-constraints
30013 <p><!--para 2 -->
30014  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
30015  than RSIZE_MAX. The %n specifier<sup><a href="#note382"><b>382)</b></a></sup> (modified or not by flags, field width, or
30016  precision) shall not appear in the string pointed to by format. Any argument to
30017 <!--page 609 -->
30018  snprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
30019  error shall occur.
30020 <p><!--para 3 -->
30021  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
30022  than zero and less than RSIZE_MAX, then the snprintf_s function sets s[0] to the
30023  null character.
30024 <p><b>Description</b>
30025 <p><!--para 4 -->
30026  The snprintf_s function is equivalent to the snprintf function except for the
30027  explicit runtime-constraints listed above.
30028 <p><!--para 5 -->
30029  The snprintf_s function, unlike sprintf_s, will truncate the result to fit within the
30030  array pointed to by s.
30031 <p><b>Returns</b>
30032 <p><!--para 6 -->
30033  The snprintf_s function returns the number of characters that would have been
30034  written had n been sufficiently large, not counting the terminating null character, or a
30035  negative value if a runtime-constraint violation occurred. Thus, the null-terminated
30036  output has been completely written if and only if the returned value is nonnegative and
30037  less than n.
30038
30039 <p><b>Footnotes</b>
30040 <p><small><a name="note382" href="#note382">382)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
30041  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
30042  format string was %%n.
30043 </small>
30044
30045 <p><small><a href="#Contents">Contents</a></small>
30046 <h5><a name="K.3.5.3.6" href="#K.3.5.3.6">K.3.5.3.6 The sprintf_s function</a></h5>
30047 <p><b>Synopsis</b>
30048 <p><!--para 1 -->
30049 <pre>
30050           #define __STDC_WANT_LIB_EXT1__ 1
30051           #include <a href="#7.21">&lt;stdio.h&gt;</a>
30052           int sprintf_s(char * restrict s, rsize_t n,
30053                const char * restrict format, ...);
30054 </pre>
30055  Runtime-constraints
30056 <p><!--para 2 -->
30057  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
30058  than RSIZE_MAX. The number of characters (including the trailing null) required for the
30059  result to be written to the array pointed to by s shall not be greater than n. The %n
30060  specifier<sup><a href="#note383"><b>383)</b></a></sup> (modified or not by flags, field width, or precision) shall not appear in the
30061  string pointed to by format. Any argument to sprintf_s corresponding to a %s
30062  specifier shall not be a null pointer. No encoding error shall occur.
30063  
30064  
30065  
30066 <!--page 610 -->
30067 <p><!--para 3 -->
30068  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
30069  than zero and less than RSIZE_MAX, then the sprintf_s function sets s[0] to the
30070  null character.
30071 <p><b>Description</b>
30072 <p><!--para 4 -->
30073  The sprintf_s function is equivalent to the sprintf function except for the
30074  parameter n and the explicit runtime-constraints listed above.
30075 <p><!--para 5 -->
30076  The sprintf_s function, unlike snprintf_s, treats a result too big for the array
30077  pointed to by s as a runtime-constraint violation.
30078 <p><b>Returns</b>
30079 <p><!--para 6 -->
30080  If no runtime-constraint violation occurred, the sprintf_s function returns the number
30081  of characters written in the array, not counting the terminating null character. If an
30082  encoding error occurred, sprintf_s returns a negative value. If any other runtime-
30083  constraint violation occurred, sprintf_s returns zero.
30084
30085 <p><b>Footnotes</b>
30086 <p><small><a name="note383" href="#note383">383)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
30087  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
30088  format string was %%n.
30089 </small>
30090
30091 <p><small><a href="#Contents">Contents</a></small>
30092 <h5><a name="K.3.5.3.7" href="#K.3.5.3.7">K.3.5.3.7 The sscanf_s function</a></h5>
30093 <p><b>Synopsis</b>
30094 <p><!--para 1 -->
30095 <pre>
30096         #define __STDC_WANT_LIB_EXT1__ 1
30097         #include <a href="#7.21">&lt;stdio.h&gt;</a>
30098         int sscanf_s(const char * restrict s,
30099              const char * restrict format, ...);
30100 </pre>
30101  Runtime-constraints
30102 <p><!--para 2 -->
30103  Neither s nor format shall be a null pointer. Any argument indirected though in order
30104  to store converted input shall not be a null pointer.
30105 <p><!--para 3 -->
30106  If there is a runtime-constraint violation, the sscanf_s function does not attempt to
30107  perform further input, and it is unspecified to what extent sscanf_s performed input
30108  before discovering the runtime-constraint violation.
30109 <p><b>Description</b>
30110 <p><!--para 4 -->
30111  The sscanf_s function is equivalent to fscanf_s, except that input is obtained from
30112  a string (specified by the argument s) rather than from a stream. Reaching the end of the
30113  string is equivalent to encountering end-of-file for the fscanf_s function. If copying
30114  takes place between objects that overlap, the objects take on unspecified values.
30115 <p><b>Returns</b>
30116 <p><!--para 5 -->
30117  The sscanf_s function returns the value of the macro EOF if an input failure occurs
30118  before any conversion or if there is a runtime-constraint violation. Otherwise, the
30119  sscanf_s function returns the number of input items assigned, which can be fewer than
30120  provided for, or even zero, in the event of an early matching failure.
30121 <!--page 611 -->
30122
30123 <p><small><a href="#Contents">Contents</a></small>
30124 <h5><a name="K.3.5.3.8" href="#K.3.5.3.8">K.3.5.3.8 The vfprintf_s function</a></h5>
30125 <p><b>Synopsis</b>
30126 <p><!--para 1 -->
30127 <pre>
30128           #define __STDC_WANT_LIB_EXT1__ 1
30129           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
30130           #include <a href="#7.21">&lt;stdio.h&gt;</a>
30131           int vfprintf_s(FILE * restrict stream,
30132                const char * restrict format,
30133                va_list arg);
30134 </pre>
30135  Runtime-constraints
30136 <p><!--para 2 -->
30137  Neither stream nor format shall be a null pointer. The %n specifier<sup><a href="#note384"><b>384)</b></a></sup> (modified or
30138  not by flags, field width, or precision) shall not appear in the string pointed to by
30139  format. Any argument to vfprintf_s corresponding to a %s specifier shall not be a
30140  null pointer.
30141 <p><!--para 3 -->
30142  If there is a runtime-constraint violation, the vfprintf_s function does not attempt to
30143  produce further output, and it is unspecified to what extent vfprintf_s produced
30144  output before discovering the runtime-constraint violation.
30145 <p><b>Description</b>
30146 <p><!--para 4 -->
30147  The vfprintf_s function is equivalent to the vfprintf function except for the
30148  explicit runtime-constraints listed above.
30149 <p><b>Returns</b>
30150 <p><!--para 5 -->
30151  The vfprintf_s function returns the number of characters transmitted, or a negative
30152  value if an output error, encoding error, or runtime-constraint violation occurred.
30153
30154 <p><b>Footnotes</b>
30155 <p><small><a name="note384" href="#note384">384)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
30156  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
30157  format string was %%n.
30158 </small>
30159
30160 <p><small><a href="#Contents">Contents</a></small>
30161 <h5><a name="K.3.5.3.9" href="#K.3.5.3.9">K.3.5.3.9 The vfscanf_s function</a></h5>
30162 <p><b>Synopsis</b>
30163 <p><!--para 1 -->
30164 <pre>
30165           #define __STDC_WANT_LIB_EXT1__ 1
30166           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
30167           #include <a href="#7.21">&lt;stdio.h&gt;</a>
30168           int vfscanf_s(FILE * restrict stream,
30169                const char * restrict format,
30170                va_list arg);
30171 </pre>
30172  
30173  
30174  
30175  
30176 <!--page 612 -->
30177  Runtime-constraints
30178 <p><!--para 2 -->
30179  Neither stream nor format shall be a null pointer. Any argument indirected though in
30180  order to store converted input shall not be a null pointer.
30181 <p><!--para 3 -->
30182  If there is a runtime-constraint violation, the vfscanf_s function does not attempt to
30183  perform further input, and it is unspecified to what extent vfscanf_s performed input
30184  before discovering the runtime-constraint violation.
30185 <p><b>Description</b>
30186 <p><!--para 4 -->
30187  The vfscanf_s function is equivalent to fscanf_s, with the variable argument list
30188  replaced by arg, which shall have been initialized by the va_start macro (and
30189  possibly subsequent va_arg calls). The vfscanf_s function does not invoke the
30190  va_end macro.<sup><a href="#note385"><b>385)</b></a></sup>
30191 <p><b>Returns</b>
30192 <p><!--para 5 -->
30193  The vfscanf_s function returns the value of the macro EOF if an input failure occurs
30194  before any conversion or if there is a runtime-constraint violation. Otherwise, the
30195  vfscanf_s function returns the number of input items assigned, which can be fewer
30196  than provided for, or even zero, in the event of an early matching failure.
30197
30198 <p><b>Footnotes</b>
30199 <p><small><a name="note385" href="#note385">385)</a> As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
30200  vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
30201  indeterminate.
30202 </small>
30203
30204 <p><small><a href="#Contents">Contents</a></small>
30205 <h5><a name="K.3.5.3.10" href="#K.3.5.3.10">K.3.5.3.10 The vprintf_s function</a></h5>
30206 <p><b>Synopsis</b>
30207 <p><!--para 1 -->
30208 <pre>
30209           #define __STDC_WANT_LIB_EXT1__ 1
30210           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
30211           #include <a href="#7.21">&lt;stdio.h&gt;</a>
30212           int vprintf_s(const char * restrict format,
30213                va_list arg);
30214 </pre>
30215  Runtime-constraints
30216 <p><!--para 2 -->
30217  format shall not be a null pointer. The %n specifier<sup><a href="#note386"><b>386)</b></a></sup> (modified or not by flags, field
30218  width, or precision) shall not appear in the string pointed to by format. Any argument
30219  to vprintf_s corresponding to a %s specifier shall not be a null pointer.
30220 <p><!--para 3 -->
30221  If there is a runtime-constraint violation, the vprintf_s function does not attempt to
30222  produce further output, and it is unspecified to what extent vprintf_s produced output
30223  before discovering the runtime-constraint violation.
30224  
30225 <!--page 613 -->
30226 <p><b>Description</b>
30227 <p><!--para 4 -->
30228  The vprintf_s function is equivalent to the vprintf function except for the explicit
30229  runtime-constraints listed above.
30230 <p><b>Returns</b>
30231 <p><!--para 5 -->
30232  The vprintf_s function returns the number of characters transmitted, or a negative
30233  value if an output error, encoding error, or runtime-constraint violation occurred.
30234
30235 <p><b>Footnotes</b>
30236 <p><small><a name="note386" href="#note386">386)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
30237  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
30238  format string was %%n.
30239 </small>
30240
30241 <p><small><a href="#Contents">Contents</a></small>
30242 <h5><a name="K.3.5.3.11" href="#K.3.5.3.11">K.3.5.3.11 The vscanf_s function</a></h5>
30243 <p><b>Synopsis</b>
30244 <p><!--para 1 -->
30245 <pre>
30246          #define __STDC_WANT_LIB_EXT1__ 1
30247          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
30248          #include <a href="#7.21">&lt;stdio.h&gt;</a>
30249          int vscanf_s(const char * restrict format,
30250               va_list arg);
30251 </pre>
30252  Runtime-constraints
30253 <p><!--para 2 -->
30254  format shall not be a null pointer. Any argument indirected though in order to store
30255  converted input shall not be a null pointer.
30256 <p><!--para 3 -->
30257  If there is a runtime-constraint violation, the vscanf_s function does not attempt to
30258  perform further input, and it is unspecified to what extent vscanf_s performed input
30259  before discovering the runtime-constraint violation.
30260 <p><b>Description</b>
30261 <p><!--para 4 -->
30262  The vscanf_s function is equivalent to scanf_s, with the variable argument list
30263  replaced by arg, which shall have been initialized by the va_start macro (and
30264  possibly subsequent va_arg calls). The vscanf_s function does not invoke the
30265  va_end macro.<sup><a href="#note387"><b>387)</b></a></sup>
30266 <p><b>Returns</b>
30267 <p><!--para 5 -->
30268  The vscanf_s function returns the value of the macro EOF if an input failure occurs
30269  before any conversion or if there is a runtime-constraint violation. Otherwise, the
30270  vscanf_s function returns the number of input items assigned, which can be fewer than
30271  provided for, or even zero, in the event of an early matching failure.
30272  
30273  
30274  
30275  
30276 <!--page 614 -->
30277
30278 <p><b>Footnotes</b>
30279 <p><small><a name="note387" href="#note387">387)</a> As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
30280  vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
30281  indeterminate.
30282 </small>
30283
30284 <p><small><a href="#Contents">Contents</a></small>
30285 <h5><a name="K.3.5.3.12" href="#K.3.5.3.12">K.3.5.3.12 The vsnprintf_s function</a></h5>
30286 <p><b>Synopsis</b>
30287 <p><!--para 1 -->
30288 <pre>
30289           #define __STDC_WANT_LIB_EXT1__ 1
30290           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
30291           #include <a href="#7.21">&lt;stdio.h&gt;</a>
30292           int vsnprintf_s(char * restrict s, rsize_t n,
30293                const char * restrict format,
30294                va_list arg);
30295 </pre>
30296  Runtime-constraints
30297 <p><!--para 2 -->
30298  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
30299  than RSIZE_MAX. The %n specifier<sup><a href="#note388"><b>388)</b></a></sup> (modified or not by flags, field width, or
30300  precision) shall not appear in the string pointed to by format. Any argument to
30301  vsnprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
30302  error shall occur.
30303 <p><!--para 3 -->
30304  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
30305  than zero and less than RSIZE_MAX, then the vsnprintf_s function sets s[0] to the
30306  null character.
30307 <p><b>Description</b>
30308 <p><!--para 4 -->
30309  The vsnprintf_s function is equivalent to the vsnprintf function except for the
30310  explicit runtime-constraints listed above.
30311 <p><!--para 5 -->
30312  The vsnprintf_s function, unlike vsprintf_s, will truncate the result to fit within
30313  the array pointed to by s.
30314 <p><b>Returns</b>
30315 <p><!--para 6 -->
30316  The vsnprintf_s function returns the number of characters that would have been
30317  written had n been sufficiently large, not counting the terminating null character, or a
30318  negative value if a runtime-constraint violation occurred. Thus, the null-terminated
30319  output has been completely written if and only if the returned value is nonnegative and
30320  less than n.
30321  
30322  
30323  
30324  
30325 <!--page 615 -->
30326
30327 <p><b>Footnotes</b>
30328 <p><small><a name="note388" href="#note388">388)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
30329  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
30330  format string was %%n.
30331 </small>
30332
30333 <p><small><a href="#Contents">Contents</a></small>
30334 <h5><a name="K.3.5.3.13" href="#K.3.5.3.13">K.3.5.3.13 The vsprintf_s function</a></h5>
30335 <p><b>Synopsis</b>
30336 <p><!--para 1 -->
30337 <pre>
30338           #define __STDC_WANT_LIB_EXT1__ 1
30339           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
30340           #include <a href="#7.21">&lt;stdio.h&gt;</a>
30341           int vsprintf_s(char * restrict s, rsize_t n,
30342                const char * restrict format,
30343                va_list arg);
30344 </pre>
30345  Runtime-constraints
30346 <p><!--para 2 -->
30347  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
30348  than RSIZE_MAX. The number of characters (including the trailing null) required for the
30349  result to be written to the array pointed to by s shall not be greater than n. The %n
30350  specifier<sup><a href="#note389"><b>389)</b></a></sup> (modified or not by flags, field width, or precision) shall not appear in the
30351  string pointed to by format. Any argument to vsprintf_s corresponding to a %s
30352  specifier shall not be a null pointer. No encoding error shall occur.
30353 <p><!--para 3 -->
30354  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
30355  than zero and less than RSIZE_MAX, then the vsprintf_s function sets s[0] to the
30356  null character.
30357 <p><b>Description</b>
30358 <p><!--para 4 -->
30359  The vsprintf_s function is equivalent to the vsprintf function except for the
30360  parameter n and the explicit runtime-constraints listed above.
30361 <p><!--para 5 -->
30362  The vsprintf_s function, unlike vsnprintf_s, treats a result too big for the array
30363  pointed to by s as a runtime-constraint violation.
30364 <p><b>Returns</b>
30365 <p><!--para 6 -->
30366  If no runtime-constraint violation occurred, the vsprintf_s function returns the
30367  number of characters written in the array, not counting the terminating null character. If
30368  an encoding error occurred, vsprintf_s returns a negative value. If any other
30369  runtime-constraint violation occurred, vsprintf_s returns zero.
30370  
30371  
30372  
30373  
30374 <!--page 616 -->
30375
30376 <p><b>Footnotes</b>
30377 <p><small><a name="note389" href="#note389">389)</a> It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
30378  at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
30379  format string was %%n.
30380 </small>
30381
30382 <p><small><a href="#Contents">Contents</a></small>
30383 <h5><a name="K.3.5.3.14" href="#K.3.5.3.14">K.3.5.3.14 The vsscanf_s function</a></h5>
30384 <p><b>Synopsis</b>
30385 <p><!--para 1 -->
30386 <pre>
30387         #define __STDC_WANT_LIB_EXT1__ 1
30388         #include <a href="#7.16">&lt;stdarg.h&gt;</a>
30389         #include <a href="#7.21">&lt;stdio.h&gt;</a>
30390         int vsscanf_s(const char * restrict s,
30391              const char * restrict format,
30392              va_list arg);
30393 </pre>
30394  Runtime-constraints
30395 <p><!--para 2 -->
30396  Neither s nor format shall be a null pointer. Any argument indirected though in order
30397  to store converted input shall not be a null pointer.
30398 <p><!--para 3 -->
30399  If there is a runtime-constraint violation, the vsscanf_s function does not attempt to
30400  perform further input, and it is unspecified to what extent vsscanf_s performed input
30401  before discovering the runtime-constraint violation.
30402 <p><b>Description</b>
30403 <p><!--para 4 -->
30404  The vsscanf_s function is equivalent to sscanf_s, with the variable argument list
30405  replaced by arg, which shall have been initialized by the va_start macro (and
30406  possibly subsequent va_arg calls). The vsscanf_s function does not invoke the
30407  va_end macro.<sup><a href="#note390"><b>390)</b></a></sup>
30408 <p><b>Returns</b>
30409 <p><!--para 5 -->
30410  The vsscanf_s function returns the value of the macro EOF if an input failure occurs
30411  before any conversion or if there is a runtime-constraint violation. Otherwise, the
30412  vscanf_s function returns the number of input items assigned, which can be fewer than
30413  provided for, or even zero, in the event of an early matching failure.
30414
30415 <p><b>Footnotes</b>
30416 <p><small><a name="note390" href="#note390">390)</a> As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
30417  vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
30418  indeterminate.
30419 </small>
30420
30421 <p><small><a href="#Contents">Contents</a></small>
30422 <h5><a name="K.3.5.4" href="#K.3.5.4">K.3.5.4 Character input/output functions</a></h5>
30423
30424 <p><small><a href="#Contents">Contents</a></small>
30425 <h5><a name="K.3.5.4.1" href="#K.3.5.4.1">K.3.5.4.1 The gets_s function</a></h5>
30426 <p><b>Synopsis</b>
30427 <p><!--para 1 -->
30428 <pre>
30429         #define __STDC_WANT_LIB_EXT1__ 1
30430         #include <a href="#7.21">&lt;stdio.h&gt;</a>
30431         char *gets_s(char *s, rsize_t n);
30432 </pre>
30433  
30434  
30435  
30436  
30437 <!--page 617 -->
30438  Runtime-constraints
30439 <p><!--para 2 -->
30440  s shall not be a null pointer. n shall neither be equal to zero nor be greater than
30441  RSIZE_MAX. A new-line character, end-of-file, or read error shall occur within reading
30442  n-1 characters from stdin.<sup><a href="#note391"><b>391)</b></a></sup>
30443 <p><!--para 3 -->
30444  If there is a runtime-constraint violation, s[0] is set to the null character, and characters
30445  are read and discarded from stdin until a new-line character is read, or end-of-file or a
30446  read error occurs.
30447 <p><b>Description</b>
30448 <p><!--para 4 -->
30449  The gets_s function reads at most one less than the number of characters specified by n
30450  from the stream pointed to by stdin, into the array pointed to by s. No additional
30451  characters are read after a new-line character (which is discarded) or after end-of-file.
30452  The discarded new-line character does not count towards number of characters read. A
30453  null character is written immediately after the last character read into the array.
30454 <p><!--para 5 -->
30455  If end-of-file is encountered and no characters have been read into the array, or if a read
30456  error occurs during the operation, then s[0] is set to the null character, and the other
30457  elements of s take unspecified values.
30458 <p><b>Recommended practice</b>
30459 <p><!--para 6 -->
30460  The fgets function allows properly-written programs to safely process input lines too
30461  long to store in the result array. In general this requires that callers of fgets pay
30462  attention to the presence or absence of a new-line character in the result array. Consider
30463  using fgets (along with any needed processing based on new-line characters) instead of
30464  gets_s.
30465 <p><b>Returns</b>
30466 <p><!--para 7 -->
30467  The gets_s function returns s if successful. If there was a runtime-constraint violation,
30468  or if end-of-file is encountered and no characters have been read into the array, or if a
30469  read error occurs during the operation, then a null pointer is returned.
30470  
30471  
30472  
30473  
30474 <!--page 618 -->
30475
30476 <p><b>Footnotes</b>
30477 <p><small><a name="note391" href="#note391">391)</a> The gets_s function, unlike the historical gets function, makes it a runtime-constraint violation for
30478  a line of input to overflow the buffer to store it. Unlike the fgets function, gets_s maintains a
30479  one-to-one relationship between input lines and successful calls to gets_s. Programs that use gets
30480  expect such a relationship.
30481 </small>
30482
30483 <p><small><a href="#Contents">Contents</a></small>
30484 <h4><a name="K.3.6" href="#K.3.6">K.3.6 General utilities &lt;stdlib.h&gt;</a></h4>
30485 <p><!--para 1 -->
30486  The header <a href="#7.22">&lt;stdlib.h&gt;</a> defines three types.
30487 <p><!--para 2 -->
30488  The types are
30489 <pre>
30490          errno_t
30491 </pre>
30492  which is type int; and
30493 <pre>
30494          rsize_t
30495 </pre>
30496  which is the type size_t; and
30497 <pre>
30498          constraint_handler_t
30499 </pre>
30500  which has the following definition
30501 <pre>
30502          typedef void (*constraint_handler_t)(
30503               const char * restrict msg,
30504               void * restrict ptr,
30505               errno_t error);
30506 </pre>
30507
30508 <p><small><a href="#Contents">Contents</a></small>
30509 <h5><a name="K.3.6.1" href="#K.3.6.1">K.3.6.1 Runtime-constraint handling</a></h5>
30510
30511 <p><small><a href="#Contents">Contents</a></small>
30512 <h5><a name="K.3.6.1.1" href="#K.3.6.1.1">K.3.6.1.1 The set_constraint_handler_s function</a></h5>
30513 <p><b>Synopsis</b>
30514 <p><!--para 1 -->
30515 <pre>
30516          #define __STDC_WANT_LIB_EXT1__ 1
30517          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30518          constraint_handler_t set_constraint_handler_s(
30519               constraint_handler_t handler);
30520 </pre>
30521 <p><b>Description</b>
30522 <p><!--para 2 -->
30523  The set_constraint_handler_s function sets the runtime-constraint handler to
30524  be handler. The runtime-constraint handler is the function to be called when a library
30525  function detects a runtime-constraint violation. Only the most recent handler registered
30526  with set_constraint_handler_s is called when a runtime-constraint violation
30527  occurs.
30528 <p><!--para 3 -->
30529  When the handler is called, it is passed the following arguments in the following order:
30530 <ol>
30531 <li>  A pointer to a character string describing the runtime-constraint violation.
30532 <li>  A null pointer or a pointer to an implementation defined object.
30533 <li>  If the function calling the handler has a return type declared as errno_t, the
30534  return value of the function is passed. Otherwise, a positive value of type
30535  errno_t is passed.
30536 <!--page 619 -->
30537 </ol>
30538 <p><!--para 4 -->
30539  The implementation has a default constraint handler that is used if no calls to the
30540  set_constraint_handler_s function have been made. The behavior of the
30541  default handler is implementation-defined, and it may cause the program to exit or abort.
30542 <p><!--para 5 -->
30543  If the handler argument to set_constraint_handler_s is a null pointer, the
30544  implementation default handler becomes the current constraint handler.
30545 <p><b>Returns</b>
30546 <p><!--para 6 -->
30547  The set_constraint_handler_s function returns a pointer to the previously
30548  registered handler.<sup><a href="#note392"><b>392)</b></a></sup>
30549
30550 <p><b>Footnotes</b>
30551 <p><small><a name="note392" href="#note392">392)</a> If the previous handler was registered by calling set_constraint_handler_s with a null
30552  pointer argument, a pointer to the implementation default handler is returned (not NULL).
30553 </small>
30554
30555 <p><small><a href="#Contents">Contents</a></small>
30556 <h5><a name="K.3.6.1.2" href="#K.3.6.1.2">K.3.6.1.2 The abort_handler_s function</a></h5>
30557 <p><b>Synopsis</b>
30558 <p><!--para 1 -->
30559 <pre>
30560          #define __STDC_WANT_LIB_EXT1__ 1
30561          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30562          void abort_handler_s(
30563               const char * restrict msg,
30564               void * restrict ptr,
30565               errno_t error);
30566 </pre>
30567 <p><b>Description</b>
30568 <p><!--para 2 -->
30569  A pointer to the abort_handler_s function shall be a suitable argument to the
30570  set_constraint_handler_s function.
30571 <p><!--para 3 -->
30572  The abort_handler_s function writes a message on the standard error stream in an
30573  implementation-defined format. The message shall include the string pointed to by msg.
30574  The abort_handler_s function then calls the abort function.<sup><a href="#note393"><b>393)</b></a></sup>
30575 <p><b>Returns</b>
30576 <p><!--para 4 -->
30577  The abort_handler_s function does not return to its caller.
30578  
30579  
30580  
30581  
30582 <!--page 620 -->
30583
30584 <p><b>Footnotes</b>
30585 <p><small><a name="note393" href="#note393">393)</a> Many implementations invoke a debugger when the abort function is called.
30586 </small>
30587
30588 <p><small><a href="#Contents">Contents</a></small>
30589 <h5><a name="K.3.6.1.3" href="#K.3.6.1.3">K.3.6.1.3 The ignore_handler_s function</a></h5>
30590 <p><b>Synopsis</b>
30591 <p><!--para 1 -->
30592 <pre>
30593          #define __STDC_WANT_LIB_EXT1__ 1
30594          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30595          void ignore_handler_s(
30596               const char * restrict msg,
30597               void * restrict ptr,
30598               errno_t error);
30599 </pre>
30600 <p><b>Description</b>
30601 <p><!--para 2 -->
30602  A pointer to the ignore_handler_s function shall be a suitable argument to the
30603  set_constraint_handler_s function.
30604 <p><!--para 3 -->
30605  The ignore_handler_s function simply returns to its caller.<sup><a href="#note394"><b>394)</b></a></sup>
30606 <p><b>Returns</b>
30607 <p><!--para 4 -->
30608  The ignore_handler_s function returns no value.
30609
30610 <p><b>Footnotes</b>
30611 <p><small><a name="note394" href="#note394">394)</a> If the runtime-constraint handler is set to the ignore_handler_s function, any library function in
30612  which a runtime-constraint violation occurs will return to its caller. The caller can determine whether
30613  a runtime-constraint violation occurred based on the library function's specification (usually, the
30614  library function returns a nonzero errno_t).
30615 </small>
30616
30617 <p><small><a href="#Contents">Contents</a></small>
30618 <h5><a name="K.3.6.2" href="#K.3.6.2">K.3.6.2 Communication with the environment</a></h5>
30619
30620 <p><small><a href="#Contents">Contents</a></small>
30621 <h5><a name="K.3.6.2.1" href="#K.3.6.2.1">K.3.6.2.1 The getenv_s function</a></h5>
30622 <p><b>Synopsis</b>
30623 <p><!--para 1 -->
30624 <pre>
30625          #define __STDC_WANT_LIB_EXT1__ 1
30626          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30627          errno_t getenv_s(size_t * restrict len,
30628                     char * restrict value, rsize_t maxsize,
30629                     const char * restrict name);
30630 </pre>
30631  Runtime-constraints
30632 <p><!--para 2 -->
30633  name shall not be a null pointer. maxsize shall neither equal zero nor be greater than
30634  RSIZE_MAX. If maxsize is not equal to zero, then value shall not be a null pointer.
30635 <p><!--para 3 -->
30636  If there is a runtime-constraint violation, the integer pointed to by len is set to 0 (if len
30637  is not null), and the environment list is not searched.
30638 <p><b>Description</b>
30639 <p><!--para 4 -->
30640  The getenv_s function searches an environment list, provided by the host environment,
30641  for a string that matches the string pointed to by name.
30642  
30643  
30644 <!--page 621 -->
30645 <p><!--para 5 -->
30646  If that name is found then getenv_s performs the following actions. If len is not a
30647  null pointer, the length of the string associated with the matched list member is stored in
30648  the integer pointed to by len. If the length of the associated string is less than maxsize,
30649  then the associated string is copied to the array pointed to by value.
30650 <p><!--para 6 -->
30651  If that name is not found then getenv_s performs the following actions. If len is not
30652  a null pointer, zero is stored in the integer pointed to by len. If maxsize is greater than
30653  zero, then value[0] is set to the null character.
30654 <p><!--para 7 -->
30655  The set of environment names and the method for altering the environment list are
30656  implementation-defined.
30657 <p><b>Returns</b>
30658 <p><!--para 8 -->
30659  The getenv_s function returns zero if the specified name is found and the associated
30660  string was successfully stored in value. Otherwise, a nonzero value is returned.
30661
30662 <p><small><a href="#Contents">Contents</a></small>
30663 <h5><a name="K.3.6.3" href="#K.3.6.3">K.3.6.3 Searching and sorting utilities</a></h5>
30664 <p><!--para 1 -->
30665  These utilities make use of a comparison function to search or sort arrays of unspecified
30666  type. Where an argument declared as size_t nmemb specifies the length of the array
30667  for a function, if nmemb has the value zero on a call to that function, then the comparison
30668  function is not called, a search finds no matching element, sorting performs no
30669  rearrangement, and the pointer to the array may be null.
30670 <p><!--para 2 -->
30671  The implementation shall ensure that the second argument of the comparison function
30672  (when called from bsearch_s), or both arguments (when called from qsort_s), are
30673  pointers to elements of the array.<sup><a href="#note395"><b>395)</b></a></sup> The first argument when called from bsearch_s
30674  shall equal key.
30675 <p><!--para 3 -->
30676  The comparison function shall not alter the contents of either the array or search key. The
30677  implementation may reorder elements of the array between calls to the comparison
30678  function, but shall not otherwise alter the contents of any individual element.
30679 <p><!--para 4 -->
30680  When the same objects (consisting of size bytes, irrespective of their current positions
30681  in the array) are passed more than once to the comparison function, the results shall be
30682  consistent with one another. That is, for qsort_s they shall define a total ordering on
30683  the array, and for bsearch_s the same object shall always compare the same way with
30684  the key.
30685  
30686  
30687  
30688  
30689 <!--page 622 -->
30690 <p><!--para 5 -->
30691  A sequence point occurs immediately before and immediately after each call to the
30692  comparison function, and also between any call to the comparison function and any
30693  movement of the objects passed as arguments to that call.
30694
30695 <p><b>Footnotes</b>
30696 <p><small><a name="note395" href="#note395">395)</a> That is, if the value passed is p, then the following expressions are always valid and nonzero:
30697
30698 <pre>
30699           ((char *)p - (char *)base) % size == 0
30700           (char *)p &gt;= (char *)base
30701           (char *)p &lt; (char *)base + nmemb * size
30702 </pre>
30703 </small>
30704
30705 <p><small><a href="#Contents">Contents</a></small>
30706 <h5><a name="K.3.6.3.1" href="#K.3.6.3.1">K.3.6.3.1 The bsearch_s function</a></h5>
30707 <p><b>Synopsis</b>
30708 <p><!--para 1 -->
30709 <pre>
30710           #define __STDC_WANT_LIB_EXT1__ 1
30711           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30712           void *bsearch_s(const void *key, const void *base,
30713                rsize_t nmemb, rsize_t size,
30714                int (*compar)(const void *k, const void *y,
30715                                void *context),
30716                void *context);
30717 </pre>
30718  Runtime-constraints
30719 <p><!--para 2 -->
30720  Neither nmemb nor size shall be greater than RSIZE_MAX. If nmemb is not equal to
30721  zero, then none of key, base, or compar shall be a null pointer.
30722 <p><!--para 3 -->
30723  If there is a runtime-constraint violation, the bsearch_s function does not search the
30724  array.
30725 <p><b>Description</b>
30726 <p><!--para 4 -->
30727  The bsearch_s function searches an array of nmemb objects, the initial element of
30728  which is pointed to by base, for an element that matches the object pointed to by key.
30729  The size of each element of the array is specified by size.
30730 <p><!--para 5 -->
30731  The comparison function pointed to by compar is called with three arguments. The first
30732  two point to the key object and to an array element, in that order. The function shall
30733  return an integer less than, equal to, or greater than zero if the key object is considered,
30734  respectively, to be less than, to match, or to be greater than the array element. The array
30735  shall consist of: all the elements that compare less than, all the elements that compare
30736  equal to, and all the elements that compare greater than the key object, in that order.<sup><a href="#note396"><b>396)</b></a></sup>
30737  The third argument to the comparison function is the context argument passed to
30738  bsearch_s. The sole use of context by bsearch_s is to pass it to the comparison
30739  function.<sup><a href="#note397"><b>397)</b></a></sup>
30740  
30741  
30742  
30743  
30744 <!--page 623 -->
30745 <p><b>Returns</b>
30746 <p><!--para 6 -->
30747  The bsearch_s function returns a pointer to a matching element of the array, or a null
30748  pointer if no match is found or there is a runtime-constraint violation. If two elements
30749  compare as equal, which element is matched is unspecified.
30750
30751 <p><b>Footnotes</b>
30752 <p><small><a name="note396" href="#note396">396)</a> In practice, this means that the entire array has been sorted according to the comparison function.
30753 </small>
30754 <p><small><a name="note397" href="#note397">397)</a> The context argument is for the use of the comparison function in performing its duties. For
30755  example, it might specify a collating sequence used by the comparison function.
30756 </small>
30757
30758 <p><small><a href="#Contents">Contents</a></small>
30759 <h5><a name="K.3.6.3.2" href="#K.3.6.3.2">K.3.6.3.2 The qsort_s function</a></h5>
30760 <p><b>Synopsis</b>
30761 <p><!--para 1 -->
30762 <pre>
30763          #define __STDC_WANT_LIB_EXT1__ 1
30764          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30765          errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size,
30766               int (*compar)(const void *x, const void *y,
30767                               void *context),
30768               void *context);
30769 </pre>
30770  Runtime-constraints
30771 <p><!--para 2 -->
30772  Neither nmemb nor size shall be greater than RSIZE_MAX. If nmemb is not equal to
30773  zero, then neither base nor compar shall be a null pointer.
30774 <p><!--para 3 -->
30775  If there is a runtime-constraint violation, the qsort_s function does not sort the array.
30776 <p><b>Description</b>
30777 <p><!--para 4 -->
30778  The qsort_s function sorts an array of nmemb objects, the initial element of which is
30779  pointed to by base. The size of each object is specified by size.
30780 <p><!--para 5 -->
30781  The contents of the array are sorted into ascending order according to a comparison
30782  function pointed to by compar, which is called with three arguments. The first two
30783  point to the objects being compared. The function shall return an integer less than, equal
30784  to, or greater than zero if the first argument is considered to be respectively less than,
30785  equal to, or greater than the second. The third argument to the comparison function is the
30786  context argument passed to qsort_s. The sole use of context by qsort_s is to
30787  pass it to the comparison function.<sup><a href="#note398"><b>398)</b></a></sup>
30788 <p><!--para 6 -->
30789  If two elements compare as equal, their relative order in the resulting sorted array is
30790  unspecified.
30791 <p><b>Returns</b>
30792 <p><!--para 7 -->
30793  The qsort_s function returns zero if there was no runtime-constraint violation.
30794  Otherwise, a nonzero value is returned.
30795  
30796  
30797  
30798  
30799 <!--page 624 -->
30800
30801 <p><b>Footnotes</b>
30802 <p><small><a name="note398" href="#note398">398)</a> The context argument is for the use of the comparison function in performing its duties. For
30803  example, it might specify a collating sequence used by the comparison function.
30804 </small>
30805
30806 <p><small><a href="#Contents">Contents</a></small>
30807 <h5><a name="K.3.6.4" href="#K.3.6.4">K.3.6.4 Multibyte/wide character conversion functions</a></h5>
30808 <p><!--para 1 -->
30809  The behavior of the multibyte character functions is affected by the LC_CTYPE category
30810  of the current locale. For a state-dependent encoding, each function is placed into its
30811  initial conversion state by a call for which its character pointer argument, s, is a null
30812  pointer. Subsequent calls with s as other than a null pointer cause the internal conversion
30813  state of the function to be altered as necessary. A call with s as a null pointer causes
30814  these functions to set the int pointed to by their status argument to a nonzero value if
30815  encodings have state dependency, and zero otherwise.<sup><a href="#note399"><b>399)</b></a></sup> Changing the LC_CTYPE
30816  category causes the conversion state of these functions to be indeterminate.
30817
30818 <p><b>Footnotes</b>
30819 <p><small><a name="note399" href="#note399">399)</a> If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
30820  character codes, but are grouped with an adjacent multibyte character.
30821 </small>
30822
30823 <p><small><a href="#Contents">Contents</a></small>
30824 <h5><a name="K.3.6.4.1" href="#K.3.6.4.1">K.3.6.4.1 The wctomb_s function</a></h5>
30825 <p><b>Synopsis</b>
30826 <p><!--para 1 -->
30827 <pre>
30828          #define __STDC_WANT_LIB_EXT1__ 1
30829          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30830          errno_t wctomb_s(int * restrict status,
30831               char * restrict s,
30832               rsize_t smax,
30833               wchar_t wc);
30834 </pre>
30835  Runtime-constraints
30836 <p><!--para 2 -->
30837  Let n denote the number of bytes needed to represent the multibyte character
30838  corresponding to the wide character given by wc (including any shift sequences).
30839 <p><!--para 3 -->
30840  If s is not a null pointer, then smax shall not be less than n, and smax shall not be
30841  greater than RSIZE_MAX. If s is a null pointer, then smax shall equal zero.
30842 <p><!--para 4 -->
30843  If there is a runtime-constraint violation, wctomb_s does not modify the int pointed to
30844  by status, and if s is not a null pointer, no more than smax elements in the array
30845  pointed to by s will be accessed.
30846 <p><b>Description</b>
30847 <p><!--para 5 -->
30848  The wctomb_s function determines n and stores the multibyte character representation
30849  of wc in the array whose first element is pointed to by s (if s is not a null pointer). The
30850  number of characters stored never exceeds MB_CUR_MAX or smax. If wc is a null wide
30851  character, a null byte is stored, preceded by any shift sequence needed to restore the
30852  initial shift state, and the function is left in the initial conversion state.
30853 <p><!--para 6 -->
30854  The implementation shall behave as if no library function calls the wctomb_s function.
30855  
30856  
30857  
30858  
30859 <!--page 625 -->
30860 <p><!--para 7 -->
30861  If s is a null pointer, the wctomb_s function stores into the int pointed to by status a
30862  nonzero or zero value, if multibyte character encodings, respectively, do or do not have
30863  state-dependent encodings.
30864 <p><!--para 8 -->
30865  If s is not a null pointer, the wctomb_s function stores into the int pointed to by
30866  status either n or -1 if wc, respectively, does or does not correspond to a valid
30867  multibyte character.
30868 <p><!--para 9 -->
30869  In no case will the int pointed to by status be set to a value greater than the
30870  MB_CUR_MAX macro.
30871 <p><b>Returns</b>
30872 <p><!--para 10 -->
30873  The wctomb_s function returns zero if successful, and a nonzero value if there was a
30874  runtime-constraint violation or wc did not correspond to a valid multibyte character.
30875
30876 <p><small><a href="#Contents">Contents</a></small>
30877 <h5><a name="K.3.6.5" href="#K.3.6.5">K.3.6.5 Multibyte/wide string conversion functions</a></h5>
30878 <p><!--para 1 -->
30879  The behavior of the multibyte string functions is affected by the LC_CTYPE category of
30880  the current locale.
30881
30882 <p><small><a href="#Contents">Contents</a></small>
30883 <h5><a name="K.3.6.5.1" href="#K.3.6.5.1">K.3.6.5.1 The mbstowcs_s function</a></h5>
30884 <p><b>Synopsis</b>
30885 <p><!--para 1 -->
30886 <pre>
30887          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30888          errno_t mbstowcs_s(size_t * restrict retval,
30889               wchar_t * restrict dst, rsize_t dstmax,
30890               const char * restrict src, rsize_t len);
30891 </pre>
30892  Runtime-constraints
30893 <p><!--para 2 -->
30894  Neither retval nor src shall be a null pointer. If dst is not a null pointer, then
30895  neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null pointer,
30896  then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall not equal
30897  zero. If dst is not a null pointer and len is not less than dstmax, then a null character
30898  shall occur within the first dstmax multibyte characters of the array pointed to by src.
30899 <p><!--para 3 -->
30900  If there is a runtime-constraint violation, then mbstowcs_s does the following. If
30901  retval is not a null pointer, then mbstowcs_s sets *retval to (size_t)(-1). If
30902  dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
30903  then mbstowcs_s sets dst[0] to the null wide character.
30904 <p><b>Description</b>
30905 <p><!--para 4 -->
30906  The mbstowcs_s function converts a sequence of multibyte characters that begins in
30907  the initial shift state from the array pointed to by src into a sequence of corresponding
30908  wide characters. If dst is not a null pointer, the converted characters are stored into the
30909  array pointed to by dst. Conversion continues up to and including a terminating null
30910  character, which is also stored. Conversion stops earlier in two cases: when a sequence of
30911 <!--page 626 -->
30912  bytes is encountered that does not form a valid multibyte character, or (if dst is not a
30913  null pointer) when len wide characters have been stored into the array pointed to by
30914  dst.<sup><a href="#note400"><b>400)</b></a></sup> If dst is not a null pointer and no null wide character was stored into the array
30915  pointed to by dst, then dst[len] is set to the null wide character. Each conversion
30916  takes place as if by a call to the mbrtowc function.
30917 <p><!--para 5 -->
30918  Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
30919  sequence of bytes that do not form a valid multibyte character, an encoding error occurs:
30920  the mbstowcs_s function stores the value (size_t)(-1) into *retval.
30921  Otherwise, the mbstowcs_s function stores into *retval the number of multibyte
30922  characters successfully converted, not including the terminating null character (if any).
30923 <p><!--para 6 -->
30924  All elements following the terminating null wide character (if any) written by
30925  mbstowcs_s in the array of dstmax wide characters pointed to by dst take
30926  unspecified values when mbstowcs_s returns.<sup><a href="#note401"><b>401)</b></a></sup>
30927 <p><!--para 7 -->
30928  If copying takes place between objects that overlap, the objects take on unspecified
30929  values.
30930 <p><b>Returns</b>
30931 <p><!--para 8 -->
30932  The mbstowcs_s function returns zero if no runtime-constraint violation and no
30933  encoding error occurred. Otherwise, a nonzero value is returned.
30934
30935 <p><b>Footnotes</b>
30936 <p><small><a name="note400" href="#note400">400)</a> Thus, the value of len is ignored if dst is a null pointer.
30937 </small>
30938 <p><small><a name="note401" href="#note401">401)</a> This allows an implementation to attempt converting the multibyte string before discovering a
30939  terminating null character did not occur where required.
30940 </small>
30941
30942 <p><small><a href="#Contents">Contents</a></small>
30943 <h5><a name="K.3.6.5.2" href="#K.3.6.5.2">K.3.6.5.2 The wcstombs_s function</a></h5>
30944 <p><b>Synopsis</b>
30945 <p><!--para 1 -->
30946 <pre>
30947           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
30948           errno_t wcstombs_s(size_t * restrict retval,
30949                char * restrict dst, rsize_t dstmax,
30950                const wchar_t * restrict src, rsize_t len);
30951 </pre>
30952  Runtime-constraints
30953 <p><!--para 2 -->
30954  Neither retval nor src shall be a null pointer. If dst is not a null pointer, then
30955  neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null pointer,
30956  then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall not equal
30957  zero. If dst is not a null pointer and len is not less than dstmax, then the conversion
30958  shall have been stopped (see below) because a terminating null wide character was
30959  reached or because an encoding error occurred.
30960  
30961  
30962  
30963  
30964 <!--page 627 -->
30965 <p><!--para 3 -->
30966  If there is a runtime-constraint violation, then wcstombs_s does the following. If
30967  retval is not a null pointer, then wcstombs_s sets *retval to (size_t)(-1). If
30968  dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
30969  then wcstombs_s sets dst[0] to the null character.
30970 <p><b>Description</b>
30971 <p><!--para 4 -->
30972  The wcstombs_s function converts a sequence of wide characters from the array
30973  pointed to by src into a sequence of corresponding multibyte characters that begins in
30974  the initial shift state. If dst is not a null pointer, the converted characters are then stored
30975  into the array pointed to by dst. Conversion continues up to and including a terminating
30976  null wide character, which is also stored. Conversion stops earlier in two cases:
30977 <ul>
30978 <li>  when a wide character is reached that does not correspond to a valid multibyte
30979  character;
30980 <li>  (if dst is not a null pointer) when the next multibyte character would exceed the
30981    limit of n total bytes to be stored into the array pointed to by dst. If the wide
30982    character being converted is the null wide character, then n is the lesser of len or
30983    dstmax. Otherwise, n is the lesser of len or dstmax-1.
30984 </ul>
30985  If the conversion stops without converting a null wide character and dst is not a null
30986  pointer, then a null character is stored into the array pointed to by dst immediately
30987  following any multibyte characters already stored. Each conversion takes place as if by a
30988  call to the wcrtomb function.<sup><a href="#note402"><b>402)</b></a></sup>
30989 <p><!--para 5 -->
30990  Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
30991  wide character that does not correspond to a valid multibyte character, an encoding error
30992  occurs: the wcstombs_s function stores the value (size_t)(-1) into *retval.
30993  Otherwise, the wcstombs_s function stores into *retval the number of bytes in the
30994  resulting multibyte character sequence, not including the terminating null character (if
30995  any).
30996 <p><!--para 6 -->
30997  All elements following the terminating null character (if any) written by wcstombs_s
30998  in the array of dstmax elements pointed to by dst take unspecified values when
30999  wcstombs_s returns.<sup><a href="#note403"><b>403)</b></a></sup>
31000 <p><!--para 7 -->
31001  If copying takes place between objects that overlap, the objects take on unspecified
31002  values.
31003  
31004  
31005 <!--page 628 -->
31006 <p><b>Returns</b>
31007 <p><!--para 8 -->
31008  The wcstombs_s function returns zero if no runtime-constraint violation and no
31009  encoding error occurred. Otherwise, a nonzero value is returned.
31010
31011 <p><b>Footnotes</b>
31012 <p><small><a name="note402" href="#note402">402)</a> If conversion stops because a terminating null wide character has been reached, the bytes stored
31013  include those necessary to reach the initial shift state immediately before the null byte. However, if
31014  the conversion stops before a terminating null wide character has been reached, the result will be null
31015  terminated, but might not end in the initial shift state.
31016 </small>
31017 <p><small><a name="note403" href="#note403">403)</a> When len is not less than dstmax, the implementation might fill the array before discovering a
31018  runtime-constraint violation.
31019 </small>
31020
31021 <p><small><a href="#Contents">Contents</a></small>
31022 <h4><a name="K.3.7" href="#K.3.7">K.3.7 String handling &lt;string.h&gt;</a></h4>
31023 <p><!--para 1 -->
31024  The header <a href="#7.23">&lt;string.h&gt;</a> defines two types.
31025 <p><!--para 2 -->
31026  The types are
31027 <pre>
31028         errno_t
31029 </pre>
31030  which is type int; and
31031 <pre>
31032         rsize_t
31033 </pre>
31034  which is the type size_t.
31035
31036 <p><small><a href="#Contents">Contents</a></small>
31037 <h5><a name="K.3.7.1" href="#K.3.7.1">K.3.7.1 Copying functions</a></h5>
31038
31039 <p><small><a href="#Contents">Contents</a></small>
31040 <h5><a name="K.3.7.1.1" href="#K.3.7.1.1">K.3.7.1.1 The memcpy_s function</a></h5>
31041 <p><b>Synopsis</b>
31042 <p><!--para 1 -->
31043 <pre>
31044         #define __STDC_WANT_LIB_EXT1__ 1
31045         #include <a href="#7.23">&lt;string.h&gt;</a>
31046         errno_t memcpy_s(void * restrict s1, rsize_t s1max,
31047              const void * restrict s2, rsize_t n);
31048 </pre>
31049  Runtime-constraints
31050 <p><!--para 2 -->
31051  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
31052  RSIZE_MAX. n shall not be greater than s1max. Copying shall not take place between
31053  objects that overlap.
31054 <p><!--para 3 -->
31055  If there is a runtime-constraint violation, the memcpy_s function stores zeros in the first
31056  s1max characters of the object pointed to by s1 if s1 is not a null pointer and s1max is
31057  not greater than RSIZE_MAX.
31058 <p><b>Description</b>
31059 <p><!--para 4 -->
31060  The memcpy_s function copies n characters from the object pointed to by s2 into the
31061  object pointed to by s1.
31062 <p><b>Returns</b>
31063 <p><!--para 5 -->
31064  The memcpy_s function returns zero if there was no runtime-constraint violation.
31065  Otherwise, a nonzero value is returned.
31066 <!--page 629 -->
31067
31068 <p><small><a href="#Contents">Contents</a></small>
31069 <h5><a name="K.3.7.1.2" href="#K.3.7.1.2">K.3.7.1.2 The memmove_s function</a></h5>
31070 <p><b>Synopsis</b>
31071 <p><!--para 1 -->
31072 <pre>
31073          #define __STDC_WANT_LIB_EXT1__ 1
31074          #include <a href="#7.23">&lt;string.h&gt;</a>
31075          errno_t memmove_s(void *s1, rsize_t s1max,
31076               const void *s2, rsize_t n);
31077 </pre>
31078  Runtime-constraints
31079 <p><!--para 2 -->
31080  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
31081  RSIZE_MAX. n shall not be greater than s1max.
31082 <p><!--para 3 -->
31083  If there is a runtime-constraint violation, the memmove_s function stores zeros in the
31084  first s1max characters of the object pointed to by s1 if s1 is not a null pointer and
31085  s1max is not greater than RSIZE_MAX.
31086 <p><b>Description</b>
31087 <p><!--para 4 -->
31088  The memmove_s function copies n characters from the object pointed to by s2 into the
31089  object pointed to by s1. This copying takes place as if the n characters from the object
31090  pointed to by s2 are first copied into a temporary array of n characters that does not
31091  overlap the objects pointed to by s1 or s2, and then the n characters from the temporary
31092  array are copied into the object pointed to by s1.
31093 <p><b>Returns</b>
31094 <p><!--para 5 -->
31095  The memmove_s function returns zero if there was no runtime-constraint violation.
31096  Otherwise, a nonzero value is returned.
31097
31098 <p><small><a href="#Contents">Contents</a></small>
31099 <h5><a name="K.3.7.1.3" href="#K.3.7.1.3">K.3.7.1.3 The strcpy_s function</a></h5>
31100 <p><b>Synopsis</b>
31101 <p><!--para 1 -->
31102 <pre>
31103          #define __STDC_WANT_LIB_EXT1__ 1
31104          #include <a href="#7.23">&lt;string.h&gt;</a>
31105          errno_t strcpy_s(char * restrict s1,
31106               rsize_t s1max,
31107               const char * restrict s2);
31108 </pre>
31109  Runtime-constraints
31110 <p><!--para 2 -->
31111  Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
31112  s1max shall not equal zero. s1max shall be greater than strnlen_s(s2, s1max).
31113  Copying shall not take place between objects that overlap.
31114 <p><!--para 3 -->
31115  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
31116  greater than zero and not greater than RSIZE_MAX, then strcpy_s sets s1[0] to the
31117  null character.
31118 <!--page 630 -->
31119 <p><b>Description</b>
31120 <p><!--para 4 -->
31121  The strcpy_s function copies the string pointed to by s2 (including the terminating
31122  null character) into the array pointed to by s1.
31123 <p><!--para 5 -->
31124  All elements following the terminating null character (if any) written by strcpy_s in
31125  the array of s1max characters pointed to by s1 take unspecified values when
31126  strcpy_s returns.<sup><a href="#note404"><b>404)</b></a></sup>
31127 <p><b>Returns</b>
31128 <p><!--para 6 -->
31129  The strcpy_s function returns zero<sup><a href="#note405"><b>405)</b></a></sup> if there was no runtime-constraint violation.
31130  Otherwise, a nonzero value is returned.
31131
31132 <p><b>Footnotes</b>
31133 <p><small><a name="note404" href="#note404">404)</a> This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
31134  any of those characters are null. Such an approach might write a character to every element of s1
31135  before discovering that the first element should be set to the null character.
31136 </small>
31137 <p><small><a name="note405" href="#note405">405)</a> A zero return value implies that all of the requested characters from the string pointed to by s2 fit
31138  within the array pointed to by s1 and that the result in s1 is null terminated.
31139 </small>
31140
31141 <p><small><a href="#Contents">Contents</a></small>
31142 <h5><a name="K.3.7.1.4" href="#K.3.7.1.4">K.3.7.1.4 The strncpy_s function</a></h5>
31143 <p><b>Synopsis</b>
31144 <p><!--para 1 -->
31145 <pre>
31146          #define __STDC_WANT_LIB_EXT1__ 1
31147          #include <a href="#7.23">&lt;string.h&gt;</a>
31148          errno_t strncpy_s(char * restrict s1,
31149               rsize_t s1max,
31150               const char * restrict s2,
31151               rsize_t n);
31152 </pre>
31153  Runtime-constraints
31154 <p><!--para 2 -->
31155  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
31156  RSIZE_MAX. s1max shall not equal zero. If n is not less than s1max, then s1max
31157  shall be greater than strnlen_s(s2, s1max). Copying shall not take place between
31158  objects that overlap.
31159 <p><!--para 3 -->
31160  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
31161  greater than zero and not greater than RSIZE_MAX, then strncpy_s sets s1[0] to the
31162  null character.
31163 <p><b>Description</b>
31164 <p><!--para 4 -->
31165  The strncpy_s function copies not more than n successive characters (characters that
31166  follow a null character are not copied) from the array pointed to by s2 to the array
31167  pointed to by s1. If no null character was copied from s2, then s1[n] is set to a null
31168  character.
31169  
31170  
31171 <!--page 631 -->
31172 <p><!--para 5 -->
31173  All elements following the terminating null character (if any) written by strncpy_s in
31174  the array of s1max characters pointed to by s1 take unspecified values when
31175  strncpy_s returns.<sup><a href="#note406"><b>406)</b></a></sup>
31176 <p><b>Returns</b>
31177 <p><!--para 6 -->
31178  The strncpy_s function returns zero<sup><a href="#note407"><b>407)</b></a></sup> if there was no runtime-constraint violation.
31179  Otherwise, a nonzero value is returned.
31180 <p><!--para 7 -->
31181  EXAMPLE 1 The strncpy_s function can be used to copy a string without the danger that the result
31182  will not be null terminated or that characters will be written past the end of the destination array.
31183 <pre>
31184          #define __STDC_WANT_LIB_EXT1__ 1
31185          #include <a href="#7.23">&lt;string.h&gt;</a>
31186          /* ... */
31187          char src1[100] = "hello";
31188          char src2[7] = {'g', 'o', 'o', 'd', 'b', 'y', 'e'};
31189          char dst1[6], dst2[5], dst3[5];
31190          int r1, r2, r3;
31191          r1 = strncpy_s(dst1, 6, src1, 100);
31192          r2 = strncpy_s(dst2, 5, src2, 7);
31193          r3 = strncpy_s(dst3, 5, src2, 4);
31194 </pre>
31195  The first call will assign to r1 the value zero and to dst1 the sequence hello\0.
31196  The second call will assign to r2 a nonzero value and to dst2 the sequence \0.
31197  The third call will assign to r3 the value zero and to dst3 the sequence good\0.
31198  
31199
31200 <p><b>Footnotes</b>
31201 <p><small><a name="note406" href="#note406">406)</a> This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
31202  any of those characters are null. Such an approach might write a character to every element of s1
31203  before discovering that the first element should be set to the null character.
31204 </small>
31205 <p><small><a name="note407" href="#note407">407)</a> A zero return value implies that all of the requested characters from the string pointed to by s2 fit
31206  within the array pointed to by s1 and that the result in s1 is null terminated.
31207 </small>
31208
31209 <p><small><a href="#Contents">Contents</a></small>
31210 <h5><a name="K.3.7.2" href="#K.3.7.2">K.3.7.2 Concatenation functions</a></h5>
31211
31212 <p><small><a href="#Contents">Contents</a></small>
31213 <h5><a name="K.3.7.2.1" href="#K.3.7.2.1">K.3.7.2.1 The strcat_s function</a></h5>
31214 <p><b>Synopsis</b>
31215 <p><!--para 1 -->
31216 <pre>
31217          #define __STDC_WANT_LIB_EXT1__ 1
31218          #include <a href="#7.23">&lt;string.h&gt;</a>
31219          errno_t strcat_s(char * restrict s1,
31220               rsize_t s1max,
31221               const char * restrict s2);
31222 </pre>
31223  Runtime-constraints
31224 <p><!--para 2 -->
31225  Let m denote the value s1max - strnlen_s(s1, s1max) upon entry to
31226  strcat_s.
31227  
31228  
31229  
31230  
31231 <!--page 632 -->
31232 <p><!--para 3 -->
31233  Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
31234  s1max shall not equal zero. m shall not equal zero.<sup><a href="#note408"><b>408)</b></a></sup> m shall be greater than
31235  strnlen_s(s2, m). Copying shall not take place between objects that overlap.
31236 <p><!--para 4 -->
31237  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
31238  greater than zero and not greater than RSIZE_MAX, then strcat_s sets s1[0] to the
31239  null character.
31240 <p><b>Description</b>
31241 <p><!--para 5 -->
31242  The strcat_s function appends a copy of the string pointed to by s2 (including the
31243  terminating null character) to the end of the string pointed to by s1. The initial character
31244  from s2 overwrites the null character at the end of s1.
31245 <p><!--para 6 -->
31246  All elements following the terminating null character (if any) written by strcat_s in
31247  the array of s1max characters pointed to by s1 take unspecified values when
31248  strcat_s returns.<sup><a href="#note409"><b>409)</b></a></sup>
31249 <p><b>Returns</b>
31250 <p><!--para 7 -->
31251  The strcat_s function returns zero<sup><a href="#note410"><b>410)</b></a></sup> if there was no runtime-constraint violation.
31252  Otherwise, a nonzero value is returned.
31253
31254 <p><b>Footnotes</b>
31255 <p><small><a name="note408" href="#note408">408)</a> Zero means that s1 was not null terminated upon entry to strcat_s.
31256 </small>
31257 <p><small><a name="note409" href="#note409">409)</a> This allows an implementation to append characters from s2 to s1 while simultaneously checking if
31258  any of those characters are null. Such an approach might write a character to every element of s1
31259  before discovering that the first element should be set to the null character.
31260 </small>
31261 <p><small><a name="note410" href="#note410">410)</a> A zero return value implies that all of the requested characters from the string pointed to by s2 were
31262  appended to the string pointed to by s1 and that the result in s1 is null terminated.
31263 </small>
31264
31265 <p><small><a href="#Contents">Contents</a></small>
31266 <h5><a name="K.3.7.2.2" href="#K.3.7.2.2">K.3.7.2.2 The strncat_s function</a></h5>
31267 <p><b>Synopsis</b>
31268 <p><!--para 1 -->
31269 <pre>
31270          #define __STDC_WANT_LIB_EXT1__ 1
31271          #include <a href="#7.23">&lt;string.h&gt;</a>
31272          errno_t strncat_s(char * restrict s1,
31273               rsize_t s1max,
31274               const char * restrict s2,
31275               rsize_t n);
31276 </pre>
31277  Runtime-constraints
31278 <p><!--para 2 -->
31279  Let m denote the value s1max - strnlen_s(s1, s1max) upon entry to
31280  strncat_s.
31281 <p><!--para 3 -->
31282  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
31283  RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.<sup><a href="#note411"><b>411)</b></a></sup> If n is not less
31284  
31285  
31286 <!--page 633 -->
31287  than m, then m shall be greater than strnlen_s(s2, m). Copying shall not take
31288  place between objects that overlap.
31289 <p><!--para 4 -->
31290  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
31291  greater than zero and not greater than RSIZE_MAX, then strncat_s sets s1[0] to the
31292  null character.
31293 <p><b>Description</b>
31294 <p><!--para 5 -->
31295  The strncat_s function appends not more than n successive characters (characters
31296  that follow a null character are not copied) from the array pointed to by s2 to the end of
31297  the string pointed to by s1. The initial character from s2 overwrites the null character at
31298  the end of s1. If no null character was copied from s2, then s1[s1max-m+n] is set to
31299  a null character.
31300 <p><!--para 6 -->
31301  All elements following the terminating null character (if any) written by strncat_s in
31302  the array of s1max characters pointed to by s1 take unspecified values when
31303  strncat_s returns.<sup><a href="#note412"><b>412)</b></a></sup>
31304 <p><b>Returns</b>
31305 <p><!--para 7 -->
31306  The strncat_s function returns zero<sup><a href="#note413"><b>413)</b></a></sup> if there was no runtime-constraint violation.
31307  Otherwise, a nonzero value is returned.
31308 <p><!--para 8 -->
31309  EXAMPLE 1 The strncat_s function can be used to copy a string without the danger that the result
31310  will not be null terminated or that characters will be written past the end of the destination array.
31311 <pre>
31312          #define __STDC_WANT_LIB_EXT1__ 1
31313          #include <a href="#7.23">&lt;string.h&gt;</a>
31314          /* ... */
31315          char s1[100] = "good";
31316          char s2[6] = "hello";
31317          char s3[6] = "hello";
31318          char s4[7] = "abc";
31319          char s5[1000] = "bye";
31320          int r1, r2, r3, r4;
31321          r1 = strncat_s(s1, 100, s5, 1000);
31322          r2 = strncat_s(s2, 6, "", 1);
31323          r3 = strncat_s(s3, 6, "X", 2);
31324          r4 = strncat_s(s4, 7, "defghijklmn", 3);
31325 </pre>
31326  After the first call r1 will have the value zero and s1 will contain the sequence goodbye\0.
31327  
31328  
31329  
31330 <!--page 634 -->
31331  After the second call r2 will have the value zero and s2 will contain the sequence hello\0.
31332  After the third call r3 will have a nonzero value and s3 will contain the sequence \0.
31333  After the fourth call r4 will have the value zero and s4 will contain the sequence abcdef\0.
31334  
31335
31336 <p><b>Footnotes</b>
31337 <p><small><a name="note411" href="#note411">411)</a> Zero means that s1 was not null terminated upon entry to strncat_s.
31338 </small>
31339 <p><small><a name="note412" href="#note412">412)</a> This allows an implementation to append characters from s2 to s1 while simultaneously checking if
31340  any of those characters are null. Such an approach might write a character to every element of s1
31341  before discovering that the first element should be set to the null character.
31342 </small>
31343 <p><small><a name="note413" href="#note413">413)</a> A zero return value implies that all of the requested characters from the string pointed to by s2 were
31344  appended to the string pointed to by s1 and that the result in s1 is null terminated.
31345 </small>
31346
31347 <p><small><a href="#Contents">Contents</a></small>
31348 <h5><a name="K.3.7.3" href="#K.3.7.3">K.3.7.3 Search functions</a></h5>
31349
31350 <p><small><a href="#Contents">Contents</a></small>
31351 <h5><a name="K.3.7.3.1" href="#K.3.7.3.1">K.3.7.3.1 The strtok_s function</a></h5>
31352 <p><b>Synopsis</b>
31353 <p><!--para 1 -->
31354 <pre>
31355          #define __STDC_WANT_LIB_EXT1__ 1
31356          #include <a href="#7.23">&lt;string.h&gt;</a>
31357          char *strtok_s(char * restrict s1,
31358               rsize_t * restrict s1max,
31359               const char * restrict s2,
31360               char ** restrict ptr);
31361 </pre>
31362  Runtime-constraints
31363 <p><!--para 2 -->
31364  None of s1max, s2, or ptr shall be a null pointer. If s1 is a null pointer, then *ptr
31365  shall not be a null pointer. The value of *s1max shall not be greater than RSIZE_MAX.
31366  The end of the token found shall occur within the first *s1max characters of s1 for the
31367  first call, and shall occur within the first *s1max characters of where searching resumes
31368  on subsequent calls.
31369 <p><!--para 3 -->
31370  If there is a runtime-constraint violation, the strtok_s function does not indirect
31371  through the s1 or s2 pointers, and does not store a value in the object pointed to by ptr.
31372 <p><b>Description</b>
31373 <p><!--para 4 -->
31374  A sequence of calls to the strtok_s function breaks the string pointed to by s1 into a
31375  sequence of tokens, each of which is delimited by a character from the string pointed to
31376  by s2. The fourth argument points to a caller-provided char pointer into which the
31377  strtok_s function stores information necessary for it to continue scanning the same
31378  string.
31379 <p><!--para 5 -->
31380  The first call in a sequence has a non-null first argument and s1max points to an object
31381  whose value is the number of elements in the character array pointed to by the first
31382  argument. The first call stores an initial value in the object pointed to by ptr and
31383  updates the value pointed to by s1max to reflect the number of elements that remain in
31384  relation to ptr. Subsequent calls in the sequence have a null first argument and the
31385  objects pointed to by s1max and ptr are required to have the values stored by the
31386  previous call in the sequence, which are then updated. The separator string pointed to by
31387  s2 may be different from call to call.
31388 <p><!--para 6 -->
31389  The first call in the sequence searches the string pointed to by s1 for the first character
31390  that is not contained in the current separator string pointed to by s2. If no such character
31391  is found, then there are no tokens in the string pointed to by s1 and the strtok_s
31392  function returns a null pointer. If such a character is found, it is the start of the first token.
31393 <!--page 635 -->
31394 <p><!--para 7 -->
31395  The strtok_s function then searches from there for the first character in s1 that is
31396  contained in the current separator string. If no such character is found, the current token
31397  extends to the end of the string pointed to by s1, and subsequent searches in the same
31398  string for a token return a null pointer. If such a character is found, it is overwritten by a
31399  null character, which terminates the current token.
31400 <p><!--para 8 -->
31401  In all cases, the strtok_s function stores sufficient information in the pointer pointed
31402  to by ptr so that subsequent calls, with a null pointer for s1 and the unmodified pointer
31403  value for ptr, shall start searching just past the element overwritten by a null character
31404  (if any).
31405 <p><b>Returns</b>
31406 <p><!--para 9 -->
31407  The strtok_s function returns a pointer to the first character of a token, or a null
31408  pointer if there is no token or there is a runtime-constraint violation.
31409 <p><!--para 10 -->
31410  EXAMPLE
31411 <pre>
31412          #define __STDC_WANT_LIB_EXT1__ 1
31413          #include <a href="#7.23">&lt;string.h&gt;</a>
31414          static char str1[] = "?a???b,,,#c";
31415          static char str2[] = "\t \t";
31416          char *t, *ptr1, *ptr2;
31417          rsize_t max1 = sizeof(str1);
31418          rsize_t max2 = sizeof(str2);
31419          t   =   strtok_s(str1,   &amp;max1,   "?", &amp;ptr1);        //   t   points to the token "a"
31420          t   =   strtok_s(NULL,   &amp;max1,   ",", &amp;ptr1);        //   t   points to the token "??b"
31421          t   =   strtok_s(str2,   &amp;max2,   " \t", &amp;ptr2);      //   t   is a null pointer
31422          t   =   strtok_s(NULL,   &amp;max1,   "#,", &amp;ptr1);       //   t   points to the token "c"
31423          t   =   strtok_s(NULL,   &amp;max1,   "?", &amp;ptr1);        //   t   is a null pointer
31424 </pre>
31425  
31426
31427 <p><small><a href="#Contents">Contents</a></small>
31428 <h5><a name="K.3.7.4" href="#K.3.7.4">K.3.7.4 Miscellaneous functions</a></h5>
31429
31430 <p><small><a href="#Contents">Contents</a></small>
31431 <h5><a name="K.3.7.4.1" href="#K.3.7.4.1">K.3.7.4.1 The memset_s function</a></h5>
31432 <p><b>Synopsis</b>
31433 <p><!--para 1 -->
31434 <pre>
31435          #define __STDC_WANT_LIB_EXT1__ 1
31436          #include <a href="#7.23">&lt;string.h&gt;</a>
31437          errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n)
31438 </pre>
31439  Runtime-constraints
31440 <p><!--para 2 -->
31441  s shall not be a null pointer. Neither smax nor n shall be greater than RSIZE_MAX. n
31442  shall not be greater than smax.
31443 <p><!--para 3 -->
31444  If there is a runtime-constraint violation, then if s is not a null pointer and smax is not
31445  greater than RSIZE_MAX, the memset_s function stores the value of c (converted to an
31446  unsigned char) into each of the first smax characters of the object pointed to by s.
31447 <!--page 636 -->
31448 <p><b>Description</b>
31449 <p><!--para 4 -->
31450  The memset_s function copies the value of c (converted to an unsigned char) into
31451  each of the first n characters of the object pointed to by s. Unlike memset, any call to
31452  the memset_s function shall be evaluated strictly according to the rules of the abstract
31453  machine as described in (<a href="#5.1.2.3">5.1.2.3</a>). That is, any call to the memset_s function shall
31454  assume that the memory indicated by s and n may be accessible in the future and thus
31455  must contain the values indicated by c.
31456 <p><b>Returns</b>
31457 <p><!--para 5 -->
31458  The memset_s function returns zero if there was no runtime-constraint violation.
31459  Otherwise, a nonzero value is returned.
31460
31461 <p><small><a href="#Contents">Contents</a></small>
31462 <h5><a name="K.3.7.4.2" href="#K.3.7.4.2">K.3.7.4.2 The strerror_s function</a></h5>
31463 <p><b>Synopsis</b>
31464 <p><!--para 1 -->
31465 <pre>
31466         #define __STDC_WANT_LIB_EXT1__ 1
31467         #include <a href="#7.23">&lt;string.h&gt;</a>
31468         errno_t strerror_s(char *s, rsize_t maxsize,
31469              errno_t errnum);
31470 </pre>
31471  Runtime-constraints
31472 <p><!--para 2 -->
31473  s shall not be a null pointer. maxsize shall not be greater than RSIZE_MAX.
31474  maxsize shall not equal zero.
31475 <p><!--para 3 -->
31476  If there is a runtime-constraint violation, then the array (if any) pointed to by s is not
31477  modified.
31478 <p><b>Description</b>
31479 <p><!--para 4 -->
31480  The strerror_s function maps the number in errnum to a locale-specific message
31481  string. Typically, the values for errnum come from errno, but strerror_s shall
31482  map any value of type int to a message.
31483 <p><!--para 5 -->
31484  If the length of the desired string is less than maxsize, then the string is copied to the
31485  array pointed to by s.
31486 <p><!--para 6 -->
31487  Otherwise, if maxsize is greater than zero, then maxsize-1 characters are copied
31488  from the string to the array pointed to by s and then s[maxsize-1] is set to the null
31489  character. Then, if maxsize is greater than 3, then s[maxsize-2],
31490  s[maxsize-3], and s[maxsize-4] are set to the character period (.).
31491 <p><b>Returns</b>
31492 <p><!--para 7 -->
31493  The strerror_s function returns zero if the length of the desired string was less than
31494  maxsize and there was no runtime-constraint violation. Otherwise, the strerror_s
31495  function returns a nonzero value.
31496 <!--page 637 -->
31497
31498 <p><small><a href="#Contents">Contents</a></small>
31499 <h5><a name="K.3.7.4.3" href="#K.3.7.4.3">K.3.7.4.3 The strerrorlen_s function</a></h5>
31500 <p><b>Synopsis</b>
31501 <p><!--para 1 -->
31502 <pre>
31503          #define __STDC_WANT_LIB_EXT1__ 1
31504          #include <a href="#7.23">&lt;string.h&gt;</a>
31505          size_t strerrorlen_s(errno_t errnum);
31506 </pre>
31507 <p><b>Description</b>
31508 <p><!--para 2 -->
31509  The strerrorlen_s function calculates the length of the (untruncated) locale-specific
31510  message string that the strerror_s function maps to errnum.
31511 <p><b>Returns</b>
31512 <p><!--para 3 -->
31513  The strerrorlen_s function returns the number of characters (not including the null
31514  character) in the full message string.
31515
31516 <p><small><a href="#Contents">Contents</a></small>
31517 <h5><a name="K.3.7.4.4" href="#K.3.7.4.4">K.3.7.4.4 The strnlen_s function</a></h5>
31518 <p><b>Synopsis</b>
31519 <p><!--para 1 -->
31520 <pre>
31521          #define __STDC_WANT_LIB_EXT1__ 1
31522          #include <a href="#7.23">&lt;string.h&gt;</a>
31523          size_t strnlen_s(const char *s, size_t maxsize);
31524 </pre>
31525 <p><b>Description</b>
31526 <p><!--para 2 -->
31527  The strnlen_s function computes the length of the string pointed to by s.
31528 <p><b>Returns</b>
31529 <p><!--para 3 -->
31530  If s is a null pointer,<sup><a href="#note414"><b>414)</b></a></sup> then the strnlen_s function returns zero.
31531 <p><!--para 4 -->
31532  Otherwise, the strnlen_s function returns the number of characters that precede the
31533  terminating null character. If there is no null character in the first maxsize characters of
31534  s then strnlen_s returns maxsize. At most the first maxsize characters of s shall
31535  be accessed by strnlen_s.
31536  
31537  
31538  
31539  
31540 <!--page 638 -->
31541
31542 <p><b>Footnotes</b>
31543 <p><small><a name="note414" href="#note414">414)</a> Note that the strnlen_s function has no runtime-constraints. This lack of runtime-constraints
31544  along with the values returned for a null pointer or an unterminated string argument make
31545  strnlen_s useful in algorithms that gracefully handle such exceptional data.
31546 </small>
31547
31548 <p><small><a href="#Contents">Contents</a></small>
31549 <h4><a name="K.3.8" href="#K.3.8">K.3.8 Date and time &lt;time.h&gt;</a></h4>
31550 <p><!--para 1 -->
31551  The header <a href="#7.26">&lt;time.h&gt;</a> defines two types.
31552 <p><!--para 2 -->
31553  The types are
31554 <pre>
31555          errno_t
31556 </pre>
31557  which is type int; and
31558 <pre>
31559          rsize_t
31560 </pre>
31561  which is the type size_t.
31562
31563 <p><small><a href="#Contents">Contents</a></small>
31564 <h5><a name="K.3.8.1" href="#K.3.8.1">K.3.8.1 Components of time</a></h5>
31565 <p><!--para 1 -->
31566  A broken-down time is normalized if the values of the members of the tm structure are in
31567  their normal rages.<sup><a href="#note415"><b>415)</b></a></sup>
31568
31569 <p><b>Footnotes</b>
31570 <p><small><a name="note415" href="#note415">415)</a> The normal ranges are defined in <a href="#7.26.1">7.26.1</a>.
31571 </small>
31572
31573 <p><small><a href="#Contents">Contents</a></small>
31574 <h5><a name="K.3.8.2" href="#K.3.8.2">K.3.8.2 Time conversion functions</a></h5>
31575 <p><!--para 1 -->
31576  Like the strftime function, the asctime_s and ctime_s functions do not return a
31577  pointer to a static object, and other library functions are permitted to call them.
31578
31579 <p><small><a href="#Contents">Contents</a></small>
31580 <h5><a name="K.3.8.2.1" href="#K.3.8.2.1">K.3.8.2.1 The asctime_s function</a></h5>
31581 <p><b>Synopsis</b>
31582 <p><!--para 1 -->
31583 <pre>
31584          #define __STDC_WANT_LIB_EXT1__ 1
31585          #include <a href="#7.26">&lt;time.h&gt;</a>
31586          errno_t asctime_s(char *s, rsize_t maxsize,
31587               const struct tm *timeptr);
31588 </pre>
31589  Runtime-constraints
31590 <p><!--para 2 -->
31591  Neither s nor timeptr shall be a null pointer. maxsize shall not be less than 26 and
31592  shall not be greater than RSIZE_MAX. The broken-down time pointed to by timeptr
31593  shall be normalized. The calendar year represented by the broken-down time pointed to
31594  by timeptr shall not be less than calendar year 0 and shall not be greater than calendar
31595  year 9999.
31596 <p><!--para 3 -->
31597  If there is a runtime-constraint violation, there is no attempt to convert the time, and
31598  s[0] is set to a null character if s is not a null pointer and maxsize is not zero and is
31599  not greater than RSIZE_MAX.
31600 <p><b>Description</b>
31601 <p><!--para 4 -->
31602  The asctime_s function converts the normalized broken-down time in the structure
31603  pointed to by timeptr into a 26 character (including the null character) string in the
31604  
31605  
31606 <!--page 639 -->
31607  form
31608 <pre>
31609          Sun Sep 16 01:03:52 1973\n\0
31610 </pre>
31611  The fields making up this string are (in order):
31612 <ol>
31613 <li>  The name of the day of the week represented by timeptr-&gt;tm_wday using the
31614  following three character weekday names: Sun, Mon, Tue, Wed, Thu, Fri, and Sat.
31615 <li>  The character space.
31616 <li>  The name of the month represented by timeptr-&gt;tm_mon using the following
31617  three character month names: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct,
31618  Nov, and Dec.
31619 <li>  The character space.
31620 <li>  The value of timeptr-&gt;tm_mday as if printed using the fprintf format
31621  "%2d".
31622 <li>  The character space.
31623 <li>  The value of timeptr-&gt;tm_hour as if printed using the fprintf format
31624  "%.2d".
31625 <li>  The character colon.
31626 <li>  The value of timeptr-&gt;tm_min as if printed using the fprintf format
31627  "%.2d".
31628 <li>  The character colon.
31629 <li>  The value of timeptr-&gt;tm_sec as if printed using the fprintf format
31630  "%.2d".
31631 <li>  The character space.
31632 <li>  The value of timeptr-&gt;tm_year + 1900 as if printed using the fprintf
31633  format "%4d".
31634 <li>  The character new line.
31635 <li>  The null character.
31636 </ol>
31637 <p><b>Recommended practice</b>
31638  The strftime function allows more flexible formatting and supports locale-specific
31639  behavior. If you do not require the exact form of the result string produced by the
31640  asctime_s function, consider using the strftime function instead.
31641 <p><b>Returns</b>
31642 <p><!--para 5 -->
31643  The asctime_s function returns zero if the time was successfully converted and stored
31644  into the array pointed to by s. Otherwise, it returns a nonzero value.
31645 <!--page 640 -->
31646
31647 <p><small><a href="#Contents">Contents</a></small>
31648 <h5><a name="K.3.8.2.2" href="#K.3.8.2.2">K.3.8.2.2 The ctime_s function</a></h5>
31649 <p><b>Synopsis</b>
31650 <p><!--para 1 -->
31651 <pre>
31652         #define __STDC_WANT_LIB_EXT1__ 1
31653         #include <a href="#7.26">&lt;time.h&gt;</a>
31654         errno_t ctime_s(char *s, rsize_t maxsize,
31655              const time_t *timer);
31656 </pre>
31657  Runtime-constraints
31658 <p><!--para 2 -->
31659  Neither s nor timer shall be a null pointer. maxsize shall not be less than 26 and
31660  shall not be greater than RSIZE_MAX.
31661 <p><!--para 3 -->
31662  If there is a runtime-constraint violation, s[0] is set to a null character if s is not a null
31663  pointer and maxsize is not equal zero and is not greater than RSIZE_MAX.
31664 <p><b>Description</b>
31665 <p><!--para 4 -->
31666  The ctime_s function converts the calendar time pointed to by timer to local time in
31667  the form of a string. It is equivalent to
31668 <pre>
31669         asctime_s(s, maxsize, localtime_s(timer))
31670 </pre>
31671 <p><b>Recommended practice</b>
31672  The strftime function allows more flexible formatting and supports locale-specific
31673  behavior. If you do not require the exact form of the result string produced by the
31674  ctime_s function, consider using the strftime function instead.
31675 <p><b>Returns</b>
31676 <p><!--para 5 -->
31677  The ctime_s function returns zero if the time was successfully converted and stored
31678  into the array pointed to by s. Otherwise, it returns a nonzero value.
31679
31680 <p><small><a href="#Contents">Contents</a></small>
31681 <h5><a name="K.3.8.2.3" href="#K.3.8.2.3">K.3.8.2.3 The gmtime_s function</a></h5>
31682 <p><b>Synopsis</b>
31683 <p><!--para 1 -->
31684 <pre>
31685         #define __STDC_WANT_LIB_EXT1__ 1
31686         #include <a href="#7.26">&lt;time.h&gt;</a>
31687         struct tm *gmtime_s(const time_t * restrict timer,
31688              struct tm * restrict result);
31689 </pre>
31690  Runtime-constraints
31691 <p><!--para 2 -->
31692  Neither timer nor result shall be a null pointer.
31693 <p><!--para 3 -->
31694  If there is a runtime-constraint violation, there is no attempt to convert the time.
31695 <p><b>Description</b>
31696 <p><!--para 4 -->
31697  The gmtime_s function converts the calendar time pointed to by timer into a broken-
31698  down time, expressed as UTC. The broken-down time is stored in the structure pointed
31699 <!--page 641 -->
31700  to by result.
31701 <p><b>Returns</b>
31702 <p><!--para 5 -->
31703  The gmtime_s function returns result, or a null pointer if the specified time cannot
31704  be converted to UTC or there is a runtime-constraint violation.
31705
31706 <p><small><a href="#Contents">Contents</a></small>
31707 <h5><a name="K.3.8.2.4" href="#K.3.8.2.4">K.3.8.2.4 The localtime_s function</a></h5>
31708 <p><b>Synopsis</b>
31709 <p><!--para 1 -->
31710 <pre>
31711           #define __STDC_WANT_LIB_EXT1__ 1
31712           #include <a href="#7.26">&lt;time.h&gt;</a>
31713           struct tm *localtime_s(const time_t * restrict timer,
31714                struct tm * restrict result);
31715 </pre>
31716  Runtime-constraints
31717 <p><!--para 2 -->
31718  Neither timer nor result shall be a null pointer.
31719 <p><!--para 3 -->
31720  If there is a runtime-constraint violation, there is no attempt to convert the time.
31721 <p><b>Description</b>
31722 <p><!--para 4 -->
31723  The localtime_s function converts the calendar time pointed to by timer into a
31724  broken-down time, expressed as local time. The broken-down time is stored in the
31725  structure pointed to by result.
31726 <p><b>Returns</b>
31727 <p><!--para 5 -->
31728  The localtime_s function returns result, or a null pointer if the specified time
31729  cannot be converted to local time or there is a runtime-constraint violation.
31730
31731 <p><small><a href="#Contents">Contents</a></small>
31732 <h4><a name="K.3.9" href="#K.3.9">K.3.9 Extended multibyte and wide character utilities &lt;wchar.h&gt;</a></h4>
31733 <p><!--para 1 -->
31734  The header <a href="#7.28">&lt;wchar.h&gt;</a> defines two types.
31735 <p><!--para 2 -->
31736  The types are
31737 <pre>
31738           errno_t
31739 </pre>
31740  which is type int; and
31741 <pre>
31742           rsize_t
31743 </pre>
31744  which is the type size_t.
31745 <p><!--para 3 -->
31746  Unless explicitly stated otherwise, if the execution of a function described in this
31747  subclause causes copying to take place between objects that overlap, the objects take on
31748  unspecified values.
31749 <!--page 642 -->
31750
31751 <p><small><a href="#Contents">Contents</a></small>
31752 <h5><a name="K.3.9.1" href="#K.3.9.1">K.3.9.1 Formatted wide character input/output functions</a></h5>
31753
31754 <p><small><a href="#Contents">Contents</a></small>
31755 <h5><a name="K.3.9.1.1" href="#K.3.9.1.1">K.3.9.1.1 The fwprintf_s function</a></h5>
31756 <p><b>Synopsis</b>
31757 <p><!--para 1 -->
31758 <pre>
31759          #define __STDC_WANT_LIB_EXT1__ 1
31760          #include <a href="#7.28">&lt;wchar.h&gt;</a>
31761          int fwprintf_s(FILE * restrict stream,
31762               const wchar_t * restrict format, ...);
31763 </pre>
31764  Runtime-constraints
31765 <p><!--para 2 -->
31766  Neither stream nor format shall be a null pointer. The %n specifier<sup><a href="#note416"><b>416)</b></a></sup> (modified or
31767  not by flags, field width, or precision) shall not appear in the wide string pointed to by
31768  format. Any argument to fwprintf_s corresponding to a %s specifier shall not be a
31769  null pointer.
31770 <p><!--para 3 -->
31771  If there is a runtime-constraint violation, the fwprintf_s function does not attempt to
31772  produce further output, and it is unspecified to what extent fwprintf_s produced
31773  output before discovering the runtime-constraint violation.
31774 <p><b>Description</b>
31775 <p><!--para 4 -->
31776  The fwprintf_s function is equivalent to the fwprintf function except for the
31777  explicit runtime-constraints listed above.
31778 <p><b>Returns</b>
31779 <p><!--para 5 -->
31780  The fwprintf_s function returns the number of wide characters transmitted, or a
31781  negative value if an output error, encoding error, or runtime-constraint violation occurred.
31782
31783 <p><b>Footnotes</b>
31784 <p><small><a name="note416" href="#note416">416)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
31785  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
31786  example, if the entire format string was L"%%n".
31787 </small>
31788
31789 <p><small><a href="#Contents">Contents</a></small>
31790 <h5><a name="K.3.9.1.2" href="#K.3.9.1.2">K.3.9.1.2 The fwscanf_s function</a></h5>
31791 <p><b>Synopsis</b>
31792 <p><!--para 1 -->
31793 <pre>
31794          #define __STDC_WANT_LIB_EXT1__ 1
31795          #include <a href="#7.21">&lt;stdio.h&gt;</a>
31796          #include <a href="#7.28">&lt;wchar.h&gt;</a>
31797          int fwscanf_s(FILE * restrict stream,
31798               const wchar_t * restrict format, ...);
31799 </pre>
31800  Runtime-constraints
31801 <p><!--para 2 -->
31802  Neither stream nor format shall be a null pointer. Any argument indirected though in
31803  order to store converted input shall not be a null pointer.
31804  
31805  
31806 <!--page 643 -->
31807 <p><!--para 3 -->
31808  If there is a runtime-constraint violation, the fwscanf_s function does not attempt to
31809  perform further input, and it is unspecified to what extent fwscanf_s performed input
31810  before discovering the runtime-constraint violation.
31811 <p><b>Description</b>
31812 <p><!--para 4 -->
31813  The fwscanf_s function is equivalent to fwscanf except that the c, s, and [
31814  conversion specifiers apply to a pair of arguments (unless assignment suppression is
31815  indicated by a *). The first of these arguments is the same as for fwscanf. That
31816  argument is immediately followed in the argument list by the second argument, which has
31817  type size_t and gives the number of elements in the array pointed to by the first
31818  argument of the pair. If the first argument points to a scalar object, it is considered to be
31819  an array of one element.<sup><a href="#note417"><b>417)</b></a></sup>
31820 <p><!--para 5 -->
31821  A matching failure occurs if the number of elements in a receiving object is insufficient to
31822  hold the converted input (including any trailing null character).
31823 <p><b>Returns</b>
31824 <p><!--para 6 -->
31825  The fwscanf_s function returns the value of the macro EOF if an input failure occurs
31826  before any conversion or if there is a runtime-constraint violation. Otherwise, the
31827  fwscanf_s function returns the number of input items assigned, which can be fewer
31828  than provided for, or even zero, in the event of an early matching failure.
31829
31830 <p><b>Footnotes</b>
31831 <p><small><a name="note417" href="#note417">417)</a> If the format is known at translation time, an implementation may issue a diagnostic for any argument
31832  used to store the result from a c, s, or [ conversion specifier if that argument is not followed by an
31833  argument of a type compatible with rsize_t. A limited amount of checking may be done if even if
31834  the format is not known at translation time. For example, an implementation may issue a diagnostic
31835  for each argument after format that has of type pointer to one of char, signed char,
31836  unsigned char, or void that is not followed by an argument of a type compatible with
31837  rsize_t. The diagnostic could warn that unless the pointer is being used with a conversion specifier
31838  using the hh length modifier, a length argument must follow the pointer argument. Another useful
31839  diagnostic could flag any non-pointer argument following format that did not have a type
31840  compatible with rsize_t.
31841 </small>
31842
31843 <p><small><a href="#Contents">Contents</a></small>
31844 <h5><a name="K.3.9.1.3" href="#K.3.9.1.3">K.3.9.1.3 The snwprintf_s function</a></h5>
31845 <p><b>Synopsis</b>
31846 <p><!--para 1 -->
31847 <pre>
31848          #define __STDC_WANT_LIB_EXT1__ 1
31849          #include <a href="#7.28">&lt;wchar.h&gt;</a>
31850          int snwprintf_s(wchar_t * restrict s,
31851               rsize_t n,
31852               const wchar_t * restrict format, ...);
31853 </pre>
31854  Runtime-constraints
31855 <p><!--para 2 -->
31856  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
31857  than RSIZE_MAX. The %n specifier<sup><a href="#note418"><b>418)</b></a></sup> (modified or not by flags, field width, or
31858  
31859 <!--page 644 -->
31860  precision) shall not appear in the wide string pointed to by format. Any argument to
31861  snwprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
31862  error shall occur.
31863 <p><!--para 3 -->
31864  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
31865  than zero and less than RSIZE_MAX, then the snwprintf_s function sets s[0] to the
31866  null wide character.
31867 <p><b>Description</b>
31868 <p><!--para 4 -->
31869  The snwprintf_s function is equivalent to the swprintf function except for the
31870  explicit runtime-constraints listed above.
31871 <p><!--para 5 -->
31872  The snwprintf_s function, unlike swprintf_s, will truncate the result to fit within
31873  the array pointed to by s.
31874 <p><b>Returns</b>
31875 <p><!--para 6 -->
31876  The snwprintf_s function returns the number of wide characters that would have
31877  been written had n been sufficiently large, not counting the terminating wide null
31878  character, or a negative value if a runtime-constraint violation occurred. Thus, the null-
31879  terminated output has been completely written if and only if the returned value is
31880  nonnegative and less than n.
31881
31882 <p><b>Footnotes</b>
31883 <p><small><a name="note418" href="#note418">418)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
31884  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
31885  example, if the entire format string was L"%%n".
31886 </small>
31887
31888 <p><small><a href="#Contents">Contents</a></small>
31889 <h5><a name="K.3.9.1.4" href="#K.3.9.1.4">K.3.9.1.4 The swprintf_s function</a></h5>
31890 <p><b>Synopsis</b>
31891 <p><!--para 1 -->
31892 <pre>
31893          #define __STDC_WANT_LIB_EXT1__ 1
31894          #include <a href="#7.28">&lt;wchar.h&gt;</a>
31895          int swprintf_s(wchar_t * restrict s, rsize_t n,
31896               const wchar_t * restrict format, ...);
31897 </pre>
31898  Runtime-constraints
31899 <p><!--para 2 -->
31900  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
31901  than RSIZE_MAX. The number of wide characters (including the trailing null) required
31902  for the result to be written to the array pointed to by s shall not be greater than n. The %n
31903  specifier<sup><a href="#note419"><b>419)</b></a></sup> (modified or not by flags, field width, or precision) shall not appear in the
31904  wide string pointed to by format. Any argument to swprintf_s corresponding to a
31905  %s specifier shall not be a null pointer. No encoding error shall occur.
31906  
31907  
31908 <!--page 645 -->
31909 <p><!--para 3 -->
31910  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
31911  than zero and less than RSIZE_MAX, then the swprintf_s function sets s[0] to the
31912  null wide character.
31913 <p><b>Description</b>
31914 <p><!--para 4 -->
31915  The swprintf_s function is equivalent to the swprintf function except for the
31916  explicit runtime-constraints listed above.
31917 <p><!--para 5 -->
31918  The swprintf_s function, unlike snwprintf_s, treats a result too big for the array
31919  pointed to by s as a runtime-constraint violation.
31920 <p><b>Returns</b>
31921 <p><!--para 6 -->
31922  If no runtime-constraint violation occurred, the swprintf_s function returns the
31923  number of wide characters written in the array, not counting the terminating null wide
31924  character. If an encoding error occurred or if n or more wide characters are requested to
31925  be written, swprintf_s returns a negative value. If any other runtime-constraint
31926  violation occurred, swprintf_s returns zero.
31927
31928 <p><b>Footnotes</b>
31929 <p><small><a name="note419" href="#note419">419)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
31930  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
31931  example, if the entire format string was L"%%n".
31932 </small>
31933
31934 <p><small><a href="#Contents">Contents</a></small>
31935 <h5><a name="K.3.9.1.5" href="#K.3.9.1.5">K.3.9.1.5 The swscanf_s function</a></h5>
31936 <p><b>Synopsis</b>
31937 <p><!--para 1 -->
31938 <pre>
31939          #define __STDC_WANT_LIB_EXT1__ 1
31940          #include <a href="#7.28">&lt;wchar.h&gt;</a>
31941          int swscanf_s(const wchar_t * restrict s,
31942               const wchar_t * restrict format, ...);
31943 </pre>
31944  Runtime-constraints
31945 <p><!--para 2 -->
31946  Neither s nor format shall be a null pointer. Any argument indirected though in order
31947  to store converted input shall not be a null pointer.
31948 <p><!--para 3 -->
31949  If there is a runtime-constraint violation, the swscanf_s function does not attempt to
31950  perform further input, and it is unspecified to what extent swscanf_s performed input
31951  before discovering the runtime-constraint violation.
31952 <p><b>Description</b>
31953 <p><!--para 4 -->
31954  The swscanf_s function is equivalent to fwscanf_s, except that the argument s
31955  specifies a wide string from which the input is to be obtained, rather than from a stream.
31956  Reaching the end of the wide string is equivalent to encountering end-of-file for the
31957  fwscanf_s function.
31958 <p><b>Returns</b>
31959 <p><!--para 5 -->
31960  The swscanf_s function returns the value of the macro EOF if an input failure occurs
31961  before any conversion or if there is a runtime-constraint violation. Otherwise, the
31962  swscanf_s function returns the number of input items assigned, which can be fewer
31963  than provided for, or even zero, in the event of an early matching failure.
31964 <!--page 646 -->
31965
31966 <p><small><a href="#Contents">Contents</a></small>
31967 <h5><a name="K.3.9.1.6" href="#K.3.9.1.6">K.3.9.1.6 The vfwprintf_s function</a></h5>
31968 <p><b>Synopsis</b>
31969 <p><!--para 1 -->
31970 <pre>
31971          #define __STDC_WANT_LIB_EXT1__ 1
31972          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
31973          #include <a href="#7.21">&lt;stdio.h&gt;</a>
31974          #include <a href="#7.28">&lt;wchar.h&gt;</a>
31975          int vfwprintf_s(FILE * restrict stream,
31976               const wchar_t * restrict format,
31977               va_list arg);
31978 </pre>
31979  Runtime-constraints
31980 <p><!--para 2 -->
31981  Neither stream nor format shall be a null pointer. The %n specifier<sup><a href="#note420"><b>420)</b></a></sup> (modified or
31982  not by flags, field width, or precision) shall not appear in the wide string pointed to by
31983  format. Any argument to vfwprintf_s corresponding to a %s specifier shall not be
31984  a null pointer.
31985 <p><!--para 3 -->
31986  If there is a runtime-constraint violation, the vfwprintf_s function does not attempt
31987  to produce further output, and it is unspecified to what extent vfwprintf_s produced
31988  output before discovering the runtime-constraint violation.
31989 <p><b>Description</b>
31990 <p><!--para 4 -->
31991  The vfwprintf_s function is equivalent to the vfwprintf function except for the
31992  explicit runtime-constraints listed above.
31993 <p><b>Returns</b>
31994 <p><!--para 5 -->
31995  The vfwprintf_s function returns the number of wide characters transmitted, or a
31996  negative value if an output error, encoding error, or runtime-constraint violation occurred.
31997
31998 <p><b>Footnotes</b>
31999 <p><small><a name="note420" href="#note420">420)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
32000  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
32001  example, if the entire format string was L"%%n".
32002 </small>
32003
32004 <p><small><a href="#Contents">Contents</a></small>
32005 <h5><a name="K.3.9.1.7" href="#K.3.9.1.7">K.3.9.1.7 The vfwscanf_s function</a></h5>
32006 <p><b>Synopsis</b>
32007 <p><!--para 1 -->
32008 <pre>
32009          #define __STDC_WANT_LIB_EXT1__ 1
32010          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
32011          #include <a href="#7.21">&lt;stdio.h&gt;</a>
32012          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32013          int vfwscanf_s(FILE * restrict stream,
32014               const wchar_t * restrict format, va_list arg);
32015 </pre>
32016  
32017  
32018  
32019 <!--page 647 -->
32020  Runtime-constraints
32021 <p><!--para 2 -->
32022  Neither stream nor format shall be a null pointer. Any argument indirected though in
32023  order to store converted input shall not be a null pointer.
32024 <p><!--para 3 -->
32025  If there is a runtime-constraint violation, the vfwscanf_s function does not attempt to
32026  perform further input, and it is unspecified to what extent vfwscanf_s performed input
32027  before discovering the runtime-constraint violation.
32028 <p><b>Description</b>
32029 <p><!--para 4 -->
32030  The vfwscanf_s function is equivalent to fwscanf_s, with the variable argument
32031  list replaced by arg, which shall have been initialized by the va_start macro (and
32032  possibly subsequent va_arg calls). The vfwscanf_s function does not invoke the
32033  va_end macro.<sup><a href="#note421"><b>421)</b></a></sup>
32034 <p><b>Returns</b>
32035 <p><!--para 5 -->
32036  The vfwscanf_s function returns the value of the macro EOF if an input failure occurs
32037  before any conversion or if there is a runtime-constraint violation. Otherwise, the
32038  vfwscanf_s function returns the number of input items assigned, which can be fewer
32039  than provided for, or even zero, in the event of an early matching failure.
32040
32041 <p><b>Footnotes</b>
32042 <p><small><a name="note421" href="#note421">421)</a> As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
32043  value of arg after the return is indeterminate.
32044 </small>
32045
32046 <p><small><a href="#Contents">Contents</a></small>
32047 <h5><a name="K.3.9.1.8" href="#K.3.9.1.8">K.3.9.1.8 The vsnwprintf_s function</a></h5>
32048 <p><b>Synopsis</b>
32049 <p><!--para 1 -->
32050 <pre>
32051          #define __STDC_WANT_LIB_EXT1__ 1
32052          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
32053          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32054          int vsnwprintf_s(wchar_t * restrict s,
32055               rsize_t n,
32056               const wchar_t * restrict format,
32057               va_list arg);
32058 </pre>
32059  Runtime-constraints
32060 <p><!--para 2 -->
32061  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
32062  than RSIZE_MAX. The %n specifier<sup><a href="#note422"><b>422)</b></a></sup> (modified or not by flags, field width, or
32063  precision) shall not appear in the wide string pointed to by format. Any argument to
32064  vsnwprintf_s corresponding to a %s specifier shall not be a null pointer. No
32065  encoding error shall occur.
32066  
32067 <!--page 648 -->
32068 <p><!--para 3 -->
32069  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
32070  than zero and less than RSIZE_MAX, then the vsnwprintf_s function sets s[0] to
32071  the null wide character.
32072 <p><b>Description</b>
32073 <p><!--para 4 -->
32074  The vsnwprintf_s function is equivalent to the vswprintf function except for the
32075  explicit runtime-constraints listed above.
32076 <p><!--para 5 -->
32077  The vsnwprintf_s function, unlike vswprintf_s, will truncate the result to fit
32078  within the array pointed to by s.
32079 <p><b>Returns</b>
32080 <p><!--para 6 -->
32081  The vsnwprintf_s function returns the number of wide characters that would have
32082  been written had n been sufficiently large, not counting the terminating null character, or
32083  a negative value if a runtime-constraint violation occurred. Thus, the null-terminated
32084  output has been completely written if and only if the returned value is nonnegative and
32085  less than n.
32086
32087 <p><b>Footnotes</b>
32088 <p><small><a name="note422" href="#note422">422)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
32089  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
32090  example, if the entire format string was L"%%n".
32091 </small>
32092
32093 <p><small><a href="#Contents">Contents</a></small>
32094 <h5><a name="K.3.9.1.9" href="#K.3.9.1.9">K.3.9.1.9 The vswprintf_s function</a></h5>
32095 <p><b>Synopsis</b>
32096 <p><!--para 1 -->
32097 <pre>
32098          #define __STDC_WANT_LIB_EXT1__ 1
32099          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
32100          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32101          int vswprintf_s(wchar_t * restrict s,
32102               rsize_t n,
32103               const wchar_t * restrict format,
32104               va_list arg);
32105 </pre>
32106  Runtime-constraints
32107 <p><!--para 2 -->
32108  Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
32109  than RSIZE_MAX. The number of wide characters (including the trailing null) required
32110  for the result to be written to the array pointed to by s shall not be greater than n. The %n
32111  specifier<sup><a href="#note423"><b>423)</b></a></sup> (modified or not by flags, field width, or precision) shall not appear in the
32112  wide string pointed to by format. Any argument to vswprintf_s corresponding to a
32113  %s specifier shall not be a null pointer. No encoding error shall occur.
32114 <p><!--para 3 -->
32115  If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
32116  than zero and less than RSIZE_MAX, then the vswprintf_s function sets s[0] to the
32117  null wide character.
32118  
32119 <!--page 649 -->
32120 <p><b>Description</b>
32121 <p><!--para 4 -->
32122  The vswprintf_s function is equivalent to the vswprintf function except for the
32123  explicit runtime-constraints listed above.
32124 <p><!--para 5 -->
32125  The vswprintf_s function, unlike vsnwprintf_s, treats a result too big for the
32126  array pointed to by s as a runtime-constraint violation.
32127 <p><b>Returns</b>
32128 <p><!--para 6 -->
32129  If no runtime-constraint violation occurred, the vswprintf_s function returns the
32130  number of wide characters written in the array, not counting the terminating null wide
32131  character. If an encoding error occurred or if n or more wide characters are requested to
32132  be written, vswprintf_s returns a negative value. If any other runtime-constraint
32133  violation occurred, vswprintf_s returns zero.
32134
32135 <p><b>Footnotes</b>
32136 <p><small><a name="note423" href="#note423">423)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
32137  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
32138  example, if the entire format string was L"%%n".
32139 </small>
32140
32141 <p><small><a href="#Contents">Contents</a></small>
32142 <h5><a name="K.3.9.1.10" href="#K.3.9.1.10">K.3.9.1.10 The vswscanf_s function</a></h5>
32143 <p><b>Synopsis</b>
32144 <p><!--para 1 -->
32145 <pre>
32146          #define __STDC_WANT_LIB_EXT1__ 1
32147          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
32148          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32149          int vswscanf_s(const wchar_t * restrict s,
32150               const wchar_t * restrict format,
32151               va_list arg);
32152 </pre>
32153  Runtime-constraints
32154 <p><!--para 2 -->
32155  Neither s nor format shall be a null pointer. Any argument indirected though in order
32156  to store converted input shall not be a null pointer.
32157 <p><!--para 3 -->
32158  If there is a runtime-constraint violation, the vswscanf_s function does not attempt to
32159  perform further input, and it is unspecified to what extent vswscanf_s performed input
32160  before discovering the runtime-constraint violation.
32161 <p><b>Description</b>
32162 <p><!--para 4 -->
32163  The vswscanf_s function is equivalent to swscanf_s, with the variable argument
32164  list replaced by arg, which shall have been initialized by the va_start macro (and
32165  possibly subsequent va_arg calls). The vswscanf_s function does not invoke the
32166  va_end macro.<sup><a href="#note424"><b>424)</b></a></sup>
32167  
32168  
32169  
32170  
32171 <!--page 650 -->
32172 <p><b>Returns</b>
32173 <p><!--para 5 -->
32174  The vswscanf_s function returns the value of the macro EOF if an input failure occurs
32175  before any conversion or if there is a runtime-constraint violation. Otherwise, the
32176  vswscanf_s function returns the number of input items assigned, which can be fewer
32177  than provided for, or even zero, in the event of an early matching failure.
32178
32179 <p><b>Footnotes</b>
32180 <p><small><a name="note424" href="#note424">424)</a> As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
32181  value of arg after the return is indeterminate.
32182 </small>
32183
32184 <p><small><a href="#Contents">Contents</a></small>
32185 <h5><a name="K.3.9.1.11" href="#K.3.9.1.11">K.3.9.1.11 The vwprintf_s function</a></h5>
32186 <p><b>Synopsis</b>
32187 <p><!--para 1 -->
32188 <pre>
32189          #define __STDC_WANT_LIB_EXT1__ 1
32190          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
32191          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32192          int vwprintf_s(const wchar_t * restrict format,
32193               va_list arg);
32194 </pre>
32195  Runtime-constraints
32196 <p><!--para 2 -->
32197  format shall not be a null pointer. The %n specifier<sup><a href="#note425"><b>425)</b></a></sup> (modified or not by flags, field
32198  width, or precision) shall not appear in the wide string pointed to by format. Any
32199  argument to vwprintf_s corresponding to a %s specifier shall not be a null pointer.
32200 <p><!--para 3 -->
32201  If there is a runtime-constraint violation, the vwprintf_s function does not attempt to
32202  produce further output, and it is unspecified to what extent vwprintf_s produced
32203  output before discovering the runtime-constraint violation.
32204 <p><b>Description</b>
32205 <p><!--para 4 -->
32206  The vwprintf_s function is equivalent to the vwprintf function except for the
32207  explicit runtime-constraints listed above.
32208 <p><b>Returns</b>
32209 <p><!--para 5 -->
32210  The vwprintf_s function returns the number of wide characters transmitted, or a
32211  negative value if an output error, encoding error, or runtime-constraint violation occurred.
32212  
32213  
32214  
32215  
32216 <!--page 651 -->
32217
32218 <p><b>Footnotes</b>
32219 <p><small><a name="note425" href="#note425">425)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
32220  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
32221  example, if the entire format string was L"%%n".
32222 </small>
32223
32224 <p><small><a href="#Contents">Contents</a></small>
32225 <h5><a name="K.3.9.1.12" href="#K.3.9.1.12">K.3.9.1.12 The vwscanf_s function</a></h5>
32226 <p><b>Synopsis</b>
32227 <p><!--para 1 -->
32228 <pre>
32229          #define __STDC_WANT_LIB_EXT1__ 1
32230          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
32231          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32232          int vwscanf_s(const wchar_t * restrict format,
32233               va_list arg);
32234 </pre>
32235  Runtime-constraints
32236 <p><!--para 2 -->
32237  format shall not be a null pointer. Any argument indirected though in order to store
32238  converted input shall not be a null pointer.
32239 <p><!--para 3 -->
32240  If there is a runtime-constraint violation, the vwscanf_s function does not attempt to
32241  perform further input, and it is unspecified to what extent vwscanf_s performed input
32242  before discovering the runtime-constraint violation.
32243 <p><b>Description</b>
32244 <p><!--para 4 -->
32245  The vwscanf_s function is equivalent to wscanf_s, with the variable argument list
32246  replaced by arg, which shall have been initialized by the va_start macro (and
32247  possibly subsequent va_arg calls). The vwscanf_s function does not invoke the
32248  va_end macro.<sup><a href="#note426"><b>426)</b></a></sup>
32249 <p><b>Returns</b>
32250 <p><!--para 5 -->
32251  The vwscanf_s function returns the value of the macro EOF if an input failure occurs
32252  before any conversion or if there is a runtime-constraint violation. Otherwise, the
32253  vwscanf_s function returns the number of input items assigned, which can be fewer
32254  than provided for, or even zero, in the event of an early matching failure.
32255
32256 <p><b>Footnotes</b>
32257 <p><small><a name="note426" href="#note426">426)</a> As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
32258  value of arg after the return is indeterminate.
32259 </small>
32260
32261 <p><small><a href="#Contents">Contents</a></small>
32262 <h5><a name="K.3.9.1.13" href="#K.3.9.1.13">K.3.9.1.13 The wprintf_s function</a></h5>
32263 <p><b>Synopsis</b>
32264 <p><!--para 1 -->
32265 <pre>
32266          #define __STDC_WANT_LIB_EXT1__ 1
32267          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32268          int wprintf_s(const wchar_t * restrict format, ...);
32269 </pre>
32270  Runtime-constraints
32271 <p><!--para 2 -->
32272  format shall not be a null pointer. The %n specifier<sup><a href="#note427"><b>427)</b></a></sup> (modified or not by flags, field
32273  
32274 <!--page 652 -->
32275  width, or precision) shall not appear in the wide string pointed to by format. Any
32276  argument to wprintf_s corresponding to a %s specifier shall not be a null pointer.
32277 <p><!--para 3 -->
32278  If there is a runtime-constraint violation, the wprintf_s function does not attempt to
32279  produce further output, and it is unspecified to what extent wprintf_s produced output
32280  before discovering the runtime-constraint violation.
32281 <p><b>Description</b>
32282 <p><!--para 4 -->
32283  The wprintf_s function is equivalent to the wprintf function except for the explicit
32284  runtime-constraints listed above.
32285 <p><b>Returns</b>
32286 <p><!--para 5 -->
32287  The wprintf_s function returns the number of wide characters transmitted, or a
32288  negative value if an output error, encoding error, or runtime-constraint violation occurred.
32289
32290 <p><b>Footnotes</b>
32291 <p><small><a name="note427" href="#note427">427)</a> It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
32292  string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
32293  example, if the entire format string was L"%%n".
32294 </small>
32295
32296 <p><small><a href="#Contents">Contents</a></small>
32297 <h5><a name="K.3.9.1.14" href="#K.3.9.1.14">K.3.9.1.14 The wscanf_s function</a></h5>
32298 <p><b>Synopsis</b>
32299 <p><!--para 1 -->
32300 <pre>
32301         #define __STDC_WANT_LIB_EXT1__ 1
32302         #include <a href="#7.28">&lt;wchar.h&gt;</a>
32303         int wscanf_s(const wchar_t * restrict format, ...);
32304 </pre>
32305  Runtime-constraints
32306 <p><!--para 2 -->
32307  format shall not be a null pointer. Any argument indirected though in order to store
32308  converted input shall not be a null pointer.
32309 <p><!--para 3 -->
32310  If there is a runtime-constraint violation, the wscanf_s function does not attempt to
32311  perform further input, and it is unspecified to what extent wscanf_s performed input
32312  before discovering the runtime-constraint violation.
32313 <p><b>Description</b>
32314 <p><!--para 4 -->
32315  The wscanf_s function is equivalent to fwscanf_s with the argument stdin
32316  interposed before the arguments to wscanf_s.
32317 <p><b>Returns</b>
32318 <p><!--para 5 -->
32319  The wscanf_s function returns the value of the macro EOF if an input failure occurs
32320  before any conversion or if there is a runtime-constraint violation. Otherwise, the
32321  wscanf_s function returns the number of input items assigned, which can be fewer than
32322  provided for, or even zero, in the event of an early matching failure.
32323 <!--page 653 -->
32324
32325 <p><small><a href="#Contents">Contents</a></small>
32326 <h5><a name="K.3.9.2" href="#K.3.9.2">K.3.9.2 General wide string utilities</a></h5>
32327
32328 <p><small><a href="#Contents">Contents</a></small>
32329 <h5><a name="K.3.9.2.1" href="#K.3.9.2.1">K.3.9.2.1 Wide string copying functions</a></h5>
32330
32331 <p><small><a href="#Contents">Contents</a></small>
32332 <h5><a name="K.3.9.2.1.1" href="#K.3.9.2.1.1">K.3.9.2.1.1 The wcscpy_s function</a></h5>
32333 <p><b>Synopsis</b>
32334 <p><!--para 1 -->
32335 <pre>
32336          #define __STDC_WANT_LIB_EXT1__ 1
32337          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32338          errno_t wcscpy_s(wchar_t * restrict s1,
32339               rsize_t s1max,
32340               const wchar_t * restrict s2);
32341 </pre>
32342  Runtime-constraints
32343 <p><!--para 2 -->
32344  Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
32345  s1max shall not equal zero. s1max shall be greater than wcsnlen_s(s2, s1max).
32346  Copying shall not take place between objects that overlap.
32347 <p><!--para 3 -->
32348  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
32349  greater than zero and not greater than RSIZE_MAX, then wcscpy_s sets s1[0] to the
32350  null wide character.
32351 <p><b>Description</b>
32352 <p><!--para 4 -->
32353  The wcscpy_s function copies the wide string pointed to by s2 (including the
32354  terminating null wide character) into the array pointed to by s1.
32355 <p><!--para 5 -->
32356  All elements following the terminating null wide character (if any) written by
32357  wcscpy_s in the array of s1max wide characters pointed to by s1 take unspecified
32358  values when wcscpy_s returns.<sup><a href="#note428"><b>428)</b></a></sup>
32359 <p><b>Returns</b>
32360 <p><!--para 6 -->
32361  The wcscpy_s function returns zero<sup><a href="#note429"><b>429)</b></a></sup> if there was no runtime-constraint violation.
32362  Otherwise, a nonzero value is returned.
32363  
32364  
32365  
32366  
32367 <!--page 654 -->
32368
32369 <p><b>Footnotes</b>
32370 <p><small><a name="note428" href="#note428">428)</a> This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
32371  if any of those wide characters are null. Such an approach might write a wide character to every
32372  element of s1 before discovering that the first element should be set to the null wide character.
32373 </small>
32374 <p><small><a name="note429" href="#note429">429)</a> A zero return value implies that all of the requested wide characters from the string pointed to by s2
32375  fit within the array pointed to by s1 and that the result in s1 is null terminated.
32376 </small>
32377
32378 <p><small><a href="#Contents">Contents</a></small>
32379 <h5><a name="K.3.9.2.1.2" href="#K.3.9.2.1.2">K.3.9.2.1.2 The wcsncpy_s function</a></h5>
32380 <p><b>Synopsis</b>
32381 <p><!--para 7 -->
32382 <pre>
32383          #define __STDC_WANT_LIB_EXT1__ 1
32384          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32385          errno_t wcsncpy_s(wchar_t * restrict s1,
32386               rsize_t s1max,
32387               const wchar_t * restrict s2,
32388               rsize_t n);
32389 </pre>
32390  Runtime-constraints
32391 <p><!--para 8 -->
32392  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
32393  RSIZE_MAX. s1max shall not equal zero. If n is not less than s1max, then s1max
32394  shall be greater than wcsnlen_s(s2, s1max). Copying shall not take place between
32395  objects that overlap.
32396 <p><!--para 9 -->
32397  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
32398  greater than zero and not greater than RSIZE_MAX, then wcsncpy_s sets s1[0] to the
32399  null wide character.
32400 <p><b>Description</b>
32401 <p><!--para 10 -->
32402  The wcsncpy_s function copies not more than n successive wide characters (wide
32403  characters that follow a null wide character are not copied) from the array pointed to by
32404  s2 to the array pointed to by s1. If no null wide character was copied from s2, then
32405  s1[n] is set to a null wide character.
32406 <p><!--para 11 -->
32407  All elements following the terminating null wide character (if any) written by
32408  wcsncpy_s in the array of s1max wide characters pointed to by s1 take unspecified
32409  values when wcsncpy_s returns.<sup><a href="#note430"><b>430)</b></a></sup>
32410 <p><b>Returns</b>
32411 <p><!--para 12 -->
32412  The wcsncpy_s function returns zero<sup><a href="#note431"><b>431)</b></a></sup> if there was no runtime-constraint violation.
32413  Otherwise, a nonzero value is returned.
32414 <p><!--para 13 -->
32415  EXAMPLE 1 The wcsncpy_s function can be used to copy a wide string without the danger that the
32416  result will not be null terminated or that wide characters will be written past the end of the destination
32417  array.
32418  
32419  
32420  
32421  
32422 <!--page 655 -->
32423 <pre>
32424          #define __STDC_WANT_LIB_EXT1__ 1
32425          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32426          /* ... */
32427          wchar_t src1[100] = L"hello";
32428          wchar_t src2[7] = {L'g', L'o', L'o', L'd', L'b', L'y', L'e'};
32429          wchar_t dst1[6], dst2[5], dst3[5];
32430          int r1, r2, r3;
32431          r1 = wcsncpy_s(dst1, 6, src1, 100);
32432          r2 = wcsncpy_s(dst2, 5, src2, 7);
32433          r3 = wcsncpy_s(dst3, 5, src2, 4);
32434 </pre>
32435  The first call will assign to r1 the value zero and to dst1 the sequence of wide characters hello\0.
32436  The second call will assign to r2 a nonzero value and to dst2 the sequence of wide characters \0.
32437  The third call will assign to r3 the value zero and to dst3 the sequence of wide characters good\0.
32438  
32439
32440 <p><b>Footnotes</b>
32441 <p><small><a name="note430" href="#note430">430)</a> This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
32442  if any of those wide characters are null. Such an approach might write a wide character to every
32443  element of s1 before discovering that the first element should be set to the null wide character.
32444 </small>
32445 <p><small><a name="note431" href="#note431">431)</a> A zero return value implies that all of the requested wide characters from the string pointed to by s2
32446  fit within the array pointed to by s1 and that the result in s1 is null terminated.
32447 </small>
32448
32449 <p><small><a href="#Contents">Contents</a></small>
32450 <h5><a name="K.3.9.2.1.3" href="#K.3.9.2.1.3">K.3.9.2.1.3 The wmemcpy_s function</a></h5>
32451 <p><b>Synopsis</b>
32452 <p><!--para 14 -->
32453 <pre>
32454          #define __STDC_WANT_LIB_EXT1__ 1
32455          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32456          errno_t wmemcpy_s(wchar_t * restrict s1,
32457               rsize_t s1max,
32458               const wchar_t * restrict s2,
32459               rsize_t n);
32460 </pre>
32461  Runtime-constraints
32462 <p><!--para 15 -->
32463  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
32464  RSIZE_MAX. n shall not be greater than s1max. Copying shall not take place between
32465  objects that overlap.
32466 <p><!--para 16 -->
32467  If there is a runtime-constraint violation, the wmemcpy_s function stores zeros in the
32468  first s1max wide characters of the object pointed to by s1 if s1 is not a null pointer and
32469  s1max is not greater than RSIZE_MAX.
32470 <p><b>Description</b>
32471 <p><!--para 17 -->
32472  The wmemcpy_s function copies n successive wide characters from the object pointed
32473  to by s2 into the object pointed to by s1.
32474 <p><b>Returns</b>
32475 <p><!--para 18 -->
32476  The wmemcpy_s function returns zero if there was no runtime-constraint violation.
32477  Otherwise, a nonzero value is returned.
32478 <!--page 656 -->
32479
32480 <p><small><a href="#Contents">Contents</a></small>
32481 <h5><a name="K.3.9.2.1.4" href="#K.3.9.2.1.4">K.3.9.2.1.4 The wmemmove_s function</a></h5>
32482 <p><b>Synopsis</b>
32483 <p><!--para 19 -->
32484 <pre>
32485         #define __STDC_WANT_LIB_EXT1__ 1
32486         #include <a href="#7.28">&lt;wchar.h&gt;</a>
32487         errno_t wmemmove_s(wchar_t *s1, rsize_t s1max,
32488              const wchar_t *s2, rsize_t n);
32489 </pre>
32490  Runtime-constraints
32491 <p><!--para 20 -->
32492  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
32493  RSIZE_MAX. n shall not be greater than s1max.
32494 <p><!--para 21 -->
32495  If there is a runtime-constraint violation, the wmemmove_s function stores zeros in the
32496  first s1max wide characters of the object pointed to by s1 if s1 is not a null pointer and
32497  s1max is not greater than RSIZE_MAX.
32498 <p><b>Description</b>
32499 <p><!--para 22 -->
32500  The wmemmove_s function copies n successive wide characters from the object pointed
32501  to by s2 into the object pointed to by s1. This copying takes place as if the n wide
32502  characters from the object pointed to by s2 are first copied into a temporary array of n
32503  wide characters that does not overlap the objects pointed to by s1 or s2, and then the n
32504  wide characters from the temporary array are copied into the object pointed to by s1.
32505 <p><b>Returns</b>
32506 <p><!--para 23 -->
32507  The wmemmove_s function returns zero if there was no runtime-constraint violation.
32508  Otherwise, a nonzero value is returned.
32509
32510 <p><small><a href="#Contents">Contents</a></small>
32511 <h5><a name="K.3.9.2.2" href="#K.3.9.2.2">K.3.9.2.2 Wide string concatenation functions</a></h5>
32512
32513 <p><small><a href="#Contents">Contents</a></small>
32514 <h5><a name="K.3.9.2.2.1" href="#K.3.9.2.2.1">K.3.9.2.2.1 The wcscat_s function</a></h5>
32515 <p><b>Synopsis</b>
32516 <p><!--para 1 -->
32517 <pre>
32518         #define __STDC_WANT_LIB_EXT1__ 1
32519         #include <a href="#7.28">&lt;wchar.h&gt;</a>
32520         errno_t wcscat_s(wchar_t * restrict s1,
32521              rsize_t s1max,
32522              const wchar_t * restrict s2);
32523 </pre>
32524  Runtime-constraints
32525 <p><!--para 2 -->
32526  Let m denote the value s1max - wcsnlen_s(s1, s1max) upon entry to
32527  wcscat_s.
32528 <p><!--para 3 -->
32529  Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
32530  s1max shall not equal zero. m shall not equal zero.<sup><a href="#note432"><b>432)</b></a></sup> m shall be greater than
32531  wcsnlen_s(s2, m). Copying shall not take place between objects that overlap.
32532 <!--page 657 -->
32533 <p><!--para 4 -->
32534  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
32535  greater than zero and not greater than RSIZE_MAX, then wcscat_s sets s1[0] to the
32536  null wide character.
32537 <p><b>Description</b>
32538 <p><!--para 5 -->
32539  The wcscat_s function appends a copy of the wide string pointed to by s2 (including
32540  the terminating null wide character) to the end of the wide string pointed to by s1. The
32541  initial wide character from s2 overwrites the null wide character at the end of s1.
32542 <p><!--para 6 -->
32543  All elements following the terminating null wide character (if any) written by
32544  wcscat_s in the array of s1max wide characters pointed to by s1 take unspecified
32545  values when wcscat_s returns.<sup><a href="#note433"><b>433)</b></a></sup>
32546 <p><b>Returns</b>
32547 <p><!--para 7 -->
32548  The wcscat_s function returns zero<sup><a href="#note434"><b>434)</b></a></sup> if there was no runtime-constraint violation.
32549  Otherwise, a nonzero value is returned.
32550
32551 <p><b>Footnotes</b>
32552 <p><small><a name="note432" href="#note432">432)</a> Zero means that s1 was not null terminated upon entry to wcscat_s.
32553 </small>
32554 <p><small><a name="note433" href="#note433">433)</a> This allows an implementation to append wide characters from s2 to s1 while simultaneously
32555  checking if any of those wide characters are null. Such an approach might write a wide character to
32556  every element of s1 before discovering that the first element should be set to the null wide character.
32557 </small>
32558 <p><small><a name="note434" href="#note434">434)</a> A zero return value implies that all of the requested wide characters from the wide string pointed to by
32559  s2 were appended to the wide string pointed to by s1 and that the result in s1 is null terminated.
32560 </small>
32561
32562 <p><small><a href="#Contents">Contents</a></small>
32563 <h5><a name="K.3.9.2.2.2" href="#K.3.9.2.2.2">K.3.9.2.2.2 The wcsncat_s function</a></h5>
32564 <p><b>Synopsis</b>
32565 <p><!--para 8 -->
32566 <pre>
32567           #define __STDC_WANT_LIB_EXT1__ 1
32568           #include <a href="#7.28">&lt;wchar.h&gt;</a>
32569           errno_t wcsncat_s(wchar_t * restrict s1,
32570                rsize_t s1max,
32571                const wchar_t * restrict s2,
32572                rsize_t n);
32573 </pre>
32574  Runtime-constraints
32575 <p><!--para 9 -->
32576  Let m denote the value s1max - wcsnlen_s(s1, s1max) upon entry to
32577  wcsncat_s.
32578 <p><!--para 10 -->
32579  Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
32580  RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.<sup><a href="#note435"><b>435)</b></a></sup> If n is not less
32581  than m, then m shall be greater than wcsnlen_s(s2, m). Copying shall not take
32582  place between objects that overlap.
32583  
32584  
32585 <!--page 658 -->
32586 <p><!--para 11 -->
32587  If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
32588  greater than zero and not greater than RSIZE_MAX, then wcsncat_s sets s1[0] to the
32589  null wide character.
32590 <p><b>Description</b>
32591 <p><!--para 12 -->
32592  The wcsncat_s function appends not more than n successive wide characters (wide
32593  characters that follow a null wide character are not copied) from the array pointed to by
32594  s2 to the end of the wide string pointed to by s1. The initial wide character from s2
32595  overwrites the null wide character at the end of s1. If no null wide character was copied
32596  from s2, then s1[s1max-m+n] is set to a null wide character.
32597 <p><!--para 13 -->
32598  All elements following the terminating null wide character (if any) written by
32599  wcsncat_s in the array of s1max wide characters pointed to by s1 take unspecified
32600  values when wcsncat_s returns.<sup><a href="#note436"><b>436)</b></a></sup>
32601 <p><b>Returns</b>
32602 <p><!--para 14 -->
32603  The wcsncat_s function returns zero<sup><a href="#note437"><b>437)</b></a></sup> if there was no runtime-constraint violation.
32604  Otherwise, a nonzero value is returned.
32605 <p><!--para 15 -->
32606  EXAMPLE 1 The wcsncat_s function can be used to copy a wide string without the danger that the
32607  result will not be null terminated or that wide characters will be written past the end of the destination
32608  array.
32609 <pre>
32610           #define __STDC_WANT_LIB_EXT1__ 1
32611           #include <a href="#7.28">&lt;wchar.h&gt;</a>
32612           /* ... */
32613           wchar_t s1[100] = L"good";
32614           wchar_t s2[6] = L"hello";
32615           wchar_t s3[6] = L"hello";
32616           wchar_t s4[7] = L"abc";
32617           wchar_t s5[1000] = L"bye";
32618           int r1, r2, r3, r4;
32619           r1 = wcsncat_s(s1, 100, s5, 1000);
32620           r2 = wcsncat_s(s2, 6, L"", 1);
32621           r3 = wcsncat_s(s3, 6, L"X", 2);
32622           r4 = wcsncat_s(s4, 7, L"defghijklmn", 3);
32623 </pre>
32624  After the first call r1 will have the value zero and s1 will be the wide character sequence goodbye\0.
32625  After the second call r2 will have the value zero and s2 will be the wide character sequence hello\0.
32626  After the third call r3 will have a nonzero value and s3 will be the wide character sequence \0.
32627  After the fourth call r4 will have the value zero and s4 will be the wide character sequence abcdef\0.
32628  
32629  
32630  
32631  
32632 <!--page 659 -->
32633
32634 <p><b>Footnotes</b>
32635 <p><small><a name="note435" href="#note435">435)</a> Zero means that s1 was not null terminated upon entry to wcsncat_s.
32636 </small>
32637 <p><small><a name="note436" href="#note436">436)</a> This allows an implementation to append wide characters from s2 to s1 while simultaneously
32638  checking if any of those wide characters are null. Such an approach might write a wide character to
32639  every element of s1 before discovering that the first element should be set to the null wide character.
32640 </small>
32641 <p><small><a name="note437" href="#note437">437)</a> A zero return value implies that all of the requested wide characters from the wide string pointed to by
32642  s2 were appended to the wide string pointed to by s1 and that the result in s1 is null terminated.
32643 </small>
32644
32645 <p><small><a href="#Contents">Contents</a></small>
32646 <h5><a name="K.3.9.2.3" href="#K.3.9.2.3">K.3.9.2.3 Wide string search functions</a></h5>
32647
32648 <p><small><a href="#Contents">Contents</a></small>
32649 <h5><a name="K.3.9.2.3.1" href="#K.3.9.2.3.1">K.3.9.2.3.1 The wcstok_s function</a></h5>
32650 <p><b>Synopsis</b>
32651 <p><!--para 1 -->
32652 <pre>
32653          #define __STDC_WANT_LIB_EXT1__ 1
32654          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32655          wchar_t *wcstok_s(wchar_t * restrict s1,
32656               rsize_t * restrict s1max,
32657               const wchar_t * restrict s2,
32658               wchar_t ** restrict ptr);
32659 </pre>
32660  Runtime-constraints
32661 <p><!--para 2 -->
32662  None of s1max, s2, or ptr shall be a null pointer. If s1 is a null pointer, then *ptr
32663  shall not be a null pointer. The value of *s1max shall not be greater than RSIZE_MAX.
32664  The end of the token found shall occur within the first *s1max wide characters of s1 for
32665  the first call, and shall occur within the first *s1max wide characters of where searching
32666  resumes on subsequent calls.
32667 <p><!--para 3 -->
32668  If there is a runtime-constraint violation, the wcstok_s function does not indirect
32669  through the s1 or s2 pointers, and does not store a value in the object pointed to by ptr.
32670 <p><b>Description</b>
32671 <p><!--para 4 -->
32672  A sequence of calls to the wcstok_s function breaks the wide string pointed to by s1
32673  into a sequence of tokens, each of which is delimited by a wide character from the wide
32674  string pointed to by s2. The fourth argument points to a caller-provided wchar_t
32675  pointer into which the wcstok_s function stores information necessary for it to
32676  continue scanning the same wide string.
32677 <p><!--para 5 -->
32678  The first call in a sequence has a non-null first argument and s1max points to an object
32679  whose value is the number of elements in the wide character array pointed to by the first
32680  argument. The first call stores an initial value in the object pointed to by ptr and
32681  updates the value pointed to by s1max to reflect the number of elements that remain in
32682  relation to ptr. Subsequent calls in the sequence have a null first argument and the
32683  objects pointed to by s1max and ptr are required to have the values stored by the
32684  previous call in the sequence, which are then updated. The separator wide string pointed
32685  to by s2 may be different from call to call.
32686 <p><!--para 6 -->
32687  The first call in the sequence searches the wide string pointed to by s1 for the first wide
32688  character that is not contained in the current separator wide string pointed to by s2. If no
32689  such wide character is found, then there are no tokens in the wide string pointed to by s1
32690  and the wcstok_s function returns a null pointer. If such a wide character is found, it is
32691  the start of the first token.
32692 <!--page 660 -->
32693 <p><!--para 7 -->
32694  The wcstok_s function then searches from there for the first wide character in s1 that
32695  is contained in the current separator wide string. If no such wide character is found, the
32696  current token extends to the end of the wide string pointed to by s1, and subsequent
32697  searches in the same wide string for a token return a null pointer. If such a wide character
32698  is found, it is overwritten by a null wide character, which terminates the current token.
32699 <p><!--para 8 -->
32700  In all cases, the wcstok_s function stores sufficient information in the pointer pointed
32701  to by ptr so that subsequent calls, with a null pointer for s1 and the unmodified pointer
32702  value for ptr, shall start searching just past the element overwritten by a null wide
32703  character (if any).
32704 <p><b>Returns</b>
32705 <p><!--para 9 -->
32706  The wcstok_s function returns a pointer to the first wide character of a token, or a null
32707  pointer if there is no token or there is a runtime-constraint violation.
32708 <p><!--para 10 -->
32709  EXAMPLE
32710 <pre>
32711         #define __STDC_WANT_LIB_EXT1__ 1
32712         #include <a href="#7.28">&lt;wchar.h&gt;</a>
32713         static wchar_t str1[] = L"?a???b,,,#c";
32714         static wchar_t str2[] = L"\t \t";
32715         wchar_t *t, *ptr1, *ptr2;
32716         rsize_t max1 = wcslen(str1)+1;
32717         rsize_t max2 = wcslen(str2)+1;
32718         t   =   wcstok_s(str1,   &amp;max1,   "?", &amp;ptr1);        //   t   points to the token "a"
32719         t   =   wcstok_s(NULL,   &amp;max1,   ",", &amp;ptr1);        //   t   points to the token "??b"
32720         t   =   wcstok_s(str2,   &amp;max2,   " \t", &amp;ptr2);      //   t   is a null pointer
32721         t   =   wcstok_s(NULL,   &amp;max1,   "#,", &amp;ptr1);       //   t   points to the token "c"
32722         t   =   wcstok_s(NULL,   &amp;max1,   "?", &amp;ptr1);        //   t   is a null pointer
32723 </pre>
32724  
32725
32726 <p><small><a href="#Contents">Contents</a></small>
32727 <h5><a name="K.3.9.2.4" href="#K.3.9.2.4">K.3.9.2.4 Miscellaneous functions</a></h5>
32728
32729 <p><small><a href="#Contents">Contents</a></small>
32730 <h5><a name="K.3.9.2.4.1" href="#K.3.9.2.4.1">K.3.9.2.4.1 The wcsnlen_s function</a></h5>
32731 <p><b>Synopsis</b>
32732 <p><!--para 1 -->
32733 <pre>
32734         #define __STDC_WANT_LIB_EXT1__ 1
32735         #include <a href="#7.28">&lt;wchar.h&gt;</a>
32736         size_t wcsnlen_s(const wchar_t *s, size_t maxsize);
32737 </pre>
32738 <p><b>Description</b>
32739 <p><!--para 2 -->
32740  The wcsnlen_s function computes the length of the wide string pointed to by s.
32741 <p><b>Returns</b>
32742 <p><!--para 3 -->
32743  If s is a null pointer,<sup><a href="#note438"><b>438)</b></a></sup> then the wcsnlen_s function returns zero.
32744 <p><!--para 4 -->
32745  Otherwise, the wcsnlen_s function returns the number of wide characters that precede
32746  the terminating null wide character. If there is no null wide character in the first
32747  maxsize wide characters of s then wcsnlen_s returns maxsize. At most the first
32748 <!--page 661 -->
32749  maxsize wide characters of s shall be accessed by wcsnlen_s.
32750
32751 <p><b>Footnotes</b>
32752 <p><small><a name="note438" href="#note438">438)</a> Note that the wcsnlen_s function has no runtime-constraints. This lack of runtime-constraints
32753  along with the values returned for a null pointer or an unterminated wide string argument make
32754  wcsnlen_s useful in algorithms that gracefully handle such exceptional data.
32755 </small>
32756
32757 <p><small><a href="#Contents">Contents</a></small>
32758 <h5><a name="K.3.9.3" href="#K.3.9.3">K.3.9.3 Extended multibyte/wide character conversion utilities</a></h5>
32759
32760 <p><small><a href="#Contents">Contents</a></small>
32761 <h5><a name="K.3.9.3.1" href="#K.3.9.3.1">K.3.9.3.1 Restartable multibyte/wide character conversion functions</a></h5>
32762 <p><!--para 1 -->
32763  Unlike wcrtomb, wcrtomb_s does not permit the ps parameter (the pointer to the
32764  conversion state) to be a null pointer.
32765
32766 <p><small><a href="#Contents">Contents</a></small>
32767 <h5><a name="K.3.9.3.1.1" href="#K.3.9.3.1.1">K.3.9.3.1.1 The wcrtomb_s function</a></h5>
32768 <p><b>Synopsis</b>
32769 <p><!--para 2 -->
32770 <pre>
32771          #include <a href="#7.28">&lt;wchar.h&gt;</a>
32772          errno_t wcrtomb_s(size_t * restrict retval,
32773               char * restrict s, rsize_t smax,
32774               wchar_t wc, mbstate_t * restrict ps);
32775 </pre>
32776  Runtime-constraints
32777 <p><!--para 3 -->
32778  Neither retval nor ps shall be a null pointer. If s is not a null pointer, then smax
32779  shall not equal zero and shall not be greater than RSIZE_MAX. If s is not a null pointer,
32780  then smax shall be not be less than the number of bytes to be stored in the array pointed
32781  to by s. If s is a null pointer, then smax shall equal zero.
32782 <p><!--para 4 -->
32783  If there is a runtime-constraint violation, then wcrtomb_s does the following. If s is
32784  not a null pointer and smax is greater than zero and not greater than RSIZE_MAX, then
32785  wcrtomb_s sets s[0] to the null character. If retval is not a null pointer, then
32786  wcrtomb_s sets *retval to (size_t)(-1).
32787 <p><b>Description</b>
32788 <p><!--para 5 -->
32789  If s is a null pointer, the wcrtomb_s function is equivalent to the call
32790 <pre>
32791                  wcrtomb_s(&amp;retval, buf, sizeof buf, L'\0', ps)
32792 </pre>
32793  where retval and buf are internal variables of the appropriate types, and the size of
32794  buf is greater than MB_CUR_MAX.
32795 <p><!--para 6 -->
32796  If s is not a null pointer, the wcrtomb_s function determines the number of bytes
32797  needed to represent the multibyte character that corresponds to the wide character given
32798  by wc (including any shift sequences), and stores the multibyte character representation
32799  in the array whose first element is pointed to by s. At most MB_CUR_MAX bytes are
32800  stored. If wc is a null wide character, a null byte is stored, preceded by any shift
32801  sequence needed to restore the initial shift state; the resulting state described is the initial
32802  conversion state.
32803  
32804 <!--page 662 -->
32805 <p><!--para 7 -->
32806  If wc does not correspond to a valid multibyte character, an encoding error occurs: the
32807  wcrtomb_s function stores the value (size_t)(-1) into *retval and the
32808  conversion state is unspecified. Otherwise, the wcrtomb_s function stores into
32809  *retval the number of bytes (including any shift sequences) stored in the array pointed
32810  to by s.
32811 <p><b>Returns</b>
32812 <p><!--para 8 -->
32813  The wcrtomb_s function returns zero if no runtime-constraint violation and no
32814  encoding error occurred. Otherwise, a nonzero value is returned.
32815
32816 <p><small><a href="#Contents">Contents</a></small>
32817 <h5><a name="K.3.9.3.2" href="#K.3.9.3.2">K.3.9.3.2 Restartable multibyte/wide string conversion functions</a></h5>
32818 <p><!--para 1 -->
32819  Unlike mbsrtowcs and wcsrtombs, mbsrtowcs_s and wcsrtombs_s do not
32820  permit the ps parameter (the pointer to the conversion state) to be a null pointer.
32821
32822 <p><small><a href="#Contents">Contents</a></small>
32823 <h5><a name="K.3.9.3.2.1" href="#K.3.9.3.2.1">K.3.9.3.2.1 The mbsrtowcs_s function</a></h5>
32824 <p><b>Synopsis</b>
32825 <p><!--para 2 -->
32826 <pre>
32827         #include <a href="#7.28">&lt;wchar.h&gt;</a>
32828         errno_t mbsrtowcs_s(size_t * restrict retval,
32829              wchar_t * restrict dst, rsize_t dstmax,
32830              const char ** restrict src, rsize_t len,
32831              mbstate_t * restrict ps);
32832 </pre>
32833  Runtime-constraints
32834 <p><!--para 3 -->
32835  None of retval, src, *src, or ps shall be null pointers. If dst is not a null pointer,
32836  then neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null
32837  pointer, then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall
32838  not equal zero. If dst is not a null pointer and len is not less than dstmax, then a null
32839  character shall occur within the first dstmax multibyte characters of the array pointed to
32840  by *src.
32841 <p><!--para 4 -->
32842  If there is a runtime-constraint violation, then mbsrtowcs_s does the following. If
32843  retval is not a null pointer, then mbsrtowcs_s sets *retval to (size_t)(-1).
32844  If dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
32845  then mbsrtowcs_s sets dst[0] to the null wide character.
32846 <p><b>Description</b>
32847 <p><!--para 5 -->
32848  The mbsrtowcs_s function converts a sequence of multibyte characters that begins in
32849  the conversion state described by the object pointed to by ps, from the array indirectly
32850  pointed to by src into a sequence of corresponding wide characters. If dst is not a null
32851  pointer, the converted characters are stored into the array pointed to by dst. Conversion
32852  continues up to and including a terminating null character, which is also stored.
32853  Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
32854  not form a valid multibyte character, or (if dst is not a null pointer) when len wide
32855 <!--page 663 -->
32856  characters have been stored into the array pointed to by dst.<sup><a href="#note439"><b>439)</b></a></sup> If dst is not a null
32857  pointer and no null wide character was stored into the array pointed to by dst, then
32858  dst[len] is set to the null wide character. Each conversion takes place as if by a call
32859  to the mbrtowc function.
32860 <p><!--para 6 -->
32861  If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
32862  pointer (if conversion stopped due to reaching a terminating null character) or the address
32863  just past the last multibyte character converted (if any). If conversion stopped due to
32864  reaching a terminating null character and if dst is not a null pointer, the resulting state
32865  described is the initial conversion state.
32866 <p><!--para 7 -->
32867  Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
32868  sequence of bytes that do not form a valid multibyte character, an encoding error occurs:
32869  the mbsrtowcs_s function stores the value (size_t)(-1) into *retval and the
32870  conversion state is unspecified. Otherwise, the mbsrtowcs_s function stores into
32871  *retval the number of multibyte characters successfully converted, not including the
32872  terminating null character (if any).
32873 <p><!--para 8 -->
32874  All elements following the terminating null wide character (if any) written by
32875  mbsrtowcs_s in the array of dstmax wide characters pointed to by dst take
32876  unspecified values when mbsrtowcs_s returns.<sup><a href="#note440"><b>440)</b></a></sup>
32877 <p><!--para 9 -->
32878  If copying takes place between objects that overlap, the objects take on unspecified
32879  values.
32880 <p><b>Returns</b>
32881 <p><!--para 10 -->
32882  The mbsrtowcs_s function returns zero if no runtime-constraint violation and no
32883  encoding error occurred. Otherwise, a nonzero value is returned.
32884
32885 <p><b>Footnotes</b>
32886 <p><small><a name="note439" href="#note439">439)</a> Thus, the value of len is ignored if dst is a null pointer.
32887 </small>
32888 <p><small><a name="note440" href="#note440">440)</a> This allows an implementation to attempt converting the multibyte string before discovering a
32889  terminating null character did not occur where required.
32890 </small>
32891
32892 <p><small><a href="#Contents">Contents</a></small>
32893 <h5><a name="K.3.9.3.2.2" href="#K.3.9.3.2.2">K.3.9.3.2.2 The wcsrtombs_s function</a></h5>
32894 <p><b>Synopsis</b>
32895 <p><!--para 11 -->
32896 <pre>
32897           #include <a href="#7.28">&lt;wchar.h&gt;</a>
32898           errno_t wcsrtombs_s(size_t * restrict retval,
32899                char * restrict dst, rsize_t dstmax,
32900                const wchar_t ** restrict src, rsize_t len,
32901                mbstate_t * restrict ps);
32902 </pre>
32903  
32904  
32905  
32906  
32907 <!--page 664 -->
32908  Runtime-constraints
32909 <p><!--para 12 -->
32910  None of retval, src, *src, or ps shall be null pointers. If dst is not a null pointer,
32911  then neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null
32912  pointer, then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall
32913  not equal zero. If dst is not a null pointer and len is not less than dstmax, then the
32914  conversion shall have been stopped (see below) because a terminating null wide character
32915  was reached or because an encoding error occurred.
32916 <p><!--para 13 -->
32917  If there is a runtime-constraint violation, then wcsrtombs_s does the following. If
32918  retval is not a null pointer, then wcsrtombs_s sets *retval to (size_t)(-1).
32919  If dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
32920  then wcsrtombs_s sets dst[0] to the null character.
32921 <p><b>Description</b>
32922 <p><!--para 14 -->
32923  The wcsrtombs_s function converts a sequence of wide characters from the array
32924  indirectly pointed to by src into a sequence of corresponding multibyte characters that
32925  begins in the conversion state described by the object pointed to by ps. If dst is not a
32926  null pointer, the converted characters are then stored into the array pointed to by dst.
32927  Conversion continues up to and including a terminating null wide character, which is also
32928  stored. Conversion stops earlier in two cases:
32929 <ul>
32930 <li>  when a wide character is reached that does not correspond to a valid multibyte
32931  character;
32932 <li>  (if dst is not a null pointer) when the next multibyte character would exceed the
32933    limit of n total bytes to be stored into the array pointed to by dst. If the wide
32934    character being converted is the null wide character, then n is the lesser of len or
32935    dstmax. Otherwise, n is the lesser of len or dstmax-1.
32936 </ul>
32937  If the conversion stops without converting a null wide character and dst is not a null
32938  pointer, then a null character is stored into the array pointed to by dst immediately
32939  following any multibyte characters already stored. Each conversion takes place as if by a
32940  call to the wcrtomb function.<sup><a href="#note441"><b>441)</b></a></sup>
32941 <p><!--para 15 -->
32942  If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
32943  pointer (if conversion stopped due to reaching a terminating null wide character) or the
32944  address just past the last wide character converted (if any). If conversion stopped due to
32945  reaching a terminating null wide character, the resulting state described is the initial
32946  conversion state.
32947  
32948  
32949 <!--page 665 -->
32950 <p><!--para 16 -->
32951  Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
32952  wide character that does not correspond to a valid multibyte character, an encoding error
32953  occurs: the wcsrtombs_s function stores the value (size_t)(-1) into *retval
32954  and the conversion state is unspecified. Otherwise, the wcsrtombs_s function stores
32955  into *retval the number of bytes in the resulting multibyte character sequence, not
32956  including the terminating null character (if any).
32957 <p><!--para 17 -->
32958  All elements following the terminating null character (if any) written by wcsrtombs_s
32959  in the array of dstmax elements pointed to by dst take unspecified values when
32960  wcsrtombs_s returns.<sup><a href="#note442"><b>442)</b></a></sup>
32961 <p><!--para 18 -->
32962  If copying takes place between objects that overlap, the objects take on unspecified
32963  values.
32964 <p><b>Returns</b>
32965 <p><!--para 19 -->
32966  The wcsrtombs_s function returns zero if no runtime-constraint violation and no
32967  encoding error occurred. Otherwise, a nonzero value is returned.
32968  
32969  
32970  
32971  
32972 <!--page 666 -->
32973
32974 <p><b>Footnotes</b>
32975 <p><small><a name="note441" href="#note441">441)</a> If conversion stops because a terminating null wide character has been reached, the bytes stored
32976  include those necessary to reach the initial shift state immediately before the null byte. However, if
32977  the conversion stops before a terminating null wide character has been reached, the result will be null
32978  terminated, but might not end in the initial shift state.
32979 </small>
32980 <p><small><a name="note442" href="#note442">442)</a> When len is not less than dstmax, the implementation might fill the array before discovering a
32981  runtime-constraint violation.
32982 </small>
32983
32984 <p><small><a href="#Contents">Contents</a></small>
32985 <h2><a name="L" href="#L">Annex L</a></h2>
32986 <pre>
32987                                             (normative)
32988                                          Analyzability
32989 </pre>
32990
32991 <p><small><a href="#Contents">Contents</a></small>
32992 <h3><a name="L.1" href="#L.1">L.1 Scope</a></h3>
32993 <p><!--para 1 -->
32994  This annex specifies optional behavior that can aid in the analyzability of C programs.
32995 <p><!--para 2 -->
32996  An implementation that defines __STDC_ANALYZABLE__ shall conform to the
32997  specifications in this annex.<sup><a href="#note443"><b>443)</b></a></sup>
32998
32999 <p><b>Footnotes</b>
33000 <p><small><a name="note443" href="#note443">443)</a> Implementations that do not define __STDC_ANALYZABLE__ are not required to conform to these
33001  specifications.
33002 </small>
33003
33004 <p><small><a href="#Contents">Contents</a></small>
33005 <h3><a name="L.2" href="#L.2">L.2 Definitions</a></h3>
33006
33007 <p><small><a href="#Contents">Contents</a></small>
33008 <h4><a name="L.2.1" href="#L.2.1">L.2.1</a></h4>
33009 <p><!--para 1 -->
33010  out-of-bounds store
33011  an (attempted) access (<a href="#3.1">3.1</a>) that, at run time, for a given computational state, would
33012  modify (or, for an object declared volatile, fetch) one or more bytes that lie outside
33013  the bounds permitted by this Standard.
33014
33015 <p><small><a href="#Contents">Contents</a></small>
33016 <h4><a name="L.2.2" href="#L.2.2">L.2.2</a></h4>
33017 <p><!--para 1 -->
33018  bounded undefined behavior
33019  undefined behavior (<a href="#3.4.3">3.4.3</a>) that does not perform an out-of-bounds store.
33020 <p><!--para 2 -->
33021  NOTE 1    The behavior might perform a trap.
33022  
33023 <p><!--para 3 -->
33024  NOTE 2    Any values produced or stored might be indeterminate values.
33025  
33026
33027 <p><small><a href="#Contents">Contents</a></small>
33028 <h4><a name="L.2.3" href="#L.2.3">L.2.3</a></h4>
33029 <p><!--para 1 -->
33030  critical undefined behavior
33031  undefined behavior that is not bounded undefined behavior.
33032 <p><!--para 2 -->
33033  NOTE     The behavior might perform an out-of-bounds store or perform a trap.
33034  
33035  
33036  
33037  
33038 <!--page 667 -->
33039
33040 <p><small><a href="#Contents">Contents</a></small>
33041 <h3><a name="L.3" href="#L.3">L.3 Requirements</a></h3>
33042 <p><!--para 1 -->
33043  If the program performs a trap (<a href="#3.19.5">3.19.5</a>), the implementation is permitted to invoke a
33044  runtime-constraint handler. Any such semantics are implementation-defined.
33045 <p><!--para 2 -->
33046  All undefined behavior shall be limited to bounded undefined behavior, except for the
33047  following which are permitted to result in critical undefined behavior:
33048 <ul>
33049 <li>  An object is referred to outside of its lifetime (<a href="#6.2.4">6.2.4</a>).
33050 <li>  An lvalue does not designate an object when evaluated (<a href="#6.3.2.1">6.3.2.1</a>).
33051 <li>  A pointer is used to call a function whose type is not compatible with the referenced
33052  type (<a href="#6.3.2.3">6.3.2.3</a>).
33053 <li>  The operand of the unary * operator has an invalid value (<a href="#6.5.3.2">6.5.3.2</a>).
33054 <li>  Addition or subtraction of a pointer into, or just beyond, an array object and an
33055  integer type produces a result that points just beyond the array object and is used as
33056  the operand of a unary * operator that is evaluated (<a href="#6.5.6">6.5.6</a>).
33057 <li>  An argument to a library function has an invalid value or a type not expected by a
33058  function with variable number of arguments (<a href="#7.1.4">7.1.4</a>).
33059 <li>  The value of a pointer that refers to space deallocated by a call to the free or realloc
33060  function is used (<a href="#7.22.3">7.22.3</a>).
33061 <li>  A string or wide string utility function is instructed to access an array beyond the end
33062  of an object (<a href="#7.23.1">7.23.1</a>, <a href="#7.28.4">7.28.4</a>).
33063 <!--page 668 -->
33064 </ul>
33065
33066 <p><small><a href="#Contents">Contents</a></small>
33067 <h2><a name="Bibliography" href="#Bibliography">Bibliography</a></h2>
33068 <ol>
33069 <li>  ''The C Reference Manual'' by Dennis M. Ritchie, a version of which was
33070  published in The C Programming Language by Brian W. Kernighan and Dennis
33071  M. Ritchie, Prentice-Hall, Inc., (1978). Copyright owned by AT&amp;T.
33072 <li>  1984 /usr/group Standard by the /usr/group Standards Committee, Santa Clara,
33073  California, USA, November 1984.
33074 <li>  ANSI X3/TR-1-82 (1982), American National Dictionary for Information
33075  Processing Systems, Information Processing Systems Technical Report.
33076 <li>  ANSI/IEEE 754-1985, American National Standard for Binary Floating-Point
33077  Arithmetic.
33078 <li>  ANSI/IEEE 854-1988, American National Standard for Radix-Independent
33079  Floating-Point Arithmetic.
33080 <li>  IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems,
33081  second edition (previously designated IEC 559:1989).
33082 <li>  ISO 31-11:1992, Quantities and units -- Part 11: Mathematical signs and
33083  symbols for use in the physical sciences and technology.
33084 <li>  ISO/IEC 646:1991, Information technology -- ISO 7-bit coded character set for
33085  information interchange.
33086 <li>  ISO/IEC 2382-1:1993, Information technology -- Vocabulary -- Part 1:
33087  Fundamental terms.
33088 <li>  ISO 4217:1995, Codes for the representation of currencies and funds.
33089 <li>  ISO 8601:1988, Data elements and interchange formats -- Information
33090  interchange -- Representation of dates and times.
33091 <li>  ISO/IEC 9899:1990, Programming languages -- C.
33092 <li>  ISO/IEC 9899/COR1:1994, Technical Corrigendum 1.
33093 <li>  ISO/IEC 9899/COR2:1996, Technical Corrigendum 2.
33094 <li>  ISO/IEC 9899/AMD1:1995, Amendment 1 to ISO/IEC 9899:1990 C Integrity.
33095 <li>  ISO/IEC 9899:1999, Programming languages -- C.
33096 <li>  ISO/IEC 9899:1999/Cor.1:2001, Technical Corrigendum 1.
33097 <li>  ISO/IEC 9899:1999/Cor.2:2004, Technical Corrigendum 2.
33098 <li>  ISO/IEC 9899:1999/Cor.3:2007, Technical Corrigendum 3.
33099 <!--page 669 -->
33100 <li>  ISO/IEC 9945-2:1993, Information technology -- Portable Operating System
33101  Interface (POSIX) -- Part 2: Shell and Utilities.
33102 <li>  ISO/IEC TR 10176:1998, Information technology -- Guidelines for the
33103  preparation of programming language standards.
33104 <li>  ISO/IEC 10646-1:1993, Information technology -- Universal Multiple-Octet
33105  Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane.
33106 <li>  ISO/IEC 10646-1/COR1:1996,         Technical       Corrigendum       1      to
33107  ISO/IEC 10646-1:1993.
33108 <li>  ISO/IEC 10646-1/COR2:1998,         Technical       Corrigendum       2      to
33109  ISO/IEC 10646-1:1993.
33110 <li>  ISO/IEC 10646-1/AMD1:1996, Amendment 1 to ISO/IEC 10646-1:1993
33111  Transformation Format for 16 planes of group 00 (UTF-16).
33112 <li>  ISO/IEC 10646-1/AMD2:1996, Amendment 2 to ISO/IEC 10646-1:1993 UCS
33113  Transformation Format 8 (UTF-8).
33114 <li>  ISO/IEC 10646-1/AMD3:1996, Amendment 3 to ISO/IEC 10646-1:1993.
33115 <li>  ISO/IEC 10646-1/AMD4:1996, Amendment 4 to ISO/IEC 10646-1:1993.
33116 <li>  ISO/IEC 10646-1/AMD5:1998, Amendment 5 to ISO/IEC 10646-1:1993 Hangul
33117  syllables.
33118 <li>  ISO/IEC 10646-1/AMD6:1997,       Amendment     6   to   ISO/IEC 10646-1:1993
33119  Tibetan.
33120 <li>  ISO/IEC 10646-1/AMD7:1997, Amendment 7 to ISO/IEC 10646-1:1993 33
33121  additional characters.
33122 <li>  ISO/IEC 10646-1/AMD8:1997, Amendment 8 to ISO/IEC 10646-1:1993.
33123 <li>  ISO/IEC 10646-1/AMD9:1997,       Amendment     9   to   ISO/IEC 10646-1:1993
33124  Identifiers for characters.
33125 <li>  ISO/IEC 10646-1/AMD10:1998, Amendment 10 to ISO/IEC 10646-1:1993
33126  Ethiopic.
33127 <li>  ISO/IEC 10646-1/AMD11:1998, Amendment 11 to ISO/IEC 10646-1:1993
33128  Unified Canadian Aboriginal Syllabics.
33129 <li>  ISO/IEC 10646-1/AMD12:1998, Amendment 12 to ISO/IEC 10646-1:1993
33130  Cherokee.
33131 <li>  ISO/IEC 10967-1:1994, Information technology -- Language independent
33132  arithmetic -- Part 1: Integer and floating point arithmetic.
33133 <!--page 670 -->
33134 <li>  ISO/IEC TR 19769:2004, Information technology -- Programming languages,
33135  their environments and system software interfaces -- Extensions for the
33136  programming language C to support new character data types.
33137 <li>  ISO/IEC TR 24731-1:2007, Information technology -- Programming languages,
33138  their environments and system software interfaces -- Extensions to the C library
33139  -- Part 1: Bounds-checking interfaces.
33140 <!--page 671 -->
33141 </ol>
33142
33143 <p><small><a href="#Contents">Contents</a></small>
33144 <h2><a name="Index" href="#Index">Index</a></h2>
33145 <pre>
33146  [^ x ^], <a href="#3.20">3.20</a>                                                    , (comma operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.17">6.5.17</a>
33147                                                                 , (comma punctuator), <a href="#6.5.2">6.5.2</a>, <a href="#6.7">6.7</a>, <a href="#6.7.2.1">6.7.2.1</a>, <a href="#6.7.2.2">6.7.2.2</a>,
33148  [_ x _], <a href="#3.21">3.21</a>                                                         <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>
33149  ! (logical negation operator), <a href="#6.5.3.3">6.5.3.3</a>                         - (subtraction operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>
33150  != (inequality operator), <a href="#6.5.9">6.5.9</a>                                - (unary minus operator), <a href="#6.5.3.3">6.5.3.3</a>, <a href="#F.3">F.3</a>
33151  # operator, <a href="#6.10.3.2">6.10.3.2</a>                                           -- (postfix decrement operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>
33152  # preprocessing directive, <a href="#6.10.7">6.10.7</a>                              -- (prefix decrement operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.1">6.5.3.1</a>
33153  # punctuator, <a href="#6.10">6.10</a>                                             -= (subtraction assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
33154  ## operator, <a href="#6.10.3.3">6.10.3.3</a>                                          -&gt; (structure/union pointer operator), <a href="#6.5.2.3">6.5.2.3</a>
33155  #define preprocessing directive, <a href="#6.10.3">6.10.3</a>                        . (structure/union member operator), <a href="#6.3.2.1">6.3.2.1</a>,
33156  #elif preprocessing directive, <a href="#6.10.1">6.10.1</a>                               <a href="#6.5.2.3">6.5.2.3</a>
33157  #else preprocessing directive, <a href="#6.10.1">6.10.1</a>                          . punctuator, <a href="#6.7.9">6.7.9</a>
33158  #endif preprocessing directive, <a href="#6.10.1">6.10.1</a>                         ... (ellipsis punctuator), <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.10.3">6.10.3</a>
33159  #error preprocessing directive, <a href="#4">4</a>, <a href="#6.10.5">6.10.5</a>                      / (division operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>, <a href="#G.5.1">G.5.1</a>
33160  #if preprocessing directive, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>,             /* */ (comment delimiters), <a href="#6.4.9">6.4.9</a>
33161       <a href="#6.10.1">6.10.1</a>, <a href="#7.1.4">7.1.4</a>                                             // (comment delimiter), <a href="#6.4.9">6.4.9</a>
33162  #ifdef preprocessing directive, <a href="#6.10.1">6.10.1</a>                         /= (division assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
33163  #ifndef preprocessing directive, <a href="#6.10.1">6.10.1</a>                        : (colon punctuator), <a href="#6.7.2.1">6.7.2.1</a>
33164  #include preprocessing directive, <a href="#5.1.1.2">5.1.1.2</a>,                     :&gt; (alternative spelling of ]), <a href="#6.4.6">6.4.6</a>
33165       <a href="#6.10.2">6.10.2</a>                                                    ; (semicolon punctuator), <a href="#6.7">6.7</a>, <a href="#6.7.2.1">6.7.2.1</a>, <a href="#6.8.3">6.8.3</a>,
33166  #line preprocessing directive, <a href="#6.10.4">6.10.4</a>                               <a href="#6.8.5">6.8.5</a>, <a href="#6.8.6">6.8.6</a>
33167  #pragma preprocessing directive, <a href="#6.10.6">6.10.6</a>                        &lt; (less-than operator), <a href="#6.5.8">6.5.8</a>
33168  #undef preprocessing directive, <a href="#6.10.3.5">6.10.3.5</a>, <a href="#7.1.3">7.1.3</a>,               &lt;% (alternative spelling of {), <a href="#6.4.6">6.4.6</a>
33169       <a href="#7.1.4">7.1.4</a>                                                     &lt;: (alternative spelling of [), <a href="#6.4.6">6.4.6</a>
33170  % (remainder operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>                         &lt;&lt; (left-shift operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
33171  %: (alternative spelling of #), <a href="#6.4.6">6.4.6</a>                          &lt;&lt;= (left-shift assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
33172  %:%: (alternative spelling of ##), <a href="#6.4.6">6.4.6</a>                       &lt;= (less-than-or-equal-to operator), <a href="#6.5.8">6.5.8</a>
33173  %= (remainder assignment operator), <a href="#6.5.16.2">6.5.16.2</a>                   <a href="#7.2">&lt;assert.h&gt;</a> header, <a href="#7.2">7.2</a>
33174  %&gt; (alternative spelling of }), <a href="#6.4.6">6.4.6</a>                          <a href="#7.3">&lt;complex.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>,
33175  &amp; (address operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                              <a href="#7.3">7.3</a>, <a href="#7.24">7.24</a>, <a href="#7.30.1">7.30.1</a>, <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>
33176  &amp; (bitwise AND operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.10">6.5.10</a>                      <a href="#7.4">&lt;ctype.h&gt;</a> header, <a href="#7.4">7.4</a>, <a href="#7.30.2">7.30.2</a>
33177  &amp;&amp; (logical AND operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.13">6.5.13</a>                     <a href="#7.5">&lt;errno.h&gt;</a> header, <a href="#7.5">7.5</a>, <a href="#7.30.3">7.30.3</a>, <a href="#K.3.2">K.3.2</a>
33178  &amp;= (bitwise AND assignment operator), <a href="#6.5.16.2">6.5.16.2</a>                 <a href="#7.6">&lt;fenv.h&gt;</a> header, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F">F</a>,
33179  ' ' (space character), <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>, <a href="#7.4.1.3">7.4.1.3</a>,                <a href="#H">H</a>
33180       <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>                                      <a href="#7.7">&lt;float.h&gt;</a> header, <a href="#4">4</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.7">7.7</a>, <a href="#7.22.1.3">7.22.1.3</a>,
33181  ( ) (cast operator), <a href="#6.5.4">6.5.4</a>                                          <a href="#7.28.4.1.1">7.28.4.1.1</a>
33182  ( ) (function-call operator), <a href="#6.5.2.2">6.5.2.2</a>                          <a href="#7.8">&lt;inttypes.h&gt;</a> header, <a href="#7.8">7.8</a>, <a href="#7.30.4">7.30.4</a>
33183  ( ) (parentheses punctuator), <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.5</a>            <a href="#7.9">&lt;iso646.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.9">7.9</a>
33184  ( ){ } (compound-literal operator), <a href="#6.5.2.5">6.5.2.5</a>                    <a href="#7.10">&lt;limits.h&gt;</a> header, <a href="#4">4</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.2.5">6.2.5</a>, <a href="#7.10">7.10</a>
33185  * (asterisk punctuator), <a href="#6.7.6.1">6.7.6.1</a>, <a href="#6.7.6.2">6.7.6.2</a>                      <a href="#7.11">&lt;locale.h&gt;</a> header, <a href="#7.11">7.11</a>, <a href="#7.30.5">7.30.5</a>
33186  * (indirection operator), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                     <a href="#7.12">&lt;math.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#7.12">7.12</a>, <a href="#7.24">7.24</a>, <a href="#F">F</a>,
33187  * (multiplication operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>,                   <a href="#F.10">F.10</a>, <a href="#J.5.17">J.5.17</a>
33188       <a href="#G.5.1">G.5.1</a>                                                     <a href="#7.13">&lt;setjmp.h&gt;</a> header, <a href="#7.13">7.13</a>
33189  *= (multiplication assignment operator), <a href="#6.5.16.2">6.5.16.2</a>              <a href="#7.14">&lt;signal.h&gt;</a> header, <a href="#7.14">7.14</a>, <a href="#7.30.6">7.30.6</a>
33190  + (addition operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>,              <a href="#7.15">&lt;stdalign.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.15">7.15</a>
33191       <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>                                         <a href="#7.16">&lt;stdarg.h&gt;</a> header, <a href="#4">4</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#7.16">7.16</a>
33192  + (unary plus operator), <a href="#6.5.3.3">6.5.3.3</a>                               <a href="#7.17">&lt;stdatomic.h&gt;</a> header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.17">7.17</a>
33193  ++ (postfix increment operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>               <a href="#7.18">&lt;stdbool.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.18">7.18</a>, <a href="#7.30.7">7.30.7</a>, <a href="#H">H</a>
33194  ++ (prefix increment operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.1">6.5.3.1</a>                <a href="#7.19">&lt;stddef.h&gt;</a> header, <a href="#4">4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.4.4.4">6.4.4.4</a>,
33195  += (addition assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
33196 <!--page 672 -->
33197       <a href="#6.4.5">6.4.5</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#6.5.6">6.5.6</a>, <a href="#7.19">7.19</a>, <a href="#K.3.3">K.3.3</a>                      \x hexadecimal digits (hexadecimal-character
33198  <a href="#7.20">&lt;stdint.h&gt;</a> header, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.10.1">6.10.1</a>, <a href="#7.8">7.8</a>,                       escape sequence), <a href="#6.4.4.4">6.4.4.4</a>
33199       <a href="#7.20">7.20</a>, <a href="#7.30.8">7.30.8</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>                              ^ (bitwise exclusive OR operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>
33200  <a href="#7.21">&lt;stdio.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21">7.21</a>, <a href="#7.30.9">7.30.9</a>, <a href="#F">F</a>,                ^= (bitwise exclusive OR assignment operator),
33201       <a href="#K.3.5">K.3.5</a>                                                        <a href="#6.5.16.2">6.5.16.2</a>
33202  <a href="#7.22">&lt;stdlib.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.22">7.22</a>, <a href="#7.30.10">7.30.10</a>, <a href="#F">F</a>,              __alignas_is_defined macro, <a href="#7.15">7.15</a>
33203       <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6">K.3.6</a>                                          __bool_true_false_are_defined
33204  <a href="#7.23">&lt;string.h&gt;</a> header, <a href="#7.23">7.23</a>, <a href="#7.30.11">7.30.11</a>, <a href="#K.3.7">K.3.7</a>                           macro, <a href="#7.18">7.18</a>
33205  <a href="#7.24">&lt;tgmath.h&gt;</a> header, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                 __cplusplus macro, <a href="#6.10.8">6.10.8</a>
33206  <a href="#7.25">&lt;threads.h&gt;</a> header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.25">7.25</a>                    __DATE__ macro, <a href="#6.10.8.1">6.10.8.1</a>
33207  <a href="#7.26">&lt;time.h&gt;</a> header, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>                                 __FILE__ macro, <a href="#6.10.8.1">6.10.8.1</a>, <a href="#7.2.1.1">7.2.1.1</a>
33208  <a href="#7.27">&lt;uchar.h&gt;</a> header, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27">7.27</a>                       __func__ identifier, <a href="#6.4.2.2">6.4.2.2</a>, <a href="#7.2.1.1">7.2.1.1</a>
33209  <a href="#7.28">&lt;wchar.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28">7.28</a>,                   __LINE__ macro, <a href="#6.10.8.1">6.10.8.1</a>, <a href="#7.2.1.1">7.2.1.1</a>
33210       <a href="#7.30.12">7.30.12</a>, <a href="#F">F</a>, <a href="#K.3.9">K.3.9</a>                                       __STDC_, <a href="#6.11.9">6.11.9</a>
33211  <a href="#7.29">&lt;wctype.h&gt;</a> header, <a href="#7.29">7.29</a>, <a href="#7.30.13">7.30.13</a>                             __STDC__ macro, <a href="#6.10.8.1">6.10.8.1</a>
33212  = (equal-sign punctuator), <a href="#6.7">6.7</a>, <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.9">6.7.9</a>               __STDC_ANALYZABLE__ macro, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#L.1">L.1</a>
33213  = (simple assignment operator), <a href="#6.5.16.1">6.5.16.1</a>                     __STDC_HOSTED__ macro, <a href="#6.10.8.1">6.10.8.1</a>
33214  == (equality operator), <a href="#6.5.9">6.5.9</a>                                __STDC_IEC_559__ macro, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#F.1">F.1</a>
33215  &gt; (greater-than operator), <a href="#6.5.8">6.5.8</a>                             __STDC_IEC_559_COMPLEX__ macro,
33216  &gt;= (greater-than-or-equal-to operator), <a href="#6.5.8">6.5.8</a>                     <a href="#6.10.8.3">6.10.8.3</a>, <a href="#G.1">G.1</a>
33217  &gt;&gt; (right-shift operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>                    __STDC_ISO_10646__ macro, <a href="#6.10.8.2">6.10.8.2</a>
33218  &gt;&gt;= (right-shift assignment operator), <a href="#6.5.16.2">6.5.16.2</a>              __STDC_LIB_EXT1__ macro, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#K.2">K.2</a>
33219  ? : (conditional operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.15">6.5.15</a>                  __STDC_MB_MIGHT_NEQ_WC__ macro,
33220  ?? (trigraph sequences), <a href="#5.2.1.1">5.2.1.1</a>                                  <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.19">7.19</a>
33221  [ ] (array subscript operator), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>             __STDC_NO_COMPLEX__ macro, <a href="#6.10.8.3">6.10.8.3</a>,
33222  [ ] (brackets punctuator), <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.9">6.7.9</a>                         <a href="#7.3.1">7.3.1</a>
33223  \ (backslash character), <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>             __STDC_NO_THREADS__ macro, <a href="#6.10.8.3">6.10.8.3</a>,
33224  \ (escape character), <a href="#6.4.4.4">6.4.4.4</a>                                     <a href="#7.17.1">7.17.1</a>, <a href="#7.25.1">7.25.1</a>
33225  \" (double-quote escape sequence), <a href="#6.4.4.4">6.4.4.4</a>,                  __STDC_NO_VLA__ macro, <a href="#6.10.8.3">6.10.8.3</a>
33226       <a href="#6.4.5">6.4.5</a>, <a href="#6.10.9">6.10.9</a>                                           __STDC_UTF_16__ macro, <a href="#6.10.8.2">6.10.8.2</a>
33227  \\ (backslash escape sequence), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.10.9">6.10.9</a>              __STDC_UTF_32__ macro, <a href="#6.10.8.2">6.10.8.2</a>
33228  \' (single-quote escape sequence), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>            __STDC_VERSION__ macro, <a href="#6.10.8.1">6.10.8.1</a>
33229  \0 (null character), <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>                   __STDC_WANT_LIB_EXT1__ macro, <a href="#K.3.1.1">K.3.1.1</a>
33230    padding of binary stream, <a href="#7.21.2">7.21.2</a>                           __TIME__ macro, <a href="#6.10.8.1">6.10.8.1</a>
33231  \? (question-mark escape sequence), <a href="#6.4.4.4">6.4.4.4</a>                  __VA_ARGS__ identifier, <a href="#6.10.3">6.10.3</a>, <a href="#6.10.3.1">6.10.3.1</a>
33232  \a (alert escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                   _Alignas, <a href="#6.7.5">6.7.5</a>
33233  \b (backspace escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>               _Atomic type qualifier, <a href="#6.7.3">6.7.3</a>
33234  \f (form-feed escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,              _Bool type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.2">6.3.1.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.17.1">7.17.1</a>,
33235       <a href="#7.4.1.10">7.4.1.10</a>                                                     <a href="#F.4">F.4</a>
33236  \n (new-line escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,               _Bool type conversions, <a href="#6.3.1.2">6.3.1.2</a>
33237       <a href="#7.4.1.10">7.4.1.10</a>                                                _Complex types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.3.1">7.3.1</a>, <a href="#G">G</a>
33238  \octal digits (octal-character escape sequence),             _Complex_I macro, <a href="#7.3.1">7.3.1</a>
33239       <a href="#6.4.4.4">6.4.4.4</a>                                                 _Exit function, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>
33240  \r (carriage-return escape sequence), <a href="#5.2.2">5.2.2</a>,                 _Imaginary keyword, <a href="#G.2">G.2</a>
33241       <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.10">7.4.1.10</a>                                       _Imaginary types, <a href="#7.3.1">7.3.1</a>, <a href="#G">G</a>
33242  \t (horizontal-tab escape sequence), <a href="#5.2.2">5.2.2</a>,                  _Imaginary_I macro, <a href="#7.3.1">7.3.1</a>, <a href="#G.6">G.6</a>
33243       <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.3">7.4.1.3</a>, <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>                  _IOFBF macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.5">7.21.5.5</a>, <a href="#7.21.5.6">7.21.5.6</a>
33244  \U (universal character names), <a href="#6.4.3">6.4.3</a>                        _IOLBF macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.6">7.21.5.6</a>
33245  \u (universal character names), <a href="#6.4.3">6.4.3</a>                        _IONBF macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.5">7.21.5.5</a>, <a href="#7.21.5.6">7.21.5.6</a>
33246  \v (vertical-tab escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,           _Noreturn, <a href="#6.7.4">6.7.4</a>
33247       <a href="#7.4.1.10">7.4.1.10</a>                                                _Pragma operator, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.9">6.10.9</a>
33248 <!--page 673 -->
33249  _Static_assert, <a href="#6.7.10">6.7.10</a>, <a href="#7.2">7.2</a>                                  allocated storage, order and contiguity, <a href="#7.22.3">7.22.3</a>
33250  _Thread_local storage-class specifier, <a href="#6.2.4">6.2.4</a>,                 and macro, <a href="#7.9">7.9</a>
33251       <a href="#6.7.1">6.7.1</a>                                                   AND operators
33252  { } (braces punctuator), <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>,               bitwise (&amp;), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.10">6.5.10</a>
33253       <a href="#6.8.2">6.8.2</a>                                                      bitwise assignment (&amp;=), <a href="#6.5.16.2">6.5.16.2</a>
33254  { } (compound-literal operator), <a href="#6.5.2.5">6.5.2.5</a>                        logical (&amp;&amp;), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.13">6.5.13</a>
33255  | (bitwise inclusive OR operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>           and_eq macro, <a href="#7.9">7.9</a>
33256  |= (bitwise inclusive OR assignment operator),               anonymous structure, <a href="#6.7.2.1">6.7.2.1</a>
33257       <a href="#6.5.16.2">6.5.16.2</a>                                                anonymous union, <a href="#6.7.2.1">6.7.2.1</a>
33258  || (logical OR operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.14">6.5.14</a>                    ANSI/IEEE 754, <a href="#F.1">F.1</a>
33259  ~ (bitwise complement operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>            ANSI/IEEE 854, <a href="#F.1">F.1</a>
33260                                                               argc (main function parameter), <a href="#5.1.2.2.1">5.1.2.2.1</a>
33261  abort function, <a href="#7.2.1.1">7.2.1.1</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.21.3">7.21.3</a>,                   argument, <a href="#3.3">3.3</a>
33262        <a href="#7.22.4.1">7.22.4.1</a>, <a href="#7.25.3.6">7.25.3.6</a>, <a href="#K.3.6.1.2">K.3.6.1.2</a>                             array, <a href="#6.9.1">6.9.1</a>
33263  abort_handler_s function, <a href="#K.3.6.1.2">K.3.6.1.2</a>                             default promotions, <a href="#6.5.2.2">6.5.2.2</a>
33264  abs function, <a href="#7.22.6.1">7.22.6.1</a>                                          function, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>
33265  absolute-value functions                                        macro, substitution, <a href="#6.10.3.1">6.10.3.1</a>
33266     complex, <a href="#7.3.8">7.3.8</a>, <a href="#G.6.4">G.6.4</a>                                     argument, complex, <a href="#7.3.9.1">7.3.9.1</a>
33267     integer, <a href="#7.8.2.1">7.8.2.1</a>, <a href="#7.22.6.1">7.22.6.1</a>                                argv (main function parameter), <a href="#5.1.2.2.1">5.1.2.2.1</a>
33268     real, <a href="#7.12.7">7.12.7</a>, <a href="#F.10.4">F.10.4</a>                                      arithmetic constant expression, <a href="#6.6">6.6</a>
33269  abstract declarator, <a href="#6.7.7">6.7.7</a>                                   arithmetic conversions, usual, see usual arithmetic
33270  abstract machine, <a href="#5.1.2.3">5.1.2.3</a>                                          conversions
33271  access, <a href="#3.1">3.1</a>, <a href="#6.7.3">6.7.3</a>, <a href="#L.2.1">L.2.1</a>                                    arithmetic operators
33272  accuracy, see floating-point accuracy                            additive, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>, <a href="#G.5.2">G.5.2</a>
33273  acos functions, <a href="#7.12.4.1">7.12.4.1</a>, <a href="#F.10.1.1">F.10.1.1</a>                              bitwise, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>, <a href="#6.5.10">6.5.10</a>, <a href="#6.5.11">6.5.11</a>, <a href="#6.5.12">6.5.12</a>
33274  acos type-generic macro, <a href="#7.24">7.24</a>                                   increment and decrement, <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.3.1">6.5.3.1</a>
33275  acosh functions, <a href="#7.12.5.1">7.12.5.1</a>, <a href="#F.10.2.1">F.10.2.1</a>                             multiplicative, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
33276  acosh type-generic macro, <a href="#7.24">7.24</a>                                  shift, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
33277  acquire fence, <a href="#7.17.4">7.17.4</a>                                           unary, <a href="#6.5.3.3">6.5.3.3</a>
33278  acquire operation, <a href="#5.1.2.4">5.1.2.4</a>                                   arithmetic types, <a href="#6.2.5">6.2.5</a>
33279  active position, <a href="#5.2.2">5.2.2</a>                                       arithmetic, pointer, <a href="#6.5.6">6.5.6</a>
33280  actual argument, <a href="#3.3">3.3</a>                                         array
33281  actual parameter (deprecated), <a href="#3.3">3.3</a>                              argument, <a href="#6.9.1">6.9.1</a>
33282  addition assignment operator (+=), <a href="#6.5.16.2">6.5.16.2</a>                     declarator, <a href="#6.7.6.2">6.7.6.2</a>
33283  addition operator (+), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>,               initialization, <a href="#6.7.9">6.7.9</a>
33284        <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>                                         multidimensional, <a href="#6.5.2.1">6.5.2.1</a>
33285  additive expressions, <a href="#6.5.6">6.5.6</a>, <a href="#G.5.2">G.5.2</a>                              parameter, <a href="#6.9.1">6.9.1</a>
33286  address constant, <a href="#6.6">6.6</a>                                           storage order, <a href="#6.5.2.1">6.5.2.1</a>
33287  address operator (&amp;), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                          subscript operator ([ ]), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>
33288  address-free, <a href="#7.17.5">7.17.5</a>                                            subscripting, <a href="#6.5.2.1">6.5.2.1</a>
33289  aggregate initialization, <a href="#6.7.9">6.7.9</a>                                 type, <a href="#6.2.5">6.2.5</a>
33290  aggregate types, <a href="#6.2.5">6.2.5</a>                                          type conversion, <a href="#6.3.2.1">6.3.2.1</a>
33291  alert escape sequence (\a), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                      variable length, <a href="#6.7.6">6.7.6</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>
33292  aliasing, <a href="#6.5">6.5</a>                                                arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
33293  alignas macro, <a href="#7.15">7.15</a>                                          as-if rule, <a href="#5.1.2.3">5.1.2.3</a>
33294  aligned_alloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.1">7.22.3.1</a>                     ASCII code set, <a href="#5.2.1.1">5.2.1.1</a>
33295  alignment, <a href="#3.2">3.2</a>, <a href="#6.2.8">6.2.8</a>, <a href="#7.22.3.1">7.22.3.1</a>                              asctime function, <a href="#7.26.3.1">7.26.3.1</a>
33296     pointer, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.2.3">6.3.2.3</a>                                   asctime_s function, <a href="#K.3.8.2">K.3.8.2</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>
33297     structure/union member, <a href="#6.7.2.1">6.7.2.1</a>                           asin functions, <a href="#7.12.4.2">7.12.4.2</a>, <a href="#F.10.1.2">F.10.1.2</a>
33298  alignment specifier, <a href="#6.7.5">6.7.5</a>                                    asin type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
33299  alignof operator, <a href="#6.5.3">6.5.3</a>, <a href="#6.5.3.4">6.5.3.4</a>                             asinh functions, <a href="#7.12.5.2">7.12.5.2</a>, <a href="#F.10.2.2">F.10.2.2</a>
33300 <!--page 674 -->
33301  asinh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                           atomic_is_lock_free generic function,
33302  asm keyword, <a href="#J.5.10">J.5.10</a>                                               <a href="#7.17.5.1">7.17.5.1</a>
33303  assert macro, <a href="#7.2.1.1">7.2.1.1</a>                                         ATOMIC_LLONG_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
33304  assert.h header, <a href="#7.2">7.2</a>                                          atomic_load generic functions, <a href="#7.17.7.2">7.17.7.2</a>
33305  assignment                                                    ATOMIC_LONG_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
33306     compound, <a href="#6.5.16.2">6.5.16.2</a>                                         ATOMIC_SHORT_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
33307     conversion, <a href="#6.5.16.1">6.5.16.1</a>                                       atomic_signal_fence function, <a href="#7.17.4.2">7.17.4.2</a>
33308     expression, <a href="#6.5.16">6.5.16</a>                                         atomic_store generic functions, <a href="#7.17.7.1">7.17.7.1</a>
33309     operators, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.16">6.5.16</a>                                 atomic_thread_fence function, <a href="#7.17.4.1">7.17.4.1</a>
33310     simple, <a href="#6.5.16.1">6.5.16.1</a>                                           ATOMIC_VAR_INIT macro, <a href="#7.17.2.1">7.17.2.1</a>
33311  associativity of operators, <a href="#6.5">6.5</a>                               ATOMIC_WCHAR_T_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
33312  asterisk punctuator (*), <a href="#6.7.6.1">6.7.6.1</a>, <a href="#6.7.6.2">6.7.6.2</a>                     atomics header, <a href="#7.17">7.17</a>
33313  at_quick_exit function, <a href="#7.22.4.2">7.22.4.2</a>, <a href="#7.22.4.3">7.22.4.3</a>,                   auto storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.9">6.9</a>
33314       <a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>                             automatic storage duration, <a href="#5.2.3">5.2.3</a>, <a href="#6.2.4">6.2.4</a>
33315  atan functions, <a href="#7.12.4.3">7.12.4.3</a>, <a href="#F.10.1.3">F.10.1.3</a>
33316  atan type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                            backslash character (\), <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>
33317  atan2 functions, <a href="#7.12.4.4">7.12.4.4</a>, <a href="#F.10.1.4">F.10.1.4</a>                           backslash escape sequence (\\), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.10.9">6.10.9</a>
33318  atan2 type-generic macro, <a href="#7.24">7.24</a>                                backspace escape sequence (\b), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>
33319  atanh functions, <a href="#7.12.5.3">7.12.5.3</a>, <a href="#F.10.2.3">F.10.2.3</a>                           basic character set, <a href="#3.6">3.6</a>, <a href="#3.7.2">3.7.2</a>, <a href="#5.2.1">5.2.1</a>
33320  atanh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                           basic types, <a href="#6.2.5">6.2.5</a>
33321  atexit function, <a href="#7.22.4.2">7.22.4.2</a>, <a href="#7.22.4.3">7.22.4.3</a>, <a href="#7.22.4.4">7.22.4.4</a>,                behavior, <a href="#3.4">3.4</a>
33322       <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>, <a href="#J.5.13">J.5.13</a>                               binary streams, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>,
33323  atof function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.1">7.22.1.1</a>                                     <a href="#7.21.9.4">7.21.9.4</a>
33324  atoi function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.2">7.22.1.2</a>                               bit, <a href="#3.5">3.5</a>
33325  atol function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.2">7.22.1.2</a>                                  high order, <a href="#3.6">3.6</a>
33326  atoll function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.2">7.22.1.2</a>                                 low order, <a href="#3.6">3.6</a>
33327  atomic lock-free macros, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.5">7.17.5</a>                       bit-field, <a href="#6.7.2.1">6.7.2.1</a>
33328  atomic operations, <a href="#5.1.2.4">5.1.2.4</a>                                    bitand macro, <a href="#7.9">7.9</a>
33329  atomic types, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.2.5">6.2.5</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.3.2.1">6.3.2.1</a>,               bitor macro, <a href="#7.9">7.9</a>
33330       <a href="#6.5.2.3">6.5.2.3</a>, <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.16.2">6.5.16.2</a>, <a href="#6.7.2.4">6.7.2.4</a>, <a href="#6.10.8.3">6.10.8.3</a>,           bitwise operators, <a href="#6.5">6.5</a>
33331       <a href="#7.17.6">7.17.6</a>                                                      AND, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.10">6.5.10</a>
33332  atomic_address type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.6">7.17.6</a>                              AND assignment (&amp;=), <a href="#6.5.16.2">6.5.16.2</a>
33333  ATOMIC_ADDRESS_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>                           complement (~), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>
33334  atomic_bool type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.6">7.17.6</a>                                 exclusive OR, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>
33335  ATOMIC_CHAR16_T_LOCK_FREE macro,                                 exclusive OR assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>
33336       <a href="#7.17.1">7.17.1</a>                                                      inclusive OR, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>
33337  ATOMIC_CHAR32_T_LOCK_FREE macro,                                 inclusive OR assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>
33338       <a href="#7.17.1">7.17.1</a>                                                      shift, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
33339  ATOMIC_CHAR_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>                           blank character, <a href="#7.4.1.3">7.4.1.3</a>
33340  atomic_compare_exchange generic                               block, <a href="#6.8">6.8</a>, <a href="#6.8.2">6.8.2</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.5</a>
33341       functions, <a href="#7.17.7.4">7.17.7.4</a>                                      block scope, <a href="#6.2.1">6.2.1</a>
33342  atomic_exchange generic functions, <a href="#7.17.7.3">7.17.7.3</a>                   block structure, <a href="#6.2.1">6.2.1</a>
33343  atomic_fetch and modify generic functions,                    bold type convention, <a href="#6.1">6.1</a>
33344       <a href="#7.17.7.5">7.17.7.5</a>                                                 bool macro, <a href="#7.18">7.18</a>
33345  atomic_flag type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.8">7.17.8</a>                              boolean type, <a href="#6.3.1.2">6.3.1.2</a>
33346  atomic_flag_clear functions, <a href="#7.17.8.2">7.17.8.2</a>                         boolean type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.2">6.3.1.2</a>
33347  ATOMIC_FLAG_INIT macro, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.8">7.17.8</a>                        bounded undefined behavior, <a href="#L.2.2">L.2.2</a>
33348  atomic_flag_test_and_set functions,                           braces punctuator ({ }), <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>,
33349       <a href="#7.17.8.1">7.17.8.1</a>                                                       <a href="#6.8.2">6.8.2</a>
33350  atomic_init generic function, <a href="#7.17.2.2">7.17.2.2</a>                        brackets operator ([ ]), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>
33351  ATOMIC_INT_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>                            brackets punctuator ([ ]), <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.9">6.7.9</a>
33352 <!--page 675 -->
33353  branch cuts, <a href="#7.3.3">7.3.3</a>                                                type-generic macro for, <a href="#7.24">7.24</a>
33354  break statement, <a href="#6.8.6.3">6.8.6.3</a>                                       ccosh functions, <a href="#7.3.6.4">7.3.6.4</a>, <a href="#G.6.2.4">G.6.2.4</a>
33355  broken-down time, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.3">7.26.3</a>,                       type-generic macro for, <a href="#7.24">7.24</a>
33356       <a href="#7.26.3.1">7.26.3.1</a>, <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#7.26.3.5">7.26.3.5</a>,                   ceil functions, <a href="#7.12.9.1">7.12.9.1</a>, <a href="#F.10.6.1">F.10.6.1</a>
33357       <a href="#K.3.8.2.1">K.3.8.2.1</a>, <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                           ceil type-generic macro, <a href="#7.24">7.24</a>
33358  bsearch function, <a href="#7.22.5">7.22.5</a>, <a href="#7.22.5.1">7.22.5.1</a>                             cerf function, <a href="#7.30.1">7.30.1</a>
33359  bsearch_s function, <a href="#K.3.6.3">K.3.6.3</a>, <a href="#K.3.6.3.1">K.3.6.3.1</a>                         cerfc function, <a href="#7.30.1">7.30.1</a>
33360  btowc function, <a href="#7.28.6.1.1">7.28.6.1.1</a>                                     cexp functions, <a href="#7.3.7.1">7.3.7.1</a>, <a href="#G.6.3.1">G.6.3.1</a>
33361  BUFSIZ macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.5.5">7.21.5.5</a>                            type-generic macro for, <a href="#7.24">7.24</a>
33362  byte, <a href="#3.6">3.6</a>, <a href="#6.5.3.4">6.5.3.4</a>                                             cexp2 function, <a href="#7.30.1">7.30.1</a>
33363  byte input/output functions, <a href="#7.21.1">7.21.1</a>                            cexpm1 function, <a href="#7.30.1">7.30.1</a>
33364  byte-oriented stream, <a href="#7.21.2">7.21.2</a>                                   char type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>,
33365                                                                       <a href="#K.3.9.1.2">K.3.9.1.2</a>
33366  <a href="#C">C</a> program, <a href="#5.1.1.1">5.1.1.1</a>                                             char type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>,
33367  c16rtomb function, <a href="#7.27.1.2">7.27.1.2</a>                                          <a href="#6.3.1.8">6.3.1.8</a>
33368  c32rtomb function, <a href="#7.27.1.4">7.27.1.4</a>                                    char16_t type, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.27">7.27</a>
33369  cabs functions, <a href="#7.3.8.1">7.3.8.1</a>, <a href="#G.6">G.6</a>                                   char32_t type, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.27">7.27</a>
33370    type-generic macro for, <a href="#7.24">7.24</a>                                 CHAR_BIT macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.7.2.1">6.7.2.1</a>
33371  cacos functions, <a href="#7.3.5.1">7.3.5.1</a>, <a href="#G.6.1.1">G.6.1.1</a>                              CHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
33372    type-generic macro for, <a href="#7.24">7.24</a>                                 CHAR_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
33373  cacosh functions, <a href="#7.3.6.1">7.3.6.1</a>, <a href="#G.6.2.1">G.6.2.1</a>                             character, <a href="#3.7">3.7</a>, <a href="#3.7.1">3.7.1</a>
33374    type-generic macro for, <a href="#7.24">7.24</a>                                 character array initialization, <a href="#6.7.9">6.7.9</a>
33375  calendar time, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.2">7.26.2.2</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.2.4">7.26.2.4</a>,           character case mapping functions, <a href="#7.4.2">7.4.2</a>
33376        <a href="#7.26.3.2">7.26.3.2</a>, <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>,                    wide character, <a href="#7.29.3.1">7.29.3.1</a>
33377        <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                                           extensible, <a href="#7.29.3.2">7.29.3.2</a>
33378  call by value, <a href="#6.5.2.2">6.5.2.2</a>                                         character classification functions, <a href="#7.4.1">7.4.1</a>
33379  call_once function, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.2.1">7.25.2.1</a>                              wide character, <a href="#7.29.2.1">7.29.2.1</a>
33380  calloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.2">7.22.3.2</a>                                    extensible, <a href="#7.29.2.2">7.29.2.2</a>
33381  carg functions, <a href="#7.3.9.1">7.3.9.1</a>, <a href="#G.6">G.6</a>                                   character constant, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>
33382  carg type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                             character display semantics, <a href="#5.2.2">5.2.2</a>
33383  carriage-return escape sequence (\r), <a href="#5.2.2">5.2.2</a>,                   character handling header, <a href="#7.4">7.4</a>, <a href="#7.11.1.1">7.11.1.1</a>
33384        <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.10">7.4.1.10</a>                                        character input/output functions, <a href="#7.21.7">7.21.7</a>, <a href="#K.3.5.4">K.3.5.4</a>
33385  carries a dependency, <a href="#5.1.2.4">5.1.2.4</a>                                     wide character, <a href="#7.28.3">7.28.3</a>
33386  case label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>                                     character sets, <a href="#5.2.1">5.2.1</a>
33387  case mapping functions                                         character string literal, see string literal
33388    character, <a href="#7.4.2">7.4.2</a>                                             character type conversion, <a href="#6.3.1.1">6.3.1.1</a>
33389    wide character, <a href="#7.29.3.1">7.29.3.1</a>                                     character types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.9">6.7.9</a>
33390        extensible, <a href="#7.29.3.2">7.29.3.2</a>                                     cimag functions, <a href="#7.3.9.2">7.3.9.2</a>, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#G.6">G.6</a>
33391  casin functions, <a href="#7.3.5.2">7.3.5.2</a>, <a href="#G.6">G.6</a>                                  cimag type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
33392    type-generic macro for, <a href="#7.24">7.24</a>                                 cis function, <a href="#G.6">G.6</a>
33393  casinh functions, <a href="#7.3.6.2">7.3.6.2</a>, <a href="#G.6.2.2">G.6.2.2</a>                             classification functions
33394    type-generic macro for, <a href="#7.24">7.24</a>                                    character, <a href="#7.4.1">7.4.1</a>
33395  cast expression, <a href="#6.5.4">6.5.4</a>                                            floating-point, <a href="#7.12.3">7.12.3</a>
33396  cast operator (( )), <a href="#6.5.4">6.5.4</a>                                        wide character, <a href="#7.29.2.1">7.29.2.1</a>
33397  catan functions, <a href="#7.3.5.3">7.3.5.3</a>, <a href="#G.6">G.6</a>                                        extensible, <a href="#7.29.2.2">7.29.2.2</a>
33398    type-generic macro for, <a href="#7.24">7.24</a>                                 clearerr function, <a href="#7.21.10.1">7.21.10.1</a>
33399  catanh functions, <a href="#7.3.6.3">7.3.6.3</a>, <a href="#G.6.2.3">G.6.2.3</a>                             clgamma function, <a href="#7.30.1">7.30.1</a>
33400    type-generic macro for, <a href="#7.24">7.24</a>                                 clock function, <a href="#7.26.2.1">7.26.2.1</a>
33401  cbrt functions, <a href="#7.12.7.1">7.12.7.1</a>, <a href="#F.10.4.1">F.10.4.1</a>                             clock_t type, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.1">7.26.2.1</a>
33402  cbrt type-generic macro, <a href="#7.24">7.24</a>                                  CLOCKS_PER_SEC macro, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.1">7.26.2.1</a>
33403  ccos functions, <a href="#7.3.5.4">7.3.5.4</a>, <a href="#G.6">G.6</a>                                   clog functions, <a href="#7.3.7.2">7.3.7.2</a>, <a href="#G.6.3.2">G.6.3.2</a>
33404 <!--page 676 -->
33405    type-generic macro for, <a href="#7.24">7.24</a>                                  string, <a href="#7.23.3">7.23.3</a>, <a href="#K.3.7.2">K.3.7.2</a>
33406  clog10 function, <a href="#7.30.1">7.30.1</a>                                         wide string, <a href="#7.28.4.3">7.28.4.3</a>, <a href="#K.3.9.2.2">K.3.9.2.2</a>
33407  clog1p function, <a href="#7.30.1">7.30.1</a>                                       concatenation, preprocessing, see preprocessing
33408  clog2 function, <a href="#7.30.1">7.30.1</a>                                             concatenation
33409  CMPLX macros, <a href="#7.3.9.3">7.3.9.3</a>                                         conceptual models, <a href="#5.1">5.1</a>
33410  cnd_broadcast function, <a href="#7.25.3.1">7.25.3.1</a>, <a href="#7.25.3.5">7.25.3.5</a>,                   conditional features, <a href="#4">4</a>, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>,
33411       <a href="#7.25.3.6">7.25.3.6</a>                                                      <a href="#7.1.2">7.1.2</a>, <a href="#F.1">F.1</a>, <a href="#G.1">G.1</a>, <a href="#K.2">K.2</a>, <a href="#L.1">L.1</a>
33412  cnd_destroy function, <a href="#7.25.3.2">7.25.3.2</a>                                conditional inclusion, <a href="#6.10.1">6.10.1</a>
33413  cnd_init function, <a href="#7.25.3.3">7.25.3.3</a>                                   conditional operator (? :), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.15">6.5.15</a>
33414  cnd_signal function, <a href="#7.25.3.4">7.25.3.4</a>, <a href="#7.25.3.5">7.25.3.5</a>,                      conflict, <a href="#5.1.2.4">5.1.2.4</a>
33415       <a href="#7.25.3.6">7.25.3.6</a>                                                 conformance, <a href="#4">4</a>
33416  cnd_t type, <a href="#7.25.1">7.25.1</a>                                            conj functions, <a href="#7.3.9.4">7.3.9.4</a>, <a href="#G.6">G.6</a>
33417  cnd_timedwait function, <a href="#7.25.3.5">7.25.3.5</a>                              conj type-generic macro, <a href="#7.24">7.24</a>
33418  cnd_wait function, <a href="#7.25.3.3">7.25.3.3</a>, <a href="#7.25.3.6">7.25.3.6</a>                         const type qualifier, <a href="#6.7.3">6.7.3</a>
33419  collating sequences, <a href="#5.2.1">5.2.1</a>                                    const-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.7.3">6.7.3</a>
33420  colon punctuator (:), <a href="#6.7.2.1">6.7.2.1</a>                                 constant expression, <a href="#6.6">6.6</a>, <a href="#F.8.4">F.8.4</a>
33421  comma operator (,), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.17">6.5.17</a>                           constants, <a href="#6.4.4">6.4.4</a>
33422  comma punctuator (,), <a href="#6.5.2">6.5.2</a>, <a href="#6.7">6.7</a>, <a href="#6.7.2.1">6.7.2.1</a>, <a href="#6.7.2.2">6.7.2.2</a>,             as primary expression, <a href="#6.5.1">6.5.1</a>
33423       <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>                                             character, <a href="#6.4.4.4">6.4.4.4</a>
33424  command processor, <a href="#7.22.4.8">7.22.4.8</a>                                     enumeration, <a href="#6.2.1">6.2.1</a>, <a href="#6.4.4.3">6.4.4.3</a>
33425  comment delimiters (/* */ and //), <a href="#6.4.9">6.4.9</a>                        floating, <a href="#6.4.4.2">6.4.4.2</a>
33426  comments, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, <a href="#6.4.9">6.4.9</a>                                   hexadecimal, <a href="#6.4.4.1">6.4.4.1</a>
33427  common extensions, <a href="#J.5">J.5</a>                                          integer, <a href="#6.4.4.1">6.4.4.1</a>
33428  common initial sequence, <a href="#6.5.2.3">6.5.2.3</a>                                octal, <a href="#6.4.4.1">6.4.4.1</a>
33429  common real type, <a href="#6.3.1.8">6.3.1.8</a>                                     constraint, <a href="#3.8">3.8</a>, <a href="#4">4</a>
33430  common warnings, <a href="#I">I</a>                                            constraint_handler_t type, <a href="#K.3.6">K.3.6</a>
33431  comparison functions, <a href="#7.22.5">7.22.5</a>, <a href="#7.22.5.1">7.22.5.1</a>, <a href="#7.22.5.2">7.22.5.2</a>,             consume operation, <a href="#5.1.2.4">5.1.2.4</a>
33432       <a href="#K.3.6.3">K.3.6.3</a>, <a href="#K.3.6.3.1">K.3.6.3.1</a>, <a href="#K.3.6.3.2">K.3.6.3.2</a>                            content of structure/union/enumeration, <a href="#6.7.2.3">6.7.2.3</a>
33433    string, <a href="#7.23.4">7.23.4</a>                                              contiguity of allocated storage, <a href="#7.22.3">7.22.3</a>
33434    wide string, <a href="#7.28.4.4">7.28.4.4</a>                                       continue statement, <a href="#6.8.6.2">6.8.6.2</a>
33435  comparison macros, <a href="#7.12.14">7.12.14</a>                                    contracted expression, <a href="#6.5">6.5</a>, <a href="#7.12.2">7.12.2</a>, <a href="#F.7">F.7</a>
33436  comparison, pointer, <a href="#6.5.8">6.5.8</a>                                    control character, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>
33437  compatible type, <a href="#6.2.7">6.2.7</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.6">6.7.6</a>                   control wide character, <a href="#7.29.2">7.29.2</a>
33438  compl macro, <a href="#7.9">7.9</a>                                              conversion, <a href="#6.3">6.3</a>
33439  complement operator (~), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>                       arithmetic operands, <a href="#6.3.1">6.3.1</a>
33440  complete type, <a href="#6.2.5">6.2.5</a>                                            array argument, <a href="#6.9.1">6.9.1</a>
33441  complex macro, <a href="#7.3.1">7.3.1</a>                                            array parameter, <a href="#6.9.1">6.9.1</a>
33442  complex numbers, <a href="#6.2.5">6.2.5</a>, <a href="#G">G</a>                                       arrays, <a href="#6.3.2.1">6.3.2.1</a>
33443  complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>, <a href="#6.3.1.7">6.3.1.7</a>                       boolean, <a href="#6.3.1.2">6.3.1.2</a>
33444  complex type domain, <a href="#6.2.5">6.2.5</a>                                      boolean, characters, and integers, <a href="#6.3.1.1">6.3.1.1</a>
33445  complex types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#G">G</a>                        by assignment, <a href="#6.5.16.1">6.5.16.1</a>
33446  complex.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>,                   by return statement, <a href="#6.8.6.4">6.8.6.4</a>
33447       <a href="#7.3">7.3</a>, <a href="#7.24">7.24</a>, <a href="#7.30.1">7.30.1</a>, <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>                             complex types, <a href="#6.3.1.6">6.3.1.6</a>
33448  compliance, see conformance                                     explicit, <a href="#6.3">6.3</a>
33449  components of time, <a href="#7.26.1">7.26.1</a>, <a href="#K.3.8.1">K.3.8.1</a>                             function, <a href="#6.3.2.1">6.3.2.1</a>
33450  composite type, <a href="#6.2.7">6.2.7</a>                                           function argument, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>
33451  compound assignment, <a href="#6.5.16.2">6.5.16.2</a>                                   function designators, <a href="#6.3.2.1">6.3.2.1</a>
33452  compound literals, <a href="#6.5.2.5">6.5.2.5</a>                                      function parameter, <a href="#6.9.1">6.9.1</a>
33453  compound statement, <a href="#6.8.2">6.8.2</a>                                       imaginary, <a href="#G.4.1">G.4.1</a>
33454  compound-literal operator (( ){ }), <a href="#6.5.2.5">6.5.2.5</a>                     imaginary and complex, <a href="#G.4.3">G.4.3</a>
33455  concatenation functions                                         implicit, <a href="#6.3">6.3</a>
33456 <!--page 677 -->
33457     lvalues, <a href="#6.3.2.1">6.3.2.1</a>                                             csinh functions, <a href="#7.3.6.5">7.3.6.5</a>, <a href="#G.6.2.5">G.6.2.5</a>
33458     pointer, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>                                      type-generic macro for, <a href="#7.24">7.24</a>
33459     real and complex, <a href="#6.3.1.7">6.3.1.7</a>                                    csqrt functions, <a href="#7.3.8.3">7.3.8.3</a>, <a href="#G.6.4.2">G.6.4.2</a>
33460     real and imaginary, <a href="#G.4.2">G.4.2</a>                                      type-generic macro for, <a href="#7.24">7.24</a>
33461     real floating and integer, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>                  ctan functions, <a href="#7.3.5.6">7.3.5.6</a>, <a href="#G.6">G.6</a>
33462     real floating types, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#F.3">F.3</a>                               type-generic macro for, <a href="#7.24">7.24</a>
33463     signed and unsigned integers, <a href="#6.3.1.3">6.3.1.3</a>                        ctanh functions, <a href="#7.3.6.6">7.3.6.6</a>, <a href="#G.6.2.6">G.6.2.6</a>
33464     usual arithmetic, see usual arithmetic                         type-generic macro for, <a href="#7.24">7.24</a>
33465           conversions                                            ctgamma function, <a href="#7.30.1">7.30.1</a>
33466     void type, <a href="#6.3.2.2">6.3.2.2</a>                                           ctime function, <a href="#7.26.3.2">7.26.3.2</a>
33467  conversion functions                                            ctime_s function, <a href="#K.3.8.2">K.3.8.2</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>
33468     multibyte/wide character, <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>                    ctype.h header, <a href="#7.4">7.4</a>, <a href="#7.30.2">7.30.2</a>
33469        extended, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>                                 current object, <a href="#6.7.9">6.7.9</a>
33470        restartable, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>                  CX_LIMITED_RANGE pragma, <a href="#6.10.6">6.10.6</a>, <a href="#7.3.4">7.3.4</a>
33471     multibyte/wide string, <a href="#7.22.8">7.22.8</a>, <a href="#K.3.6.5">K.3.6.5</a>
33472        restartable, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>                          data race, <a href="#5.1.2.4">5.1.2.4</a>, <a href="#7.1.4">7.1.4</a>, <a href="#7.22.2.1">7.22.2.1</a>, <a href="#7.22.4.6">7.22.4.6</a>,
33473     numeric, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1">7.22.1</a>                                          <a href="#7.23.5.8">7.23.5.8</a>, <a href="#7.23.6.2">7.23.6.2</a>, <a href="#7.26.3">7.26.3</a>, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>,
33474        wide string, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1">7.28.4.1</a>                                 <a href="#7.28.6.4">7.28.6.4</a>
33475     single byte/wide character, <a href="#7.28.6.1">7.28.6.1</a>                         data stream, see streams
33476     time, <a href="#7.26.3">7.26.3</a>, <a href="#K.3.8.2">K.3.8.2</a>                                        date and time header, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>
33477        wide character, <a href="#7.28.5">7.28.5</a>                                    Daylight Saving Time, <a href="#7.26.1">7.26.1</a>
33478  conversion specifier, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>,              DBL_DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33479        <a href="#7.28.2.2">7.28.2.2</a>                                                  DBL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33480  conversion state, <a href="#7.22.7">7.22.7</a>, <a href="#7.27.1">7.27.1</a>, <a href="#7.27.1.1">7.27.1.1</a>,                     DBL_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33481        <a href="#7.27.1.2">7.27.1.2</a>, <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.6">7.28.6</a>,                     DBL_HAS_SUBNORM macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33482        <a href="#7.28.6.2.1">7.28.6.2.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>,             DBL_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33483        <a href="#7.28.6.4">7.28.6.4</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#K.3.6.4">K.3.6.4</a>,                DBL_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33484        <a href="#K.3.9.3.1">K.3.9.3.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>,           DBL_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33485        <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>                                               DBL_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33486  conversion state functions, <a href="#7.28.6.2">7.28.6.2</a>                            DBL_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33487  copying functions                                               DBL_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33488     string, <a href="#7.23.2">7.23.2</a>, <a href="#K.3.7.1">K.3.7.1</a>                                      DBL_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33489     wide string, <a href="#7.28.4.2">7.28.4.2</a>, <a href="#K.3.9.2.1">K.3.9.2.1</a>                             DBL_TRUE_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33490  copysign functions, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#7.12.11.1">7.12.11.1</a>, <a href="#F.3">F.3</a>,                    decimal constant, <a href="#6.4.4.1">6.4.4.1</a>
33491        <a href="#F.10.8.1">F.10.8.1</a>                                                  decimal digit, <a href="#5.2.1">5.2.1</a>
33492  copysign type-generic macro, <a href="#7.24">7.24</a>                               decimal-point character, <a href="#7.1.1">7.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
33493  correctly rounded result, <a href="#3.9">3.9</a>                                   DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.6.1">7.21.6.1</a>,
33494  corresponding real type, <a href="#6.2.5">6.2.5</a>                                       <a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.5">F.5</a>
33495  cos functions, <a href="#7.12.4.5">7.12.4.5</a>, <a href="#F.10.1.5">F.10.1.5</a>                               declaration specifiers, <a href="#6.7">6.7</a>
33496  cos type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                               declarations, <a href="#6.7">6.7</a>
33497  cosh functions, <a href="#7.12.5.4">7.12.5.4</a>, <a href="#F.10.2.4">F.10.2.4</a>                                function, <a href="#6.7.6.3">6.7.6.3</a>
33498  cosh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                pointer, <a href="#6.7.6.1">6.7.6.1</a>
33499  cpow functions, <a href="#7.3.8.2">7.3.8.2</a>, <a href="#G.6.4.1">G.6.4.1</a>                                  structure/union, <a href="#6.7.2.1">6.7.2.1</a>
33500     type-generic macro for, <a href="#7.24">7.24</a>                                   typedef, <a href="#6.7.8">6.7.8</a>
33501  cproj functions, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#G.6">G.6</a>                                   declarator, <a href="#6.7.6">6.7.6</a>
33502  cproj type-generic macro, <a href="#7.24">7.24</a>                                    abstract, <a href="#6.7.7">6.7.7</a>
33503  creal functions, <a href="#7.3.9.6">7.3.9.6</a>, <a href="#G.6">G.6</a>                                   declarator type derivation, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.6">6.7.6</a>
33504  creal type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                             decrement operators, see arithmetic operators,
33505  critical undefined behavior, <a href="#L.2.3">L.2.3</a>                                    increment and decrement
33506  csin functions, <a href="#7.3.5.5">7.3.5.5</a>, <a href="#G.6">G.6</a>                                    default argument promotions, <a href="#6.5.2.2">6.5.2.2</a>
33507     type-generic macro for, <a href="#7.24">7.24</a>                                 default initialization, <a href="#6.7.9">6.7.9</a>
33508 <!--page 678 -->
33509  default label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>                                  elif preprocessing directive, <a href="#6.10.1">6.10.1</a>
33510  define preprocessing directive, <a href="#6.10.3">6.10.3</a>                         ellipsis punctuator (...), <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.10.3">6.10.3</a>
33511  defined operator, <a href="#6.10.1">6.10.1</a>, <a href="#6.10.8">6.10.8</a>                               else preprocessing directive, <a href="#6.10.1">6.10.1</a>
33512  definition, <a href="#6.7">6.7</a>                                                 else statement, <a href="#6.8.4.1">6.8.4.1</a>
33513     function, <a href="#6.9.1">6.9.1</a>                                             empty statement, <a href="#6.8.3">6.8.3</a>
33514  dependency-ordered before, <a href="#5.1.2.4">5.1.2.4</a>                             encoding error, <a href="#7.21.3">7.21.3</a>, <a href="#7.27.1.1">7.27.1.1</a>, <a href="#7.27.1.2">7.27.1.2</a>,
33515  derived declarator types, <a href="#6.2.5">6.2.5</a>                                      <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>,
33516  derived types, <a href="#6.2.5">6.2.5</a>                                                 <a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>,
33517  designated initializer, <a href="#6.7.9">6.7.9</a>                                        <a href="#K.3.6.5.1">K.3.6.5.1</a>, <a href="#K.3.6.5.2">K.3.6.5.2</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>,
33518  destringizing, <a href="#6.10.9">6.10.9</a>                                                <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
33519  device input/output, <a href="#5.1.2.3">5.1.2.3</a>                                   end-of-file, <a href="#7.28.1">7.28.1</a>
33520  diagnostic message, <a href="#3.10">3.10</a>, <a href="#5.1.1.3">5.1.1.3</a>                              end-of-file indicator, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.1">7.21.7.1</a>,
33521  diagnostics, <a href="#5.1.1.3">5.1.1.3</a>                                                 <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>,
33522  diagnostics header, <a href="#7.2">7.2</a>                                              <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.10.1">7.21.10.1</a>, <a href="#7.21.10.2">7.21.10.2</a>, <a href="#7.28.3.1">7.28.3.1</a>,
33523  difftime function, <a href="#7.26.2.2">7.26.2.2</a>                                          <a href="#7.28.3.10">7.28.3.10</a>
33524  digit, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>                                              end-of-file macro, see EOF macro
33525  digraphs, <a href="#6.4.6">6.4.6</a>                                                end-of-line indicator, <a href="#5.2.1">5.2.1</a>
33526  direct input/output functions, <a href="#7.21.8">7.21.8</a>                          endif preprocessing directive, <a href="#6.10.1">6.10.1</a>
33527  display device, <a href="#5.2.2">5.2.2</a>                                          enum type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.2.2">6.7.2.2</a>
33528  div function, <a href="#7.22.6.2">7.22.6.2</a>                                         enumerated type, <a href="#6.2.5">6.2.5</a>
33529  div_t type, <a href="#7.22">7.22</a>                                               enumeration, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.2">6.7.2.2</a>
33530  division assignment operator (/=), <a href="#6.5.16.2">6.5.16.2</a>                    enumeration constant, <a href="#6.2.1">6.2.1</a>, <a href="#6.4.4.3">6.4.4.3</a>
33531  division operator (/), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>, <a href="#G.5.1">G.5.1</a>              enumeration content, <a href="#6.7.2.3">6.7.2.3</a>
33532  do statement, <a href="#6.8.5.2">6.8.5.2</a>                                          enumeration members, <a href="#6.7.2.2">6.7.2.2</a>
33533  documentation of implementation, <a href="#4">4</a>                             enumeration specifiers, <a href="#6.7.2.2">6.7.2.2</a>
33534  domain error, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.4.1">7.12.4.1</a>, <a href="#7.12.4.2">7.12.4.2</a>, <a href="#7.12.4.4">7.12.4.4</a>,            enumeration tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>
33535        <a href="#7.12.5.1">7.12.5.1</a>, <a href="#7.12.5.3">7.12.5.3</a>, <a href="#7.12.6.5">7.12.6.5</a>, <a href="#7.12.6.7">7.12.6.7</a>,                  enumerator, <a href="#6.7.2.2">6.7.2.2</a>
33536        <a href="#7.12.6.8">7.12.6.8</a>, <a href="#7.12.6.9">7.12.6.9</a>, <a href="#7.12.6.10">7.12.6.10</a>, <a href="#7.12.6.11">7.12.6.11</a>,                environment, <a href="#5">5</a>
33537        <a href="#7.12.7.4">7.12.7.4</a>, <a href="#7.12.7.5">7.12.7.5</a>, <a href="#7.12.8.4">7.12.8.4</a>, <a href="#7.12.9.5">7.12.9.5</a>,                  environment functions, <a href="#7.22.4">7.22.4</a>, <a href="#K.3.6.2">K.3.6.2</a>
33538        <a href="#7.12.9.7">7.12.9.7</a>, <a href="#7.12.10.1">7.12.10.1</a>, <a href="#7.12.10.2">7.12.10.2</a>, <a href="#7.12.10.3">7.12.10.3</a>                environment list, <a href="#7.22.4.6">7.22.4.6</a>, <a href="#K.3.6.2.1">K.3.6.2.1</a>
33539  dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>                                      environmental considerations, <a href="#5.2">5.2</a>
33540  double _Complex type, <a href="#6.2.5">6.2.5</a>                                    environmental limits, <a href="#5.2.4">5.2.4</a>, <a href="#7.13.1.1">7.13.1.1</a>, <a href="#7.21.2">7.21.2</a>,
33541  double _Complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>,                            <a href="#7.21.3">7.21.3</a>, <a href="#7.21.4.4">7.21.4.4</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.22.2.1">7.22.2.1</a>, <a href="#7.22.4.2">7.22.4.2</a>,
33542        <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>                                               <a href="#7.22.4.3">7.22.4.3</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>
33543  double _Imaginary type, <a href="#G.2">G.2</a>                                    EOF macro, <a href="#7.4">7.4</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.1">7.21.5.1</a>, <a href="#7.21.5.2">7.21.5.2</a>,
33544  double type, <a href="#6.2.5">6.2.5</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.2">7.21.6.2</a>,                        <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.21.6.7">7.21.6.7</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.11">7.21.6.11</a>,
33545        <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.2">F.2</a>                                                  <a href="#7.21.6.14">7.21.6.14</a>, <a href="#7.21.7.1">7.21.7.1</a>, <a href="#7.21.7.3">7.21.7.3</a>, <a href="#7.21.7.4">7.21.7.4</a>,
33546  double type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.7">6.3.1.7</a>,                   <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.21.7.8">7.21.7.8</a>, <a href="#7.21.7.9">7.21.7.9</a>,
33547        <a href="#6.3.1.8">6.3.1.8</a>                                                        <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.2.4">7.28.2.4</a>,
33548  double-precision arithmetic, <a href="#5.1.2.3">5.1.2.3</a>                                 <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#7.28.2.12">7.28.2.12</a>,
33549  double-quote escape sequence (\"), <a href="#6.4.4.4">6.4.4.4</a>,                          <a href="#7.28.3.4">7.28.3.4</a>, <a href="#7.28.6.1.1">7.28.6.1.1</a>, <a href="#7.28.6.1.2">7.28.6.1.2</a>, <a href="#K.3.5.3.7">K.3.5.3.7</a>,
33550        <a href="#6.4.5">6.4.5</a>, <a href="#6.10.9">6.10.9</a>                                                  <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>,
33551  double_t type, <a href="#7.12">7.12</a>, <a href="#J.5.6">J.5.6</a>                                           <a href="#K.3.9.1.5">K.3.9.1.5</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>,
33552                                                                       <a href="#K.3.9.1.14">K.3.9.1.14</a>
33553  EDOM macro, <a href="#7.5">7.5</a>, <a href="#7.12.1">7.12.1</a>, see also domain error                 equal-sign punctuator (=), <a href="#6.7">6.7</a>, <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.9">6.7.9</a>
33554  effective type, <a href="#6.5">6.5</a>                                            equal-to operator, see equality operator
33555  EILSEQ macro, <a href="#7.5">7.5</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.27.1.1">7.27.1.1</a>, <a href="#7.27.1.2">7.27.1.2</a>,                 equality expressions, <a href="#6.5.9">6.5.9</a>
33556       <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>,                   equality operator (==), <a href="#6.5.9">6.5.9</a>
33557       <a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>,           ERANGE macro, <a href="#7.5">7.5</a>, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.12.1">7.12.1</a>,
33558       see also encoding error                                         <a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>, see
33559  element type, <a href="#6.2.5">6.2.5</a>                                                  also range error, pole error
33560 <!--page 679 -->
33561  erf functions, <a href="#7.12.8.1">7.12.8.1</a>, <a href="#F.10.5.1">F.10.5.1</a>                               exp2 functions, <a href="#7.12.6.2">7.12.6.2</a>, <a href="#F.10.3.2">F.10.3.2</a>
33562  erf type-generic macro, <a href="#7.24">7.24</a>                                    exp2 type-generic macro, <a href="#7.24">7.24</a>
33563  erfc functions, <a href="#7.12.8.2">7.12.8.2</a>, <a href="#F.10.5.2">F.10.5.2</a>                              explicit conversion, <a href="#6.3">6.3</a>
33564  erfc type-generic macro, <a href="#7.24">7.24</a>                                   expm1 functions, <a href="#7.12.6.3">7.12.6.3</a>, <a href="#F.10.3.3">F.10.3.3</a>
33565  errno macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.3.2">7.3.2</a>, <a href="#7.5">7.5</a>, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>,               expm1 type-generic macro, <a href="#7.24">7.24</a>
33566        <a href="#7.12.1">7.12.1</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.10.4">7.21.10.4</a>,            exponent part, <a href="#6.4.4.2">6.4.4.2</a>
33567        <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.23.6.2">7.23.6.2</a>, <a href="#7.27.1.1">7.27.1.1</a>,           exponential functions
33568        <a href="#7.27.1.2">7.27.1.2</a>, <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.3.1">7.28.3.1</a>,                     complex, <a href="#7.3.7">7.3.7</a>, <a href="#G.6.3">G.6.3</a>
33569        <a href="#7.28.3.3">7.28.3.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>, <a href="#7.28.6.3.2">7.28.6.3.2</a>,               real, <a href="#7.12.6">7.12.6</a>, <a href="#F.10.3">F.10.3</a>
33570        <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#J.5.17">J.5.17</a>,               expression, <a href="#6.5">6.5</a>
33571        <a href="#K.3.1.3">K.3.1.3</a>, <a href="#K.3.7.4.2">K.3.7.4.2</a>                                          assignment, <a href="#6.5.16">6.5.16</a>
33572  errno.h header, <a href="#7.5">7.5</a>, <a href="#7.30.3">7.30.3</a>, <a href="#K.3.2">K.3.2</a>                                cast, <a href="#6.5.4">6.5.4</a>
33573  errno_t type, <a href="#K.3.2">K.3.2</a>, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.6">K.3.6</a>, <a href="#K.3.6.1.1">K.3.6.1.1</a>,                     constant, <a href="#6.6">6.6</a>
33574        <a href="#K.3.7">K.3.7</a>, <a href="#K.3.8">K.3.8</a>, <a href="#K.3.9">K.3.9</a>                                         evaluation, <a href="#5.1.2.3">5.1.2.3</a>
33575  error                                                             full, <a href="#6.8">6.8</a>
33576     domain, see domain error                                       order of evaluation, see order of evaluation
33577     encoding, see encoding error                                   parenthesized, <a href="#6.5.1">6.5.1</a>
33578     pole, see pole error                                           primary, <a href="#6.5.1">6.5.1</a>
33579     range, see range error                                         unary, <a href="#6.5.3">6.5.3</a>
33580  error conditions, <a href="#7.12.1">7.12.1</a>                                        expression statement, <a href="#6.8.3">6.8.3</a>
33581  error functions, <a href="#7.12.8">7.12.8</a>, <a href="#F.10.5">F.10.5</a>                                 extended alignment, <a href="#6.2.8">6.2.8</a>
33582  error indicator, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.1">7.21.7.1</a>,                    extended character set, <a href="#3.7.2">3.7.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#5.2.1.2">5.2.1.2</a>
33583        <a href="#7.21.7.3">7.21.7.3</a>, <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.21.7.7">7.21.7.7</a>,                   extended characters, <a href="#5.2.1">5.2.1</a>
33584        <a href="#7.21.7.8">7.21.7.8</a>, <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.10.1">7.21.10.1</a>, <a href="#7.21.10.3">7.21.10.3</a>,                 extended integer types, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.4.4.1">6.4.4.1</a>,
33585        <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>                                             <a href="#7.20">7.20</a>
33586  error preprocessing directive, <a href="#4">4</a>, <a href="#6.10.5">6.10.5</a>                        extended multibyte/wide character conversion
33587  error-handling functions, <a href="#7.21.10">7.21.10</a>, <a href="#7.23.6.2">7.23.6.2</a>,                         utilities, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>
33588        <a href="#K.3.7.4.2">K.3.7.4.2</a>, <a href="#K.3.7.4.3">K.3.7.4.3</a>                                      extensible wide character case mapping functions,
33589  escape character (\), <a href="#6.4.4.4">6.4.4.4</a>                                        <a href="#7.29.3.2">7.29.3.2</a>
33590  escape sequences, <a href="#5.2.1">5.2.1</a>, <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.11.4">6.11.4</a>                 extensible wide character classification functions,
33591  evaluation format, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#7.12">7.12</a>                          <a href="#7.29.2.2">7.29.2.2</a>
33592  evaluation method, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#F.8.5">F.8.5</a>                        extern storage-class specifier, <a href="#6.2.2">6.2.2</a>, <a href="#6.7.1">6.7.1</a>
33593  evaluation of expression, <a href="#5.1.2.3">5.1.2.3</a>                               external definition, <a href="#6.9">6.9</a>
33594  evaluation order, see order of evaluation                       external identifiers, underscore, <a href="#7.1.3">7.1.3</a>
33595  exceptional condition, <a href="#6.5">6.5</a>                                      external linkage, <a href="#6.2.2">6.2.2</a>
33596  excess precision, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>                   external name, <a href="#6.4.2.1">6.4.2.1</a>
33597  excess range, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>                       external object definitions, <a href="#6.9.2">6.9.2</a>
33598  exclusive OR operators
33599     bitwise (^), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>                                 fabs functions, <a href="#7.12.7.2">7.12.7.2</a>, <a href="#F.3">F.3</a>, <a href="#F.10.4.2">F.10.4.2</a>
33600     bitwise assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>                            fabs type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
33601  executable program, <a href="#5.1.1.1">5.1.1.1</a>                                     false macro, <a href="#7.18">7.18</a>
33602  execution character set, <a href="#5.2.1">5.2.1</a>                                  fclose function, <a href="#7.21.5.1">7.21.5.1</a>
33603  execution environment, <a href="#5">5</a>, <a href="#5.1.2">5.1.2</a>, see also                       fdim functions, <a href="#7.12.12.1">7.12.12.1</a>, <a href="#F.10.9.1">F.10.9.1</a>
33604        environmental limits                                      fdim type-generic macro, <a href="#7.24">7.24</a>
33605  execution sequence, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.8">6.8</a>                                FE_ALL_EXCEPT macro, <a href="#7.6">7.6</a>
33606  exit function, <a href="#5.1.2.2.3">5.1.2.2.3</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.22">7.22</a>, <a href="#7.22.4.4">7.22.4.4</a>,               FE_DFL_ENV macro, <a href="#7.6">7.6</a>
33607        <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>                                        FE_DIVBYZERO macro, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
33608  EXIT_FAILURE macro, <a href="#7.22">7.22</a>, <a href="#7.22.4.4">7.22.4.4</a>                              FE_DOWNWARD macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
33609  EXIT_SUCCESS macro, <a href="#7.22">7.22</a>, <a href="#7.22.4.4">7.22.4.4</a>                              FE_INEXACT macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
33610  exp functions, <a href="#7.12.6.1">7.12.6.1</a>, <a href="#F.10.3.1">F.10.3.1</a>                               FE_INVALID macro, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
33611  exp type-generic macro, <a href="#7.24">7.24</a>                                    FE_OVERFLOW macro, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
33612 <!--page 680 -->
33613  FE_TONEAREST macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                 float _Complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>,
33614  FE_TOWARDZERO macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                     <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>
33615  FE_UNDERFLOW macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                 float _Imaginary type, <a href="#G.2">G.2</a>
33616  FE_UPWARD macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                    float type, <a href="#6.2.5">6.2.5</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#F.2">F.2</a>
33617  feclearexcept function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.1">7.6.2.1</a>, <a href="#F.3">F.3</a>                  float type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.7">6.3.1.7</a>,
33618  fegetenv function, <a href="#7.6.4.1">7.6.4.1</a>, <a href="#7.6.4.3">7.6.4.3</a>, <a href="#7.6.4.4">7.6.4.4</a>, <a href="#F.3">F.3</a>                 <a href="#6.3.1.8">6.3.1.8</a>
33619  fegetexceptflag function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.2">7.6.2.2</a>, <a href="#F.3">F.3</a>                float.h header, <a href="#4">4</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.7">7.7</a>, <a href="#7.22.1.3">7.22.1.3</a>,
33620  fegetround function, <a href="#7.6">7.6</a>, <a href="#7.6.3.1">7.6.3.1</a>, <a href="#F.3">F.3</a>                            <a href="#7.28.4.1.1">7.28.4.1.1</a>
33621  feholdexcept function, <a href="#7.6.4.2">7.6.4.2</a>, <a href="#7.6.4.3">7.6.4.3</a>,                     float_t type, <a href="#7.12">7.12</a>, <a href="#J.5.6">J.5.6</a>
33622       <a href="#7.6.4.4">7.6.4.4</a>, <a href="#F.3">F.3</a>                                            floating constant, <a href="#6.4.4.2">6.4.4.2</a>
33623  fence, <a href="#5.1.2.4">5.1.2.4</a>                                               floating suffix, f or <a href="#F">F</a>, <a href="#6.4.4.2">6.4.4.2</a>
33624  fences, <a href="#7.17.4">7.17.4</a>                                               floating type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.7">6.3.1.7</a>,
33625  fenv.h header, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F">F</a>, <a href="#H">H</a>                <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>
33626  FENV_ACCESS pragma, <a href="#6.10.6">6.10.6</a>, <a href="#7.6.1">7.6.1</a>, <a href="#F.8">F.8</a>, <a href="#F.9">F.9</a>,                 floating types, <a href="#6.2.5">6.2.5</a>, <a href="#6.11.1">6.11.1</a>
33627       <a href="#F.10">F.10</a>                                                    floating-point accuracy, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.5">6.5</a>,
33628  fenv_t type, <a href="#7.6">7.6</a>                                                  <a href="#7.22.1.3">7.22.1.3</a>, <a href="#F.5">F.5</a>, see also contracted expression
33629  feof function, <a href="#7.21.10.2">7.21.10.2</a>                                     floating-point arithmetic functions, <a href="#7.12">7.12</a>, <a href="#F.10">F.10</a>
33630  feraiseexcept function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.3">7.6.2.3</a>, <a href="#F.3">F.3</a>                  floating-point classification functions, <a href="#7.12.3">7.12.3</a>
33631  ferror function, <a href="#7.21.10.3">7.21.10.3</a>                                   floating-point control mode, <a href="#7.6">7.6</a>, <a href="#F.8.6">F.8.6</a>
33632  fesetenv function, <a href="#7.6.4.3">7.6.4.3</a>, <a href="#F.3">F.3</a>                              floating-point environment, <a href="#7.6">7.6</a>, <a href="#F.8">F.8</a>, <a href="#F.8.6">F.8.6</a>
33633  fesetexceptflag function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.4">7.6.2.4</a>, <a href="#F.3">F.3</a>                floating-point exception, <a href="#7.6">7.6</a>, <a href="#7.6.2">7.6.2</a>, <a href="#F.10">F.10</a>
33634  fesetround function, <a href="#7.6">7.6</a>, <a href="#7.6.3.2">7.6.3.2</a>, <a href="#F.3">F.3</a>                       floating-point number, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.2.5">6.2.5</a>
33635  fetestexcept function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.5">7.6.2.5</a>, <a href="#F.3">F.3</a>                   floating-point rounding mode, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33636  feupdateenv function, <a href="#7.6.4.2">7.6.4.2</a>, <a href="#7.6.4.4">7.6.4.4</a>, <a href="#F.3">F.3</a>                  floating-point status flag, <a href="#7.6">7.6</a>, <a href="#F.8.6">F.8.6</a>
33637  fexcept_t type, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                     floor functions, <a href="#7.12.9.2">7.12.9.2</a>, <a href="#F.10.6.2">F.10.6.2</a>
33638  fflush function, <a href="#7.21.5.2">7.21.5.2</a>, <a href="#7.21.5.3">7.21.5.3</a>                          floor type-generic macro, <a href="#7.24">7.24</a>
33639  fgetc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.7.1">7.21.7.1</a>,                    FLT_DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33640       <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.8.1">7.21.8.1</a>                                      FLT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33641  fgetpos function, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.3">7.21.9.3</a>                 FLT_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33642  fgets function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.2">7.21.7.2</a>, <a href="#K.3.5.4.1">K.3.5.4.1</a>                  FLT_EVAL_METHOD macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.6">6.6</a>, <a href="#7.12">7.12</a>,
33643  fgetwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.28.3.1">7.28.3.1</a>,                        <a href="#F.10.11">F.10.11</a>
33644       <a href="#7.28.3.6">7.28.3.6</a>                                                FLT_HAS_SUBNORM macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33645  fgetws function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.2">7.28.3.2</a>                            FLT_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33646  field width, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>                               FLT_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33647  file, <a href="#7.21.3">7.21.3</a>                                                  FLT_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33648    access functions, <a href="#7.21.5">7.21.5</a>, <a href="#K.3.5.2">K.3.5.2</a>                          FLT_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33649    name, <a href="#7.21.3">7.21.3</a>                                               FLT_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33650    operations, <a href="#7.21.4">7.21.4</a>, <a href="#K.3.5.1">K.3.5.1</a>                                FLT_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33651    position indicator, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>,                FLT_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33652          <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.1">7.21.7.1</a>, <a href="#7.21.7.3">7.21.7.3</a>, <a href="#7.21.7.10">7.21.7.10</a>,             FLT_RADIX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,
33653          <a href="#7.21.8.1">7.21.8.1</a>, <a href="#7.21.8.2">7.21.8.2</a>, <a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.2">7.21.9.2</a>,                   <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>
33654          <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.9.4">7.21.9.4</a>, <a href="#7.21.9.5">7.21.9.5</a>, <a href="#7.28.3.1">7.28.3.1</a>,              FLT_ROUNDS macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
33655          <a href="#7.28.3.3">7.28.3.3</a>, <a href="#7.28.3.10">7.28.3.10</a>                                  FLT_TRUE_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33656    positioning functions, <a href="#7.21.9">7.21.9</a>                              fma functions, <a href="#7.12">7.12</a>, <a href="#7.12.13.1">7.12.13.1</a>, <a href="#F.10.10.1">F.10.10.1</a>
33657  file scope, <a href="#6.2.1">6.2.1</a>, <a href="#6.9">6.9</a>                                        fma type-generic macro, <a href="#7.24">7.24</a>
33658  FILE type, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                    fmax functions, <a href="#7.12.12.2">7.12.12.2</a>, <a href="#F.10.9.2">F.10.9.2</a>
33659  FILENAME_MAX macro, <a href="#7.21.1">7.21.1</a>                                   fmax type-generic macro, <a href="#7.24">7.24</a>
33660  flags, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>, see also floating-point             fmin functions, <a href="#7.12.12.3">7.12.12.3</a>, <a href="#F.10.9.3">F.10.9.3</a>
33661       status flag                                              fmin type-generic macro, <a href="#7.24">7.24</a>
33662  flexible array member, <a href="#6.7.2.1">6.7.2.1</a>                                fmod functions, <a href="#7.12.10.1">7.12.10.1</a>, <a href="#F.10.7.1">F.10.7.1</a>
33663  float _Complex type, <a href="#6.2.5">6.2.5</a>                                   fmod type-generic macro, <a href="#7.24">7.24</a>
33664 <!--page 681 -->
33665  fopen function, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.5.4">7.21.5.4</a>, <a href="#K.3.5.2.1">K.3.5.2.1</a>                       <a href="#K.3.5.3.7">K.3.5.3.7</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>
33666  FOPEN_MAX macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.4.3">7.21.4.3</a>,                    fseek function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.10">7.21.7.10</a>,
33667       <a href="#K.3.5.1.1">K.3.5.1.1</a>                                                      <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.9.4">7.21.9.4</a>, <a href="#7.21.9.5">7.21.9.5</a>, <a href="#7.28.3.10">7.28.3.10</a>
33668  fopen_s function, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.2.1">K.3.5.2.1</a>,                       fsetpos function, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.10">7.21.7.10</a>,
33669       <a href="#K.3.5.2.2">K.3.5.2.2</a>                                                      <a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.28.3.10">7.28.3.10</a>
33670  for statement, <a href="#6.8.5">6.8.5</a>, <a href="#6.8.5.3">6.8.5.3</a>                                 ftell function, <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.9.4">7.21.9.4</a>
33671  form-feed character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>                               full declarator, <a href="#6.7.6">6.7.6</a>
33672  form-feed escape sequence (\f), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,               full expression, <a href="#6.8">6.8</a>
33673       <a href="#7.4.1.10">7.4.1.10</a>                                                 fully buffered stream, <a href="#7.21.3">7.21.3</a>
33674  formal argument (deprecated), <a href="#3.16">3.16</a>                            function
33675  formal parameter, <a href="#3.16">3.16</a>                                           argument, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>
33676  formatted input/output functions, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.21.6">7.21.6</a>,              body, <a href="#6.9.1">6.9.1</a>
33677       <a href="#K.3.5.3">K.3.5.3</a>                                                     call, <a href="#6.5.2.2">6.5.2.2</a>
33678     wide character, <a href="#7.28.2">7.28.2</a>, <a href="#K.3.9.1">K.3.9.1</a>                                  library, <a href="#7.1.4">7.1.4</a>
33679  fortran keyword, <a href="#J.5.9">J.5.9</a>                                           declarator, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.11.6">6.11.6</a>
33680  forward reference, <a href="#3.11">3.11</a>                                          definition, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.9.1">6.9.1</a>, <a href="#6.11.7">6.11.7</a>
33681  FP_CONTRACT pragma, <a href="#6.5">6.5</a>, <a href="#6.10.6">6.10.6</a>, <a href="#7.12.2">7.12.2</a>, see                     designator, <a href="#6.3.2.1">6.3.2.1</a>
33682       also contracted expression                                  image, <a href="#5.2.3">5.2.3</a>
33683  FP_FAST_FMA macro, <a href="#7.12">7.12</a>                                          inline, <a href="#6.7.4">6.7.4</a>
33684  FP_FAST_FMAF macro, <a href="#7.12">7.12</a>                                         library, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7.1.4">7.1.4</a>
33685  FP_FAST_FMAL macro, <a href="#7.12">7.12</a>                                         name length, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
33686  FP_ILOGB0 macro, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>                                  no-return, <a href="#6.7.4">6.7.4</a>
33687  FP_ILOGBNAN macro, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>                                parameter, <a href="#5.1.2.2.1">5.1.2.2.1</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7">6.7</a>, <a href="#6.9.1">6.9.1</a>
33688  FP_INFINITE macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                     prototype, <a href="#5.1.2.2.1">5.1.2.2.1</a>, <a href="#6.2.1">6.2.1</a>, <a href="#6.2.7">6.2.7</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7">6.7</a>,
33689  FP_NAN macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                                <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.9.1">6.9.1</a>, <a href="#6.11.6">6.11.6</a>, <a href="#6.11.7">6.11.7</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.12">7.12</a>
33690  FP_NORMAL macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                       prototype scope, <a href="#6.2.1">6.2.1</a>, <a href="#6.7.6.2">6.7.6.2</a>
33691  FP_SUBNORMAL macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                    recursive call, <a href="#6.5.2.2">6.5.2.2</a>
33692  FP_ZERO macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                         return, <a href="#6.8.6.4">6.8.6.4</a>, <a href="#F.6">F.6</a>
33693  fpclassify macro, <a href="#7.12.3.1">7.12.3.1</a>, <a href="#F.3">F.3</a>                                  scope, <a href="#6.2.1">6.2.1</a>
33694  fpos_t type, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>                                      type, <a href="#6.2.5">6.2.5</a>
33695  fprintf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.1">7.21.6.1</a>,                       type conversion, <a href="#6.3.2.1">6.3.2.1</a>
33696       <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.21.6.3">7.21.6.3</a>, <a href="#7.21.6.5">7.21.6.5</a>, <a href="#7.21.6.6">7.21.6.6</a>,                  function specifiers, <a href="#6.7.4">6.7.4</a>
33697       <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.3">F.3</a>, <a href="#K.3.5.3.1">K.3.5.3.1</a>                       function type, <a href="#6.2.5">6.2.5</a>
33698  fprintf_s function, <a href="#K.3.5.3.1">K.3.5.3.1</a>                                 function-call operator (( )), <a href="#6.5.2.2">6.5.2.2</a>
33699  fputc function, <a href="#5.2.2">5.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.7.3">7.21.7.3</a>,              function-like macro, <a href="#6.10.3">6.10.3</a>
33700       <a href="#7.21.7.7">7.21.7.7</a>, <a href="#7.21.8.2">7.21.8.2</a>                                       fundamental alignment, <a href="#6.2.8">6.2.8</a>
33701  fputs function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.4">7.21.7.4</a>                              future directions
33702  fputwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.28.3.3">7.28.3.3</a>,                       language, <a href="#6.11">6.11</a>
33703       <a href="#7.28.3.8">7.28.3.8</a>                                                    library, <a href="#7.30">7.30</a>
33704  fputws function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.4">7.28.3.4</a>                             fwide function, <a href="#7.21.2">7.21.2</a>, <a href="#7.28.3.5">7.28.3.5</a>
33705  fread function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.8.1">7.21.8.1</a>                              fwprintf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
33706  free function, <a href="#7.22.3.3">7.22.3.3</a>, <a href="#7.22.3.5">7.22.3.5</a>                                   <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.2.3">7.28.2.3</a>, <a href="#7.28.2.5">7.28.2.5</a>,
33707  freestanding execution environment, <a href="#4">4</a>, <a href="#5.1.2">5.1.2</a>,                       <a href="#7.28.2.11">7.28.2.11</a>, <a href="#K.3.9.1.1">K.3.9.1.1</a>
33708       <a href="#5.1.2.1">5.1.2.1</a>                                                  fwprintf_s function, <a href="#K.3.9.1.1">K.3.9.1.1</a>
33709  freopen function, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.5.4">7.21.5.4</a>                            fwrite function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.8.2">7.21.8.2</a>
33710  freopen_s function, <a href="#K.3.5.2.2">K.3.5.2.2</a>                                 fwscanf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.2">7.28.2.2</a>,
33711  frexp functions, <a href="#7.12.6.4">7.12.6.4</a>, <a href="#F.10.3.4">F.10.3.4</a>                                 <a href="#7.28.2.4">7.28.2.4</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.12">7.28.2.12</a>, <a href="#7.28.3.10">7.28.3.10</a>,
33712  frexp type-generic macro, <a href="#7.24">7.24</a>                                      <a href="#K.3.9.1.2">K.3.9.1.2</a>
33713  fscanf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,                     fwscanf_s function, <a href="#K.3.9.1.2">K.3.9.1.2</a>, <a href="#K.3.9.1.5">K.3.9.1.5</a>,
33714       <a href="#7.21.6.4">7.21.6.4</a>, <a href="#7.21.6.7">7.21.6.7</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#F.3">F.3</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>                   <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>
33715  fscanf_s function, <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.5.3.4">K.3.5.3.4</a>,
33716 <!--page 682 -->
33717  gamma functions, <a href="#7.12.8">7.12.8</a>, <a href="#F.10.5">F.10.5</a>                               name spaces, <a href="#6.2.3">6.2.3</a>
33718  general utilities, <a href="#7.22">7.22</a>, <a href="#K.3.6">K.3.6</a>                                reserved, <a href="#6.4.1">6.4.1</a>, <a href="#7.1.3">7.1.3</a>, <a href="#K.3.1.2">K.3.1.2</a>
33719    wide string, <a href="#7.28.4">7.28.4</a>, <a href="#K.3.9.2">K.3.9.2</a>                                 scope, <a href="#6.2.1">6.2.1</a>
33720  general wide string utilities, <a href="#7.28.4">7.28.4</a>, <a href="#K.3.9.2">K.3.9.2</a>                 type, <a href="#6.2.5">6.2.5</a>
33721  generic parameters, <a href="#7.24">7.24</a>                                    identifier list, <a href="#6.7.6">6.7.6</a>
33722  generic selection, <a href="#6.5.1.1">6.5.1.1</a>                                  identifier nondigit, <a href="#6.4.2.1">6.4.2.1</a>
33723  getc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>                   IEC 559, <a href="#F.1">F.1</a>
33724  getchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.6">7.21.7.6</a>                          IEC 60559, <a href="#2">2</a>, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.3.3">7.3.3</a>,
33725  getenv function, <a href="#7.22.4.6">7.22.4.6</a>                                         <a href="#7.6">7.6</a>, <a href="#7.6.4.2">7.6.4.2</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.10.2">7.12.10.2</a>, <a href="#7.12.14">7.12.14</a>, <a href="#F">F</a>, <a href="#G">G</a>,
33726  getenv_s function, <a href="#K.3.6.2.1">K.3.6.2.1</a>                                      <a href="#H.1">H.1</a>
33727  gets function, <a href="#K.3.5.4.1">K.3.5.4.1</a>                                    IEEE 754, <a href="#F.1">F.1</a>
33728  gets_s function, <a href="#K.3.5.4.1">K.3.5.4.1</a>                                  IEEE 854, <a href="#F.1">F.1</a>
33729  getwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.6">7.28.3.6</a>, <a href="#7.28.3.7">7.28.3.7</a>                  IEEE floating-point arithmetic standard, see
33730  getwchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.7">7.28.3.7</a>                               IEC 60559, ANSI/IEEE 754,
33731  gmtime function, <a href="#7.26.3.3">7.26.3.3</a>                                         ANSI/IEEE 854
33732  gmtime_s function, <a href="#K.3.8.2.3">K.3.8.2.3</a>                                if preprocessing directive, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>,
33733  goto statement, <a href="#6.2.1">6.2.1</a>, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.6.1">6.8.6.1</a>                             <a href="#6.10.1">6.10.1</a>, <a href="#7.1.4">7.1.4</a>
33734  graphic characters, <a href="#5.2.1">5.2.1</a>                                   if statement, <a href="#6.8.4.1">6.8.4.1</a>
33735  greater-than operator (&gt;), <a href="#6.5.8">6.5.8</a>                            ifdef preprocessing directive, <a href="#6.10.1">6.10.1</a>
33736  greater-than-or-equal-to operator (&gt;=), <a href="#6.5.8">6.5.8</a>               ifndef preprocessing directive, <a href="#6.10.1">6.10.1</a>
33737                                                              ignore_handler_s function, <a href="#K.3.6.1.3">K.3.6.1.3</a>
33738  happens before, <a href="#5.1.2.4">5.1.2.4</a>                                     ilogb functions, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>, <a href="#F.10.3.5">F.10.3.5</a>
33739  header, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7.1.2">7.1.2</a>, see also standard headers           ilogb type-generic macro, <a href="#7.24">7.24</a>
33740  header names, <a href="#6.4">6.4</a>, <a href="#6.4.7">6.4.7</a>, <a href="#6.10.2">6.10.2</a>                            imaginary macro, <a href="#7.3.1">7.3.1</a>, <a href="#G.6">G.6</a>
33741  hexadecimal constant, <a href="#6.4.4.1">6.4.4.1</a>                               imaginary numbers, <a href="#G">G</a>
33742  hexadecimal digit, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                imaginary type domain, <a href="#G.2">G.2</a>
33743  hexadecimal prefix, <a href="#6.4.4.1">6.4.4.1</a>                                  imaginary types, <a href="#G">G</a>
33744  hexadecimal-character escape sequence                       imaxabs function, <a href="#7.8.2.1">7.8.2.1</a>
33745       (\x hexadecimal digits), <a href="#6.4.4.4">6.4.4.4</a>                       imaxdiv function, <a href="#7.8">7.8</a>, <a href="#7.8.2.2">7.8.2.2</a>
33746  high-order bit, <a href="#3.6">3.6</a>                                         imaxdiv_t type, <a href="#7.8">7.8</a>
33747  horizontal-tab character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>                        implementation, <a href="#3.12">3.12</a>
33748  horizontal-tab escape sequence (\r), <a href="#7.29.2.1.3">7.29.2.1.3</a>             implementation limit, <a href="#3.13">3.13</a>, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.4.2.1">6.4.2.1</a>,
33749  horizontal-tab escape sequence (\t), <a href="#5.2.2">5.2.2</a>,                       <a href="#6.7.6">6.7.6</a>, <a href="#6.8.4.2">6.8.4.2</a>, <a href="#E">E</a>, see also environmental
33750       <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.3">7.4.1.3</a>, <a href="#7.4.1.10">7.4.1.10</a>                                   limits
33751  hosted execution environment, <a href="#4">4</a>, <a href="#5.1.2">5.1.2</a>, <a href="#5.1.2.2">5.1.2.2</a>             implementation-defined behavior, <a href="#3.4.1">3.4.1</a>, <a href="#4">4</a>, <a href="#J.3">J.3</a>
33752  HUGE_VAL macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,                     implementation-defined value, <a href="#3.19.1">3.19.1</a>
33753       <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.10">F.10</a>                                       implicit conversion, <a href="#6.3">6.3</a>
33754  HUGE_VALF macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,                    implicit initialization, <a href="#6.7.9">6.7.9</a>
33755       <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.10">F.10</a>                                       include preprocessing directive, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.2">6.10.2</a>
33756  HUGE_VALL macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,                    inclusive OR operators
33757       <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.10">F.10</a>                                         bitwise (|), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>
33758  hyperbolic functions                                           bitwise assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>
33759    complex, <a href="#7.3.6">7.3.6</a>, <a href="#G.6.2">G.6.2</a>                                     incomplete type, <a href="#6.2.5">6.2.5</a>
33760    real, <a href="#7.12.5">7.12.5</a>, <a href="#F.10.2">F.10.2</a>                                      increment operators, see arithmetic operators,
33761  hypot functions, <a href="#7.12.7.3">7.12.7.3</a>, <a href="#F.10.4.3">F.10.4.3</a>                               increment and decrement
33762  hypot type-generic macro, <a href="#7.24">7.24</a>                              indeterminate value, <a href="#3.19.2">3.19.2</a>
33763                                                              indeterminately sequenced, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5.2.2">6.5.2.2</a>,
33764  <a href="#I">I</a> macro, <a href="#7.3.1">7.3.1</a>, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#G.6">G.6</a>                                      <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.16.2">6.5.16.2</a>, see also sequenced before,
33765  identifier, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.5.1">6.5.1</a>                                         unsequenced
33766     linkage, see linkage                                     indirection operator (*), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>
33767     maximum length, <a href="#6.4.2.1">6.4.2.1</a>                                  inequality operator (!=), <a href="#6.5.9">6.5.9</a>
33768 <!--page 683 -->
33769  infinitary, <a href="#7.12.1">7.12.1</a>                                                    extended, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#7.20">7.20</a>
33770  INFINITY macro, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#7.12">7.12</a>, <a href="#F.2.1">F.2.1</a>                              inter-thread happens before, <a href="#5.1.2.4">5.1.2.4</a>
33771  initial position, <a href="#5.2.2">5.2.2</a>                                           interactive device, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.3">7.21.5.3</a>
33772  initial shift state, <a href="#5.2.1.2">5.2.1.2</a>                                      internal linkage, <a href="#6.2.2">6.2.2</a>
33773  initialization, <a href="#5.1.2">5.1.2</a>, <a href="#6.2.4">6.2.4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.5">6.5.2.5</a>, <a href="#6.7.9">6.7.9</a>,            internal name, <a href="#6.4.2.1">6.4.2.1</a>
33774        <a href="#F.8.5">F.8.5</a>                                                       interrupt, <a href="#5.2.3">5.2.3</a>
33775     in blocks, <a href="#6.8">6.8</a>                                                 INTMAX_C macro, <a href="#7.20.4.2">7.20.4.2</a>
33776  initializer, <a href="#6.7.9">6.7.9</a>                                                INTMAX_MAX macro, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.20.2.5">7.20.2.5</a>
33777     permitted form, <a href="#6.6">6.6</a>                                            INTMAX_MIN macro, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.20.2.5">7.20.2.5</a>
33778     string literal, <a href="#6.3.2.1">6.3.2.1</a>                                        intmax_t type, <a href="#7.20.1.5">7.20.1.5</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
33779  inline, <a href="#6.7.4">6.7.4</a>                                                           <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
33780  inner scope, <a href="#6.2.1">6.2.1</a>                                                INTN_C macros, <a href="#7.20.4.1">7.20.4.1</a>
33781  input failure, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.10">7.28.2.10</a>,                     INTN_MAX macros, <a href="#7.20.2.1">7.20.2.1</a>
33782        <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.5.3.4">K.3.5.3.4</a>, <a href="#K.3.5.3.7">K.3.5.3.7</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>,                 INTN_MIN macros, <a href="#7.20.2.1">7.20.2.1</a>
33783        <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>, <a href="#K.3.9.1.5">K.3.9.1.5</a>,               intN_t types, <a href="#7.20.1.1">7.20.1.1</a>
33784        <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>               INTPTR_MAX macro, <a href="#7.20.2.4">7.20.2.4</a>
33785  input/output functions                                            INTPTR_MIN macro, <a href="#7.20.2.4">7.20.2.4</a>
33786     character, <a href="#7.21.7">7.21.7</a>, <a href="#K.3.5.4">K.3.5.4</a>                                     intptr_t type, <a href="#7.20.1.4">7.20.1.4</a>
33787     direct, <a href="#7.21.8">7.21.8</a>                                                 inttypes.h header, <a href="#7.8">7.8</a>, <a href="#7.30.4">7.30.4</a>
33788     formatted, <a href="#7.21.6">7.21.6</a>, <a href="#K.3.5.3">K.3.5.3</a>                                     isalnum function, <a href="#7.4.1.1">7.4.1.1</a>, <a href="#7.4.1.9">7.4.1.9</a>, <a href="#7.4.1.10">7.4.1.10</a>
33789        wide character, <a href="#7.28.2">7.28.2</a>, <a href="#K.3.9.1">K.3.9.1</a>                             isalpha function, <a href="#7.4.1.1">7.4.1.1</a>, <a href="#7.4.1.2">7.4.1.2</a>
33790     wide character, <a href="#7.28.3">7.28.3</a>                                         isblank function, <a href="#7.4.1.3">7.4.1.3</a>
33791        formatted, <a href="#7.28.2">7.28.2</a>, <a href="#K.3.9.1">K.3.9.1</a>                                  iscntrl function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.4">7.4.1.4</a>, <a href="#7.4.1.7">7.4.1.7</a>,
33792  input/output header, <a href="#7.21">7.21</a>, <a href="#K.3.5">K.3.5</a>                                        <a href="#7.4.1.11">7.4.1.11</a>
33793  input/output, device, <a href="#5.1.2.3">5.1.2.3</a>                                     isdigit function, <a href="#7.4.1.1">7.4.1.1</a>, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.5">7.4.1.5</a>,
33794  int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#6.7.2">6.7.2</a>                       <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.11.1.1">7.11.1.1</a>
33795  int type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>,                   isfinite macro, <a href="#7.12.3.2">7.12.3.2</a>, <a href="#F.3">F.3</a>
33796        <a href="#6.3.1.8">6.3.1.8</a>                                                     isgraph function, <a href="#7.4.1.6">7.4.1.6</a>
33797  INT_FASTN_MAX macros, <a href="#7.20.2.3">7.20.2.3</a>                                    isgreater macro, <a href="#7.12.14.1">7.12.14.1</a>, <a href="#F.3">F.3</a>
33798  INT_FASTN_MIN macros, <a href="#7.20.2.3">7.20.2.3</a>                                    isgreaterequal macro, <a href="#7.12.14.2">7.12.14.2</a>, <a href="#F.3">F.3</a>
33799  int_fastN_t types, <a href="#7.20.1.3">7.20.1.3</a>                                       isinf macro, <a href="#7.12.3.3">7.12.3.3</a>
33800  INT_LEASTN_MAX macros, <a href="#7.20.2.2">7.20.2.2</a>                                   isless macro, <a href="#7.12.14.3">7.12.14.3</a>, <a href="#F.3">F.3</a>
33801  INT_LEASTN_MIN macros, <a href="#7.20.2.2">7.20.2.2</a>                                   islessequal macro, <a href="#7.12.14.4">7.12.14.4</a>, <a href="#F.3">F.3</a>
33802  int_leastN_t types, <a href="#7.20.1.2">7.20.1.2</a>                                      islessgreater macro, <a href="#7.12.14.5">7.12.14.5</a>, <a href="#F.3">F.3</a>
33803  INT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>                          islower function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.2.1">7.4.2.1</a>,
33804  INT_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.12">7.12</a>                                          <a href="#7.4.2.2">7.4.2.2</a>
33805  integer arithmetic functions, <a href="#7.8.2.1">7.8.2.1</a>, <a href="#7.8.2.2">7.8.2.2</a>,                   isnan macro, <a href="#7.12.3.4">7.12.3.4</a>, <a href="#F.3">F.3</a>
33806        <a href="#7.22.6">7.22.6</a>                                                      isnormal macro, <a href="#7.12.3.5">7.12.3.5</a>
33807  integer character constant, <a href="#6.4.4.4">6.4.4.4</a>                               ISO 31-11, <a href="#2">2</a>, <a href="#3">3</a>
33808  integer constant, <a href="#6.4.4.1">6.4.4.1</a>                                         ISO 4217, <a href="#2">2</a>, <a href="#7.11.2.1">7.11.2.1</a>
33809  integer constant expression, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.6">6.6</a>, <a href="#6.7.2.1">6.7.2.1</a>,               ISO 8601, <a href="#2">2</a>, <a href="#7.26.3.5">7.26.3.5</a>
33810        <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.7.10">6.7.10</a>, <a href="#6.8.4.2">6.8.4.2</a>, <a href="#6.10.1">6.10.1</a>,           ISO/IEC 10646, <a href="#2">2</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.4.3">6.4.3</a>, <a href="#6.10.8.2">6.10.8.2</a>
33811        <a href="#7.1.4">7.1.4</a>                                                       ISO/IEC 10976-1, <a href="#H.1">H.1</a>
33812  integer conversion rank, <a href="#6.3.1.1">6.3.1.1</a>                                  ISO/IEC 2382-1, <a href="#2">2</a>, <a href="#3">3</a>
33813  integer promotions, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.3.1.1">6.3.1.1</a>,                  ISO/IEC 646, <a href="#2">2</a>, <a href="#5.2.1.1">5.2.1.1</a>
33814        <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.5.3.3">6.5.3.3</a>, <a href="#6.5.7">6.5.7</a>, <a href="#6.8.4.2">6.8.4.2</a>, <a href="#7.20.2">7.20.2</a>, <a href="#7.20.3">7.20.3</a>,           ISO/IEC 9945-2, <a href="#7.11">7.11</a>
33815        <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>                                          iso646.h header, <a href="#4">4</a>, <a href="#7.9">7.9</a>                          *
33816  integer suffix, <a href="#6.4.4.1">6.4.4.1</a>                                            isprint function, <a href="#5.2.2">5.2.2</a>, <a href="#7.4.1.8">7.4.1.8</a>
33817  integer type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>,               ispunct function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.1.9">7.4.1.9</a>,
33818        <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>                                                          <a href="#7.4.1.11">7.4.1.11</a>
33819  integer types, <a href="#6.2.5">6.2.5</a>, <a href="#7.20">7.20</a>                                        isspace function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.1.9">7.4.1.9</a>,
33820 <!--page 684 -->
33821        <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.3">7.22.1.3</a>,                   LC_ALL macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
33822        <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.2.2">7.28.2.2</a>                                        LC_COLLATE macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.23.4.3">7.23.4.3</a>,
33823  isunordered macro, <a href="#7.12.14.6">7.12.14.6</a>, <a href="#F.3">F.3</a>                                     <a href="#7.28.4.4.2">7.28.4.4.2</a>
33824  isupper function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.4.2.1">7.4.2.1</a>,                   LC_CTYPE macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.22">7.22</a>, <a href="#7.22.7">7.22.7</a>,
33825        <a href="#7.4.2.2">7.4.2.2</a>                                                         <a href="#7.22.8">7.22.8</a>, <a href="#7.28.6">7.28.6</a>, <a href="#7.29.1">7.29.1</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>,
33826  iswalnum function, <a href="#7.29.2.1.1">7.29.2.1.1</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>,                            <a href="#7.29.3.2.1">7.29.3.2.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>, <a href="#K.3.6.4">K.3.6.4</a>, <a href="#K.3.6.5">K.3.6.5</a>
33827        <a href="#7.29.2.1.10">7.29.2.1.10</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   LC_MONETARY macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
33828  iswalpha function, <a href="#7.29.2.1.1">7.29.2.1.1</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>,                      LC_NUMERIC macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
33829        <a href="#7.29.2.2.1">7.29.2.2.1</a>                                                LC_TIME macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.26.3.5">7.26.3.5</a>
33830  iswblank function, <a href="#7.29.2.1.3">7.29.2.1.3</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                       lconv structure type, <a href="#7.11">7.11</a>
33831  iswcntrl function, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.4">7.29.2.1.4</a>,                      LDBL_DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33832        <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                       LDBL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33833  iswctype function, <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>                       LDBL_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33834  iswdigit function, <a href="#7.29.2.1.1">7.29.2.1.1</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>,                      LDBL_HAS_SUBNORM macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33835        <a href="#7.29.2.1.5">7.29.2.1.5</a>, <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>           LDBL_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33836  iswgraph function, <a href="#7.29.2.1">7.29.2.1</a>, <a href="#7.29.2.1.6">7.29.2.1.6</a>,                        LDBL_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33837        <a href="#7.29.2.1.10">7.29.2.1.10</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   LDBL_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33838  iswlower function, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.7">7.29.2.1.7</a>,                      LDBL_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33839        <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.3.1.1">7.29.3.1.1</a>, <a href="#7.29.3.1.2">7.29.3.1.2</a>                        LDBL_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33840  iswprint function, <a href="#7.29.2.1.6">7.29.2.1.6</a>, <a href="#7.29.2.1.8">7.29.2.1.8</a>,                      LDBL_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33841        <a href="#7.29.2.2.1">7.29.2.2.1</a>                                                LDBL_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33842  iswpunct function, <a href="#7.29.2.1">7.29.2.1</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>,                        LDBL_TRUE_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33843        <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>, <a href="#7.29.2.1.10">7.29.2.1.10</a>,                      ldexp functions, <a href="#7.12.6.6">7.12.6.6</a>, <a href="#F.10.3.6">F.10.3.6</a>
33844        <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   ldexp type-generic macro, <a href="#7.24">7.24</a>
33845  iswspace function, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,                          ldiv function, <a href="#7.22.6.2">7.22.6.2</a>
33846        <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.6">7.29.2.1.6</a>,           ldiv_t type, <a href="#7.22">7.22</a>
33847        <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>, <a href="#7.29.2.1.10">7.29.2.1.10</a>,                      leading underscore in identifiers, <a href="#7.1.3">7.1.3</a>
33848        <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   left-shift assignment operator (&lt;&lt;=), <a href="#6.5.16.2">6.5.16.2</a>
33849  iswupper function, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>,                     left-shift operator (&lt;&lt;), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
33850        <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.3.1.1">7.29.3.1.1</a>, <a href="#7.29.3.1.2">7.29.3.1.2</a>                        length
33851  iswxdigit function, <a href="#7.29.2.1.12">7.29.2.1.12</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                        external name, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
33852  isxdigit function, <a href="#7.4.1.12">7.4.1.12</a>, <a href="#7.11.1.1">7.11.1.1</a>                              function name, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
33853  italic type convention, <a href="#3">3</a>, <a href="#6.1">6.1</a>                                     identifier, <a href="#6.4.2.1">6.4.2.1</a>
33854  iteration statements, <a href="#6.8.5">6.8.5</a>                                        internal name, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>
33855                                                                  length function, <a href="#7.22.7.1">7.22.7.1</a>, <a href="#7.23.6.3">7.23.6.3</a>, <a href="#7.28.4.6.1">7.28.4.6.1</a>,
33856  jmp_buf type, <a href="#7.13">7.13</a>                                                    <a href="#7.28.6.3.1">7.28.6.3.1</a>, <a href="#K.3.7.4.4">K.3.7.4.4</a>, <a href="#K.3.9.2.4.1">K.3.9.2.4.1</a>
33857  jump statements, <a href="#6.8.6">6.8.6</a>                                          length modifier, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>,
33858                                                                        <a href="#7.28.2.2">7.28.2.2</a>
33859  keywords, <a href="#6.4.1">6.4.1</a>, <a href="#G.2">G.2</a>, <a href="#J.5.9">J.5.9</a>, <a href="#J.5.10">J.5.10</a>                             less-than operator (&lt;), <a href="#6.5.8">6.5.8</a>
33860  kill_dependency macro, <a href="#5.1.2.4">5.1.2.4</a>, <a href="#7.17.3.1">7.17.3.1</a>                        less-than-or-equal-to operator (&lt;=), <a href="#6.5.8">6.5.8</a>
33861  known constant size, <a href="#6.2.5">6.2.5</a>                                      letter, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>
33862                                                                  lexical elements, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>
33863  L_tmpnam macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.4.4">7.21.4.4</a>                                lgamma functions, <a href="#7.12.8.3">7.12.8.3</a>, <a href="#F.10.5.3">F.10.5.3</a>
33864  L_tmpnam_s macro, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                              lgamma type-generic macro, <a href="#7.24">7.24</a>
33865  label name, <a href="#6.2.1">6.2.1</a>, <a href="#6.2.3">6.2.3</a>                                        library, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7">7</a>, <a href="#K.3">K.3</a>
33866  labeled statement, <a href="#6.8.1">6.8.1</a>                                           future directions, <a href="#7.30">7.30</a>
33867  labs function, <a href="#7.22.6.1">7.22.6.1</a>                                            summary, <a href="#B">B</a>
33868  language, <a href="#6">6</a>                                                        terms, <a href="#7.1.1">7.1.1</a>
33869     future directions, <a href="#6.11">6.11</a>                                         use of functions, <a href="#7.1.4">7.1.4</a>
33870     syntax summary, <a href="#A">A</a>                                            lifetime, <a href="#6.2.4">6.2.4</a>
33871  Latin alphabet, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.2.1">6.4.2.1</a>                                  limits
33872 <!--page 685 -->
33873     environmental, see environmental limits                      <a href="#6.3.1.6">6.3.1.6</a>, <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>
33874     implementation, see implementation limits               long double _Imaginary type, <a href="#G.2">G.2</a>
33875     numerical, see numerical limits                         long double suffix, l or <a href="#L">L</a>, <a href="#6.4.4.2">6.4.4.2</a>
33876     translation, see translation limits                     long double type, <a href="#6.2.5">6.2.5</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.7.2">6.7.2</a>,
33877  limits.h header, <a href="#4">4</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.2.5">6.2.5</a>, <a href="#7.10">7.10</a>                      <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.2">F.2</a>
33878  line buffered stream, <a href="#7.21.3">7.21.3</a>                               long double type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>,
33879  line number, <a href="#6.10.4">6.10.4</a>, <a href="#6.10.8.1">6.10.8.1</a>                                   <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>
33880  line preprocessing directive, <a href="#6.10.4">6.10.4</a>                       long int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.1">7.21.6.1</a>,
33881  lines, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#7.21.2">7.21.2</a>                                          <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
33882     preprocessing directive, <a href="#6.10">6.10</a>                           long int type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>,
33883  linkage, <a href="#6.2.2">6.2.2</a>, <a href="#6.7">6.7</a>, <a href="#6.7.4">6.7.4</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.9">6.9</a>, <a href="#6.9.2">6.9.2</a>,                <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
33884        <a href="#6.11.2">6.11.2</a>                                               long integer suffix, l or <a href="#L">L</a>, <a href="#6.4.4.1">6.4.4.1</a>
33885  llabs function, <a href="#7.22.6.1">7.22.6.1</a>                                   long long int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>,
33886  lldiv function, <a href="#7.22.6.2">7.22.6.2</a>                                        <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
33887  lldiv_t type, <a href="#7.22">7.22</a>                                         long long int type conversion, <a href="#6.3.1.1">6.3.1.1</a>,
33888  LLONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                           <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
33889        <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           long long integer suffix, ll or LL, <a href="#6.4.4.1">6.4.4.1</a>
33890  LLONG_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                      LONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>
33891        <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           LONG_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>
33892  llrint functions, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#F.3">F.3</a>, <a href="#F.10.6.5">F.10.6.5</a>                  longjmp function, <a href="#7.13.1.1">7.13.1.1</a>, <a href="#7.13.2.1">7.13.2.1</a>, <a href="#7.22.4.4">7.22.4.4</a>,
33893  llrint type-generic macro, <a href="#7.24">7.24</a>                                 <a href="#7.22.4.7">7.22.4.7</a>
33894  llround functions, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.10.6.7">F.10.6.7</a>                      loop body, <a href="#6.8.5">6.8.5</a>
33895  llround type-generic macro, <a href="#7.24">7.24</a>                           low-order bit, <a href="#3.6">3.6</a>
33896  local time, <a href="#7.26.1">7.26.1</a>                                         lowercase letter, <a href="#5.2.1">5.2.1</a>
33897  locale, <a href="#3.4.2">3.4.2</a>                                              lrint functions, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#F.3">F.3</a>, <a href="#F.10.6.5">F.10.6.5</a>
33898  locale-specific behavior, <a href="#3.4.2">3.4.2</a>, <a href="#J.4">J.4</a>                        lrint type-generic macro, <a href="#7.24">7.24</a>
33899  locale.h header, <a href="#7.11">7.11</a>, <a href="#7.30.5">7.30.5</a>                              lround functions, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.10.6.7">F.10.6.7</a>
33900  localeconv function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>                    lround type-generic macro, <a href="#7.24">7.24</a>
33901  localization, <a href="#7.11">7.11</a>                                         lvalue, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.1">6.5.1</a>, <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.3.1">6.5.3.1</a>, <a href="#6.5.16">6.5.16</a>,
33902  localtime function, <a href="#7.26.3.4">7.26.3.4</a>                                    <a href="#6.7.2.4">6.7.2.4</a>
33903  localtime_s function, <a href="#K.3.8.2.4">K.3.8.2.4</a>                            lvalue conversion, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.16">6.5.16</a>, <a href="#6.5.16.1">6.5.16.1</a>,
33904  log functions, <a href="#7.12.6.7">7.12.6.7</a>, <a href="#F.10.3.7">F.10.3.7</a>                               <a href="#6.5.16.2">6.5.16.2</a>
33905  log type-generic macro, <a href="#7.24">7.24</a>
33906  log10 functions, <a href="#7.12.6.8">7.12.6.8</a>, <a href="#F.10.3.8">F.10.3.8</a>                        macro argument substitution, <a href="#6.10.3.1">6.10.3.1</a>
33907  log10 type-generic macro, <a href="#7.24">7.24</a>                             macro definition
33908  log1p functions, <a href="#7.12.6.9">7.12.6.9</a>, <a href="#F.10.3.9">F.10.3.9</a>                          library function, <a href="#7.1.4">7.1.4</a>
33909  log1p type-generic macro, <a href="#7.24">7.24</a>                             macro invocation, <a href="#6.10.3">6.10.3</a>
33910  log2 functions, <a href="#7.12.6.10">7.12.6.10</a>, <a href="#F.10.3.10">F.10.3.10</a>                       macro name, <a href="#6.10.3">6.10.3</a>
33911  log2 type-generic macro, <a href="#7.24">7.24</a>                                length, <a href="#5.2.4.1">5.2.4.1</a>
33912  logarithmic functions                                        predefined, <a href="#6.10.8">6.10.8</a>, <a href="#6.11.9">6.11.9</a>
33913     complex, <a href="#7.3.7">7.3.7</a>, <a href="#G.6.3">G.6.3</a>                                     redefinition, <a href="#6.10.3">6.10.3</a>
33914     real, <a href="#7.12.6">7.12.6</a>, <a href="#F.10.3">F.10.3</a>                                      scope, <a href="#6.10.3.5">6.10.3.5</a>
33915  logb functions, <a href="#7.12.6.11">7.12.6.11</a>, <a href="#F.3">F.3</a>, <a href="#F.10.3.11">F.10.3.11</a>                  macro parameter, <a href="#6.10.3">6.10.3</a>
33916  logb type-generic macro, <a href="#7.24">7.24</a>                              macro preprocessor, <a href="#6.10">6.10</a>
33917  logical operators                                          macro replacement, <a href="#6.10.3">6.10.3</a>
33918     AND (&amp;&amp;), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.13">6.5.13</a>                               magnitude, complex, <a href="#7.3.8.1">7.3.8.1</a>
33919     negation (!), <a href="#6.5.3.3">6.5.3.3</a>                                   main function, <a href="#5.1.2.2.1">5.1.2.2.1</a>, <a href="#5.1.2.2.3">5.1.2.2.3</a>, <a href="#6.7.3.1">6.7.3.1</a>, <a href="#6.7.4">6.7.4</a>,
33920     OR (||), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.14">6.5.14</a>                                     <a href="#7.21.3">7.21.3</a>
33921  logical source lines, <a href="#5.1.1.2">5.1.1.2</a>                              malloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.4">7.22.3.4</a>, <a href="#7.22.3.5">7.22.3.5</a>
33922  long double _Complex type, <a href="#6.2.5">6.2.5</a>                           manipulation functions
33923  long double _Complex type conversion,                        complex, <a href="#7.3.9">7.3.9</a>
33924 <!--page 686 -->
33925    real, <a href="#7.12.11">7.12.11</a>, <a href="#F.10.8">F.10.8</a>                                    modf functions, <a href="#7.12.6.12">7.12.6.12</a>, <a href="#F.10.3.12">F.10.3.12</a>
33926  matching failure, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.10">7.28.2.10</a>,           modifiable lvalue, <a href="#6.3.2.1">6.3.2.1</a>
33927       <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>                     modification order, <a href="#5.1.2.4">5.1.2.4</a>
33928  math.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#7.12">7.12</a>, <a href="#7.24">7.24</a>, <a href="#F">F</a>,              modulus functions, <a href="#7.12.6.12">7.12.6.12</a>
33929       <a href="#F.10">F.10</a>, <a href="#J.5.17">J.5.17</a>                                          modulus, complex, <a href="#7.3.8.1">7.3.8.1</a>
33930  MATH_ERREXCEPT macro, <a href="#7.12">7.12</a>, <a href="#F.10">F.10</a>                           mtx_destroy function, <a href="#7.25.4.1">7.25.4.1</a>
33931  math_errhandling macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.12">7.12</a>, <a href="#F.10">F.10</a>                  mtx_init function, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.4.2">7.25.4.2</a>
33932  MATH_ERRNO macro, <a href="#7.12">7.12</a>                                     mtx_lock function, <a href="#7.25.4.3">7.25.4.3</a>
33933  max_align_t type, <a href="#7.19">7.19</a>                                     mtx_t type, <a href="#7.25.1">7.25.1</a>
33934  maximum functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.10.9">F.10.9</a>                         mtx_timedlock function, <a href="#7.25.4.4">7.25.4.4</a>
33935  MB_CUR_MAX macro, <a href="#7.1.1">7.1.1</a>, <a href="#7.22">7.22</a>, <a href="#7.22.7.2">7.22.7.2</a>,                   mtx_trylock function, <a href="#7.25.4.5">7.25.4.5</a>
33936       <a href="#7.22.7.3">7.22.7.3</a>, <a href="#7.27.1.2">7.27.1.2</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>,             mtx_unlock function, <a href="#7.25.4.3">7.25.4.3</a>, <a href="#7.25.4.4">7.25.4.4</a>,
33937       <a href="#K.3.6.4.1">K.3.6.4.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>                                     <a href="#7.25.4.5">7.25.4.5</a>, <a href="#7.25.4.6">7.25.4.6</a>
33938  MB_LEN_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.1.1">7.1.1</a>, <a href="#7.22">7.22</a>                   multibyte character, <a href="#3.7.2">3.7.2</a>, <a href="#5.2.1.2">5.2.1.2</a>, <a href="#6.4.4.4">6.4.4.4</a>
33939  mblen function, <a href="#7.22.7.1">7.22.7.1</a>, <a href="#7.28.6.3">7.28.6.3</a>                         multibyte conversion functions
33940  mbrlen function, <a href="#7.28.6.3.1">7.28.6.3.1</a>                                  wide character, <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>
33941  mbrtoc16 function, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27.1.1">7.27.1.1</a>                     extended, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>
33942  mbrtoc32 function, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27.1.3">7.27.1.3</a>                     restartable, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>
33943  mbrtowc function, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,                wide string, <a href="#7.22.8">7.22.8</a>, <a href="#K.3.6.5">K.3.6.5</a>
33944       <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.6.3.1">7.28.6.3.1</a>, <a href="#7.28.6.3.2">7.28.6.3.2</a>,                restartable, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>
33945       <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#K.3.6.5.1">K.3.6.5.1</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>                    multibyte string, <a href="#7.1.1">7.1.1</a>
33946  mbsinit function, <a href="#7.28.6.2.1">7.28.6.2.1</a>                               multibyte/wide character conversion functions,
33947  mbsrtowcs function, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>                       <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>
33948  mbsrtowcs_s function, <a href="#K.3.9.3.2">K.3.9.3.2</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>                 extended, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>
33949  mbstate_t type, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.1">7.21.6.1</a>,                    restartable, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>
33950       <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.27">7.27</a>, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.1">7.28.2.1</a>,             multibyte/wide string conversion functions,
33951       <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.6">7.28.6</a>, <a href="#7.28.6.2.1">7.28.6.2.1</a>, <a href="#7.28.6.3">7.28.6.3</a>,                    <a href="#7.22.8">7.22.8</a>, <a href="#K.3.6.5">K.3.6.5</a>
33952       <a href="#7.28.6.3.1">7.28.6.3.1</a>, <a href="#7.28.6.4">7.28.6.4</a>                                    restartable, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>
33953  mbstowcs function, <a href="#6.4.5">6.4.5</a>, <a href="#7.22.8.1">7.22.8.1</a>, <a href="#7.28.6.4">7.28.6.4</a>               multidimensional array, <a href="#6.5.2.1">6.5.2.1</a>
33954  mbstowcs_s function, <a href="#K.3.6.5.1">K.3.6.5.1</a>                             multiplication assignment operator (*=), <a href="#6.5.16.2">6.5.16.2</a>
33955  mbtowc function, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.22.7.1">7.22.7.1</a>, <a href="#7.22.7.2">7.22.7.2</a>,              multiplication operator (*), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>,
33956       <a href="#7.22.8.1">7.22.8.1</a>, <a href="#7.28.6.3">7.28.6.3</a>                                         <a href="#G.5.1">G.5.1</a>
33957  member access operators (. and -&gt;), <a href="#6.5.2.3">6.5.2.3</a>                multiplicative expressions, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
33958  member alignment, <a href="#6.7.2.1">6.7.2.1</a>
33959  memchr function, <a href="#7.23.5.1">7.23.5.1</a>                                  n-char sequence, <a href="#7.22.1.3">7.22.1.3</a>
33960  memcmp function, <a href="#7.23.4">7.23.4</a>, <a href="#7.23.4.1">7.23.4.1</a>                          n-wchar sequence, <a href="#7.28.4.1.1">7.28.4.1.1</a>
33961  memcpy function, <a href="#7.23.2.1">7.23.2.1</a>                                  name
33962  memcpy_s function, <a href="#K.3.7.1.1">K.3.7.1.1</a>                                 external, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
33963  memmove function, <a href="#7.23.2.2">7.23.2.2</a>                                   file, <a href="#7.21.3">7.21.3</a>
33964  memmove_s function, <a href="#K.3.7.1.2">K.3.7.1.2</a>                                internal, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>
33965  memory location, <a href="#3.14">3.14</a>                                        label, <a href="#6.2.3">6.2.3</a>
33966  memory management functions, <a href="#7.22.3">7.22.3</a>                          structure/union member, <a href="#6.2.3">6.2.3</a>
33967  memory_order type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.3">7.17.3</a>                          name spaces, <a href="#6.2.3">6.2.3</a>
33968  memset function, <a href="#7.23.6.1">7.23.6.1</a>, <a href="#K.3.7.4.1">K.3.7.4.1</a>                       named label, <a href="#6.8.1">6.8.1</a>
33969  memset_s function, <a href="#K.3.7.4.1">K.3.7.4.1</a>                               NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>
33970  minimum functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.10.9">F.10.9</a>                         nan functions, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#F.2.1">F.2.1</a>, <a href="#F.10.8.2">F.10.8.2</a>
33971  minus operator, unary, <a href="#6.5.3.3">6.5.3.3</a>                             NAN macro, <a href="#7.12">7.12</a>, <a href="#F.2.1">F.2.1</a>
33972  miscellaneous functions                                    NDEBUG macro, <a href="#7.2">7.2</a>
33973    string, <a href="#7.23.6">7.23.6</a>, <a href="#K.3.7.4">K.3.7.4</a>                                  nearbyint functions, <a href="#7.12.9.3">7.12.9.3</a>, <a href="#7.12.9.4">7.12.9.4</a>, <a href="#F.3">F.3</a>,
33974    wide string, <a href="#7.28.4.6">7.28.4.6</a>, <a href="#K.3.9.2.4">K.3.9.2.4</a>                              <a href="#F.10.6.3">F.10.6.3</a>
33975  mktime function, <a href="#7.26.2.3">7.26.2.3</a>                                  nearbyint type-generic macro, <a href="#7.24">7.24</a>
33976 <!--page 687 -->
33977  nearest integer functions, <a href="#7.12.9">7.12.9</a>, <a href="#F.10.6">F.10.6</a>                       operating system, <a href="#5.1.2.1">5.1.2.1</a>, <a href="#7.22.4.8">7.22.4.8</a>
33978  negation operator (!), <a href="#6.5.3.3">6.5.3.3</a>                                  operations on files, <a href="#7.21.4">7.21.4</a>, <a href="#K.3.5.1">K.3.5.1</a>
33979  negative zero, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.12.11.1">7.12.11.1</a>                               operator, <a href="#6.4.6">6.4.6</a>
33980  new-line character, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>, <a href="#6.10">6.10</a>, <a href="#6.10.4">6.10.4</a>           operators, <a href="#6.5">6.5</a>
33981  new-line escape sequence (\n), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,                     additive, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>
33982       <a href="#7.4.1.10">7.4.1.10</a>                                                      alignof, <a href="#6.5.3.4">6.5.3.4</a>
33983  nextafter functions, <a href="#7.12.11.3">7.12.11.3</a>, <a href="#7.12.11.4">7.12.11.4</a>, <a href="#F.3">F.3</a>,                    assignment, <a href="#6.5.16">6.5.16</a>
33984       <a href="#F.10.8.3">F.10.8.3</a>                                                      associativity, <a href="#6.5">6.5</a>
33985  nextafter type-generic macro, <a href="#7.24">7.24</a>                                 equality, <a href="#6.5.9">6.5.9</a>
33986  nexttoward functions, <a href="#7.12.11.4">7.12.11.4</a>, <a href="#F.3">F.3</a>, <a href="#F.10.8.4">F.10.8.4</a>                     multiplicative, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
33987  nexttoward type-generic macro, <a href="#7.24">7.24</a>                                postfix, <a href="#6.5.2">6.5.2</a>
33988  no linkage, <a href="#6.2.2">6.2.2</a>                                                  precedence, <a href="#6.5">6.5</a>
33989  no-return function, <a href="#6.7.4">6.7.4</a>                                          preprocessing, <a href="#6.10.1">6.10.1</a>, <a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.3.3">6.10.3.3</a>, <a href="#6.10.9">6.10.9</a>
33990  non-stop floating-point control mode, <a href="#7.6.4.2">7.6.4.2</a>                       relational, <a href="#6.5.8">6.5.8</a>
33991  nongraphic characters, <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                              shift, <a href="#6.5.7">6.5.7</a>
33992  nonlocal jumps header, <a href="#7.13">7.13</a>                                        sizeof, <a href="#6.5.3.4">6.5.3.4</a>
33993  norm, complex, <a href="#7.3.8.1">7.3.8.1</a>                                             unary, <a href="#6.5.3">6.5.3</a>
33994  normalized broken-down time, <a href="#K.3.8.1">K.3.8.1</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>                    unary arithmetic, <a href="#6.5.3.3">6.5.3.3</a>
33995  not macro, <a href="#7.9">7.9</a>                                                  optional features, see conditional features
33996  not-equal-to operator, see inequality operator                  or macro, <a href="#7.9">7.9</a>
33997  not_eq macro, <a href="#7.9">7.9</a>                                               OR operators
33998  null character (\0), <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>                         bitwise exclusive (^), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>
33999    padding of binary stream, <a href="#7.21.2">7.21.2</a>                                 bitwise exclusive assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>
34000  NULL macro, <a href="#7.11">7.11</a>, <a href="#7.19">7.19</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.22">7.22</a>, <a href="#7.23.1">7.23.1</a>,                      bitwise inclusive (|), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>
34001       <a href="#7.26.1">7.26.1</a>, <a href="#7.28.1">7.28.1</a>                                                bitwise inclusive assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>
34002  null pointer, <a href="#6.3.2.3">6.3.2.3</a>                                              logical (||), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.14">6.5.14</a>
34003  null pointer constant, <a href="#6.3.2.3">6.3.2.3</a>                                  or_eq macro, <a href="#7.9">7.9</a>
34004  null preprocessing directive, <a href="#6.10.7">6.10.7</a>                            order of allocated storage, <a href="#7.22.3">7.22.3</a>
34005  null statement, <a href="#6.8.3">6.8.3</a>                                           order of evaluation, <a href="#6.5">6.5</a>, <a href="#6.5.16">6.5.16</a>, <a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.3.3">6.10.3.3</a>,
34006  null wide character, <a href="#7.1.1">7.1.1</a>                                            see also sequence points
34007  number classification macros, <a href="#7.12">7.12</a>, <a href="#7.12.3.1">7.12.3.1</a>                     ordinary identifier name space, <a href="#6.2.3">6.2.3</a>
34008  numeric conversion functions, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1">7.22.1</a>                   orientation of stream, <a href="#7.21.2">7.21.2</a>, <a href="#7.28.3.5">7.28.3.5</a>
34009    wide string, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1">7.28.4.1</a>                                out-of-bounds store, <a href="#L.2.1">L.2.1</a>
34010  numerical limits, <a href="#5.2.4.2">5.2.4.2</a>                                       outer scope, <a href="#6.2.1">6.2.1</a>
34011                                                                  over-aligned, <a href="#6.2.8">6.2.8</a>
34012  object, <a href="#3.15">3.15</a>
34013  object representation, <a href="#6.2.6.1">6.2.6.1</a>                                  padding
34014  object type, <a href="#6.2.5">6.2.5</a>                                                binary stream, <a href="#7.21.2">7.21.2</a>
34015  object-like macro, <a href="#6.10.3">6.10.3</a>                                         bits, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.20.1.1">7.20.1.1</a>
34016  observable behavior, <a href="#5.1.2.3">5.1.2.3</a>                                      structure/union, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.7.2.1">6.7.2.1</a>
34017  obsolescence, <a href="#6.11">6.11</a>, <a href="#7.30">7.30</a>                                        parameter, <a href="#3.16">3.16</a>
34018  octal constant, <a href="#6.4.4.1">6.4.4.1</a>                                           array, <a href="#6.9.1">6.9.1</a>
34019  octal digit, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#6.4.4.4">6.4.4.4</a>                                     ellipsis, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.10.3">6.10.3</a>
34020  octal-character escape sequence (\octal digits),                  function, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7">6.7</a>, <a href="#6.9.1">6.9.1</a>
34021       <a href="#6.4.4.4">6.4.4.4</a>                                                      macro, <a href="#6.10.3">6.10.3</a>
34022  offsetof macro, <a href="#7.19">7.19</a>                                              main function, <a href="#5.1.2.2.1">5.1.2.2.1</a>
34023  on-off switch, <a href="#6.10.6">6.10.6</a>                                             program, <a href="#5.1.2.2.1">5.1.2.2.1</a>
34024  once_flag type, <a href="#7.25.1">7.25.1</a>                                          parameter type list, <a href="#6.7.6.3">6.7.6.3</a>
34025  ONCE_FLAG_INIT macro, <a href="#7.25.1">7.25.1</a>                                    parentheses punctuator (( )), <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.5</a>
34026  ones' complement, <a href="#6.2.6.2">6.2.6.2</a>                                       parenthesized expression, <a href="#6.5.1">6.5.1</a>
34027  operand, <a href="#6.4.6">6.4.6</a>, <a href="#6.5">6.5</a>                                             parse state, <a href="#7.21.2">7.21.2</a>
34028 <!--page 688 -->
34029  perform a trap, <a href="#3.19.5">3.19.5</a>                                        preprocessor, <a href="#6.10">6.10</a>
34030  permitted form of initializer, <a href="#6.6">6.6</a>                            PRIcFASTN macros, <a href="#7.8.1">7.8.1</a>
34031  perror function, <a href="#7.21.10.4">7.21.10.4</a>                                    PRIcLEASTN macros, <a href="#7.8.1">7.8.1</a>
34032  phase angle, complex, <a href="#7.3.9.1">7.3.9.1</a>                                 PRIcMAX macros, <a href="#7.8.1">7.8.1</a>
34033  physical source lines, <a href="#5.1.1.2">5.1.1.2</a>                                PRIcN macros, <a href="#7.8.1">7.8.1</a>
34034  placemarker, <a href="#6.10.3.3">6.10.3.3</a>                                         PRIcPTR macros, <a href="#7.8.1">7.8.1</a>
34035  plus operator, unary, <a href="#6.5.3.3">6.5.3.3</a>                                 primary expression, <a href="#6.5.1">6.5.1</a>
34036  pointer arithmetic, <a href="#6.5.6">6.5.6</a>                                     printf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.3">7.21.6.3</a>, <a href="#7.21.6.10">7.21.6.10</a>,
34037  pointer comparison, <a href="#6.5.8">6.5.8</a>                                           <a href="#K.3.5.3.3">K.3.5.3.3</a>
34038  pointer declarator, <a href="#6.7.6.1">6.7.6.1</a>                                   printf_s function, <a href="#K.3.5.3.3">K.3.5.3.3</a>
34039  pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                                printing character, <a href="#5.2.2">5.2.2</a>, <a href="#7.4">7.4</a>, <a href="#7.4.1.8">7.4.1.8</a>
34040  pointer to function, <a href="#6.5.2.2">6.5.2.2</a>                                  printing wide character, <a href="#7.29.2">7.29.2</a>
34041  pointer type, <a href="#6.2.5">6.2.5</a>                                           program diagnostics, <a href="#7.2.1">7.2.1</a>
34042  pointer type conversion, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>                     program execution, <a href="#5.1.2.2.2">5.1.2.2.2</a>, <a href="#5.1.2.3">5.1.2.3</a>
34043  pointer, null, <a href="#6.3.2.3">6.3.2.3</a>                                        program file, <a href="#5.1.1.1">5.1.1.1</a>
34044  pole error, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.5.3">7.12.5.3</a>, <a href="#7.12.6.7">7.12.6.7</a>, <a href="#7.12.6.8">7.12.6.8</a>,             program image, <a href="#5.1.1.2">5.1.1.2</a>
34045       <a href="#7.12.6.9">7.12.6.9</a>, <a href="#7.12.6.10">7.12.6.10</a>, <a href="#7.12.6.11">7.12.6.11</a>, <a href="#7.12.7.4">7.12.7.4</a>,                program name (argv[0]), <a href="#5.1.2.2.1">5.1.2.2.1</a>
34046       <a href="#7.12.8.3">7.12.8.3</a>, <a href="#7.12.8.4">7.12.8.4</a>                                       program parameters, <a href="#5.1.2.2.1">5.1.2.2.1</a>
34047  portability, <a href="#4">4</a>, <a href="#J">J</a>                                             program startup, <a href="#5.1.2">5.1.2</a>, <a href="#5.1.2.1">5.1.2.1</a>, <a href="#5.1.2.2.1">5.1.2.2.1</a>
34048  position indicator, file, see file position indicator           program structure, <a href="#5.1.1.1">5.1.1.1</a>
34049  positive difference, <a href="#7.12.12.1">7.12.12.1</a>                                program termination, <a href="#5.1.2">5.1.2</a>, <a href="#5.1.2.1">5.1.2.1</a>, <a href="#5.1.2.2.3">5.1.2.2.3</a>,
34050  positive difference functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.10.9">F.10.9</a>                      <a href="#5.1.2.3">5.1.2.3</a>
34051  postfix decrement operator (--), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>              program, conforming, <a href="#4">4</a>
34052  postfix expressions, <a href="#6.5.2">6.5.2</a>                                     program, strictly conforming, <a href="#4">4</a>
34053  postfix increment operator (++), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>              promotions
34054  pow functions, <a href="#7.12.7.4">7.12.7.4</a>, <a href="#F.10.4.4">F.10.4.4</a>                                default argument, <a href="#6.5.2.2">6.5.2.2</a>
34055  pow type-generic macro, <a href="#7.24">7.24</a>                                     integer, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.3.1.1">6.3.1.1</a>
34056  power functions                                               prototype, see function prototype
34057    complex, <a href="#7.3.8">7.3.8</a>, <a href="#G.6.4">G.6.4</a>                                       pseudo-random sequence functions, <a href="#7.22.2">7.22.2</a>
34058    real, <a href="#7.12.7">7.12.7</a>, <a href="#F.10.4">F.10.4</a>                                        PTRDIFF_MAX macro, <a href="#7.20.3">7.20.3</a>
34059  pp-number, <a href="#6.4.8">6.4.8</a>                                              PTRDIFF_MIN macro, <a href="#7.20.3">7.20.3</a>
34060  pragma operator, <a href="#6.10.9">6.10.9</a>                                       ptrdiff_t type, <a href="#7.17.1">7.17.1</a>, <a href="#7.19">7.19</a>, <a href="#7.20.3">7.20.3</a>, <a href="#7.21.6.1">7.21.6.1</a>,
34061  pragma preprocessing directive, <a href="#6.10.6">6.10.6</a>, <a href="#6.11.8">6.11.8</a>                      <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
34062  precedence of operators, <a href="#6.5">6.5</a>                                  punctuators, <a href="#6.4.6">6.4.6</a>
34063  precedence of syntax rules, <a href="#5.1.1.2">5.1.1.2</a>                           putc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.7">7.21.7.7</a>, <a href="#7.21.7.8">7.21.7.8</a>
34064  precision, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>               putchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.8">7.21.7.8</a>
34065    excess, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>                         puts function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.9">7.21.7.9</a>
34066  predefined macro names, <a href="#6.10.8">6.10.8</a>, <a href="#6.11.9">6.11.9</a>                         putwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.8">7.28.3.8</a>, <a href="#7.28.3.9">7.28.3.9</a>
34067  prefix decrement operator (--), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.1">6.5.3.1</a>               putwchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.9">7.28.3.9</a>
34068  prefix increment operator (++), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.1">6.5.3.1</a>
34069  preprocessing concatenation, <a href="#6.10.3.3">6.10.3.3</a>                         qsort function, <a href="#7.22.5">7.22.5</a>, <a href="#7.22.5.2">7.22.5.2</a>
34070  preprocessing directives, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10">6.10</a>                       qsort_s function, <a href="#K.3.6.3">K.3.6.3</a>, <a href="#K.3.6.3.2">K.3.6.3.2</a>
34071  preprocessing file, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#6.10">6.10</a>                              qualified types, <a href="#6.2.5">6.2.5</a>
34072  preprocessing numbers, <a href="#6.4">6.4</a>, <a href="#6.4.8">6.4.8</a>                             qualified version of type, <a href="#6.2.5">6.2.5</a>
34073  preprocessing operators                                       question-mark escape sequence (\?), <a href="#6.4.4.4">6.4.4.4</a>
34074    #, <a href="#6.10.3.2">6.10.3.2</a>                                                 quick_exit function, <a href="#7.22.4.3">7.22.4.3</a>, <a href="#7.22.4.4">7.22.4.4</a>,
34075    ##, <a href="#6.10.3.3">6.10.3.3</a>                                                     <a href="#7.22.4.7">7.22.4.7</a>
34076    _Pragma, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.9">6.10.9</a>                                    quiet NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>
34077    defined, <a href="#6.10.1">6.10.1</a>
34078  preprocessing tokens, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, <a href="#6.10">6.10</a>                      raise function, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.14.2.1">7.14.2.1</a>, <a href="#7.22.4.1">7.22.4.1</a>
34079  preprocessing translation unit, <a href="#5.1.1.1">5.1.1.1</a>                       rand function, <a href="#7.22">7.22</a>, <a href="#7.22.2.1">7.22.2.1</a>, <a href="#7.22.2.2">7.22.2.2</a>
34080 <!--page 689 -->
34081  RAND_MAX macro, <a href="#7.22">7.22</a>, <a href="#7.22.2.1">7.22.2.1</a>                               restrict-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.3">6.7.3</a>
34082  range                                                        return statement, <a href="#6.8.6.4">6.8.6.4</a>, <a href="#F.6">F.6</a>
34083     excess, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>                       rewind function, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.5">7.21.9.5</a>,
34084  range error, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.5.4">7.12.5.4</a>, <a href="#7.12.5.5">7.12.5.5</a>, <a href="#7.12.6.1">7.12.6.1</a>,                 <a href="#7.28.3.10">7.28.3.10</a>
34085        <a href="#7.12.6.2">7.12.6.2</a>, <a href="#7.12.6.3">7.12.6.3</a>, <a href="#7.12.6.5">7.12.6.5</a>, <a href="#7.12.6.6">7.12.6.6</a>,                right-shift assignment operator (&gt;&gt;=), <a href="#6.5.16.2">6.5.16.2</a>
34086        <a href="#7.12.6.13">7.12.6.13</a>, <a href="#7.12.7.3">7.12.7.3</a>, <a href="#7.12.7.4">7.12.7.4</a>, <a href="#7.12.8.2">7.12.8.2</a>,               right-shift operator (&gt;&gt;), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
34087        <a href="#7.12.8.3">7.12.8.3</a>, <a href="#7.12.8.4">7.12.8.4</a>, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#7.12.9.7">7.12.9.7</a>,                rint functions, <a href="#7.12.9.4">7.12.9.4</a>, <a href="#F.3">F.3</a>, <a href="#F.10.6.4">F.10.6.4</a>
34088        <a href="#7.12.11.3">7.12.11.3</a>, <a href="#7.12.12.1">7.12.12.1</a>, <a href="#7.12.13.1">7.12.13.1</a>                        rint type-generic macro, <a href="#7.24">7.24</a>
34089  rank, see integer conversion rank                            round functions, <a href="#7.12.9.6">7.12.9.6</a>, <a href="#F.10.6.6">F.10.6.6</a>
34090  read-modify-write operations, <a href="#5.1.2.4">5.1.2.4</a>                        round type-generic macro, <a href="#7.24">7.24</a>
34091  real floating type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>,              rounding mode, floating point, <a href="#5.2.4.2.2">5.2.4.2.2</a>
34092        <a href="#6.3.1.7">6.3.1.7</a>, <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>                                      RSIZE_MAX macro, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>,
34093  real floating types, <a href="#6.2.5">6.2.5</a>                                          <a href="#K.3.5.3.5">K.3.5.3.5</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>, <a href="#K.3.5.3.12">K.3.5.3.12</a>, <a href="#K.3.5.3.13">K.3.5.3.13</a>,
34094  real type domain, <a href="#6.2.5">6.2.5</a>                                            <a href="#K.3.5.4.1">K.3.5.4.1</a>, <a href="#K.3.6.2.1">K.3.6.2.1</a>, <a href="#K.3.6.3.1">K.3.6.3.1</a>, <a href="#K.3.6.3.2">K.3.6.3.2</a>,
34095  real types, <a href="#6.2.5">6.2.5</a>                                                  <a href="#K.3.6.4.1">K.3.6.4.1</a>, <a href="#K.3.6.5.1">K.3.6.5.1</a>, <a href="#K.3.6.5.2">K.3.6.5.2</a>, <a href="#K.3.7.1.1">K.3.7.1.1</a>,
34096  real-floating, <a href="#7.12.3">7.12.3</a>                                               <a href="#K.3.7.1.2">K.3.7.1.2</a>, <a href="#K.3.7.1.3">K.3.7.1.3</a>, <a href="#K.3.7.1.4">K.3.7.1.4</a>, <a href="#K.3.7.2.1">K.3.7.2.1</a>,
34097  realloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.5">7.22.3.5</a>                                 <a href="#K.3.7.2.2">K.3.7.2.2</a>, <a href="#K.3.7.3.1">K.3.7.3.1</a>, <a href="#K.3.7.4.1">K.3.7.4.1</a>, <a href="#K.3.7.4.2">K.3.7.4.2</a>,
34098  recommended practice, <a href="#3.17">3.17</a>                                         <a href="#K.3.8.2.1">K.3.8.2.1</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>, <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>,
34099  recursion, <a href="#6.5.2.2">6.5.2.2</a>                                                 <a href="#K.3.9.1.8">K.3.9.1.8</a>, <a href="#K.3.9.1.9">K.3.9.1.9</a>, <a href="#K.3.9.2.1.1">K.3.9.2.1.1</a>, <a href="#K.3.9.2.1.2">K.3.9.2.1.2</a>,
34100  recursive function call, <a href="#6.5.2.2">6.5.2.2</a>                                   <a href="#K.3.9.2.1.3">K.3.9.2.1.3</a>, <a href="#K.3.9.2.1.4">K.3.9.2.1.4</a>, <a href="#K.3.9.2.2.1">K.3.9.2.2.1</a>,
34101  redefinition of macro, <a href="#6.10.3">6.10.3</a>                                       <a href="#K.3.9.2.2.2">K.3.9.2.2.2</a>, <a href="#K.3.9.2.3.1">K.3.9.2.3.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>,
34102  reentrancy, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.3">5.2.3</a>                                         <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>, <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
34103     library functions, <a href="#7.1.4">7.1.4</a>                                  rsize_t type, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>,
34104  referenced type, <a href="#6.2.5">6.2.5</a>                                             <a href="#K.3.6">K.3.6</a>, <a href="#K.3.7">K.3.7</a>, <a href="#K.3.8">K.3.8</a>, <a href="#K.3.9">K.3.9</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
34105  register storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.9">6.9</a>                  runtime-constraint, <a href="#3.18">3.18</a>
34106  relational expressions, <a href="#6.5.8">6.5.8</a>                                Runtime-constraint handling functions, <a href="#K.3.6.1">K.3.6.1</a>
34107  relaxed atomic operations, <a href="#5.1.2.4">5.1.2.4</a>                           rvalue, <a href="#6.3.2.1">6.3.2.1</a>
34108  release fence, <a href="#7.17.4">7.17.4</a>
34109  release operation, <a href="#5.1.2.4">5.1.2.4</a>                                   same scope, <a href="#6.2.1">6.2.1</a>
34110  release sequence, <a href="#5.1.2.4">5.1.2.4</a>                                    save calling environment function, <a href="#7.13.1">7.13.1</a>
34111  reliability of data, interrupted, <a href="#5.1.2.3">5.1.2.3</a>                    scalar types, <a href="#6.2.5">6.2.5</a>
34112  remainder assignment operator (%=), <a href="#6.5.16.2">6.5.16.2</a>                 scalbln function, <a href="#7.12.6.13">7.12.6.13</a>, <a href="#F.3">F.3</a>, <a href="#F.10.3.13">F.10.3.13</a>
34113  remainder functions, <a href="#7.12.10">7.12.10</a>, <a href="#F.10.7">F.10.7</a>                         scalbln type-generic macro, <a href="#7.24">7.24</a>
34114  remainder functions, <a href="#7.12.10.2">7.12.10.2</a>, <a href="#7.12.10.3">7.12.10.3</a>, <a href="#F.3">F.3</a>,              scalbn function, <a href="#7.12.6.13">7.12.6.13</a>, <a href="#F.3">F.3</a>, <a href="#F.10.3.13">F.10.3.13</a>
34115        <a href="#F.10.7.2">F.10.7.2</a>                                               scalbn type-generic macro, <a href="#7.24">7.24</a>
34116  remainder operator (%), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>                       scanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.4">7.21.6.4</a>, <a href="#7.21.6.11">7.21.6.11</a>
34117  remainder type-generic macro, <a href="#7.24">7.24</a>                           scanf_s function, <a href="#K.3.5.3.4">K.3.5.3.4</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>
34118  remove function, <a href="#7.21.4.1">7.21.4.1</a>, <a href="#7.21.4.4">7.21.4.4</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>               scanlist, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>
34119  remquo functions, <a href="#7.12.10.3">7.12.10.3</a>, <a href="#F.3">F.3</a>, <a href="#F.10.7.3">F.10.7.3</a>                   scanset, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>
34120  remquo type-generic macro, <a href="#7.24">7.24</a>                              SCHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
34121  rename function, <a href="#7.21.4.2">7.21.4.2</a>                                    SCHAR_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
34122  representations of types, <a href="#6.2.6">6.2.6</a>                              SCNcFASTN macros, <a href="#7.8.1">7.8.1</a>
34123     pointer, <a href="#6.2.5">6.2.5</a>                                            SCNcLEASTN macros, <a href="#7.8.1">7.8.1</a>
34124  rescanning and replacement, <a href="#6.10.3.4">6.10.3.4</a>                         SCNcMAX macros, <a href="#7.8.1">7.8.1</a>
34125  reserved identifiers, <a href="#6.4.1">6.4.1</a>, <a href="#7.1.3">7.1.3</a>, <a href="#K.3.1.2">K.3.1.2</a>                   SCNcN macros, <a href="#7.8.1">7.8.1</a>
34126  restartable multibyte/wide character conversion              SCNcPTR macros, <a href="#7.8.1">7.8.1</a>
34127        functions, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>                 scope of identifier, <a href="#6.2.1">6.2.1</a>, <a href="#6.9.2">6.9.2</a>
34128  restartable multibyte/wide string conversion                 search functions
34129        functions, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>                           string, <a href="#7.23.5">7.23.5</a>, <a href="#K.3.7.3">K.3.7.3</a>
34130  restore calling environment function, <a href="#7.13.2">7.13.2</a>                   utility, <a href="#7.22.5">7.22.5</a>, <a href="#K.3.6.3">K.3.6.3</a>
34131  restrict type qualifier, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.3.1">6.7.3.1</a>                         wide string, <a href="#7.28.4.5">7.28.4.5</a>, <a href="#K.3.9.2.3">K.3.9.2.3</a>
34132 <!--page 690 -->
34133  SEEK_CUR macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.9.2">7.21.9.2</a>                                 sign and magnitude, <a href="#6.2.6.2">6.2.6.2</a>
34134  SEEK_END macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.9.2">7.21.9.2</a>                                 sign bit, <a href="#6.2.6.2">6.2.6.2</a>
34135  SEEK_SET macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.9.2">7.21.9.2</a>                                 signal function, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>
34136  selection statements, <a href="#6.8.4">6.8.4</a>                                      signal handler, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.3">5.2.3</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.14.2.1">7.14.2.1</a>
34137  self-referential structure, <a href="#6.7.2.3">6.7.2.3</a>                              signal handling functions, <a href="#7.14.1">7.14.1</a>
34138  semicolon punctuator (;), <a href="#6.7">6.7</a>, <a href="#6.7.2.1">6.7.2.1</a>, <a href="#6.8.3">6.8.3</a>,                   signal.h header, <a href="#7.14">7.14</a>, <a href="#7.30.6">7.30.6</a>
34139        <a href="#6.8.5">6.8.5</a>, <a href="#6.8.6">6.8.6</a>                                               signaling NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#F.2.1">F.2.1</a>
34140  separate compilation, <a href="#5.1.1.1">5.1.1.1</a>                                    signals, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.3">5.2.3</a>, <a href="#7.14.1">7.14.1</a>
34141  separate translation, <a href="#5.1.1.1">5.1.1.1</a>                                    signbit macro, <a href="#7.12.3.6">7.12.3.6</a>, <a href="#F.3">F.3</a>
34142  sequence points, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.5.13">6.5.13</a>, <a href="#6.5.14">6.5.14</a>,               signed char type, <a href="#6.2.5">6.2.5</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
34143        <a href="#6.5.15">6.5.15</a>, <a href="#6.5.17">6.5.17</a>, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.3.1">6.7.3.1</a>, <a href="#6.7.6">6.7.6</a>, <a href="#6.8">6.8</a>,                     <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
34144        <a href="#7.1.4">7.1.4</a>, <a href="#7.21.6">7.21.6</a>, <a href="#7.22.5">7.22.5</a>, <a href="#7.28.2">7.28.2</a>, <a href="#C">C</a>, <a href="#K.3.6.3">K.3.6.3</a>                  signed character, <a href="#6.3.1.1">6.3.1.1</a>
34145  sequenced after, see sequenced before                            signed integer types, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.4.4.1">6.4.4.1</a>
34146  sequenced before, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5">6.5</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.5.2.4">6.5.2.4</a>,                signed type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>,
34147        <a href="#6.5.16">6.5.16</a>, see also indeterminately sequenced,                     <a href="#6.3.1.8">6.3.1.8</a>
34148        unsequenced                                                signed types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>
34149  sequencing of statements, <a href="#6.8">6.8</a>                                    significand part, <a href="#6.4.4.2">6.4.4.2</a>
34150  set_constraint_handler_s function,                               SIGSEGV macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>
34151        <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6.1.1">K.3.6.1.1</a>, <a href="#K.3.6.1.2">K.3.6.1.2</a>, <a href="#K.3.6.1.3">K.3.6.1.3</a>                   SIGTERM macro, <a href="#7.14">7.14</a>
34152  setbuf function, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.1">7.21.5.1</a>, <a href="#7.21.5.5">7.21.5.5</a>                      simple assignment operator (=), <a href="#6.5.16.1">6.5.16.1</a>
34153  setjmp macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.13.1.1">7.13.1.1</a>, <a href="#7.13.2.1">7.13.2.1</a>                          sin functions, <a href="#7.12.4.6">7.12.4.6</a>, <a href="#F.10.1.6">F.10.1.6</a>
34154  setjmp.h header, <a href="#7.13">7.13</a>                                            sin type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
34155  setlocale function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>                           single-byte character, <a href="#3.7.1">3.7.1</a>, <a href="#5.2.1.2">5.2.1.2</a>
34156  setvbuf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.1">7.21.5.1</a>,                      single-byte/wide character conversion functions,
34157        <a href="#7.21.5.5">7.21.5.5</a>, <a href="#7.21.5.6">7.21.5.6</a>                                              <a href="#7.28.6.1">7.28.6.1</a>
34158  shall, <a href="#4">4</a>                                                         single-precision arithmetic, <a href="#5.1.2.3">5.1.2.3</a>
34159  shift expressions, <a href="#6.5.7">6.5.7</a>                                         single-quote escape sequence (\'), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>
34160  shift sequence, <a href="#7.1.1">7.1.1</a>                                            singularity, <a href="#7.12.1">7.12.1</a>
34161  shift states, <a href="#5.2.1.2">5.2.1.2</a>                                            sinh functions, <a href="#7.12.5.5">7.12.5.5</a>, <a href="#F.10.2.5">F.10.2.5</a>
34162  short identifier, character, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.3">6.4.3</a>                       sinh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
34163  short int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.1">7.21.6.1</a>,                 SIZE_MAX macro, <a href="#7.20.3">7.20.3</a>
34164        <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>                               size_t type, <a href="#6.2.8">6.2.8</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#7.19">7.19</a>, <a href="#7.20.3">7.20.3</a>, <a href="#7.21.1">7.21.1</a>,
34165  short int type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>,                          <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22">7.22</a>, <a href="#7.23.1">7.23.1</a>, <a href="#7.26.1">7.26.1</a>, <a href="#7.27">7.27</a>,
34166        <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>                                                <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>,
34167  SHRT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                             <a href="#K.3.5">K.3.5</a>, <a href="#K.3.6">K.3.6</a>, <a href="#K.3.7">K.3.7</a>, <a href="#K.3.8">K.3.8</a>, <a href="#K.3.9">K.3.9</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
34168  SHRT_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                        sizeof operator, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3">6.5.3</a>, <a href="#6.5.3.4">6.5.3.4</a>
34169  side effects, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.3.2.2">6.3.2.2</a>, <a href="#6.5">6.5</a>, <a href="#6.5.2.4">6.5.2.4</a>,           snprintf function, <a href="#7.21.6.5">7.21.6.5</a>, <a href="#7.21.6.12">7.21.6.12</a>,
34170        <a href="#6.5.16">6.5.16</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.8.3">6.8.3</a>, <a href="#7.6">7.6</a>, <a href="#7.6.1">7.6.1</a>, <a href="#7.21.7.5">7.21.7.5</a>,                     <a href="#K.3.5.3.5">K.3.5.3.5</a>
34171        <a href="#7.21.7.7">7.21.7.7</a>, <a href="#7.28.3.6">7.28.3.6</a>, <a href="#7.28.3.8">7.28.3.8</a>, <a href="#F.8.1">F.8.1</a>, <a href="#F.9.1">F.9.1</a>,                snprintf_s function, <a href="#K.3.5.3.5">K.3.5.3.5</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>
34172        <a href="#F.9.3">F.9.3</a>                                                      snwprintf_s function, <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>
34173  SIG_ATOMIC_MAX macro, <a href="#7.20.3">7.20.3</a>                                     sorting utility functions, <a href="#7.22.5">7.22.5</a>, <a href="#K.3.6.3">K.3.6.3</a>
34174  SIG_ATOMIC_MIN macro, <a href="#7.20.3">7.20.3</a>                                     source character set, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>
34175  sig_atomic_t type, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>,                      source file, <a href="#5.1.1.1">5.1.1.1</a>
34176        <a href="#7.20.3">7.20.3</a>                                                        name, <a href="#6.10.4">6.10.4</a>, <a href="#6.10.8.1">6.10.8.1</a>
34177  SIG_DFL macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                    source file inclusion, <a href="#6.10.2">6.10.2</a>
34178  SIG_ERR macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                    source lines, <a href="#5.1.1.2">5.1.1.2</a>
34179  SIG_IGN macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                    source text, <a href="#5.1.1.2">5.1.1.2</a>
34180  SIGABRT macro, <a href="#7.14">7.14</a>, <a href="#7.22.4.1">7.22.4.1</a>                                    space character (' '), <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>, <a href="#7.4.1.3">7.4.1.3</a>,
34181  SIGFPE macro, <a href="#7.12.1">7.12.1</a>, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#J.5.17">J.5.17</a>                          <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>
34182  SIGILL macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                     sprintf function, <a href="#7.21.6.6">7.21.6.6</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>
34183  SIGINT macro, <a href="#7.14">7.14</a>                                               sprintf_s function, <a href="#K.3.5.3.5">K.3.5.3.5</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>
34184 <!--page 691 -->
34185  sqrt functions, <a href="#7.12.7.5">7.12.7.5</a>, <a href="#F.3">F.3</a>, <a href="#F.10.4.5">F.10.4.5</a>                         do, <a href="#6.8.5.2">6.8.5.2</a>
34186  sqrt type-generic macro, <a href="#7.24">7.24</a>                                   else, <a href="#6.8.4.1">6.8.4.1</a>
34187  srand function, <a href="#7.22.2.2">7.22.2.2</a>                                        expression, <a href="#6.8.3">6.8.3</a>
34188  sscanf function, <a href="#7.21.6.7">7.21.6.7</a>, <a href="#7.21.6.14">7.21.6.14</a>                            for, <a href="#6.8.5.3">6.8.5.3</a>
34189  sscanf_s function, <a href="#K.3.5.3.7">K.3.5.3.7</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                        goto, <a href="#6.8.6.1">6.8.6.1</a>
34190  standard error stream, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.10.4">7.21.10.4</a>                if, <a href="#6.8.4.1">6.8.4.1</a>
34191  standard headers, <a href="#4">4</a>, <a href="#7.1.2">7.1.2</a>                                      iteration, <a href="#6.8.5">6.8.5</a>
34192     <a href="#7.2">&lt;assert.h&gt;</a>, <a href="#7.2">7.2</a>                                              jump, <a href="#6.8.6">6.8.6</a>
34193     <a href="#7.3">&lt;complex.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.3">7.3</a>,                labeled, <a href="#6.8.1">6.8.1</a>
34194          <a href="#7.24">7.24</a>, <a href="#7.30.1">7.30.1</a>, <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>                               null, <a href="#6.8.3">6.8.3</a>
34195     <a href="#7.4">&lt;ctype.h&gt;</a>, <a href="#7.4">7.4</a>, <a href="#7.30.2">7.30.2</a>                                       return, <a href="#6.8.6.4">6.8.6.4</a>, <a href="#F.6">F.6</a>
34196     <a href="#7.5">&lt;errno.h&gt;</a>, <a href="#7.5">7.5</a>, <a href="#7.30.3">7.30.3</a>, <a href="#K.3.2">K.3.2</a>                                selection, <a href="#6.8.4">6.8.4</a>
34197     <a href="#7.6">&lt;fenv.h&gt;</a>, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F">F</a>, <a href="#H">H</a>                sequencing, <a href="#6.8">6.8</a>
34198     <a href="#7.7">&lt;float.h&gt;</a>, <a href="#4">4</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.7">7.7</a>, <a href="#7.22.1.3">7.22.1.3</a>,                      switch, <a href="#6.8.4.2">6.8.4.2</a>
34199          <a href="#7.28.4.1.1">7.28.4.1.1</a>                                              while, <a href="#6.8.5.1">6.8.5.1</a>
34200     <a href="#7.8">&lt;inttypes.h&gt;</a>, <a href="#7.8">7.8</a>, <a href="#7.30.4">7.30.4</a>                                 static assertions, <a href="#6.7.10">6.7.10</a>
34201     <a href="#7.9">&lt;iso646.h&gt;</a>, <a href="#4">4</a>, <a href="#7.9">7.9</a>                                        static storage duration, <a href="#6.2.4">6.2.4</a>
34202     <a href="#7.10">&lt;limits.h&gt;</a>, <a href="#4">4</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.2.5">6.2.5</a>, <a href="#7.10">7.10</a>                     static storage-class specifier, <a href="#6.2.2">6.2.2</a>, <a href="#6.2.4">6.2.4</a>, <a href="#6.7.1">6.7.1</a>
34203     <a href="#7.11">&lt;locale.h&gt;</a>, <a href="#7.11">7.11</a>, <a href="#7.30.5">7.30.5</a>                                  static, in array declarators, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.6.3">6.7.6.3</a>
34204     <a href="#7.12">&lt;math.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#7.12">7.12</a>, <a href="#7.24">7.24</a>, <a href="#F">F</a>, <a href="#F.10">F.10</a>,            static_assert declaration, <a href="#6.7.10">6.7.10</a>
34205          <a href="#J.5.17">J.5.17</a>                                               static_assert macro, <a href="#7.2">7.2</a>
34206     <a href="#7.13">&lt;setjmp.h&gt;</a>, <a href="#7.13">7.13</a>                                          stdalign.h header, <a href="#4">4</a>, <a href="#7.15">7.15</a>
34207     <a href="#7.14">&lt;signal.h&gt;</a>, <a href="#7.14">7.14</a>, <a href="#7.30.6">7.30.6</a>                                  stdarg.h header, <a href="#4">4</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#7.16">7.16</a>
34208     <a href="#7.15">&lt;stdalign.h&gt;</a>, <a href="#4">4</a>, <a href="#7.15">7.15</a>                                     stdatomic.h header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.17">7.17</a>
34209     <a href="#7.16">&lt;stdarg.h&gt;</a>, <a href="#4">4</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#7.16">7.16</a>                              stdbool.h header, <a href="#4">4</a>, <a href="#7.18">7.18</a>, <a href="#7.30.7">7.30.7</a>, <a href="#H">H</a>
34210     <a href="#7.17">&lt;stdatomic.h&gt;</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.17">7.17</a>                      STDC, <a href="#6.10.6">6.10.6</a>, <a href="#6.11.8">6.11.8</a>
34211     <a href="#7.18">&lt;stdbool.h&gt;</a>, <a href="#4">4</a>, <a href="#7.18">7.18</a>, <a href="#7.30.7">7.30.7</a>, <a href="#H">H</a>                           stddef.h header, <a href="#4">4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.4.4.4">6.4.4.4</a>,
34212     <a href="#7.19">&lt;stddef.h&gt;</a>, <a href="#4">4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.4.4.4">6.4.4.4</a>,                       <a href="#6.4.5">6.4.5</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#6.5.6">6.5.6</a>, <a href="#7.19">7.19</a>, <a href="#K.3.3">K.3.3</a>
34213          <a href="#6.4.5">6.4.5</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#6.5.6">6.5.6</a>, <a href="#7.19">7.19</a>, <a href="#K.3.3">K.3.3</a>                   stderr macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>
34214     <a href="#7.20">&lt;stdint.h&gt;</a>, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.10.1">6.10.1</a>, <a href="#7.8">7.8</a>, <a href="#7.20">7.20</a>,                stdin macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.4">7.21.6.4</a>,
34215          <a href="#7.30.8">7.30.8</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>                                       <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.28.2.12">7.28.2.12</a>, <a href="#7.28.3.7">7.28.3.7</a>, <a href="#K.3.5.3.4">K.3.5.3.4</a>,
34216     <a href="#7.21">&lt;stdio.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21">7.21</a>, <a href="#7.30.9">7.30.9</a>, <a href="#F">F</a>, <a href="#K.3.5">K.3.5</a>                    <a href="#K.3.5.4.1">K.3.5.4.1</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>
34217     <a href="#7.22">&lt;stdlib.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.22">7.22</a>, <a href="#7.30.10">7.30.10</a>, <a href="#F">F</a>,                  stdint.h header, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.10.1">6.10.1</a>, <a href="#7.8">7.8</a>, <a href="#7.20">7.20</a>,
34218          <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6">K.3.6</a>                                             <a href="#7.30.8">7.30.8</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>
34219     <a href="#7.23">&lt;string.h&gt;</a>, <a href="#7.23">7.23</a>, <a href="#7.30.11">7.30.11</a>, <a href="#K.3.7">K.3.7</a>                          stdio.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21">7.21</a>, <a href="#7.30.9">7.30.9</a>, <a href="#F">F</a>, <a href="#K.3.5">K.3.5</a>
34220     <a href="#7.24">&lt;tgmath.h&gt;</a>, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                     stdlib.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.22">7.22</a>, <a href="#7.30.10">7.30.10</a>, <a href="#F">F</a>,
34221     <a href="#7.25">&lt;threads.h&gt;</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.25">7.25</a>                              <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6">K.3.6</a>
34222     <a href="#7.26">&lt;time.h&gt;</a>, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>                                     stdout macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.3">7.21.6.3</a>,
34223     <a href="#7.27">&lt;uchar.h&gt;</a>, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27">7.27</a>                                 <a href="#7.21.7.8">7.21.7.8</a>, <a href="#7.21.7.9">7.21.7.9</a>, <a href="#7.28.2.11">7.28.2.11</a>, <a href="#7.28.3.9">7.28.3.9</a>
34224     <a href="#7.28">&lt;wchar.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28">7.28</a>, <a href="#7.30.12">7.30.12</a>,              storage duration, <a href="#6.2.4">6.2.4</a>
34225          <a href="#F">F</a>, <a href="#K.3.9">K.3.9</a>                                             storage order of array, <a href="#6.5.2.1">6.5.2.1</a>
34226     <a href="#7.29">&lt;wctype.h&gt;</a>, <a href="#7.29">7.29</a>, <a href="#7.30.13">7.30.13</a>                                 storage unit (bit-field), <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.7.2.1">6.7.2.1</a>
34227  standard input stream, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                        storage-class specifiers, <a href="#6.7.1">6.7.1</a>, <a href="#6.11.5">6.11.5</a>
34228  standard integer types, <a href="#6.2.5">6.2.5</a>                                strcat function, <a href="#7.23.3.1">7.23.3.1</a>
34229  standard output stream, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                       strcat_s function, <a href="#K.3.7.2.1">K.3.7.2.1</a>
34230  standard signed integer types, <a href="#6.2.5">6.2.5</a>                         strchr function, <a href="#7.23.5.2">7.23.5.2</a>
34231  state-dependent encoding, <a href="#5.2.1.2">5.2.1.2</a>, <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>           strcmp function, <a href="#7.23.4">7.23.4</a>, <a href="#7.23.4.2">7.23.4.2</a>
34232  statements, <a href="#6.8">6.8</a>                                              strcoll function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.23.4.3">7.23.4.3</a>, <a href="#7.23.4.5">7.23.4.5</a>
34233     break, <a href="#6.8.6.3">6.8.6.3</a>                                            strcpy function, <a href="#7.23.2.3">7.23.2.3</a>
34234     compound, <a href="#6.8.2">6.8.2</a>                                           strcpy_s function, <a href="#K.3.7.1.3">K.3.7.1.3</a>
34235     continue, <a href="#6.8.6.2">6.8.6.2</a>                                         strcspn function, <a href="#7.23.5.3">7.23.5.3</a>
34236 <!--page 692 -->
34237  streams, <a href="#7.21.2">7.21.2</a>, <a href="#7.22.4.4">7.22.4.4</a>                                                <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.2.2">7.28.2.2</a>
34238     fully buffered, <a href="#7.21.3">7.21.3</a>                                          strtoull function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1.2">7.22.1.2</a>, <a href="#7.22.1.4">7.22.1.4</a>
34239     line buffered, <a href="#7.21.3">7.21.3</a>                                           strtoumax function, <a href="#7.8.2.3">7.8.2.3</a>
34240     orientation, <a href="#7.21.2">7.21.2</a>                                             struct hack, see flexible array member
34241     standard error, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                  struct lconv, <a href="#7.11">7.11</a>
34242     standard input, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                  struct tm, <a href="#7.26.1">7.26.1</a>
34243     standard output, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                 structure
34244     unbuffered, <a href="#7.21.3">7.21.3</a>                                                 arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
34245  strerror function, <a href="#7.21.10.4">7.21.10.4</a>, <a href="#7.23.6.2">7.23.6.2</a>                                content, <a href="#6.7.2.3">6.7.2.3</a>
34246  strerror_s function, <a href="#K.3.7.4.2">K.3.7.4.2</a>, <a href="#K.3.7.4.3">K.3.7.4.3</a>                             dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>
34247  strerrorlen_s function, <a href="#K.3.7.4.3">K.3.7.4.3</a>                                     initialization, <a href="#6.7.9">6.7.9</a>
34248  strftime function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.26.3">7.26.3</a>, <a href="#7.26.3.5">7.26.3.5</a>,                        member alignment, <a href="#6.7.2.1">6.7.2.1</a>
34249        <a href="#7.28.5.1">7.28.5.1</a>, <a href="#K.3.8.2">K.3.8.2</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>                         member name space, <a href="#6.2.3">6.2.3</a>
34250  stricter, <a href="#6.2.8">6.2.8</a>                                                       member operator (.), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.3">6.5.2.3</a>
34251  strictly conforming program, <a href="#4">4</a>                                        pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
34252  string, <a href="#7.1.1">7.1.1</a>                                                         specifier, <a href="#6.7.2.1">6.7.2.1</a>
34253     comparison functions, <a href="#7.23.4">7.23.4</a>                                       tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>
34254     concatenation functions, <a href="#7.23.3">7.23.3</a>, <a href="#K.3.7.2">K.3.7.2</a>                           type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.1">6.7.2.1</a>
34255     conversion functions, <a href="#7.11.1.1">7.11.1.1</a>                                  strxfrm function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.23.4.5">7.23.4.5</a>
34256     copying functions, <a href="#7.23.2">7.23.2</a>, <a href="#K.3.7.1">K.3.7.1</a>                              subnormal floating-point numbers, <a href="#5.2.4.2.2">5.2.4.2.2</a>
34257     library function conventions, <a href="#7.23.1">7.23.1</a>                            subscripting, <a href="#6.5.2.1">6.5.2.1</a>
34258     literal, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.5.1">6.5.1</a>, <a href="#6.7.9">6.7.9</a>           subtraction assignment operator (-=), <a href="#6.5.16.2">6.5.16.2</a>
34259     miscellaneous functions, <a href="#7.23.6">7.23.6</a>, <a href="#K.3.7.4">K.3.7.4</a>                        subtraction operator (-), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>
34260     numeric conversion functions, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1">7.22.1</a>                   suffix
34261     search functions, <a href="#7.23.5">7.23.5</a>, <a href="#K.3.7.3">K.3.7.3</a>                                  floating constant, <a href="#6.4.4.2">6.4.4.2</a>
34262  string handling header, <a href="#7.23">7.23</a>, <a href="#K.3.7">K.3.7</a>                                   integer constant, <a href="#6.4.4.1">6.4.4.1</a>
34263  string.h header, <a href="#7.23">7.23</a>, <a href="#7.30.11">7.30.11</a>, <a href="#K.3.7">K.3.7</a>                              switch body, <a href="#6.8.4.2">6.8.4.2</a>
34264  stringizing, <a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.9">6.10.9</a>                                      switch case label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
34265  strlen function, <a href="#7.23.6.3">7.23.6.3</a>                                          switch default label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
34266  strncat function, <a href="#7.23.3.2">7.23.3.2</a>                                         switch statement, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
34267  strncat_s function, <a href="#K.3.7.2.2">K.3.7.2.2</a>                                      swprintf function, <a href="#7.28.2.3">7.28.2.3</a>, <a href="#7.28.2.7">7.28.2.7</a>,
34268  strncmp function, <a href="#7.23.4">7.23.4</a>, <a href="#7.23.4.4">7.23.4.4</a>                                       <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>
34269  strncpy function, <a href="#7.23.2.4">7.23.2.4</a>                                         swprintf_s function, <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>
34270  strncpy_s function, <a href="#K.3.7.1.4">K.3.7.1.4</a>                                      swscanf function, <a href="#7.28.2.4">7.28.2.4</a>, <a href="#7.28.2.8">7.28.2.8</a>
34271  strnlen_s function, <a href="#K.3.7.4.4">K.3.7.4.4</a>                                      swscanf_s function, <a href="#K.3.9.1.5">K.3.9.1.5</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>
34272  stronger, <a href="#6.2.8">6.2.8</a>                                                    symbols, <a href="#3">3</a>
34273  strpbrk function, <a href="#7.23.5.4">7.23.5.4</a>                                         synchronization operation, <a href="#5.1.2.4">5.1.2.4</a>
34274  strrchr function, <a href="#7.23.5.5">7.23.5.5</a>                                         synchronize with, <a href="#5.1.2.4">5.1.2.4</a>
34275  strspn function, <a href="#7.23.5.6">7.23.5.6</a>                                          syntactic categories, <a href="#6.1">6.1</a>
34276  strstr function, <a href="#7.23.5.7">7.23.5.7</a>                                          syntax notation, <a href="#6.1">6.1</a>
34277  strtod function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.3">7.22.1.3</a>,                    syntax rule precedence, <a href="#5.1.1.2">5.1.1.2</a>
34278        <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.3">F.3</a>                                                syntax summary, language, <a href="#A">A</a>
34279  strtof function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.22.1.3">7.22.1.3</a>, <a href="#F.3">F.3</a>                          system function, <a href="#7.22.4.8">7.22.4.8</a>
34280  strtoimax function, <a href="#7.8.2.3">7.8.2.3</a>
34281  strtok function, <a href="#7.23.5.8">7.23.5.8</a>                                          tab characters, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>
34282  strtok_s function, <a href="#K.3.7.3.1">K.3.7.3.1</a>                                       tag compatibility, <a href="#6.2.7">6.2.7</a>
34283  strtol function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.2">7.22.1.2</a>,                      tag name space, <a href="#6.2.3">6.2.3</a>
34284        <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.2.2">7.28.2.2</a>                                           tags, <a href="#6.7.2.3">6.7.2.3</a>
34285  strtold function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.22.1.3">7.22.1.3</a>, <a href="#F.3">F.3</a>                         tan functions, <a href="#7.12.4.7">7.12.4.7</a>, <a href="#F.10.1.7">F.10.1.7</a>
34286  strtoll function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1.2">7.22.1.2</a>, <a href="#7.22.1.4">7.22.1.4</a>                      tan type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
34287  strtoul function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.2">7.22.1.2</a>,                     tanh functions, <a href="#7.12.5.6">7.12.5.6</a>, <a href="#F.10.2.6">F.10.2.6</a>
34288 <!--page 693 -->
34289  tanh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                            toupper function, <a href="#7.4.2.2">7.4.2.2</a>
34290  temporary lifetime, <a href="#6.2.4">6.2.4</a>                                     towctrans function, <a href="#7.29.3.2.1">7.29.3.2.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>
34291  tentative definition, <a href="#6.9.2">6.9.2</a>                                    towlower function, <a href="#7.29.3.1.1">7.29.3.1.1</a>, <a href="#7.29.3.2.1">7.29.3.2.1</a>
34292  terms, <a href="#3">3</a>                                                      towupper function, <a href="#7.29.3.1.2">7.29.3.1.2</a>, <a href="#7.29.3.2.1">7.29.3.2.1</a>
34293  text streams, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.9.4">7.21.9.4</a>           translation environment, <a href="#5">5</a>, <a href="#5.1.1">5.1.1</a>
34294  tgamma functions, <a href="#7.12.8.4">7.12.8.4</a>, <a href="#F.10.5.4">F.10.5.4</a>                          translation limits, <a href="#5.2.4.1">5.2.4.1</a>
34295  tgamma type-generic macro, <a href="#7.24">7.24</a>                               translation phases, <a href="#5.1.1.2">5.1.1.2</a>
34296  tgmath.h header, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                    translation unit, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#6.9">6.9</a>
34297  thrd_create function, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.5.1">7.25.5.1</a>                        trap, see perform a trap
34298  thrd_current function, <a href="#7.25.5.2">7.25.5.2</a>                               trap representation, <a href="#3.19.4">3.19.4</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.2.6.2">6.2.6.2</a>,
34299  thrd_detach function, <a href="#7.25.5.3">7.25.5.3</a>                                      <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.5.2.3">6.5.2.3</a>
34300  thrd_equal function, <a href="#7.25.5.4">7.25.5.4</a>                                 trigonometric functions
34301  thrd_exit function, <a href="#7.25.5.5">7.25.5.5</a>                                     complex, <a href="#7.3.5">7.3.5</a>, <a href="#G.6.1">G.6.1</a>
34302  thrd_join function, <a href="#7.25.5.6">7.25.5.6</a>                                     real, <a href="#7.12.4">7.12.4</a>, <a href="#F.10.1">F.10.1</a>
34303  thrd_sleep function, <a href="#7.25.5.7">7.25.5.7</a>                                 trigraph sequences, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1.1">5.2.1.1</a>
34304  thrd_start_t type, <a href="#7.25.1">7.25.1</a>                                     true macro, <a href="#7.18">7.18</a>
34305  thrd_t type, <a href="#7.25.1">7.25.1</a>                                           trunc functions, <a href="#7.12.9.8">7.12.9.8</a>, <a href="#F.10.6.8">F.10.6.8</a>
34306  thrd_yield function, <a href="#7.25.5.8">7.25.5.8</a>                                 trunc type-generic macro, <a href="#7.24">7.24</a>
34307  thread of execution, <a href="#5.1.2.4">5.1.2.4</a>, <a href="#7.1.4">7.1.4</a>, <a href="#7.6">7.6</a>, <a href="#7.22.4.6">7.22.4.6</a>            truncation, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#7.12.9.8">7.12.9.8</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.3">7.21.5.3</a>
34308  thread storage duration, <a href="#6.2.4">6.2.4</a>, <a href="#7.6">7.6</a>                           truncation toward zero, <a href="#6.5.5">6.5.5</a>
34309  threads header, <a href="#7.25">7.25</a>                                          tss_create function, <a href="#7.25.6.1">7.25.6.1</a>
34310  threads.h header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.25">7.25</a>                       tss_delete function, <a href="#7.25.6.2">7.25.6.2</a>
34311  time                                                          TSS_DTOR_ITERATIONS macro, <a href="#7.25.1">7.25.1</a>
34312     broken down, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.3">7.26.3</a>, <a href="#7.26.3.1">7.26.3.1</a>,           tss_dtor_t type, <a href="#7.25.1">7.25.1</a>
34313           <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#7.26.3.5">7.26.3.5</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>,             tss_get function, <a href="#7.25.6.3">7.25.6.3</a>
34314           <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                                 tss_set function, <a href="#7.25.6.4">7.25.6.4</a>
34315     calendar, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.2">7.26.2.2</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.2.4">7.26.2.4</a>,            tss_t type, <a href="#7.25.1">7.25.1</a>
34316           <a href="#7.26.3.2">7.26.3.2</a>, <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>,             two's complement, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.20.1.1">7.20.1.1</a>
34317           <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                                 type category, <a href="#6.2.5">6.2.5</a>
34318     components, <a href="#7.26.1">7.26.1</a>, <a href="#K.3.8.1">K.3.8.1</a>                                type conversion, <a href="#6.3">6.3</a>
34319     conversion functions, <a href="#7.26.3">7.26.3</a>, <a href="#K.3.8.2">K.3.8.2</a>                      type definitions, <a href="#6.7.8">6.7.8</a>
34320        wide character, <a href="#7.28.5">7.28.5</a>                                  type domain, <a href="#6.2.5">6.2.5</a>, <a href="#G.2">G.2</a>
34321     local, <a href="#7.26.1">7.26.1</a>                                              type names, <a href="#6.7.7">6.7.7</a>
34322     manipulation functions, <a href="#7.26.2">7.26.2</a>                             type punning, <a href="#6.5.2.3">6.5.2.3</a>
34323     normalized broken down, <a href="#K.3.8.1">K.3.8.1</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>                 type qualifiers, <a href="#6.7.3">6.7.3</a>
34324  time function, <a href="#7.26.2.4">7.26.2.4</a>                                       type specifiers, <a href="#6.7.2">6.7.2</a>
34325  time.h header, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>                                    type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
34326  time_t type, <a href="#7.26.1">7.26.1</a>                                           typedef declaration, <a href="#6.7.8">6.7.8</a>
34327  TIME_UTC macro, <a href="#7.25.7.1">7.25.7.1</a>                                      typedef storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.7.8">6.7.8</a>
34328  tm structure type, <a href="#7.26.1">7.26.1</a>, <a href="#7.28.1">7.28.1</a>, <a href="#K.3.8.1">K.3.8.1</a>                    types, <a href="#6.2.5">6.2.5</a>
34329  TMP_MAX macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.21.4.4">7.21.4.4</a>                        atomic, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.2.5">6.2.5</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.3">6.5.2.3</a>,
34330  TMP_MAX_S macro, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                           <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.16.2">6.5.16.2</a>, <a href="#6.7.2.4">6.7.2.4</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.17.6">7.17.6</a>
34331  tmpfile function, <a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.22.4.4">7.22.4.4</a>                             character, <a href="#6.7.9">6.7.9</a>
34332  tmpfile_s function, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                         compatible, <a href="#6.2.7">6.2.7</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.6">6.7.6</a>
34333  tmpnam function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.21.4.4">7.21.4.4</a>,                     complex, <a href="#6.2.5">6.2.5</a>, <a href="#G">G</a>
34334        <a href="#K.3.5.1.2">K.3.5.1.2</a>                                                  composite, <a href="#6.2.7">6.2.7</a>
34335  tmpnam_s function, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                   const qualified, <a href="#6.7.3">6.7.3</a>
34336  token, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, see also preprocessing tokens               conversions, <a href="#6.3">6.3</a>
34337  token concatenation, <a href="#6.10.3.3">6.10.3.3</a>                                    imaginary, <a href="#G">G</a>
34338  token pasting, <a href="#6.10.3.3">6.10.3.3</a>                                          restrict qualified, <a href="#6.7.3">6.7.3</a>
34339  tolower function, <a href="#7.4.2.1">7.4.2.1</a>                                        volatile qualified, <a href="#6.7.3">6.7.3</a>
34340 <!--page 694 -->
34341  uchar.h header, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27">7.27</a>                      universal character name, <a href="#6.4.3">6.4.3</a>
34342  UCHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                unnormalized floating-point numbers, <a href="#5.2.4.2.2">5.2.4.2.2</a>
34343  UINT_FASTN_MAX macros, <a href="#7.20.2.3">7.20.2.3</a>                           unqualified type, <a href="#6.2.5">6.2.5</a>
34344  uint_fastN_t types, <a href="#7.20.1.3">7.20.1.3</a>                              unqualified version of type, <a href="#6.2.5">6.2.5</a>
34345  uint_least16_t type, <a href="#7.27">7.27</a>                                 unsequenced, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5">6.5</a>, <a href="#6.5.16">6.5.16</a>, see also
34346  uint_least32_t type, <a href="#7.27">7.27</a>                                       indeterminately sequenced, sequenced
34347  UINT_LEASTN_MAX macros, <a href="#7.20.2.2">7.20.2.2</a>                                before
34348  uint_leastN_t types, <a href="#7.20.1.2">7.20.1.2</a>                             unsigned char type, <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
34349  UINT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                 unsigned integer suffix, u or <a href="#U">U</a>, <a href="#6.4.4.1">6.4.4.1</a>
34350  UINTMAX_C macro, <a href="#7.20.4.2">7.20.4.2</a>                                 unsigned integer types, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.4.4.1">6.4.4.1</a>
34351  UINTMAX_MAX macro, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.20.2.5">7.20.2.5</a>             unsigned type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>,
34352  uintmax_t type, <a href="#7.20.1.5">7.20.1.5</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,                   <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
34353       <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>                                   unsigned types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
34354  UINTN_C macros, <a href="#7.20.4.1">7.20.4.1</a>                                        <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
34355  UINTN_MAX macros, <a href="#7.20.2.1">7.20.2.1</a>                                unspecified behavior, <a href="#3.4.4">3.4.4</a>, <a href="#4">4</a>, <a href="#J.1">J.1</a>
34356  uintN_t types, <a href="#7.20.1.1">7.20.1.1</a>                                   unspecified value, <a href="#3.19.3">3.19.3</a>
34357  UINTPTR_MAX macro, <a href="#7.20.2.4">7.20.2.4</a>                               uppercase letter, <a href="#5.2.1">5.2.1</a>
34358  uintptr_t type, <a href="#7.20.1.4">7.20.1.4</a>                                  use of library functions, <a href="#7.1.4">7.1.4</a>
34359  ULLONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                    USHRT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
34360       <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           usual arithmetic conversions, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.5.5">6.5.5</a>, <a href="#6.5.6">6.5.6</a>,
34361  ULONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                           <a href="#6.5.8">6.5.8</a>, <a href="#6.5.9">6.5.9</a>, <a href="#6.5.10">6.5.10</a>, <a href="#6.5.11">6.5.11</a>, <a href="#6.5.12">6.5.12</a>, <a href="#6.5.15">6.5.15</a>
34362       <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           UTF-16, <a href="#6.10.8.2">6.10.8.2</a>
34363  unary arithmetic operators, <a href="#6.5.3.3">6.5.3.3</a>                       UTF-32, <a href="#6.10.8.2">6.10.8.2</a>
34364  unary expression, <a href="#6.5.3">6.5.3</a>                                   UTF-8 string literal, see string literal
34365  unary minus operator (-), <a href="#6.5.3.3">6.5.3.3</a>, <a href="#F.3">F.3</a>                    utilities, general, <a href="#7.22">7.22</a>, <a href="#K.3.6">K.3.6</a>
34366  unary operators, <a href="#6.5.3">6.5.3</a>                                       wide string, <a href="#7.28.4">7.28.4</a>, <a href="#K.3.9.2">K.3.9.2</a>
34367  unary plus operator (+), <a href="#6.5.3.3">6.5.3.3</a>
34368  unbuffered stream, <a href="#7.21.3">7.21.3</a>                                 va_arg macro, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.1">7.16.1.1</a>, <a href="#7.16.1.2">7.16.1.2</a>,
34369  undef preprocessing directive, <a href="#6.10.3.5">6.10.3.5</a>, <a href="#7.1.3">7.1.3</a>,                <a href="#7.16.1.4">7.16.1.4</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>,
34370       <a href="#7.1.4">7.1.4</a>                                                     <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>,
34371  undefined behavior, <a href="#3.4.3">3.4.3</a>, <a href="#4">4</a>, <a href="#J.2">J.2</a>                               <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>,
34372  underscore character, <a href="#6.4.2.1">6.4.2.1</a>                                  <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,
34373  underscore, leading, in identifier, <a href="#7.1.3">7.1.3</a>                       <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>
34374  ungetc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>,             va_copy macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.1">7.16.1.1</a>,
34375       <a href="#7.21.9.3">7.21.9.3</a>                                                  <a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.3">7.16.1.3</a>
34376  ungetwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.10">7.28.3.10</a>                       va_end macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.3">7.16.1.3</a>,
34377  Unicode, <a href="#7.27">7.27</a>, see also char16_t type,                         <a href="#7.16.1.4">7.16.1.4</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>,
34378       char32_t type, wchar_t type                               <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>,
34379  Unicode required set, <a href="#6.10.8.2">6.10.8.2</a>                                 <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>,
34380  union                                                          <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,
34381    arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                                 <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>
34382    content, <a href="#6.7.2.3">6.7.2.3</a>                                        va_list type, <a href="#7.16">7.16</a>, <a href="#7.16.1.3">7.16.1.3</a>
34383    dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>                               va_start macro, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.1">7.16.1.1</a>,
34384    initialization, <a href="#6.7.9">6.7.9</a>                                        <a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.3">7.16.1.3</a>, <a href="#7.16.1.4">7.16.1.4</a>, <a href="#7.21.6.8">7.21.6.8</a>,
34385    member alignment, <a href="#6.7.2.1">6.7.2.1</a>                                    <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>, <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>,
34386    member name space, <a href="#6.2.3">6.2.3</a>                                     <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>, <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>,
34387    member operator (.), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.3">6.5.2.3</a>                        <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>,
34388    pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                               <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>,
34389    specifier, <a href="#6.7.2.1">6.7.2.1</a>                                            <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>
34390    tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>                                     value, <a href="#3.19">3.19</a>
34391    type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.1">6.7.2.1</a>                                    value bits, <a href="#6.2.6.2">6.2.6.2</a>
34392 <!--page 695 -->
34393  variable arguments, <a href="#6.10.3">6.10.3</a>, <a href="#7.16">7.16</a>                             vswscanf function, <a href="#7.28.2.8">7.28.2.8</a>
34394  variable arguments header, <a href="#7.16">7.16</a>                              vswscanf_s function, <a href="#K.3.9.1.10">K.3.9.1.10</a>
34395  variable length array, <a href="#6.7.6">6.7.6</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>              vwprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#K.3.9.1.11">K.3.9.1.11</a>
34396  variably modified type, <a href="#6.7.6">6.7.6</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>              vwprintf_s function, <a href="#K.3.9.1.11">K.3.9.1.11</a>
34397  vertical-tab character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>                           vwscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#7.28.3.10">7.28.3.10</a>
34398  vertical-tab escape sequence (\v), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,           vwscanf_s function, <a href="#K.3.9.1.12">K.3.9.1.12</a>
34399       <a href="#7.4.1.10">7.4.1.10</a>
34400  vfprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#K.3.5.3.8">K.3.5.3.8</a>               warnings, <a href="#I">I</a>
34401  vfprintf_s function, <a href="#K.3.5.3.8">K.3.5.3.8</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>,                   wchar.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28">7.28</a>, <a href="#7.30.12">7.30.12</a>,
34402       <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                                      <a href="#F">F</a>, <a href="#K.3.9">K.3.9</a>
34403  vfscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>                 WCHAR_MAX macro, <a href="#7.20.3">7.20.3</a>, <a href="#7.28.1">7.28.1</a>
34404  vfscanf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                   WCHAR_MIN macro, <a href="#7.20.3">7.20.3</a>, <a href="#7.28.1">7.28.1</a>
34405       <a href="#K.3.5.3.14">K.3.5.3.14</a>                                              wchar_t type, <a href="#3.7.3">3.7.3</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.19">7.19</a>,
34406  vfwprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.5">7.28.2.5</a>, <a href="#K.3.9.1.6">K.3.9.1.6</a>                  <a href="#7.20.3">7.20.3</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22">7.22</a>, <a href="#7.28.1">7.28.1</a>,
34407  vfwprintf_s function, <a href="#K.3.9.1.6">K.3.9.1.6</a>                                  <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
34408  vfwscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.3.10">7.28.3.10</a>               wcrtomb function, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,
34409  vfwscanf_s function, <a href="#K.3.9.1.7">K.3.9.1.7</a>                                   <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#K.3.6.5.2">K.3.6.5.2</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>,
34410  visibility of identifier, <a href="#6.2.1">6.2.1</a>                                   <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
34411  visible sequence of side effects, <a href="#5.1.2.4">5.1.2.4</a>                    wcrtomb_s function, <a href="#K.3.9.3.1">K.3.9.3.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>
34412  visible side effect, <a href="#5.1.2.4">5.1.2.4</a>                                 wcscat function, <a href="#7.28.4.3.1">7.28.4.3.1</a>
34413  VLA, see variable length array                               wcscat_s function, <a href="#K.3.9.2.2.1">K.3.9.2.2.1</a>
34414  void expression, <a href="#6.3.2.2">6.3.2.2</a>                                     wcschr function, <a href="#7.28.4.5.1">7.28.4.5.1</a>
34415  void function parameter, <a href="#6.7.6.3">6.7.6.3</a>                             wcscmp function, <a href="#7.28.4.4.1">7.28.4.4.1</a>, <a href="#7.28.4.4.4">7.28.4.4.4</a>
34416  void type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.2.2">6.3.2.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>,                 wcscoll function, <a href="#7.28.4.4.2">7.28.4.4.2</a>, <a href="#7.28.4.4.4">7.28.4.4.4</a>
34417       <a href="#K.3.9.1.2">K.3.9.1.2</a>                                               wcscpy function, <a href="#7.28.4.2.1">7.28.4.2.1</a>
34418  void type conversion, <a href="#6.3.2.2">6.3.2.2</a>                                wcscpy_s function, <a href="#K.3.9.2.1.1">K.3.9.2.1.1</a>
34419  volatile storage, <a href="#5.1.2.3">5.1.2.3</a>                                    wcscspn function, <a href="#7.28.4.5.2">7.28.4.5.2</a>
34420  volatile type qualifier, <a href="#6.7.3">6.7.3</a>                                wcsftime function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.28.5.1">7.28.5.1</a>
34421  volatile-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.3">6.7.3</a>                         wcslen function, <a href="#7.28.4.6.1">7.28.4.6.1</a>
34422  vprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.10">7.21.6.10</a>,               wcsncat function, <a href="#7.28.4.3.2">7.28.4.3.2</a>
34423       <a href="#K.3.5.3.10">K.3.5.3.10</a>                                              wcsncat_s function, <a href="#K.3.9.2.2.2">K.3.9.2.2.2</a>
34424  vprintf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.10">K.3.5.3.10</a>,                   wcsncmp function, <a href="#7.28.4.4.3">7.28.4.4.3</a>
34425       <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                                  wcsncpy function, <a href="#7.28.4.2.2">7.28.4.2.2</a>
34426  vscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.11">7.21.6.11</a>                 wcsncpy_s function, <a href="#K.3.9.2.1.2">K.3.9.2.1.2</a>
34427  vscanf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                    wcsnlen_s function, <a href="#K.3.9.2.4.1">K.3.9.2.4.1</a>
34428       <a href="#K.3.5.3.14">K.3.5.3.14</a>                                              wcspbrk function, <a href="#7.28.4.5.3">7.28.4.5.3</a>
34429  vsnprintf function, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.12">7.21.6.12</a>,                     wcsrchr function, <a href="#7.28.4.5.4">7.28.4.5.4</a>
34430       <a href="#K.3.5.3.12">K.3.5.3.12</a>                                              wcsrtombs function, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>
34431  vsnprintf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                 wcsrtombs_s function, <a href="#K.3.9.3.2">K.3.9.3.2</a>, <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
34432       <a href="#K.3.5.3.12">K.3.5.3.12</a>, <a href="#K.3.5.3.13">K.3.5.3.13</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                      wcsspn function, <a href="#7.28.4.5.5">7.28.4.5.5</a>
34433  vsnwprintf_s function, <a href="#K.3.9.1.8">K.3.9.1.8</a>, <a href="#K.3.9.1.9">K.3.9.1.9</a>                  wcsstr function, <a href="#7.28.4.5.6">7.28.4.5.6</a>
34434  vsprintf function, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.13">7.21.6.13</a>,                      wcstod function, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>
34435       <a href="#K.3.5.3.13">K.3.5.3.13</a>                                              wcstod function, <a href="#7.28.4.1.1">7.28.4.1.1</a>
34436  vsprintf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                  wcstof function, <a href="#7.28.4.1.1">7.28.4.1.1</a>
34437       <a href="#K.3.5.3.12">K.3.5.3.12</a>, <a href="#K.3.5.3.13">K.3.5.3.13</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                      wcstoimax function, <a href="#7.8.2.4">7.8.2.4</a>
34438  vsscanf function, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.14">7.21.6.14</a>                        wcstok function, <a href="#7.28.4.5.7">7.28.4.5.7</a>
34439  vsscanf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                   wcstok_s function, <a href="#K.3.9.2.3.1">K.3.9.2.3.1</a>
34440       <a href="#K.3.5.3.14">K.3.5.3.14</a>                                              wcstol function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,
34441  vswprintf function, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#K.3.9.1.8">K.3.9.1.8</a>,                         <a href="#7.28.4.1.2">7.28.4.1.2</a>
34442       <a href="#K.3.9.1.9">K.3.9.1.9</a>                                               wcstold function, <a href="#7.28.4.1.1">7.28.4.1.1</a>
34443  vswprintf_s function, <a href="#K.3.9.1.8">K.3.9.1.8</a>, <a href="#K.3.9.1.9">K.3.9.1.9</a>                   wcstoll function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>
34444 <!--page 696 -->
34445  wcstombs function, <a href="#7.22.8.2">7.22.8.2</a>, <a href="#7.28.6.4">7.28.6.4</a>                           <a href="#7.29.1">7.29.1</a>
34446  wcstombs_s function, <a href="#K.3.6.5.2">K.3.6.5.2</a>                               wmemchr function, <a href="#7.28.4.5.8">7.28.4.5.8</a>
34447  wcstoul function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,               wmemcmp function, <a href="#7.28.4.4.5">7.28.4.4.5</a>
34448       <a href="#7.28.4.1.2">7.28.4.1.2</a>                                              wmemcpy function, <a href="#7.28.4.2.3">7.28.4.2.3</a>
34449  wcstoull function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>                       wmemcpy_s function, <a href="#K.3.9.2.1.3">K.3.9.2.1.3</a>
34450  wcstoumax function, <a href="#7.8.2.4">7.8.2.4</a>                                  wmemmove function, <a href="#7.28.4.2.4">7.28.4.2.4</a>
34451  wcsxfrm function, <a href="#7.28.4.4.4">7.28.4.4.4</a>                                 wmemmove_s function, <a href="#K.3.9.2.1.4">K.3.9.2.1.4</a>
34452  wctob function, <a href="#7.28.6.1.2">7.28.6.1.2</a>, <a href="#7.29.2.1">7.29.2.1</a>                         wmemset function, <a href="#7.28.4.6.2">7.28.4.6.2</a>
34453  wctomb function, <a href="#7.22.7.3">7.22.7.3</a>, <a href="#7.22.8.2">7.22.8.2</a>, <a href="#7.28.6.3">7.28.6.3</a>                wprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.11">7.28.2.11</a>,
34454  wctomb_s function, <a href="#K.3.6.4.1">K.3.6.4.1</a>                                    <a href="#K.3.9.1.13">K.3.9.1.13</a>
34455  wctrans function, <a href="#7.29.3.2.1">7.29.3.2.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>                     wprintf_s function, <a href="#K.3.9.1.13">K.3.9.1.13</a>
34456  wctrans_t type, <a href="#7.29.1">7.29.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>                           wscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#7.28.2.12">7.28.2.12</a>,
34457  wctype function, <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>                         <a href="#7.28.3.10">7.28.3.10</a>
34458  wctype.h header, <a href="#7.29">7.29</a>, <a href="#7.30.13">7.30.13</a>                               wscanf_s function, <a href="#K.3.9.1.12">K.3.9.1.12</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>
34459  wctype_t type, <a href="#7.29.1">7.29.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>
34460  weaker, <a href="#6.2.8">6.2.8</a>                                                xor macro, <a href="#7.9">7.9</a>
34461  WEOF macro, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>, <a href="#7.28.3.6">7.28.3.6</a>,            xor_eq macro, <a href="#7.9">7.9</a>
34462       <a href="#7.28.3.7">7.28.3.7</a>, <a href="#7.28.3.8">7.28.3.8</a>, <a href="#7.28.3.9">7.28.3.9</a>, <a href="#7.28.3.10">7.28.3.10</a>,                xtime type, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.3.5">7.25.3.5</a>, <a href="#7.25.4.4">7.25.4.4</a>, <a href="#7.25.5.7">7.25.5.7</a>,
34463       <a href="#7.28.6.1.1">7.28.6.1.1</a>, <a href="#7.29.1">7.29.1</a>                                          <a href="#7.25.7.1">7.25.7.1</a>
34464  while statement, <a href="#6.8.5.1">6.8.5.1</a>                                     xtime_get function, <a href="#7.25.7.1">7.25.7.1</a>
34465  white space, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, <a href="#6.10">6.10</a>, <a href="#7.4.1.10">7.4.1.10</a>,
34466       <a href="#7.29.2.1.10">7.29.2.1.10</a>
34467  white-space characters, <a href="#6.4">6.4</a>
34468  wide character, <a href="#3.7.3">3.7.3</a>
34469    case mapping functions, <a href="#7.29.3.1">7.29.3.1</a>
34470       extensible, <a href="#7.29.3.2">7.29.3.2</a>
34471    classification functions, <a href="#7.29.2.1">7.29.2.1</a>
34472       extensible, <a href="#7.29.2.2">7.29.2.2</a>
34473    constant, <a href="#6.4.4.4">6.4.4.4</a>
34474    formatted input/output functions, <a href="#7.28.2">7.28.2</a>,
34475          <a href="#K.3.9.1">K.3.9.1</a>
34476    input functions, <a href="#7.21.1">7.21.1</a>
34477    input/output functions, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3">7.28.3</a>
34478    output functions, <a href="#7.21.1">7.21.1</a>
34479    single-byte conversion functions, <a href="#7.28.6.1">7.28.6.1</a>
34480  wide string, <a href="#7.1.1">7.1.1</a>
34481  wide string comparison functions, <a href="#7.28.4.4">7.28.4.4</a>
34482  wide string concatenation functions, <a href="#7.28.4.3">7.28.4.3</a>,
34483       <a href="#K.3.9.2.2">K.3.9.2.2</a>
34484  wide string copying functions, <a href="#7.28.4.2">7.28.4.2</a>, <a href="#K.3.9.2.1">K.3.9.2.1</a>
34485  wide string literal, see string literal
34486  wide string miscellaneous functions, <a href="#7.28.4.6">7.28.4.6</a>,
34487       <a href="#K.3.9.2.4">K.3.9.2.4</a>
34488  wide string numeric conversion functions, <a href="#7.8.2.4">7.8.2.4</a>,
34489       <a href="#7.28.4.1">7.28.4.1</a>
34490  wide string search functions, <a href="#7.28.4.5">7.28.4.5</a>, <a href="#K.3.9.2.3">K.3.9.2.3</a>
34491  wide-oriented stream, <a href="#7.21.2">7.21.2</a>
34492  width, <a href="#6.2.6.2">6.2.6.2</a>
34493  WINT_MAX macro, <a href="#7.20.3">7.20.3</a>
34494  WINT_MIN macro, <a href="#7.20.3">7.20.3</a>
34495  wint_t type, <a href="#7.20.3">7.20.3</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.1">7.28.2.1</a>,
34496 </pre>
34497 <p><small><a href="#Contents">Contents</a></small>
34498 </body></html>