+contents, +header links, bold forward ref
[c-standard] / n1256.html
1 <html><head><title>C</title></head><body>
2 <pre><!--page 1 indent 0-->
3 WG14/N1256                Committee Draft -- Septermber 7, 2007                   ISO/IEC 9899:TC3
4
5
6 </pre>
7
8 <a name="Contents" href="#Contents"><h2>Contents</h2></a>
9 <ul>
10 <li><a href="#Foreword">Foreword</a>
11 <li><a href="#Introduction">Introduction</a>
12 <li><a href="#1">1. Scope</a>
13 <li><a href="#2">2. Normative references</a>
14 <li><a href="#3">3. Terms, definitions, and symbols</a>
15 <li><a href="#4">4. Conformance</a>
16 <li><a href="#5">5. Environment</a>
17 <ul>
18 <li><a href="#5.1">   5.1 Conceptual models</a>
19 <ul>
20 <li><a href="#5.1.1">        5.1.1  Translation environment</a>
21 <li><a href="#5.1.2">        5.1.2  Execution environments</a>
22 </ul>
23 <li><a href="#5.2">   5.2 Environmental considerations</a>
24 <ul>
25 <li><a href="#5.2.1">        5.2.1 Character sets</a>
26 <li><a href="#5.2.2">        5.2.2  Character display semantics</a>
27 <li><a href="#5.2.3">        5.2.3 Signals and interrupts</a>
28 <li><a href="#5.2.4">        5.2.4  Environmental limits</a>
29 </ul>
30 </ul>
31 <li><a href="#6">6. Language</a>
32 <ul>
33 <li><a href="#6.1">   6.1 Notation</a>
34 <li><a href="#6.2">   6.2 Concepts</a>
35 <ul>
36 <li><a href="#6.2.1">        6.2.1 Scopes of identifiers</a>
37 <li><a href="#6.2.2">        6.2.2   Linkages of identifiers</a>
38 <li><a href="#6.2.3">        6.2.3 Name spaces of identifiers</a>
39 <li><a href="#6.2.4">        6.2.4 Storage durations of objects</a>
40 <li><a href="#6.2.5">        6.2.5 Types</a>
41 <li><a href="#6.2.6">        6.2.6 Representations of types</a>
42 <li><a href="#6.2.7">        6.2.7 Compatible type and composite type</a>
43 </ul>
44 <li><a href="#6.3">   6.3 Conversions</a>
45 <ul>
46 <li><a href="#6.3.1">        6.3.1 Arithmetic operands</a>
47 <li><a href="#6.3.2">        6.3.2 Other operands</a>
48 </ul>
49 <li><a href="#6.4">   6.4 Lexical elements</a>
50 <ul>
51 <li><a href="#6.4.1">        6.4.1 Keywords</a>
52 <li><a href="#6.4.2">        6.4.2 Identifiers</a>
53 <li><a href="#6.4.3">        6.4.3 Universal character names</a>
54 <li><a href="#6.4.4">        6.4.4   Constants</a>
55 <li><a href="#6.4.5">        6.4.5 String literals</a>
56 <li><a href="#6.4.6">        6.4.6   Punctuators</a>
57 <li><a href="#6.4.7">        6.4.7 Header names</a>
58 <li><a href="#6.4.8">        6.4.8 Preprocessing numbers</a>
59 <li><a href="#6.4.9">        6.4.9 Comments</a>
60 </ul>
61 <li><a href="#6.5">   6.5 Expressions</a>
62 <!--page 2 indent -1-->
63 <ul>
64 <li><a href="#6.5.1">          6.5.1   Primary expressions</a>
65 <li><a href="#6.5.2">          6.5.2 Postfix operators</a>
66 <li><a href="#6.5.3">          6.5.3   Unary operators</a>
67 <li><a href="#6.5.4">          6.5.4 Cast operators</a>
68 <li><a href="#6.5.5">          6.5.5   Multiplicative operators</a>
69 <li><a href="#6.5.6">          6.5.6 Additive operators</a>
70 <li><a href="#6.5.7">          6.5.7 Bitwise shift operators</a>
71 <li><a href="#6.5.8">          6.5.8   Relational operators</a>
72 <li><a href="#6.5.9">          6.5.9 Equality operators</a>
73 <li><a href="#6.5.10">          6.5.10 Bitwise AND operator</a>
74 <li><a href="#6.5.11">          6.5.11 Bitwise exclusive OR operator</a>
75 <li><a href="#6.5.12">          6.5.12 Bitwise inclusive OR operator</a>
76 <li><a href="#6.5.13">          6.5.13 Logical AND operator</a>
77 <li><a href="#6.5.14">          6.5.14 Logical OR operator</a>
78 <li><a href="#6.5.15">          6.5.15 Conditional operator</a>
79 <li><a href="#6.5.16">          6.5.16 Assignment operators</a>
80 <li><a href="#6.5.17">          6.5.17 Comma operator</a>
81 </ul>
82 <li><a href="#6.6">     6.6 Constant expressions</a>
83 <li><a href="#6.7">     6.7 Declarations</a>
84 <ul>
85 <li><a href="#6.7.1">          6.7.1 Storage-class specifiers</a>
86 <li><a href="#6.7.2">          6.7.2   Type specifiers</a>
87 <li><a href="#6.7.3">          6.7.3 Type qualifiers</a>
88 <li><a href="#6.7.4">          6.7.4   Function specifiers</a>
89 <li><a href="#6.7.5">          6.7.5 Declarators</a>
90 <li><a href="#6.7.6">          6.7.6 Type names</a>
91 <li><a href="#6.7.7">          6.7.7   Type definitions</a>
92 <li><a href="#6.7.8">          6.7.8 Initialization</a>
93 </ul>
94 <li><a href="#6.8">     6.8 Statements and blocks</a>
95 <ul>
96 <li><a href="#6.8.1">          6.8.1   Labeled statements</a>
97 <li><a href="#6.8.2">          6.8.2 Compound statement</a>
98 <li><a href="#6.8.3">          6.8.3 Expression and null statements</a>
99 <li><a href="#6.8.4">          6.8.4 Selection statements</a>
100 <li><a href="#6.8.5">          6.8.5 Iteration statements</a>
101 <li><a href="#6.8.6">          6.8.6 Jump statements</a>
102 </ul>
103 <li><a href="#6.9">     6.9 External definitions</a>
104 <ul>
105 <li><a href="#6.9.1">          6.9.1   Function definitions</a>
106 <li><a href="#6.9.2">          6.9.2 External object definitions</a>
107 </ul>
108 <li><a href="#6.10">     6.10 Preprocessing directives</a>
109 <ul>
110 <li><a href="#6.10.1">          6.10.1 Conditional inclusion</a>
111 <li><a href="#6.10.2">          6.10.2 Source file inclusion</a>
112 <li><a href="#6.10.3">          6.10.3 Macro replacement</a>
113 <li><a href="#6.10.4">          6.10.4 Line control</a>
114 <li><a href="#6.10.5">          6.10.5 Error directive</a>
115 <li><a href="#6.10.6">          6.10.6 Pragma directive</a>
116 <!--page 3 indent 0-->
117 <li><a href="#6.10.7">       6.10.7 Null directive</a>
118 <li><a href="#6.10.8">       6.10.8 Predefined macro names</a>
119 <li><a href="#6.10.9">       6.10.9 Pragma operator</a>
120 </ul>
121 <li><a href="#6.11">  6.11 Future language directions</a>
122 <ul>
123 <li><a href="#6.11.1">       6.11.1 Floating types</a>
124 <li><a href="#6.11.2">       6.11.2 Linkages of identifiers</a>
125 <li><a href="#6.11.3">       6.11.3 External names</a>
126 <li><a href="#6.11.4">       6.11.4 Character escape sequences</a>
127 <li><a href="#6.11.5">       6.11.5 Storage-class specifiers</a>
128 <li><a href="#6.11.6">       6.11.6 Function declarators</a>
129 <li><a href="#6.11.7">       6.11.7 Function definitions</a>
130 <li><a href="#6.11.8">       6.11.8 Pragma directives</a>
131 <li><a href="#6.11.9">       6.11.9 Predefined macro names</a>
132 </ul>
133 </ul>
134 <li><a href="#7">7. Library</a>
135 <ul>
136 <li><a href="#7.1">   7.1 Introduction</a>
137 <ul>
138 <li><a href="#7.1.1">         7.1.1 Definitions of terms</a>
139 <li><a href="#7.1.2">         7.1.2 Standard headers</a>
140 <li><a href="#7.1.3">         7.1.3 Reserved identifiers</a>
141 <li><a href="#7.1.4">         7.1.4 Use of library functions</a>
142 </ul>
143 <li><a href="#7.2">   7.2 Diagnostics &lt;assert.h&gt;</a>
144 <ul>
145 <li><a href="#7.2.1">         7.2.1 Program diagnostics</a>
146 </ul>
147 <li><a href="#7.3">   7.3 Complex arithmetic &lt;complex.h&gt;</a>
148 <ul>
149 <li><a href="#7.3.1">         7.3.1 Introduction</a>
150 <li><a href="#7.3.2">         7.3.2 Conventions</a>
151 <li><a href="#7.3.3">         7.3.3 Branch cuts</a>
152 <li><a href="#7.3.4">         7.3.4 The CX_LIMITED_RANGE pragma</a>
153 <li><a href="#7.3.5">         7.3.5 Trigonometric functions</a>
154 <li><a href="#7.3.6">         7.3.6 Hyperbolic functions</a>
155 <li><a href="#7.3.7">         7.3.7 Exponential and logarithmic functions</a>
156 <li><a href="#7.3.8">         7.3.8 Power and absolute-value functions</a>
157 <li><a href="#7.3.9">         7.3.9 Manipulation functions</a>
158 </ul>
159 <li><a href="#7.4">   7.4 Character handling &lt;ctype.h&gt;</a>
160 <ul>
161 <li><a href="#7.4.1">         7.4.1 Character classification functions</a>
162 <li><a href="#7.4.2">         7.4.2 Character case mapping functions</a>
163 </ul>
164 <li><a href="#7.5">   7.5 Errors &lt;errno.h&gt;</a>
165 <li><a href="#7.6">   7.6 Floating-point environment &lt;fenv.h&gt;</a>
166 <ul>
167 <li><a href="#7.6.1">         7.6.1 The FENV_ACCESS pragma</a>
168 <li><a href="#7.6.2">         7.6.2 Floating-point exceptions</a>
169 <li><a href="#7.6.3">         7.6.3 Rounding</a>
170 <li><a href="#7.6.4">         7.6.4 Environment</a>
171 </ul>
172 <li><a href="#7.7">   7.7 Characteristics of floating types &lt;float.h&gt;</a>
173 <li><a href="#7.8">   7.8 Format conversion of integer types &lt;inttypes.h&gt;</a>
174 <ul>
175 <li><a href="#7.8.1">         7.8.1 Macros for format specifiers</a>
176 <li><a href="#7.8.2">         7.8.2 Functions for greatest-width integer types</a>
177 <!--page 4 indent -1-->
178 </ul>
179 <li><a href="#7.9">     7.9 Alternative spellings &lt;iso646.h&gt;</a>
180 <li><a href="#7.10">     7.10 Sizes of integer types &lt;limits.h&gt;</a>
181 <li><a href="#7.11">     7.11 Localization &lt;locale.h&gt;</a>
182 <ul>
183 <li><a href="#7.11.1">          7.11.1 Locale control</a>
184 <li><a href="#7.11.2">          7.11.2 Numeric formatting convention inquiry</a>
185 </ul>
186 <li><a href="#7.12">     7.12 Mathematics &lt;math.h&gt;</a>
187 <ul>
188 <li><a href="#7.12.1">          7.12.1 Treatment of error conditions</a>
189 <li><a href="#7.12.2">          7.12.2 The FP_CONTRACT pragma</a>
190 <li><a href="#7.12.3">          7.12.3 Classification macros</a>
191 <li><a href="#7.12.4">          7.12.4 Trigonometric functions</a>
192 <li><a href="#7.12.5">          7.12.5 Hyperbolic functions</a>
193 <li><a href="#7.12.6">          7.12.6 Exponential and logarithmic functions</a>
194 <li><a href="#7.12.7">          7.12.7 Power and absolute-value functions</a>
195 <li><a href="#7.12.8">          7.12.8 Error and gamma functions</a>
196 <li><a href="#7.12.9">          7.12.9 Nearest integer functions</a>
197 <li><a href="#7.12.10">          7.12.10 Remainder functions</a>
198 <li><a href="#7.12.11">          7.12.11 Manipulation functions</a>
199 <li><a href="#7.12.12">          7.12.12 Maximum, minimum, and positive difference functions</a>
200 <li><a href="#7.12.13">          7.12.13 Floating multiply-add</a>
201 <li><a href="#7.12.14">          7.12.14 Comparison macros</a>
202 </ul>
203 <li><a href="#7.13">     7.13 Nonlocal jumps &lt;setjmp.h&gt;</a>
204 <ul>
205 <li><a href="#7.13.1">          7.13.1 Save calling environment</a>
206 <li><a href="#7.13.2">          7.13.2 Restore calling environment</a>
207 </ul>
208 <li><a href="#7.14">     7.14 Signal handling &lt;signal.h&gt;</a>
209 <ul>
210 <li><a href="#7.14.1">          7.14.1 Specify signal handling</a>
211 <li><a href="#7.14.2">          7.14.2 Send signal</a>
212 </ul>
213 <li><a href="#7.15">     7.15 Variable arguments &lt;stdarg.h&gt;</a>
214 <ul>
215 <li><a href="#7.15.1">          7.15.1 Variable argument list access macros</a>
216 </ul>
217 <li><a href="#7.16">     7.16 Boolean type and values &lt;stdbool.h&gt;</a>
218 <li><a href="#7.17">     7.17 Common definitions &lt;stddef.h&gt;</a>
219 <li><a href="#7.18">     7.18 Integer types &lt;stdint.h&gt;</a>
220 <ul>
221 <li><a href="#7.18.1">          7.18.1 Integer types</a>
222 <li><a href="#7.18.2">          7.18.2 Limits of specified-width integer types</a>
223 <li><a href="#7.18.3">          7.18.3 Limits of other integer types</a>
224 <li><a href="#7.18.4">          7.18.4 Macros for integer constants</a>
225 </ul>
226 <li><a href="#7.19">     7.19 Input/output &lt;stdio.h&gt;</a>
227 <ul>
228 <li><a href="#7.19.1">          7.19.1 Introduction</a>
229 <li><a href="#7.19.2">          7.19.2 Streams</a>
230 <li><a href="#7.19.3">          7.19.3 Files</a>
231 <li><a href="#7.19.4">          7.19.4 Operations on files</a>
232 <li><a href="#7.19.5">          7.19.5 File access functions</a>
233 <li><a href="#7.19.6">          7.19.6 Formatted input/output functions</a>
234 <li><a href="#7.19.7">          7.19.7 Character input/output functions</a>
235 <li><a href="#7.19.8">          7.19.8 Direct input/output functions</a>
236 <!--page 5 indent -1-->
237 <li><a href="#7.19.9">         7.19.9 File positioning functions</a>
238 <li><a href="#7.19.10">         7.19.10 Error-handling functions</a>
239 </ul>
240 <li><a href="#7.20">  7.20   General utilities &lt;stdlib.h&gt;</a>
241 <ul>
242 <li><a href="#7.20.1">         7.20.1 Numeric conversion functions</a>
243 <li><a href="#7.20.2">         7.20.2 Pseudo-random sequence generation functions</a>
244 <li><a href="#7.20.3">         7.20.3 Memory management functions</a>
245 <li><a href="#7.20.4">         7.20.4 Communication with the environment</a>
246 <li><a href="#7.20.5">         7.20.5 Searching and sorting utilities</a>
247 <li><a href="#7.20.6">         7.20.6 Integer arithmetic functions</a>
248 <li><a href="#7.20.7">         7.20.7 Multibyte/wide character conversion functions</a>
249 <li><a href="#7.20.8">         7.20.8 Multibyte/wide string conversion functions</a>
250 </ul>
251 <li><a href="#7.21">  7.21   String handling &lt;string.h&gt;</a>
252 <ul>
253 <li><a href="#7.21.1">         7.21.1 String function conventions</a>
254 <li><a href="#7.21.2">         7.21.2 Copying functions</a>
255 <li><a href="#7.21.3">         7.21.3 Concatenation functions</a>
256 <li><a href="#7.21.4">         7.21.4 Comparison functions</a>
257 <li><a href="#7.21.5">         7.21.5 Search functions</a>
258 <li><a href="#7.21.6">         7.21.6 Miscellaneous functions</a>
259 </ul>
260 <li><a href="#7.22">  7.22   Type-generic math &lt;tgmath.h&gt;</a>
261 <li><a href="#7.23">  7.23   Date and time &lt;time.h&gt;</a>
262 <ul>
263 <li><a href="#7.23.1">         7.23.1 Components of time</a>
264 <li><a href="#7.23.2">         7.23.2 Time manipulation functions</a>
265 <li><a href="#7.23.3">         7.23.3 Time conversion functions</a>
266 </ul>
267 <li><a href="#7.24">  7.24   Extended multibyte and wide character utilities &lt;wchar.h&gt;</a>
268 <ul>
269 <li><a href="#7.24.1">         7.24.1 Introduction</a>
270 <li><a href="#7.24.2">         7.24.2 Formatted wide character input/output functions</a>
271 <li><a href="#7.24.3">         7.24.3 Wide character input/output functions</a>
272 <li><a href="#7.24.4">         7.24.4 General wide string utilities</a>
273 <li><a href="#7.24.5">         7.24.5 Wide character time conversion functions</a>
274 <li><a href="#7.24.6">         7.24.6 Extended multibyte/wide character conversion utilities</a>
275 </ul>
276 <li><a href="#7.25">  7.25   Wide character classification and mapping utilities &lt;wctype.h&gt;</a>
277 <ul>
278 <li><a href="#7.25.1">         7.25.1 Introduction</a>
279 <li><a href="#7.25.2">         7.25.2 Wide character classification utilities</a>
280 <li><a href="#7.25.3">         7.25.3 Wide character case mapping utilities</a>
281 </ul>
282 <li><a href="#7.26">  7.26   Future library directions</a>
283 <ul>
284 <li><a href="#7.26.1">         7.26.1 Complex arithmetic &lt;complex.h&gt;</a>
285 <li><a href="#7.26.2">         7.26.2 Character handling &lt;ctype.h&gt;</a>
286 <li><a href="#7.26.3">         7.26.3 Errors &lt;errno.h&gt;</a>
287 <li><a href="#7.26.4">         7.26.4 Format conversion of integer types &lt;inttypes.h&gt;</a>
288 <li><a href="#7.26.5">         7.26.5 Localization &lt;locale.h&gt;</a>
289 <li><a href="#7.26.6">         7.26.6 Signal handling &lt;signal.h&gt;</a>
290 <li><a href="#7.26.7">         7.26.7 Boolean type and values &lt;stdbool.h&gt;</a>
291 <li><a href="#7.26.8">         7.26.8 Integer types &lt;stdint.h&gt;</a>
292 <li><a href="#7.26.9">         7.26.9 Input/output &lt;stdio.h&gt;</a>
293 <!--page 6 indent 0-->
294 <li><a href="#7.26.10">        7.26.10 General utilities &lt;stdlib.h&gt;</a>
295 <li><a href="#7.26.11">        7.26.11 String handling &lt;string.h&gt;</a>
296 <li><a href="#7.26.12">        7.26.12 Extended multibyte and wide character utilities <wchar.h></a>
297 <li><a href="#7.26.13">        7.26.13 Wide character classification and mapping utilities <wctype.h></a>
298 </ul>
299 </ul>
300 <li><a href="#A">Annex A (informative) Language syntax summary</a>
301 <ul>
302 <li><a href="#A.1">  A.1 Lexical grammar</a>
303 <li><a href="#A.2">  A.2 Phrase structure grammar</a>
304 <li><a href="#A.3">  A.3 Preprocessing directives</a>
305 </ul>
306 <li><a href="#B">Annex B (informative) Library summary</a>
307 <ul>
308 <li><a href="#B.1">  B.1 Diagnostics &lt;assert.h&gt;</a>
309 <li><a href="#B.2">  B.2 Complex &lt;complex.h&gt;</a>
310 <li><a href="#B.3">  B.3 Character handling &lt;ctype.h&gt;</a>
311 <li><a href="#B.4">  B.4 Errors &lt;errno.h&gt;</a>
312 <li><a href="#B.5">  B.5 Floating-point environment &lt;fenv.h&gt;</a>
313 <li><a href="#B.6">  B.6 Characteristics of floating types &lt;float.h&gt;</a>
314 <li><a href="#B.7">  B.7 Format conversion of integer types &lt;inttypes.h&gt;</a>
315 <li><a href="#B.8">  B.8 Alternative spellings &lt;iso646.h&gt;</a>
316 <li><a href="#B.9">  B.9 Sizes of integer types &lt;limits.h&gt;</a>
317 <li><a href="#B.10">  B.10 Localization &lt;locale.h&gt;</a>
318 <li><a href="#B.11">  B.11 Mathematics &lt;math.h&gt;</a>
319 <li><a href="#B.12">  B.12 Nonlocal jumps &lt;setjmp.h&gt;</a>
320 <li><a href="#B.13">  B.13 Signal handling &lt;signal.h&gt;</a>
321 <li><a href="#B.14">  B.14 Variable arguments &lt;stdarg.h&gt;</a>
322 <li><a href="#B.15">  B.15 Boolean type and values &lt;stdbool.h&gt;</a>
323 <li><a href="#B.16">  B.16 Common definitions &lt;stddef.h&gt;</a>
324 <li><a href="#B.17">  B.17 Integer types &lt;stdint.h&gt;</a>
325 <li><a href="#B.18">  B.18 Input/output &lt;stdio.h&gt;</a>
326 <li><a href="#B.19">  B.19 General utilities &lt;stdlib.h&gt;</a>
327 <li><a href="#B.20">  B.20 String handling &lt;string.h&gt;</a>
328 <li><a href="#B.21">  B.21 Type-generic math &lt;tgmath.h&gt;</a>
329 <li><a href="#B.22">  B.22 Date and time &lt;time.h&gt;</a>
330 <li><a href="#B.23">  B.23 Extended multibyte/wide character utilities &lt;wchar.h&gt;</a>
331 <li><a href="#B.24">  B.24 Wide character classification and mapping utilities &lt;wctype.h&gt;</a>
332 </ul>
333 <li><a href="#C">Annex C (informative) Sequence points</a>
334 <li><a href="#D">Annex D (normative) Universal character names for identifiers</a>
335 <li><a href="#E">Annex E (informative) Implementation limits</a>
336 <li><a href="#F">Annex F (normative) IEC 60559 floating-point arithmetic</a>
337 <ul>
338 <li><a href="#F.1">  F.1 Introduction</a>
339 <li><a href="#F.2">  F.2 Types</a>
340 <li><a href="#F.3">  F.3 Operators and functions</a>
341 <!--page 7 indent 0-->
342 <li><a href="#F.4">   F.4   Floating to integer conversion</a>
343 <li><a href="#F.5">   F.5   Binary-decimal conversion</a>
344 <li><a href="#F.6">   F.6   Contracted expressions</a>
345 <li><a href="#F.7">   F.7   Floating-point environment</a>
346 <li><a href="#F.8">   F.8   Optimization</a>
347 <li><a href="#F.9">   F.9   Mathematics &lt;math.h&gt;</a>
348 </ul>
349 <li><a href="#G">Annex G (informative) IEC 60559-compatible complex arithmetic</a>
350 <ul>
351 <li><a href="#G.1">  G.1 Introduction</a>
352 <li><a href="#G.2">  G.2 Types</a>
353 <li><a href="#G.3">  G.3 Conventions</a>
354 <li><a href="#G.4">  G.4 Conversions</a>
355 <li><a href="#G.5">  G.5 Binary operators</a>
356 <li><a href="#G.6">  G.6 Complex arithmetic &lt;complex.h&gt;</a>
357 <li><a href="#G.7">  G.7 Type-generic math &lt;tgmath.h&gt;</a>
358 </ul>
359 <li><a href="#H">Annex H (informative) Language independent arithmetic</a>
360 <ul>
361 <li><a href="#H.1">  H.1 Introduction</a>
362 <li><a href="#H.2">  H.2 Types</a>
363 <li><a href="#H.3">  H.3 Notification</a>
364 </ul>
365 <li><a href="#I">Annex I (informative) Common warnings</a>
366 <li><a href="#J">Annex J (informative) Portability issues</a>
367 <ul>
368 <li><a href="#J.1">  J.1 Unspecified behavior</a>
369 <li><a href="#J.2">  J.2 Undefined behavior</a>
370 <li><a href="#J.3">  J.3 Implementation-defined behavior</a>
371 <li><a href="#J.4">  J.4 Locale-specific behavior</a>
372 <li><a href="#J.5">  J.5 Common extensions</a>
373 </ul>
374 <li><a href="#Bibliography">Bibliography</a>
375 <li><a href="#Index">Index</a>
376 <!--page 8 indent 0-->
377 <!--page 9 indent 4-->
378 </ul>
379
380 <a name="Foreword" href="#Foreword"><h2>Foreword</h2></a>
381 <p><!--para 1-->
382  ISO (the International Organization for Standardization) and IEC (the International
383  Electrotechnical Commission) form the specialized system for worldwide
384  standardization. National bodies that are member of ISO or IEC participate in the
385  development of International Standards through technical committees established by the
386  respective organization to deal with particular fields of technical activity. ISO and IEC
387  technical committees collaborate in fields of mutual interest. Other international
388  organizations, governmental and non-governmental, in liaison with ISO and IEC, also
389  take part in the work.
390 <p><!--para 2-->
391  International Standards are drafted in accordance with the rules given in the ISO/IEC
392  Directives, Part 3.
393 <p><!--para 3-->
394  In the field of information technology, ISO and IEC have established a joint technical
395  committee, ISO/IEC JTC 1. Draft International Standards adopted by the joint technical
396  committee are circulated to national bodies for voting. Publication as an International
397  Standard requires approval by at least 75% of the national bodies casting a vote.
398 <p><!--para 4-->
399  International Standard ISO/IEC 9899 was prepared by Joint Technical Committee
400  ISO/IEC JTC 1, Information technology, Subcommittee SC 22, Programming languages,
401  their environments and system software interfaces. The Working Group responsible for
402  this standard (WG 14) maintains a site on the World Wide Web at
403  http://www.open-std.org/JTC1/SC22/WG14/                        containing      additional
404  information relevant to this standard such as a Rationale for many of the decisions made
405  during its preparation and a log of Defect Reports and Responses.
406 <p><!--para 5-->
407  This second edition cancels and replaces the first edition, ISO/IEC 9899:1990, as
408  amended and corrected by ISO/IEC 9899/COR1:1994, ISO/IEC 9899/AMD1:1995, and
409  ISO/IEC 9899/COR2:1996. Major changes from the previous edition include:
410 <ul>
411 <li>  restricted character set support via digraphs and <a href="#7.9">&lt;iso646.h&gt;</a> (originally specified
412  in AMD1)
413 <li>  wide character library support in <a href="#7.24">&lt;wchar.h&gt;</a> and <a href="#7.25">&lt;wctype.h&gt;</a> (originally
414  specified in AMD1)
415 <li>  more precise aliasing rules via effective type
416 <li>  restricted pointers
417 <li>  variable length arrays
418 <li>  flexible array members
419 <li>  static and type qualifiers in parameter array declarators
420 <li>  complex (and imaginary) support in <a href="#7.3">&lt;complex.h&gt;</a>
421 <li>  type-generic math macros in <a href="#7.22">&lt;tgmath.h&gt;</a>
422 <li>  the long long int type and library functions
423 <!--page 10 indent 0-->
424 <li>  increased minimum translation limits
425 <li>  additional floating-point characteristics in <a href="#7.7">&lt;float.h&gt;</a>
426 <li>  remove implicit int
427 <li>  reliable integer division
428 <li>  universal character names (\u and \U)
429 <li>  extended identifiers
430 <li>  hexadecimal floating-point constants and %a and %A printf/scanf conversion
431  specifiers
432 <li>  compound literals
433 <li>  designated initializers
434 <li>  // comments
435 <li>  extended integer types and library functions in <a href="#7.8">&lt;inttypes.h&gt;</a> and <a href="#7.18">&lt;stdint.h&gt;</a>
436 <li>  remove implicit function declaration
437 <li>  preprocessor arithmetic done in intmax_t/uintmax_t
438 <li>  mixed declarations and code
439 <li>  new block scopes for selection and iteration statements
440 <li>  integer constant type rules
441 <li>  integer promotion rules
442 <li>  macros with a variable number of arguments
443 <li>  the vscanf family of functions in <a href="#7.19">&lt;stdio.h&gt;</a> and <a href="#7.24">&lt;wchar.h&gt;</a>
444 <li>  additional math library functions in <a href="#7.12">&lt;math.h&gt;</a>
445 <li>  treatment of error conditions by math library functions (math_errhandling)
446 <li>  floating-point environment access in <a href="#7.6">&lt;fenv.h&gt;</a>
447 <li>  IEC 60559 (also known as IEC 559 or IEEE arithmetic) support
448 <li>  trailing comma allowed in enum declaration
449 <li>  %lf conversion specifier allowed in printf
450 <li>  inline functions
451 <li>  the snprintf family of functions in <a href="#7.19">&lt;stdio.h&gt;</a>
452 <li>  boolean type in <a href="#7.16">&lt;stdbool.h&gt;</a>
453 <li>  idempotent type qualifiers
454 <li>  empty macro arguments
455 <!--page 11 indent 4-->
456 <li>  new structure type compatibility rules (tag compatibility)
457 <li>  additional predefined macro names
458 <li>  _Pragma preprocessing operator
459 <li>  standard pragmas
460 <li>  __func__ predefined identifier
461 <li>  va_copy macro
462 <li>  additional strftime conversion specifiers
463 <li>  LIA compatibility annex
464 <li>  deprecate ungetc at the beginning of a binary file
465 <li>  remove deprecation of aliased array parameters
466 <li>  conversion of array to pointer not limited to lvalues
467 <li>  relaxed constraints on aggregate and union initialization
468 <li>  relaxed restrictions on portable header names
469 <li>  return without expression not permitted in function that returns a value (and vice
470  versa)
471 </ul>
472 <p><!--para 6-->
473  Annexes D and F form a normative part of this standard; annexes A, B, C, E, G, H, I, J,
474  the bibliography, and the index are for information only. In accordance with Part 3 of the
475  ISO/IEC Directives, this foreword, the introduction, notes, footnotes, and examples are
476  also for information only.
477 <!--page 12 indent 4-->
478
479 <a name="Introduction" href="#Introduction"><h2>Introduction</h2></a>
480 <p><!--para 1-->
481  With the introduction of new devices and extended character sets, new features may be
482  added to this International Standard. Subclauses in the language and library clauses warn
483  implementors and programmers of usages which, though valid in themselves, may
484  conflict with future additions.
485 <p><!--para 2-->
486  Certain features are obsolescent, which means that they may be considered for
487  withdrawal in future revisions of this International Standard. They are retained because
488  of their widespread use, but their use in new implementations (for implementation
489  features) or new programs (for language [<a href="#6.11">6.11</a>] or library features [<a href="#7.26">7.26</a>]) is discouraged.
490 <p><!--para 3-->
491  This International Standard is divided into four major subdivisions:
492 <ul>
493 <li>  preliminary elements (clauses 1-4);
494 <li>  the characteristics of environments that translate and execute C programs (clause 5);
495 <li>  the language syntax, constraints, and semantics (clause 6);
496 <li>  the library facilities (clause 7).
497 </ul>
498 <p><!--para 4-->
499  Examples are provided to illustrate possible forms of the constructions described.
500  Footnotes are provided to emphasize consequences of the rules described in that
501  subclause or elsewhere in this International Standard. References are used to refer to
502  other related subclauses. Recommendations are provided to give advice or guidance to
503  implementors. Annexes provide additional information and summarize the information
504  contained in this International Standard. A bibliography lists documents that were
505  referred to during the preparation of the standard.
506 <p><!--para 5-->
507  The language clause (clause 6) is derived from ''The C Reference Manual''.
508 <p><!--para 6-->
509  The library clause (clause 7) is based on the 1984 /usr/group Standard.
510 <!--page 13 indent 4-->
511
512 <h1>Programming languages -- C</h1>
513  
514  
515  
516  
517
518 <a name="1" href="#1"><h2>1. Scope</h2></a>
519 <p><!--para 1-->
520  This International Standard specifies the form and establishes the interpretation of
521  programs written in the C programming language.<sup><a href="#note1"><b>1)</b></a></sup> It specifies
522 <ul>
523 <li>  the representation of C programs;
524 <li>  the syntax and constraints of the C language;
525 <li>  the semantic rules for interpreting C programs;
526 <li>  the representation of input data to be processed by C programs;
527 <li>  the representation of output data produced by C programs;
528 <li>  the restrictions and limits imposed by a conforming implementation of C.
529 </ul>
530 <p><!--para 2-->
531  This International Standard does not specify
532 <ul>
533 <li>  the mechanism by which C programs are transformed for use by a data-processing
534  system;
535 <li>  the mechanism by which C programs are invoked for use by a data-processing
536  system;
537 <li>  the mechanism by which input data are transformed for use by a C program;
538 <li>  the mechanism by which output data are transformed after being produced by a C
539  program;
540 <li>  the size or complexity of a program and its data that will exceed the capacity of any
541  specific data-processing system or the capacity of a particular processor;
542  
543  
544 <!--page 14 indent 4-->
545 <li>  all minimal requirements of a data-processing system that is capable of supporting a
546  conforming implementation.
547  
548 </ul>
549
550 <h6>footnotes</h6>
551 <p><a name="note1">1)</a> This International Standard is designed to promote the portability of C programs among a variety of
552  data-processing systems. It is intended for use by implementors and programmers.
553
554
555 <a name="2" href="#2"><h2>2. Normative references</h2></a>
556 <p><!--para 1-->
557  The following normative documents contain provisions which, through reference in this
558  text, constitute provisions of this International Standard. For dated references,
559  subsequent amendments to, or revisions of, any of these publications do not apply.
560  However, parties to agreements based on this International Standard are encouraged to
561  investigate the possibility of applying the most recent editions of the normative
562  documents indicated below. For undated references, the latest edition of the normative
563  document referred to applies. Members of ISO and IEC maintain registers of currently
564  valid International Standards.
565 <p><!--para 2-->
566  ISO 31-11:1992, Quantities and units -- Part 11: Mathematical signs and symbols for
567  use in the physical sciences and technology.
568 <p><!--para 3-->
569  ISO/IEC 646, Information technology -- ISO 7-bit coded character set for information
570  interchange.
571 <p><!--para 4-->
572  ISO/IEC 2382-1:1993, Information technology -- Vocabulary -- Part 1: Fundamental
573  terms.
574 <p><!--para 5-->
575  ISO 4217, Codes for the representation of currencies and funds.
576 <p><!--para 6-->
577  ISO 8601, Data elements and interchange formats -- Information interchange --
578  Representation of dates and times.
579 <p><!--para 7-->
580  ISO/IEC 10646 (all parts), Information technology -- Universal Multiple-Octet Coded
581  Character Set (UCS).
582 <p><!--para 8-->
583  IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems (previously
584  designated IEC 559:1989).
585 <!--page 15 indent 4-->
586
587 <a name="3" href="#3"><h2>3. Terms, definitions, and symbols</h2></a>
588 <p><!--para 1-->
589  For the purposes of this International Standard, the following definitions apply. Other
590  terms are defined where they appear in italic type or on the left side of a syntax rule.
591  Terms explicitly defined in this International Standard are not to be presumed to refer
592  implicitly to similar terms defined elsewhere. Terms not defined in this International
593  Standard are to be interpreted according to ISO/IEC 2382-1. Mathematical symbols not
594  defined in this International Standard are to be interpreted according to ISO 31-11.
595
596 <a name="3.1" href="#3.1"><h3>3.1</h3></a>
597 <p><!--para 1-->
598  access
599  &lt;execution-time action&gt; to read or modify the value of an object
600 <p><!--para 2-->
601  NOTE 1   Where only one of these two actions is meant, ''read'' or ''modify'' is used.
602  
603 <p><!--para 3-->
604  NOTE 2   "Modify'' includes the case where the new value being stored is the same as the previous value.
605  
606 <p><!--para 4-->
607  NOTE 3   Expressions that are not evaluated do not access objects.
608  
609
610 <a name="3.2" href="#3.2"><h3>3.2</h3></a>
611 <p><!--para 1-->
612  alignment
613  requirement that objects of a particular type be located on storage boundaries with
614  addresses that are particular multiples of a byte address
615
616 <a name="3.3" href="#3.3"><h3>3.3</h3></a>
617 <p><!--para 1-->
618  argument
619  actual argument
620  actual parameter (deprecated)
621  expression in the comma-separated list bounded by the parentheses in a function call
622  expression, or a sequence of preprocessing tokens in the comma-separated list bounded
623  by the parentheses in a function-like macro invocation
624
625 <a name="3.4" href="#3.4"><h3>3.4</h3></a>
626 <p><!--para 1-->
627  behavior
628  external appearance or action
629
630 <a name="3.4.1" href="#3.4.1"><h4>3.4.1</h4></a>
631 <p><!--para 1-->
632  implementation-defined behavior
633  unspecified behavior where each implementation documents how the choice is made
634 <p><!--para 2-->
635  EXAMPLE An example of implementation-defined behavior is the propagation of the high-order bit
636  when a signed integer is shifted right.
637  
638
639 <a name="3.4.2" href="#3.4.2"><h4>3.4.2</h4></a>
640 <p><!--para 1-->
641  locale-specific behavior
642  behavior that depends on local conventions of nationality, culture, and language that each
643  implementation documents
644 <!--page 16 indent 4-->
645 <p><!--para 2-->
646  EXAMPLE An example of locale-specific behavior is whether the islower function returns true for
647  characters other than the 26 lowercase Latin letters.
648  
649
650 <a name="3.4.3" href="#3.4.3"><h4>3.4.3</h4></a>
651 <p><!--para 1-->
652  undefined behavior
653  behavior, upon use of a nonportable or erroneous program construct or of erroneous data,
654  for which this International Standard imposes no requirements
655 <p><!--para 2-->
656  NOTE Possible undefined behavior ranges from ignoring the situation completely with unpredictable
657  results, to behaving during translation or program execution in a documented manner characteristic of the
658  environment (with or without the issuance of a diagnostic message), to terminating a translation or
659  execution (with the issuance of a diagnostic message).
660  
661 <p><!--para 3-->
662  EXAMPLE        An example of undefined behavior is the behavior on integer overflow.
663  
664
665 <a name="3.4.4" href="#3.4.4"><h4>3.4.4</h4></a>
666 <p><!--para 1-->
667  unspecified behavior
668  use of an unspecified value, or other behavior where this International Standard provides
669  two or more possibilities and imposes no further requirements on which is chosen in any
670  instance
671 <p><!--para 2-->
672  EXAMPLE        An example of unspecified behavior is the order in which the arguments to a function are
673  evaluated.
674  
675
676 <a name="3.5" href="#3.5"><h3>3.5</h3></a>
677 <p><!--para 1-->
678  bit
679  unit of data storage in the execution environment large enough to hold an object that may
680  have one of two values
681 <p><!--para 2-->
682  NOTE     It need not be possible to express the address of each individual bit of an object.
683  
684
685 <a name="3.6" href="#3.6"><h3>3.6</h3></a>
686 <p><!--para 1-->
687  byte
688  addressable unit of data storage large enough to hold any member of the basic character
689  set of the execution environment
690 <p><!--para 2-->
691  NOTE 1 It is possible to express the address of each individual byte of an object uniquely.
692  
693 <p><!--para 3-->
694  NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementation-
695  defined. The least significant bit is called the low-order bit; the most significant bit is called the high-order
696  bit.
697  
698
699 <a name="3.7" href="#3.7"><h3>3.7</h3></a>
700 <p><!--para 1-->
701  character
702  &lt;abstract&gt; member of a set of elements used for the organization, control, or
703  representation of data
704
705 <a name="3.7.1" href="#3.7.1"><h4>3.7.1</h4></a>
706 <p><!--para 1-->
707  character
708  single-byte character
709  &lt;C&gt; bit representation that fits in a byte
710 <!--page 17 indent 4-->
711
712 <a name="3.7.2" href="#3.7.2"><h4>3.7.2</h4></a>
713 <p><!--para 1-->
714  multibyte character
715  sequence of one or more bytes representing a member of the extended character set of
716  either the source or the execution environment
717 <p><!--para 2-->
718  NOTE    The extended character set is a superset of the basic character set.
719  
720
721 <a name="3.7.3" href="#3.7.3"><h4>3.7.3</h4></a>
722 <p><!--para 1-->
723  wide character
724  bit representation that fits in an object of type wchar_t, capable of representing any
725  character in the current locale
726
727 <a name="3.8" href="#3.8"><h3>3.8</h3></a>
728 <p><!--para 1-->
729  constraint
730  restriction, either syntactic or semantic, by which the exposition of language elements is
731  to be interpreted
732
733 <a name="3.9" href="#3.9"><h3>3.9</h3></a>
734 <p><!--para 1-->
735  correctly rounded result
736  representation in the result format that is nearest in value, subject to the current rounding
737  mode, to what the result would be given unlimited range and precision
738
739 <a name="3.10" href="#3.10"><h3>3.10</h3></a>
740 <p><!--para 1-->
741  diagnostic message
742  message belonging to an implementation-defined subset of the implementation's message
743  output
744
745 <a name="3.11" href="#3.11"><h3>3.11</h3></a>
746 <p><!--para 1-->
747  forward reference
748  reference to a later subclause of this International Standard that contains additional
749  information relevant to this subclause
750
751 <a name="3.12" href="#3.12"><h3>3.12</h3></a>
752 <p><!--para 1-->
753  implementation
754  particular set of software, running in a particular translation environment under particular
755  control options, that performs translation of programs for, and supports execution of
756  functions in, a particular execution environment
757
758 <a name="3.13" href="#3.13"><h3>3.13</h3></a>
759 <p><!--para 1-->
760  implementation limit
761  restriction imposed upon programs by the implementation
762
763 <a name="3.14" href="#3.14"><h3>3.14</h3></a>
764 <p><!--para 1-->
765  object
766  region of data storage in the execution environment, the contents of which can represent
767  values
768 <!--page 18 indent 4-->
769 <p><!--para 2-->
770  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>.
771  
772
773 <a name="3.15" href="#3.15"><h3>3.15</h3></a>
774 <p><!--para 1-->
775  parameter
776  formal parameter
777  formal argument (deprecated)
778  object declared as part of a function declaration or definition that acquires a value on
779  entry to the function, or an identifier from the comma-separated list bounded by the
780  parentheses immediately following the macro name in a function-like macro definition
781
782 <a name="3.16" href="#3.16"><h3>3.16</h3></a>
783 <p><!--para 1-->
784  recommended practice
785  specification that is strongly recommended as being in keeping with the intent of the
786  standard, but that may be impractical for some implementations
787
788 <a name="3.17" href="#3.17"><h3>3.17</h3></a>
789 <p><!--para 1-->
790  value
791  precise meaning of the contents of an object when interpreted as having a specific type
792
793 <a name="3.17.1" href="#3.17.1"><h4>3.17.1</h4></a>
794 <p><!--para 1-->
795  implementation-defined value
796  unspecified value where each implementation documents how the choice is made
797
798 <a name="3.17.2" href="#3.17.2"><h4>3.17.2</h4></a>
799 <p><!--para 1-->
800  indeterminate value
801  either an unspecified value or a trap representation
802
803 <a name="3.17.3" href="#3.17.3"><h4>3.17.3</h4></a>
804 <p><!--para 1-->
805  unspecified value
806  valid value of the relevant type where this International Standard imposes no
807  requirements on which value is chosen in any instance
808 <p><!--para 2-->
809  NOTE     An unspecified value cannot be a trap representation.
810  
811
812 <a name="3.18" href="#3.18"><h3>3.18</h3></a>
813 <p><!--para 1-->
814  ??? x???
815  ceiling of x: the least integer greater than or equal to x
816 <p><!--para 2-->
817  EXAMPLE       ???2.4??? is 3, ???-2.4??? is -2.
818  
819
820 <a name="3.19" href="#3.19"><h3>3.19</h3></a>
821 <p><!--para 1-->
822  ??? x???
823  floor of x: the greatest integer less than or equal to x
824 <p><!--para 2-->
825  EXAMPLE       ???2.4??? is 2, ???-2.4??? is -3.
826 <!--page 19 indent 4-->
827
828 <a name="4" href="#4"><h2>4. Conformance</h2></a>
829 <p><!--para 1-->
830  In this International Standard, ''shall'' is to be interpreted as a requirement on an
831  implementation or on a program; conversely, ''shall not'' is to be interpreted as a
832  prohibition.
833 <p><!--para 2-->
834  If a ''shall'' or ''shall not'' requirement that appears outside of a constraint is violated, the
835  behavior is undefined. Undefined behavior is otherwise indicated in this International
836  Standard by the words ''undefined behavior'' or by the omission of any explicit definition
837  of behavior. There is no difference in emphasis among these three; they all describe
838  ''behavior that is undefined''.
839 <p><!--para 3-->
840  A program that is correct in all other aspects, operating on correct data, containing
841  unspecified behavior shall be a correct program and act in accordance with <a href="#5.1.2.3">5.1.2.3</a>.
842 <p><!--para 4-->
843  The implementation shall not successfully translate a preprocessing translation unit
844  containing a #error preprocessing directive unless it is part of a group skipped by
845  conditional inclusion.
846 <p><!--para 5-->
847  A strictly conforming program shall use only those features of the language and library
848  specified in this International Standard.<sup><a href="#note2"><b>2)</b></a></sup> It shall not produce output dependent on any
849  unspecified, undefined, or implementation-defined behavior, and shall not exceed any
850  minimum implementation limit.
851 <p><!--para 6-->
852  The two forms of conforming implementation are hosted and freestanding. A conforming
853  hosted implementation shall accept any strictly conforming program. A conforming
854  freestanding implementation shall accept any strictly conforming program that does not
855  use complex types and in which the use of the features specified in the library clause
856  (clause 7) is confined to the contents of the standard headers <a href="#7.7">&lt;float.h&gt;</a>,
857  <a href="#7.9">&lt;iso646.h&gt;</a>, <a href="#7.10">&lt;limits.h&gt;</a>, <a href="#7.15">&lt;stdarg.h&gt;</a>, <a href="#7.16">&lt;stdbool.h&gt;</a>, <a href="#7.17">&lt;stddef.h&gt;</a>, and
858  <a href="#7.18">&lt;stdint.h&gt;</a>. A conforming implementation may have extensions (including additional
859  library functions), provided they do not alter the behavior of any strictly conforming
860  program.<sup><a href="#note3"><b>3)</b></a></sup>
861  
862  
863  
864 <!--page 20 indent 4-->
865 <p><!--para 7-->
866  A conforming program is one that is acceptable to a conforming implementation.<sup><a href="#note4"><b>4)</b></a></sup>
867 <p><!--para 8-->
868  An implementation shall be accompanied by a document that defines all implementation-
869  defined and locale-specific characteristics and all extensions.
870 <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>),
871  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>
872  (<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>), variable arguments <a href="#7.15">&lt;stdarg.h&gt;</a>
873  (<a href="#7.15">7.15</a>), boolean type and values <a href="#7.16">&lt;stdbool.h&gt;</a> (<a href="#7.16">7.16</a>), common definitions
874  <a href="#7.17">&lt;stddef.h&gt;</a> (<a href="#7.17">7.17</a>), integer types <a href="#7.18">&lt;stdint.h&gt;</a> (<a href="#7.18">7.18</a>).
875  
876  
877  
878  
879 <!--page 21 indent 4-->
880
881 <h6>footnotes</h6>
882 <p><a name="note2">2)</a> A strictly conforming program can use conditional features (such as those in <a href="#F">annex F</a>) provided the
883  use is guarded by a #ifdef directive with the appropriate macro. For example:
884
885 <pre>
886          #ifdef __STDC_IEC_559__ /* FE_UPWARD defined */
887             /* ... */
888             fesetround(FE_UPWARD);
889             /* ... */
890          #endif</pre>
891  
892
893 <p><a name="note3">3)</a> This implies that a conforming implementation reserves no identifiers other than those explicitly
894  reserved in this International Standard.
895
896 <p><a name="note4">4)</a> Strictly conforming programs are intended to be maximally portable among conforming
897  implementations. Conforming programs may depend upon nonportable features of a conforming
898  implementation.
899
900
901 <a name="5" href="#5"><h2>5. Environment</h2></a>
902 <p><!--para 1-->
903  An implementation translates C source files and executes C programs in two data-
904  processing-system environments, which will be called the translation environment and
905  the execution environment in this International Standard. Their characteristics define and
906  constrain the results of executing conforming C programs constructed according to the
907  syntactic and semantic rules for conforming implementations.
908 <p><b> Forward references</b>: In this clause, only a few of many possible forward references
909  have been noted.
910
911 <a name="5.1" href="#5.1"><h3>5.1 Conceptual models</h3></a>
912
913 <a name="5.1.1" href="#5.1.1"><h4>5.1.1 Translation environment</h4></a>
914
915 <a name="5.1.1.1" href="#5.1.1.1"><h5>5.1.1.1 Program structure</h5></a>
916 <p><!--para 1-->
917  A C program need not all be translated at the same time. The text of the program is kept
918  in units called source files, (or preprocessing files) in this International Standard. A
919  source file together with all the headers and source files included via the preprocessing
920  directive #include is known as a preprocessing translation unit. After preprocessing, a
921  preprocessing translation unit is called a translation unit. Previously translated translation
922  units may be preserved individually or in libraries. The separate translation units of a
923  program communicate by (for example) calls to functions whose identifiers have external
924  linkage, manipulation of objects whose identifiers have external linkage, or manipulation
925  of data files. Translation units may be separately translated and then later linked to
926  produce an executable program.
927 <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>),
928  preprocessing directives (<a href="#6.10">6.10</a>).
929
930 <a name="5.1.1.2" href="#5.1.1.2"><h5>5.1.1.2 Translation phases</h5></a>
931 <p><!--para 1-->
932  The precedence among the syntax rules of translation is specified by the following
933  phases.<sup><a href="#note5"><b>5)</b></a></sup>
934 <ol>
935 <li>  Physical source file multibyte characters are mapped, in an implementation-
936  defined manner, to the source character set (introducing new-line characters for
937  end-of-line indicators) if necessary. Trigraph sequences are replaced by
938  corresponding single-character internal representations.
939  
940  
941  
942 <!--page 22 indent 0-->
943 <li>  Each instance of a backslash character (\) immediately followed by a new-line
944  character is deleted, splicing physical source lines to form logical source lines.
945  Only the last backslash on any physical source line shall be eligible for being part
946  of such a splice. A source file that is not empty shall end in a new-line character,
947  which shall not be immediately preceded by a backslash character before any such
948  splicing takes place.
949 <li>  The source file is decomposed into preprocessing tokens<sup><a href="#note6"><b>6)</b></a></sup> and sequences of
950  white-space characters (including comments). A source file shall not end in a
951  partial preprocessing token or in a partial comment. Each comment is replaced by
952  one space character. New-line characters are retained. Whether each nonempty
953  sequence of white-space characters other than new-line is retained or replaced by
954  one space character is implementation-defined.
955 <li>  Preprocessing directives are executed, macro invocations are expanded, and
956  _Pragma unary operator expressions are executed. If a character sequence that
957  matches the syntax of a universal character name is produced by token
958  concatenation (<a href="#6.10.3.3">6.10.3.3</a>), the behavior is undefined. A #include preprocessing
959  directive causes the named header or source file to be processed from phase 1
960  through phase 4, recursively. All preprocessing directives are then deleted.
961 <li>  Each source character set member and escape sequence in character constants and
962  string literals is converted to the corresponding member of the execution character
963  set; if there is no corresponding member, it is converted to an implementation-
964  defined member other than the null (wide) character.<sup><a href="#note7"><b>7)</b></a></sup>
965 <li>  Adjacent string literal tokens are concatenated.
966 <li>  White-space characters separating tokens are no longer significant. Each
967  preprocessing token is converted into a token. The resulting tokens are
968  syntactically and semantically analyzed and translated as a translation unit.
969 <li>  All external object and function references are resolved. Library components are
970  linked to satisfy external references to functions and objects not defined in the
971  current translation. All such translator output is collected into a program image
972  which contains information needed for execution in its execution environment.
973 </ol>
974 <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>),
975  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>).
976  
977  
978  
979 <!--page 23 indent 4-->
980
981 <h6>footnotes</h6>
982 <p><a name="note5">5)</a> Implementations shall behave as if these separate phases occur, even though many are typically folded
983  together in practice. Source files, translation units, and translated translation units need not
984  necessarily be stored as files, nor need there be any one-to-one correspondence between these entities
985  and any external representation. The description is conceptual only, and does not specify any
986  particular implementation.
987
988 <p><a name="note6">6)</a> As described in <a href="#6.4">6.4</a>, the process of dividing a source file's characters into preprocessing tokens is
989  context-dependent. For example, see the handling of &lt; within a #include preprocessing directive.
990
991 <p><a name="note7">7)</a> An implementation need not convert all non-corresponding source characters to the same execution
992  character.
993
994
995 <a name="5.1.1.3" href="#5.1.1.3"><h5>5.1.1.3 Diagnostics</h5></a>
996 <p><!--para 1-->
997  A conforming implementation shall produce at least one diagnostic message (identified in
998  an implementation-defined manner) if a preprocessing translation unit or translation unit
999  contains a violation of any syntax rule or constraint, even if the behavior is also explicitly
1000  specified as undefined or implementation-defined. Diagnostic messages need not be
1001  produced in other circumstances.<sup><a href="#note8"><b>8)</b></a></sup>
1002 <p><!--para 2-->
1003  EXAMPLE        An implementation shall issue a diagnostic for the translation unit:
1004 <pre>
1005           char i;
1006           int i;</pre>
1007  because in those cases where wording in this International Standard describes the behavior for a construct
1008  as being both a constraint error and resulting in undefined behavior, the constraint error shall be diagnosed.
1009  
1010
1011 <h6>footnotes</h6>
1012 <p><a name="note8">8)</a> The intent is that an implementation should identify the nature of, and where possible localize, each
1013  violation. Of course, an implementation is free to produce any number of diagnostics as long as a
1014  valid program is still correctly translated. It may also successfully translate an invalid program.
1015
1016
1017 <a name="5.1.2" href="#5.1.2"><h4>5.1.2 Execution environments</h4></a>
1018 <p><!--para 1-->
1019  Two execution environments are defined: freestanding and hosted. In both cases,
1020  program startup occurs when a designated C function is called by the execution
1021  environment. All objects with static storage duration shall be initialized (set to their
1022  initial values) before program startup. The manner and timing of such initialization are
1023  otherwise unspecified. Program termination returns control to the execution
1024  environment.
1025 <p><b> Forward references</b>: storage durations of objects (<a href="#6.2.4">6.2.4</a>), initialization (<a href="#6.7.8">6.7.8</a>).
1026
1027 <a name="5.1.2.1" href="#5.1.2.1"><h5>5.1.2.1 Freestanding environment</h5></a>
1028 <p><!--para 1-->
1029  In a freestanding environment (in which C program execution may take place without any
1030  benefit of an operating system), the name and type of the function called at program
1031  startup are implementation-defined. Any library facilities available to a freestanding
1032  program, other than the minimal set required by clause 4, are implementation-defined.
1033 <p><!--para 2-->
1034  The effect of program termination in a freestanding environment is implementation-
1035  defined.
1036
1037 <a name="5.1.2.2" href="#5.1.2.2"><h5>5.1.2.2 Hosted environment</h5></a>
1038 <p><!--para 1-->
1039  A hosted environment need not be provided, but shall conform to the following
1040  specifications if present.
1041  
1042  
1043  
1044  
1045 <!--page 24 indent 4-->
1046
1047 <a name="5.1.2.2.1" href="#5.1.2.2.1"><h5>5.1.2.2.1 Program startup</h5></a>
1048 <p><!--para 1-->
1049  The function called at program startup is named main. The implementation declares no
1050  prototype for this function. It shall be defined with a return type of int and with no
1051  parameters:
1052 <pre>
1053          int main(void) { /* ... */ }</pre>
1054  or with two parameters (referred to here as argc and argv, though any names may be
1055  used, as they are local to the function in which they are declared):
1056 <pre>
1057          int main(int argc, char *argv[]) { /* ... */ }</pre>
1058  or equivalent;<sup><a href="#note9"><b>9)</b></a></sup> or in some other implementation-defined manner.
1059 <p><!--para 2-->
1060  If they are declared, the parameters to the main function shall obey the following
1061  constraints:
1062 <ul>
1063 <li>  The value of argc shall be nonnegative.
1064 <li>  argv[argc] shall be a null pointer.
1065 <li>  If the value of argc is greater than zero, the array members argv[0] through
1066  argv[argc-1] inclusive shall contain pointers to strings, which are given
1067  implementation-defined values by the host environment prior to program startup. The
1068  intent is to supply to the program information determined prior to program startup
1069  from elsewhere in the hosted environment. If the host environment is not capable of
1070  supplying strings with letters in both uppercase and lowercase, the implementation
1071  shall ensure that the strings are received in lowercase.
1072 <li>  If the value of argc is greater than zero, the string pointed to by argv[0]
1073  represents the program name; argv[0][0] shall be the null character if the
1074  program name is not available from the host environment. If the value of argc is
1075  greater than one, the strings pointed to by argv[1] through argv[argc-1]
1076  represent the program parameters.
1077 <li>  The parameters argc and argv and the strings pointed to by the argv array shall
1078  be modifiable by the program, and retain their last-stored values between program
1079  startup and program termination.
1080 </ul>
1081
1082 <h6>footnotes</h6>
1083 <p><a name="note9">9)</a> Thus, int can be replaced by a typedef name defined as int, or the type of argv can be written as
1084  char ** argv, and so on.
1085
1086
1087 <a name="5.1.2.2.2" href="#5.1.2.2.2"><h5>5.1.2.2.2 Program execution</h5></a>
1088 <p><!--para 1-->
1089  In a hosted environment, a program may use all the functions, macros, type definitions,
1090  and objects described in the library clause (clause 7).
1091  
1092  
1093  
1094 <!--page 25 indent 4-->
1095
1096 <a name="5.1.2.2.3" href="#5.1.2.2.3"><h5>5.1.2.2.3 Program termination</h5></a>
1097 <p><!--para 1-->
1098  If the return type of the main function is a type compatible with int, a return from the
1099  initial call to the main function is equivalent to calling the exit function with the value
1100  returned by the main function as its argument;<sup><a href="#note10"><b>10)</b></a></sup> reaching the } that terminates the
1101  main function returns a value of 0. If the return type is not compatible with int, the
1102  termination status returned to the host environment is unspecified.
1103 <p><b> Forward references</b>: definition of terms (<a href="#7.1.1">7.1.1</a>), the exit function (<a href="#7.20.4.3">7.20.4.3</a>).
1104
1105 <h6>footnotes</h6>
1106 <p><a name="note10">10)</a> In accordance with <a href="#6.2.4">6.2.4</a>, the lifetimes of objects with automatic storage duration declared in main
1107  will have ended in the former case, even where they would not have in the latter.
1108
1109
1110 <a name="5.1.2.3" href="#5.1.2.3"><h5>5.1.2.3 Program execution</h5></a>
1111 <p><!--para 1-->
1112  The semantic descriptions in this International Standard describe the behavior of an
1113  abstract machine in which issues of optimization are irrelevant.
1114 <p><!--para 2-->
1115  Accessing a volatile object, modifying an object, modifying a file, or calling a function
1116  that does any of those operations are all side effects,<sup><a href="#note11"><b>11)</b></a></sup> which are changes in the state of
1117  the execution environment. Evaluation of an expression may produce side effects. At
1118  certain specified points in the execution sequence called sequence points, all side effects
1119  of previous evaluations shall be complete and no side effects of subsequent evaluations
1120  shall have taken place. (A summary of the sequence points is given in <a href="#C">annex C</a>.)
1121 <p><!--para 3-->
1122  In the abstract machine, all expressions are evaluated as specified by the semantics. An
1123  actual implementation need not evaluate part of an expression if it can deduce that its
1124  value is not used and that no needed side effects are produced (including any caused by
1125  calling a function or accessing a volatile object).
1126 <p><!--para 4-->
1127  When the processing of the abstract machine is interrupted by receipt of a signal, only the
1128  values of objects as of the previous sequence point may be relied on. Objects that may be
1129  modified between the previous sequence point and the next sequence point need not have
1130  received their correct values yet.
1131 <p><!--para 5-->
1132  The least requirements on a conforming implementation are:
1133 <ul>
1134 <li>  At sequence points, volatile objects are stable in the sense that previous accesses are
1135  complete and subsequent accesses have not yet occurred.
1136  
1137  
1138  
1139  
1140 <!--page 26 indent 5-->
1141 <li>  At program termination, all data written into files shall be identical to the result that
1142  execution of the program according to the abstract semantics would have produced.
1143 <li>  The input and output dynamics of interactive devices shall take place as specified in
1144  <a href="#7.19.3">7.19.3</a>. The intent of these requirements is that unbuffered or line-buffered output
1145  appear as soon as possible, to ensure that prompting messages actually appear prior to
1146  a program waiting for input.
1147 </ul>
1148 <p><!--para 6-->
1149  What constitutes an interactive device is implementation-defined.
1150 <p><!--para 7-->
1151  More stringent correspondences between abstract and actual semantics may be defined by
1152  each implementation.
1153 <p><!--para 8-->
1154  EXAMPLE 1 An implementation might define a one-to-one correspondence between abstract and actual
1155  semantics: at every sequence point, the values of the actual objects would agree with those specified by the
1156  abstract semantics. The keyword volatile would then be redundant.
1157 <p><!--para 9-->
1158  Alternatively, an implementation might perform various optimizations within each translation unit, such
1159  that the actual semantics would agree with the abstract semantics only when making function calls across
1160  translation unit boundaries. In such an implementation, at the time of each function entry and function
1161  return where the calling function and the called function are in different translation units, the values of all
1162  externally linked objects and of all objects accessible via pointers therein would agree with the abstract
1163  semantics. Furthermore, at the time of each such function entry the values of the parameters of the called
1164  function and of all objects accessible via pointers therein would agree with the abstract semantics. In this
1165  type of implementation, objects referred to by interrupt service routines activated by the signal function
1166  would require explicit specification of volatile storage, as well as other implementation-defined
1167  restrictions.
1168  
1169 <p><!--para 10-->
1170  EXAMPLE 2       In executing the fragment
1171 <pre>
1172           char c1, c2;
1173           /* ... */
1174           c1 = c1 + c2;</pre>
1175  the ''integer promotions'' require that the abstract machine promote the value of each variable to int size
1176  and then add the two ints and truncate the sum. Provided the addition of two chars can be done without
1177  overflow, or with overflow wrapping silently to produce the correct result, the actual execution need only
1178  produce the same result, possibly omitting the promotions.
1179  
1180 <p><!--para 11-->
1181  EXAMPLE 3       Similarly, in the fragment
1182 <pre>
1183           float f1, f2;
1184           double d;
1185           /* ... */
1186           f1 = f2 * d;</pre>
1187  the multiplication may be executed using single-precision arithmetic if the implementation can ascertain
1188  that the result would be the same as if it were executed using double-precision arithmetic (for example, if d
1189  were replaced by the constant 2.0, which has type double).
1190 <!--page 27 indent 5-->
1191 <p><!--para 12-->
1192  EXAMPLE 4 Implementations employing wide registers have to take care to honor appropriate
1193  semantics. Values are independent of whether they are represented in a register or in memory. For
1194  example, an implicit spilling of a register is not permitted to alter the value. Also, an explicit store and load
1195  is required to round to the precision of the storage type. In particular, casts and assignments are required to
1196  perform their specified conversion. For the fragment
1197 <pre>
1198           double d1, d2;
1199           float f;
1200           d1 = f = expression;
1201           d2 = (float) expression;</pre>
1202  the values assigned to d1 and d2 are required to have been converted to float.
1203  
1204 <p><!--para 13-->
1205  EXAMPLE 5 Rearrangement for floating-point expressions is often restricted because of limitations in
1206  precision as well as range. The implementation cannot generally apply the mathematical associative rules
1207  for addition or multiplication, nor the distributive rule, because of roundoff error, even in the absence of
1208  overflow and underflow. Likewise, implementations cannot generally replace decimal constants in order to
1209  rearrange expressions. In the following fragment, rearrangements suggested by mathematical rules for real
1210  numbers are often not valid (see <a href="#F.8">F.8</a>).
1211 <pre>
1212           double x, y, z;
1213           /* ... */
1214           x = (x * y) * z;            //   not equivalent to x   *= y * z;
1215           z = (x - y) + y ;           //   not equivalent to z   = x;
1216           z = x + x * y;              //   not equivalent to z   = x * (1.0 + y);
1217           y = x / 5.0;                //   not equivalent to y   = x * 0.2;</pre>
1218  
1219 <p><!--para 14-->
1220  EXAMPLE 6 To illustrate the grouping behavior of expressions, in the following fragment
1221 <pre>
1222           int a, b;
1223           /* ... */
1224           a = a + 32760 + b + 5;</pre>
1225  the expression statement behaves exactly the same as
1226 <pre>
1227           a = (((a + 32760) + b) + 5);</pre>
1228  due to the associativity and precedence of these operators. Thus, the result of the sum (a + 32760) is
1229  next added to b, and that result is then added to 5 which results in the value assigned to a. On a machine in
1230  which overflows produce an explicit trap and in which the range of values representable by an int is
1231  [-32768, +32767], the implementation cannot rewrite this expression as
1232 <pre>
1233           a = ((a + b) + 32765);</pre>
1234  since if the values for a and b were, respectively, -32754 and -15, the sum a + b would produce a trap
1235  while the original expression would not; nor can the expression be rewritten either as
1236 <pre>
1237           a = ((a + 32765) + b);</pre>
1238  or
1239 <pre>
1240           a = (a + (b + 32765));</pre>
1241  since the values for a and b might have been, respectively, 4 and -8 or -17 and 12. However, on a machine
1242  in which overflow silently generates some value and where positive and negative overflows cancel, the
1243  above expression statement can be rewritten by the implementation in any of the above ways because the
1244  same result will occur.
1245 <!--page 28 indent 5-->
1246 <p><!--para 15-->
1247  EXAMPLE 7 The grouping of an expression does not completely determine its evaluation. In the
1248  following fragment
1249 <pre>
1250           #include <a href="#7.19">&lt;stdio.h&gt;</a>
1251           int sum;
1252           char *p;
1253           /* ... */
1254           sum = sum * 10 - '0' + (*p++ = getchar());</pre>
1255  the expression statement is grouped as if it were written as
1256 <pre>
1257           sum = (((sum * 10) - '0') + ((*(p++)) = (getchar())));</pre>
1258  but the actual increment of p can occur at any time between the previous sequence point and the next
1259  sequence point (the ;), and the call to getchar can occur at any point prior to the need of its returned
1260  value.
1261  
1262 <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
1263  signal function (<a href="#7.14">7.14</a>), files (<a href="#7.19.3">7.19.3</a>).
1264 <!--page 29 indent 4-->
1265
1266 <h6>footnotes</h6>
1267 <p><a name="note11">11)</a> The IEC 60559 standard for binary floating-point arithmetic requires certain user-accessible status
1268  flags and control modes. Floating-point operations implicitly set the status flags; modes affect result
1269  values of floating-point operations. Implementations that support such floating-point state are
1270  required to regard changes to it as side effects -- see <a href="#F">annex F</a> for details. The floating-point
1271  environment library <a href="#7.6">&lt;fenv.h&gt;</a> provides a programming facility for indicating when these side
1272  effects matter, freeing the implementations in other cases.
1273
1274
1275 <a name="5.2" href="#5.2"><h3>5.2 Environmental considerations</h3></a>
1276
1277 <a name="5.2.1" href="#5.2.1"><h4>5.2.1 Character sets</h4></a>
1278 <p><!--para 1-->
1279  Two sets of characters and their associated collating sequences shall be defined: the set in
1280  which source files are written (the source character set), and the set interpreted in the
1281  execution environment (the execution character set). Each set is further divided into a
1282  basic character set, whose contents are given by this subclause, and a set of zero or more
1283  locale-specific members (which are not members of the basic character set) called
1284  extended characters. The combined set is also called the extended character set. The
1285  values of the members of the execution character set are implementation-defined.
1286 <p><!--para 2-->
1287  In a character constant or string literal, members of the execution character set shall be
1288  represented by corresponding members of the source character set or by escape
1289  sequences consisting of the backslash \ followed by one or more characters. A byte with
1290  all bits set to 0, called the null character, shall exist in the basic execution character set; it
1291  is used to terminate a character string.
1292 <p><!--para 3-->
1293  Both the basic source and basic execution character sets shall have the following
1294  members: the 26 uppercase letters of the Latin alphabet
1295 <pre>
1296           A   B   C      D   E   F    G    H    I    J    K    L   M
1297           N   O   P      Q   R   S    T    U    V    W    X    Y   Z</pre>
1298  the 26 lowercase letters of the Latin alphabet
1299 <pre>
1300           a   b   c      d   e   f    g    h    i    j    k    l   m
1301           n   o   p      q   r   s    t    u    v    w    x    y   z</pre>
1302  the 10 decimal digits
1303 <pre>
1304           0   1   2      3   4   5    6    7    8    9</pre>
1305  the following 29 graphic characters
1306 <pre>
1307           !   "   #      %   &amp;   '    (    )    *    +    ,    -   .    /    :
1308           ;   &lt;   =      &gt;   ?   [    \    ]    ^    _    {    |   }    ~</pre>
1309  the space character, and control characters representing horizontal tab, vertical tab, and
1310  form feed. The representation of each member of the source and execution basic
1311  character sets shall fit in a byte. In both the source and execution basic character sets, the
1312  value of each character after 0 in the above list of decimal digits shall be one greater than
1313  the value of the previous. In source files, there shall be some way of indicating the end of
1314  each line of text; this International Standard treats such an end-of-line indicator as if it
1315  were a single new-line character. In the basic execution character set, there shall be
1316  control characters representing alert, backspace, carriage return, and new line. If any
1317  other characters are encountered in a source file (except in an identifier, a character
1318  constant, a string literal, a header name, a comment, or a preprocessing token that is never
1319 <!--page 30 indent 4-->
1320  converted to a token), the behavior is undefined.
1321 <p><!--para 4-->
1322  A letter is an uppercase letter or a lowercase letter as defined above; in this International
1323  Standard the term does not include other characters that are letters in other alphabets.
1324 <p><!--para 5-->
1325  The universal character name construct provides a way to name other characters.
1326 <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>),
1327  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>).
1328
1329 <a name="5.2.1.1" href="#5.2.1.1"><h5>5.2.1.1 Trigraph sequences</h5></a>
1330 <p><!--para 1-->
1331  Before any other processing takes place, each occurrence of one of the following
1332  sequences of three characters (called trigraph sequences<sup><a href="#note12"><b>12)</b></a></sup>) is replaced with the
1333  corresponding single character.
1334 <pre>
1335         ??=      #                       ??)      ]                       ??!     |
1336         ??(      [                       ??'      ^                       ??&gt;     }
1337         ??/      \                       ??&lt;      {                       ??-     ~</pre>
1338  No other trigraph sequences exist. Each ? that does not begin one of the trigraphs listed
1339  above is not changed.
1340 <p><!--para 2-->
1341  EXAMPLE 1
1342 <pre>
1343            ??=define arraycheck(a, b) a??(b??) ??!??! b??(a??)</pre>
1344  becomes
1345 <pre>
1346            #define arraycheck(a, b) a[b] || b[a]</pre>
1347  
1348 <p><!--para 3-->
1349  EXAMPLE 2      The following source line
1350 <pre>
1351            printf("Eh???/n");</pre>
1352  becomes (after replacement of the trigraph sequence ??/)
1353 <pre>
1354            printf("Eh?\n");</pre>
1355  
1356
1357 <h6>footnotes</h6>
1358 <p><a name="note12">12)</a> The trigraph sequences enable the input of characters that are not defined in the Invariant Code Set as
1359  described in ISO/IEC 646, which is a subset of the seven-bit US ASCII code set.
1360
1361
1362 <a name="5.2.1.2" href="#5.2.1.2"><h5>5.2.1.2 Multibyte characters</h5></a>
1363 <p><!--para 1-->
1364  The source character set may contain multibyte characters, used to represent members of
1365  the extended character set. The execution character set may also contain multibyte
1366  characters, which need not have the same encoding as for the source character set. For
1367  both character sets, the following shall hold:
1368 <ul>
1369 <li>  The basic character set shall be present and each character shall be encoded as a
1370  single byte.
1371 <li>  The presence, meaning, and representation of any additional members is locale-
1372  specific.
1373  
1374 <!--page 31 indent 4-->
1375 <li>  A multibyte character set may have a state-dependent encoding, wherein each
1376  sequence of multibyte characters begins in an initial shift state and enters other
1377  locale-specific shift states when specific multibyte characters are encountered in the
1378  sequence. While in the initial shift state, all single-byte characters retain their usual
1379  interpretation and do not alter the shift state. The interpretation for subsequent bytes
1380  in the sequence is a function of the current shift state.
1381 <li>  A byte with all bits zero shall be interpreted as a null character independent of shift
1382  state. Such a byte shall not occur as part of any other multibyte character.
1383 </ul>
1384 <p><!--para 2-->
1385  For source files, the following shall hold:
1386 <ul>
1387 <li>  An identifier, comment, string literal, character constant, or header name shall begin
1388  and end in the initial shift state.
1389 <li>  An identifier, comment, string literal, character constant, or header name shall consist
1390  of a sequence of valid multibyte characters.
1391 </ul>
1392
1393 <a name="5.2.2" href="#5.2.2"><h4>5.2.2 Character display semantics</h4></a>
1394 <p><!--para 1-->
1395  The active position is that location on a display device where the next character output by
1396  the fputc function would appear. The intent of writing a printing character (as defined
1397  by the isprint function) to a display device is to display a graphic representation of
1398  that character at the active position and then advance the active position to the next
1399  position on the current line. The direction of writing is locale-specific. If the active
1400  position is at the final position of a line (if there is one), the behavior of the display device
1401  is unspecified.
1402 <p><!--para 2-->
1403  Alphabetic escape sequences representing nongraphic characters in the execution
1404  character set are intended to produce actions on display devices as follows:
1405  \a (alert) Produces an audible or visible alert without changing the active position.
1406  \b (backspace) Moves the active position to the previous position on the current line. If
1407 <pre>
1408     the active position is at the initial position of a line, the behavior of the display
1409     device is unspecified.</pre>
1410  \f ( form feed) Moves the active position to the initial position at the start of the next
1411 <pre>
1412     logical page.</pre>
1413  \n (new line) Moves the active position to the initial position of the next line.
1414  \r (carriage return) Moves the active position to the initial position of the current line.
1415  \t (horizontal tab) Moves the active position to the next horizontal tabulation position
1416 <pre>
1417     on the current line. If the active position is at or past the last defined horizontal
1418     tabulation position, the behavior of the display device is unspecified.</pre>
1419  \v (vertical tab) Moves the active position to the initial position of the next vertical
1420 <!--page 32 indent 4-->
1421 <p><!--para 3-->
1422 <pre>
1423      tabulation position. If the active position is at or past the last defined vertical
1424       tabulation position, the behavior of the display device is unspecified.</pre>
1425  Each of these escape sequences shall produce a unique implementation-defined value
1426  which can be stored in a single char object. The external representations in a text file
1427  need not be identical to the internal representations, and are outside the scope of this
1428  International Standard.
1429 <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.19.7.3">7.19.7.3</a>).
1430
1431 <a name="5.2.3" href="#5.2.3"><h4>5.2.3 Signals and interrupts</h4></a>
1432 <p><!--para 1-->
1433  Functions shall be implemented such that they may be interrupted at any time by a signal,
1434  or may be called by a signal handler, or both, with no alteration to earlier, but still active,
1435  invocations' control flow (after the interruption), function return values, or objects with
1436  automatic storage duration. All such objects shall be maintained outside the function
1437  image (the instructions that compose the executable representation of a function) on a
1438  per-invocation basis.
1439
1440 <a name="5.2.4" href="#5.2.4"><h4>5.2.4 Environmental limits</h4></a>
1441 <p><!--para 1-->
1442  Both the translation and execution environments constrain the implementation of
1443  language translators and libraries. The following summarizes the language-related
1444  environmental limits on a conforming implementation; the library-related limits are
1445  discussed in clause 7.
1446
1447 <a name="5.2.4.1" href="#5.2.4.1"><h5>5.2.4.1 Translation limits</h5></a>
1448 <p><!--para 1-->
1449  The implementation shall be able to translate and execute at least one program that
1450  contains at least one instance of every one of the following limits:<sup><a href="#note13"><b>13)</b></a></sup>
1451 <ul>
1452 <li>  127 nesting levels of blocks
1453 <li>  63 nesting levels of conditional inclusion
1454 <li>  12 pointer, array, and function declarators (in any combinations) modifying an
1455  arithmetic, structure, union, or incomplete type in a declaration
1456 <li>  63 nesting levels of parenthesized declarators within a full declarator
1457 <li>  63 nesting levels of parenthesized expressions within a full expression
1458 <li>  63 significant initial characters in an internal identifier or a macro name (each
1459  universal character name or extended source character is considered a single
1460  character)
1461 <li>  31 significant initial characters in an external identifier (each universal character name
1462  specifying a short identifier of 0000FFFF or less is considered 6 characters, each
1463  
1464  
1465 <!--page 33 indent 4-->
1466    universal character name specifying a short identifier of 00010000 or more is
1467    considered 10 characters, and each extended source character is considered the same
1468    number of characters as the corresponding universal character name, if any)<sup><a href="#note14"><b>14)</b></a></sup>
1469 <li>  4095 external identifiers in one translation unit
1470 <li>  511 identifiers with block scope declared in one block
1471 <li>  4095 macro identifiers simultaneously defined in one preprocessing translation unit
1472 <li>  127 parameters in one function definition
1473 <li>  127 arguments in one function call
1474 <li>  127 parameters in one macro definition
1475 <li>  127 arguments in one macro invocation
1476 <li>  4095 characters in a logical source line
1477 <li>  4095 characters in a character string literal or wide string literal (after concatenation)
1478 <li>  65535 bytes in an object (in a hosted environment only)
1479 <li>  15 nesting levels for #included files
1480 <li>  1023 case labels for a switch statement (excluding those for any nested switch
1481  statements)
1482 <li>  1023 members in a single structure or union
1483 <li>  1023 enumeration constants in a single enumeration
1484 <li>  63 levels of nested structure or union definitions in a single struct-declaration-list
1485 </ul>
1486
1487 <h6>footnotes</h6>
1488 <p><a name="note13">13)</a> Implementations should avoid imposing fixed translation limits whenever possible.
1489
1490 <p><a name="note14">14)</a> See ''future language directions'' (<a href="#6.11.3">6.11.3</a>).
1491
1492
1493 <a name="5.2.4.2" href="#5.2.4.2"><h5>5.2.4.2 Numerical limits</h5></a>
1494 <p><!--para 1-->
1495  An implementation is required to document all the limits specified in this subclause,
1496  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
1497  specified in <a href="#7.18">&lt;stdint.h&gt;</a>.
1498 <p><b> Forward references</b>: integer types <a href="#7.18">&lt;stdint.h&gt;</a> (<a href="#7.18">7.18</a>).
1499
1500 <a name="5.2.4.2.1" href="#5.2.4.2.1"><h5>5.2.4.2.1 Sizes of integer types <limits.h></h5></a>
1501 <p><!--para 1-->
1502  The values given below shall be replaced by constant expressions suitable for use in #if
1503  preprocessing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the
1504  following shall be replaced by expressions that have the same type as would an
1505  expression that is an object of the corresponding type converted according to the integer
1506  promotions. Their implementation-defined values shall be equal or greater in magnitude
1507  
1508  
1509 <!--page 34 indent 0-->
1510  (absolute value) to those shown, with the same sign.
1511 <ul>
1512 <li>  number of bits for smallest object that is not a bit-field (byte)
1513  CHAR_BIT                                            8
1514 <li>  minimum value for an object of type signed char
1515  SCHAR_MIN                                -127 // -(27 - 1)
1516 <li>  maximum value for an object of type signed char
1517  SCHAR_MAX                                +127 // 27 - 1
1518 <li>  maximum value for an object of type unsigned char
1519  UCHAR_MAX                                 255 // 28 - 1
1520 <li>  minimum value for an object of type char
1521  CHAR_MIN                               see below
1522 <li>  maximum value for an object of type char
1523  CHAR_MAX                              see below
1524 <li>  maximum number of bytes in a multibyte character, for any supported locale
1525  MB_LEN_MAX                                    1
1526 <li>  minimum value for an object of type short int
1527  SHRT_MIN                               -32767 // -(215 - 1)
1528 <li>  maximum value for an object of type short int
1529  SHRT_MAX                               +32767 // 215 - 1
1530 <li>  maximum value for an object of type unsigned short int
1531  USHRT_MAX                               65535 // 216 - 1
1532 <li>  minimum value for an object of type int
1533  INT_MIN                                 -32767 // -(215 - 1)
1534 <li>  maximum value for an object of type int
1535  INT_MAX                                +32767 // 215 - 1
1536 <li>  maximum value for an object of type unsigned int
1537  UINT_MAX                                65535 // 216 - 1
1538 <li>  minimum value for an object of type long int
1539  LONG_MIN                         -2147483647 // -(231 - 1)
1540 <li>  maximum value for an object of type long int
1541  LONG_MAX                         +2147483647 // 231 - 1
1542 <li>  maximum value for an object of type unsigned long int
1543  ULONG_MAX                         4294967295 // 232 - 1
1544 <!--page 35 indent 4-->
1545 <li>  minimum value for an object of type long long int
1546  LLONG_MIN          -9223372036854775807 // -(263 - 1)
1547 <li>  maximum value for an object of type long long int
1548  LLONG_MAX          +9223372036854775807 // 263 - 1
1549 <li>  maximum value for an object of type unsigned long long int
1550  ULLONG_MAX         18446744073709551615 // 264 - 1
1551 </ul>
1552 <p><!--para 2-->
1553  If the value of an object of type char is treated as a signed integer when used in an
1554  expression, the value of CHAR_MIN shall be the same as that of SCHAR_MIN and the
1555  value of CHAR_MAX shall be the same as that of SCHAR_MAX. Otherwise, the value of
1556  CHAR_MIN shall be 0 and the value of CHAR_MAX shall be the same as that of
1557  UCHAR_MAX.<sup><a href="#note15"><b>15)</b></a></sup> The value UCHAR_MAX shall equal 2CHAR_BIT - 1.
1558 <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>).
1559
1560 <h6>footnotes</h6>
1561 <p><a name="note15">15)</a> See <a href="#6.2.5">6.2.5</a>.
1562
1563
1564 <a name="5.2.4.2.2" href="#5.2.4.2.2"><h5>5.2.4.2.2 Characteristics of floating types <float.h></h5></a>
1565 <p><!--para 1-->
1566  The characteristics of floating types are defined in terms of a model that describes a
1567  representation of floating-point numbers and values that provide information about an
1568  implementation's floating-point arithmetic.<sup><a href="#note16"><b>16)</b></a></sup> The following parameters are used to
1569  define the model for each floating-point type:
1570 <p><!--para 2-->
1571 <pre>
1572         s          sign ((+-)1)
1573         b          base or radix of exponent representation (an integer &gt; 1)
1574         e          exponent (an integer between a minimum emin and a maximum emax )
1575         p          precision (the number of base-b digits in the significand)
1576          fk        nonnegative integers less than b (the significand digits)</pre>
1577  A floating-point number (x) is defined by the following model:
1578 <pre>
1579                     p
1580         x = sb e   (Sum) f k b-k ,
1581                    k=1
1582                                   emin &lt;= e &lt;= emax</pre>
1583  
1584 <p><!--para 3-->
1585  In addition to normalized floating-point numbers ( f 1 &gt; 0 if x != 0), floating types may be
1586  able to contain other kinds of floating-point numbers, such as subnormal floating-point
1587  numbers (x != 0, e = emin , f 1 = 0) and unnormalized floating-point numbers (x != 0,
1588  e &gt; emin , f 1 = 0), and values that are not floating-point numbers, such as infinities and
1589  NaNs. A NaN is an encoding signifying Not-a-Number. A quiet NaN propagates
1590  through almost every arithmetic operation without raising a floating-point exception; a
1591  signaling NaN generally raises a floating-point exception when occurring as an
1592  
1593  
1594 <!--page 36 indent 4-->
1595  arithmetic operand.<sup><a href="#note17"><b>17)</b></a></sup>
1596 <p><!--para 4-->
1597  An implementation may give zero and non-numeric values (such as infinities and NaNs) a
1598  sign or may leave them unsigned. Wherever such values are unsigned, any requirement
1599  in this International Standard to retrieve the sign shall produce an unspecified sign, and
1600  any requirement to set the sign shall be ignored.
1601 <p><!--para 5-->
1602  The accuracy of the floating-point operations (+, -, *, /) and of the library functions in
1603  <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-
1604  defined, as is the accuracy of the conversion between floating-point internal
1605  representations and string representations performed by the library functions in
1606  <a href="#7.19">&lt;stdio.h&gt;</a>, <a href="#7.20">&lt;stdlib.h&gt;</a>, and <a href="#7.24">&lt;wchar.h&gt;</a>. The implementation may state that the
1607  accuracy is unknown.
1608 <p><!--para 6-->
1609  All integer values in the <a href="#7.7">&lt;float.h&gt;</a> header, except FLT_ROUNDS, shall be constant
1610  expressions suitable for use in #if preprocessing directives; all floating values shall be
1611  constant expressions. All except DECIMAL_DIG, FLT_EVAL_METHOD, FLT_RADIX,
1612  and FLT_ROUNDS have separate names for all three floating-point types. The floating-
1613  point model representation is provided for all values except FLT_EVAL_METHOD and
1614  FLT_ROUNDS.
1615 <p><!--para 7-->
1616  The rounding mode for floating-point addition is characterized by the implementation-
1617  defined value of FLT_ROUNDS:<sup><a href="#note18"><b>18)</b></a></sup>
1618 <pre>
1619        -1      indeterminable
1620         0      toward zero
1621         1      to nearest
1622         2      toward positive infinity
1623         3      toward negative infinity</pre>
1624  All other values for FLT_ROUNDS characterize implementation-defined rounding
1625  behavior.
1626 <p><!--para 8-->
1627  Except for assignment and cast (which remove all extra range and precision), the values
1628  of operations with floating operands and values subject to the usual arithmetic
1629  conversions and of floating constants are evaluated to a format whose range and precision
1630  may be greater than required by the type. The use of evaluation formats is characterized
1631  by the implementation-defined value of FLT_EVAL_METHOD:<sup><a href="#note19"><b>19)</b></a></sup>
1632  
1633  
1634  
1635 <!--page 37 indent 4-->
1636 <pre>
1637         -1        indeterminable;
1638          0        evaluate all operations and constants just to the range and precision of the
1639                   type;
1640          1        evaluate operations and constants of type float and double to the
1641                   range and precision of the double type, evaluate long double
1642                   operations and constants to the range and precision of the long double
1643                   type;
1644          2        evaluate all operations and constants to the range and precision of the
1645                   long double type.</pre>
1646  All other negative values for FLT_EVAL_METHOD characterize implementation-defined
1647  behavior.
1648 <p><!--para 9-->
1649  The values given in the following list shall be replaced by constant expressions with
1650  implementation-defined values that are greater or equal in magnitude (absolute value) to
1651  those shown, with the same sign:
1652 <ul>
1653 <li>  radix of exponent representation, b
1654  FLT_RADIX                                                 2
1655 <li>  number of base-FLT_RADIX digits in the floating-point significand, p
1656    FLT_MANT_DIG
1657    DBL_MANT_DIG
1658    LDBL_MANT_DIG
1659 <li>  number of decimal digits, n, such that any floating-point number in the widest
1660  supported floating type with pmax radix b digits can be rounded to a floating-point
1661  number with n decimal digits and back again without change to the value,
1662 <pre>
1663       ??? pmax log10 b       if b is a power of 10
1664       ???
1665       ??? ???1 + pmax log10 b??? otherwise</pre>
1666    DECIMAL_DIG                                            10
1667 <li>  number of decimal digits, q, such that any floating-point number with q decimal digits
1668  can be rounded into a floating-point number with p radix b digits and back again
1669  without change to the q decimal digits,
1670  
1671  
1672  
1673  
1674 <!--page 38 indent 5-->
1675 <pre>
1676       ??? p log10 b          if b is a power of 10
1677       ???
1678       ??? ???( p - 1) log10 b??? otherwise</pre>
1679   FLT_DIG                                         6
1680   DBL_DIG                                        10
1681   LDBL_DIG                                       10
1682 <li>  minimum negative integer such that FLT_RADIX raised to one less than that power is
1683  a normalized floating-point number, emin
1684   FLT_MIN_EXP
1685   DBL_MIN_EXP
1686   LDBL_MIN_EXP
1687 <li>  minimum negative integer such that 10 raised to that power is in the range of
1688  normalized floating-point numbers, ???log10 b emin -1 ???
1689 <pre>
1690                                    ???                ???</pre>
1691  FLT_MIN_10_EXP                                 -37
1692  DBL_MIN_10_EXP                                 -37
1693  LDBL_MIN_10_EXP                                -37
1694 <li>  maximum integer such that FLT_RADIX raised to one less than that power is a
1695  representable finite floating-point number, emax
1696   FLT_MAX_EXP
1697   DBL_MAX_EXP
1698   LDBL_MAX_EXP
1699 <li>  maximum integer such that 10 raised to that power is in the range of representable
1700  finite floating-point numbers, ???log10 ((1 - b- p )b emax )???
1701   FLT_MAX_10_EXP                                 +37
1702   DBL_MAX_10_EXP                                 +37
1703   LDBL_MAX_10_EXP                                +37
1704 </ul>
1705 <p><!--para 10-->
1706  The values given in the following list shall be replaced by constant expressions with
1707  implementation-defined values that are greater than or equal to those shown:
1708 <ul>
1709 <li>  maximum representable finite floating-point number, (1 - b- p )b emax
1710   FLT_MAX                                     1E+37
1711   DBL_MAX                                     1E+37
1712   LDBL_MAX                                    1E+37
1713 </ul>
1714 <p><!--para 11-->
1715  The values given in the following list shall be replaced by constant expressions with
1716  implementation-defined (positive) values that are less than or equal to those shown:
1717 <ul>
1718 <li>  the difference between 1 and the least value greater than 1 that is representable in the
1719   given floating point type, b1- p
1720 <!--page 39 indent 5-->
1721    FLT_EPSILON                                         1E-5
1722    DBL_EPSILON                                         1E-9
1723    LDBL_EPSILON                                        1E-9
1724 <li>  minimum normalized positive floating-point number, b emin -1
1725    FLT_MIN                                            1E-37
1726    DBL_MIN                                            1E-37
1727    LDBL_MIN                                           1E-37
1728 </ul>
1729  Recommended practice
1730 <p><!--para 12-->
1731  Conversion from (at least) double to decimal with DECIMAL_DIG digits and back
1732  should be the identity function.
1733 <p><!--para 13-->
1734  EXAMPLE 1 The following describes an artificial floating-point representation that meets the minimum
1735  requirements of this International Standard, and the appropriate values in a <a href="#7.7">&lt;float.h&gt;</a> header for type
1736  float:
1737 <pre>
1738                     6
1739        x = s16e    (Sum) f k 16-k ,
1740                    k=1
1741                                    -31 &lt;= e &lt;= +32</pre>
1742  
1743 <pre>
1744          FLT_RADIX                                  16
1745          FLT_MANT_DIG                                6
1746          FLT_EPSILON                   9.53674316E-07F
1747          FLT_DIG                                     6
1748          FLT_MIN_EXP                               -31
1749          FLT_MIN                       2.93873588E-39F
1750          FLT_MIN_10_EXP                            -38
1751          FLT_MAX_EXP                               +32
1752          FLT_MAX                       3.40282347E+38F
1753          FLT_MAX_10_EXP                            +38</pre>
1754  
1755 <p><!--para 14-->
1756  EXAMPLE 2 The following describes floating-point representations that also meet the requirements for
1757  single-precision and double-precision normalized numbers in IEC 60559,<sup><a href="#note20"><b>20)</b></a></sup> and the appropriate values in a
1758  <a href="#7.7">&lt;float.h&gt;</a> header for types float and double:
1759 <pre>
1760                    24
1761        x f = s2e   (Sum) f k 2-k ,
1762                    k=1
1763                                   -125 &lt;= e &lt;= +128</pre>
1764  
1765 <pre>
1766                    53
1767        x d = s2e   (Sum) f k 2-k ,
1768                    k=1
1769                                   -1021 &lt;= e &lt;= +1024</pre>
1770  
1771 <pre>
1772          FLT_RADIX                                   2
1773          DECIMAL_DIG                                17
1774          FLT_MANT_DIG                               24
1775          FLT_EPSILON                   1.19209290E-07F // decimal constant
1776          FLT_EPSILON                          0X1P-23F // hex constant</pre>
1777  
1778  
1779 <!--page 40 indent 0-->
1780 <pre>
1781          FLT_DIG                           6
1782          FLT_MIN_EXP                    -125
1783          FLT_MIN             1.17549435E-38F               // decimal constant
1784          FLT_MIN                   0X1P-126F               // hex constant
1785          FLT_MIN_10_EXP                  -37
1786          FLT_MAX_EXP                    +128
1787          FLT_MAX             3.40282347E+38F               // decimal constant
1788          FLT_MAX             0X1.fffffeP127F               // hex constant
1789          FLT_MAX_10_EXP                  +38
1790          DBL_MANT_DIG                     53
1791          DBL_EPSILON 2.2204460492503131E-16                // decimal constant
1792          DBL_EPSILON                 0X1P-52               // hex constant
1793          DBL_DIG                          15
1794          DBL_MIN_EXP                   -1021
1795          DBL_MIN     2.2250738585072014E-308               // decimal constant
1796          DBL_MIN                   0X1P-1022               // hex constant
1797          DBL_MIN_10_EXP                 -307
1798          DBL_MAX_EXP                   +1024
1799          DBL_MAX     1.7976931348623157E+308               // decimal constant
1800          DBL_MAX      0X1.fffffffffffffP1023               // hex constant
1801          DBL_MAX_10_EXP                 +308</pre>
1802  If a type wider than double were supported, then DECIMAL_DIG would be greater than 17. For
1803  example, if the widest type were to use the minimal-width IEC 60559 double-extended format (64 bits of
1804  precision), then DECIMAL_DIG would be 21.
1805  
1806 <p><b> Forward references</b>:        conditional inclusion (<a href="#6.10.1">6.10.1</a>), complex arithmetic
1807  <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.24">&lt;wchar.h&gt;</a>
1808  (<a href="#7.24">7.24</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.20">&lt;stdlib.h&gt;</a>
1809  (<a href="#7.20">7.20</a>), input/output <a href="#7.19">&lt;stdio.h&gt;</a> (<a href="#7.19">7.19</a>), mathematics <a href="#7.12">&lt;math.h&gt;</a> (<a href="#7.12">7.12</a>).
1810 <!--page 41 indent 4-->
1811
1812 <h6>footnotes</h6>
1813 <p><a name="note16">16)</a> The floating-point model is intended to clarify the description of each floating-point characteristic and
1814  does not require the floating-point arithmetic of the implementation to be identical.
1815
1816 <p><a name="note17">17)</a> IEC 60559:1989 specifies quiet and signaling NaNs. For implementations that do not support
1817  IEC 60559:1989, the terms quiet NaN and signaling NaN are intended to apply to encodings with
1818  similar behavior.
1819
1820 <p><a name="note18">18)</a> Evaluation of FLT_ROUNDS correctly reflects any execution-time change of rounding mode through
1821  the function fesetround in <a href="#7.6">&lt;fenv.h&gt;</a>.
1822
1823 <p><a name="note19">19)</a> The evaluation method determines evaluation formats of expressions involving all floating types, not
1824  just real types. For example, if FLT_EVAL_METHOD is 1, then the product of two float
1825  _Complex operands is represented in the double _Complex format, and its parts are evaluated to
1826  double.
1827
1828 <p><a name="note20">20)</a> The floating-point model in that standard sums powers of b from zero, so the values of the exponent
1829  limits are one less than shown here.
1830
1831
1832 <a name="6" href="#6"><h2>6. Language</h2></a>
1833
1834 <a name="6.1" href="#6.1"><h3>6.1 Notation</h3></a>
1835 <p><!--para 1-->
1836  In the syntax notation used in this clause, syntactic categories (nonterminals) are
1837  indicated by italic type, and literal words and character set members (terminals) by bold
1838  type. A colon (:) following a nonterminal introduces its definition. Alternative
1839  definitions are listed on separate lines, except when prefaced by the words ''one of''. An
1840  optional symbol is indicated by the subscript ''opt'', so that
1841 <pre>
1842           { expressionopt }</pre>
1843  indicates an optional expression enclosed in braces.
1844 <p><!--para 2-->
1845  When syntactic categories are referred to in the main text, they are not italicized and
1846  words are separated by spaces instead of hyphens.
1847 <p><!--para 3-->
1848  A summary of the language syntax is given in <a href="#A">annex A</a>.
1849
1850 <a name="6.2" href="#6.2"><h3>6.2 Concepts</h3></a>
1851
1852 <a name="6.2.1" href="#6.2.1"><h4>6.2.1 Scopes of identifiers</h4></a>
1853 <p><!--para 1-->
1854  An identifier can denote an object; a function; a tag or a member of a structure, union, or
1855  enumeration; a typedef name; a label name; a macro name; or a macro parameter. The
1856  same identifier can denote different entities at different points in the program. A member
1857  of an enumeration is called an enumeration constant. Macro names and macro
1858  parameters are not considered further here, because prior to the semantic phase of
1859  program translation any occurrences of macro names in the source file are replaced by the
1860  preprocessing token sequences that constitute their macro definitions.
1861 <p><!--para 2-->
1862  For each different entity that an identifier designates, the identifier is visible (i.e., can be
1863  used) only within a region of program text called its scope. Different entities designated
1864  by the same identifier either have different scopes, or are in different name spaces. There
1865  are four kinds of scopes: function, file, block, and function prototype. (A function
1866  prototype is a declaration of a function that declares the types of its parameters.)
1867 <p><!--para 3-->
1868  A label name is the only kind of identifier that has function scope. It can be used (in a
1869  goto statement) anywhere in the function in which it appears, and is declared implicitly
1870  by its syntactic appearance (followed by a : and a statement).
1871 <p><!--para 4-->
1872  Every other identifier has scope determined by the placement of its declaration (in a
1873  declarator or type specifier). If the declarator or type specifier that declares the identifier
1874  appears outside of any block or list of parameters, the identifier has file scope, which
1875  terminates at the end of the translation unit. If the declarator or type specifier that
1876  declares the identifier appears inside a block or within the list of parameter declarations in
1877  a function definition, the identifier has block scope, which terminates at the end of the
1878  associated block. If the declarator or type specifier that declares the identifier appears
1879 <!--page 42 indent 4-->
1880  within the list of parameter declarations in a function prototype (not part of a function
1881  definition), the identifier has function prototype scope, which terminates at the end of the
1882  function declarator. If an identifier designates two different entities in the same name
1883  space, the scopes might overlap. If so, the scope of one entity (the inner scope) will be a
1884  strict subset of the scope of the other entity (the outer scope). Within the inner scope, the
1885  identifier designates the entity declared in the inner scope; the entity declared in the outer
1886  scope is hidden (and not visible) within the inner scope.
1887 <p><!--para 5-->
1888  Unless explicitly stated otherwise, where this International Standard uses the term
1889  ''identifier'' to refer to some entity (as opposed to the syntactic construct), it refers to the
1890  entity in the relevant name space whose declaration is visible at the point the identifier
1891  occurs.
1892 <p><!--para 6-->
1893  Two identifiers have the same scope if and only if their scopes terminate at the same
1894  point.
1895 <p><!--para 7-->
1896  Structure, union, and enumeration tags have scope that begins just after the appearance of
1897  the tag in a type specifier that declares the tag. Each enumeration constant has scope that
1898  begins just after the appearance of its defining enumerator in an enumerator list. Any
1899  other identifier has scope that begins just after the completion of its declarator.
1900 <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
1901  (<a href="#6.9.1">6.9.1</a>), identifiers (<a href="#6.4.2">6.4.2</a>), name spaces of identifiers (<a href="#6.2.3">6.2.3</a>), macro replacement (<a href="#6.10.3">6.10.3</a>),
1902  source file inclusion (<a href="#6.10.2">6.10.2</a>), statements (<a href="#6.8">6.8</a>).
1903
1904 <a name="6.2.2" href="#6.2.2"><h4>6.2.2 Linkages of identifiers</h4></a>
1905 <p><!--para 1-->
1906  An identifier declared in different scopes or in the same scope more than once can be
1907  made to refer to the same object or function by a process called linkage.<sup><a href="#note21"><b>21)</b></a></sup> There are
1908  three kinds of linkage: external, internal, and none.
1909 <p><!--para 2-->
1910  In the set of translation units and libraries that constitutes an entire program, each
1911  declaration of a particular identifier with external linkage denotes the same object or
1912  function. Within one translation unit, each declaration of an identifier with internal
1913  linkage denotes the same object or function. Each declaration of an identifier with no
1914  linkage denotes a unique entity.
1915 <p><!--para 3-->
1916  If the declaration of a file scope identifier for an object or a function contains the storage-
1917  class specifier static, the identifier has internal linkage.<sup><a href="#note22"><b>22)</b></a></sup>
1918 <p><!--para 4-->
1919  For an identifier declared with the storage-class specifier extern in a scope in which a
1920  
1921  
1922  
1923 <!--page 43 indent 4-->
1924  prior declaration of that identifier is visible,<sup><a href="#note23"><b>23)</b></a></sup> if the prior declaration specifies internal or
1925  external linkage, the linkage of the identifier at the later declaration is the same as the
1926  linkage specified at the prior declaration. If no prior declaration is visible, or if the prior
1927  declaration specifies no linkage, then the identifier has external linkage.
1928 <p><!--para 5-->
1929  If the declaration of an identifier for a function has no storage-class specifier, its linkage
1930  is determined exactly as if it were declared with the storage-class specifier extern. If
1931  the declaration of an identifier for an object has file scope and no storage-class specifier,
1932  its linkage is external.
1933 <p><!--para 6-->
1934  The following identifiers have no linkage: an identifier declared to be anything other than
1935  an object or a function; an identifier declared to be a function parameter; a block scope
1936  identifier for an object declared without the storage-class specifier extern.
1937 <p><!--para 7-->
1938  If, within a translation unit, the same identifier appears with both internal and external
1939  linkage, the behavior is undefined.
1940 <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>),
1941  statements (<a href="#6.8">6.8</a>).
1942
1943 <h6>footnotes</h6>
1944 <p><a name="note21">21)</a> There is no linkage between different identifiers.
1945
1946 <p><a name="note22">22)</a> A function declaration can contain the storage-class specifier static only if it is at file scope; see
1947  <a href="#6.7.1">6.7.1</a>.
1948
1949 <p><a name="note23">23)</a> As specified in <a href="#6.2.1">6.2.1</a>, the later declaration might hide the prior declaration.
1950
1951
1952 <a name="6.2.3" href="#6.2.3"><h4>6.2.3 Name spaces of identifiers</h4></a>
1953 <p><!--para 1-->
1954  If more than one declaration of a particular identifier is visible at any point in a
1955  translation unit, the syntactic context disambiguates uses that refer to different entities.
1956  Thus, there are separate name spaces for various categories of identifiers, as follows:
1957 <ul>
1958 <li>  label names (disambiguated by the syntax of the label declaration and use);
1959 <li>  the tags of structures, unions, and enumerations (disambiguated by following any<sup><a href="#note24"><b>24)</b></a></sup>
1960  of the keywords struct, union, or enum);
1961 <li>  the members of structures or unions; each structure or union has a separate name
1962  space for its members (disambiguated by the type of the expression used to access the
1963  member via the . or -&gt; operator);
1964 <li>  all other identifiers, called ordinary identifiers (declared in ordinary declarators or as
1965  enumeration constants).
1966 </ul>
1967 <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>),
1968  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
1969  (<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>).
1970  
1971  
1972  
1973  
1974 <!--page 44 indent 4-->
1975
1976 <h6>footnotes</h6>
1977 <p><a name="note24">24)</a> There is only one name space for tags even though three are possible.
1978
1979
1980 <a name="6.2.4" href="#6.2.4"><h4>6.2.4 Storage durations of objects</h4></a>
1981 <p><!--para 1-->
1982  An object has a storage duration that determines its lifetime. There are three storage
1983  durations: static, automatic, and allocated. Allocated storage is described in <a href="#7.20.3">7.20.3</a>.
1984 <p><!--para 2-->
1985  The lifetime of an object is the portion of program execution during which storage is
1986  guaranteed to be reserved for it. An object exists, has a constant address,<sup><a href="#note25"><b>25)</b></a></sup> and retains
1987  its last-stored value throughout its lifetime.<sup><a href="#note26"><b>26)</b></a></sup> If an object is referred to outside of its
1988  lifetime, the behavior is undefined. The value of a pointer becomes indeterminate when
1989  the object it points to reaches the end of its lifetime.
1990 <p><!--para 3-->
1991  An object whose identifier is declared with external or internal linkage, or with the
1992  storage-class specifier static has static storage duration. Its lifetime is the entire
1993  execution of the program and its stored value is initialized only once, prior to program
1994  startup.
1995 <p><!--para 4-->
1996  An object whose identifier is declared with no linkage and without the storage-class
1997  specifier static has automatic storage duration.
1998 <p><!--para 5-->
1999  For such an object that does not have a variable length array type, its lifetime extends
2000  from entry into the block with which it is associated until execution of that block ends in
2001  any way. (Entering an enclosed block or calling a function suspends, but does not end,
2002  execution of the current block.) If the block is entered recursively, a new instance of the
2003  object is created each time. The initial value of the object is indeterminate. If an
2004  initialization is specified for the object, it is performed each time the declaration is
2005  reached in the execution of the block; otherwise, the value becomes indeterminate each
2006  time the declaration is reached.
2007 <p><!--para 6-->
2008  For such an object that does have a variable length array type, its lifetime extends from
2009  the declaration of the object until execution of the program leaves the scope of the
2010  declaration.<sup><a href="#note27"><b>27)</b></a></sup> If the scope is entered recursively, a new instance of the object is created
2011  each time. The initial value of the object is indeterminate.
2012 <p><b> Forward references</b>: statements (<a href="#6.8">6.8</a>), function calls (<a href="#6.5.2.2">6.5.2.2</a>), declarators (<a href="#6.7.5">6.7.5</a>), array
2013  declarators (<a href="#6.7.5.2">6.7.5.2</a>), initialization (<a href="#6.7.8">6.7.8</a>).
2014  
2015  
2016  
2017  
2018 <!--page 45 indent 4-->
2019
2020 <h6>footnotes</h6>
2021 <p><a name="note25">25)</a> The term ''constant address'' means that two pointers to the object constructed at possibly different
2022  times will compare equal. The address may be different during two different executions of the same
2023  program.
2024
2025 <p><a name="note26">26)</a> In the case of a volatile object, the last store need not be explicit in the program.
2026
2027 <p><a name="note27">27)</a> Leaving the innermost block containing the declaration, or jumping to a point in that block or an
2028  embedded block prior to the declaration, leaves the scope of the declaration.
2029
2030
2031 <a name="6.2.5" href="#6.2.5"><h4>6.2.5 Types</h4></a>
2032 <p><!--para 1-->
2033  The meaning of a value stored in an object or returned by a function is determined by the
2034  type of the expression used to access it. (An identifier declared to be an object is the
2035  simplest such expression; the type is specified in the declaration of the identifier.) Types
2036  are partitioned into object types (types that fully describe objects), function types (types
2037  that describe functions), and incomplete types (types that describe objects but lack
2038  information needed to determine their sizes).
2039 <p><!--para 2-->
2040  An object declared as type _Bool is large enough to store the values 0 and 1.
2041 <p><!--para 3-->
2042  An object declared as type char is large enough to store any member of the basic
2043  execution character set. If a member of the basic execution character set is stored in a
2044  char object, its value is guaranteed to be nonnegative. If any other character is stored in
2045  a char object, the resulting value is implementation-defined but shall be within the range
2046  of values that can be represented in that type.
2047 <p><!--para 4-->
2048  There are five standard signed integer types, designated as signed char, short
2049  int, int, long int, and long long int. (These and other types may be
2050  designated in several additional ways, as described in <a href="#6.7.2">6.7.2</a>.) There may also be
2051  implementation-defined extended signed integer types.<sup><a href="#note28"><b>28)</b></a></sup> The standard and extended
2052  signed integer types are collectively called signed integer types.<sup><a href="#note29"><b>29)</b></a></sup>
2053 <p><!--para 5-->
2054  An object declared as type signed char occupies the same amount of storage as a
2055  ''plain'' char object. A ''plain'' int object has the natural size suggested by the
2056  architecture of the execution environment (large enough to contain any value in the range
2057  INT_MIN to INT_MAX as defined in the header <a href="#7.10">&lt;limits.h&gt;</a>).
2058 <p><!--para 6-->
2059  For each of the signed integer types, there is a corresponding (but different) unsigned
2060  integer type (designated with the keyword unsigned) that uses the same amount of
2061  storage (including sign information) and has the same alignment requirements. The type
2062  _Bool and the unsigned integer types that correspond to the standard signed integer
2063  types are the standard unsigned integer types. The unsigned integer types that
2064  correspond to the extended signed integer types are the extended unsigned integer types.
2065  The standard and extended unsigned integer types are collectively called unsigned integer
2066  types.<sup><a href="#note30"><b>30)</b></a></sup>
2067  
2068  
2069  
2070 <!--page 46 indent 5-->
2071 <p><!--para 7-->
2072  The standard signed integer types and standard unsigned integer types are collectively
2073  called the standard integer types, the extended signed integer types and extended
2074  unsigned integer types are collectively called the extended integer types.
2075 <p><!--para 8-->
2076  For any two integer types with the same signedness and different integer conversion rank
2077  (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
2078  subrange of the values of the other type.
2079 <p><!--para 9-->
2080  The range of nonnegative values of a signed integer type is a subrange of the
2081  corresponding unsigned integer type, and the representation of the same value in each
2082  type is the same.<sup><a href="#note31"><b>31)</b></a></sup> A computation involving unsigned operands can never overflow,
2083  because a result that cannot be represented by the resulting unsigned integer type is
2084  reduced modulo the number that is one greater than the largest value that can be
2085  represented by the resulting type.
2086 <p><!--para 10-->
2087  There are three real floating types, designated as float, double, and long
2088  double.<sup><a href="#note32"><b>32)</b></a></sup> The set of values of the type float is a subset of the set of values of the
2089  type double; the set of values of the type double is a subset of the set of values of the
2090  type long double.
2091 <p><!--para 11-->
2092  There are three complex types, designated as float _Complex, double
2093  _Complex, and long double _Complex.<sup><a href="#note33"><b>33)</b></a></sup> The real floating and complex types
2094  are collectively called the floating types.
2095 <p><!--para 12-->
2096  For each floating type there is a corresponding real type, which is always a real floating
2097  type. For real floating types, it is the same type. For complex types, it is the type given
2098  by deleting the keyword _Complex from the type name.
2099 <p><!--para 13-->
2100  Each complex type has the same representation and alignment requirements as an array
2101  type containing exactly two elements of the corresponding real type; the first element is
2102  equal to the real part, and the second element to the imaginary part, of the complex
2103  number.
2104 <p><!--para 14-->
2105  The type char, the signed and unsigned integer types, and the floating types are
2106  collectively called the basic types. Even if the implementation defines two or more basic
2107  types to have the same representation, they are nevertheless different types.<sup><a href="#note34"><b>34)</b></a></sup>
2108  
2109 <!--page 47 indent 5-->
2110 <p><!--para 15-->
2111  The three types char, signed char, and unsigned char are collectively called
2112  the character types. The implementation shall define char to have the same range,
2113  representation, and behavior as either signed char or unsigned char.<sup><a href="#note35"><b>35)</b></a></sup>
2114 <p><!--para 16-->
2115  An enumeration comprises a set of named integer constant values. Each distinct
2116  enumeration constitutes a different enumerated type.
2117 <p><!--para 17-->
2118  The type char, the signed and unsigned integer types, and the enumerated types are
2119  collectively called integer types. The integer and real floating types are collectively called
2120  real types.
2121 <p><!--para 18-->
2122  Integer and floating types are collectively called arithmetic types. Each arithmetic type
2123  belongs to one type domain: the real type domain comprises the real types, the complex
2124  type domain comprises the complex types.
2125 <p><!--para 19-->
2126  The void type comprises an empty set of values; it is an incomplete type that cannot be
2127  completed.
2128 <p><!--para 20-->
2129  Any number of derived types can be constructed from the object, function, and
2130  incomplete types, as follows:
2131 <ul>
2132 <li>  An array type describes a contiguously allocated nonempty set of objects with a
2133  particular member object type, called the element type.<sup><a href="#note36"><b>36)</b></a></sup> Array types are
2134  characterized by their element type and by the number of elements in the array. An
2135  array type is said to be derived from its element type, and if its element type is T , the
2136  array type is sometimes called ''array of T ''. The construction of an array type from
2137  an element type is called ''array type derivation''.
2138 <li>  A structure type describes a sequentially allocated nonempty set of member objects
2139  (and, in certain circumstances, an incomplete array), each of which has an optionally
2140  specified name and possibly distinct type.
2141 <li>  A union type describes an overlapping nonempty set of member objects, each of
2142  which has an optionally specified name and possibly distinct type.
2143 <li>  A function type describes a function with specified return type. A function type is
2144  characterized by its return type and the number and types of its parameters. A
2145  function type is said to be derived from its return type, and if its return type is T , the
2146  function type is sometimes called ''function returning T ''. The construction of a
2147  function type from a return type is called ''function type derivation''.
2148  
2149  
2150  
2151 <!--page 48 indent 5-->
2152 <li>  A pointer type may be derived from a function type, an object type, or an incomplete
2153  type, called the referenced type. A pointer type describes an object whose value
2154  provides a reference to an entity of the referenced type. A pointer type derived from
2155  the referenced type T is sometimes called ''pointer to T ''. The construction of a
2156  pointer type from a referenced type is called ''pointer type derivation''.
2157 </ul>
2158  These methods of constructing derived types can be applied recursively.
2159 <p><!--para 21-->
2160  Arithmetic types and pointer types are collectively called scalar types. Array and
2161  structure types are collectively called aggregate types.<sup><a href="#note37"><b>37)</b></a></sup>
2162 <p><!--para 22-->
2163  An array type of unknown size is an incomplete type. It is completed, for an identifier of
2164  that type, by specifying the size in a later declaration (with internal or external linkage).
2165  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
2166  type. It is completed, for all declarations of that type, by declaring the same structure or
2167  union tag with its defining content later in the same scope.
2168 <p><!--para 23-->
2169  A type has known constant size if the type is not incomplete and is not a variable length
2170  array type.
2171 <p><!--para 24-->
2172  Array, function, and pointer types are collectively called derived declarator types. A
2173  declarator type derivation from a type T is the construction of a derived declarator type
2174  from T by the application of an array-type, a function-type, or a pointer-type derivation to
2175  T.
2176 <p><!--para 25-->
2177  A type is characterized by its type category, which is either the outermost derivation of a
2178  derived type (as noted above in the construction of derived types), or the type itself if the
2179  type consists of no derived types.
2180 <p><!--para 26-->
2181  Any type so far mentioned is an unqualified type. Each unqualified type has several
2182  qualified versions of its type,<sup><a href="#note38"><b>38)</b></a></sup> corresponding to the combinations of one, two, or all
2183  three of the const, volatile, and restrict qualifiers. The qualified or unqualified
2184  versions of a type are distinct types that belong to the same type category and have the
2185  same representation and alignment requirements.<sup><a href="#note39"><b>39)</b></a></sup> A derived type is not qualified by the
2186  qualifiers (if any) of the type from which it is derived.
2187 <p><!--para 27-->
2188  A pointer to void shall have the same representation and alignment requirements as a
2189  pointer to a character type.39) Similarly, pointers to qualified or unqualified versions of
2190  compatible types shall have the same representation and alignment requirements. All
2191  
2192  
2193 <!--page 49 indent 5-->
2194  pointers to structure types shall have the same representation and alignment requirements
2195  as each other. All pointers to union types shall have the same representation and
2196  alignment requirements as each other. Pointers to other types need not have the same
2197  representation or alignment requirements.
2198 <p><!--para 28-->
2199  EXAMPLE 1 The type designated as ''float *'' has type ''pointer to float''. Its type category is
2200  pointer, not a floating type. The const-qualified version of this type is designated as ''float * const''
2201  whereas the type designated as ''const float *'' is not a qualified type -- its type is ''pointer to const-
2202  qualified float'' and is a pointer to a qualified type.
2203  
2204 <p><!--para 29-->
2205  EXAMPLE 2 The type designated as ''struct tag (*[5])(float)'' has type ''array of pointer to
2206  function returning struct tag''. The array has length five and the function has a single parameter of type
2207  float. Its type category is array.
2208  
2209 <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>).
2210
2211 <h6>footnotes</h6>
2212 <p><a name="note28">28)</a> Implementation-defined keywords shall have the form of an identifier reserved for any use as
2213  described in <a href="#7.1.3">7.1.3</a>.
2214
2215 <p><a name="note29">29)</a> Therefore, any statement in this Standard about signed integer types also applies to the extended
2216  signed integer types.
2217
2218 <p><a name="note30">30)</a> Therefore, any statement in this Standard about unsigned integer types also applies to the extended
2219  unsigned integer types.
2220
2221 <p><a name="note31">31)</a> The same representation and alignment requirements are meant to imply interchangeability as
2222  arguments to functions, return values from functions, and members of unions.
2223
2224 <p><a name="note32">32)</a> See ''future language directions'' (<a href="#6.11.1">6.11.1</a>).
2225
2226 <p><a name="note33">33)</a> A specification for imaginary types is in informative <a href="#G">annex G</a>.
2227
2228 <p><a name="note34">34)</a> An implementation may define new keywords that provide alternative ways to designate a basic (or
2229  any other) type; this does not violate the requirement that all basic types be different.
2230  Implementation-defined keywords shall have the form of an identifier reserved for any use as
2231  described in <a href="#7.1.3">7.1.3</a>.
2232
2233 <p><a name="note35">35)</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
2234  used to distinguish the two options. Irrespective of the choice made, char is a separate type from the
2235  other two and is not compatible with either.
2236
2237 <p><a name="note36">36)</a> Since object types do not include incomplete types, an array of incomplete type cannot be constructed.
2238
2239 <p><a name="note37">37)</a> Note that aggregate type does not include union type because an object with union type can only
2240  contain one member at a time.
2241
2242 <p><a name="note38">38)</a> See <a href="#6.7.3">6.7.3</a> regarding qualified array and function types.
2243
2244 <p><a name="note39">39)</a> The same representation and alignment requirements are meant to imply interchangeability as
2245  arguments to functions, return values from functions, and members of unions.
2246
2247
2248 <a name="6.2.6" href="#6.2.6"><h4>6.2.6 Representations of types</h4></a>
2249
2250 <a name="6.2.6.1" href="#6.2.6.1"><h5>6.2.6.1 General</h5></a>
2251 <p><!--para 1-->
2252  The representations of all types are unspecified except as stated in this subclause.
2253 <p><!--para 2-->
2254  Except for bit-fields, objects are composed of contiguous sequences of one or more bytes,
2255  the number, order, and encoding of which are either explicitly specified or
2256  implementation-defined.
2257 <p><!--para 3-->
2258  Values stored in unsigned bit-fields and objects of type unsigned char shall be
2259  represented using a pure binary notation.<sup><a href="#note40"><b>40)</b></a></sup>
2260 <p><!--para 4-->
2261  Values stored in non-bit-field objects of any other object type consist of n x CHAR_BIT
2262  bits, where n is the size of an object of that type, in bytes. The value may be copied into
2263  an object of type unsigned char [n] (e.g., by memcpy); the resulting set of bytes is
2264  called the object representation of the value. Values stored in bit-fields consist of m bits,
2265  where m is the size specified for the bit-field. The object representation is the set of m
2266  bits the bit-field comprises in the addressable storage unit holding it. Two values (other
2267  than NaNs) with the same object representation compare equal, but values that compare
2268  equal may have different object representations.
2269 <p><!--para 5-->
2270  Certain object representations need not represent a value of the object type. If the stored
2271  value of an object has such a representation and is read by an lvalue expression that does
2272  not have character type, the behavior is undefined. If such a representation is produced
2273  by a side effect that modifies all or any part of the object by an lvalue expression that
2274  does not have character type, the behavior is undefined.<sup><a href="#note41"><b>41)</b></a></sup> Such a representation is called
2275  
2276 <!--page 50 indent 4-->
2277  a trap representation.
2278 <p><!--para 6-->
2279  When a value is stored in an object of structure or union type, including in a member
2280  object, the bytes of the object representation that correspond to any padding bytes take
2281  unspecified values.<sup><a href="#note42"><b>42)</b></a></sup> The value of a structure or union object is never a trap
2282  representation, even though the value of a member of the structure or union object may be
2283  a trap representation.
2284 <p><!--para 7-->
2285  When a value is stored in a member of an object of union type, the bytes of the object
2286  representation that do not correspond to that member but do correspond to other members
2287  take unspecified values.
2288 <p><!--para 8-->
2289  Where an operator is applied to a value that has more than one object representation,
2290  which object representation is used shall not affect the value of the result.<sup><a href="#note43"><b>43)</b></a></sup> Where a
2291  value is stored in an object using a type that has more than one object representation for
2292  that value, it is unspecified which representation is used, but a trap representation shall
2293  not be generated.
2294 <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
2295  designators (<a href="#6.3.2.1">6.3.2.1</a>).
2296
2297 <h6>footnotes</h6>
2298 <p><a name="note40">40)</a> A positional representation for integers that uses the binary digits 0 and 1, in which the values
2299  represented by successive bits are additive, begin with 1, and are multiplied by successive integral
2300  powers of 2, except perhaps the bit with the highest position. (Adapted from the American National
2301  Dictionary for Information Processing Systems.) A byte contains CHAR_BIT bits, and the values of
2302  type unsigned char range from 0 to 2
2303
2304 <pre>
2305                                            CHAR_BIT
2306                                                      - 1.</pre>
2307
2308 <p><a name="note41">41)</a> Thus, an automatic variable can be initialized to a trap representation without causing undefined
2309  behavior, but the value of the variable cannot be used until a proper value is stored in it.
2310
2311 <p><a name="note42">42)</a> Thus, for example, structure assignment need not copy any padding bits.
2312
2313 <p><a name="note43">43)</a> It is possible for objects x and y with the same effective type T to have the same value when they are
2314  accessed as objects of type T, but to have different values in other contexts. In particular, if == is
2315  defined for type T, then x == y does not imply that memcmp(&amp;x, &amp;y, sizeof (T)) == 0.
2316  Furthermore, x == y does not necessarily imply that x and y have the same value; other operations
2317  on values of type T may distinguish between them.
2318
2319
2320 <a name="6.2.6.2" href="#6.2.6.2"><h5>6.2.6.2 Integer types</h5></a>
2321 <p><!--para 1-->
2322  For unsigned integer types other than unsigned char, the bits of the object
2323  representation shall be divided into two groups: value bits and padding bits (there need
2324  not be any of the latter). If there are N value bits, each bit shall represent a different
2325  power of 2 between 1 and 2 N -1 , so that objects of that type shall be capable of
2326  representing values from 0 to 2 N - 1 using a pure binary representation; this shall be
2327  known as the value representation. The values of any padding bits are unspecified.<sup><a href="#note44"><b>44)</b></a></sup>
2328 <p><!--para 2-->
2329  For signed integer types, the bits of the object representation shall be divided into three
2330  groups: value bits, padding bits, and the sign bit. There need not be any padding bits;
2331  
2332 <!--page 51 indent 4-->
2333  there shall be exactly one sign bit. Each bit that is a value bit shall have the same value as
2334  the same bit in the object representation of the corresponding unsigned type (if there are
2335  M value bits in the signed type and N in the unsigned type, then M &lt;= N ). If the sign bit
2336  is zero, it shall not affect the resulting value. If the sign bit is one, the value shall be
2337  modified in one of the following ways:
2338 <ul>
2339 <li>  the corresponding value with sign bit 0 is negated (sign and magnitude);
2340 <li>  the sign bit has the value -(2 N ) (two's complement);
2341 <li>  the sign bit has the value -(2 N - 1) (ones' complement ).
2342 </ul>
2343  Which of these applies is implementation-defined, as is whether the value with sign bit 1
2344  and all value bits zero (for the first two), or with sign bit and all value bits 1 (for ones'
2345  complement), is a trap representation or a normal value. In the case of sign and
2346  magnitude and ones' complement, if this representation is a normal value it is called a
2347  negative zero.
2348 <p><!--para 3-->
2349  If the implementation supports negative zeros, they shall be generated only by:
2350 <ul>
2351 <li>  the &amp;, |, ^, ~, &lt;&lt;, and &gt;&gt; operators with arguments that produce such a value;
2352 <li>  the +, -, *, /, and % operators where one argument is a negative zero and the result is
2353  zero;
2354 <li>  compound assignment operators based on the above cases.
2355 </ul>
2356  It is unspecified whether these cases actually generate a negative zero or a normal zero,
2357  and whether a negative zero becomes a normal zero when stored in an object.
2358 <p><!--para 4-->
2359  If the implementation does not support negative zeros, the behavior of the &amp;, |, ^, ~, &lt;&lt;,
2360  and &gt;&gt; operators with arguments that would produce such a value is undefined.
2361 <p><!--para 5-->
2362  The values of any padding bits are unspecified.<sup><a href="#note45"><b>45)</b></a></sup> A valid (non-trap) object representation
2363  of a signed integer type where the sign bit is zero is a valid object representation of the
2364  corresponding unsigned type, and shall represent the same value. For any integer type,
2365  the object representation where all the bits are zero shall be a representation of the value
2366  zero in that type.
2367 <p><!--para 6-->
2368  The precision of an integer type is the number of bits it uses to represent values,
2369  excluding any sign and padding bits. The width of an integer type is the same but
2370  including any sign bit; thus for unsigned integer types the two values are the same, while
2371  
2372  
2373 <!--page 52 indent 4-->
2374  for signed integer types the width is one greater than the precision.
2375
2376 <h6>footnotes</h6>
2377 <p><a name="note44">44)</a> Some combinations of padding bits might generate trap representations, for example, if one padding
2378  bit is a parity bit. Regardless, no arithmetic operation on valid values can generate a trap
2379  representation other than as part of an exceptional condition such as an overflow, and this cannot occur
2380  with unsigned types. All other combinations of padding bits are alternative object representations of
2381  the value specified by the value bits.
2382
2383 <p><a name="note45">45)</a> Some combinations of padding bits might generate trap representations, for example, if one padding
2384  bit is a parity bit. Regardless, no arithmetic operation on valid values can generate a trap
2385  representation other than as part of an exceptional condition such as an overflow. All other
2386  combinations of padding bits are alternative object representations of the value specified by the value
2387  bits.
2388
2389
2390 <a name="6.2.7" href="#6.2.7"><h4>6.2.7 Compatible type and composite type</h4></a>
2391 <p><!--para 1-->
2392  Two types have compatible type if their types are the same. Additional rules for
2393  determining whether two types are compatible are described in <a href="#6.7.2">6.7.2</a> for type specifiers,
2394  in <a href="#6.7.3">6.7.3</a> for type qualifiers, and in <a href="#6.7.5">6.7.5</a> for declarators.<sup><a href="#note46"><b>46)</b></a></sup> Moreover, two structure,
2395  union, or enumerated types declared in separate translation units are compatible if their
2396  tags and members satisfy the following requirements: If one is declared with a tag, the
2397  other shall be declared with the same tag. If both are complete types, then the following
2398  additional requirements apply: there shall be a one-to-one correspondence between their
2399  members such that each pair of corresponding members are declared with compatible
2400  types, and such that if one member of a corresponding pair is declared with a name, the
2401  other member is declared with the same name. For two structures, corresponding
2402  members shall be declared in the same order. For two structures or unions, corresponding
2403  bit-fields shall have the same widths. For two enumerations, corresponding members
2404  shall have the same values.
2405 <p><!--para 2-->
2406  All declarations that refer to the same object or function shall have compatible type;
2407  otherwise, the behavior is undefined.
2408 <p><!--para 3-->
2409  A composite type can be constructed from two types that are compatible; it is a type that
2410  is compatible with both of the two types and satisfies the following conditions:
2411 <ul>
2412 <li>  If one type is an array of known constant size, the composite type is an array of that
2413  size; otherwise, if one type is a variable length array, the composite type is that type.
2414 <li>  If only one type is a function type with a parameter type list (a function prototype),
2415  the composite type is a function prototype with the parameter type list.
2416 <li>  If both types are function types with parameter type lists, the type of each parameter
2417  in the composite parameter type list is the composite type of the corresponding
2418  parameters.
2419 </ul>
2420  These rules apply recursively to the types from which the two types are derived.
2421 <p><!--para 4-->
2422  For an identifier with internal or external linkage declared in a scope in which a prior
2423  declaration of that identifier is visible,<sup><a href="#note47"><b>47)</b></a></sup> if the prior declaration specifies internal or
2424  external linkage, the type of the identifier at the later declaration becomes the composite
2425  type.
2426  
2427  
2428  
2429  
2430 <!--page 53 indent 4-->
2431 <p><!--para 5-->
2432  EXAMPLE        Given the following two file scope declarations:
2433 <pre>
2434           int f(int (*)(), double (*)[3]);
2435           int f(int (*)(char *), double (*)[]);</pre>
2436  The resulting composite type for the function is:
2437 <!--page 54 indent 4-->
2438 <pre>
2439           int f(int (*)(char *), double (*)[3]);</pre>
2440
2441 <h6>footnotes</h6>
2442 <p><a name="note46">46)</a> Two types need not be identical to be compatible.
2443
2444 <p><a name="note47">47)</a> As specified in <a href="#6.2.1">6.2.1</a>, the later declaration might hide the prior declaration.
2445
2446
2447 <a name="6.3" href="#6.3"><h3>6.3 Conversions</h3></a>
2448 <p><!--para 1-->
2449  Several operators convert operand values from one type to another automatically. This
2450  subclause specifies the result required from such an implicit conversion, as well as those
2451  that result from a cast operation (an explicit conversion). The list in <a href="#6.3.1.8">6.3.1.8</a> summarizes
2452  the conversions performed by most ordinary operators; it is supplemented as required by
2453  the discussion of each operator in <a href="#6.5">6.5</a>.
2454 <p><!--para 2-->
2455  Conversion of an operand value to a compatible type causes no change to the value or the
2456  representation.
2457 <p><b> Forward references</b>: cast operators (<a href="#6.5.4">6.5.4</a>).
2458
2459 <a name="6.3.1" href="#6.3.1"><h4>6.3.1 Arithmetic operands</h4></a>
2460
2461 <a name="6.3.1.1" href="#6.3.1.1"><h5>6.3.1.1 Boolean, characters, and integers</h5></a>
2462 <p><!--para 1-->
2463  Every integer type has an integer conversion rank defined as follows:
2464 <ul>
2465 <li>  No two signed integer types shall have the same rank, even if they have the same
2466  representation.
2467 <li>  The rank of a signed integer type shall be greater than the rank of any signed integer
2468  type with less precision.
2469 <li>  The rank of long long int shall be greater than the rank of long int, which
2470  shall be greater than the rank of int, which shall be greater than the rank of short
2471  int, which shall be greater than the rank of signed char.
2472 <li>  The rank of any unsigned integer type shall equal the rank of the corresponding
2473  signed integer type, if any.
2474 <li>  The rank of any standard integer type shall be greater than the rank of any extended
2475  integer type with the same width.
2476 <li>  The rank of char shall equal the rank of signed char and unsigned char.
2477 <li>  The rank of _Bool shall be less than the rank of all other standard integer types.
2478 <li>  The rank of any enumerated type shall equal the rank of the compatible integer type
2479  (see <a href="#6.7.2.2">6.7.2.2</a>).
2480 <li>  The rank of any extended signed integer type relative to another extended signed
2481  integer type with the same precision is implementation-defined, but still subject to the
2482  other rules for determining the integer conversion rank.
2483 <li>  For all integer types T1, T2, and T3, if T1 has greater rank than T2 and T2 has
2484  greater rank than T3, then T1 has greater rank than T3.
2485 </ul>
2486 <p><!--para 2-->
2487  The following may be used in an expression wherever an int or unsigned int may
2488  be used:
2489 <!--page 55 indent 4-->
2490 <ul>
2491 <li>  An object or expression with an integer type whose integer conversion rank is less
2492  than or equal to the rank of int and unsigned int.
2493 <li>  A bit-field of type _Bool, int, signed int, or unsigned int.
2494 </ul>
2495  If an int can represent all values of the original type, the value is converted to an int;
2496  otherwise, it is converted to an unsigned int. These are called the integer
2497  promotions.<sup><a href="#note48"><b>48)</b></a></sup> All other types are unchanged by the integer promotions.
2498 <p><!--para 3-->
2499  The integer promotions preserve value including sign. As discussed earlier, whether a
2500  ''plain'' char is treated as signed is implementation-defined.
2501 <p><b> Forward references</b>: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), structure and union specifiers
2502  (<a href="#6.7.2.1">6.7.2.1</a>).
2503
2504 <h6>footnotes</h6>
2505 <p><a name="note48">48)</a> The integer promotions are applied only: as part of the usual arithmetic conversions, to certain
2506  argument expressions, to the operands of the unary +, -, and ~ operators, and to both operands of the
2507  shift operators, as specified by their respective subclauses.
2508
2509
2510 <a name="6.3.1.2" href="#6.3.1.2"><h5>6.3.1.2 Boolean type</h5></a>
2511 <p><!--para 1-->
2512  When any scalar value is converted to _Bool, the result is 0 if the value compares equal
2513  to 0; otherwise, the result is 1.
2514
2515 <a name="6.3.1.3" href="#6.3.1.3"><h5>6.3.1.3 Signed and unsigned integers</h5></a>
2516 <p><!--para 1-->
2517  When a value with integer type is converted to another integer type other than _Bool, if
2518  the value can be represented by the new type, it is unchanged.
2519 <p><!--para 2-->
2520  Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
2521  subtracting one more than the maximum value that can be represented in the new type
2522  until the value is in the range of the new type.<sup><a href="#note49"><b>49)</b></a></sup>
2523 <p><!--para 3-->
2524  Otherwise, the new type is signed and the value cannot be represented in it; either the
2525  result is implementation-defined or an implementation-defined signal is raised.
2526
2527 <h6>footnotes</h6>
2528 <p><a name="note49">49)</a> The rules describe arithmetic on the mathematical value, not the value of a given type of expression.
2529
2530
2531 <a name="6.3.1.4" href="#6.3.1.4"><h5>6.3.1.4 Real floating and integer</h5></a>
2532 <p><!--para 1-->
2533  When a finite value of real floating type is converted to an integer type other than _Bool,
2534  the fractional part is discarded (i.e., the value is truncated toward zero). If the value of
2535  the integral part cannot be represented by the integer type, the behavior is undefined.<sup><a href="#note50"><b>50)</b></a></sup>
2536 <p><!--para 2-->
2537  When a value of integer type is converted to a real floating type, if the value being
2538  converted can be represented exactly in the new type, it is unchanged. If the value being
2539  converted is in the range of values that can be represented but cannot be represented
2540  
2541 <!--page 56 indent 4-->
2542  exactly, the result is either the nearest higher or nearest lower representable value, chosen
2543  in an implementation-defined manner. If the value being converted is outside the range of
2544  values that can be represented, the behavior is undefined.
2545
2546 <h6>footnotes</h6>
2547 <p><a name="note50">50)</a> The remaindering operation performed when a value of integer type is converted to unsigned type
2548  need not be performed when a value of real floating type is converted to unsigned type. Thus, the
2549  range of portable real floating values is (-1, Utype_MAX+1).
2550
2551
2552 <a name="6.3.1.5" href="#6.3.1.5"><h5>6.3.1.5 Real floating types</h5></a>
2553 <p><!--para 1-->
2554  When a float is promoted to double or long double, or a double is promoted
2555  to long double, its value is unchanged (if the source value is represented in the
2556  precision and range of its type).
2557 <p><!--para 2-->
2558  When a double is demoted to float, a long double is demoted to double or
2559  float, or a value being represented in greater precision and range than required by its
2560  semantic type (see <a href="#6.3.1.8">6.3.1.8</a>) is explicitly converted (including to its own type), if the value
2561  being converted can be represented exactly in the new type, it is unchanged. If the value
2562  being converted is in the range of values that can be represented but cannot be
2563  represented exactly, the result is either the nearest higher or nearest lower representable
2564  value, chosen in an implementation-defined manner. If the value being converted is
2565  outside the range of values that can be represented, the behavior is undefined.
2566
2567 <a name="6.3.1.6" href="#6.3.1.6"><h5>6.3.1.6 Complex types</h5></a>
2568 <p><!--para 1-->
2569  When a value of complex type is converted to another complex type, both the real and
2570  imaginary parts follow the conversion rules for the corresponding real types.
2571
2572 <a name="6.3.1.7" href="#6.3.1.7"><h5>6.3.1.7 Real and complex</h5></a>
2573 <p><!--para 1-->
2574  When a value of real type is converted to a complex type, the real part of the complex
2575  result value is determined by the rules of conversion to the corresponding real type and
2576  the imaginary part of the complex result value is a positive zero or an unsigned zero.
2577 <p><!--para 2-->
2578  When a value of complex type is converted to a real type, the imaginary part of the
2579  complex value is discarded and the value of the real part is converted according to the
2580  conversion rules for the corresponding real type.
2581
2582 <a name="6.3.1.8" href="#6.3.1.8"><h5>6.3.1.8 Usual arithmetic conversions</h5></a>
2583 <p><!--para 1-->
2584  Many operators that expect operands of arithmetic type cause conversions and yield result
2585  types in a similar way. The purpose is to determine a common real type for the operands
2586  and result. For the specified operands, each operand is converted, without change of type
2587  domain, to a type whose corresponding real type is the common real type. Unless
2588  explicitly stated otherwise, the common real type is also the corresponding real type of
2589  the result, whose type domain is the type domain of the operands if they are the same,
2590  and complex otherwise. This pattern is called the usual arithmetic conversions:
2591 <!--page 57 indent 4-->
2592 <p><!--para 2-->
2593 <pre>
2594        First, if the corresponding real type of either operand is long double, the other
2595        operand is converted, without change of type domain, to a type whose
2596        corresponding real type is long double.
2597        Otherwise, if the corresponding real type of either operand is double, the other
2598        operand is converted, without change of type domain, to a type whose
2599        corresponding real type is double.
2600        Otherwise, if the corresponding real type of either operand is float, the other
2601        operand is converted, without change of type domain, to a type whose
2602        corresponding real type is float.<sup><a href="#note51"><b>51)</b></a></sup>
2603        Otherwise, the integer promotions are performed on both operands. Then the
2604        following rules are applied to the promoted operands:
2605               If both operands have the same type, then no further conversion is needed.
2606               Otherwise, if both operands have signed integer types or both have unsigned
2607               integer types, the operand with the type of lesser integer conversion rank is
2608               converted to the type of the operand with greater rank.
2609               Otherwise, if the operand that has unsigned integer type has rank greater or
2610               equal to the rank of the type of the other operand, then the operand with
2611               signed integer type is converted to the type of the operand with unsigned
2612               integer type.
2613               Otherwise, if the type of the operand with signed integer type can represent
2614               all of the values of the type of the operand with unsigned integer type, then
2615               the operand with unsigned integer type is converted to the type of the
2616               operand with signed integer type.
2617               Otherwise, both operands are converted to the unsigned integer type
2618               corresponding to the type of the operand with signed integer type.</pre>
2619  The values of floating operands and of the results of floating expressions may be
2620  represented in greater precision and range than that required by the type; the types are not
2621  changed thereby.<sup><a href="#note52"><b>52)</b></a></sup>
2622  
2623  
2624  
2625  
2626 <!--page 58 indent 4-->
2627
2628 <h6>footnotes</h6>
2629 <p><a name="note51">51)</a> For example, addition of a double _Complex and a float entails just the conversion of the
2630  float operand to double (and yields a double _Complex result).
2631
2632 <p><a name="note52">52)</a> The cast and assignment operators are still required to perform their specified conversions as
2633  described in <a href="#6.3.1.4">6.3.1.4</a> and <a href="#6.3.1.5">6.3.1.5</a>.
2634
2635
2636 <a name="6.3.2" href="#6.3.2"><h4>6.3.2 Other operands</h4></a>
2637
2638 <a name="6.3.2.1" href="#6.3.2.1"><h5>6.3.2.1 Lvalues, arrays, and function designators</h5></a>
2639 <p><!--para 1-->
2640  An lvalue is an expression with an object type or an incomplete type other than void;<sup><a href="#note53"><b>53)</b></a></sup>
2641  if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
2642  When an object is said to have a particular type, the type is specified by the lvalue used to
2643  designate the object. A modifiable lvalue is an lvalue that does not have array type, does
2644  not have an incomplete type, does not have a const-qualified type, and if it is a structure
2645  or union, does not have any member (including, recursively, any member or element of
2646  all contained aggregates or unions) with a const-qualified type.
2647 <p><!--para 2-->
2648  Except when it is the operand of the sizeof operator, the unary &amp; operator, the ++
2649  operator, the -- operator, or the left operand of the . operator or an assignment operator,
2650  an lvalue that does not have array type is converted to the value stored in the designated
2651  object (and is no longer an lvalue). If the lvalue has qualified type, the value has the
2652  unqualified version of the type of the lvalue; otherwise, the value has the type of the
2653  lvalue. If the lvalue has an incomplete type and does not have array type, the behavior is
2654  undefined.
2655 <p><!--para 3-->
2656  Except when it is the operand of the sizeof operator or the unary &amp; operator, or is a
2657  string literal used to initialize an array, an expression that has type ''array of type'' is
2658  converted to an expression with type ''pointer to type'' that points to the initial element of
2659  the array object and is not an lvalue. If the array object has register storage class, the
2660  behavior is undefined.
2661 <p><!--para 4-->
2662  A function designator is an expression that has function type. Except when it is the
2663  operand of the sizeof operator<sup><a href="#note54"><b>54)</b></a></sup> or the unary &amp; operator, a function designator with
2664  type ''function returning type'' is converted to an expression that has type ''pointer to
2665  function returning type''.
2666 <p><b> Forward references</b>: address and indirection operators (<a href="#6.5.3.2">6.5.3.2</a>), assignment operators
2667  (<a href="#6.5.16">6.5.16</a>), common definitions <a href="#7.17">&lt;stddef.h&gt;</a> (<a href="#7.17">7.17</a>), initialization (<a href="#6.7.8">6.7.8</a>), postfix
2668  increment and decrement operators (<a href="#6.5.2.4">6.5.2.4</a>), prefix increment and decrement operators
2669  (<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>).
2670  
2671  
2672 <!--page 59 indent 4-->
2673
2674 <h6>footnotes</h6>
2675 <p><a name="note53">53)</a> The name ''lvalue'' comes originally from the assignment expression E1 = E2, in which the left
2676  operand E1 is required to be a (modifiable) lvalue. It is perhaps better considered as representing an
2677  object ''locator value''. What is sometimes called ''rvalue'' is in this International Standard described
2678  as the ''value of an expression''.
2679   An obvious example of an lvalue is an identifier of an object. As a further example, if E is a unary
2680   expression that is a pointer to an object, *E is an lvalue that designates the object to which E points.
2681
2682 <p><a name="note54">54)</a> Because this conversion does not occur, the operand of the sizeof operator remains a function
2683  designator and violates the constraint in <a href="#6.5.3.4">6.5.3.4</a>.
2684
2685
2686 <a name="6.3.2.2" href="#6.3.2.2"><h5>6.3.2.2 void</h5></a>
2687 <p><!--para 1-->
2688  The (nonexistent) value of a void expression (an expression that has type void) shall not
2689  be used in any way, and implicit or explicit conversions (except to void) shall not be
2690  applied to such an expression. If an expression of any other type is evaluated as a void
2691  expression, its value or designator is discarded. (A void expression is evaluated for its
2692  side effects.)
2693
2694 <a name="6.3.2.3" href="#6.3.2.3"><h5>6.3.2.3 Pointers</h5></a>
2695 <p><!--para 1-->
2696  A pointer to void may be converted to or from a pointer to any incomplete or object
2697  type. A pointer to any incomplete or object type may be converted to a pointer to void
2698  and back again; the result shall compare equal to the original pointer.
2699 <p><!--para 2-->
2700  For any qualifier q, a pointer to a non-q-qualified type may be converted to a pointer to
2701  the q-qualified version of the type; the values stored in the original and converted pointers
2702  shall compare equal.
2703 <p><!--para 3-->
2704  An integer constant expression with the value 0, or such an expression cast to type
2705  void *, is called a null pointer constant.<sup><a href="#note55"><b>55)</b></a></sup> If a null pointer constant is converted to a
2706  pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal
2707  to a pointer to any object or function.
2708 <p><!--para 4-->
2709  Conversion of a null pointer to another pointer type yields a null pointer of that type.
2710  Any two null pointers shall compare equal.
2711 <p><!--para 5-->
2712  An integer may be converted to any pointer type. Except as previously specified, the
2713  result is implementation-defined, might not be correctly aligned, might not point to an
2714  entity of the referenced type, and might be a trap representation.<sup><a href="#note56"><b>56)</b></a></sup>
2715 <p><!--para 6-->
2716  Any pointer type may be converted to an integer type. Except as previously specified, the
2717  result is implementation-defined. If the result cannot be represented in the integer type,
2718  the behavior is undefined. The result need not be in the range of values of any integer
2719  type.
2720 <p><!--para 7-->
2721  A pointer to an object or incomplete type may be converted to a pointer to a different
2722  object or incomplete type. If the resulting pointer is not correctly aligned<sup><a href="#note57"><b>57)</b></a></sup> for the
2723  pointed-to type, the behavior is undefined. Otherwise, when converted back again, the
2724  result shall compare equal to the original pointer. When a pointer to an object is
2725  
2726  
2727 <!--page 60 indent 4-->
2728  converted to a pointer to a character type, the result points to the lowest addressed byte of
2729  the object. Successive increments of the result, up to the size of the object, yield pointers
2730  to the remaining bytes of the object.
2731 <p><!--para 8-->
2732  A pointer to a function of one type may be converted to a pointer to a function of another
2733  type and back again; the result shall compare equal to the original pointer. If a converted
2734  pointer is used to call a function whose type is not compatible with the pointed-to type,
2735  the behavior is undefined.
2736 <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
2737  capable of holding object pointers (<a href="#7.18.1.4">7.18.1.4</a>), simple assignment (<a href="#6.5.16.1">6.5.16.1</a>).
2738 <!--page 61 indent 4-->
2739
2740 <h6>footnotes</h6>
2741 <p><a name="note55">55)</a> The macro NULL is defined in <a href="#7.17">&lt;stddef.h&gt;</a> (and other headers) as a null pointer constant; see <a href="#7.17">7.17</a>.
2742
2743 <p><a name="note56">56)</a> The mapping functions for converting a pointer to an integer or an integer to a pointer are intended to
2744  be consistent with the addressing structure of the execution environment.
2745
2746 <p><a name="note57">57)</a> In general, the concept ''correctly aligned'' is transitive: if a pointer to type A is correctly aligned for a
2747  pointer to type B, which in turn is correctly aligned for a pointer to type C, then a pointer to type A is
2748  correctly aligned for a pointer to type C.
2749
2750
2751 <a name="6.4" href="#6.4"><h3>6.4 Lexical elements</h3></a>
2752 <h6>Syntax</h6>
2753 <p><!--para 1-->
2754 <pre>
2755           token:
2756                    keyword
2757                    identifier
2758                    constant
2759                    string-literal
2760                    punctuator
2761           preprocessing-token:
2762                  header-name
2763                  identifier
2764                  pp-number
2765                  character-constant
2766                  string-literal
2767                  punctuator
2768                  each non-white-space character that cannot be one of the above</pre>
2769 <h6>Constraints</h6>
2770 <p><!--para 2-->
2771  Each preprocessing token that is converted to a token shall have the lexical form of a
2772  keyword, an identifier, a constant, a string literal, or a punctuator.
2773 <h6>Semantics</h6>
2774 <p><!--para 3-->
2775  A token is the minimal lexical element of the language in translation phases 7 and 8. The
2776  categories of tokens are: keywords, identifiers, constants, string literals, and punctuators.
2777  A preprocessing token is the minimal lexical element of the language in translation
2778  phases 3 through 6. The categories of preprocessing tokens are: header names,
2779  identifiers, preprocessing numbers, character constants, string literals, punctuators, and
2780  single non-white-space characters that do not lexically match the other preprocessing
2781  token categories.<sup><a href="#note58"><b>58)</b></a></sup> If a ' or a " character matches the last category, the behavior is
2782  undefined. Preprocessing tokens can be separated by white space; this consists of
2783  comments (described later), or white-space characters (space, horizontal tab, new-line,
2784  vertical tab, and form-feed), or both. As described in <a href="#6.10">6.10</a>, in certain circumstances
2785  during translation phase 4, white space (or the absence thereof) serves as more than
2786  preprocessing token separation. White space may appear within a preprocessing token
2787  only as part of a header name or between the quotation characters in a character constant
2788  or string literal.
2789  
2790  
2791  
2792 <!--page 62 indent 4-->
2793 <p><!--para 4-->
2794  If the input stream has been parsed into preprocessing tokens up to a given character, the
2795  next preprocessing token is the longest sequence of characters that could constitute a
2796  preprocessing token. There is one exception to this rule: header name preprocessing
2797  tokens are recognized only within #include preprocessing directives and in
2798  implementation-defined locations within #pragma directives. In such contexts, a
2799  sequence of characters that could be either a header name or a string literal is recognized
2800  as the former.
2801 <p><!--para 5-->
2802  EXAMPLE 1 The program fragment 1Ex is parsed as a preprocessing number token (one that is not a
2803  valid floating or integer constant token), even though a parse as the pair of preprocessing tokens 1 and Ex
2804  might produce a valid expression (for example, if Ex were a macro defined as +1). Similarly, the program
2805  fragment 1E1 is parsed as a preprocessing number (one that is a valid floating constant token), whether or
2806  not E is a macro name.
2807  
2808 <p><!--para 6-->
2809  EXAMPLE 2 The program fragment x+++++y is parsed as x ++ ++ + y, which violates a constraint on
2810  increment operators, even though the parse x ++ + ++ y might yield a correct expression.
2811  
2812 <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>),
2813  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
2814  increment and decrement operators (<a href="#6.5.2.4">6.5.2.4</a>), prefix increment and decrement operators
2815  (<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
2816  (<a href="#6.4.5">6.4.5</a>).
2817
2818 <h6>footnotes</h6>
2819 <p><a name="note58">58)</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
2820  occur in source files.
2821
2822
2823 <a name="6.4.1" href="#6.4.1"><h4>6.4.1 Keywords</h4></a>
2824 <h6>Syntax</h6>
2825 <p><!--para 1-->
2826 <pre>
2827           keyword: one of
2828                 auto                    enum                  restrict              unsigned
2829                 break                   extern                return                void
2830                 case                    float                 short                 volatile
2831                 char                    for                   signed                while
2832                 const                   goto                  sizeof                _Bool
2833                 continue                if                    static                _Complex
2834                 default                 inline                struct                _Imaginary
2835                 do                      int                   switch
2836                 double                  long                  typedef
2837                 else                    register              union</pre>
2838 <h6>Semantics</h6>
2839 <p><!--para 2-->
2840  The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as
2841  keywords, and shall not be used otherwise. The keyword _Imaginary is reserved for
2842  specifying imaginary types.<sup><a href="#note59"><b>59)</b></a></sup>
2843  
2844  
2845  
2846 <!--page 63 indent 4-->
2847
2848 <h6>footnotes</h6>
2849 <p><a name="note59">59)</a> One possible specification for imaginary types appears in <a href="#G">annex G</a>.
2850
2851
2852 <a name="6.4.2" href="#6.4.2"><h4>6.4.2 Identifiers</h4></a>
2853
2854 <a name="6.4.2.1" href="#6.4.2.1"><h5>6.4.2.1 General</h5></a>
2855 <h6>Syntax</h6>
2856 <p><!--para 1-->
2857 <pre>
2858           identifier:
2859                  identifier-nondigit
2860                   identifier identifier-nondigit
2861                  identifier digit
2862           identifier-nondigit:
2863                   nondigit
2864                   universal-character-name
2865                  other implementation-defined characters
2866           nondigit: one of
2867                  _ a b            c    d    e    f     g    h    i    j     k    l    m
2868                      n o          p    q    r    s     t    u    v    w     x    y    z
2869                      A B          C    D    E    F     G    H    I    J     K    L    M
2870                      N O          P    Q    R    S     T    U    V    W     X    Y    Z
2871           digit: one of
2872                  0 1        2     3    4    5    6     7    8    9</pre>
2873 <h6>Semantics</h6>
2874 <p><!--para 2-->
2875  An identifier is a sequence of nondigit characters (including the underscore _, the
2876  lowercase and uppercase Latin letters, and other characters) and digits, which designates
2877  one or more entities as described in <a href="#6.2.1">6.2.1</a>. Lowercase and uppercase letters are distinct.
2878  There is no specific limit on the maximum length of an identifier.
2879 <p><!--para 3-->
2880  Each universal character name in an identifier shall designate a character whose encoding
2881  in ISO/IEC 10646 falls into one of the ranges specified in <a href="#D">annex D</a>.<sup><a href="#note60"><b>60)</b></a></sup> The initial
2882  character shall not be a universal character name designating a digit. An implementation
2883  may allow multibyte characters that are not part of the basic source character set to
2884  appear in identifiers; which characters and their correspondence to universal character
2885  names is implementation-defined.
2886 <p><!--para 4-->
2887  When preprocessing tokens are converted to tokens during translation phase 7, if a
2888  preprocessing token could be converted to either a keyword or an identifier, it is converted
2889  to a keyword.
2890  
2891  
2892 <!--page 64 indent 4-->
2893  Implementation limits
2894 <p><!--para 5-->
2895  As discussed in <a href="#5.2.4.1">5.2.4.1</a>, an implementation may limit the number of significant initial
2896  characters in an identifier; the limit for an external name (an identifier that has external
2897  linkage) may be more restrictive than that for an internal name (a macro name or an
2898  identifier that does not have external linkage). The number of significant characters in an
2899  identifier is implementation-defined.
2900 <p><!--para 6-->
2901  Any identifiers that differ in a significant character are different identifiers. If two
2902  identifiers differ only in nonsignificant characters, the behavior is undefined.
2903 <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>).
2904
2905 <h6>footnotes</h6>
2906 <p><a name="note60">60)</a> On systems in which linkers cannot accept extended characters, an encoding of the universal character
2907  name may be used in forming valid external identifiers. For example, some otherwise unused
2908  character or sequence of characters may be used to encode the \u in a universal character name.
2909  Extended characters may produce a long external identifier.
2910
2911
2912 <a name="6.4.2.2" href="#6.4.2.2"><h5>6.4.2.2 Predefined identifiers</h5></a>
2913 <h6>Semantics</h6>
2914 <p><!--para 1-->
2915  The identifier __func__ shall be implicitly declared by the translator as if,
2916  immediately following the opening brace of each function definition, the declaration
2917 <pre>
2918           static const char __func__[] = "function-name";</pre>
2919  appeared, where function-name is the name of the lexically-enclosing function.<sup><a href="#note61"><b>61)</b></a></sup>
2920 <p><!--para 2-->
2921  This name is encoded as if the implicit declaration had been written in the source
2922  character set and then translated into the execution character set as indicated in translation
2923  phase 5.
2924 <p><!--para 3-->
2925  EXAMPLE        Consider the code fragment:
2926 <pre>
2927           #include <a href="#7.19">&lt;stdio.h&gt;</a>
2928           void myfunc(void)
2929           {
2930                 printf("%s\n", __func__);
2931                 /* ... */
2932           }</pre>
2933  Each time the function is called, it will print to the standard output stream:
2934 <pre>
2935           myfunc</pre>
2936  
2937 <p><b> Forward references</b>: function definitions (<a href="#6.9.1">6.9.1</a>).
2938  
2939  
2940  
2941  
2942 <!--page 65 indent 4-->
2943
2944 <h6>footnotes</h6>
2945 <p><a name="note61">61)</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
2946  identifier is explicitly declared using the name __func__, the behavior is undefined.
2947
2948
2949 <a name="6.4.3" href="#6.4.3"><h4>6.4.3 Universal character names</h4></a>
2950 <h6>Syntax</h6>
2951 <p><!--para 1-->
2952 <pre>
2953           universal-character-name:
2954                  \u hex-quad
2955                  \U hex-quad hex-quad
2956           hex-quad:
2957                  hexadecimal-digit hexadecimal-digit
2958                               hexadecimal-digit hexadecimal-digit</pre>
2959 <h6>Constraints</h6>
2960 <p><!--para 2-->
2961  A universal character name shall not specify a character whose short identifier is less than
2962  00A0 other than 0024 ($), 0040 (@), or 0060 ('), nor one in the range D800 through
2963  DFFF inclusive.<sup><a href="#note62"><b>62)</b></a></sup>
2964 <h6>Description</h6>
2965 <p><!--para 3-->
2966  Universal character names may be used in identifiers, character constants, and string
2967  literals to designate characters that are not in the basic character set.
2968 <h6>Semantics</h6>
2969 <p><!--para 4-->
2970  The universal character name \Unnnnnnnn designates the character whose eight-digit
2971  short identifier (as specified by ISO/IEC 10646) is nnnnnnnn.<sup><a href="#note63"><b>63)</b></a></sup> Similarly, the universal
2972  character name \unnnn designates the character whose four-digit short identifier is nnnn
2973  (and whose eight-digit short identifier is 0000nnnn).
2974  
2975  
2976  
2977  
2978 <!--page 66 indent 4-->
2979
2980 <h6>footnotes</h6>
2981 <p><a name="note62">62)</a> The disallowed characters are the characters in the basic character set and the code positions reserved
2982  by ISO/IEC 10646 for control characters, the character DELETE, and the S-zone (reserved for use by
2983  UTF-16).
2984
2985 <p><a name="note63">63)</a> Short identifiers for characters were first specified in ISO/IEC 10646-1/AMD9:1997.
2986
2987
2988 <a name="6.4.4" href="#6.4.4"><h4>6.4.4 Constants</h4></a>
2989 <h6>Syntax</h6>
2990 <p><!--para 1-->
2991 <pre>
2992           constant:
2993                  integer-constant
2994                  floating-constant
2995                  enumeration-constant
2996                  character-constant</pre>
2997 <h6>Constraints</h6>
2998 <p><!--para 2-->
2999  Each constant shall have a type and the value of a constant shall be in the range of
3000  representable values for its type.
3001 <h6>Semantics</h6>
3002 <p><!--para 3-->
3003  Each constant has a type, determined by its form and value, as detailed later.
3004
3005 <a name="6.4.4.1" href="#6.4.4.1"><h5>6.4.4.1 Integer constants</h5></a>
3006 <h6>Syntax</h6>
3007 <p><!--para 1-->
3008 <!--page 67 indent 4-->
3009 <pre>
3010           integer-constant:
3011                   decimal-constant integer-suffixopt
3012                   octal-constant integer-suffixopt
3013                   hexadecimal-constant integer-suffixopt
3014           decimal-constant:
3015                 nonzero-digit
3016                 decimal-constant digit
3017           octal-constant:
3018                  0
3019                  octal-constant octal-digit
3020           hexadecimal-constant:
3021                 hexadecimal-prefix hexadecimal-digit
3022                 hexadecimal-constant hexadecimal-digit
3023           hexadecimal-prefix: one of
3024                 0x 0X
3025           nonzero-digit: one of
3026                  1 2 3 4          5     6     7   8    9
3027           octal-digit: one of
3028                   0 1 2 3         4     5     6   7
3029         hexadecimal-digit:   one of
3030               0 1 2           3 4      5    6   7     8   9
3031               a b c           d e      f
3032               A B C           D E      F
3033         integer-suffix:
3034                 unsigned-suffix long-suffixopt
3035                 unsigned-suffix long-long-suffix
3036                 long-suffix unsigned-suffixopt
3037                 long-long-suffix unsigned-suffixopt
3038         unsigned-suffix: one of
3039                u U
3040         long-suffix: one of
3041                l L
3042         long-long-suffix: one of
3043                ll LL</pre>
3044 <h6>Description</h6>
3045 <p><!--para 2-->
3046  An integer constant begins with a digit, but has no period or exponent part. It may have a
3047  prefix that specifies its base and a suffix that specifies its type.
3048 <p><!--para 3-->
3049  A decimal constant begins with a nonzero digit and consists of a sequence of decimal
3050  digits. An octal constant consists of the prefix 0 optionally followed by a sequence of the
3051  digits 0 through 7 only. A hexadecimal constant consists of the prefix 0x or 0X followed
3052  by a sequence of the decimal digits and the letters a (or A) through f (or F) with values
3053  10 through 15 respectively.
3054 <h6>Semantics</h6>
3055 <p><!--para 4-->
3056  The value of a decimal constant is computed base 10; that of an octal constant, base 8;
3057  that of a hexadecimal constant, base 16. The lexically first digit is the most significant.
3058 <p><!--para 5-->
3059  The type of an integer constant is the first of the corresponding list in which its value can
3060  be represented.
3061 <!--page 68 indent 4-->
3062 <pre>
3063                                                                   Octal or Hexadecimal</pre>
3064  Suffix                       Decimal Constant                           Constant
3065  
3066  none                int                                    int
3067 <pre>
3068                      long int                               unsigned int
3069                      long long int                          long int
3070                                                             unsigned long int
3071                                                             long long int
3072                                                             unsigned long long int</pre>
3073  
3074  u or U              unsigned int                           unsigned int
3075 <pre>
3076                      unsigned long int                      unsigned long int
3077                      unsigned long long int                 unsigned long long int</pre>
3078  
3079  l or L              long int                               long int
3080 <pre>
3081                      long long int                          unsigned long int
3082                                                             long long int
3083                                                             unsigned long long int</pre>
3084  
3085  Both u or U         unsigned long int                      unsigned long int
3086  and l or L          unsigned long long int                 unsigned long long int
3087  
3088  ll or LL            long long int                          long long int
3089 <pre>
3090                                                             unsigned long long int</pre>
3091  
3092  Both u or U         unsigned long long int                 unsigned long long int
3093  and ll or LL
3094 <p><!--para 6-->
3095  If an integer constant cannot be represented by any type in its list, it may have an
3096  extended integer type, if the extended integer type can represent its value. If all of the
3097  types in the list for the constant are signed, the extended integer type shall be signed. If
3098  all of the types in the list for the constant are unsigned, the extended integer type shall be
3099  unsigned. If the list contains both signed and unsigned types, the extended integer type
3100  may be signed or unsigned. If an integer constant cannot be represented by any type in
3101  its list and has no extended integer type, then the integer constant has no type.
3102 <!--page 69 indent 4-->
3103
3104 <a name="6.4.4.2" href="#6.4.4.2"><h5>6.4.4.2 Floating constants</h5></a>
3105 <h6>Syntax</h6>
3106 <p><!--para 1-->
3107 <!--page 70 indent 4-->
3108 <pre>
3109           floating-constant:
3110                  decimal-floating-constant
3111                  hexadecimal-floating-constant
3112           decimal-floating-constant:
3113                 fractional-constant exponent-partopt floating-suffixopt
3114                 digit-sequence exponent-part floating-suffixopt
3115           hexadecimal-floating-constant:
3116                 hexadecimal-prefix hexadecimal-fractional-constant
3117                                binary-exponent-part floating-suffixopt
3118                 hexadecimal-prefix hexadecimal-digit-sequence
3119                                binary-exponent-part floating-suffixopt
3120           fractional-constant:
3121                   digit-sequenceopt . digit-sequence
3122                   digit-sequence .
3123           exponent-part:
3124                 e signopt digit-sequence
3125                 E signopt digit-sequence
3126           sign: one of
3127                  + -
3128           digit-sequence:
3129                   digit
3130                   digit-sequence digit
3131           hexadecimal-fractional-constant:
3132                 hexadecimal-digit-sequenceopt .
3133                                hexadecimal-digit-sequence
3134                 hexadecimal-digit-sequence .
3135           binary-exponent-part:
3136                  p signopt digit-sequence
3137                  P signopt digit-sequence
3138           hexadecimal-digit-sequence:
3139                 hexadecimal-digit
3140                 hexadecimal-digit-sequence hexadecimal-digit
3141           floating-suffix: one of
3142                  f l F L</pre>
3143 <h6>Description</h6>
3144 <p><!--para 2-->
3145  A floating constant has a significand part that may be followed by an exponent part and a
3146  suffix that specifies its type. The components of the significand part may include a digit
3147  sequence representing the whole-number part, followed by a period (.), followed by a
3148  digit sequence representing the fraction part. The components of the exponent part are an
3149  e, E, p, or P followed by an exponent consisting of an optionally signed digit sequence.
3150  Either the whole-number part or the fraction part has to be present; for decimal floating
3151  constants, either the period or the exponent part has to be present.
3152 <h6>Semantics</h6>
3153 <p><!--para 3-->
3154  The significand part is interpreted as a (decimal or hexadecimal) rational number; the
3155  digit sequence in the exponent part is interpreted as a decimal integer. For decimal
3156  floating constants, the exponent indicates the power of 10 by which the significand part is
3157  to be scaled. For hexadecimal floating constants, the exponent indicates the power of 2
3158  by which the significand part is to be scaled. For decimal floating constants, and also for
3159  hexadecimal floating constants when FLT_RADIX is not a power of 2, the result is either
3160  the nearest representable value, or the larger or smaller representable value immediately
3161  adjacent to the nearest representable value, chosen in an implementation-defined manner.
3162  For hexadecimal floating constants when FLT_RADIX is a power of 2, the result is
3163  correctly rounded.
3164 <p><!--para 4-->
3165  An unsuffixed floating constant has type double. If suffixed by the letter f or F, it has
3166  type float. If suffixed by the letter l or L, it has type long double.
3167 <p><!--para 5-->
3168  Floating constants are converted to internal format as if at translation-time. The
3169  conversion of a floating constant shall not raise an exceptional condition or a floating-
3170  point exception at execution time.
3171  Recommended practice
3172 <p><!--para 6-->
3173  The implementation should produce a diagnostic message if a hexadecimal constant
3174  cannot be represented exactly in its evaluation format; the implementation should then
3175  proceed with the translation of the program.
3176 <p><!--para 7-->
3177  The translation-time conversion of floating constants should match the execution-time
3178  conversion of character strings by library functions, such as strtod, given matching
3179  inputs suitable for both conversions, the same result format, and default execution-time
3180  rounding.<sup><a href="#note64"><b>64)</b></a></sup>
3181  
3182  
3183  
3184  
3185 <!--page 71 indent 4-->
3186
3187 <h6>footnotes</h6>
3188 <p><a name="note64">64)</a> The specification for the library functions recommends more accurate conversion than required for
3189  floating constants (see <a href="#7.20.1.3">7.20.1.3</a>).
3190
3191
3192 <a name="6.4.4.3" href="#6.4.4.3"><h5>6.4.4.3 Enumeration constants</h5></a>
3193 <h6>Syntax</h6>
3194 <p><!--para 1-->
3195 <pre>
3196           enumeration-constant:
3197                 identifier</pre>
3198 <h6>Semantics</h6>
3199 <p><!--para 2-->
3200  An identifier declared as an enumeration constant has type int.
3201 <p><b> Forward references</b>: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>).
3202
3203 <a name="6.4.4.4" href="#6.4.4.4"><h5>6.4.4.4 Character constants</h5></a>
3204 <h6>Syntax</h6>
3205 <p><!--para 1-->
3206 <!--page 72 indent 4-->
3207 <pre>
3208           character-constant:
3209                  ' c-char-sequence '
3210                  L' c-char-sequence '
3211           c-char-sequence:
3212                  c-char
3213                  c-char-sequence c-char
3214           c-char:
3215                     any member of the source character set except
3216                                  the single-quote ', backslash \, or new-line character
3217                     escape-sequence
3218           escape-sequence:
3219                  simple-escape-sequence
3220                  octal-escape-sequence
3221                  hexadecimal-escape-sequence
3222                  universal-character-name
3223           simple-escape-sequence: one of
3224                  \' \" \? \\
3225                  \a \b \f \n \r                  \t    \v
3226           octal-escape-sequence:
3227                   \ octal-digit
3228                   \ octal-digit octal-digit
3229                   \ octal-digit octal-digit octal-digit
3230           hexadecimal-escape-sequence:
3231                 \x hexadecimal-digit
3232                 hexadecimal-escape-sequence hexadecimal-digit</pre>
3233 <h6>Description</h6>
3234 <p><!--para 2-->
3235  An integer character constant is a sequence of one or more multibyte characters enclosed
3236  in single-quotes, as in 'x'. A wide character constant is the same, except prefixed by the
3237  letter L. With a few exceptions detailed later, the elements of the sequence are any
3238  members of the source character set; they are mapped in an implementation-defined
3239  manner to members of the execution character set.
3240 <p><!--para 3-->
3241  The single-quote ', the double-quote ", the question-mark ?, the backslash \, and
3242  arbitrary integer values are representable according to the following table of escape
3243  sequences:
3244 <p><!--para 4-->
3245 <pre>
3246         single quote '                 \'
3247         double quote "                 \"
3248         question mark ?                \?
3249         backslash \                    \\
3250         octal character                \octal digits
3251         hexadecimal character          \x hexadecimal digits</pre>
3252  The double-quote " and question-mark ? are representable either by themselves or by the
3253  escape sequences \" and \?, respectively, but the single-quote ' and the backslash \
3254  shall be represented, respectively, by the escape sequences \' and \\.
3255 <p><!--para 5-->
3256  The octal digits that follow the backslash in an octal escape sequence are taken to be part
3257  of the construction of a single character for an integer character constant or of a single
3258  wide character for a wide character constant. The numerical value of the octal integer so
3259  formed specifies the value of the desired character or wide character.
3260 <p><!--para 6-->
3261  The hexadecimal digits that follow the backslash and the letter x in a hexadecimal escape
3262  sequence are taken to be part of the construction of a single character for an integer
3263  character constant or of a single wide character for a wide character constant. The
3264  numerical value of the hexadecimal integer so formed specifies the value of the desired
3265  character or wide character.
3266 <p><!--para 7-->
3267  Each octal or hexadecimal escape sequence is the longest sequence of characters that can
3268  constitute the escape sequence.
3269 <p><!--para 8-->
3270  In addition, characters not in the basic character set are representable by universal
3271  character names and certain nongraphic characters are representable by escape sequences
3272  consisting of the backslash \ followed by a lowercase letter: \a, \b, \f, \n, \r, \t,
3273  and \v.<sup><a href="#note65"><b>65)</b></a></sup>
3274  
3275  
3276  
3277  
3278 <!--page 73 indent 5-->
3279 <h6>Constraints</h6>
3280 <p><!--para 9-->
3281  The value of an octal or hexadecimal escape sequence shall be in the range of
3282  representable values for the type unsigned char for an integer character constant, or
3283  the unsigned type corresponding to wchar_t for a wide character constant.
3284 <h6>Semantics</h6>
3285 <p><!--para 10-->
3286  An integer character constant has type int. The value of an integer character constant
3287  containing a single character that maps to a single-byte execution character is the
3288  numerical value of the representation of the mapped character interpreted as an integer.
3289  The value of an integer character constant containing more than one character (e.g.,
3290  'ab'), or containing a character or escape sequence that does not map to a single-byte
3291  execution character, is implementation-defined. If an integer character constant contains
3292  a single character or escape sequence, its value is the one that results when an object with
3293  type char whose value is that of the single character or escape sequence is converted to
3294  type int.
3295 <p><!--para 11-->
3296  A wide character constant has type wchar_t, an integer type defined in the
3297  <a href="#7.17">&lt;stddef.h&gt;</a> header. The value of a wide character constant containing a single
3298  multibyte character that maps to a member of the extended execution character set is the
3299  wide character corresponding to that multibyte character, as defined by the mbtowc
3300  function, with an implementation-defined current locale. The value of a wide character
3301  constant containing more than one multibyte character, or containing a multibyte
3302  character or escape sequence not represented in the extended execution character set, is
3303  implementation-defined.
3304 <p><!--para 12-->
3305  EXAMPLE 1      The construction '\0' is commonly used to represent the null character.
3306  
3307 <p><!--para 13-->
3308  EXAMPLE 2 Consider implementations that use two's-complement representation for integers and eight
3309  bits for objects that have type char. In an implementation in which type char has the same range of
3310  values as signed char, the integer character constant '\xFF' has the value -1; if type char has the
3311  same range of values as unsigned char, the character constant '\xFF' has the value +255.
3312  
3313 <p><!--para 14-->
3314  EXAMPLE 3 Even if eight bits are used for objects that have type char, the construction '\x123'
3315  specifies an integer character constant containing only one character, since a hexadecimal escape sequence
3316  is terminated only by a non-hexadecimal character. To specify an integer character constant containing the
3317  two characters whose values are '\x12' and '3', the construction '\0223' may be used, since an octal
3318  escape sequence is terminated after three octal digits. (The value of this two-character integer character
3319  constant is implementation-defined.)
3320  
3321 <p><!--para 15-->
3322  EXAMPLE 4 Even if 12 or more bits are used for objects that have type wchar_t, the construction
3323  L'\1234' specifies the implementation-defined value that results from the combination of the values
3324  0123 and '4'.
3325  
3326 <p><b> Forward references</b>: common definitions <a href="#7.17">&lt;stddef.h&gt;</a> (<a href="#7.17">7.17</a>), the mbtowc function
3327  (<a href="#7.20.7.2">7.20.7.2</a>).
3328 <!--page 74 indent 4-->
3329
3330 <h6>footnotes</h6>
3331 <p><a name="note65">65)</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,
3332  the result is not a token and a diagnostic is required. See ''future language directions'' (<a href="#6.11.4">6.11.4</a>).
3333
3334
3335 <a name="6.4.5" href="#6.4.5"><h4>6.4.5 String literals</h4></a>
3336 <h6>Syntax</h6>
3337 <p><!--para 1-->
3338 <pre>
3339           string-literal:
3340                   " s-char-sequenceopt "
3341                   L" s-char-sequenceopt "
3342           s-char-sequence:
3343                  s-char
3344                  s-char-sequence s-char
3345           s-char:
3346                     any member of the source character set except
3347                                  the double-quote ", backslash \, or new-line character
3348                     escape-sequence</pre>
3349 <h6>Description</h6>
3350 <p><!--para 2-->
3351  A character string literal is a sequence of zero or more multibyte characters enclosed in
3352  double-quotes, as in "xyz". A wide string literal is the same, except prefixed by the
3353  letter L.
3354 <p><!--para 3-->
3355  The same considerations apply to each element of the sequence in a character string
3356  literal or a wide string literal as if it were in an integer character constant or a wide
3357  character constant, except that the single-quote ' is representable either by itself or by the
3358  escape sequence \', but the double-quote " shall be represented by the escape sequence
3359  \".
3360 <h6>Semantics</h6>
3361 <p><!--para 4-->
3362  In translation phase 6, the multibyte character sequences specified by any sequence of
3363  adjacent character and wide string literal tokens are concatenated into a single multibyte
3364  character sequence. If any of the tokens are wide string literal tokens, the resulting
3365  multibyte character sequence is treated as a wide string literal; otherwise, it is treated as a
3366  character string literal.
3367 <p><!--para 5-->
3368  In translation phase 7, a byte or code of value zero is appended to each multibyte
3369  character sequence that results from a string literal or literals.<sup><a href="#note66"><b>66)</b></a></sup> The multibyte character
3370  sequence is then used to initialize an array of static storage duration and length just
3371  sufficient to contain the sequence. For character string literals, the array elements have
3372  type char, and are initialized with the individual bytes of the multibyte character
3373  sequence; for wide string literals, the array elements have type wchar_t, and are
3374  initialized with the sequence of wide characters corresponding to the multibyte character
3375  
3376 <!--page 75 indent 4-->
3377  sequence, as defined by the mbstowcs function with an implementation-defined current
3378  locale. The value of a string literal containing a multibyte character or escape sequence
3379  not represented in the execution character set is implementation-defined.
3380 <p><!--para 6-->
3381  It is unspecified whether these arrays are distinct provided their elements have the
3382  appropriate values. If the program attempts to modify such an array, the behavior is
3383  undefined.
3384 <p><!--para 7-->
3385  EXAMPLE       This pair of adjacent character string literals
3386 <pre>
3387           "\x12" "3"</pre>
3388  produces a single character string literal containing the two characters whose values are '\x12' and '3',
3389  because escape sequences are converted into single members of the execution character set just prior to
3390  adjacent string literal concatenation.
3391  
3392 <p><b> Forward references</b>: common definitions <a href="#7.17">&lt;stddef.h&gt;</a> (<a href="#7.17">7.17</a>), the mbstowcs
3393  function (<a href="#7.20.8.1">7.20.8.1</a>).
3394
3395 <h6>footnotes</h6>
3396 <p><a name="note66">66)</a> A character 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
3397  it by a \0 escape sequence.
3398
3399
3400 <a name="6.4.6" href="#6.4.6"><h4>6.4.6 Punctuators</h4></a>
3401 <h6>Syntax</h6>
3402 <p><!--para 1-->
3403 <pre>
3404           punctuator: one of
3405                  [ ] ( ) { } . -&gt;
3406                  ++ -- &amp; * + - ~ !
3407                  / % &lt;&lt; &gt;&gt; &lt; &gt; &lt;= &gt;=                               ==     !=     ^    |     &amp;&amp;     ||
3408                  ? : ; ...
3409                  = *= /= %= += -= &lt;&lt;=                              &gt;&gt;=      &amp;=       ^=   |=
3410                  , # ##
3411                  &lt;: :&gt; &lt;% %&gt; %: %:%:</pre>
3412 <h6>Semantics</h6>
3413 <p><!--para 2-->
3414  A punctuator is a symbol that has independent syntactic and semantic significance.
3415  Depending on context, it may specify an operation to be performed (which in turn may
3416  yield a value or a function designator, produce a side effect, or some combination thereof)
3417  in which case it is known as an operator (other forms of operator also exist in some
3418  contexts). An operand is an entity on which an operator acts.
3419 <!--page 76 indent 4-->
3420 <p><!--para 3-->
3421  In all aspects of the language, the six tokens<sup><a href="#note67"><b>67)</b></a></sup>
3422 <pre>
3423           &lt;:    :&gt;      &lt;%    %&gt;     %:     %:%:</pre>
3424  behave, respectively, the same as the six tokens
3425 <pre>
3426           [     ]       {     }      #      ##</pre>
3427  except for their spelling.<sup><a href="#note68"><b>68)</b></a></sup>
3428 <p><b> Forward references</b>: expressions (<a href="#6.5">6.5</a>), declarations (<a href="#6.7">6.7</a>), preprocessing directives
3429  (<a href="#6.10">6.10</a>), statements (<a href="#6.8">6.8</a>).
3430
3431 <h6>footnotes</h6>
3432 <p><a name="note67">67)</a> These tokens are sometimes called ''digraphs''.
3433
3434 <p><a name="note68">68)</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
3435  interchanged.
3436
3437
3438 <a name="6.4.7" href="#6.4.7"><h4>6.4.7 Header names</h4></a>
3439 <h6>Syntax</h6>
3440 <p><!--para 1-->
3441 <pre>
3442           header-name:
3443                  &lt; h-char-sequence &gt;
3444                  " q-char-sequence "
3445           h-char-sequence:
3446                  h-char
3447                  h-char-sequence h-char
3448           h-char:
3449                     any member of the source character set except
3450                                  the new-line character and &gt;
3451           q-char-sequence:
3452                  q-char
3453                  q-char-sequence q-char
3454           q-char:
3455                     any member of the source character set except
3456                                  the new-line character and "</pre>
3457 <h6>Semantics</h6>
3458 <p><!--para 2-->
3459  The sequences in both forms of header names are mapped in an implementation-defined
3460  manner to headers or external source file names as specified in <a href="#6.10.2">6.10.2</a>.
3461 <p><!--para 3-->
3462  If the characters ', \, ", //, or /* occur in the sequence between the &lt; and &gt; delimiters,
3463  the behavior is undefined. Similarly, if the characters ', \, //, or /* occur in the
3464  
3465  
3466  
3467  
3468 <!--page 77 indent 4-->
3469  sequence between the " delimiters, the behavior is undefined.<sup><a href="#note69"><b>69)</b></a></sup> Header name
3470  preprocessing tokens are recognized only within #include preprocessing directives and
3471  in implementation-defined locations within #pragma directives.<sup><a href="#note70"><b>70)</b></a></sup>
3472 <p><!--para 4-->
3473  EXAMPLE       The following sequence of characters:
3474 <pre>
3475           0x3&lt;1/a.h&gt;1e2
3476           #include &lt;1/a.h&gt;
3477           #define const.member@$</pre>
3478  forms the following sequence of preprocessing tokens (with each individual preprocessing token delimited
3479  by a { on the left and a } on the right).
3480 <pre>
3481           {0x3}{&lt;}{1}{/}{a}{.}{h}{&gt;}{1e2}
3482           {#}{include} {&lt;1/a.h&gt;}
3483           {#}{define} {const}{.}{member}{@}{$}</pre>
3484  
3485 <p><b> Forward references</b>: source file inclusion (<a href="#6.10.2">6.10.2</a>).
3486
3487 <h6>footnotes</h6>
3488 <p><a name="note69">69)</a> Thus, sequences of characters that resemble escape sequences cause undefined behavior.
3489
3490 <p><a name="note70">70)</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>.
3491
3492
3493 <a name="6.4.8" href="#6.4.8"><h4>6.4.8 Preprocessing numbers</h4></a>
3494 <h6>Syntax</h6>
3495 <p><!--para 1-->
3496 <pre>
3497           pp-number:
3498                 digit
3499                 . digit
3500                 pp-number       digit
3501                 pp-number       identifier-nondigit
3502                 pp-number       e sign
3503                 pp-number       E sign
3504                 pp-number       p sign
3505                 pp-number       P sign
3506                 pp-number       .</pre>
3507 <h6>Description</h6>
3508 <p><!--para 2-->
3509  A preprocessing number begins with a digit optionally preceded by a period (.) and may
3510  be followed by valid identifier characters and the character sequences e+, e-, E+, E-,
3511  p+, p-, P+, or P-.
3512 <p><!--para 3-->
3513  Preprocessing number tokens lexically include all floating and integer constant tokens.
3514 <h6>Semantics</h6>
3515 <p><!--para 4-->
3516  A preprocessing number does not have type or a value; it acquires both after a successful
3517  conversion (as part of translation phase 7) to a floating constant token or an integer
3518  constant token.
3519  
3520  
3521 <!--page 78 indent 4-->
3522
3523 <a name="6.4.9" href="#6.4.9"><h4>6.4.9 Comments</h4></a>
3524 <p><!--para 1-->
3525  Except within a character constant, a string literal, or a comment, the characters /*
3526  introduce a comment. The contents of such a comment are examined only to identify
3527  multibyte characters and to find the characters */ that terminate it.<sup><a href="#note71"><b>71)</b></a></sup>
3528 <p><!--para 2-->
3529  Except within a character constant, a string literal, or a comment, the characters //
3530  introduce a comment that includes all multibyte characters up to, but not including, the
3531  next new-line character. The contents of such a comment are examined only to identify
3532  multibyte characters and to find the terminating new-line character.
3533 <p><!--para 3-->
3534  EXAMPLE
3535 <pre>
3536          "a//b"                              //   four-character string literal
3537          #include "//e"                      //   undefined behavior
3538          // */                               //   comment, not syntax error
3539          f = g/**//h;                        //   equivalent to f = g / h;
3540          //\
3541          i();                                // part of a two-line comment
3542          /\
3543          / j();                              // part of a two-line comment
3544          #define glue(x,y) x##y
3545          glue(/,/) k();                      // syntax error, not comment
3546          /*//*/ l();                         // equivalent to l();
3547          m = n//**/o
3548             + p;                             // equivalent to m = n + p;</pre>
3549  
3550  
3551  
3552  
3553 <!--page 79 indent 4-->
3554
3555 <h6>footnotes</h6>
3556 <p><a name="note71">71)</a> Thus, /* ... */ comments do not nest.
3557
3558
3559 <a name="6.5" href="#6.5"><h3>6.5 Expressions</h3></a>
3560 <p><!--para 1-->
3561  An expression is a sequence of operators and operands that specifies computation of a
3562  value, or that designates an object or a function, or that generates side effects, or that
3563  performs a combination thereof.
3564 <p><!--para 2-->
3565  Between the previous and next sequence point an object shall have its stored value
3566  modified at most once by the evaluation of an expression.<sup><a href="#note72"><b>72)</b></a></sup> Furthermore, the prior value
3567  shall be read only to determine the value to be stored.<sup><a href="#note73"><b>73)</b></a></sup>
3568 <p><!--para 3-->
3569  The grouping of operators and operands is indicated by the syntax.<sup><a href="#note74"><b>74)</b></a></sup> Except as specified
3570  later (for the function-call (), &amp;&amp;, ||, ?:, and comma operators), the order of evaluation
3571  of subexpressions and the order in which side effects take place are both unspecified.
3572 <p><!--para 4-->
3573  Some operators (the unary operator ~, and the binary operators &lt;&lt;, &gt;&gt;, &amp;, ^, and |,
3574  collectively described as bitwise operators) are required to have operands that have
3575  integer type. These operators yield values that depend on the internal representations of
3576  integers, and have implementation-defined and undefined aspects for signed types.
3577 <p><!--para 5-->
3578  If an exceptional condition occurs during the evaluation of an expression (that is, if the
3579  result is not mathematically defined or not in the range of representable values for its
3580  type), the behavior is undefined.
3581 <p><!--para 6-->
3582  The effective type of an object for an access to its stored value is the declared type of the
3583  object, if any.<sup><a href="#note75"><b>75)</b></a></sup> If a value is stored into an object having no declared type through an
3584  lvalue having a type that is not a character type, then the type of the lvalue becomes the
3585  
3586  
3587 <!--page 80 indent 4-->
3588  effective type of the object for that access and for subsequent accesses that do not modify
3589  the stored value. If a value is copied into an object having no declared type using
3590  memcpy or memmove, or is copied as an array of character type, then the effective type
3591  of the modified object for that access and for subsequent accesses that do not modify the
3592  value is the effective type of the object from which the value is copied, if it has one. For
3593  all other accesses to an object having no declared type, the effective type of the object is
3594  simply the type of the lvalue used for the access.
3595 <p><!--para 7-->
3596  An object shall have its stored value accessed only by an lvalue expression that has one of
3597  the following types:<sup><a href="#note76"><b>76)</b></a></sup>
3598 <ul>
3599 <li>  a type compatible with the effective type of the object,
3600 <li>  a qualified version of a type compatible with the effective type of the object,
3601 <li>  a type that is the signed or unsigned type corresponding to the effective type of the
3602  object,
3603 <li>  a type that is the signed or unsigned type corresponding to a qualified version of the
3604  effective type of the object,
3605 <li>  an aggregate or union type that includes one of the aforementioned types among its
3606  members (including, recursively, a member of a subaggregate or contained union), or
3607 <li>  a character type.
3608 </ul>
3609 <p><!--para 8-->
3610  A floating expression may be contracted, that is, evaluated as though it were an atomic
3611  operation, thereby omitting rounding errors implied by the source code and the
3612  expression evaluation method.<sup><a href="#note77"><b>77)</b></a></sup> The FP_CONTRACT pragma in <a href="#7.12">&lt;math.h&gt;</a> provides a
3613  way to disallow contracted expressions. Otherwise, whether and how expressions are
3614  contracted is implementation-defined.<sup><a href="#note78"><b>78)</b></a></sup>
3615 <p><b> Forward references</b>: the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>), copying functions (<a href="#7.21.2">7.21.2</a>).
3616  
3617  
3618  
3619  
3620 <!--page 81 indent 4-->
3621
3622 <h6>footnotes</h6>
3623 <p><a name="note72">72)</a> A floating-point status flag is not an object and can be set more than once within an expression.
3624
3625 <p><a name="note73">73)</a> This paragraph renders undefined statement expressions such as
3626
3627 <pre>
3628             i = ++i + 1;
3629             a[i++] = i;
3630     while allowing
3631             i = i + 1;
3632             a[i] = i;</pre>
3633  
3634
3635 <p><a name="note74">74)</a> The syntax specifies the precedence of operators in the evaluation of an expression, which is the same
3636  as the order of the major subclauses of this subclause, highest precedence first. Thus, for example, the
3637  expressions allowed as the operands of the binary + operator (<a href="#6.5.6">6.5.6</a>) are those expressions defined in
3638  <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
3639  (<a href="#6.5.3">6.5.3</a>), and an operand contained between any of the following pairs of operators: grouping
3640  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
3641  the conditional operator ?: (<a href="#6.5.15">6.5.15</a>).
3642
3643 <pre>
3644     Within each major subclause, the operators have the same precedence. Left- or right-associativity is
3645     indicated in each subclause by the syntax for the expressions discussed therein.</pre>
3646
3647 <p><a name="note75">75)</a> Allocated objects have no declared type.
3648
3649 <p><a name="note76">76)</a> The intent of this list is to specify those circumstances in which an object may or may not be aliased.
3650
3651 <p><a name="note77">77)</a> A contracted expression might also omit the raising of floating-point exceptions.
3652
3653 <p><a name="note78">78)</a> This license is specifically intended to allow implementations to exploit fast machine instructions that
3654  combine multiple C operators. As contractions potentially undermine predictability, and can even
3655  decrease accuracy for containing expressions, their use needs to be well-defined and clearly
3656  documented.
3657
3658
3659 <a name="6.5.1" href="#6.5.1"><h4>6.5.1 Primary expressions</h4></a>
3660 <h6>Syntax</h6>
3661 <p><!--para 1-->
3662 <pre>
3663           primary-expression:
3664                  identifier
3665                  constant
3666                  string-literal
3667                  ( expression )</pre>
3668 <h6>Semantics</h6>
3669 <p><!--para 2-->
3670  An identifier is a primary expression, provided it has been declared as designating an
3671  object (in which case it is an lvalue) or a function (in which case it is a function
3672  designator).<sup><a href="#note79"><b>79)</b></a></sup>
3673 <p><!--para 3-->
3674  A constant is a primary expression. Its type depends on its form and value, as detailed in
3675  <a href="#6.4.4">6.4.4</a>.
3676 <p><!--para 4-->
3677  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>.
3678 <p><!--para 5-->
3679  A parenthesized expression is a primary expression. Its type and value are identical to
3680  those of the unparenthesized expression. It is an lvalue, a function designator, or a void
3681  expression if the unparenthesized expression is, respectively, an lvalue, a function
3682  designator, or a void expression.
3683 <p><b> Forward references</b>: declarations (<a href="#6.7">6.7</a>).
3684
3685 <h6>footnotes</h6>
3686 <p><a name="note79">79)</a> Thus, an undeclared identifier is a violation of the syntax.
3687
3688
3689 <a name="6.5.2" href="#6.5.2"><h4>6.5.2 Postfix operators</h4></a>
3690 <h6>Syntax</h6>
3691 <p><!--para 1-->
3692 <pre>
3693           postfix-expression:
3694                  primary-expression
3695                  postfix-expression [ expression ]
3696                  postfix-expression ( argument-expression-listopt )
3697                  postfix-expression . identifier
3698                  postfix-expression -&gt; identifier
3699                  postfix-expression ++
3700                  postfix-expression --
3701                  ( type-name ) { initializer-list }
3702                  ( type-name ) { initializer-list , }</pre>
3703  
3704  
3705  
3706  
3707 <!--page 82 indent 4-->
3708 <pre>
3709           argument-expression-list:
3710                 assignment-expression
3711                 argument-expression-list , assignment-expression</pre>
3712
3713 <a name="6.5.2.1" href="#6.5.2.1"><h5>6.5.2.1 Array subscripting</h5></a>
3714 <h6>Constraints</h6>
3715 <p><!--para 1-->
3716  One of the expressions shall have type ''pointer to object type'', the other expression shall
3717  have integer type, and the result has type ''type''.
3718 <h6>Semantics</h6>
3719 <p><!--para 2-->
3720  A postfix expression followed by an expression in square brackets [] is a subscripted
3721  designation of an element of an array object. The definition of the subscript operator []
3722  is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that
3723  apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the
3724  initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th
3725  element of E1 (counting from zero).
3726 <p><!--para 3-->
3727  Successive subscript operators designate an element of a multidimensional array object.
3728  If E is an n-dimensional array (n &gt;= 2) with dimensions i x j x . . . x k, then E (used as
3729  other than an lvalue) is converted to a pointer to an (n - 1)-dimensional array with
3730  dimensions j x . . . x k. If the unary * operator is applied to this pointer explicitly, or
3731  implicitly as a result of subscripting, the result is the pointed-to (n - 1)-dimensional array,
3732  which itself is converted into a pointer if used as other than an lvalue. It follows from this
3733  that arrays are stored in row-major order (last subscript varies fastest).
3734 <p><!--para 4-->
3735  EXAMPLE        Consider the array object defined by the declaration
3736 <pre>
3737           int x[3][5];</pre>
3738  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
3739  array of five ints. In the expression x[i], which is equivalent to (*((x)+(i))), x is first converted to
3740  a pointer to the initial array of five ints. Then i is adjusted according to the type of x, which conceptually
3741  entails multiplying i by the size of the object to which the pointer points, namely an array of five int
3742  objects. The results are added and indirection is applied to yield an array of five ints. When used in the
3743  expression x[i][j], that array is in turn converted to a pointer to the first of the ints, so x[i][j]
3744  yields an int.
3745  
3746 <p><b> Forward references</b>: additive operators (<a href="#6.5.6">6.5.6</a>), address and indirection operators
3747  (<a href="#6.5.3.2">6.5.3.2</a>), array declarators (<a href="#6.7.5.2">6.7.5.2</a>).
3748 <!--page 83 indent 4-->
3749
3750 <a name="6.5.2.2" href="#6.5.2.2"><h5>6.5.2.2 Function calls</h5></a>
3751 <h6>Constraints</h6>
3752 <p><!--para 1-->
3753  The expression that denotes the called function<sup><a href="#note80"><b>80)</b></a></sup> shall have type pointer to function
3754  returning void or returning an object type other than an array type.
3755 <p><!--para 2-->
3756  If the expression that denotes the called function has a type that includes a prototype, the
3757  number of arguments shall agree with the number of parameters. Each argument shall
3758  have a type such that its value may be assigned to an object with the unqualified version
3759  of the type of its corresponding parameter.
3760 <h6>Semantics</h6>
3761 <p><!--para 3-->
3762  A postfix expression followed by parentheses () containing a possibly empty, comma-
3763  separated list of expressions is a function call. The postfix expression denotes the called
3764  function. The list of expressions specifies the arguments to the function.
3765 <p><!--para 4-->
3766  An argument may be an expression of any object type. In preparing for the call to a
3767  function, the arguments are evaluated, and each parameter is assigned the value of the
3768  corresponding argument.<sup><a href="#note81"><b>81)</b></a></sup>
3769 <p><!--para 5-->
3770  If the expression that denotes the called function has type pointer to function returning an
3771  object type, the function call expression has the same type as that object type, and has the
3772  value determined as specified in <a href="#6.8.6.4">6.8.6.4</a>. Otherwise, the function call has type void. If
3773  an attempt is made to modify the result of a function call or to access it after the next
3774  sequence point, the behavior is undefined.
3775 <p><!--para 6-->
3776  If the expression that denotes the called function has a type that does not include a
3777  prototype, the integer promotions are performed on each argument, and arguments that
3778  have type float are promoted to double. These are called the default argument
3779  promotions. If the number of arguments does not equal the number of parameters, the
3780  behavior is undefined. If the function is defined with a type that includes a prototype, and
3781  either the prototype ends with an ellipsis (, ...) or the types of the arguments after
3782  promotion are not compatible with the types of the parameters, the behavior is undefined.
3783  If the function is defined with a type that does not include a prototype, and the types of
3784  the arguments after promotion are not compatible with those of the parameters after
3785  promotion, the behavior is undefined, except for the following cases:
3786  
3787  
3788  
3789  
3790 <!--page 84 indent 5-->
3791 <ul>
3792 <li>  one promoted type is a signed integer type, the other promoted type is the
3793  corresponding unsigned integer type, and the value is representable in both types;
3794 <li>  both types are pointers to qualified or unqualified versions of a character type or
3795  void.
3796 </ul>
3797 <p><!--para 7-->
3798  If the expression that denotes the called function has a type that does include a prototype,
3799  the arguments are implicitly converted, as if by assignment, to the types of the
3800  corresponding parameters, taking the type of each parameter to be the unqualified version
3801  of its declared type. The ellipsis notation in a function prototype declarator causes
3802  argument type conversion to stop after the last declared parameter. The default argument
3803  promotions are performed on trailing arguments.
3804 <p><!--para 8-->
3805  No other conversions are performed implicitly; in particular, the number and types of
3806  arguments are not compared with those of the parameters in a function definition that
3807  does not include a function prototype declarator.
3808 <p><!--para 9-->
3809  If the function is defined with a type that is not compatible with the type (of the
3810  expression) pointed to by the expression that denotes the called function, the behavior is
3811  undefined.
3812 <p><!--para 10-->
3813  The order of evaluation of the function designator, the actual arguments, and
3814  subexpressions within the actual arguments is unspecified, but there is a sequence point
3815  before the actual call.
3816 <p><!--para 11-->
3817  Recursive function calls shall be permitted, both directly and indirectly through any chain
3818  of other functions.
3819 <p><!--para 12-->
3820  EXAMPLE       In the function call
3821 <pre>
3822          (*pf[f1()]) (f2(), f3() + f4())</pre>
3823  the functions f1, f2, f3, and f4 may be called in any order. All side effects have to be completed before
3824  the function pointed to by pf[f1()] is called.
3825  
3826 <p><b> Forward references</b>: function declarators (including prototypes) (<a href="#6.7.5.3">6.7.5.3</a>), function
3827  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>).
3828
3829 <h6>footnotes</h6>
3830 <p><a name="note80">80)</a> Most often, this is the result of converting an identifier that is a function designator.
3831
3832 <p><a name="note81">81)</a> A function may change the values of its parameters, but these changes cannot affect the values of the
3833  arguments. On the other hand, it is possible to pass a pointer to an object, and the function may
3834  change the value of the object pointed to. A parameter declared to have array or function type is
3835  adjusted to have a pointer type as described in <a href="#6.9.1">6.9.1</a>.
3836
3837
3838 <a name="6.5.2.3" href="#6.5.2.3"><h5>6.5.2.3 Structure and union members</h5></a>
3839 <h6>Constraints</h6>
3840 <p><!--para 1-->
3841  The first operand of the . operator shall have a qualified or unqualified structure or union
3842  type, and the second operand shall name a member of that type.
3843 <p><!--para 2-->
3844  The first operand of the -&gt; operator shall have type ''pointer to qualified or unqualified
3845  structure'' or ''pointer to qualified or unqualified union'', and the second operand shall
3846  name a member of the type pointed to.
3847 <!--page 85 indent 4-->
3848 <h6>Semantics</h6>
3849 <p><!--para 3-->
3850  A postfix expression followed by the . operator and an identifier designates a member of
3851  a structure or union object. The value is that of the named member,<sup><a href="#note82"><b>82)</b></a></sup> and is an lvalue if
3852  the first expression is an lvalue. If the first expression has qualified type, the result has
3853  the so-qualified version of the type of the designated member.
3854 <p><!--para 4-->
3855  A postfix expression followed by the -&gt; operator and an identifier designates a member
3856  of a structure or union object. The value is that of the named member of the object to
3857  which the first expression points, and is an lvalue.<sup><a href="#note83"><b>83)</b></a></sup> If the first expression is a pointer to
3858  a qualified type, the result has the so-qualified version of the type of the designated
3859  member.
3860 <p><!--para 5-->
3861  One special guarantee is made in order to simplify the use of unions: if a union contains
3862  several structures that share a common initial sequence (see below), and if the union
3863  object currently contains one of these structures, it is permitted to inspect the common
3864  initial part of any of them anywhere that a declaration of the complete type of the union is
3865  visible. Two structures share a common initial sequence if corresponding members have
3866  compatible types (and, for bit-fields, the same widths) for a sequence of one or more
3867  initial members.
3868 <p><!--para 6-->
3869  EXAMPLE 1 If f is a function returning a structure or union, and x is a member of that structure or
3870  union, f().x is a valid postfix expression but is not an lvalue.
3871  
3872 <p><!--para 7-->
3873  EXAMPLE 2 In:
3874 <pre>
3875           struct s { int i; const int ci; };
3876           struct s s;
3877           const struct s cs;
3878           volatile struct s vs;</pre>
3879  the various members have the types:
3880 <pre>
3881           s.i        int
3882           s.ci       const int
3883           cs.i       const int
3884           cs.ci      const int
3885           vs.i       volatile int
3886           vs.ci      volatile const int</pre>
3887  
3888  
3889  
3890  
3891 <!--page 86 indent 4-->
3892 <p><!--para 8-->
3893  EXAMPLE 3       The following is a valid fragment:
3894 <pre>
3895           union {
3896                   struct {
3897                         int      alltypes;
3898                   } n;
3899                   struct {
3900                         int      type;
3901                         int      intnode;
3902                   } ni;
3903                   struct {
3904                         int      type;
3905                         double doublenode;
3906                   } nf;
3907           } u;
3908           u.nf.type = 1;
3909           u.nf.doublenode = <a href="#3.14">3.14</a>;
3910           /* ... */
3911           if (u.n.alltypes == 1)
3912                   if (sin(u.nf.doublenode) == 0.0)
3913                         /* ... */</pre>
3914  The following is not a valid fragment (because the union type is not visible within function f):
3915 <pre>
3916           struct t1 { int m; };
3917           struct t2 { int m; };
3918           int f(struct t1 *p1, struct t2 *p2)
3919           {
3920                 if (p1-&gt;m &lt; 0)
3921                         p2-&gt;m = -p2-&gt;m;
3922                 return p1-&gt;m;
3923           }
3924           int g()
3925           {
3926                 union {
3927                         struct t1 s1;
3928                         struct t2 s2;
3929                 } u;
3930                 /* ... */
3931                 return f(&amp;u.s1, &amp;u.s2);
3932           }</pre>
3933  
3934 <p><b> Forward references</b>: address and indirection operators (<a href="#6.5.3.2">6.5.3.2</a>), structure and union
3935  specifiers (<a href="#6.7.2.1">6.7.2.1</a>).
3936 <!--page 87 indent 4-->
3937
3938 <h6>footnotes</h6>
3939 <p><a name="note82">82)</a> If the member used to access the contents of a union object is not the same as the member last used to
3940  store a value in the object, the appropriate part of the object representation of the value is reinterpreted
3941  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
3942  punning"). This might be a trap representation.
3943
3944 <p><a name="note83">83)</a> If &amp;E is a valid pointer expression (where &amp; is the ''address-of '' operator, which generates a pointer to
3945  its operand), the expression (&amp;E)-&gt;MOS is the same as E.MOS.
3946
3947
3948 <a name="6.5.2.4" href="#6.5.2.4"><h5>6.5.2.4 Postfix increment and decrement operators</h5></a>
3949 <h6>Constraints</h6>
3950 <p><!--para 1-->
3951  The operand of the postfix increment or decrement operator shall have qualified or
3952  unqualified real or pointer type and shall be a modifiable lvalue.
3953 <h6>Semantics</h6>
3954 <p><!--para 2-->
3955  The result of the postfix ++ operator is the value of the operand. After the result is
3956  obtained, the value of the operand is incremented. (That is, the value 1 of the appropriate
3957  type is added to it.) See the discussions of additive operators and compound assignment
3958  for information on constraints, types, and conversions and the effects of operations on
3959  pointers. The side effect of updating the stored value of the operand shall occur between
3960  the previous and the next sequence point.
3961 <p><!--para 3-->
3962  The postfix -- operator is analogous to the postfix ++ operator, except that the value of
3963  the operand is decremented (that is, the value 1 of the appropriate type is subtracted from
3964  it).
3965 <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>).
3966
3967 <a name="6.5.2.5" href="#6.5.2.5"><h5>6.5.2.5 Compound literals</h5></a>
3968 <h6>Constraints</h6>
3969 <p><!--para 1-->
3970  The type name shall specify an object type or an array of unknown size, but not a variable
3971  length array type.
3972 <p><!--para 2-->
3973  No initializer shall attempt to provide a value for an object not contained within the entire
3974  unnamed object specified by the compound literal.
3975 <p><!--para 3-->
3976  If the compound literal occurs outside the body of a function, the initializer list shall
3977  consist of constant expressions.
3978 <h6>Semantics</h6>
3979 <p><!--para 4-->
3980  A postfix expression that consists of a parenthesized type name followed by a brace-
3981  enclosed list of initializers is a compound literal. It provides an unnamed object whose
3982  value is given by the initializer list.<sup><a href="#note84"><b>84)</b></a></sup>
3983 <p><!--para 5-->
3984  If the type name specifies an array of unknown size, the size is determined by the
3985  initializer list as specified in <a href="#6.7.8">6.7.8</a>, and the type of the compound literal is that of the
3986  completed array type. Otherwise (when the type name specifies an object type), the type
3987  of the compound literal is that specified by the type name. In either case, the result is an
3988  lvalue.
3989  
3990  
3991 <!--page 88 indent 5-->
3992 <p><!--para 6-->
3993  The value of the compound literal is that of an unnamed object initialized by the
3994  initializer list. If the compound literal occurs outside the body of a function, the object
3995  has static storage duration; otherwise, it has automatic storage duration associated with
3996  the enclosing block.
3997 <p><!--para 7-->
3998  All the semantic rules and constraints for initializer lists in <a href="#6.7.8">6.7.8</a> are applicable to
3999  compound literals.<sup><a href="#note85"><b>85)</b></a></sup>
4000 <p><!--para 8-->
4001  String literals, and compound literals with const-qualified types, need not designate
4002  distinct objects.<sup><a href="#note86"><b>86)</b></a></sup>
4003 <p><!--para 9-->
4004  EXAMPLE 1       The file scope definition
4005 <pre>
4006           int *p = (int []){2, 4};</pre>
4007  initializes p to point to the first element of an array of two ints, the first having the value two and the
4008  second, four. The expressions in this compound literal are required to be constant. The unnamed object
4009  has static storage duration.
4010  
4011 <p><!--para 10-->
4012  EXAMPLE 2       In contrast, in
4013 <pre>
4014           void f(void)
4015           {
4016                 int *p;
4017                 /*...*/
4018                 p = (int [2]){*p};
4019                 /*...*/
4020           }</pre>
4021  p is assigned the address of the first element of an array of two ints, the first having the value previously
4022  pointed to by p and the second, zero. The expressions in this compound literal need not be constant. The
4023  unnamed object has automatic storage duration.
4024  
4025 <p><!--para 11-->
4026  EXAMPLE 3 Initializers with designations can be combined with compound literals. Structure objects
4027  created using compound literals can be passed to functions without depending on member order:
4028 <pre>
4029           drawline((struct point){.x=1, .y=1},
4030                 (struct point){.x=3, .y=4});</pre>
4031  Or, if drawline instead expected pointers to struct point:
4032 <pre>
4033           drawline(&amp;(struct point){.x=1, .y=1},
4034                 &amp;(struct point){.x=3, .y=4});</pre>
4035  
4036 <p><!--para 12-->
4037  EXAMPLE 4       A read-only compound literal can be specified through constructions like:
4038 <pre>
4039           (const float []){1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6}</pre>
4040  
4041  
4042  
4043  
4044 <!--page 89 indent 5-->
4045 <p><!--para 13-->
4046  EXAMPLE 5        The following three expressions have different meanings:
4047 <pre>
4048           "/tmp/fileXXXXXX"
4049           (char []){"/tmp/fileXXXXXX"}
4050           (const char []){"/tmp/fileXXXXXX"}</pre>
4051  The first always has static storage duration and has type array of char, but need not be modifiable; the last
4052  two have automatic storage duration when they occur within the body of a function, and the first of these
4053  two is modifiable.
4054  
4055 <p><!--para 14-->
4056  EXAMPLE 6 Like string literals, const-qualified compound literals can be placed into read-only memory
4057  and can even be shared. For example,
4058 <pre>
4059           (const char []){"abc"} == "abc"</pre>
4060  might yield 1 if the literals' storage is shared.
4061  
4062 <p><!--para 15-->
4063  EXAMPLE 7 Since compound literals are unnamed, a single compound literal cannot specify a circularly
4064  linked object. For example, there is no way to write a self-referential compound literal that could be used
4065  as the function argument in place of the named object endless_zeros below:
4066 <pre>
4067           struct int_list { int car; struct int_list *cdr; };
4068           struct int_list endless_zeros = {0, &amp;endless_zeros};
4069           eval(endless_zeros);</pre>
4070  
4071 <p><!--para 16-->
4072  EXAMPLE 8        Each compound literal creates only a single object in a given scope:
4073 <pre>
4074           struct s { int i; };
4075           int f (void)
4076           {
4077                 struct s *p = 0, *q;
4078                 int j = 0;
4079           again:
4080                 q = p, p = &amp;((struct s){ j++ });
4081                 if (j &lt; 2) goto again;
4082                     return p == q &amp;&amp; q-&gt;i == 1;
4083           }</pre>
4084  The function f() always returns the value 1.
4085 <p><!--para 17-->
4086  Note that if an iteration statement were used instead of an explicit goto and a labeled statement, the
4087  lifetime of the unnamed object would be the body of the loop only, and on entry next time around p would
4088  have an indeterminate value, which would result in undefined behavior.
4089  
4090 <p><b> Forward references</b>: type names (<a href="#6.7.6">6.7.6</a>), initialization (<a href="#6.7.8">6.7.8</a>).
4091 <!--page 90 indent 4-->
4092
4093 <h6>footnotes</h6>
4094 <p><a name="note84">84)</a> Note that this differs from a cast expression. For example, a cast specifies a conversion to scalar types
4095  or void only, and the result of a cast expression is not an lvalue.
4096
4097 <p><a name="note85">85)</a> For example, subobjects without explicit initializers are initialized to zero.
4098
4099 <p><a name="note86">86)</a> This allows implementations to share storage for string literals and constant compound literals with
4100  the same or overlapping representations.
4101
4102
4103 <a name="6.5.3" href="#6.5.3"><h4>6.5.3 Unary operators</h4></a>
4104 <h6>Syntax</h6>
4105 <p><!--para 1-->
4106 <pre>
4107           unary-expression:
4108                  postfix-expression
4109                  ++ unary-expression
4110                  -- unary-expression
4111                  unary-operator cast-expression
4112                  sizeof unary-expression
4113                  sizeof ( type-name )
4114           unary-operator: one of
4115                  &amp; * + - ~             !</pre>
4116
4117 <a name="6.5.3.1" href="#6.5.3.1"><h5>6.5.3.1 Prefix increment and decrement operators</h5></a>
4118 <h6>Constraints</h6>
4119 <p><!--para 1-->
4120  The operand of the prefix increment or decrement operator shall have qualified or
4121  unqualified real or pointer type and shall be a modifiable lvalue.
4122 <h6>Semantics</h6>
4123 <p><!--para 2-->
4124  The value of the operand of the prefix ++ operator is incremented. The result is the new
4125  value of the operand after incrementation. The expression ++E is equivalent to (E+=1).
4126  See the discussions of additive operators and compound assignment for information on
4127  constraints, types, side effects, and conversions and the effects of operations on pointers.
4128 <p><!--para 3-->
4129  The prefix -- operator is analogous to the prefix ++ operator, except that the value of the
4130  operand is decremented.
4131 <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>).
4132
4133 <a name="6.5.3.2" href="#6.5.3.2"><h5>6.5.3.2 Address and indirection operators</h5></a>
4134 <h6>Constraints</h6>
4135 <p><!--para 1-->
4136  The operand of the unary &amp; operator shall be either a function designator, the result of a
4137  [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is
4138  not declared with the register storage-class specifier.
4139 <p><!--para 2-->
4140  The operand of the unary * operator shall have pointer type.
4141 <h6>Semantics</h6>
4142 <p><!--para 3-->
4143  The unary &amp; operator yields the address of its operand. If the operand has type ''type'',
4144  the result has type ''pointer to type''. If the operand is the result of a unary * operator,
4145  neither that operator nor the &amp; operator is evaluated and the result is as if both were
4146  omitted, except that the constraints on the operators still apply and the result is not an
4147  lvalue. Similarly, if the operand is the result of a [] operator, neither the &amp; operator nor
4148 <!--page 91 indent 4-->
4149  the unary * that is implied by the [] is evaluated and the result is as if the &amp; operator
4150  were removed and the [] operator were changed to a + operator. Otherwise, the result is
4151  a pointer to the object or function designated by its operand.
4152 <p><!--para 4-->
4153  The unary * operator denotes indirection. If the operand points to a function, the result is
4154  a function designator; if it points to an object, the result is an lvalue designating the
4155  object. If the operand has type ''pointer to type'', the result has type ''type''. If an
4156  invalid value has been assigned to the pointer, the behavior of the unary * operator is
4157  undefined.<sup><a href="#note87"><b>87)</b></a></sup>
4158 <p><b> Forward references</b>: storage-class specifiers (<a href="#6.7.1">6.7.1</a>), structure and union specifiers
4159  (<a href="#6.7.2.1">6.7.2.1</a>).
4160
4161 <h6>footnotes</h6>
4162 <p><a name="note87">87)</a> Thus, &amp;*E is equivalent to E (even if E is a null pointer), and &amp;(E1[E2]) to ((E1)+(E2)). It is
4163  always true that if E is a function designator or an lvalue that is a valid operand of the unary &amp;
4164  operator, *&amp;E is a function designator or an lvalue equal to E. If *P is an lvalue and T is the name of
4165  an object pointer type, *(T)P is an lvalue that has a type compatible with that to which T points.
4166   Among the invalid values for dereferencing a pointer by the unary * operator are a null pointer, an
4167   address inappropriately aligned for the type of object pointed to, and the address of an object after the
4168   end of its lifetime.
4169
4170
4171 <a name="6.5.3.3" href="#6.5.3.3"><h5>6.5.3.3 Unary arithmetic operators</h5></a>
4172 <h6>Constraints</h6>
4173 <p><!--para 1-->
4174  The operand of the unary + or - operator shall have arithmetic type; of the ~ operator,
4175  integer type; of the ! operator, scalar type.
4176 <h6>Semantics</h6>
4177 <p><!--para 2-->
4178  The result of the unary + operator is the value of its (promoted) operand. The integer
4179  promotions are performed on the operand, and the result has the promoted type.
4180 <p><!--para 3-->
4181  The result of the unary - operator is the negative of its (promoted) operand. The integer
4182  promotions are performed on the operand, and the result has the promoted type.
4183 <p><!--para 4-->
4184  The result of the ~ operator is the bitwise complement of its (promoted) operand (that is,
4185  each bit in the result is set if and only if the corresponding bit in the converted operand is
4186  not set). The integer promotions are performed on the operand, and the result has the
4187  promoted type. If the promoted type is an unsigned type, the expression ~E is equivalent
4188  to the maximum value representable in that type minus E.
4189 <p><!--para 5-->
4190  The result of the logical negation operator ! is 0 if the value of its operand compares
4191  unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.
4192  The expression !E is equivalent to (0==E).
4193  
4194  
4195  
4196  
4197 <!--page 92 indent 4-->
4198
4199 <a name="6.5.3.4" href="#6.5.3.4"><h5>6.5.3.4 The sizeof operator</h5></a>
4200 <h6>Constraints</h6>
4201 <p><!--para 1-->
4202  The sizeof operator shall not be applied to an expression that has function type or an
4203  incomplete type, to the parenthesized name of such a type, or to an expression that
4204  designates a bit-field member.
4205 <h6>Semantics</h6>
4206 <p><!--para 2-->
4207  The sizeof operator yields the size (in bytes) of its operand, which may be an
4208  expression or the parenthesized name of a type. The size is determined from the type of
4209  the operand. The result is an integer. If the type of the operand is a variable length array
4210  type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an
4211  integer constant.
4212 <p><!--para 3-->
4213  When applied to an operand that has type char, unsigned char, or signed char,
4214  (or a qualified version thereof) the result is 1. When applied to an operand that has array
4215  type, the result is the total number of bytes in the array.<sup><a href="#note88"><b>88)</b></a></sup> When applied to an operand
4216  that has structure or union type, the result is the total number of bytes in such an object,
4217  including internal and trailing padding.
4218 <p><!--para 4-->
4219  The value of the result is implementation-defined, and its type (an unsigned integer type)
4220  is size_t, defined in <a href="#7.17">&lt;stddef.h&gt;</a> (and other headers).
4221 <p><!--para 5-->
4222  EXAMPLE 1 A principal use of the sizeof operator is in communication with routines such as storage
4223  allocators and I/O systems. A storage-allocation function might accept a size (in bytes) of an object to
4224  allocate and return a pointer to void. For example:
4225 <pre>
4226          extern void *alloc(size_t);
4227          double *dp = alloc(sizeof *dp);</pre>
4228  The implementation of the alloc function should ensure that its return value is aligned suitably for
4229  conversion to a pointer to double.
4230  
4231 <p><!--para 6-->
4232  EXAMPLE 2      Another use of the sizeof operator is to compute the number of elements in an array:
4233 <pre>
4234          sizeof array / sizeof array[0]</pre>
4235  
4236 <p><!--para 7-->
4237  EXAMPLE 3      In this example, the size of a variable length array is computed and returned from a
4238  function:
4239 <pre>
4240          #include <a href="#7.17">&lt;stddef.h&gt;</a>
4241          size_t fsize3(int n)
4242          {
4243                char b[n+3];                  // variable length array
4244                return sizeof b;              // execution time sizeof
4245          }</pre>
4246  
4247  
4248  
4249 <!--page 93 indent 4-->
4250 <pre>
4251           int main()
4252           {
4253                 size_t size;
4254                 size = fsize3(10); // fsize3 returns 13
4255                 return 0;
4256           }</pre>
4257  
4258 <p><b> Forward references</b>: common definitions <a href="#7.17">&lt;stddef.h&gt;</a> (<a href="#7.17">7.17</a>), declarations (<a href="#6.7">6.7</a>),
4259  structure and union specifiers (<a href="#6.7.2.1">6.7.2.1</a>), type names (<a href="#6.7.6">6.7.6</a>), array declarators (<a href="#6.7.5.2">6.7.5.2</a>).
4260
4261 <h6>footnotes</h6>
4262 <p><a name="note88">88)</a> When applied to a parameter declared to have array or function type, the sizeof operator yields the
4263  size of the adjusted (pointer) type (see <a href="#6.9.1">6.9.1</a>).
4264
4265
4266 <a name="6.5.4" href="#6.5.4"><h4>6.5.4 Cast operators</h4></a>
4267 <h6>Syntax</h6>
4268 <p><!--para 1-->
4269 <pre>
4270           cast-expression:
4271                  unary-expression
4272                  ( type-name ) cast-expression</pre>
4273 <h6>Constraints</h6>
4274 <p><!--para 2-->
4275  Unless the type name specifies a void type, the type name shall specify qualified or
4276  unqualified scalar type and the operand shall have scalar type.
4277 <p><!--para 3-->
4278  Conversions that involve pointers, other than where permitted by the constraints of
4279  <a href="#6.5.16.1">6.5.16.1</a>, shall be specified by means of an explicit cast.
4280 <h6>Semantics</h6>
4281 <p><!--para 4-->
4282  Preceding an expression by a parenthesized type name converts the value of the
4283  expression to the named type. This construction is called a cast.<sup><a href="#note89"><b>89)</b></a></sup> A cast that specifies
4284  no conversion has no effect on the type or value of an expression.
4285 <p><!--para 5-->
4286  If the value of the expression is represented with greater precision or range than required
4287  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
4288  type of the expression is the same as the named type.
4289 <p><b> Forward references</b>: equality operators (<a href="#6.5.9">6.5.9</a>), function declarators (including
4290  prototypes) (<a href="#6.7.5.3">6.7.5.3</a>), simple assignment (<a href="#6.5.16.1">6.5.16.1</a>), type names (<a href="#6.7.6">6.7.6</a>).
4291  
4292  
4293  
4294  
4295 <!--page 94 indent 4-->
4296
4297 <h6>footnotes</h6>
4298 <p><a name="note89">89)</a> A cast does not yield an lvalue. Thus, a cast to a qualified type has the same effect as a cast to the
4299  unqualified version of the type.
4300
4301
4302 <a name="6.5.5" href="#6.5.5"><h4>6.5.5 Multiplicative operators</h4></a>
4303 <h6>Syntax</h6>
4304 <p><!--para 1-->
4305 <pre>
4306           multiplicative-expression:
4307                   cast-expression
4308                   multiplicative-expression * cast-expression
4309                   multiplicative-expression / cast-expression
4310                   multiplicative-expression % cast-expression</pre>
4311 <h6>Constraints</h6>
4312 <p><!--para 2-->
4313  Each of the operands shall have arithmetic type. The operands of the % operator shall
4314  have integer type.
4315 <h6>Semantics</h6>
4316 <p><!--para 3-->
4317  The usual arithmetic conversions are performed on the operands.
4318 <p><!--para 4-->
4319  The result of the binary * operator is the product of the operands.
4320 <p><!--para 5-->
4321  The result of the / operator is the quotient from the division of the first operand by the
4322  second; the result of the % operator is the remainder. In both operations, if the value of
4323  the second operand is zero, the behavior is undefined.
4324 <p><!--para 6-->
4325  When integers are divided, the result of the / operator is the algebraic quotient with any
4326  fractional part discarded.<sup><a href="#note90"><b>90)</b></a></sup> If the quotient a/b is representable, the expression
4327  (a/b)*b + a%b shall equal a.
4328
4329 <h6>footnotes</h6>
4330 <p><a name="note90">90)</a> This is often called ''truncation toward zero''.
4331
4332
4333 <a name="6.5.6" href="#6.5.6"><h4>6.5.6 Additive operators</h4></a>
4334 <h6>Syntax</h6>
4335 <p><!--para 1-->
4336 <pre>
4337           additive-expression:
4338                   multiplicative-expression
4339                   additive-expression + multiplicative-expression
4340                   additive-expression - multiplicative-expression</pre>
4341 <h6>Constraints</h6>
4342 <p><!--para 2-->
4343  For addition, either both operands shall have arithmetic type, or one operand shall be a
4344  pointer to an object type and the other shall have integer type. (Incrementing is
4345  equivalent to adding 1.)
4346 <p><!--para 3-->
4347  For subtraction, one of the following shall hold:
4348 <ul>
4349 <li>  both operands have arithmetic type;
4350  
4351  
4352  
4353 <!--page 95 indent 4-->
4354 <li>  both operands are pointers to qualified or unqualified versions of compatible object
4355  types; or
4356 <li>  the left operand is a pointer to an object type and the right operand has integer type.
4357 </ul>
4358  (Decrementing is equivalent to subtracting 1.)
4359 <h6>Semantics</h6>
4360 <p><!--para 4-->
4361  If both operands have arithmetic type, the usual arithmetic conversions are performed on
4362  them.
4363 <p><!--para 5-->
4364  The result of the binary + operator is the sum of the operands.
4365 <p><!--para 6-->
4366  The result of the binary - operator is the difference resulting from the subtraction of the
4367  second operand from the first.
4368 <p><!--para 7-->
4369  For the purposes of these operators, a pointer to an object that is not an element of an
4370  array behaves the same as a pointer to the first element of an array of length one with the
4371  type of the object as its element type.
4372 <p><!--para 8-->
4373  When an expression that has integer type is added to or subtracted from a pointer, the
4374  result has the type of the pointer operand. If the pointer operand points to an element of
4375  an array object, and the array is large enough, the result points to an element offset from
4376  the original element such that the difference of the subscripts of the resulting and original
4377  array elements equals the integer expression. In other words, if the expression P points to
4378  the i-th element of an array object, the expressions (P)+N (equivalently, N+(P)) and
4379  (P)-N (where N has the value n) point to, respectively, the i+n-th and i-n-th elements of
4380  the array object, provided they exist. Moreover, if the expression P points to the last
4381  element of an array object, the expression (P)+1 points one past the last element of the
4382  array object, and if the expression Q points one past the last element of an array object,
4383  the expression (Q)-1 points to the last element of the array object. If both the pointer
4384  operand and the result point to elements of the same array object, or one past the last
4385  element of the array object, the evaluation shall not produce an overflow; otherwise, the
4386  behavior is undefined. If the result points one past the last element of the array object, it
4387  shall not be used as the operand of a unary * operator that is evaluated.
4388 <p><!--para 9-->
4389  When two pointers are subtracted, both shall point to elements of the same array object,
4390  or one past the last element of the array object; the result is the difference of the
4391  subscripts of the two array elements. The size of the result is implementation-defined,
4392  and its type (a signed integer type) is ptrdiff_t defined in the <a href="#7.17">&lt;stddef.h&gt;</a> header.
4393  If the result is not representable in an object of that type, the behavior is undefined. In
4394  other words, if the expressions P and Q point to, respectively, the i-th and j-th elements of
4395  an array object, the expression (P)-(Q) has the value i-j provided the value fits in an
4396  object of type ptrdiff_t. Moreover, if the expression P points either to an element of
4397  an array object or one past the last element of an array object, and the expression Q points
4398  to the last element of the same array object, the expression ((Q)+1)-(P) has the same
4399 <!--page 96 indent 5-->
4400  value as ((Q)-(P))+1 and as -((P)-((Q)+1)), and has the value zero if the
4401  expression P points one past the last element of the array object, even though the
4402  expression (Q)+1 does not point to an element of the array object.<sup><a href="#note91"><b>91)</b></a></sup>
4403 <p><!--para 10-->
4404  EXAMPLE        Pointer arithmetic is well defined with pointers to variable length array types.
4405 <p><!--para 11-->
4406 <pre>
4407           {
4408                    int n = 4, m = 3;
4409                    int a[n][m];
4410                    int (*p)[m] = a;            //   p == &amp;a[0]
4411                    p += 1;                     //   p == &amp;a[1]
4412                    (*p)[2] = 99;               //   a[1][2] == 99
4413                    n = p - a;                  //   n == 1
4414           }</pre>
4415  If array a in the above example were declared to be an array of known constant size, and pointer p were
4416  declared to be a pointer to an array of the same known constant size (pointing to a), the results would be
4417  the same.
4418  
4419 <p><b> Forward references</b>: array declarators (<a href="#6.7.5.2">6.7.5.2</a>), common definitions <a href="#7.17">&lt;stddef.h&gt;</a>
4420  (<a href="#7.17">7.17</a>).
4421
4422 <h6>footnotes</h6>
4423 <p><a name="note91">91)</a> Another way to approach pointer arithmetic is first to convert the pointer(s) to character pointer(s): In
4424  this scheme the integer expression added to or subtracted from the converted pointer is first multiplied
4425  by the size of the object originally pointed to, and the resulting pointer is converted back to the
4426  original type. For pointer subtraction, the result of the difference between the character pointers is
4427  similarly divided by the size of the object originally pointed to.
4428   When viewed in this way, an implementation need only provide one extra byte (which may overlap
4429   another object in the program) just after the end of the object in order to satisfy the ''one past the last
4430   element'' requirements.
4431
4432
4433 <a name="6.5.7" href="#6.5.7"><h4>6.5.7 Bitwise shift operators</h4></a>
4434 <h6>Syntax</h6>
4435 <p><!--para 1-->
4436 <pre>
4437           shift-expression:
4438                   additive-expression
4439                   shift-expression &lt;&lt; additive-expression
4440                   shift-expression &gt;&gt; additive-expression</pre>
4441 <h6>Constraints</h6>
4442 <p><!--para 2-->
4443  Each of the operands shall have integer type.
4444 <h6>Semantics</h6>
4445 <p><!--para 3-->
4446  The integer promotions are performed on each of the operands. The type of the result is
4447  that of the promoted left operand. If the value of the right operand is negative or is
4448  greater than or equal to the width of the promoted left operand, the behavior is undefined.
4449  
4450  
4451  
4452  
4453 <!--page 97 indent 4-->
4454 <p><!--para 4-->
4455  The result of E1 &lt;&lt; E2 is E1 left-shifted E2 bit positions; vacated bits are filled with
4456  zeros. If E1 has an unsigned type, the value of the result is E1 x 2E2 , reduced modulo
4457  one more than the maximum value representable in the result type. If E1 has a signed
4458  type and nonnegative value, and E1 x 2E2 is representable in the result type, then that is
4459  the resulting value; otherwise, the behavior is undefined.
4460 <p><!--para 5-->
4461  The result of E1 &gt;&gt; E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type
4462  or if E1 has a signed type and a nonnegative value, the value of the result is the integral
4463  part of the quotient of E1 / 2E2 . If E1 has a signed type and a negative value, the
4464  resulting value is implementation-defined.
4465
4466 <a name="6.5.8" href="#6.5.8"><h4>6.5.8 Relational operators</h4></a>
4467 <h6>Syntax</h6>
4468 <p><!--para 1-->
4469 <pre>
4470           relational-expression:
4471                   shift-expression
4472                   relational-expression   &lt;    shift-expression
4473                   relational-expression   &gt;    shift-expression
4474                   relational-expression   &lt;=   shift-expression
4475                   relational-expression   &gt;=   shift-expression</pre>
4476 <h6>Constraints</h6>
4477 <p><!--para 2-->
4478  One of the following shall hold:
4479 <ul>
4480 <li>  both operands have real type;
4481 <li>  both operands are pointers to qualified or unqualified versions of compatible object
4482  types; or
4483 <li>  both operands are pointers to qualified or unqualified versions of compatible
4484  incomplete types.
4485 </ul>
4486 <h6>Semantics</h6>
4487 <p><!--para 3-->
4488  If both of the operands have arithmetic type, the usual arithmetic conversions are
4489  performed.
4490 <p><!--para 4-->
4491  For the purposes of these operators, a pointer to an object that is not an element of an
4492  array behaves the same as a pointer to the first element of an array of length one with the
4493  type of the object as its element type.
4494 <p><!--para 5-->
4495  When two pointers are compared, the result depends on the relative locations in the
4496  address space of the objects pointed to. If two pointers to object or incomplete types both
4497  point to the same object, or both point one past the last element of the same array object,
4498  they compare equal. If the objects pointed to are members of the same aggregate object,
4499  pointers to structure members declared later compare greater than pointers to members
4500  declared earlier in the structure, and pointers to array elements with larger subscript
4501 <!--page 98 indent 4-->
4502  values compare greater than pointers to elements of the same array with lower subscript
4503  values. All pointers to members of the same union object compare equal. If the
4504  expression P points to an element of an array object and the expression Q points to the
4505  last element of the same array object, the pointer expression Q+1 compares greater than
4506  P. In all other cases, the behavior is undefined.
4507 <p><!--para 6-->
4508  Each of the operators &lt; (less than), &gt; (greater than), &lt;= (less than or equal to), and &gt;=
4509  (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false.<sup><a href="#note92"><b>92)</b></a></sup>
4510  The result has type int.
4511
4512 <h6>footnotes</h6>
4513 <p><a name="note92">92)</a> The expression a&lt;b&lt;c is not interpreted as in ordinary mathematics. As the syntax indicates, it
4514  means (a&lt;b)&lt;c; in other words, ''if a is less than b, compare 1 to c; otherwise, compare 0 to c''.
4515
4516
4517 <a name="6.5.9" href="#6.5.9"><h4>6.5.9 Equality operators</h4></a>
4518 <h6>Syntax</h6>
4519 <p><!--para 1-->
4520 <pre>
4521           equality-expression:
4522                   relational-expression
4523                  equality-expression == relational-expression
4524                  equality-expression != relational-expression</pre>
4525 <h6>Constraints</h6>
4526 <p><!--para 2-->
4527  One of the following shall hold:
4528 <ul>
4529 <li>  both operands have arithmetic type;
4530 <li>  both operands are pointers to qualified or unqualified versions of compatible types;
4531 <li>  one operand is a pointer to an object or incomplete type and the other is a pointer to a
4532  qualified or unqualified version of void; or
4533 <li>  one operand is a pointer and the other is a null pointer constant.
4534 </ul>
4535 <h6>Semantics</h6>
4536 <p><!--para 3-->
4537  The == (equal to) and != (not equal to) operators are analogous to the relational
4538  operators except for their lower precedence.<sup><a href="#note93"><b>93)</b></a></sup> Each of the operators yields 1 if the
4539  specified relation is true and 0 if it is false. The result has type int. For any pair of
4540  operands, exactly one of the relations is true.
4541 <p><!--para 4-->
4542  If both of the operands have arithmetic type, the usual arithmetic conversions are
4543  performed. Values of complex types are equal if and only if both their real parts are equal
4544  and also their imaginary parts are equal. Any two values of arithmetic types from
4545  different type domains are equal if and only if the results of their conversions to the
4546  (complex) result type determined by the usual arithmetic conversions are equal.
4547  
4548  
4549 <!--page 99 indent 4-->
4550 <p><!--para 5-->
4551  Otherwise, at least one operand is a pointer. If one operand is a pointer and the other is a
4552  null pointer constant, the null pointer constant is converted to the type of the pointer. If
4553  one operand is a pointer to an object or incomplete type and the other is a pointer to a
4554  qualified or unqualified version of void, the former is converted to the type of the latter.
4555 <p><!--para 6-->
4556  Two pointers compare equal if and only if both are null pointers, both are pointers to the
4557  same object (including a pointer to an object and a subobject at its beginning) or function,
4558  both are pointers to one past the last element of the same array object, or one is a pointer
4559  to one past the end of one array object and the other is a pointer to the start of a different
4560  array object that happens to immediately follow the first array object in the address
4561  space.<sup><a href="#note94"><b>94)</b></a></sup>
4562 <p><!--para 7-->
4563  For the purposes of these operators, a pointer to an object that is not an element of an
4564  array behaves the same as a pointer to the first element of an array of length one with the
4565  type of the object as its element type.
4566
4567 <h6>footnotes</h6>
4568 <p><a name="note93">93)</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.
4569
4570 <p><a name="note94">94)</a> Two objects may be adjacent in memory because they are adjacent elements of a larger array or
4571  adjacent members of a structure with no padding between them, or because the implementation chose
4572  to place them so, even though they are unrelated. If prior invalid pointer operations (such as accesses
4573  outside array bounds) produced undefined behavior, subsequent comparisons also produce undefined
4574  behavior.
4575
4576
4577 <a name="6.5.10" href="#6.5.10"><h4>6.5.10 Bitwise AND operator</h4></a>
4578 <h6>Syntax</h6>
4579 <p><!--para 1-->
4580 <pre>
4581           AND-expression:
4582                 equality-expression
4583                 AND-expression &amp; equality-expression</pre>
4584 <h6>Constraints</h6>
4585 <p><!--para 2-->
4586  Each of the operands shall have integer type.
4587 <h6>Semantics</h6>
4588 <p><!--para 3-->
4589  The usual arithmetic conversions are performed on the operands.
4590 <p><!--para 4-->
4591  The result of the binary &amp; operator is the bitwise AND of the operands (that is, each bit in
4592  the result is set if and only if each of the corresponding bits in the converted operands is
4593  set).
4594  
4595  
4596  
4597  
4598 <!--page 100 indent 4-->
4599
4600 <a name="6.5.11" href="#6.5.11"><h4>6.5.11 Bitwise exclusive OR operator</h4></a>
4601 <h6>Syntax</h6>
4602 <p><!--para 1-->
4603 <pre>
4604           exclusive-OR-expression:
4605                   AND-expression
4606                   exclusive-OR-expression ^ AND-expression</pre>
4607 <h6>Constraints</h6>
4608 <p><!--para 2-->
4609  Each of the operands shall have integer type.
4610 <h6>Semantics</h6>
4611 <p><!--para 3-->
4612  The usual arithmetic conversions are performed on the operands.
4613 <p><!--para 4-->
4614  The result of the ^ operator is the bitwise exclusive OR of the operands (that is, each bit
4615  in the result is set if and only if exactly one of the corresponding bits in the converted
4616  operands is set).
4617
4618 <a name="6.5.12" href="#6.5.12"><h4>6.5.12 Bitwise inclusive OR operator</h4></a>
4619 <h6>Syntax</h6>
4620 <p><!--para 1-->
4621 <pre>
4622           inclusive-OR-expression:
4623                   exclusive-OR-expression
4624                   inclusive-OR-expression | exclusive-OR-expression</pre>
4625 <h6>Constraints</h6>
4626 <p><!--para 2-->
4627  Each of the operands shall have integer type.
4628 <h6>Semantics</h6>
4629 <p><!--para 3-->
4630  The usual arithmetic conversions are performed on the operands.
4631 <p><!--para 4-->
4632  The result of the | operator is the bitwise inclusive OR of the operands (that is, each bit in
4633  the result is set if and only if at least one of the corresponding bits in the converted
4634  operands is set).
4635 <!--page 101 indent 4-->
4636
4637 <a name="6.5.13" href="#6.5.13"><h4>6.5.13 Logical AND operator</h4></a>
4638 <h6>Syntax</h6>
4639 <p><!--para 1-->
4640 <pre>
4641            logical-AND-expression:
4642                    inclusive-OR-expression
4643                    logical-AND-expression &amp;&amp; inclusive-OR-expression</pre>
4644 <h6>Constraints</h6>
4645 <p><!--para 2-->
4646  Each of the operands shall have scalar type.
4647 <h6>Semantics</h6>
4648 <p><!--para 3-->
4649  The &amp;&amp; operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it
4650  yields 0. The result has type int.
4651 <p><!--para 4-->
4652  Unlike the bitwise binary &amp; operator, the &amp;&amp; operator guarantees left-to-right evaluation;
4653  there is a sequence point after the evaluation of the first operand. If the first operand
4654  compares equal to 0, the second operand is not evaluated.
4655
4656 <a name="6.5.14" href="#6.5.14"><h4>6.5.14 Logical OR operator</h4></a>
4657 <h6>Syntax</h6>
4658 <p><!--para 1-->
4659 <pre>
4660            logical-OR-expression:
4661                    logical-AND-expression
4662                    logical-OR-expression || logical-AND-expression</pre>
4663 <h6>Constraints</h6>
4664 <p><!--para 2-->
4665  Each of the operands shall have scalar type.
4666 <h6>Semantics</h6>
4667 <p><!--para 3-->
4668  The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it
4669  yields 0. The result has type int.
4670 <p><!--para 4-->
4671  Unlike the bitwise | operator, the || operator guarantees left-to-right evaluation; there is
4672  a sequence point after the evaluation of the first operand. If the first operand compares
4673  unequal to 0, the second operand is not evaluated.
4674 <!--page 102 indent 4-->
4675
4676 <a name="6.5.15" href="#6.5.15"><h4>6.5.15 Conditional operator</h4></a>
4677 <h6>Syntax</h6>
4678 <p><!--para 1-->
4679 <pre>
4680           conditional-expression:
4681                  logical-OR-expression
4682                  logical-OR-expression ? expression : conditional-expression</pre>
4683 <h6>Constraints</h6>
4684 <p><!--para 2-->
4685  The first operand shall have scalar type.
4686 <p><!--para 3-->
4687  One of the following shall hold for the second and third operands:
4688 <ul>
4689 <li>  both operands have arithmetic type;
4690 <li>  both operands have the same structure or union type;
4691 <li>  both operands have void type;
4692 <li>  both operands are pointers to qualified or unqualified versions of compatible types;
4693 <li>  one operand is a pointer and the other is a null pointer constant; or
4694 <li>  one operand is a pointer to an object or incomplete type and the other is a pointer to a
4695  qualified or unqualified version of void.
4696 </ul>
4697 <h6>Semantics</h6>
4698 <p><!--para 4-->
4699  The first operand is evaluated; there is a sequence point after its evaluation. The second
4700  operand is evaluated only if the first compares unequal to 0; the third operand is evaluated
4701  only if the first compares equal to 0; the result is the value of the second or third operand
4702  (whichever is evaluated), converted to the type described below.<sup><a href="#note95"><b>95)</b></a></sup> If an attempt is made
4703  to modify the result of a conditional operator or to access it after the next sequence point,
4704  the behavior is undefined.
4705 <p><!--para 5-->
4706  If both the second and third operands have arithmetic type, the result type that would be
4707  determined by the usual arithmetic conversions, were they applied to those two operands,
4708  is the type of the result. If both the operands have structure or union type, the result has
4709  that type. If both operands have void type, the result has void type.
4710 <p><!--para 6-->
4711  If both the second and third operands are pointers or one is a null pointer constant and the
4712  other is a pointer, the result type is a pointer to a type qualified with all the type qualifiers
4713  of the types pointed-to by both operands. Furthermore, if both operands are pointers to
4714  compatible types or to differently qualified versions of compatible types, the result type is
4715  a pointer to an appropriately qualified version of the composite type; if one operand is a
4716  null pointer constant, the result has the type of the other operand; otherwise, one operand
4717  is a pointer to void or a qualified version of void, in which case the result type is a
4718  
4719 <!--page 103 indent 4-->
4720  pointer to an appropriately qualified version of void.
4721 <p><!--para 7-->
4722  EXAMPLE The common type that results when the second and third operands are pointers is determined
4723  in two independent stages. The appropriate qualifiers, for example, do not depend on whether the two
4724  pointers have compatible types.
4725 <p><!--para 8-->
4726  Given the declarations
4727 <pre>
4728           const void *c_vp;
4729           void *vp;
4730           const int *c_ip;
4731           volatile int *v_ip;
4732           int *ip;
4733           const char *c_cp;</pre>
4734  the third column in the following table is the common type that is the result of a conditional expression in
4735  which the first two columns are the second and third operands (in either order):
4736 <pre>
4737           c_vp     c_ip      const void *
4738           v_ip     0         volatile int *
4739           c_ip     v_ip      const volatile int *
4740           vp       c_cp      const void *
4741           ip       c_ip      const int *
4742           vp       ip        void *</pre>
4743  
4744
4745 <h6>footnotes</h6>
4746 <p><a name="note95">95)</a> A conditional expression does not yield an lvalue.
4747
4748
4749 <a name="6.5.16" href="#6.5.16"><h4>6.5.16 Assignment operators</h4></a>
4750 <h6>Syntax</h6>
4751 <p><!--para 1-->
4752 <pre>
4753           assignment-expression:
4754                  conditional-expression
4755                  unary-expression assignment-operator assignment-expression
4756           assignment-operator: one of
4757                  = *= /= %= +=                       -=     &lt;&lt;=      &gt;&gt;=      &amp;=     ^=     |=</pre>
4758 <h6>Constraints</h6>
4759 <p><!--para 2-->
4760  An assignment operator shall have a modifiable lvalue as its left operand.
4761 <h6>Semantics</h6>
4762 <p><!--para 3-->
4763  An assignment operator stores a value in the object designated by the left operand. An
4764  assignment expression has the value of the left operand after the assignment, but is not an
4765  lvalue. The type of an assignment expression is the type of the left operand unless the
4766  left operand has qualified type, in which case it is the unqualified version of the type of
4767  the left operand. The side effect of updating the stored value of the left operand shall
4768  occur between the previous and the next sequence point.
4769 <p><!--para 4-->
4770  The order of evaluation of the operands is unspecified. If an attempt is made to modify
4771  the result of an assignment operator or to access it after the next sequence point, the
4772  behavior is undefined.
4773 <!--page 104 indent 4-->
4774
4775 <a name="6.5.16.1" href="#6.5.16.1"><h5>6.5.16.1 Simple assignment</h5></a>
4776 <h6>Constraints</h6>
4777 <p><!--para 1-->
4778  One of the following shall hold:<sup><a href="#note96"><b>96)</b></a></sup>
4779 <ul>
4780 <li>  the left operand has qualified or unqualified arithmetic type and the right has
4781  arithmetic type;
4782 <li>  the left operand has a qualified or unqualified version of a structure or union type
4783  compatible with the type of the right;
4784 <li>  both operands are pointers to qualified or unqualified versions of compatible types,
4785  and the type pointed to by the left has all the qualifiers of the type pointed to by the
4786  right;
4787 <li>  one operand is a pointer to an object or incomplete type and the other is a pointer to a
4788  qualified or unqualified version of void, and the type pointed to by the left has all
4789  the qualifiers of the type pointed to by the right;
4790 <li>  the left operand is a pointer and the right is a null pointer constant; or
4791 <li>  the left operand has type _Bool and the right is a pointer.
4792 </ul>
4793 <h6>Semantics</h6>
4794 <p><!--para 2-->
4795  In simple assignment (=), the value of the right operand is converted to the type of the
4796  assignment expression and replaces the value stored in the object designated by the left
4797  operand.
4798 <p><!--para 3-->
4799  If the value being stored in an object is read from another object that overlaps in any way
4800  the storage of the first object, then the overlap shall be exact and the two objects shall
4801  have qualified or unqualified versions of a compatible type; otherwise, the behavior is
4802  undefined.
4803 <p><!--para 4-->
4804  EXAMPLE 1       In the program fragment
4805 <pre>
4806          int f(void);
4807          char c;
4808          /* ... */
4809          if ((c = f()) == -1)
4810                  /* ... */</pre>
4811  the int value returned by the function may be truncated when stored in the char, and then converted back
4812  to int width prior to the comparison. In an implementation in which ''plain'' char has the same range of
4813  values as unsigned char (and char is narrower than int), the result of the conversion cannot be
4814  
4815  
4816  
4817 <!--page 105 indent 4-->
4818  negative, so the operands of the comparison can never compare equal. Therefore, for full portability, the
4819  variable c should be declared as int.
4820  
4821 <p><!--para 5-->
4822  EXAMPLE 2       In the fragment:
4823 <pre>
4824          char c;
4825          int i;
4826          long l;
4827          l = (c = i);</pre>
4828  the value of i is converted to the type of the assignment expression c = i, that is, char type. The value
4829  of the expression enclosed in parentheses is then converted to the type of the outer assignment expression,
4830  that is, long int type.
4831  
4832 <p><!--para 6-->
4833  EXAMPLE 3       Consider the fragment:
4834 <pre>
4835          const char **cpp;
4836          char *p;
4837          const char c = 'A';
4838          cpp = &amp;p;                  // constraint violation
4839          *cpp = &amp;c;                 // valid
4840          *p = 0;                    // valid</pre>
4841  The first assignment is unsafe because it would allow the following valid code to attempt to change the
4842  value of the const object c.
4843  
4844
4845 <h6>footnotes</h6>
4846 <p><a name="note96">96)</a> The asymmetric appearance of these constraints with respect to type qualifiers is due to the conversion
4847  (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
4848  qualifiers that were applied to the type category of the expression (for example, it removes const but
4849  not volatile from the type int volatile * const).
4850
4851
4852 <a name="6.5.16.2" href="#6.5.16.2"><h5>6.5.16.2 Compound assignment</h5></a>
4853 <h6>Constraints</h6>
4854 <p><!--para 1-->
4855  For the operators += and -= only, either the left operand shall be a pointer to an object
4856  type and the right shall have integer type, or the left operand shall have qualified or
4857  unqualified arithmetic type and the right shall have arithmetic type.
4858 <p><!--para 2-->
4859  For the other operators, each operand shall have arithmetic type consistent with those
4860  allowed by the corresponding binary operator.
4861 <h6>Semantics</h6>
4862 <p><!--para 3-->
4863  A compound assignment of the form E1 op = E2 differs from the simple assignment
4864  expression E1 = E1 op (E2) only in that the lvalue E1 is evaluated only once.
4865 <!--page 106 indent 4-->
4866
4867 <a name="6.5.17" href="#6.5.17"><h4>6.5.17 Comma operator</h4></a>
4868 <h6>Syntax</h6>
4869 <p><!--para 1-->
4870 <pre>
4871           expression:
4872                  assignment-expression
4873                  expression , assignment-expression</pre>
4874 <h6>Semantics</h6>
4875 <p><!--para 2-->
4876  The left operand of a comma operator is evaluated as a void expression; there is a
4877  sequence point after its evaluation. Then the right operand is evaluated; the result has its
4878  type and value.<sup><a href="#note97"><b>97)</b></a></sup> If an attempt is made to modify the result of a comma operator or to
4879  access it after the next sequence point, the behavior is undefined.
4880 <p><!--para 3-->
4881  EXAMPLE As indicated by the syntax, the comma operator (as described in this subclause) cannot
4882  appear in contexts where a comma is used to separate items in a list (such as arguments to functions or lists
4883  of initializers). On the other hand, it can be used within a parenthesized expression or within the second
4884  expression of a conditional operator in such contexts. In the function call
4885 <pre>
4886           f(a, (t=3, t+2), c)</pre>
4887  the function has three arguments, the second of which has the value 5.
4888  
4889 <p><b> Forward references</b>: initialization (<a href="#6.7.8">6.7.8</a>).
4890  
4891  
4892  
4893  
4894 <!--page 107 indent 4-->
4895
4896 <h6>footnotes</h6>
4897 <p><a name="note97">97)</a> A comma operator does not yield an lvalue.
4898
4899
4900 <a name="6.6" href="#6.6"><h3>6.6 Constant expressions</h3></a>
4901 <h6>Syntax</h6>
4902 <p><!--para 1-->
4903 <pre>
4904           constant-expression:
4905                  conditional-expression</pre>
4906 <h6>Description</h6>
4907 <p><!--para 2-->
4908  A constant expression can be evaluated during translation rather than runtime, and
4909  accordingly may be used in any place that a constant may be.
4910 <h6>Constraints</h6>
4911 <p><!--para 3-->
4912  Constant expressions shall not contain assignment, increment, decrement, function-call,
4913  or comma operators, except when they are contained within a subexpression that is not
4914  evaluated.<sup><a href="#note98"><b>98)</b></a></sup>
4915 <p><!--para 4-->
4916  Each constant expression shall evaluate to a constant that is in the range of representable
4917  values for its type.
4918 <h6>Semantics</h6>
4919 <p><!--para 5-->
4920  An expression that evaluates to a constant is required in several contexts. If a floating
4921  expression is evaluated in the translation environment, the arithmetic precision and range
4922  shall be at least as great as if the expression were being evaluated in the execution
4923  environment.
4924 <p><!--para 6-->
4925  An integer constant expression<sup><a href="#note99"><b>99)</b></a></sup> shall have integer type and shall only have operands
4926  that are integer constants, enumeration constants, character constants, sizeof
4927  expressions whose results are integer constants, and floating constants that are the
4928  immediate operands of casts. Cast operators in an integer constant expression shall only
4929  convert arithmetic types to integer types, except as part of an operand to the sizeof
4930  operator.
4931 <p><!--para 7-->
4932  More latitude is permitted for constant expressions in initializers. Such a constant
4933  expression shall be, or evaluate to, one of the following:
4934 <ul>
4935 <li>  an arithmetic constant expression,
4936 <li>  a null pointer constant,
4937  
4938  
4939  
4940  
4941 <!--page 108 indent 5-->
4942 <li>  an address constant, or
4943 <li>  an address constant for an object type plus or minus an integer constant expression.
4944 </ul>
4945 <p><!--para 8-->
4946  An arithmetic constant expression shall have arithmetic type and shall only have
4947  operands that are integer constants, floating constants, enumeration constants, character
4948  constants, and sizeof expressions. Cast operators in an arithmetic constant expression
4949  shall only convert arithmetic types to arithmetic types, except as part of an operand to a
4950  sizeof operator whose result is an integer constant.
4951 <p><!--para 9-->
4952  An address constant is a null pointer, a pointer to an lvalue designating an object of static
4953  storage duration, or a pointer to a function designator; it shall be created explicitly using
4954  the unary &amp; operator or an integer constant cast to pointer type, or implicitly by the use of
4955  an expression of array or function type. The array-subscript [] and member-access .
4956  and -&gt; operators, the address &amp; and indirection * unary operators, and pointer casts may
4957  be used in the creation of an address constant, but the value of an object shall not be
4958  accessed by use of these operators.
4959 <p><!--para 10-->
4960  An implementation may accept other forms of constant expressions.
4961 <p><!--para 11-->
4962  The semantic rules for the evaluation of a constant expression are the same as for
4963  nonconstant expressions.<sup><a href="#note100"><b>100)</b></a></sup>
4964 <p><b> Forward references</b>: array declarators (<a href="#6.7.5.2">6.7.5.2</a>), initialization (<a href="#6.7.8">6.7.8</a>).
4965  
4966  
4967  
4968  
4969 <!--page 109 indent 4-->
4970
4971 <h6>footnotes</h6>
4972 <p><a name="note98">98)</a> The operand of a sizeof operator is usually not evaluated (<a href="#6.5.3.4">6.5.3.4</a>).
4973
4974 <p><a name="note99">99)</a> An integer constant expression is used to specify the size of a bit-field member of a structure, the
4975  value of an enumeration constant, the size of an array, or the value of a case constant. Further
4976  constraints that apply to the integer constant expressions used in conditional-inclusion preprocessing
4977  directives are discussed in <a href="#6.10.1">6.10.1</a>.
4978
4979 <p><a name="note100">100)</a> Thus, in the following initialization,
4980
4981 <pre>
4982           static int i = 2 || 1 / 0;</pre>
4983  the expression is a valid integer constant expression with value one.
4984
4985
4986 <a name="6.7" href="#6.7"><h3>6.7 Declarations</h3></a>
4987 <h6>Syntax</h6>
4988 <p><!--para 1-->
4989 <pre>
4990           declaration:
4991                  declaration-specifiers init-declarator-listopt ;
4992           declaration-specifiers:
4993                  storage-class-specifier declaration-specifiersopt
4994                  type-specifier declaration-specifiersopt
4995                  type-qualifier declaration-specifiersopt
4996                  function-specifier declaration-specifiersopt
4997           init-declarator-list:
4998                   init-declarator
4999                   init-declarator-list , init-declarator
5000           init-declarator:
5001                   declarator
5002                   declarator = initializer</pre>
5003 <h6>Constraints</h6>
5004 <p><!--para 2-->
5005  A declaration shall declare at least a declarator (other than the parameters of a function or
5006  the members of a structure or union), a tag, or the members of an enumeration.
5007 <p><!--para 3-->
5008  If an identifier has no linkage, there shall be no more than one declaration of the identifier
5009  (in a declarator or type specifier) with the same scope and in the same name space, except
5010  for tags as specified in <a href="#6.7.2.3">6.7.2.3</a>.
5011 <p><!--para 4-->
5012  All declarations in the same scope that refer to the same object or function shall specify
5013  compatible types.
5014 <h6>Semantics</h6>
5015 <p><!--para 5-->
5016  A declaration specifies the interpretation and attributes of a set of identifiers. A definition
5017  of an identifier is a declaration for that identifier that:
5018 <ul>
5019 <li>  for an object, causes storage to be reserved for that object;
5020 <li>  for a function, includes the function body;<sup><a href="#note101"><b>101)</b></a></sup>
5021 <li>  for an enumeration constant or typedef name, is the (only) declaration of the
5022  identifier.
5023 </ul>
5024 <p><!--para 6-->
5025  The declaration specifiers consist of a sequence of specifiers that indicate the linkage,
5026  storage duration, and part of the type of the entities that the declarators denote. The init-
5027  declarator-list is a comma-separated sequence of declarators, each of which may have
5028  
5029 <!--page 110 indent 4-->
5030  additional type information, or an initializer, or both. The declarators contain the
5031  identifiers (if any) being declared.
5032 <p><!--para 7-->
5033  If an identifier for an object is declared with no linkage, the type for the object shall be
5034  complete by the end of its declarator, or by the end of its init-declarator if it has an
5035  initializer; in the case of function parameters (including in prototypes), it is the adjusted
5036  type (see <a href="#6.7.5.3">6.7.5.3</a>) that is required to be complete.
5037 <p><b> Forward references</b>: declarators (<a href="#6.7.5">6.7.5</a>), enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), initialization
5038  (<a href="#6.7.8">6.7.8</a>).
5039
5040 <h6>footnotes</h6>
5041 <p><a name="note101">101)</a> Function definitions have a different syntax, described in <a href="#6.9.1">6.9.1</a>.
5042
5043
5044 <a name="6.7.1" href="#6.7.1"><h4>6.7.1 Storage-class specifiers</h4></a>
5045 <h6>Syntax</h6>
5046 <p><!--para 1-->
5047 <pre>
5048           storage-class-specifier:
5049                  typedef
5050                  extern
5051                  static
5052                  auto
5053                  register</pre>
5054 <h6>Constraints</h6>
5055 <p><!--para 2-->
5056  At most, one storage-class specifier may be given in the declaration specifiers in a
5057  declaration.<sup><a href="#note102"><b>102)</b></a></sup>
5058 <h6>Semantics</h6>
5059 <p><!--para 3-->
5060  The typedef specifier is called a ''storage-class specifier'' for syntactic convenience
5061  only; it is discussed in <a href="#6.7.7">6.7.7</a>. The meanings of the various linkages and storage durations
5062  were discussed in <a href="#6.2.2">6.2.2</a> and <a href="#6.2.4">6.2.4</a>.
5063 <p><!--para 4-->
5064  A declaration of an identifier for an object with storage-class specifier register
5065  suggests that access to the object be as fast as possible. The extent to which such
5066  suggestions are effective is implementation-defined.<sup><a href="#note103"><b>103)</b></a></sup>
5067 <p><!--para 5-->
5068  The declaration of an identifier for a function that has block scope shall have no explicit
5069  storage-class specifier other than extern.
5070  
5071  
5072  
5073 <!--page 111 indent 4-->
5074 <p><!--para 6-->
5075  If an aggregate or union object is declared with a storage-class specifier other than
5076  typedef, the properties resulting from the storage-class specifier, except with respect to
5077  linkage, also apply to the members of the object, and so on recursively for any aggregate
5078  or union member objects.
5079 <p><b> Forward references</b>: type definitions (<a href="#6.7.7">6.7.7</a>).
5080
5081 <h6>footnotes</h6>
5082 <p><a name="note102">102)</a> See ''future language directions'' (<a href="#6.11.5">6.11.5</a>).
5083
5084 <p><a name="note103">103)</a> The implementation may treat any register declaration simply as an auto declaration. However,
5085  whether or not addressable storage is actually used, the address of any part of an object declared with
5086  storage-class specifier register cannot be computed, either explicitly (by use of the unary &amp;
5087  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
5088  <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
5089  register is sizeof.
5090
5091
5092 <a name="6.7.2" href="#6.7.2"><h4>6.7.2 Type specifiers</h4></a>
5093 <h6>Syntax</h6>
5094 <p><!--para 1-->
5095 <pre>
5096           type-specifier:
5097                  void
5098                  char
5099                  short
5100                  int
5101                  long
5102                  float
5103                  double
5104                  signed
5105                  unsigned
5106                  _Bool
5107                  _Complex
5108                  struct-or-union-specifier                                                      *
5109                  enum-specifier
5110                  typedef-name</pre>
5111 <h6>Constraints</h6>
5112 <p><!--para 2-->
5113  At least one type specifier shall be given in the declaration specifiers in each declaration,
5114  and in the specifier-qualifier list in each struct declaration and type name. Each list of
5115  type specifiers shall be one of the following sets (delimited by commas, when there is
5116  more than one set on a line); the type specifiers may occur in any order, possibly
5117  intermixed with the other declaration specifiers.
5118 <ul>
5119 <li>  void
5120 <li>  char
5121 <li>  signed char
5122 <li>  unsigned char
5123 <li>  short, signed short, short int, or signed short int
5124 <li>  unsigned short, or unsigned short int
5125 <li>  int, signed, or signed int
5126 <!--page 112 indent 4-->
5127 <li>  unsigned, or unsigned int
5128 <li>  long, signed long, long int, or signed long int
5129 <li>  unsigned long, or unsigned long int
5130 <li>  long long, signed long long, long long int, or
5131  signed long long int
5132 <li>  unsigned long long, or unsigned long long int
5133 <li>  float
5134 <li>  double
5135 <li>  long double
5136 <li>  _Bool
5137 <li>  float _Complex
5138 <li>  double _Complex
5139 <li>  long double _Complex
5140 <li>  struct or union specifier                                                                    *
5141 <li>  enum specifier
5142 <li>  typedef name
5143 </ul>
5144 <p><!--para 3-->
5145  The type specifier _Complex shall not be used if the implementation does not provide
5146  complex types.<sup><a href="#note104"><b>104)</b></a></sup>
5147 <h6>Semantics</h6>
5148 <p><!--para 4-->
5149  Specifiers for structures, unions, and enumerations are discussed in <a href="#6.7.2.1">6.7.2.1</a> through
5150  <a href="#6.7.2.3">6.7.2.3</a>. Declarations of typedef names are discussed in <a href="#6.7.7">6.7.7</a>. The characteristics of the
5151  other types are discussed in <a href="#6.2.5">6.2.5</a>.
5152 <p><!--para 5-->
5153  Each of the comma-separated sets designates the same type, except that for bit-fields, it is
5154  implementation-defined whether the specifier int designates the same type as signed
5155  int or the same type as unsigned int.
5156 <p><b> Forward references</b>: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), structure and union specifiers
5157  (<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.7">6.7.7</a>).
5158  
5159  
5160  
5161  
5162 <!--page 113 indent 4-->
5163
5164 <h6>footnotes</h6>
5165 <p><a name="note104">104)</a> Freestanding implementations are not required to provide complex types.                  *
5166
5167
5168 <a name="6.7.2.1" href="#6.7.2.1"><h5>6.7.2.1 Structure and union specifiers</h5></a>
5169 <h6>Syntax</h6>
5170 <p><!--para 1-->
5171 <pre>
5172           struct-or-union-specifier:
5173                   struct-or-union identifieropt { struct-declaration-list }
5174                   struct-or-union identifier
5175           struct-or-union:
5176                   struct
5177                   union
5178           struct-declaration-list:
5179                   struct-declaration
5180                   struct-declaration-list struct-declaration
5181           struct-declaration:
5182                   specifier-qualifier-list struct-declarator-list ;
5183           specifier-qualifier-list:
5184                  type-specifier specifier-qualifier-listopt
5185                  type-qualifier specifier-qualifier-listopt
5186           struct-declarator-list:
5187                   struct-declarator
5188                   struct-declarator-list , struct-declarator
5189           struct-declarator:
5190                   declarator
5191                   declaratoropt : constant-expression</pre>
5192 <h6>Constraints</h6>
5193 <p><!--para 2-->
5194  A structure or union shall not contain a member with incomplete or function type (hence,
5195  a structure shall not contain an instance of itself, but may contain a pointer to an instance
5196  of itself), except that the last member of a structure with more than one named member
5197  may have incomplete array type; such a structure (and any union containing, possibly
5198  recursively, a member that is such a structure) shall not be a member of a structure or an
5199  element of an array.
5200 <p><!--para 3-->
5201  The expression that specifies the width of a bit-field shall be an integer constant
5202  expression with a nonnegative value that does not exceed the width of an object of the
5203  type that would be specified were the colon and expression omitted. If the value is zero,
5204  the declaration shall have no declarator.
5205 <p><!--para 4-->
5206  A bit-field shall have a type that is a qualified or unqualified version of _Bool, signed
5207  int, unsigned int, or some other implementation-defined type.
5208 <!--page 114 indent 5-->
5209 <h6>Semantics</h6>
5210 <p><!--para 5-->
5211  As discussed in <a href="#6.2.5">6.2.5</a>, a structure is a type consisting of a sequence of members, whose
5212  storage is allocated in an ordered sequence, and a union is a type consisting of a sequence
5213  of members whose storage overlap.
5214 <p><!--para 6-->
5215  Structure and union specifiers have the same form. The keywords struct and union
5216  indicate that the type being specified is, respectively, a structure type or a union type.
5217 <p><!--para 7-->
5218  The presence of a struct-declaration-list in a struct-or-union-specifier declares a new type,
5219  within a translation unit. The struct-declaration-list is a sequence of declarations for the
5220  members of the structure or union. If the struct-declaration-list contains no named
5221  members, the behavior is undefined. The type is incomplete until after the } that
5222  terminates the list.
5223 <p><!--para 8-->
5224  A member of a structure or union may have any object type other than a variably
5225  modified type.<sup><a href="#note105"><b>105)</b></a></sup> In addition, a member may be declared to consist of a specified
5226  number of bits (including a sign bit, if any). Such a member is called a bit-field;<sup><a href="#note106"><b>106)</b></a></sup> its
5227  width is preceded by a colon.
5228 <p><!--para 9-->
5229  A bit-field is interpreted as a signed or unsigned integer type consisting of the specified
5230  number of bits.<sup><a href="#note107"><b>107)</b></a></sup> If the value 0 or 1 is stored into a nonzero-width bit-field of type
5231  _Bool, the value of the bit-field shall compare equal to the value stored.
5232 <p><!--para 10-->
5233  An implementation may allocate any addressable storage unit large enough to hold a bit-
5234  field. If enough space remains, a bit-field that immediately follows another bit-field in a
5235  structure shall be packed into adjacent bits of the same unit. If insufficient space remains,
5236  whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is
5237  implementation-defined. The order of allocation of bit-fields within a unit (high-order to
5238  low-order or low-order to high-order) is implementation-defined. The alignment of the
5239  addressable storage unit is unspecified.
5240 <p><!--para 11-->
5241  A bit-field declaration with no declarator, but only a colon and a width, indicates an
5242  unnamed bit-field.<sup><a href="#note108"><b>108)</b></a></sup> As a special case, a bit-field structure member with a width of 0
5243  indicates that no further bit-field is to be packed into the unit in which the previous bit-
5244  field, if any, was placed.
5245  
5246  
5247 <!--page 115 indent 5-->
5248 <p><!--para 12-->
5249  Each non-bit-field member of a structure or union object is aligned in an implementation-
5250  defined manner appropriate to its type.
5251 <p><!--para 13-->
5252  Within a structure object, the non-bit-field members and the units in which bit-fields
5253  reside have addresses that increase in the order in which they are declared. A pointer to a
5254  structure object, suitably converted, points to its initial member (or if that member is a
5255  bit-field, then to the unit in which it resides), and vice versa. There may be unnamed
5256  padding within a structure object, but not at its beginning.
5257 <p><!--para 14-->
5258  The size of a union is sufficient to contain the largest of its members. The value of at
5259  most one of the members can be stored in a union object at any time. A pointer to a
5260  union object, suitably converted, points to each of its members (or if a member is a bit-
5261  field, then to the unit in which it resides), and vice versa.
5262 <p><!--para 15-->
5263  There may be unnamed padding at the end of a structure or union.
5264 <p><!--para 16-->
5265  As a special case, the last element of a structure with more than one named member may
5266  have an incomplete array type; this is called a flexible array member. In most situations,
5267  the flexible array member is ignored. In particular, the size of the structure is as if the
5268  flexible array member were omitted except that it may have more trailing padding than
5269  the omission would imply. However, when a . (or -&gt;) operator has a left operand that is
5270  (a pointer to) a structure with a flexible array member and the right operand names that
5271  member, it behaves as if that member were replaced with the longest array (with the same
5272  element type) that would not make the structure larger than the object being accessed; the
5273  offset of the array shall remain that of the flexible array member, even if this would differ
5274  from that of the replacement array. If this array would have no elements, it behaves as if
5275  it had one element but the behavior is undefined if any attempt is made to access that
5276  element or to generate a pointer one past it.
5277 <p><!--para 17-->
5278  EXAMPLE       After the declaration:
5279 <pre>
5280          struct s { int n; double d[]; };</pre>
5281  the structure struct s has a flexible array member d. A typical way to use this is:
5282 <pre>
5283          int m = /* some value */;
5284          struct s *p = malloc(sizeof (struct s) + sizeof (double [m]));</pre>
5285  and assuming that the call to malloc succeeds, the object pointed to by p behaves, for most purposes, as if
5286  p had been declared as:
5287 <pre>
5288          struct { int n; double d[m]; } *p;</pre>
5289  (there are circumstances in which this equivalence is broken; in particular, the offsets of member d might
5290  not be the same).
5291 <p><!--para 18-->
5292  Following the above declaration:
5293 <!--page 116 indent 5-->
5294 <pre>
5295           struct s t1 = { 0 };                        //   valid
5296           struct s t2 = { 1, { <a href="#4.2">4.2</a> }};                //   invalid
5297           t1.n = 4;                                   //   valid
5298           t1.d[0] = <a href="#4.2">4.2</a>;                              //   might be undefined behavior</pre>
5299  The initialization of t2 is invalid (and violates a constraint) because struct s is treated as if it did not
5300  contain member d. The assignment to t1.d[0] is probably undefined behavior, but it is possible that
5301 <pre>
5302           sizeof (struct s) &gt;= offsetof(struct s, d) + sizeof (double)</pre>
5303  in which case the assignment would be legitimate. Nevertheless, it cannot appear in strictly conforming
5304  code.
5305 <p><!--para 19-->
5306  After the further declaration:
5307 <pre>
5308           struct ss { int n; };</pre>
5309  the expressions:
5310 <pre>
5311           sizeof (struct s) &gt;= sizeof (struct ss)
5312           sizeof (struct s) &gt;= offsetof(struct s, d)</pre>
5313  are always equal to 1.
5314 <p><!--para 20-->
5315  If sizeof (double) is 8, then after the following code is executed:
5316 <pre>
5317           struct s *s1;
5318           struct s *s2;
5319           s1 = malloc(sizeof (struct s) + 64);
5320           s2 = malloc(sizeof (struct s) + 46);</pre>
5321  and assuming that the calls to malloc succeed, the objects pointed to by s1 and s2 behave, for most
5322  purposes, as if the identifiers had been declared as:
5323 <p><!--para 21-->
5324 <pre>
5325           struct { int n; double d[8]; } *s1;
5326           struct { int n; double d[5]; } *s2;</pre>
5327  Following the further successful assignments:
5328 <pre>
5329           s1 = malloc(sizeof (struct s) + 10);
5330           s2 = malloc(sizeof (struct s) + 6);</pre>
5331  they then behave as if the declarations were:
5332 <pre>
5333           struct { int n; double d[1]; } *s1, *s2;</pre>
5334  and:
5335 <p><!--para 22-->
5336 <pre>
5337           double *dp;
5338           dp = &amp;(s1-&gt;d[0]);           //   valid
5339           *dp = 42;                   //   valid
5340           dp = &amp;(s2-&gt;d[0]);           //   valid
5341           *dp = 42;                   //   undefined behavior</pre>
5342  The assignment:
5343 <pre>
5344           *s1 = *s2;</pre>
5345  only copies the member n; if any of the array elements are within the first sizeof (struct s) bytes
5346  of the structure, they might be copied or simply overwritten with indeterminate values.
5347  
5348 <p><b> Forward references</b>: tags (<a href="#6.7.2.3">6.7.2.3</a>).
5349 <!--page 117 indent 4-->
5350
5351 <h6>footnotes</h6>
5352 <p><a name="note105">105)</a> A structure or union can not contain a member with a variably modified type because member names
5353  are not ordinary identifiers as defined in <a href="#6.2.3">6.2.3</a>.
5354
5355 <p><a name="note106">106)</a> The unary &amp; (address-of) operator cannot be applied to a bit-field object; thus, there are no pointers to
5356  or arrays of bit-field objects.
5357
5358 <p><a name="note107">107)</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,
5359  then it is implementation-defined whether the bit-field is signed or unsigned.
5360
5361 <p><a name="note108">108)</a> An unnamed bit-field structure member is useful for padding to conform to externally imposed
5362  layouts.
5363
5364
5365 <a name="6.7.2.2" href="#6.7.2.2"><h5>6.7.2.2 Enumeration specifiers</h5></a>
5366 <h6>Syntax</h6>
5367 <p><!--para 1-->
5368 <pre>
5369           enum-specifier:
5370                 enum identifieropt { enumerator-list }
5371                 enum identifieropt { enumerator-list , }
5372                 enum identifier
5373           enumerator-list:
5374                 enumerator
5375                 enumerator-list , enumerator
5376           enumerator:
5377                 enumeration-constant
5378                 enumeration-constant = constant-expression</pre>
5379 <h6>Constraints</h6>
5380 <p><!--para 2-->
5381  The expression that defines the value of an enumeration constant shall be an integer
5382  constant expression that has a value representable as an int.
5383 <h6>Semantics</h6>
5384 <p><!--para 3-->
5385  The identifiers in an enumerator list are declared as constants that have type int and
5386  may appear wherever such are permitted.<sup><a href="#note109"><b>109)</b></a></sup> An enumerator with = defines its
5387  enumeration constant as the value of the constant expression. If the first enumerator has
5388  no =, the value of its enumeration constant is 0. Each subsequent enumerator with no =
5389  defines its enumeration constant as the value of the constant expression obtained by
5390  adding 1 to the value of the previous enumeration constant. (The use of enumerators with
5391  = may produce enumeration constants with values that duplicate other values in the same
5392  enumeration.) The enumerators of an enumeration are also known as its members.
5393 <p><!--para 4-->
5394  Each enumerated type shall be compatible with char, a signed integer type, or an
5395  unsigned integer type. The choice of type is implementation-defined,<sup><a href="#note110"><b>110)</b></a></sup> but shall be
5396  capable of representing the values of all the members of the enumeration. The
5397  enumerated type is incomplete until after the } that terminates the list of enumerator
5398  declarations.
5399  
5400  
5401  
5402  
5403 <!--page 118 indent 4-->
5404 <p><!--para 5-->
5405  EXAMPLE       The following fragment:
5406 <pre>
5407          enum hue { chartreuse, burgundy, claret=20, winedark };
5408          enum hue col, *cp;
5409          col = claret;
5410          cp = &amp;col;
5411          if (*cp != burgundy)
5412                /* ... */</pre>
5413  makes hue the tag of an enumeration, and then declares col as an object that has that type and cp as a
5414  pointer to an object that has that type. The enumerated values are in the set { 0, 1, 20, 21 }.
5415  
5416 <p><b> Forward references</b>: tags (<a href="#6.7.2.3">6.7.2.3</a>).
5417
5418 <h6>footnotes</h6>
5419 <p><a name="note109">109)</a> Thus, the identifiers of enumeration constants declared in the same scope shall all be distinct from
5420  each other and from other identifiers declared in ordinary declarators.
5421
5422 <p><a name="note110">110)</a> An implementation may delay the choice of which integer type until all enumeration constants have
5423  been seen.
5424
5425
5426 <a name="6.7.2.3" href="#6.7.2.3"><h5>6.7.2.3 Tags</h5></a>
5427 <h6>Constraints</h6>
5428 <p><!--para 1-->
5429  A specific type shall have its content defined at most once.
5430 <p><!--para 2-->
5431  Where two declarations that use the same tag declare the same type, they shall both use
5432  the same choice of struct, union, or enum.
5433 <p><!--para 3-->
5434  A type specifier of the form
5435 <pre>
5436          enum identifier</pre>
5437  without an enumerator list shall only appear after the type it specifies is complete.
5438 <h6>Semantics</h6>
5439 <p><!--para 4-->
5440  All declarations of structure, union, or enumerated types that have the same scope and
5441  use the same tag declare the same type. The type is incomplete<sup><a href="#note111"><b>111)</b></a></sup> until the closing brace
5442  of the list defining the content, and complete thereafter.
5443 <p><!--para 5-->
5444  Two declarations of structure, union, or enumerated types which are in different scopes or
5445  use different tags declare distinct types. Each declaration of a structure, union, or
5446  enumerated type which does not include a tag declares a distinct type.
5447 <p><!--para 6-->
5448  A type specifier of the form
5449 <pre>
5450          struct-or-union identifieropt { struct-declaration-list }</pre>
5451  or
5452 <pre>
5453          enum identifier { enumerator-list }</pre>
5454  or
5455 <pre>
5456          enum identifier { enumerator-list , }</pre>
5457  declares a structure, union, or enumerated type. The list defines the structure content,
5458  
5459 <!--page 119 indent 5-->
5460  union content, or enumeration content. If an identifier is provided,<sup><a href="#note112"><b>112)</b></a></sup> the type specifier
5461  also declares the identifier to be the tag of that type.
5462 <p><!--para 7-->
5463  A declaration of the form
5464 <pre>
5465           struct-or-union identifier ;</pre>
5466  specifies a structure or union type and declares the identifier as a tag of that type.<sup><a href="#note113"><b>113)</b></a></sup>
5467 <p><!--para 8-->
5468  If a type specifier of the form
5469 <pre>
5470           struct-or-union identifier</pre>
5471  occurs other than as part of one of the above forms, and no other declaration of the
5472  identifier as a tag is visible, then it declares an incomplete structure or union type, and
5473  declares the identifier as the tag of that type.113)
5474 <p><!--para 9-->
5475  If a type specifier of the form
5476 <pre>
5477           struct-or-union identifier</pre>
5478  or
5479 <pre>
5480           enum identifier</pre>
5481  occurs other than as part of one of the above forms, and a declaration of the identifier as a
5482  tag is visible, then it specifies the same type as that other declaration, and does not
5483  redeclare the tag.
5484 <p><!--para 10-->
5485  EXAMPLE 1       This mechanism allows declaration of a self-referential structure.
5486 <pre>
5487           struct tnode {
5488                 int count;
5489                 struct tnode *left, *right;
5490           };</pre>
5491  specifies a structure that contains an integer and two pointers to objects of the same type. Once this
5492  declaration has been given, the declaration
5493 <pre>
5494           struct tnode s, *sp;</pre>
5495  declares s to be an object of the given type and sp to be a pointer to an object of the given type. With
5496  these declarations, the expression sp-&gt;left refers to the left struct tnode pointer of the object to
5497  which sp points; the expression s.right-&gt;count designates the count member of the right struct
5498  tnode pointed to from s.
5499 <p><!--para 11-->
5500  The following alternative formulation uses the typedef mechanism:
5501  
5502  
5503  
5504  
5505 <!--page 120 indent 5-->
5506 <pre>
5507           typedef struct tnode TNODE;
5508           struct tnode {
5509                 int count;
5510                 TNODE *left, *right;
5511           };
5512           TNODE s, *sp;</pre>
5513  
5514 <p><!--para 12-->
5515  EXAMPLE 2 To illustrate the use of prior declaration of a tag to specify a pair of mutually referential
5516  structures, the declarations
5517 <pre>
5518           struct s1 { struct s2 *s2p; /* ... */ }; // D1
5519           struct s2 { struct s1 *s1p; /* ... */ }; // D2</pre>
5520  specify a pair of structures that contain pointers to each other. Note, however, that if s2 were already
5521  declared as a tag in an enclosing scope, the declaration D1 would refer to it, not to the tag s2 declared in
5522  D2. To eliminate this context sensitivity, the declaration
5523 <pre>
5524           struct s2;</pre>
5525  may be inserted ahead of D1. This declares a new tag s2 in the inner scope; the declaration D2 then
5526  completes the specification of the new type.
5527  
5528 <p><b> Forward references</b>: declarators (<a href="#6.7.5">6.7.5</a>), array declarators (<a href="#6.7.5.2">6.7.5.2</a>), type definitions
5529  (<a href="#6.7.7">6.7.7</a>).
5530
5531 <h6>footnotes</h6>
5532 <p><a name="note111">111)</a> An incomplete type may only by used when the size of an object of that type is not needed. It is not
5533  needed, for example, when a typedef name is declared to be a specifier for a structure or union, or
5534  when a pointer to or a function returning a structure or union is being declared. (See incomplete types
5535  in <a href="#6.2.5">6.2.5</a>.) The specification has to be complete before such a function is called or defined.
5536
5537 <p><a name="note112">112)</a> If there is no identifier, the type can, within the translation unit, only be referred to by the declaration
5538  of which it is a part. Of course, when the declaration is of a typedef name, subsequent declarations
5539  can make use of that typedef name to declare objects having the specified structure, union, or
5540  enumerated type.
5541
5542 <p><a name="note113">113)</a> A similar construction with enum does not exist.
5543
5544
5545 <a name="6.7.3" href="#6.7.3"><h4>6.7.3 Type qualifiers</h4></a>
5546 <h6>Syntax</h6>
5547 <p><!--para 1-->
5548 <pre>
5549           type-qualifier:
5550                  const
5551                  restrict
5552                  volatile</pre>
5553 <h6>Constraints</h6>
5554 <p><!--para 2-->
5555  Types other than pointer types derived from object or incomplete types shall not be
5556  restrict-qualified.
5557 <h6>Semantics</h6>
5558 <p><!--para 3-->
5559  The properties associated with qualified types are meaningful only for expressions that
5560  are lvalues.<sup><a href="#note114"><b>114)</b></a></sup>
5561 <p><!--para 4-->
5562  If the same qualifier appears more than once in the same specifier-qualifier-list, either
5563  directly or via one or more typedefs, the behavior is the same as if it appeared only
5564  once.
5565  
5566  
5567  
5568  
5569 <!--page 121 indent 5-->
5570 <p><!--para 5-->
5571  If an attempt is made to modify an object defined with a const-qualified type through use
5572  of an lvalue with non-const-qualified type, the behavior is undefined. If an attempt is
5573  made to refer to an object defined with a volatile-qualified type through use of an lvalue
5574  with non-volatile-qualified type, the behavior is undefined.<sup><a href="#note115"><b>115)</b></a></sup>
5575 <p><!--para 6-->
5576  An object that has volatile-qualified type may be modified in ways unknown to the
5577  implementation or have other unknown side effects. Therefore any expression referring
5578  to such an object shall be evaluated strictly according to the rules of the abstract machine,
5579  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
5580  object shall agree with that prescribed by the abstract machine, except as modified by the
5581  unknown factors mentioned previously.<sup><a href="#note116"><b>116)</b></a></sup> What constitutes an access to an object that
5582  has volatile-qualified type is implementation-defined.
5583 <p><!--para 7-->
5584  An object that is accessed through a restrict-qualified pointer has a special association
5585  with that pointer. This association, defined in <a href="#6.7.3.1">6.7.3.1</a> below, requires that all accesses to
5586  that object use, directly or indirectly, the value of that particular pointer.<sup><a href="#note117"><b>117)</b></a></sup> The intended
5587  use of the restrict qualifier (like the register storage class) is to promote
5588  optimization, and deleting all instances of the qualifier from all preprocessing translation
5589  units composing a conforming program does not change its meaning (i.e., observable
5590  behavior).
5591 <p><!--para 8-->
5592  If the specification of an array type includes any type qualifiers, the element type is so-
5593  qualified, not the array type. If the specification of a function type includes any type
5594  qualifiers, the behavior is undefined.<sup><a href="#note118"><b>118)</b></a></sup>
5595 <p><!--para 9-->
5596  For two qualified types to be compatible, both shall have the identically qualified version
5597  of a compatible type; the order of type qualifiers within a list of specifiers or qualifiers
5598  does not affect the specified type.
5599 <p><!--para 10-->
5600  EXAMPLE 1       An object declared
5601 <pre>
5602           extern const volatile int real_time_clock;</pre>
5603  may be modifiable by hardware, but cannot be assigned to, incremented, or decremented.
5604  
5605  
5606  
5607  
5608 <!--page 122 indent 5-->
5609 <p><!--para 11-->
5610  EXAMPLE 2 The following declarations and expressions illustrate the behavior when type qualifiers
5611  modify an aggregate type:
5612 <pre>
5613          const struct s { int mem; } cs = { 1 };
5614          struct s ncs; // the object ncs is modifiable
5615          typedef int A[2][3];
5616          const A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of const int
5617          int *pi;
5618          const int *pci;
5619          ncs = cs;             //   valid
5620          cs = ncs;             //   violates modifiable lvalue constraint for =
5621          pi = &amp;ncs.mem;        //   valid
5622          pi = &amp;cs.mem;         //   violates type constraints for =
5623          pci = &amp;cs.mem;        //   valid
5624          pi = a[0];            //   invalid: a[0] has type ''const int *''</pre>
5625  
5626
5627 <h6>footnotes</h6>
5628 <p><a name="note114">114)</a> The implementation may place a const object that is not volatile in a read-only region of
5629  storage. Moreover, the implementation need not allocate storage for such an object if its address is
5630  never used.
5631
5632 <p><a name="note115">115)</a> This applies to those objects that behave as if they were defined with qualified types, even if they are
5633  never actually defined as objects in the program (such as an object at a memory-mapped input/output
5634  address).
5635
5636 <p><a name="note116">116)</a> A volatile declaration may be used to describe an object corresponding to a memory-mapped
5637  input/output port or an object accessed by an asynchronously interrupting function. Actions on
5638  objects so declared shall not be ''optimized out'' by an implementation or reordered except as
5639  permitted by the rules for evaluating expressions.
5640
5641 <p><a name="note117">117)</a> For example, a statement that assigns a value returned by malloc to a single pointer establishes this
5642  association between the allocated object and the pointer.
5643
5644 <p><a name="note118">118)</a> Both of these can occur through the use of typedefs.
5645
5646
5647 <a name="6.7.3.1" href="#6.7.3.1"><h5>6.7.3.1 Formal definition of restrict</h5></a>
5648 <p><!--para 1-->
5649  Let D be a declaration of an ordinary identifier that provides a means of designating an
5650  object P as a restrict-qualified pointer to type T.
5651 <p><!--para 2-->
5652  If D appears inside a block and does not have storage class extern, let B denote the
5653  block. If D appears in the list of parameter declarations of a function definition, let B
5654  denote the associated block. Otherwise, let B denote the block of main (or the block of
5655  whatever function is called at program startup in a freestanding environment).
5656 <p><!--para 3-->
5657  In what follows, a pointer expression E is said to be based on object P if (at some
5658  sequence point in the execution of B prior to the evaluation of E) modifying P to point to
5659  a copy of the array object into which it formerly pointed would change the value of E.<sup><a href="#note119"><b>119)</b></a></sup>
5660  Note that ''based'' is defined only for expressions with pointer types.
5661 <p><!--para 4-->
5662  During each execution of B, let L be any lvalue that has &amp;L based on P. If L is used to
5663  access the value of the object X that it designates, and X is also modified (by any means),
5664  then the following requirements apply: T shall not be const-qualified. Every other lvalue
5665  used to access the value of X shall also have its address based on P. Every access that
5666  modifies X shall be considered also to modify P, for the purposes of this subclause. If P
5667  is assigned the value of a pointer expression E that is based on another restricted pointer
5668  object P2, associated with block B2, then either the execution of B2 shall begin before
5669  the execution of B, or the execution of B2 shall end prior to the assignment. If these
5670  requirements are not met, then the behavior is undefined.
5671 <p><!--para 5-->
5672  Here an execution of B means that portion of the execution of the program that would
5673  correspond to the lifetime of an object with scalar type and automatic storage duration
5674  
5675 <!--page 123 indent 5-->
5676  associated with B.
5677 <p><!--para 6-->
5678  A translator is free to ignore any or all aliasing implications of uses of restrict.
5679 <p><!--para 7-->
5680  EXAMPLE 1       The file scope declarations
5681 <pre>
5682           int * restrict a;
5683           int * restrict b;
5684           extern int c[];</pre>
5685  assert that if an object is accessed using one of a, b, or c, and that object is modified anywhere in the
5686  program, then it is never accessed using either of the other two.
5687  
5688 <p><!--para 8-->
5689  EXAMPLE 2 The function parameter declarations in the following example
5690 <pre>
5691          void f(int n, int * restrict p, int * restrict q)
5692          {
5693                while (n-- &gt; 0)
5694                      *p++ = *q++;
5695          }</pre>
5696  assert that, during each execution of the function, if an object is accessed through one of the pointer
5697  parameters, then it is not also accessed through the other.
5698 <p><!--para 9-->
5699  The benefit of the restrict qualifiers is that they enable a translator to make an effective dependence
5700  analysis of function f without examining any of the calls of f in the program. The cost is that the
5701  programmer has to examine all of those calls to ensure that none give undefined behavior. For example, the
5702  second call of f in g has undefined behavior because each of d[1] through d[49] is accessed through
5703  both p and q.
5704 <pre>
5705          void g(void)
5706          {
5707                extern int d[100];
5708                f(50, d + 50, d); // valid
5709                f(50, d + 1, d); // undefined behavior
5710          }</pre>
5711  
5712 <p><!--para 10-->
5713  EXAMPLE 3       The function parameter declarations
5714 <pre>
5715          void h(int n, int * restrict p, int * restrict q, int * restrict r)
5716          {
5717                int i;
5718                for (i = 0; i &lt; n; i++)
5719                       p[i] = q[i] + r[i];
5720          }</pre>
5721  illustrate how an unmodified object can be aliased through two restricted pointers. In particular, if a and b
5722  are disjoint arrays, a call of the form h(100, a, b, b) has defined behavior, because array b is not
5723  modified within function h.
5724  
5725 <p><!--para 11-->
5726  EXAMPLE 4 The rule limiting assignments between restricted pointers does not distinguish between a
5727  function call and an equivalent nested block. With one exception, only ''outer-to-inner'' assignments
5728  between restricted pointers declared in nested blocks have defined behavior.
5729 <!--page 124 indent 5-->
5730 <p><!--para 12-->
5731 <pre>
5732           {
5733                    int * restrict p1;
5734                    int * restrict q1;
5735                    p1 = q1; // undefined behavior
5736                    {
5737                          int * restrict p2 = p1; // valid
5738                          int * restrict q2 = q1; // valid
5739                          p1 = q2;                // undefined behavior
5740                          p2 = q2;                // undefined behavior
5741                    }
5742           }</pre>
5743  The one exception allows the value of a restricted pointer to be carried out of the block in which it (or, more
5744  precisely, the ordinary identifier used to designate it) is declared when that block finishes execution. For
5745  example, this permits new_vector to return a vector.
5746 <pre>
5747           typedef struct { int n; float * restrict v; } vector;
5748           vector new_vector(int n)
5749           {
5750                 vector t;
5751                 t.n = n;
5752                 t.v = malloc(n * sizeof (float));
5753                 return t;
5754           }</pre>
5755  
5756
5757 <h6>footnotes</h6>
5758 <p><a name="note119">119)</a> In other words, E depends on the value of P itself rather than on the value of an object referenced
5759  indirectly through P. For example, if identifier p has type (int **restrict), then the pointer
5760  expressions p and p+1 are based on the restricted pointer object designated by p, but the pointer
5761  expressions *p and p[1] are not.
5762
5763
5764 <a name="6.7.4" href="#6.7.4"><h4>6.7.4 Function specifiers</h4></a>
5765 <h6>Syntax</h6>
5766 <p><!--para 1-->
5767 <pre>
5768           function-specifier:
5769                  inline</pre>
5770 <h6>Constraints</h6>
5771 <p><!--para 2-->
5772  Function specifiers shall be used only in the declaration of an identifier for a function.
5773 <p><!--para 3-->
5774  An inline definition of a function with external linkage shall not contain a definition of a
5775  modifiable object with static storage duration, and shall not contain a reference to an
5776  identifier with internal linkage.
5777 <p><!--para 4-->
5778  In a hosted environment, the inline function specifier shall not appear in a declaration
5779  of main.
5780 <h6>Semantics</h6>
5781 <p><!--para 5-->
5782  A function declared with an inline function specifier is an inline function. The
5783  function specifier may appear more than once; the behavior is the same as if it appeared
5784  only once. Making a function an inline function suggests that calls to the function be as
5785  fast as possible.<sup><a href="#note120"><b>120)</b></a></sup> The extent to which such suggestions are effective is
5786  implementation-defined.<sup><a href="#note121"><b>121)</b></a></sup>
5787 <p><!--para 6-->
5788  Any function with internal linkage can be an inline function. For a function with external
5789  linkage, the following restrictions apply: If a function is declared with an inline
5790 <!--page 125 indent 4-->
5791  function specifier, then it shall also be defined in the same translation unit. If all of the
5792  file scope declarations for a function in a translation unit include the inline function
5793  specifier without extern, then the definition in that translation unit is an inline
5794  definition. An inline definition does not provide an external definition for the function,
5795  and does not forbid an external definition in another translation unit. An inline definition
5796  provides an alternative to an external definition, which a translator may use to implement
5797  any call to the function in the same translation unit. It is unspecified whether a call to the
5798  function uses the inline definition or the external definition.<sup><a href="#note122"><b>122)</b></a></sup>
5799 <p><!--para 7-->
5800  EXAMPLE The declaration of an inline function with external linkage can result in either an external
5801  definition, or a definition available for use only within the translation unit. A file scope declaration with
5802  extern creates an external definition. The following example shows an entire translation unit.
5803 <p><!--para 8-->
5804 <pre>
5805           inline double fahr(double t)
5806           {
5807                 return (9.0 * t) / 5.0 + 32.0;
5808           }
5809           inline double cels(double t)
5810           {
5811                 return (5.0 * (t - 32.0)) / 9.0;
5812           }
5813           extern double fahr(double);                  // creates an external definition
5814           double convert(int is_fahr, double temp)
5815           {
5816                 /* A translator may perform inline substitutions */
5817                 return is_fahr ? cels(temp) : fahr(temp);
5818           }</pre>
5819  Note that the definition of fahr is an external definition because fahr is also declared with extern, but
5820  the definition of cels is an inline definition. Because cels has external linkage and is referenced, an
5821  external definition has to appear in another translation unit (see <a href="#6.9">6.9</a>); the inline definition and the external
5822  definition are distinct and either may be used for the call.
5823  
5824 <p><b> Forward references</b>: function definitions (<a href="#6.9.1">6.9.1</a>).
5825  
5826  
5827 <!--page 126 indent 4-->
5828
5829 <h6>footnotes</h6>
5830 <p><a name="note120">120)</a> By using, for example, an alternative to the usual function call mechanism, such as ''inline
5831  substitution''. Inline substitution is not textual substitution, nor does it create a new function.
5832  Therefore, for example, the expansion of a macro used within the body of the function uses the
5833  definition it had at the point the function body appears, and not where the function is called; and
5834  identifiers refer to the declarations in scope where the body occurs. Likewise, the function has a
5835  single address, regardless of the number of inline definitions that occur in addition to the external
5836  definition.
5837
5838 <p><a name="note121">121)</a> For example, an implementation might never perform inline substitution, or might only perform inline
5839  substitutions to calls in the scope of an inline declaration.
5840
5841 <p><a name="note122">122)</a> Since an inline definition is distinct from the corresponding external definition and from any other
5842  corresponding inline definitions in other translation units, all corresponding objects with static storage
5843  duration are also distinct in each of the definitions.
5844
5845
5846 <a name="6.7.5" href="#6.7.5"><h4>6.7.5 Declarators</h4></a>
5847 <h6>Syntax</h6>
5848 <p><!--para 1-->
5849 <pre>
5850           declarator:
5851                  pointeropt direct-declarator
5852           direct-declarator:
5853                   identifier
5854                   ( declarator )
5855                   direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
5856                   direct-declarator [ static type-qualifier-listopt assignment-expression ]
5857                   direct-declarator [ type-qualifier-list static assignment-expression ]
5858                   direct-declarator [ type-qualifier-listopt * ]
5859                   direct-declarator ( parameter-type-list )
5860                   direct-declarator ( identifier-listopt )
5861           pointer:
5862                  * type-qualifier-listopt
5863                  * type-qualifier-listopt pointer
5864           type-qualifier-list:
5865                  type-qualifier
5866                  type-qualifier-list type-qualifier
5867           parameter-type-list:
5868                 parameter-list
5869                 parameter-list , ...
5870           parameter-list:
5871                 parameter-declaration
5872                 parameter-list , parameter-declaration
5873           parameter-declaration:
5874                 declaration-specifiers declarator
5875                 declaration-specifiers abstract-declaratoropt
5876           identifier-list:
5877                   identifier
5878                   identifier-list , identifier</pre>
5879 <h6>Semantics</h6>
5880 <p><!--para 2-->
5881  Each declarator declares one identifier, and asserts that when an operand of the same
5882  form as the declarator appears in an expression, it designates a function or object with the
5883  scope, storage duration, and type indicated by the declaration specifiers.
5884 <p><!--para 3-->
5885  A full declarator is a declarator that is not part of another declarator. The end of a full
5886  declarator is a sequence point. If, in the nested sequence of declarators in a full
5887 <!--page 127 indent 4-->
5888  declarator, there is a declarator specifying a variable length array type, the type specified
5889  by the full declarator is said to be variably modified. Furthermore, any type derived by
5890  declarator type derivation from a variably modified type is itself variably modified.
5891 <p><!--para 4-->
5892  In the following subclauses, consider a declaration
5893 <pre>
5894          T D1</pre>
5895  where T contains the declaration specifiers that specify a type T (such as int) and D1 is
5896  a declarator that contains an identifier ident. The type specified for the identifier ident in
5897  the various forms of declarator is described inductively using this notation.
5898 <p><!--para 5-->
5899  If, in the declaration ''T D1'', D1 has the form
5900 <pre>
5901          identifier</pre>
5902  then the type specified for ident is T .
5903 <p><!--para 6-->
5904  If, in the declaration ''T D1'', D1 has the form
5905 <pre>
5906          ( D )</pre>
5907  then ident has the type specified by the declaration ''T D''. Thus, a declarator in
5908  parentheses is identical to the unparenthesized declarator, but the binding of complicated
5909  declarators may be altered by parentheses.
5910  Implementation limits
5911 <p><!--para 7-->
5912  As discussed in <a href="#5.2.4.1">5.2.4.1</a>, an implementation may limit the number of pointer, array, and
5913  function declarators that modify an arithmetic, structure, union, or incomplete type, either
5914  directly or via one or more typedefs.
5915 <p><b> Forward references</b>: array declarators (<a href="#6.7.5.2">6.7.5.2</a>), type definitions (<a href="#6.7.7">6.7.7</a>).
5916
5917 <a name="6.7.5.1" href="#6.7.5.1"><h5>6.7.5.1 Pointer declarators</h5></a>
5918 <h6>Semantics</h6>
5919 <p><!--para 1-->
5920  If, in the declaration ''T D1'', D1 has the form
5921 <pre>
5922          * type-qualifier-listopt D</pre>
5923  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
5924  T '', then the type specified for ident is ''derived-declarator-type-list type-qualifier-list
5925  pointer to T ''. For each type qualifier in the list, ident is a so-qualified pointer.
5926 <p><!--para 2-->
5927  For two pointer types to be compatible, both shall be identically qualified and both shall
5928  be pointers to compatible types.
5929 <p><!--para 3-->
5930  EXAMPLE The following pair of declarations demonstrates the difference between a ''variable pointer
5931  to a constant value'' and a ''constant pointer to a variable value''.
5932 <!--page 128 indent 4-->
5933 <pre>
5934           const int *ptr_to_constant;
5935           int *const constant_ptr;</pre>
5936  The contents of any object pointed to by ptr_to_constant shall not be modified through that pointer,
5937  but ptr_to_constant itself may be changed to point to another object. Similarly, the contents of the
5938  int pointed to by constant_ptr may be modified, but constant_ptr itself shall always point to the
5939  same location.
5940 <p><!--para 4-->
5941  The declaration of the constant pointer constant_ptr may be clarified by including a definition for the
5942  type ''pointer to int''.
5943 <pre>
5944           typedef int *int_ptr;
5945           const int_ptr constant_ptr;</pre>
5946  declares constant_ptr as an object that has type ''const-qualified pointer to int''.
5947  
5948
5949 <a name="6.7.5.2" href="#6.7.5.2"><h5>6.7.5.2 Array declarators</h5></a>
5950 <h6>Constraints</h6>
5951 <p><!--para 1-->
5952  In addition to optional type qualifiers and the keyword static, the [ and ] may delimit
5953  an expression or *. If they delimit an expression (which specifies the size of an array), the
5954  expression shall have an integer type. If the expression is a constant expression, it shall
5955  have a value greater than zero. The element type shall not be an incomplete or function
5956  type. The optional type qualifiers and the keyword static shall appear only in a
5957  declaration of a function parameter with an array type, and then only in the outermost
5958  array type derivation.
5959 <p><!--para 2-->
5960  An ordinary identifier (as defined in <a href="#6.2.3">6.2.3</a>) that has a variably modified type shall have
5961  either block scope and no linkage or function prototype scope. If an identifier is declared
5962  to be an object with static storage duration, it shall not have a variable length array type.
5963 <h6>Semantics</h6>
5964 <p><!--para 3-->
5965  If, in the declaration ''T D1'', D1 has one of the forms:
5966 <pre>
5967           D[ type-qualifier-listopt assignment-expressionopt ]
5968           D[ static type-qualifier-listopt assignment-expression ]
5969           D[ type-qualifier-list static assignment-expression ]
5970           D[ type-qualifier-listopt * ]</pre>
5971  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
5972  T '', then the type specified for ident is ''derived-declarator-type-list array of T ''.<sup><a href="#note123"><b>123)</b></a></sup>
5973  (See <a href="#6.7.5.3">6.7.5.3</a> for the meaning of the optional type qualifiers and the keyword static.)
5974 <p><!--para 4-->
5975  If the size is not present, the array type is an incomplete type. If the size is * instead of
5976  being an expression, the array type is a variable length array type of unspecified size,
5977  which can only be used in declarations with function prototype scope;<sup><a href="#note124"><b>124)</b></a></sup> such arrays are
5978  nonetheless complete types. If the size is an integer constant expression and the element
5979  
5980 <!--page 129 indent 4-->
5981  type has a known constant size, the array type is not a variable length array type;
5982  otherwise, the array type is a variable length array type.
5983 <p><!--para 5-->
5984  If the size is an expression that is not an integer constant expression: if it occurs in a
5985  declaration at function prototype scope, it is treated as if it were replaced by *; otherwise,
5986  each time it is evaluated it shall have a value greater than zero. The size of each instance
5987  of a variable length array type does not change during its lifetime. Where a size
5988  expression is part of the operand of a sizeof operator and changing the value of the
5989  size expression would not affect the result of the operator, it is unspecified whether or not
5990  the size expression is evaluated.
5991 <p><!--para 6-->
5992  For two array types to be compatible, both shall have compatible element types, and if
5993  both size specifiers are present, and are integer constant expressions, then both size
5994  specifiers shall have the same constant value. If the two array types are used in a context
5995  which requires them to be compatible, it is undefined behavior if the two size specifiers
5996  evaluate to unequal values.
5997 <p><!--para 7-->
5998  EXAMPLE 1
5999 <pre>
6000           float fa[11], *afp[17];</pre>
6001  declares an array of float numbers and an array of pointers to float numbers.
6002  
6003 <p><!--para 8-->
6004  EXAMPLE 2       Note the distinction between the declarations
6005 <pre>
6006           extern int *x;
6007           extern int y[];</pre>
6008  The first declares x to be a pointer to int; the second declares y to be an array of int of unspecified size
6009  (an incomplete type), the storage for which is defined elsewhere.
6010  
6011 <p><!--para 9-->
6012  EXAMPLE 3       The following declarations demonstrate the compatibility rules for variably modified types.
6013 <pre>
6014           extern int n;
6015           extern int m;
6016           void fcompat(void)
6017           {
6018                 int a[n][6][m];
6019                 int (*p)[4][n+1];
6020                 int c[n][n][6][m];
6021                 int (*r)[n][n][n+1];
6022                 p = a;      // invalid: not compatible because 4 != 6
6023                 r = c;      // compatible, but defined behavior only if
6024                             // n == 6 and m == n+1
6025           }</pre>
6026  
6027  
6028  
6029  
6030 <!--page 130 indent 5-->
6031 <p><!--para 10-->
6032  EXAMPLE 4 All declarations of variably modified (VM) types have to be at either block scope or
6033  function prototype scope. Array objects declared with the static or extern storage-class specifier
6034  cannot have a variable length array (VLA) type. However, an object declared with the static storage-
6035  class specifier can have a VM type (that is, a pointer to a VLA type). Finally, all identifiers declared with a
6036  VM type have to be ordinary identifiers and cannot, therefore, be members of structures or unions.
6037 <pre>
6038           extern int n;
6039           int A[n];                                             // invalid: file scope VLA
6040           extern int (*p2)[n];                                  // invalid: file scope VM
6041           int B[100];                                           // valid: file scope but not VM
6042           void fvla(int m, int C[m][m]);                        // valid: VLA with prototype scope
6043           void fvla(int m, int C[m][m])                         // valid: adjusted to auto pointer to VLA
6044           {
6045                 typedef int VLA[m][m];                          // valid: block scope typedef VLA
6046                    struct tag {
6047                          int (*y)[n];                           // invalid: y not ordinary identifier
6048                          int z[n];                              // invalid: z not ordinary identifier
6049                    };
6050                    int D[m];                                    //   valid: auto VLA
6051                    static int E[m];                             //   invalid: static block scope VLA
6052                    extern int F[m];                             //   invalid: F has linkage and is VLA
6053                    int (*s)[m];                                 //   valid: auto pointer to VLA
6054                    extern int (*r)[m];                          //   invalid: r has linkage and points to VLA
6055                    static int (*q)[m] = &amp;B;                     //   valid: q is a static block pointer to VLA
6056           }</pre>
6057  
6058 <p><b> Forward references</b>:            function declarators (<a href="#6.7.5.3">6.7.5.3</a>), function definitions (<a href="#6.9.1">6.9.1</a>),
6059  initialization (<a href="#6.7.8">6.7.8</a>).
6060
6061 <h6>footnotes</h6>
6062 <p><a name="note123">123)</a> When several ''array of'' specifications are adjacent, a multidimensional array is declared.
6063
6064 <p><a name="note124">124)</a> Thus, * can be used only in function declarations that are not definitions (see <a href="#6.7.5.3">6.7.5.3</a>).
6065
6066
6067 <a name="6.7.5.3" href="#6.7.5.3"><h5>6.7.5.3 Function declarators (including prototypes)</h5></a>
6068 <h6>Constraints</h6>
6069 <p><!--para 1-->
6070  A function declarator shall not specify a return type that is a function type or an array
6071  type.
6072 <p><!--para 2-->
6073  The only storage-class specifier that shall occur in a parameter declaration is register.
6074 <p><!--para 3-->
6075  An identifier list in a function declarator that is not part of a definition of that function
6076  shall be empty.
6077 <p><!--para 4-->
6078  After adjustment, the parameters in a parameter type list in a function declarator that is
6079  part of a definition of that function shall not have incomplete type.
6080 <h6>Semantics</h6>
6081 <p><!--para 5-->
6082  If, in the declaration ''T D1'', D1 has the form
6083 <pre>
6084           D( parameter-type-list )</pre>
6085  or
6086 <!--page 131 indent 5-->
6087 <pre>
6088           D( identifier-listopt )</pre>
6089  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
6090  T '', then the type specified for ident is ''derived-declarator-type-list function returning
6091  T ''.
6092 <p><!--para 6-->
6093  A parameter type list specifies the types of, and may declare identifiers for, the
6094  parameters of the function.
6095 <p><!--para 7-->
6096  A declaration of a parameter as ''array of type'' shall be adjusted to ''qualified pointer to
6097  type'', where the type qualifiers (if any) are those specified within the [ and ] of the
6098  array type derivation. If the keyword static also appears within the [ and ] of the
6099  array type derivation, then for each call to the function, the value of the corresponding
6100  actual argument shall provide access to the first element of an array with at least as many
6101  elements as specified by the size expression.
6102 <p><!--para 8-->
6103  A declaration of a parameter as ''function returning type'' shall be adjusted to ''pointer to
6104  function returning type'', as in <a href="#6.3.2.1">6.3.2.1</a>.
6105 <p><!--para 9-->
6106  If the list terminates with an ellipsis (, ...), no information about the number or types
6107  of the parameters after the comma is supplied.<sup><a href="#note125"><b>125)</b></a></sup>
6108 <p><!--para 10-->
6109  The special case of an unnamed parameter of type void as the only item in the list
6110  specifies that the function has no parameters.
6111 <p><!--para 11-->
6112  If, in a parameter declaration, an identifier can be treated either as a typedef name or as a
6113  parameter name, it shall be taken as a typedef name.
6114 <p><!--para 12-->
6115  If the function declarator is not part of a definition of that function, parameters may have
6116  incomplete type and may use the [*] notation in their sequences of declarator specifiers
6117  to specify variable length array types.
6118 <p><!--para 13-->
6119  The storage-class specifier in the declaration specifiers for a parameter declaration, if
6120  present, is ignored unless the declared parameter is one of the members of the parameter
6121  type list for a function definition.
6122 <p><!--para 14-->
6123  An identifier list declares only the identifiers of the parameters of the function. An empty
6124  list in a function declarator that is part of a definition of that function specifies that the
6125  function has no parameters. The empty list in a function declarator that is not part of a
6126  definition of that function specifies that no information about the number or types of the
6127  parameters is supplied.<sup><a href="#note126"><b>126)</b></a></sup>
6128 <p><!--para 15-->
6129  For two function types to be compatible, both shall specify compatible return types.<sup><a href="#note127"><b>127)</b></a></sup>
6130  
6131  
6132 <!--page 132 indent 5-->
6133  Moreover, the parameter type lists, if both are present, shall agree in the number of
6134  parameters and in use of the ellipsis terminator; corresponding parameters shall have
6135  compatible types. If one type has a parameter type list and the other type is specified by a
6136  function declarator that is not part of a function definition and that contains an empty
6137  identifier list, the parameter list shall not have an ellipsis terminator and the type of each
6138  parameter shall be compatible with the type that results from the application of the
6139  default argument promotions. If one type has a parameter type list and the other type is
6140  specified by a function definition that contains a (possibly empty) identifier list, both shall
6141  agree in the number of parameters, and the type of each prototype parameter shall be
6142  compatible with the type that results from the application of the default argument
6143  promotions to the type of the corresponding identifier. (In the determination of type
6144  compatibility and of a composite type, each parameter declared with function or array
6145  type is taken as having the adjusted type and each parameter declared with qualified type
6146  is taken as having the unqualified version of its declared type.)
6147 <p><!--para 16-->
6148  EXAMPLE 1       The declaration
6149 <pre>
6150           int f(void), *fip(), (*pfi)();</pre>
6151  declares a function f with no parameters returning an int, a function fip with no parameter specification
6152  returning a pointer to an int, and a pointer pfi to a function with no parameter specification returning an
6153  int. It is especially useful to compare the last two. The binding of *fip() is *(fip()), so that the
6154  declaration suggests, and the same construction in an expression requires, the calling of a function fip,
6155  and then using indirection through the pointer result to yield an int. In the declarator (*pfi)(), the
6156  extra parentheses are necessary to indicate that indirection through a pointer to a function yields a function
6157  designator, which is then used to call the function; it returns an int.
6158 <p><!--para 17-->
6159  If the declaration occurs outside of any function, the identifiers have file scope and external linkage. If the
6160  declaration occurs inside a function, the identifiers of the functions f and fip have block scope and either
6161  internal or external linkage (depending on what file scope declarations for these identifiers are visible), and
6162  the identifier of the pointer pfi has block scope and no linkage.
6163  
6164 <p><!--para 18-->
6165  EXAMPLE 2       The declaration
6166 <pre>
6167           int (*apfi[3])(int *x, int *y);</pre>
6168  declares an array apfi of three pointers to functions returning int. Each of these functions has two
6169  parameters that are pointers to int. The identifiers x and y are declared for descriptive purposes only and
6170  go out of scope at the end of the declaration of apfi.
6171  
6172 <p><!--para 19-->
6173  EXAMPLE 3       The declaration
6174 <pre>
6175           int (*fpfi(int (*)(long), int))(int, ...);</pre>
6176  declares a function fpfi that returns a pointer to a function returning an int. The function fpfi has two
6177  parameters: a pointer to a function returning an int (with one parameter of type long int), and an int.
6178  The pointer returned by fpfi points to a function that has one int parameter and accepts zero or more
6179  additional arguments of any type.
6180 <!--page 133 indent 5-->
6181 <p><!--para 20-->
6182  EXAMPLE 4        The following prototype has a variably modified parameter.
6183 <pre>
6184            void addscalar(int n, int m,
6185                  double a[n][n*m+300], double x);
6186            int main()
6187            {
6188                  double b[4][308];
6189                  addscalar(4, 2, b, <a href="#2.17">2.17</a>);
6190                  return 0;
6191            }
6192            void addscalar(int n, int m,
6193                  double a[n][n*m+300], double x)
6194            {
6195                  for (int i = 0; i &lt; n; i++)
6196                        for (int j = 0, k = n*m+300; j &lt; k; j++)
6197                              // a is a pointer to a VLA with n*m+300 elements
6198                              a[i][j] += x;
6199            }</pre>
6200  
6201 <p><!--para 21-->
6202  EXAMPLE 5        The following are all compatible function prototype declarators.
6203 <pre>
6204            double    maximum(int       n,   int   m,   double   a[n][m]);
6205            double    maximum(int       n,   int   m,   double   a[*][*]);
6206            double    maximum(int       n,   int   m,   double   a[ ][*]);
6207            double    maximum(int       n,   int   m,   double   a[ ][m]);</pre>
6208  as are:
6209 <pre>
6210            void   f(double     (* restrict a)[5]);
6211            void   f(double     a[restrict][5]);
6212            void   f(double     a[restrict 3][5]);
6213            void   f(double     a[restrict static 3][5]);</pre>
6214  (Note that the last declaration also specifies that the argument corresponding to a in any call to f must be a
6215  non-null pointer to the first of at least three arrays of 5 doubles, which the others do not.)
6216  
6217 <p><b> Forward references</b>: function definitions (<a href="#6.9.1">6.9.1</a>), type names (<a href="#6.7.6">6.7.6</a>).
6218 <!--page 134 indent 4-->
6219
6220 <h6>footnotes</h6>
6221 <p><a name="note125">125)</a> The macros defined in the <a href="#7.15">&lt;stdarg.h&gt;</a> header (<a href="#7.15">7.15</a>) may be used to access arguments that
6222  correspond to the ellipsis.
6223
6224 <p><a name="note126">126)</a> See ''future language directions'' (<a href="#6.11.6">6.11.6</a>).
6225
6226 <p><a name="note127">127)</a> If both function types are ''old style'', parameter types are not compared.
6227
6228
6229 <a name="6.7.6" href="#6.7.6"><h4>6.7.6 Type names</h4></a>
6230 <h6>Syntax</h6>
6231 <p><!--para 1-->
6232 <pre>
6233           type-name:
6234                  specifier-qualifier-list abstract-declaratoropt
6235           abstract-declarator:
6236                  pointer
6237                  pointeropt direct-abstract-declarator
6238           direct-abstract-declarator:
6239                   ( abstract-declarator )
6240                   direct-abstract-declaratoropt [ type-qualifier-listopt
6241                                  assignment-expressionopt ]
6242                   direct-abstract-declaratoropt [ static type-qualifier-listopt
6243                                  assignment-expression ]
6244                   direct-abstract-declaratoropt [ type-qualifier-list static
6245                                  assignment-expression ]
6246                   direct-abstract-declaratoropt [ * ]
6247                   direct-abstract-declaratoropt ( parameter-type-listopt )</pre>
6248 <h6>Semantics</h6>
6249 <p><!--para 2-->
6250  In several contexts, it is necessary to specify a type. This is accomplished using a type
6251  name, which is syntactically a declaration for a function or an object of that type that
6252  omits the identifier.<sup><a href="#note128"><b>128)</b></a></sup>
6253 <p><!--para 3-->
6254  EXAMPLE        The constructions
6255 <pre>
6256           (a)      int
6257           (b)      int   *
6258           (c)      int   *[3]
6259           (d)      int   (*)[3]
6260           (e)      int   (*)[*]
6261           (f)      int   *()
6262           (g)      int   (*)(void)
6263           (h)      int   (*const [])(unsigned int, ...)</pre>
6264  name respectively the types (a) int, (b) pointer to int, (c) array of three pointers to int, (d) pointer to an
6265  array of three ints, (e) pointer to a variable length array of an unspecified number of ints, (f) function
6266  with no parameter specification returning a pointer to int, (g) pointer to function with no parameters
6267  returning an int, and (h) array of an unspecified number of constant pointers to functions, each with one
6268  parameter that has type unsigned int and an unspecified number of other parameters, returning an
6269  int.
6270  
6271  
6272  
6273  
6274 <!--page 135 indent 4-->
6275
6276 <h6>footnotes</h6>
6277 <p><a name="note128">128)</a> As indicated by the syntax, empty parentheses in a type name are interpreted as ''function with no
6278  parameter specification'', rather than redundant parentheses around the omitted identifier.
6279
6280
6281 <a name="6.7.7" href="#6.7.7"><h4>6.7.7 Type definitions</h4></a>
6282 <h6>Syntax</h6>
6283 <p><!--para 1-->
6284 <pre>
6285           typedef-name:
6286                  identifier</pre>
6287 <h6>Constraints</h6>
6288 <p><!--para 2-->
6289  If a typedef name specifies a variably modified type then it shall have block scope.
6290 <h6>Semantics</h6>
6291 <p><!--para 3-->
6292  In a declaration whose storage-class specifier is typedef, each declarator defines an
6293  identifier to be a typedef name that denotes the type specified for the identifier in the way
6294  described in <a href="#6.7.5">6.7.5</a>. Any array size expressions associated with variable length array
6295  declarators are evaluated each time the declaration of the typedef name is reached in the
6296  order of execution. A typedef declaration does not introduce a new type, only a
6297  synonym for the type so specified. That is, in the following declarations:
6298 <pre>
6299           typedef T type_ident;
6300           type_ident D;</pre>
6301  type_ident is defined as a typedef name with the type specified by the declaration
6302  specifiers in T (known as T ), and the identifier in D has the type ''derived-declarator-
6303  type-list T '' where the derived-declarator-type-list is specified by the declarators of D. A
6304  typedef name shares the same name space as other identifiers declared in ordinary
6305  declarators.
6306 <p><!--para 4-->
6307  EXAMPLE 1       After
6308 <pre>
6309           typedef int MILES, KLICKSP();
6310           typedef struct { double hi, lo; } range;</pre>
6311  the constructions
6312 <pre>
6313           MILES distance;
6314           extern KLICKSP *metricp;
6315           range x;
6316           range z, *zp;</pre>
6317  are all valid declarations. The type of distance is int, that of metricp is ''pointer to function with no
6318  parameter specification returning int'', and that of x and z is the specified structure; zp is a pointer to
6319  such a structure. The object distance has a type compatible with any other int object.
6320  
6321 <p><!--para 5-->
6322  EXAMPLE 2       After the declarations
6323 <pre>
6324           typedef struct s1 { int x; } t1, *tp1;
6325           typedef struct s2 { int x; } t2, *tp2;</pre>
6326  type t1 and the type pointed to by tp1 are compatible. Type t1 is also compatible with type struct
6327  s1, but not compatible with the types struct s2, t2, the type pointed to by tp2, or int.
6328 <!--page 136 indent 4-->
6329 <p><!--para 6-->
6330  EXAMPLE 3       The following obscure constructions
6331 <pre>
6332          typedef signed int t;
6333          typedef int plain;
6334          struct tag {
6335                unsigned t:4;
6336                const t:5;
6337                plain r:5;
6338          };</pre>
6339  declare a typedef name t with type signed int, a typedef name plain with type int, and a structure
6340  with three bit-field members, one named t that contains values in the range [0, 15], an unnamed const-
6341  qualified bit-field which (if it could be accessed) would contain values in either the range [-15, +15] or
6342  [-16, +15], and one named r that contains values in one of the ranges [0, 31], [-15, +15], or [-16, +15].
6343  (The choice of range is implementation-defined.) The first two bit-field declarations differ in that
6344  unsigned is a type specifier (which forces t to be the name of a structure member), while const is a
6345  type qualifier (which modifies t which is still visible as a typedef name). If these declarations are followed
6346  in an inner scope by
6347 <pre>
6348          t f(t (t));
6349          long t;</pre>
6350  then a function f is declared with type ''function returning signed int with one unnamed parameter
6351  with type pointer to function returning signed int with one unnamed parameter with type signed
6352  int'', and an identifier t with type long int.
6353  
6354 <p><!--para 7-->
6355  EXAMPLE 4 On the other hand, typedef names can be used to improve code readability. All three of the
6356  following declarations of the signal function specify exactly the same type, the first without making use
6357  of any typedef names.
6358 <pre>
6359          typedef void fv(int), (*pfv)(int);
6360          void (*signal(int, void (*)(int)))(int);
6361          fv *signal(int, fv *);
6362          pfv signal(int, pfv);</pre>
6363  
6364 <p><!--para 8-->
6365  EXAMPLE 5 If a typedef name denotes a variable length array type, the length of the array is fixed at the
6366  time the typedef name is defined, not each time it is used:
6367 <!--page 137 indent 4-->
6368 <pre>
6369          void copyt(int n)
6370          {
6371                typedef int B[n];    //               B is n ints, n evaluated now
6372                n += 1;
6373                B a;                //                a is n ints, n without += 1
6374                int b[n];           //                a and b are different sizes
6375                for (int i = 1; i &lt; n;                i++)
6376                      a[i-1] = b[i];
6377          }</pre>
6378
6379 <a name="6.7.8" href="#6.7.8"><h4>6.7.8 Initialization</h4></a>
6380 <h6>Syntax</h6>
6381 <p><!--para 1-->
6382 <pre>
6383           initializer:
6384                    assignment-expression
6385                    { initializer-list }
6386                    { initializer-list , }
6387           initializer-list:
6388                    designationopt initializer
6389                    initializer-list , designationopt initializer
6390           designation:
6391                  designator-list =
6392           designator-list:
6393                  designator
6394                  designator-list designator
6395           designator:
6396                  [ constant-expression ]
6397                  . identifier</pre>
6398 <h6>Constraints</h6>
6399 <p><!--para 2-->
6400  No initializer shall attempt to provide a value for an object not contained within the entity
6401  being initialized.
6402 <p><!--para 3-->
6403  The type of the entity to be initialized shall be an array of unknown size or an object type
6404  that is not a variable length array type.
6405 <p><!--para 4-->
6406  All the expressions in an initializer for an object that has static storage duration shall be
6407  constant expressions or string literals.
6408 <p><!--para 5-->
6409  If the declaration of an identifier has block scope, and the identifier has external or
6410  internal linkage, the declaration shall have no initializer for the identifier.
6411 <p><!--para 6-->
6412  If a designator has the form
6413 <pre>
6414           [ constant-expression ]</pre>
6415  then the current object (defined below) shall have array type and the expression shall be
6416  an integer constant expression. If the array is of unknown size, any nonnegative value is
6417  valid.
6418 <p><!--para 7-->
6419  If a designator has the form
6420 <pre>
6421           . identifier</pre>
6422  then the current object (defined below) shall have structure or union type and the
6423  identifier shall be the name of a member of that type.
6424 <!--page 138 indent 5-->
6425 <h6>Semantics</h6>
6426 <p><!--para 8-->
6427  An initializer specifies the initial value stored in an object.
6428 <p><!--para 9-->
6429  Except where explicitly stated otherwise, for the purposes of this subclause unnamed
6430  members of objects of structure and union type do not participate in initialization.
6431  Unnamed members of structure objects have indeterminate value even after initialization.
6432 <p><!--para 10-->
6433  If an object that has automatic storage duration is not initialized explicitly, its value is
6434  indeterminate. If an object that has static storage duration is not initialized explicitly,
6435  then:
6436 <ul>
6437 <li>  if it has pointer type, it is initialized to a null pointer;
6438 <li>  if it has arithmetic type, it is initialized to (positive or unsigned) zero;
6439 <li>  if it is an aggregate, every member is initialized (recursively) according to these rules;
6440 <li>  if it is a union, the first named member is initialized (recursively) according to these
6441  rules.
6442 </ul>
6443 <p><!--para 11-->
6444  The initializer for a scalar shall be a single expression, optionally enclosed in braces. The
6445  initial value of the object is that of the expression (after conversion); the same type
6446  constraints and conversions as for simple assignment apply, taking the type of the scalar
6447  to be the unqualified version of its declared type.
6448 <p><!--para 12-->
6449  The rest of this subclause deals with initializers for objects that have aggregate or union
6450  type.
6451 <p><!--para 13-->
6452  The initializer for a structure or union object that has automatic storage duration shall be
6453  either an initializer list as described below, or a single expression that has compatible
6454  structure or union type. In the latter case, the initial value of the object, including
6455  unnamed members, is that of the expression.
6456 <p><!--para 14-->
6457  An array of character type may be initialized by a character string literal, optionally
6458  enclosed in braces. Successive characters of the character string literal (including the
6459  terminating null character if there is room or if the array is of unknown size) initialize the
6460  elements of the array.
6461 <p><!--para 15-->
6462  An array with element type compatible with wchar_t may be initialized by a wide
6463  string literal, optionally enclosed in braces. Successive wide characters of the wide string
6464  literal (including the terminating null wide character if there is room or if the array is of
6465  unknown size) initialize the elements of the array.
6466 <p><!--para 16-->
6467  Otherwise, the initializer for an object that has aggregate or union type shall be a brace-
6468  enclosed list of initializers for the elements or named members.
6469 <p><!--para 17-->
6470  Each brace-enclosed initializer list has an associated current object. When no
6471  designations are present, subobjects of the current object are initialized in order according
6472  to the type of the current object: array elements in increasing subscript order, structure
6473 <!--page 139 indent 5-->
6474  members in declaration order, and the first named member of a union.<sup><a href="#note129"><b>129)</b></a></sup> In contrast, a
6475  designation causes the following initializer to begin initialization of the subobject
6476  described by the designator. Initialization then continues forward in order, beginning
6477  with the next subobject after that described by the designator.<sup><a href="#note130"><b>130)</b></a></sup>
6478 <p><!--para 18-->
6479  Each designator list begins its description with the current object associated with the
6480  closest surrounding brace pair. Each item in the designator list (in order) specifies a
6481  particular member of its current object and changes the current object for the next
6482  designator (if any) to be that member.<sup><a href="#note131"><b>131)</b></a></sup> The current object that results at the end of the
6483  designator list is the subobject to be initialized by the following initializer.
6484 <p><!--para 19-->
6485  The initialization shall occur in initializer list order, each initializer provided for a
6486  particular subobject overriding any previously listed initializer for the same subobject;<sup><a href="#note132"><b>132)</b></a></sup>
6487  all subobjects that are not initialized explicitly shall be initialized implicitly the same as
6488  objects that have static storage duration.
6489 <p><!--para 20-->
6490  If the aggregate or union contains elements or members that are aggregates or unions,
6491  these rules apply recursively to the subaggregates or contained unions. If the initializer of
6492  a subaggregate or contained union begins with a left brace, the initializers enclosed by
6493  that brace and its matching right brace initialize the elements or members of the
6494  subaggregate or the contained union. Otherwise, only enough initializers from the list are
6495  taken to account for the elements or members of the subaggregate or the first member of
6496  the contained union; any remaining initializers are left to initialize the next element or
6497  member of the aggregate of which the current subaggregate or contained union is a part.
6498 <p><!--para 21-->
6499  If there are fewer initializers in a brace-enclosed list than there are elements or members
6500  of an aggregate, or fewer characters in a string literal used to initialize an array of known
6501  size than there are elements in the array, the remainder of the aggregate shall be
6502  initialized implicitly the same as objects that have static storage duration.
6503 <p><!--para 22-->
6504  If an array of unknown size is initialized, its size is determined by the largest indexed
6505  element with an explicit initializer. At the end of its initializer list, the array no longer
6506  has incomplete type.
6507  
6508  
6509  
6510 <!--page 140 indent 5-->
6511 <p><!--para 23-->
6512  The order in which any side effects occur among the initialization list expressions is
6513  unspecified.<sup><a href="#note133"><b>133)</b></a></sup>
6514 <p><!--para 24-->
6515  EXAMPLE 1       Provided that <a href="#7.3">&lt;complex.h&gt;</a> has been #included, the declarations
6516 <pre>
6517           int i = <a href="#3.5">3.5</a>;
6518           double complex c = 5 + 3 * I;</pre>
6519  define and initialize i with the value 3 and c with the value 5.0 + i3.0.
6520  
6521 <p><!--para 25-->
6522  EXAMPLE 2 The declaration
6523 <pre>
6524           int x[] = { 1, 3, 5 };</pre>
6525  defines and initializes x as a one-dimensional array object that has three elements, as no size was specified
6526  and there are three initializers.
6527  
6528 <p><!--para 26-->
6529  EXAMPLE 3       The declaration
6530 <pre>
6531           int y[4][3] =         {
6532                 { 1, 3,         5 },
6533                 { 2, 4,         6 },
6534                 { 3, 5,         7 },
6535           };</pre>
6536  is a definition with a fully bracketed initialization: 1, 3, and 5 initialize the first row of y (the array object
6537  y[0]), namely y[0][0], y[0][1], and y[0][2]. Likewise the next two lines initialize y[1] and
6538  y[2]. The initializer ends early, so y[3] is initialized with zeros. Precisely the same effect could have
6539  been achieved by
6540 <pre>
6541           int y[4][3] = {
6542                 1, 3, 5, 2, 4, 6, 3, 5, 7
6543           };</pre>
6544  The initializer for y[0] does not begin with a left brace, so three items from the list are used. Likewise the
6545  next three are taken successively for y[1] and y[2].
6546  
6547 <p><!--para 27-->
6548  EXAMPLE 4       The declaration
6549 <pre>
6550           int z[4][3] = {
6551                 { 1 }, { 2 }, { 3 }, { 4 }
6552           };</pre>
6553  initializes the first column of z as specified and initializes the rest with zeros.
6554  
6555 <p><!--para 28-->
6556  EXAMPLE 5       The declaration
6557 <pre>
6558           struct { int a[3], b; } w[] = { { 1 }, 2 };</pre>
6559  is a definition with an inconsistently bracketed initialization. It defines an array with two element
6560  structures: w[0].a[0] is 1 and w[1].a[0] is 2; all the other elements are zero.
6561  
6562  
6563  
6564  
6565 <!--page 141 indent 5-->
6566 <p><!--para 29-->
6567  EXAMPLE 6         The declaration
6568 <pre>
6569            short q[4][3][2] = {
6570                  { 1 },
6571                  { 2, 3 },
6572                  { 4, 5, 6 }
6573            };</pre>
6574  contains an incompletely but consistently bracketed initialization. It defines a three-dimensional array
6575  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
6576  q[2][0][0], q[2][0][1], and q[2][1][0], respectively; all the rest are zero. The initializer for
6577  q[0][0] does not begin with a left brace, so up to six items from the current list may be used. There is
6578  only one, so the values for the remaining five elements are initialized with zero. Likewise, the initializers
6579  for q[1][0] and q[2][0] do not begin with a left brace, so each uses up to six items, initializing their
6580  respective two-dimensional subaggregates. If there had been more than six items in any of the lists, a
6581  diagnostic message would have been issued. The same initialization result could have been achieved by:
6582 <pre>
6583            short q[4][3][2] = {
6584                  1, 0, 0, 0, 0, 0,
6585                  2, 3, 0, 0, 0, 0,
6586                  4, 5, 6
6587            };</pre>
6588  or by:
6589 <pre>
6590            short q[4][3][2] = {
6591                  {
6592                        { 1 },
6593                  },
6594                  {
6595                        { 2, 3 },
6596                  },
6597                  {
6598                        { 4, 5 },
6599                        { 6 },
6600                  }
6601            };</pre>
6602  in a fully bracketed form.
6603 <p><!--para 30-->
6604  Note that the fully bracketed and minimally bracketed forms of initialization are, in general, less likely to
6605  cause confusion.
6606  
6607 <p><!--para 31-->
6608  EXAMPLE 7         One form of initialization that completes array types involves typedef names. Given the
6609  declaration
6610 <pre>
6611            typedef int A[];          // OK - declared with block scope</pre>
6612  the declaration
6613 <pre>
6614            A a = { 1, 2 }, b = { 3, 4, 5 };</pre>
6615  is identical to
6616 <pre>
6617            int a[] = { 1, 2 }, b[] = { 3, 4, 5 };</pre>
6618  due to the rules for incomplete types.
6619 <!--page 142 indent 5-->
6620 <p><!--para 32-->
6621  EXAMPLE 8       The declaration
6622 <pre>
6623           char s[] = "abc", t[3] = "abc";</pre>
6624  defines ''plain'' char array objects s and t whose elements are initialized with character string literals.
6625  This declaration is identical to
6626 <pre>
6627           char s[] = { 'a', 'b', 'c', '\0' },
6628                t[] = { 'a', 'b', 'c' };</pre>
6629  The contents of the arrays are modifiable. On the other hand, the declaration
6630 <pre>
6631           char *p = "abc";</pre>
6632  defines p with type ''pointer to char'' and initializes it to point to an object with type ''array of char''
6633  with length 4 whose elements are initialized with a character string literal. If an attempt is made to use p to
6634  modify the contents of the array, the behavior is undefined.
6635  
6636 <p><!--para 33-->
6637  EXAMPLE 9       Arrays can be initialized to correspond to the elements of an enumeration by using
6638  designators:
6639 <pre>
6640           enum { member_one,           member_two };
6641           const char *nm[] =           {
6642                 [member_two]           = "member two",
6643                 [member_one]           = "member one",
6644           };</pre>
6645  
6646 <p><!--para 34-->
6647  EXAMPLE 10       Structure members can be initialized to nonzero values without depending on their order:
6648 <pre>
6649           div_t answer = { .quot = 2, .rem = -1 };</pre>
6650  
6651 <p><!--para 35-->
6652  EXAMPLE 11 Designators can be used to provide explicit initialization when unadorned initializer lists
6653  might be misunderstood:
6654 <pre>
6655           struct { int a[3], b; } w[] =
6656                 { [0].a = {1}, [1].a[0] = 2 };</pre>
6657  
6658 <p><!--para 36-->
6659  EXAMPLE 12       Space can be ''allocated'' from both ends of an array by using a single designator:
6660 <p><!--para 37-->
6661 <pre>
6662           int a[MAX] = {
6663                 1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0
6664           };</pre>
6665  In the above, if MAX is greater than ten, there will be some zero-valued elements in the middle; if it is less
6666  than ten, some of the values provided by the first five initializers will be overridden by the second five.
6667  
6668 <p><!--para 38-->
6669  EXAMPLE 13       Any member of a union can be initialized:
6670 <pre>
6671           union { /* ... */ } u = { .any_member = 42 };</pre>
6672  
6673 <p><b> Forward references</b>: common definitions <a href="#7.17">&lt;stddef.h&gt;</a> (<a href="#7.17">7.17</a>).
6674 <!--page 143 indent 4-->
6675
6676 <h6>footnotes</h6>
6677 <p><a name="note129">129)</a> If the initializer list for a subaggregate or contained union does not begin with a left brace, its
6678  subobjects are initialized as usual, but the subaggregate or contained union does not become the
6679  current object: current objects are associated only with brace-enclosed initializer lists.
6680
6681 <p><a name="note130">130)</a> After a union member is initialized, the next object is not the next member of the union; instead, it is
6682  the next subobject of an object containing the union.
6683
6684 <p><a name="note131">131)</a> Thus, a designator can only specify a strict subobject of the aggregate or union that is associated with
6685  the surrounding brace pair. Note, too, that each separate designator list is independent.
6686
6687 <p><a name="note132">132)</a> Any initializer for the subobject which is overridden and so not used to initialize that subobject might
6688  not be evaluated at all.
6689
6690 <p><a name="note133">133)</a> In particular, the evaluation order need not be the same as the order of subobject initialization.
6691
6692
6693 <a name="6.8" href="#6.8"><h3>6.8 Statements and blocks</h3></a>
6694 <h6>Syntax</h6>
6695 <p><!--para 1-->
6696 <pre>
6697           statement:
6698                  labeled-statement
6699                  compound-statement
6700                  expression-statement
6701                  selection-statement
6702                  iteration-statement
6703                  jump-statement</pre>
6704 <h6>Semantics</h6>
6705 <p><!--para 2-->
6706  A statement specifies an action to be performed. Except as indicated, statements are
6707  executed in sequence.
6708 <p><!--para 3-->
6709  A block allows a set of declarations and statements to be grouped into one syntactic unit.
6710  The initializers of objects that have automatic storage duration, and the variable length
6711  array declarators of ordinary identifiers with block scope, are evaluated and the values are
6712  stored in the objects (including storing an indeterminate value in objects without an
6713  initializer) each time the declaration is reached in the order of execution, as if it were a
6714  statement, and within each declaration in the order that declarators appear.
6715 <p><!--para 4-->
6716  A full expression is an expression that is not part of another expression or of a declarator.
6717  Each of the following is a full expression: an initializer; the expression in an expression
6718  statement; the controlling expression of a selection statement (if or switch); the
6719  controlling expression of a while or do statement; each of the (optional) expressions of
6720  a for statement; the (optional) expression in a return statement. The end of a full
6721  expression is a sequence point.
6722 <p><b> Forward references</b>: expression and null statements (<a href="#6.8.3">6.8.3</a>), selection statements
6723  (<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>).
6724
6725 <a name="6.8.1" href="#6.8.1"><h4>6.8.1 Labeled statements</h4></a>
6726 <h6>Syntax</h6>
6727 <p><!--para 1-->
6728 <pre>
6729           labeled-statement:
6730                  identifier : statement
6731                  case constant-expression : statement
6732                  default : statement</pre>
6733 <h6>Constraints</h6>
6734 <p><!--para 2-->
6735  A case or default label shall appear only in a switch statement. Further
6736  constraints on such labels are discussed under the switch statement.
6737 <!--page 144 indent 4-->
6738 <p><!--para 3-->
6739  Label names shall be unique within a function.
6740 <h6>Semantics</h6>
6741 <p><!--para 4-->
6742  Any statement may be preceded by a prefix that declares an identifier as a label name.
6743  Labels in themselves do not alter the flow of control, which continues unimpeded across
6744  them.
6745 <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>).
6746
6747 <a name="6.8.2" href="#6.8.2"><h4>6.8.2 Compound statement</h4></a>
6748 <h6>Syntax</h6>
6749 <p><!--para 1-->
6750 <pre>
6751           compound-statement:
6752                 { block-item-listopt }
6753           block-item-list:
6754                   block-item
6755                   block-item-list block-item
6756           block-item:
6757                   declaration
6758                   statement</pre>
6759 <h6>Semantics</h6>
6760 <p><!--para 2-->
6761  A compound statement is a block.
6762
6763 <a name="6.8.3" href="#6.8.3"><h4>6.8.3 Expression and null statements</h4></a>
6764 <h6>Syntax</h6>
6765 <p><!--para 1-->
6766 <pre>
6767           expression-statement:
6768                  expressionopt ;</pre>
6769 <h6>Semantics</h6>
6770 <p><!--para 2-->
6771  The expression in an expression statement is evaluated as a void expression for its side
6772  effects.<sup><a href="#note134"><b>134)</b></a></sup>
6773 <p><!--para 3-->
6774  A null statement (consisting of just a semicolon) performs no operations.
6775 <p><!--para 4-->
6776  EXAMPLE 1 If a function call is evaluated as an expression statement for its side effects only, the
6777  discarding of its value may be made explicit by converting the expression to a void expression by means of
6778  a cast:
6779 <pre>
6780           int p(int);
6781           /* ... */
6782           (void)p(0);</pre>
6783  
6784  
6785  
6786 <!--page 145 indent 4-->
6787 <p><!--para 5-->
6788  EXAMPLE 2       In the program fragment
6789 <pre>
6790           char *s;
6791           /* ... */
6792           while (*s++ != '\0')
6793                   ;</pre>
6794  a null statement is used to supply an empty loop body to the iteration statement.
6795  
6796 <p><!--para 6-->
6797  EXAMPLE 3       A null statement may also be used to carry a label just before the closing } of a compound
6798  statement.
6799 <pre>
6800           while (loop1) {
6801                 /* ... */
6802                 while (loop2) {
6803                         /* ... */
6804                         if (want_out)
6805                                 goto end_loop1;
6806                         /* ... */
6807                 }
6808                 /* ... */
6809           end_loop1: ;
6810           }</pre>
6811  
6812 <p><b> Forward references</b>: iteration statements (<a href="#6.8.5">6.8.5</a>).
6813
6814 <h6>footnotes</h6>
6815 <p><a name="note134">134)</a> Such as assignments, and function calls which have side effects.
6816
6817
6818 <a name="6.8.4" href="#6.8.4"><h4>6.8.4 Selection statements</h4></a>
6819 <h6>Syntax</h6>
6820 <p><!--para 1-->
6821 <pre>
6822           selection-statement:
6823                   if ( expression ) statement
6824                   if ( expression ) statement else statement
6825                   switch ( expression ) statement</pre>
6826 <h6>Semantics</h6>
6827 <p><!--para 2-->
6828  A selection statement selects among a set of statements depending on the value of a
6829  controlling expression.
6830 <p><!--para 3-->
6831  A selection statement is a block whose scope is a strict subset of the scope of its
6832  enclosing block. Each associated substatement is also a block whose scope is a strict
6833  subset of the scope of the selection statement.
6834
6835 <a name="6.8.4.1" href="#6.8.4.1"><h5>6.8.4.1 The if statement</h5></a>
6836 <h6>Constraints</h6>
6837 <p><!--para 1-->
6838  The controlling expression of an if statement shall have scalar type.
6839 <h6>Semantics</h6>
6840 <p><!--para 2-->
6841  In both forms, the first substatement is executed if the expression compares unequal to 0.
6842  In the else form, the second substatement is executed if the expression compares equal
6843 <!--page 146 indent 4-->
6844  to 0. If the first substatement is reached via a label, the second substatement is not
6845  executed.
6846 <p><!--para 3-->
6847  An else is associated with the lexically nearest preceding if that is allowed by the
6848  syntax.
6849
6850 <a name="6.8.4.2" href="#6.8.4.2"><h5>6.8.4.2 The switch statement</h5></a>
6851 <h6>Constraints</h6>
6852 <p><!--para 1-->
6853  The controlling expression of a switch statement shall have integer type.
6854 <p><!--para 2-->
6855  If a switch statement has an associated case or default label within the scope of an
6856  identifier with a variably modified type, the entire switch statement shall be within the
6857  scope of that identifier.<sup><a href="#note135"><b>135)</b></a></sup>
6858 <p><!--para 3-->
6859  The expression of each case label shall be an integer constant expression and no two of
6860  the case constant expressions in the same switch statement shall have the same value
6861  after conversion. There may be at most one default label in a switch statement.
6862  (Any enclosed switch statement may have a default label or case constant
6863  expressions with values that duplicate case constant expressions in the enclosing
6864  switch statement.)
6865 <h6>Semantics</h6>
6866 <p><!--para 4-->
6867  A switch statement causes control to jump to, into, or past the statement that is the
6868  switch body, depending on the value of a controlling expression, and on the presence of a
6869  default label and the values of any case labels on or in the switch body. A case or
6870  default label is accessible only within the closest enclosing switch statement.
6871 <p><!--para 5-->
6872  The integer promotions are performed on the controlling expression. The constant
6873  expression in each case label is converted to the promoted type of the controlling
6874  expression. If a converted value matches that of the promoted controlling expression,
6875  control jumps to the statement following the matched case label. Otherwise, if there is
6876  a default label, control jumps to the labeled statement. If no converted case constant
6877  expression matches and there is no default label, no part of the switch body is
6878  executed.
6879  Implementation limits
6880 <p><!--para 6-->
6881  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
6882  switch statement.
6883  
6884  
6885  
6886  
6887 <!--page 147 indent 4-->
6888 <p><!--para 7-->
6889  EXAMPLE        In the artificial program fragment
6890 <pre>
6891           switch (expr)
6892           {
6893                 int i = 4;
6894                 f(i);
6895           case 0:
6896                 i = 17;
6897                 /* falls through into default code */
6898           default:
6899                 printf("%d\n", i);
6900           }</pre>
6901  the object whose identifier is i exists with automatic storage duration (within the block) but is never
6902  initialized, and thus if the controlling expression has a nonzero value, the call to the printf function will
6903  access an indeterminate value. Similarly, the call to the function f cannot be reached.
6904  
6905
6906 <h6>footnotes</h6>
6907 <p><a name="note135">135)</a> That is, the declaration either precedes the switch statement, or it follows the last case or
6908  default label associated with the switch that is in the block containing the declaration.
6909
6910
6911 <a name="6.8.5" href="#6.8.5"><h4>6.8.5 Iteration statements</h4></a>
6912 <h6>Syntax</h6>
6913 <p><!--para 1-->
6914 <pre>
6915           iteration-statement:
6916                   while ( expression ) statement
6917                   do statement while ( expression ) ;
6918                   for ( expressionopt ; expressionopt ; expressionopt ) statement
6919                   for ( declaration expressionopt ; expressionopt ) statement</pre>
6920 <h6>Constraints</h6>
6921 <p><!--para 2-->
6922  The controlling expression of an iteration statement shall have scalar type.
6923 <p><!--para 3-->
6924  The declaration part of a for statement shall only declare identifiers for objects having
6925  storage class auto or register.
6926 <h6>Semantics</h6>
6927 <p><!--para 4-->
6928  An iteration statement causes a statement called the loop body to be executed repeatedly
6929  until the controlling expression compares equal to 0. The repetition occurs regardless of
6930  whether the loop body is entered from the iteration statement or by a jump.<sup><a href="#note136"><b>136)</b></a></sup>
6931 <p><!--para 5-->
6932  An iteration statement is a block whose scope is a strict subset of the scope of its
6933  enclosing block. The loop body is also a block whose scope is a strict subset of the scope
6934  of the iteration statement.
6935  
6936  
6937  
6938  
6939 <!--page 148 indent 4-->
6940
6941 <h6>footnotes</h6>
6942 <p><a name="note136">136)</a> Code jumped over is not executed. In particular, the controlling expression of a for or while
6943  statement is not evaluated before entering the loop body, nor is clause-1 of a for statement.
6944
6945
6946 <a name="6.8.5.1" href="#6.8.5.1"><h5>6.8.5.1 The while statement</h5></a>
6947 <p><!--para 1-->
6948  The evaluation of the controlling expression takes place before each execution of the loop
6949  body.
6950
6951 <a name="6.8.5.2" href="#6.8.5.2"><h5>6.8.5.2 The do statement</h5></a>
6952 <p><!--para 1-->
6953  The evaluation of the controlling expression takes place after each execution of the loop
6954  body.
6955
6956 <a name="6.8.5.3" href="#6.8.5.3"><h5>6.8.5.3 The for statement</h5></a>
6957 <p><!--para 1-->
6958  The statement
6959 <pre>
6960           for ( clause-1 ; expression-2 ; expression-3 ) statement</pre>
6961  behaves as follows: The expression expression-2 is the controlling expression that is
6962  evaluated before each execution of the loop body. The expression expression-3 is
6963  evaluated as a void expression after each execution of the loop body. If clause-1 is a
6964  declaration, the scope of any identifiers it declares is the remainder of the declaration and
6965  the entire loop, including the other two expressions; it is reached in the order of execution
6966  before the first evaluation of the controlling expression. If clause-1 is an expression, it is
6967  evaluated as a void expression before the first evaluation of the controlling expression.<sup><a href="#note137"><b>137)</b></a></sup>
6968 <p><!--para 2-->
6969  Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a
6970  nonzero constant.
6971
6972 <h6>footnotes</h6>
6973 <p><a name="note137">137)</a> Thus, clause-1 specifies initialization for the loop, possibly declaring one or more variables for use in
6974  the loop; the controlling expression, expression-2, specifies an evaluation made before each iteration,
6975  such that execution of the loop continues until the expression compares equal to 0; and expression-3
6976  specifies an operation (such as incrementing) that is performed after each iteration.
6977
6978
6979 <a name="6.8.6" href="#6.8.6"><h4>6.8.6 Jump statements</h4></a>
6980 <h6>Syntax</h6>
6981 <p><!--para 1-->
6982 <pre>
6983           jump-statement:
6984                  goto identifier ;
6985                  continue ;
6986                  break ;
6987                  return expressionopt ;</pre>
6988 <h6>Semantics</h6>
6989 <p><!--para 2-->
6990  A jump statement causes an unconditional jump to another place.
6991  
6992  
6993  
6994  
6995 <!--page 149 indent 4-->
6996
6997 <a name="6.8.6.1" href="#6.8.6.1"><h5>6.8.6.1 The goto statement</h5></a>
6998 <h6>Constraints</h6>
6999 <p><!--para 1-->
7000  The identifier in a goto statement shall name a label located somewhere in the enclosing
7001  function. A goto statement shall not jump from outside the scope of an identifier having
7002  a variably modified type to inside the scope of that identifier.
7003 <h6>Semantics</h6>
7004 <p><!--para 2-->
7005  A goto statement causes an unconditional jump to the statement prefixed by the named
7006  label in the enclosing function.
7007 <p><!--para 3-->
7008  EXAMPLE 1 It is sometimes convenient to jump into the middle of a complicated set of statements. The
7009  following outline presents one possible approach to a problem based on these three assumptions:
7010 <ol>
7011 <li>  The general initialization code accesses objects only visible to the current function.
7012 <li>  The general initialization code is too large to warrant duplication.
7013 <li>  The code to determine the next operation is at the head of the loop. (To allow it to be reached by
7014  continue statements, for example.)
7015   /* ... */
7016   goto first_time;
7017   for (;;) {
7018 <pre>
7019           // determine next operation
7020           /* ... */
7021           if (need to reinitialize) {
7022                   // reinitialize-only code
7023                   /* ... */
7024           first_time:
7025                   // general initialization code
7026                   /* ... */
7027                   continue;
7028           }
7029           // handle other operations
7030           /* ... */</pre>
7031   }
7032 <!--page 150 indent 4-->
7033 </ol>
7034 <p><!--para 4-->
7035  EXAMPLE 2 A goto statement is not allowed to jump past any declarations of objects with variably
7036  modified types. A jump within the scope, however, is permitted.
7037 <pre>
7038          goto lab3;                         // invalid: going INTO scope of VLA.
7039          {
7040                double a[n];
7041                a[j] = <a href="#4.4">4.4</a>;
7042          lab3:
7043                a[j] = <a href="#3.3">3.3</a>;
7044                goto lab4;                   // valid: going WITHIN scope of VLA.
7045                a[j] = <a href="#5.5">5.5</a>;
7046          lab4:
7047                a[j] = <a href="#6.6">6.6</a>;
7048          }
7049          goto lab4;                         // invalid: going INTO scope of VLA.</pre>
7050  
7051
7052 <a name="6.8.6.2" href="#6.8.6.2"><h5>6.8.6.2 The continue statement</h5></a>
7053 <h6>Constraints</h6>
7054 <p><!--para 1-->
7055  A continue statement shall appear only in or as a loop body.
7056 <h6>Semantics</h6>
7057 <p><!--para 2-->
7058  A continue statement causes a jump to the loop-continuation portion of the smallest
7059  enclosing iteration statement; that is, to the end of the loop body. More precisely, in each
7060  of the statements
7061  while (/* ... */) {                  do {                                 for (/* ... */) {
7062 <pre>
7063     /* ... */                            /* ... */                            /* ... */
7064     continue;                            continue;                            continue;
7065     /* ... */                            /* ... */                            /* ... */</pre>
7066  contin: ;                            contin: ;                            contin: ;
7067  }                                    } while (/* ... */);                 }
7068  unless the continue statement shown is in an enclosed iteration statement (in which
7069  case it is interpreted within that statement), it is equivalent to goto contin;.<sup><a href="#note138"><b>138)</b></a></sup>
7070
7071 <h6>footnotes</h6>
7072 <p><a name="note138">138)</a> Following the contin: label is a null statement.
7073
7074
7075 <a name="6.8.6.3" href="#6.8.6.3"><h5>6.8.6.3 The break statement</h5></a>
7076 <h6>Constraints</h6>
7077 <p><!--para 1-->
7078  A break statement shall appear only in or as a switch body or loop body.
7079 <h6>Semantics</h6>
7080 <p><!--para 2-->
7081  A break statement terminates execution of the smallest enclosing switch or iteration
7082  statement.
7083  
7084  
7085  
7086 <!--page 151 indent 4-->
7087
7088 <a name="6.8.6.4" href="#6.8.6.4"><h5>6.8.6.4 The return statement</h5></a>
7089 <h6>Constraints</h6>
7090 <p><!--para 1-->
7091  A return statement with an expression shall not appear in a function whose return type
7092  is void. A return statement without an expression shall only appear in a function
7093  whose return type is void.
7094 <h6>Semantics</h6>
7095 <p><!--para 2-->
7096  A return statement terminates execution of the current function and returns control to
7097  its caller. A function may have any number of return statements.
7098 <p><!--para 3-->
7099  If a return statement with an expression is executed, the value of the expression is
7100  returned to the caller as the value of the function call expression. If the expression has a
7101  type different from the return type of the function in which it appears, the value is
7102  converted as if by assignment to an object having the return type of the function.<sup><a href="#note139"><b>139)</b></a></sup>
7103 <p><!--para 4-->
7104  EXAMPLE       In:
7105 <pre>
7106          struct s { double i; } f(void);
7107          union {
7108                struct {
7109                      int f1;
7110                      struct s f2;
7111                } u1;
7112                struct {
7113                      struct s f3;
7114                      int f4;
7115                } u2;
7116          } g;
7117          struct s f(void)
7118          {
7119                return g.u1.f2;
7120          }
7121          /* ... */
7122          g.u2.f3 = f();</pre>
7123  there is no undefined behavior, although there would be if the assignment were done directly (without using
7124  a function call to fetch the value).
7125  
7126  
7127  
7128  
7129 <!--page 152 indent 4-->
7130
7131 <h6>footnotes</h6>
7132 <p><a name="note139">139)</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
7133  apply to the case of function return. The representation of floating-point values may have wider range
7134  or precision and is determined by FLT_EVAL_METHOD. A cast may be used to remove this extra
7135  range and precision.
7136
7137
7138 <a name="6.9" href="#6.9"><h3>6.9 External definitions</h3></a>
7139 <h6>Syntax</h6>
7140 <p><!--para 1-->
7141 <pre>
7142           translation-unit:
7143                   external-declaration
7144                   translation-unit external-declaration
7145           external-declaration:
7146                  function-definition
7147                  declaration</pre>
7148 <h6>Constraints</h6>
7149 <p><!--para 2-->
7150  The storage-class specifiers auto and register shall not appear in the declaration
7151  specifiers in an external declaration.
7152 <p><!--para 3-->
7153  There shall be no more than one external definition for each identifier declared with
7154  internal linkage in a translation unit. Moreover, if an identifier declared with internal
7155  linkage is used in an expression (other than as a part of the operand of a sizeof
7156  operator whose result is an integer constant), there shall be exactly one external definition
7157  for the identifier in the translation unit.
7158 <h6>Semantics</h6>
7159 <p><!--para 4-->
7160  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,
7161  which consists of a sequence of external declarations. These are described as ''external''
7162  because they appear outside any function (and hence have file scope). As discussed in
7163  <a href="#6.7">6.7</a>, a declaration that also causes storage to be reserved for an object or a function named
7164  by the identifier is a definition.
7165 <p><!--para 5-->
7166  An external definition is an external declaration that is also a definition of a function
7167  (other than an inline definition) or an object. If an identifier declared with external
7168  linkage is used in an expression (other than as part of the operand of a sizeof operator
7169  whose result is an integer constant), somewhere in the entire program there shall be
7170  exactly one external definition for the identifier; otherwise, there shall be no more than
7171  one.<sup><a href="#note140"><b>140)</b></a></sup>
7172  
7173  
7174  
7175  
7176 <!--page 153 indent 4-->
7177
7178 <h6>footnotes</h6>
7179 <p><a name="note140">140)</a> Thus, if an identifier declared with external linkage is not used in an expression, there need be no
7180  external definition for it.
7181
7182
7183 <a name="6.9.1" href="#6.9.1"><h4>6.9.1 Function definitions</h4></a>
7184 <h6>Syntax</h6>
7185 <p><!--para 1-->
7186 <pre>
7187           function-definition:
7188                  declaration-specifiers declarator declaration-listopt compound-statement
7189           declaration-list:
7190                  declaration
7191                  declaration-list declaration</pre>
7192 <h6>Constraints</h6>
7193 <p><!--para 2-->
7194  The identifier declared in a function definition (which is the name of the function) shall
7195  have a function type, as specified by the declarator portion of the function definition.<sup><a href="#note141"><b>141)</b></a></sup>
7196 <p><!--para 3-->
7197  The return type of a function shall be void or an object type other than array type.
7198 <p><!--para 4-->
7199  The storage-class specifier, if any, in the declaration specifiers shall be either extern or
7200  static.
7201 <p><!--para 5-->
7202  If the declarator includes a parameter type list, the declaration of each parameter shall
7203  include an identifier, except for the special case of a parameter list consisting of a single
7204  parameter of type void, in which case there shall not be an identifier. No declaration list
7205  shall follow.
7206 <p><!--para 6-->
7207  If the declarator includes an identifier list, each declaration in the declaration list shall
7208  have at least one declarator, those declarators shall declare only identifiers from the
7209  identifier list, and every identifier in the identifier list shall be declared. An identifier
7210  declared as a typedef name shall not be redeclared as a parameter. The declarations in the
7211  declaration list shall contain no storage-class specifier other than register and no
7212  initializations.
7213  
7214  
7215  
7216  
7217 <!--page 154 indent 5-->
7218 <h6>Semantics</h6>
7219 <p><!--para 7-->
7220  The declarator in a function definition specifies the name of the function being defined
7221  and the identifiers of its parameters. If the declarator includes a parameter type list, the
7222  list also specifies the types of all the parameters; such a declarator also serves as a
7223  function prototype for later calls to the same function in the same translation unit. If the
7224  declarator includes an identifier list,<sup><a href="#note142"><b>142)</b></a></sup> the types of the parameters shall be declared in a
7225  following declaration list. In either case, the type of each parameter is adjusted as
7226  described in <a href="#6.7.5.3">6.7.5.3</a> for a parameter type list; the resulting type shall be an object type.
7227 <p><!--para 8-->
7228  If a function that accepts a variable number of arguments is defined without a parameter
7229  type list that ends with the ellipsis notation, the behavior is undefined.
7230 <p><!--para 9-->
7231  Each parameter has automatic storage duration. Its identifier is an lvalue, which is in
7232  effect declared at the head of the compound statement that constitutes the function body
7233  (and therefore cannot be redeclared in the function body except in an enclosed block).
7234  The layout of the storage for parameters is unspecified.
7235 <p><!--para 10-->
7236  On entry to the function, the size expressions of each variably modified parameter are
7237  evaluated and the value of each argument expression is converted to the type of the
7238  corresponding parameter as if by assignment. (Array expressions and function
7239  designators as arguments were converted to pointers before the call.)
7240 <p><!--para 11-->
7241  After all parameters have been assigned, the compound statement that constitutes the
7242  body of the function definition is executed.
7243 <p><!--para 12-->
7244  If the } that terminates a function is reached, and the value of the function call is used by
7245  the caller, the behavior is undefined.
7246 <p><!--para 13-->
7247  EXAMPLE 1       In the following:
7248 <pre>
7249           extern int max(int a, int b)
7250           {
7251                 return a &gt; b ? a : b;
7252           }</pre>
7253  extern is the storage-class specifier and int is the type specifier; max(int a, int b) is the
7254  function declarator; and
7255 <pre>
7256           { return a &gt; b ? a : b; }</pre>
7257  is the function body. The following similar definition uses the identifier-list form for the parameter
7258  declarations:
7259  
7260  
7261  
7262  
7263 <!--page 155 indent 5-->
7264 <pre>
7265           extern int max(a, b)
7266           int a, b;
7267           {
7268                 return a &gt; b ? a : b;
7269           }</pre>
7270  Here int a, b; is the declaration list for the parameters. The difference between these two definitions is
7271  that the first form acts as a prototype declaration that forces conversion of the arguments of subsequent calls
7272  to the function, whereas the second form does not.
7273  
7274 <p><!--para 14-->
7275  EXAMPLE 2           To pass one function to another, one might say
7276 <pre>
7277                       int f(void);
7278                       /* ... */
7279                       g(f);</pre>
7280  Then the definition of g might read
7281 <pre>
7282           void g(int (*funcp)(void))
7283           {
7284                 /* ... */
7285                 (*funcp)(); /* or funcp(); ...                    */
7286           }</pre>
7287  or, equivalently,
7288 <pre>
7289           void g(int func(void))
7290           {
7291                 /* ... */
7292                 func(); /* or (*func)(); ...                   */
7293           }</pre>
7294  
7295
7296 <h6>footnotes</h6>
7297 <p><a name="note141">141)</a> The intent is that the type category in a function definition cannot be inherited from a typedef:
7298
7299 <pre>
7300           typedef int F(void);                          //   type F is ''function with no parameters
7301                                                         //                  returning int''
7302           F f, g;                                       //   f and g both have type compatible with F
7303           F f { /* ... */ }                             //   WRONG: syntax/constraint error
7304           F g() { /* ... */ }                           //   WRONG: declares that g returns a function
7305           int f(void) { /* ... */ }                     //   RIGHT: f has type compatible with F
7306           int g() { /* ... */ }                         //   RIGHT: g has type compatible with F
7307           F *e(void) { /* ... */ }                      //   e returns a pointer to a function
7308           F *((e))(void) { /* ... */ }                  //   same: parentheses irrelevant
7309           int (*fp)(void);                              //   fp points to a function that has type F
7310           F *Fp;                                        //   Fp points to a function that has type F</pre>
7311
7312 <p><a name="note142">142)</a> See ''future language directions'' (<a href="#6.11.7">6.11.7</a>).
7313
7314
7315 <a name="6.9.2" href="#6.9.2"><h4>6.9.2 External object definitions</h4></a>
7316 <h6>Semantics</h6>
7317 <p><!--para 1-->
7318  If the declaration of an identifier for an object has file scope and an initializer, the
7319  declaration is an external definition for the identifier.
7320 <p><!--para 2-->
7321  A declaration of an identifier for an object that has file scope without an initializer, and
7322  without a storage-class specifier or with the storage-class specifier static, constitutes a
7323  tentative definition. If a translation unit contains one or more tentative definitions for an
7324  identifier, and the translation unit contains no external definition for that identifier, then
7325  the behavior is exactly as if the translation unit contains a file scope declaration of that
7326  identifier, with the composite type as of the end of the translation unit, with an initializer
7327  equal to 0.
7328 <p><!--para 3-->
7329  If the declaration of an identifier for an object is a tentative definition and has internal
7330  linkage, the declared type shall not be an incomplete type.
7331 <!--page 156 indent 4-->
7332 <p><!--para 4-->
7333  EXAMPLE 1
7334 <pre>
7335           int i1 = 1;                    // definition, external linkage
7336           static int i2 = 2;             // definition, internal linkage
7337           extern int i3 = 3;             // definition, external linkage
7338           int i4;                        // tentative definition, external linkage
7339           static int i5;                 // tentative definition, internal linkage
7340           int   i1;                      // valid tentative definition, refers to previous
7341           int   i2;                      // <a href="#6.2.2">6.2.2</a> renders undefined, linkage disagreement
7342           int   i3;                      // valid tentative definition, refers to previous
7343           int   i4;                      // valid tentative definition, refers to previous
7344           int   i5;                      // <a href="#6.2.2">6.2.2</a> renders undefined, linkage disagreement
7345           extern    int   i1;            // refers to previous, whose linkage is external
7346           extern    int   i2;            // refers to previous, whose linkage is internal
7347           extern    int   i3;            // refers to previous, whose linkage is external
7348           extern    int   i4;            // refers to previous, whose linkage is external
7349           extern    int   i5;            // refers to previous, whose linkage is internal</pre>
7350  
7351 <p><!--para 5-->
7352  EXAMPLE 2       If at the end of the translation unit containing
7353 <pre>
7354           int i[];</pre>
7355  the array i still has incomplete type, the implicit initializer causes it to have one element, which is set to
7356  zero on program startup.
7357 <!--page 157 indent 4-->
7358
7359 <a name="6.10" href="#6.10"><h3>6.10 Preprocessing directives</h3></a>
7360 <h6>Syntax</h6>
7361 <p><!--para 1-->
7362 <!--page 158 indent 4-->
7363 <pre>
7364           preprocessing-file:
7365                  groupopt
7366           group:
7367                    group-part
7368                    group group-part
7369           group-part:
7370                  if-section
7371                  control-line
7372                  text-line
7373                  # non-directive
7374           if-section:
7375                    if-group elif-groupsopt else-groupopt endif-line
7376           if-group:
7377                   # if     constant-expression new-line groupopt
7378                   # ifdef identifier new-line groupopt
7379                   # ifndef identifier new-line groupopt
7380           elif-groups:
7381                   elif-group
7382                   elif-groups elif-group
7383           elif-group:
7384                   # elif       constant-expression new-line groupopt
7385           else-group:
7386                   # else       new-line groupopt
7387           endif-line:
7388                   # endif      new-line
7389           control-line:
7390                  # include pp-tokens new-line
7391                  # define identifier replacement-list new-line
7392                  # define identifier lparen identifier-listopt )
7393                                                  replacement-list new-line
7394                  # define identifier lparen ... ) replacement-list new-line
7395                  # define identifier lparen identifier-list , ... )
7396                                                  replacement-list new-line
7397                  # undef   identifier new-line
7398                  # line    pp-tokens new-line
7399                  # error   pp-tokensopt new-line
7400                  # pragma pp-tokensopt new-line
7401                  #         new-line
7402           text-line:
7403                   pp-tokensopt new-line
7404           non-directive:
7405                  pp-tokens new-line
7406           lparen:
7407                     a ( character not immediately preceded by white-space
7408           replacement-list:
7409                  pp-tokensopt
7410           pp-tokens:
7411                  preprocessing-token
7412                  pp-tokens preprocessing-token
7413           new-line:
7414                  the new-line character</pre>
7415 <h6>Description</h6>
7416 <p><!--para 2-->
7417  A preprocessing directive consists of a sequence of preprocessing tokens that satisfies the
7418  following constraints: The first token in the sequence is a # preprocessing token that (at
7419  the start of translation phase 4) is either the first character in the source file (optionally
7420  after white space containing no new-line characters) or that follows white space
7421  containing at least one new-line character. The last token in the sequence is the first new-
7422  line character that follows the first token in the sequence.<sup><a href="#note143"><b>143)</b></a></sup> A new-line character ends
7423  the preprocessing directive even if it occurs within what would otherwise be an
7424  
7425 <!--page 159 indent 4-->
7426  invocation of a function-like macro.
7427 <p><!--para 3-->
7428  A text line shall not begin with a # preprocessing token. A non-directive shall not begin
7429  with any of the directive names appearing in the syntax.
7430 <p><!--para 4-->
7431  When in a group that is skipped (<a href="#6.10.1">6.10.1</a>), the directive syntax is relaxed to allow any
7432  sequence of preprocessing tokens to occur between the directive name and the following
7433  new-line character.
7434 <h6>Constraints</h6>
7435 <p><!--para 5-->
7436  The only white-space characters that shall appear between preprocessing tokens within a
7437  preprocessing directive (from just after the introducing # preprocessing token through
7438  just before the terminating new-line character) are space and horizontal-tab (including
7439  spaces that have replaced comments or possibly other white-space characters in
7440  translation phase 3).
7441 <h6>Semantics</h6>
7442 <p><!--para 6-->
7443  The implementation can process and skip sections of source files conditionally, include
7444  other source files, and replace macros. These capabilities are called preprocessing,
7445  because conceptually they occur before translation of the resulting translation unit.
7446 <p><!--para 7-->
7447  The preprocessing tokens within a preprocessing directive are not subject to macro
7448  expansion unless otherwise stated.
7449 <p><!--para 8-->
7450  EXAMPLE        In:
7451 <pre>
7452           #define EMPTY
7453           EMPTY # include &lt;file.h&gt;</pre>
7454  the sequence of preprocessing tokens on the second line is not a preprocessing directive, because it does not
7455  begin with a # at the start of translation phase 4, even though it will do so after the macro EMPTY has been
7456  replaced.
7457  
7458
7459 <h6>footnotes</h6>
7460 <p><a name="note143">143)</a> Thus, preprocessing directives are commonly called ''lines''. These ''lines'' have no other syntactic
7461  significance, as all white space is equivalent except in certain situations during preprocessing (see the
7462  # character string literal creation operator in <a href="#6.10.3.2">6.10.3.2</a>, for example).
7463
7464
7465 <a name="6.10.1" href="#6.10.1"><h4>6.10.1 Conditional inclusion</h4></a>
7466 <h6>Constraints</h6>
7467 <p><!--para 1-->
7468  The expression that controls conditional inclusion shall be an integer constant expression
7469  except that: it shall not contain a cast; identifiers (including those lexically identical to
7470  keywords) are interpreted as described below;<sup><a href="#note144"><b>144)</b></a></sup> and it may contain unary operator
7471  expressions of the form
7472  
7473  
7474  
7475  
7476 <!--page 160 indent 4-->
7477 <pre>
7478       defined identifier</pre>
7479  or
7480 <pre>
7481       defined ( identifier )</pre>
7482  which evaluate to 1 if the identifier is currently defined as a macro name (that is, if it is
7483  predefined or if it has been the subject of a #define preprocessing directive without an
7484  intervening #undef directive with the same subject identifier), 0 if it is not.
7485 <p><!--para 2-->
7486  Each preprocessing token that remains (in the list of preprocessing tokens that will
7487  become the controlling expression) after all macro replacements have occurred shall be in
7488  the lexical form of a token (<a href="#6.4">6.4</a>).
7489 <h6>Semantics</h6>
7490 <p><!--para 3-->
7491  Preprocessing directives of the forms
7492 <pre>
7493       # if   constant-expression new-line groupopt
7494       # elif constant-expression new-line groupopt</pre>
7495  check whether the controlling constant expression evaluates to nonzero.
7496 <p><!--para 4-->
7497  Prior to evaluation, macro invocations in the list of preprocessing tokens that will become
7498  the controlling constant expression are replaced (except for those macro names modified
7499  by the defined unary operator), just as in normal text. If the token defined is
7500  generated as a result of this replacement process or use of the defined unary operator
7501  does not match one of the two specified forms prior to macro replacement, the behavior is
7502  undefined. After all replacements due to macro expansion and the defined unary
7503  operator have been performed, all remaining identifiers (including those lexically
7504  identical to keywords) are replaced with the pp-number 0, and then each preprocessing
7505  token is converted into a token. The resulting tokens compose the controlling constant
7506  expression which is evaluated according to the rules of <a href="#6.6">6.6</a>. For the purposes of this
7507  token conversion and evaluation, all signed integer types and all unsigned integer types
7508  act as if they have the same representation as, respectively, the types intmax_t and
7509  uintmax_t defined in the header <a href="#7.18">&lt;stdint.h&gt;</a>.<sup><a href="#note145"><b>145)</b></a></sup> This includes interpreting
7510  character constants, which may involve converting escape sequences into execution
7511  character set members. Whether the numeric value for these character constants matches
7512  the value obtained when an identical character constant occurs in an expression (other
7513  than within a #if or #elif directive) is implementation-defined.<sup><a href="#note146"><b>146)</b></a></sup> Also, whether a
7514  single-character character constant may have a negative value is implementation-defined.
7515 <p><!--para 5-->
7516  Preprocessing directives of the forms
7517  
7518  
7519  
7520 <!--page 161 indent 4-->
7521 <pre>
7522     # ifdef identifier new-line groupopt
7523     # ifndef identifier new-line groupopt</pre>
7524  check whether the identifier is or is not currently defined as a macro name. Their
7525  conditions are equivalent to #if defined identifier and #if !defined identifier
7526  respectively.
7527 <p><!--para 6-->
7528  Each directive's condition is checked in order. If it evaluates to false (zero), the group
7529  that it controls is skipped: directives are processed only through the name that determines
7530  the directive in order to keep track of the level of nested conditionals; the rest of the
7531  directives' preprocessing tokens are ignored, as are the other preprocessing tokens in the
7532  group. Only the first group whose control condition evaluates to true (nonzero) is
7533  processed. If none of the conditions evaluates to true, and there is a #else directive, the
7534  group controlled by the #else is processed; lacking a #else directive, all the groups
7535  until the #endif are skipped.<sup><a href="#note147"><b>147)</b></a></sup>
7536 <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
7537  integer types (<a href="#7.18.1.5">7.18.1.5</a>).
7538
7539 <h6>footnotes</h6>
7540 <p><a name="note144">144)</a> Because the controlling constant expression is evaluated during translation phase 4, all identifiers
7541  either are or are not macro names -- there simply are no keywords, enumeration constants, etc.
7542
7543 <p><a name="note145">145)</a> Thus, on an implementation where INT_MAX is 0x7FFF and UINT_MAX is 0xFFFF, the constant
7544  0x8000 is signed and positive within a #if expression even though it would be unsigned in
7545  translation phase 7.
7546
7547 <p><a name="note146">146)</a> Thus, the constant expression in the following #if directive and if statement is not guaranteed to
7548  evaluate to the same value in these two contexts.
7549    #if 'z' - 'a' == 25
7550    if ('z' - 'a' == 25)
7551  
7552
7553 <p><a name="note147">147)</a> As indicated by the syntax, a preprocessing token shall not follow a #else or #endif directive
7554  before the terminating new-line character. However, comments may appear anywhere in a source file,
7555  including within a preprocessing directive.
7556
7557
7558 <a name="6.10.2" href="#6.10.2"><h4>6.10.2 Source file inclusion</h4></a>
7559 <h6>Constraints</h6>
7560 <p><!--para 1-->
7561  A #include directive shall identify a header or source file that can be processed by the
7562  implementation.
7563 <h6>Semantics</h6>
7564 <p><!--para 2-->
7565  A preprocessing directive of the form
7566 <pre>
7567     # include &lt;h-char-sequence&gt; new-line</pre>
7568  searches a sequence of implementation-defined places for a header identified uniquely by
7569  the specified sequence between the &lt; and &gt; delimiters, and causes the replacement of that
7570  directive by the entire contents of the header. How the places are specified or the header
7571  identified is implementation-defined.
7572 <p><!--para 3-->
7573  A preprocessing directive of the form
7574  
7575  
7576  
7577 <!--page 162 indent 4-->
7578 <pre>
7579     # include "q-char-sequence" new-line</pre>
7580  causes the replacement of that directive by the entire contents of the source file identified
7581  by the specified sequence between the " delimiters. The named source file is searched
7582  for in an implementation-defined manner. If this search is not supported, or if the search
7583  fails, the directive is reprocessed as if it read
7584 <pre>
7585     # include &lt;h-char-sequence&gt; new-line</pre>
7586  with the identical contained sequence (including &gt; characters, if any) from the original
7587  directive.
7588 <p><!--para 4-->
7589  A preprocessing directive of the form
7590 <pre>
7591     # include pp-tokens new-line</pre>
7592  (that does not match one of the two previous forms) is permitted. The preprocessing
7593  tokens after include in the directive are processed just as in normal text. (Each
7594  identifier currently defined as a macro name is replaced by its replacement list of
7595  preprocessing tokens.) The directive resulting after all replacements shall match one of
7596  the two previous forms.<sup><a href="#note148"><b>148)</b></a></sup> The method by which a sequence of preprocessing tokens
7597  between a &lt; and a &gt; preprocessing token pair or a pair of " characters is combined into a
7598  single header name preprocessing token is implementation-defined.
7599 <p><!--para 5-->
7600  The implementation shall provide unique mappings for sequences consisting of one or
7601  more nondigits or digits (<a href="#6.4.2.1">6.4.2.1</a>) followed by a period (.) and a single nondigit. The
7602  first character shall not be a digit. The implementation may ignore distinctions of
7603  alphabetical case and restrict the mapping to eight significant characters before the
7604  period.
7605 <p><!--para 6-->
7606  A #include preprocessing directive may appear in a source file that has been read
7607  because of a #include directive in another file, up to an implementation-defined
7608  nesting limit (see <a href="#5.2.4.1">5.2.4.1</a>).
7609 <p><!--para 7-->
7610  EXAMPLE 1       The most common uses of #include preprocessing directives are as in the following:
7611 <pre>
7612           #include <a href="#7.19">&lt;stdio.h&gt;</a>
7613           #include "myprog.h"</pre>
7614  
7615 <p><!--para 8-->
7616  EXAMPLE 2       This illustrates macro-replaced #include directives:
7617  
7618  
7619  
7620  
7621 <!--page 163 indent 4-->
7622 <pre>
7623         #if VERSION == 1
7624               #define INCFILE        "vers1.h"
7625         #elif VERSION == 2
7626               #define INCFILE        "vers2.h"      // and so on
7627         #else
7628               #define INCFILE        "versN.h"
7629         #endif
7630         #include INCFILE</pre>
7631  
7632 <p><b> Forward references</b>: macro replacement (<a href="#6.10.3">6.10.3</a>).
7633
7634 <h6>footnotes</h6>
7635 <p><a name="note148">148)</a> Note that adjacent string literals are not concatenated into a single string literal (see the translation
7636  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.
7637
7638
7639 <a name="6.10.3" href="#6.10.3"><h4>6.10.3 Macro replacement</h4></a>
7640 <h6>Constraints</h6>
7641 <p><!--para 1-->
7642  Two replacement lists are identical if and only if the preprocessing tokens in both have
7643  the same number, ordering, spelling, and white-space separation, where all white-space
7644  separations are considered identical.
7645 <p><!--para 2-->
7646  An identifier currently defined as an object-like macro shall not be redefined by another
7647  #define preprocessing directive unless the second definition is an object-like macro
7648  definition and the two replacement lists are identical. Likewise, an identifier currently
7649  defined as a function-like macro shall not be redefined by another #define
7650  preprocessing directive unless the second definition is a function-like macro definition
7651  that has the same number and spelling of parameters, and the two replacement lists are
7652  identical.
7653 <p><!--para 3-->
7654  There shall be white-space between the identifier and the replacement list in the definition
7655  of an object-like macro.
7656 <p><!--para 4-->
7657  If the identifier-list in the macro definition does not end with an ellipsis, the number of
7658  arguments (including those arguments consisting of no preprocessing tokens) in an
7659  invocation of a function-like macro shall equal the number of parameters in the macro
7660  definition. Otherwise, there shall be more arguments in the invocation than there are
7661  parameters in the macro definition (excluding the ...). There shall exist a )
7662  preprocessing token that terminates the invocation.
7663 <p><!--para 5-->
7664  The identifier __VA_ARGS__ shall occur only in the replacement-list of a function-like
7665  macro that uses the ellipsis notation in the parameters.
7666 <p><!--para 6-->
7667  A parameter identifier in a function-like macro shall be uniquely declared within its
7668  scope.
7669 <h6>Semantics</h6>
7670 <p><!--para 7-->
7671  The identifier immediately following the define is called the macro name. There is one
7672  name space for macro names. Any white-space characters preceding or following the
7673  replacement list of preprocessing tokens are not considered part of the replacement list
7674  for either form of macro.
7675 <!--page 164 indent 5-->
7676 <p><!--para 8-->
7677  If a # preprocessing token, followed by an identifier, occurs lexically at the point at which
7678  a preprocessing directive could begin, the identifier is not subject to macro replacement.
7679 <p><!--para 9-->
7680  A preprocessing directive of the form
7681 <pre>
7682     # define identifier replacement-list new-line</pre>
7683  defines an object-like macro that causes each subsequent instance of the macro name<sup><a href="#note149"><b>149)</b></a></sup>
7684  to be replaced by the replacement list of preprocessing tokens that constitute the
7685  remainder of the directive. The replacement list is then rescanned for more macro names
7686  as specified below.
7687 <p><!--para 10-->
7688  A preprocessing directive of the form
7689 <pre>
7690     # define identifier lparen identifier-listopt ) replacement-list new-line
7691     # define identifier lparen ... ) replacement-list new-line
7692     # define identifier lparen identifier-list , ... ) replacement-list new-line</pre>
7693  defines a function-like macro with parameters, whose use is similar syntactically to a
7694  function call. The parameters are specified by the optional list of identifiers, whose scope
7695  extends from their declaration in the identifier list until the new-line character that
7696  terminates the #define preprocessing directive. Each subsequent instance of the
7697  function-like macro name followed by a ( as the next preprocessing token introduces the
7698  sequence of preprocessing tokens that is replaced by the replacement list in the definition
7699  (an invocation of the macro). The replaced sequence of preprocessing tokens is
7700  terminated by the matching ) preprocessing token, skipping intervening matched pairs of
7701  left and right parenthesis preprocessing tokens. Within the sequence of preprocessing
7702  tokens making up an invocation of a function-like macro, new-line is considered a normal
7703  white-space character.
7704 <p><!--para 11-->
7705  The sequence of preprocessing tokens bounded by the outside-most matching parentheses
7706  forms the list of arguments for the function-like macro. The individual arguments within
7707  the list are separated by comma preprocessing tokens, but comma preprocessing tokens
7708  between matching inner parentheses do not separate arguments. If there are sequences of
7709  preprocessing tokens within the list of arguments that would otherwise act as
7710  preprocessing directives,<sup><a href="#note150"><b>150)</b></a></sup> the behavior is undefined.
7711 <p><!--para 12-->
7712  If there is a ... in the identifier-list in the macro definition, then the trailing arguments,
7713  including any separating comma preprocessing tokens, are merged to form a single item:
7714  the variable arguments. The number of arguments so combined is such that, following
7715  
7716  
7717 <!--page 165 indent 4-->
7718  merger, the number of arguments is one more than the number of parameters in the macro
7719  definition (excluding the ...).
7720
7721 <h6>footnotes</h6>
7722 <p><a name="note149">149)</a> Since, by macro-replacement time, all character constants and string literals are preprocessing tokens,
7723  not sequences possibly containing identifier-like subsequences (see <a href="#5.1.1.2">5.1.1.2</a>, translation phases), they
7724  are never scanned for macro names or parameters.
7725
7726 <p><a name="note150">150)</a> Despite the name, a non-directive is a preprocessing directive.
7727
7728
7729 <a name="6.10.3.1" href="#6.10.3.1"><h5>6.10.3.1 Argument substitution</h5></a>
7730 <p><!--para 1-->
7731  After the arguments for the invocation of a function-like macro have been identified,
7732  argument substitution takes place. A parameter in the replacement list, unless preceded
7733  by a # or ## preprocessing token or followed by a ## preprocessing token (see below), is
7734  replaced by the corresponding argument after all macros contained therein have been
7735  expanded. Before being substituted, each argument's preprocessing tokens are
7736  completely macro replaced as if they formed the rest of the preprocessing file; no other
7737  preprocessing tokens are available.
7738 <p><!--para 2-->
7739  An identifier __VA_ARGS__ that occurs in the replacement list shall be treated as if it
7740  were a parameter, and the variable arguments shall form the preprocessing tokens used to
7741  replace it.
7742
7743 <a name="6.10.3.2" href="#6.10.3.2"><h5>6.10.3.2 The # operator</h5></a>
7744 <h6>Constraints</h6>
7745 <p><!--para 1-->
7746  Each # preprocessing token in the replacement list for a function-like macro shall be
7747  followed by a parameter as the next preprocessing token in the replacement list.
7748 <h6>Semantics</h6>
7749 <p><!--para 2-->
7750  If, in the replacement list, a parameter is immediately preceded by a # preprocessing
7751  token, both are replaced by a single character string literal preprocessing token that
7752  contains the spelling of the preprocessing token sequence for the corresponding
7753  argument. Each occurrence of white space between the argument's preprocessing tokens
7754  becomes a single space character in the character string literal. White space before the
7755  first preprocessing token and after the last preprocessing token composing the argument
7756  is deleted. Otherwise, the original spelling of each preprocessing token in the argument
7757  is retained in the character string literal, except for special handling for producing the
7758  spelling of string literals and character constants: a \ character is inserted before each "
7759  and \ character of a character constant or string literal (including the delimiting "
7760  characters), except that it is implementation-defined whether a \ character is inserted
7761  before the \ character beginning a universal character name. If the replacement that
7762  results is not a valid character string literal, the behavior is undefined. The character
7763  string literal corresponding to an empty argument is "". The order of evaluation of # and
7764  ## operators is unspecified.
7765 <!--page 166 indent 4-->
7766
7767 <a name="6.10.3.3" href="#6.10.3.3"><h5>6.10.3.3 The ## operator</h5></a>
7768 <h6>Constraints</h6>
7769 <p><!--para 1-->
7770  A ## preprocessing token shall not occur at the beginning or at the end of a replacement
7771  list for either form of macro definition.
7772 <h6>Semantics</h6>
7773 <p><!--para 2-->
7774  If, in the replacement list of a function-like macro, a parameter is immediately preceded
7775  or followed by a ## preprocessing token, the parameter is replaced by the corresponding
7776  argument's preprocessing token sequence; however, if an argument consists of no
7777  preprocessing tokens, the parameter is replaced by a placemarker preprocessing token
7778  instead.<sup><a href="#note151"><b>151)</b></a></sup>
7779 <p><!--para 3-->
7780  For both object-like and function-like macro invocations, before the replacement list is
7781  reexamined for more macro names to replace, each instance of a ## preprocessing token
7782  in the replacement list (not from an argument) is deleted and the preceding preprocessing
7783  token is concatenated with the following preprocessing token. Placemarker
7784  preprocessing tokens are handled specially: concatenation of two placemarkers results in
7785  a single placemarker preprocessing token, and concatenation of a placemarker with a
7786  non-placemarker preprocessing token results in the non-placemarker preprocessing token.
7787  If the result is not a valid preprocessing token, the behavior is undefined. The resulting
7788  token is available for further macro replacement. The order of evaluation of ## operators
7789  is unspecified.
7790 <p><!--para 4-->
7791  EXAMPLE       In the following fragment:
7792 <pre>
7793          #define     hash_hash # ## #
7794          #define     mkstr(a) # a
7795          #define     in_between(a) mkstr(a)
7796          #define     join(c, d) in_between(c hash_hash d)
7797          char p[] = join(x, y); // equivalent to
7798                                 // char p[] = "x ## y";</pre>
7799  The expansion produces, at various stages:
7800 <pre>
7801          join(x, y)
7802          in_between(x hash_hash y)
7803          in_between(x ## y)
7804          mkstr(x ## y)
7805          "x ## y"</pre>
7806  In other words, expanding hash_hash produces a new token, consisting of two adjacent sharp signs, but
7807  this new token is not the ## operator.
7808  
7809  
7810 <!--page 167 indent 4-->
7811
7812 <h6>footnotes</h6>
7813 <p><a name="note151">151)</a> Placemarker preprocessing tokens do not appear in the syntax because they are temporary entities that
7814  exist only within translation phase 4.
7815
7816
7817 <a name="6.10.3.4" href="#6.10.3.4"><h5>6.10.3.4 Rescanning and further replacement</h5></a>
7818 <p><!--para 1-->
7819  After all parameters in the replacement list have been substituted and # and ##
7820  processing has taken place, all placemarker preprocessing tokens are removed. Then, the
7821  resulting preprocessing token sequence is rescanned, along with all subsequent
7822  preprocessing tokens of the source file, for more macro names to replace.
7823 <p><!--para 2-->
7824  If the name of the macro being replaced is found during this scan of the replacement list
7825  (not including the rest of the source file's preprocessing tokens), it is not replaced.
7826  Furthermore, if any nested replacements encounter the name of the macro being replaced,
7827  it is not replaced. These nonreplaced macro name preprocessing tokens are no longer
7828  available for further replacement even if they are later (re)examined in contexts in which
7829  that macro name preprocessing token would otherwise have been replaced.
7830 <p><!--para 3-->
7831  The resulting completely macro-replaced preprocessing token sequence is not processed
7832  as a preprocessing directive even if it resembles one, but all pragma unary operator
7833  expressions within it are then processed as specified in <a href="#6.10.9">6.10.9</a> below.
7834
7835 <a name="6.10.3.5" href="#6.10.3.5"><h5>6.10.3.5 Scope of macro definitions</h5></a>
7836 <p><!--para 1-->
7837  A macro definition lasts (independent of block structure) until a corresponding #undef
7838  directive is encountered or (if none is encountered) until the end of the preprocessing
7839  translation unit. Macro definitions have no significance after translation phase 4.
7840 <p><!--para 2-->
7841  A preprocessing directive of the form
7842 <pre>
7843     # undef identifier new-line</pre>
7844  causes the specified identifier no longer to be defined as a macro name. It is ignored if
7845  the specified identifier is not currently defined as a macro name.
7846 <p><!--para 3-->
7847  EXAMPLE 1      The simplest use of this facility is to define a ''manifest constant'', as in
7848 <pre>
7849          #define TABSIZE 100
7850          int table[TABSIZE];</pre>
7851  
7852 <p><!--para 4-->
7853  EXAMPLE 2 The following defines a function-like macro whose value is the maximum of its arguments.
7854  It has the advantages of working for any compatible types of the arguments and of generating in-line code
7855  without the overhead of function calling. It has the disadvantages of evaluating one or the other of its
7856  arguments a second time (including side effects) and generating more code than a function if invoked
7857  several times. It also cannot have its address taken, as it has none.
7858 <pre>
7859          #define max(a, b) ((a) &gt; (b) ? (a) : (b))</pre>
7860  The parentheses ensure that the arguments and the resulting expression are bound properly.
7861 <!--page 168 indent 4-->
7862 <p><!--para 5-->
7863  EXAMPLE 3     To illustrate the rules for redefinition and reexamination, the sequence
7864 <pre>
7865           #define   x         3
7866           #define   f(a)      f(x * (a))
7867           #undef    x
7868           #define   x         2
7869           #define   g         f
7870           #define   z         z[0]
7871           #define   h         g(~
7872           #define   m(a)      a(w)
7873           #define   w         0,1
7874           #define   t(a)      a
7875           #define   p()       int
7876           #define   q(x)      x
7877           #define   r(x,y)    x ## y
7878           #define   str(x)    # x
7879           f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);
7880           g(x+(3,4)-w) | h 5) &amp; m
7881                 (f)^m(m);
7882           p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) };
7883           char c[2][6] = { str(hello), str() };</pre>
7884  results in
7885 <pre>
7886           f(2 * (y+1)) + f(2 * (f(2 * (z[0])))) % f(2 * (0)) + t(1);
7887           f(2 * (2+(3,4)-0,1)) | f(2 * (~ 5)) &amp; f(2 * (0,1))^m(0,1);
7888           int i[] = { 1, 23, 4, 5, };
7889           char c[2][6] = { "hello", "" };</pre>
7890  
7891 <p><!--para 6-->
7892  EXAMPLE 4     To illustrate the rules for creating character string literals and concatenating tokens, the
7893  sequence
7894 <pre>
7895           #define str(s)      # s
7896           #define xstr(s)     str(s)
7897           #define debug(s, t) printf("x" # s "= %d, x" # t "= %s", \
7898                                   x ## s, x ## t)
7899           #define INCFILE(n) vers ## n
7900           #define glue(a, b) a ## b
7901           #define xglue(a, b) glue(a, b)
7902           #define HIGHLOW     "hello"
7903           #define LOW         LOW ", world"
7904           debug(1, 2);
7905           fputs(str(strncmp("abc\0d", "abc", '\4') // this goes away
7906                 == 0) str(: @\n), s);
7907           #include xstr(INCFILE(2).h)
7908           glue(HIGH, LOW);
7909           xglue(HIGH, LOW)</pre>
7910  results in
7911 <!--page 169 indent 4-->
7912 <pre>
7913           printf("x" "1" "= %d, x" "2" "= %s", x1, x2);
7914           fputs(
7915             "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0" ": @\n",
7916             s);
7917           #include "vers2.h"    (after macro replacement, before file access)
7918           "hello";
7919           "hello" ", world"</pre>
7920  or, after concatenation of the character string literals,
7921 <pre>
7922           printf("x1= %d, x2= %s", x1, x2);
7923           fputs(
7924             "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0: @\n",
7925             s);
7926           #include "vers2.h"    (after macro replacement, before file access)
7927           "hello";
7928           "hello, world"</pre>
7929  Space around the # and ## tokens in the macro definition is optional.
7930  
7931 <p><!--para 7-->
7932  EXAMPLE 5        To illustrate the rules for placemarker preprocessing tokens, the sequence
7933 <pre>
7934           #define t(x,y,z) x ## y ## z
7935           int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,),
7936                      t(10,,), t(,11,), t(,,12), t(,,) };</pre>
7937  results in
7938 <pre>
7939           int j[] = { 123, 45, 67, 89,
7940                       10, 11, 12, };</pre>
7941  
7942 <p><!--para 8-->
7943  EXAMPLE 6        To demonstrate the redefinition rules, the following sequence is valid.
7944 <pre>
7945           #define      OBJ_LIKE      (1-1)
7946           #define      OBJ_LIKE      /* white space */ (1-1) /* other */
7947           #define      FUNC_LIKE(a)   ( a )
7948           #define      FUNC_LIKE( a )( /* note the white space */ \
7949                                        a /* other stuff on this line
7950                                            */ )</pre>
7951  But the following redefinitions are invalid:
7952 <pre>
7953           #define      OBJ_LIKE    (0)     // different token sequence
7954           #define      OBJ_LIKE    (1 - 1) // different white space
7955           #define      FUNC_LIKE(b) ( a ) // different parameter usage
7956           #define      FUNC_LIKE(b) ( b ) // different parameter spelling</pre>
7957  
7958 <p><!--para 9-->
7959  EXAMPLE 7        Finally, to show the variable argument list macro facilities:
7960 <!--page 170 indent 4-->
7961 <pre>
7962           #define debug(...)       fprintf(stderr, __VA_ARGS__)
7963           #define showlist(...)    puts(#__VA_ARGS__)
7964           #define report(test, ...) ((test)?puts(#test):\
7965                       printf(__VA_ARGS__))
7966           debug("Flag");
7967           debug("X = %d\n", x);
7968           showlist(The first, second, and third items.);
7969           report(x&gt;y, "x is %d but y is %d", x, y);</pre>
7970  results in
7971 <pre>
7972           fprintf(stderr, "Flag" );
7973           fprintf(stderr, "X = %d\n", x );
7974           puts( "The first, second, and third items." );
7975           ((x&gt;y)?puts("x&gt;y"):
7976                       printf("x is %d but y is %d", x, y));</pre>
7977  
7978
7979 <a name="6.10.4" href="#6.10.4"><h4>6.10.4 Line control</h4></a>
7980 <h6>Constraints</h6>
7981 <p><!--para 1-->
7982  The string literal of a #line directive, if present, shall be a character string literal.
7983 <h6>Semantics</h6>
7984 <p><!--para 2-->
7985  The line number of the current source line is one greater than the number of new-line
7986  characters read or introduced in translation phase 1 (<a href="#5.1.1.2">5.1.1.2</a>) while processing the source
7987  file to the current token.
7988 <p><!--para 3-->
7989  A preprocessing directive of the form
7990 <pre>
7991     # line digit-sequence new-line</pre>
7992  causes the implementation to behave as if the following sequence of source lines begins
7993  with a source line that has a line number as specified by the digit sequence (interpreted as
7994  a decimal integer). The digit sequence shall not specify zero, nor a number greater than
7995  2147483647.
7996 <p><!--para 4-->
7997  A preprocessing directive of the form
7998 <pre>
7999     # line digit-sequence "s-char-sequenceopt" new-line</pre>
8000  sets the presumed line number similarly and changes the presumed name of the source
8001  file to be the contents of the character string literal.
8002 <p><!--para 5-->
8003  A preprocessing directive of the form
8004 <pre>
8005     # line pp-tokens new-line</pre>
8006  (that does not match one of the two previous forms) is permitted. The preprocessing
8007  tokens after line on the directive are processed just as in normal text (each identifier
8008  currently defined as a macro name is replaced by its replacement list of preprocessing
8009  tokens). The directive resulting after all replacements shall match one of the two
8010  previous forms and is then processed as appropriate.
8011 <!--page 171 indent 4-->
8012
8013 <a name="6.10.5" href="#6.10.5"><h4>6.10.5 Error directive</h4></a>
8014 <h6>Semantics</h6>
8015 <p><!--para 1-->
8016  A preprocessing directive of the form
8017 <pre>
8018     # error pp-tokensopt new-line</pre>
8019  causes the implementation to produce a diagnostic message that includes the specified
8020  sequence of preprocessing tokens.
8021
8022 <a name="6.10.6" href="#6.10.6"><h4>6.10.6 Pragma directive</h4></a>
8023 <h6>Semantics</h6>
8024 <p><!--para 1-->
8025  A preprocessing directive of the form
8026 <pre>
8027     # pragma pp-tokensopt new-line</pre>
8028  where the preprocessing token STDC does not immediately follow pragma in the
8029  directive (prior to any macro replacement)<sup><a href="#note152"><b>152)</b></a></sup> causes the implementation to behave in an
8030  implementation-defined manner. The behavior might cause translation to fail or cause the
8031  translator or the resulting program to behave in a non-conforming manner. Any such
8032  pragma that is not recognized by the implementation is ignored.
8033 <p><!--para 2-->
8034  If the preprocessing token STDC does immediately follow pragma in the directive (prior
8035  to any macro replacement), then no macro replacement is performed on the directive, and
8036  the directive shall have one of the following forms<sup><a href="#note153"><b>153)</b></a></sup> whose meanings are described
8037  elsewhere:
8038 <pre>
8039     #pragma STDC FP_CONTRACT on-off-switch
8040     #pragma STDC FENV_ACCESS on-off-switch
8041     #pragma STDC CX_LIMITED_RANGE on-off-switch
8042     on-off-switch: one of
8043                 ON     OFF           DEFAULT</pre>
8044 <p><b> Forward references</b>: the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>), the FENV_ACCESS pragma
8045  (<a href="#7.6.1">7.6.1</a>), the CX_LIMITED_RANGE pragma (<a href="#7.3.4">7.3.4</a>).
8046  
8047  
8048  
8049  
8050 <!--page 172 indent 4-->
8051
8052 <h6>footnotes</h6>
8053 <p><a name="note152">152)</a> An implementation is not required to perform macro replacement in pragmas, but it is permitted
8054  except for in standard pragmas (where STDC immediately follows pragma). If the result of macro
8055  replacement in a non-standard pragma has the same form as a standard pragma, the behavior is still
8056  implementation-defined; an implementation is permitted to behave as if it were the standard pragma,
8057  but is not required to.
8058
8059 <p><a name="note153">153)</a> See ''future language directions'' (<a href="#6.11.8">6.11.8</a>).
8060
8061
8062 <a name="6.10.7" href="#6.10.7"><h4>6.10.7 Null directive</h4></a>
8063 <h6>Semantics</h6>
8064 <p><!--para 1-->
8065  A preprocessing directive of the form
8066 <pre>
8067     # new-line</pre>
8068  has no effect.
8069
8070 <a name="6.10.8" href="#6.10.8"><h4>6.10.8 Predefined macro names</h4></a>
8071 <p><!--para 1-->
8072  The following macro names<sup><a href="#note154"><b>154)</b></a></sup> shall be defined by the implementation:
8073  __DATE__ The date of translation of the preprocessing translation unit: a character
8074 <pre>
8075             string literal of the form "Mmm dd yyyy", where the names of the
8076             months are the same as those generated by the asctime function, and the
8077             first character of dd is a space character if the value is less than 10. If the
8078             date of translation is not available, an implementation-defined valid date
8079             shall be supplied.</pre>
8080  __FILE__ The presumed name of the current source file (a character string literal).<sup><a href="#note155"><b>155)</b></a></sup>
8081  __LINE__ The presumed line number (within the current source file) of the current
8082 <pre>
8083             source line (an integer constant).155)</pre>
8084  __STDC__ The integer constant 1, intended to indicate a conforming implementation.
8085  __STDC_HOSTED__ The integer constant 1 if the implementation is a hosted
8086 <pre>
8087            implementation or the integer constant 0 if it is not.</pre>
8088  __STDC_MB_MIGHT_NEQ_WC__ The integer constant 1, intended to indicate that, in
8089 <pre>
8090            the encoding for wchar_t, a member of the basic character set need not
8091            have a code value equal to its value when used as the lone character in an
8092            integer character constant.</pre>
8093  __STDC_VERSION__ The integer constant 199901L.<sup><a href="#note156"><b>156)</b></a></sup>
8094  __TIME__ The time of translation of the preprocessing translation unit: a character
8095 <pre>
8096             string literal of the form "hh:mm:ss" as in the time generated by the
8097             asctime function. If the time of translation is not available, an
8098             implementation-defined valid time shall be supplied.</pre>
8099  
8100  
8101  
8102 <!--page 173 indent 4-->
8103 <p><!--para 2-->
8104  The following macro names are conditionally defined by the implementation:
8105  __STDC_IEC_559__ The integer constant 1, intended to indicate conformance to the
8106 <pre>
8107            specifications in <a href="#F">annex F</a> (IEC 60559 floating-point arithmetic).</pre>
8108  __STDC_IEC_559_COMPLEX__ The integer constant 1, intended to indicate
8109 <pre>
8110            adherence to the specifications in informative <a href="#G">annex G</a> (IEC 60559
8111            compatible complex arithmetic).</pre>
8112  __STDC_ISO_10646__ An integer constant of the form yyyymmL (for example,
8113 <p><!--para 3-->
8114 <pre>
8115            199712L). If this symbol is defined, then every character in the Unicode
8116            required set, when stored in an object of type wchar_t, has the same
8117            value as the short identifier of that character. The Unicode required set
8118            consists of all the characters that are defined by ISO/IEC 10646, along with
8119            all amendments and technical corrigenda, as of the specified year and
8120            month.</pre>
8121  The values of the predefined macros (except for __FILE__ and __LINE__) remain
8122  constant throughout the translation unit.
8123 <p><!--para 4-->
8124  None of these macro names, nor the identifier defined, shall be the subject of a
8125  #define or a #undef preprocessing directive. Any other predefined macro names
8126  shall begin with a leading underscore followed by an uppercase letter or a second
8127  underscore.
8128 <p><!--para 5-->
8129  The implementation shall not predefine the macro __cplusplus, nor shall it define it
8130  in any standard header.
8131 <p><b> Forward references</b>: the asctime function (<a href="#7.23.3.1">7.23.3.1</a>), standard headers (<a href="#7.1.2">7.1.2</a>).
8132
8133 <h6>footnotes</h6>
8134 <p><a name="note154">154)</a> See ''future language directions'' (<a href="#6.11.9">6.11.9</a>).
8135
8136 <p><a name="note155">155)</a> The presumed source file name and line number can be changed by the #line directive.
8137
8138 <p><a name="note156">156)</a> This macro was not specified in ISO/IEC 9899:1990 and was specified as 199409L in
8139  ISO/IEC 9899/AMD1:1995. The intention is that this will remain an integer constant of type long
8140  int that is increased with each revision of this International Standard.
8141
8142
8143 <a name="6.10.9" href="#6.10.9"><h4>6.10.9 Pragma operator</h4></a>
8144 <h6>Semantics</h6>
8145 <p><!--para 1-->
8146  A unary operator expression of the form:
8147 <pre>
8148     _Pragma ( string-literal )</pre>
8149  is processed as follows: The string literal is destringized by deleting the L prefix, if
8150  present, deleting the leading and trailing double-quotes, replacing each escape sequence
8151  \" by a double-quote, and replacing each escape sequence \\ by a single backslash. The
8152  resulting sequence of characters is processed through translation phase 3 to produce
8153  preprocessing tokens that are executed as if they were the pp-tokens in a pragma
8154  directive. The original four preprocessing tokens in the unary operator expression are
8155  removed.
8156 <p><!--para 2-->
8157  EXAMPLE       A directive of the form:
8158 <pre>
8159           #pragma listing on "..\listing.dir"</pre>
8160  can also be expressed as:
8161 <!--page 174 indent 0-->
8162 <pre>
8163          _Pragma ( "listing on \"..\\listing.dir\"" )</pre>
8164  The latter form is processed in the same way whether it appears literally as shown, or results from macro
8165  replacement, as in:
8166 <!--page 175 indent 4-->
8167 <pre>
8168          #define LISTING(x) PRAGMA(listing on #x)
8169          #define PRAGMA(x) _Pragma(#x)
8170          LISTING ( ..\listing.dir )</pre>
8171
8172 <a name="6.11" href="#6.11"><h3>6.11 Future language directions</h3></a>
8173
8174 <a name="6.11.1" href="#6.11.1"><h4>6.11.1 Floating types</h4></a>
8175 <p><!--para 1-->
8176  Future standardization may include additional floating-point types, including those with
8177  greater range, precision, or both than long double.
8178
8179 <a name="6.11.2" href="#6.11.2"><h4>6.11.2 Linkages of identifiers</h4></a>
8180 <p><!--para 1-->
8181  Declaring an identifier with internal linkage at file scope without the static storage-
8182  class specifier is an obsolescent feature.
8183
8184 <a name="6.11.3" href="#6.11.3"><h4>6.11.3 External names</h4></a>
8185 <p><!--para 1-->
8186  Restriction of the significance of an external name to fewer than 255 characters
8187  (considering each universal character name or extended source character as a single
8188  character) is an obsolescent feature that is a concession to existing implementations.
8189
8190 <a name="6.11.4" href="#6.11.4"><h4>6.11.4 Character escape sequences</h4></a>
8191 <p><!--para 1-->
8192  Lowercase letters as escape sequences are reserved for future standardization. Other
8193  characters may be used in extensions.
8194
8195 <a name="6.11.5" href="#6.11.5"><h4>6.11.5 Storage-class specifiers</h4></a>
8196 <p><!--para 1-->
8197  The placement of a storage-class specifier other than at the beginning of the declaration
8198  specifiers in a declaration is an obsolescent feature.
8199
8200 <a name="6.11.6" href="#6.11.6"><h4>6.11.6 Function declarators</h4></a>
8201 <p><!--para 1-->
8202  The use of function declarators with empty parentheses (not prototype-format parameter
8203  type declarators) is an obsolescent feature.
8204
8205 <a name="6.11.7" href="#6.11.7"><h4>6.11.7 Function definitions</h4></a>
8206 <p><!--para 1-->
8207  The use of function definitions with separate parameter identifier and declaration lists
8208  (not prototype-format parameter type and identifier declarators) is an obsolescent feature.
8209
8210 <a name="6.11.8" href="#6.11.8"><h4>6.11.8 Pragma directives</h4></a>
8211 <p><!--para 1-->
8212  Pragmas whose first preprocessing token is STDC are reserved for future standardization.
8213
8214 <a name="6.11.9" href="#6.11.9"><h4>6.11.9 Predefined macro names</h4></a>
8215 <p><!--para 1-->
8216  Macro names beginning with __STDC_ are reserved for future standardization.
8217 <!--page 176 indent 4-->
8218
8219 <a name="7" href="#7"><h2>7. Library</h2></a>
8220  
8221
8222 <a name="7.1" href="#7.1"><h3>7.1 Introduction</h3></a>
8223
8224 <a name="7.1.1" href="#7.1.1"><h4>7.1.1 Definitions of terms</h4></a>
8225 <p><!--para 1-->
8226  A string is a contiguous sequence of characters terminated by and including the first null
8227  character. The term multibyte string is sometimes used instead to emphasize special
8228  processing given to multibyte characters contained in the string or to avoid confusion
8229  with a wide string. A pointer to a string is a pointer to its initial (lowest addressed)
8230  character. The length of a string is the number of bytes preceding the null character and
8231  the value of a string is the sequence of the values of the contained characters, in order.
8232 <p><!--para 2-->
8233  The decimal-point character is the character used by functions that convert floating-point
8234  numbers to or from character sequences to denote the beginning of the fractional part of
8235  such character sequences.<sup><a href="#note157"><b>157)</b></a></sup> It is represented in the text and examples by a period, but
8236  may be changed by the setlocale function.
8237 <p><!--para 3-->
8238  A null wide character is a wide character with code value zero.
8239 <p><!--para 4-->
8240  A wide string is a contiguous sequence of wide characters terminated by and including
8241  the first null wide character. A pointer to a wide string is a pointer to its initial (lowest
8242  addressed) wide character. The length of a wide string is the number of wide characters
8243  preceding the null wide character and the value of a wide string is the sequence of code
8244  values of the contained wide characters, in order.
8245 <p><!--para 5-->
8246  A shift sequence is a contiguous sequence of bytes within a multibyte string that
8247  (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
8248  corresponding wide character; it is instead taken to be an adjunct to an adjacent multibyte
8249  character.<sup><a href="#note158"><b>158)</b></a></sup>
8250 <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>).
8251  
8252  
8253  
8254  
8255 <!--page 177 indent 4-->
8256
8257 <h6>footnotes</h6>
8258 <p><a name="note157">157)</a> The functions that make use of the decimal-point character are the numeric conversion functions
8259  (<a href="#7.20.1">7.20.1</a>, <a href="#7.24.4.1">7.24.4.1</a>) and the formatted input/output functions (<a href="#7.19.6">7.19.6</a>, <a href="#7.24.2">7.24.2</a>).
8260
8261 <p><a name="note158">158)</a> For state-dependent encodings, the values for MB_CUR_MAX and MB_LEN_MAX shall thus be large
8262  enough to count all the bytes in any complete multibyte character plus at least one adjacent shift
8263  sequence of maximum length. Whether these counts provide for more than one shift sequence is the
8264  implementation's choice.
8265
8266
8267 <a name="7.1.2" href="#7.1.2"><h4>7.1.2 Standard headers</h4></a>
8268 <p><!--para 1-->
8269  Each library function is declared, with a type that includes a prototype, in a header,<sup><a href="#note159"><b>159)</b></a></sup>
8270  whose contents are made available by the #include preprocessing directive. The
8271  header declares a set of related functions, plus any necessary types and additional macros
8272  needed to facilitate their use. Declarations of types described in this clause shall not
8273  include type qualifiers, unless explicitly stated otherwise.
8274 <p><!--para 2-->
8275  The standard headers are
8276 <p><!--para 3-->
8277 <pre>
8278         <a href="#7.2">&lt;assert.h&gt;</a>             <a href="#7.8">&lt;inttypes.h&gt;</a>            <a href="#7.14">&lt;signal.h&gt;</a>              <a href="#7.20">&lt;stdlib.h&gt;</a>
8279         <a href="#7.3">&lt;complex.h&gt;</a>            <a href="#7.9">&lt;iso646.h&gt;</a>              <a href="#7.15">&lt;stdarg.h&gt;</a>              <a href="#7.21">&lt;string.h&gt;</a>
8280         <a href="#7.4">&lt;ctype.h&gt;</a>              <a href="#7.10">&lt;limits.h&gt;</a>              <a href="#7.16">&lt;stdbool.h&gt;</a>             <a href="#7.22">&lt;tgmath.h&gt;</a>
8281         <a href="#7.5">&lt;errno.h&gt;</a>              <a href="#7.11">&lt;locale.h&gt;</a>              <a href="#7.17">&lt;stddef.h&gt;</a>              <a href="#7.23">&lt;time.h&gt;</a>
8282         <a href="#7.6">&lt;fenv.h&gt;</a>               <a href="#7.12">&lt;math.h&gt;</a>                <a href="#7.18">&lt;stdint.h&gt;</a>              <a href="#7.24">&lt;wchar.h&gt;</a>
8283         <a href="#7.7">&lt;float.h&gt;</a>              <a href="#7.13">&lt;setjmp.h&gt;</a>              <a href="#7.19">&lt;stdio.h&gt;</a>               <a href="#7.25">&lt;wctype.h&gt;</a></pre>
8284  If a file with the same name as one of the above &lt; and &gt; delimited sequences, not
8285  provided as part of the implementation, is placed in any of the standard places that are
8286  searched for included source files, the behavior is undefined.
8287 <p><!--para 4-->
8288  Standard headers may be included in any order; each may be included more than once in
8289  a given scope, with no effect different from being included only once, except that the
8290  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
8291  used, a header shall be included outside of any external declaration or definition, and it
8292  shall first be included before the first reference to any of the functions or objects it
8293  declares, or to any of the types or macros it defines. However, if an identifier is declared
8294  or defined in more than one header, the second and subsequent associated headers may be
8295  included after the initial reference to the identifier. The program shall not have any
8296  macros with names lexically identical to keywords currently defined prior to the
8297  inclusion.
8298 <p><!--para 5-->
8299  Any definition of an object-like macro described in this clause shall expand to code that is
8300  fully protected by parentheses where necessary, so that it groups in an arbitrary
8301  expression as if it were a single identifier.
8302 <p><!--para 6-->
8303  Any declaration of a library function shall have external linkage.
8304 <p><!--para 7-->
8305  A summary of the contents of the standard headers is given in <a href="#B">annex B</a>.
8306 <p><b> Forward references</b>: diagnostics (<a href="#7.2">7.2</a>).
8307  
8308  
8309  
8310  
8311 <!--page 178 indent 4-->
8312
8313 <h6>footnotes</h6>
8314 <p><a name="note159">159)</a> A header is not necessarily a source file, nor are the &lt; and &gt; delimited sequences in header names
8315  necessarily valid source file names.
8316
8317
8318 <a name="7.1.3" href="#7.1.3"><h4>7.1.3 Reserved identifiers</h4></a>
8319 <p><!--para 1-->
8320  Each header declares or defines all identifiers listed in its associated subclause, and
8321  optionally declares or defines identifiers listed in its associated future library directions
8322  subclause and identifiers which are always reserved either for any use or for use as file
8323  scope identifiers.
8324 <ul>
8325 <li>  All identifiers that begin with an underscore and either an uppercase letter or another
8326  underscore are always reserved for any use.
8327 <li>  All identifiers that begin with an underscore are always reserved for use as identifiers
8328  with file scope in both the ordinary and tag name spaces.
8329 <li>  Each macro name in any of the following subclauses (including the future library
8330  directions) is reserved for use as specified if any of its associated headers is included;
8331  unless explicitly stated otherwise (see <a href="#7.1.4">7.1.4</a>).
8332 <li>  All identifiers with external linkage in any of the following subclauses (including the
8333  future library directions) are always reserved for use as identifiers with external
8334  linkage.<sup><a href="#note160"><b>160)</b></a></sup>
8335 <li>  Each identifier with file scope listed in any of the following subclauses (including the
8336  future library directions) is reserved for use as a macro name and as an identifier with
8337  file scope in the same name space if any of its associated headers is included.
8338 </ul>
8339 <p><!--para 2-->
8340  No other identifiers are reserved. If the program declares or defines an identifier in a
8341  context in which it is reserved (other than as allowed by <a href="#7.1.4">7.1.4</a>), or defines a reserved
8342  identifier as a macro name, the behavior is undefined.
8343 <p><!--para 3-->
8344  If the program removes (with #undef) any macro definition of an identifier in the first
8345  group listed above, the behavior is undefined.
8346
8347 <h6>footnotes</h6>
8348 <p><a name="note160">160)</a> The list of reserved identifiers with external linkage includes errno, math_errhandling,
8349  setjmp, and va_end.
8350
8351
8352 <a name="7.1.4" href="#7.1.4"><h4>7.1.4 Use of library functions</h4></a>
8353 <p><!--para 1-->
8354  Each of the following statements applies unless explicitly stated otherwise in the detailed
8355  descriptions that follow: If an argument to a function has an invalid value (such as a value
8356  outside the domain of the function, or a pointer outside the address space of the program,
8357  or a null pointer, or a pointer to non-modifiable storage when the corresponding
8358  parameter is not const-qualified) or a type (after promotion) not expected by a function
8359  with variable number of arguments, the behavior is undefined. If a function argument is
8360  described as being an array, the pointer actually passed to the function shall have a value
8361  such that all address computations and accesses to objects (that would be valid if the
8362  pointer did point to the first element of such an array) are in fact valid. Any function
8363  declared in a header may be additionally implemented as a function-like macro defined in
8364  
8365 <!--page 179 indent 4-->
8366  the header, so if a library function is declared explicitly when its header is included, one
8367  of the techniques shown below can be used to ensure the declaration is not affected by
8368  such a macro. Any macro definition of a function can be suppressed locally by enclosing
8369  the name of the function in parentheses, because the name is then not followed by the left
8370  parenthesis that indicates expansion of a macro function name. For the same syntactic
8371  reason, it is permitted to take the address of a library function even if it is also defined as
8372  a macro.<sup><a href="#note161"><b>161)</b></a></sup> The use of #undef to remove any macro definition will also ensure that an
8373  actual function is referred to. Any invocation of a library function that is implemented as
8374  a macro shall expand to code that evaluates each of its arguments exactly once, fully
8375  protected by parentheses where necessary, so it is generally safe to use arbitrary
8376  expressions as arguments.<sup><a href="#note162"><b>162)</b></a></sup> Likewise, those function-like macros described in the
8377  following subclauses may be invoked in an expression anywhere a function with a
8378  compatible return type could be called.<sup><a href="#note163"><b>163)</b></a></sup> All object-like macros listed as expanding to
8379  integer constant expressions shall additionally be suitable for use in #if preprocessing
8380  directives.
8381 <p><!--para 2-->
8382  Provided that a library function can be declared without reference to any type defined in a
8383  header, it is also permissible to declare the function and use it without including its
8384  associated header.
8385 <p><!--para 3-->
8386  There is a sequence point immediately before a library function returns.
8387 <p><!--para 4-->
8388  The functions in the standard library are not guaranteed to be reentrant and may modify
8389  objects with static storage duration.<sup><a href="#note164"><b>164)</b></a></sup>
8390  
8391  
8392  
8393 <!--page 180 indent 4-->
8394 <p><!--para 5-->
8395  EXAMPLE       The function atoi may be used in any of several ways:
8396 <ul>
8397 <li>  by use of its associated header (possibly generating a macro expansion)
8398 <pre>
8399            #include <a href="#7.20">&lt;stdlib.h&gt;</a>
8400            const char *str;
8401            /* ... */
8402            i = atoi(str);</pre>
8403 <li>  by use of its associated header (assuredly generating a true function reference)
8404 <pre>
8405            #include <a href="#7.20">&lt;stdlib.h&gt;</a>
8406            #undef atoi
8407            const char *str;
8408            /* ... */
8409            i = atoi(str);</pre>
8410   or
8411 <pre>
8412            #include <a href="#7.20">&lt;stdlib.h&gt;</a>
8413            const char *str;
8414            /* ... */
8415            i = (atoi)(str);</pre>
8416 <li>  by explicit declaration
8417 <!--page 181 indent 4-->
8418 <pre>
8419            extern int atoi(const char *);
8420            const char *str;
8421            /* ... */
8422            i = atoi(str);</pre>
8423 </ul>
8424
8425 <h6>footnotes</h6>
8426 <p><a name="note161">161)</a> This means that an implementation shall provide an actual function for each library function, even if it
8427  also provides a macro for that function.
8428
8429 <p><a name="note162">162)</a> Such macros might not contain the sequence points that the corresponding function calls do.
8430
8431 <p><a name="note163">163)</a> Because external identifiers and some macro names beginning with an underscore are reserved,
8432  implementations may provide special semantics for such names. For example, the identifier
8433  _BUILTIN_abs could be used to indicate generation of in-line code for the abs function. Thus, the
8434  appropriate header could specify
8435
8436 <pre>
8437           #define abs(x) _BUILTIN_abs(x)</pre>
8438  for a compiler whose code generator will accept it.
8439  In this manner, a user desiring to guarantee that a given library function such as abs will be a genuine
8440  function may write
8441
8442 <pre>
8443           #undef abs</pre>
8444  whether the implementation's header provides a macro implementation of abs or a built-in
8445  implementation. The prototype for the function, which precedes and is hidden by any macro
8446  definition, is thereby revealed also.
8447
8448 <p><a name="note164">164)</a> Thus, a signal handler cannot, in general, call standard library functions.
8449
8450
8451 <a name="7.2" href="#7.2"><h3>7.2 Diagnostics <assert.h></h3></a>
8452 <p><!--para 1-->
8453  The header <a href="#7.2">&lt;assert.h&gt;</a> defines the assert macro and refers to another macro,
8454 <pre>
8455          NDEBUG</pre>
8456  which is not defined by <a href="#7.2">&lt;assert.h&gt;</a>. If NDEBUG is defined as a macro name at the
8457  point in the source file where <a href="#7.2">&lt;assert.h&gt;</a> is included, the assert macro is defined
8458  simply as
8459 <pre>
8460          #define assert(ignore) ((void)0)</pre>
8461  The assert macro is redefined according to the current state of NDEBUG each time that
8462  <a href="#7.2">&lt;assert.h&gt;</a> is included.
8463 <p><!--para 2-->
8464  The assert macro shall be implemented as a macro, not as an actual function. If the
8465  macro definition is suppressed in order to access an actual function, the behavior is
8466  undefined.
8467
8468 <a name="7.2.1" href="#7.2.1"><h4>7.2.1 Program diagnostics</h4></a>
8469
8470 <a name="7.2.1.1" href="#7.2.1.1"><h5>7.2.1.1 The assert macro</h5></a>
8471 <h6>Synopsis</h6>
8472 <p><!--para 1-->
8473 <pre>
8474          #include <a href="#7.2">&lt;assert.h&gt;</a>
8475          void assert(scalar expression);</pre>
8476 <h6>Description</h6>
8477 <p><!--para 2-->
8478  The assert macro puts diagnostic tests into programs; it expands to a void expression.
8479  When it is executed, if expression (which shall have a scalar type) is false (that is,
8480  compares equal to 0), the assert macro writes information about the particular call that
8481  failed (including the text of the argument, the name of the source file, the source line
8482  number, and the name of the enclosing function -- the latter are respectively the values of
8483  the preprocessing macros __FILE__ and __LINE__ and of the identifier
8484  __func__) on the standard error stream in an implementation-defined format.<sup><a href="#note165"><b>165)</b></a></sup> It
8485  then calls the abort function.
8486 <h6>Returns</h6>
8487 <p><!--para 3-->
8488  The assert macro returns no value.
8489 <p><b> Forward references</b>: the abort function (<a href="#7.20.4.1">7.20.4.1</a>).
8490  
8491  
8492  
8493  
8494 <!--page 182 indent 4-->
8495
8496 <h6>footnotes</h6>
8497 <p><a name="note165">165)</a> The message written might be of the form:
8498  Assertion failed: expression, function abc, file xyz, line nnn.
8499
8500
8501 <a name="7.3" href="#7.3"><h3>7.3 Complex arithmetic <complex.h></h3></a>
8502
8503 <a name="7.3.1" href="#7.3.1"><h4>7.3.1 Introduction</h4></a>
8504 <p><!--para 1-->
8505  The header <a href="#7.3">&lt;complex.h&gt;</a> defines macros and declares functions that support complex
8506  arithmetic.<sup><a href="#note166"><b>166)</b></a></sup> Each synopsis specifies a family of functions consisting of a principal
8507  function with one or more double complex parameters and a double complex or
8508  double return value; and other functions with the same name but with f and l suffixes
8509  which are corresponding functions with float and long double parameters and
8510  return values.
8511 <p><!--para 2-->
8512  The macro
8513 <pre>
8514           complex</pre>
8515  expands to _Complex; the macro
8516 <pre>
8517           _Complex_I</pre>
8518  expands to a constant expression of type const float _Complex, with the value of
8519  the imaginary unit.<sup><a href="#note167"><b>167)</b></a></sup>
8520 <p><!--para 3-->
8521  The macros
8522 <pre>
8523           imaginary</pre>
8524  and
8525 <pre>
8526           _Imaginary_I</pre>
8527  are defined if and only if the implementation supports imaginary types;<sup><a href="#note168"><b>168)</b></a></sup> if defined,
8528  they expand to _Imaginary and a constant expression of type const float
8529  _Imaginary with the value of the imaginary unit.
8530 <p><!--para 4-->
8531  The macro
8532 <pre>
8533           I</pre>
8534  expands to either _Imaginary_I or _Complex_I. If _Imaginary_I is not
8535  defined, I shall expand to _Complex_I.
8536 <p><!--para 5-->
8537  Notwithstanding the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and perhaps then
8538  redefine the macros complex, imaginary, and I.
8539 <p><b> Forward references</b>: IEC 60559-compatible complex arithmetic (<a href="#G">annex G</a>).
8540  
8541  
8542  
8543 <!--page 183 indent 4-->
8544
8545 <h6>footnotes</h6>
8546 <p><a name="note166">166)</a> See ''future library directions'' (<a href="#7.26.1">7.26.1</a>).
8547
8548 <p><a name="note167">167)</a> The imaginary unit is a number i such that i 2   = -1.
8549
8550 <p><a name="note168">168)</a> A specification for imaginary types is in informative <a href="#G">annex G</a>.
8551
8552
8553 <a name="7.3.2" href="#7.3.2"><h4>7.3.2 Conventions</h4></a>
8554 <p><!--para 1-->
8555  Values are interpreted as radians, not degrees. An implementation may set errno but is
8556  not required to.
8557
8558 <a name="7.3.3" href="#7.3.3"><h4>7.3.3 Branch cuts</h4></a>
8559 <p><!--para 1-->
8560  Some of the functions below have branch cuts, across which the function is
8561  discontinuous. For implementations with a signed zero (including all IEC 60559
8562  implementations) that follow the specifications of <a href="#G">annex G</a>, the sign of zero distinguishes
8563  one side of a cut from another so the function is continuous (except for format
8564  limitations) as the cut is approached from either side. For example, for the square root
8565  function, which has a branch cut along the negative real axis, the top of the cut, with
8566  imaginary part +0, maps to the positive imaginary axis, and the bottom of the cut, with
8567  imaginary part -0, maps to the negative imaginary axis.
8568 <p><!--para 2-->
8569  Implementations that do not support a signed zero (see <a href="#F">annex F</a>) cannot distinguish the
8570  sides of branch cuts. These implementations shall map a cut so the function is continuous
8571  as the cut is approached coming around the finite endpoint of the cut in a counter
8572  clockwise direction. (Branch cuts for the functions specified here have just one finite
8573  endpoint.) For example, for the square root function, coming counter clockwise around
8574  the finite endpoint of the cut along the negative real axis approaches the cut from above,
8575  so the cut maps to the positive imaginary axis.
8576
8577 <a name="7.3.4" href="#7.3.4"><h4>7.3.4 The CX_LIMITED_RANGE pragma</h4></a>
8578 <h6>Synopsis</h6>
8579 <p><!--para 1-->
8580 <pre>
8581           #include <a href="#7.3">&lt;complex.h&gt;</a>
8582           #pragma STDC CX_LIMITED_RANGE on-off-switch</pre>
8583 <h6>Description</h6>
8584 <p><!--para 2-->
8585  The usual mathematical formulas for complex multiply, divide, and absolute value are
8586  problematic because of their treatment of infinities and because of undue overflow and
8587  underflow. The CX_LIMITED_RANGE pragma can be used to inform the
8588  implementation that (where the state is ''on'') the usual mathematical formulas are
8589  acceptable.<sup><a href="#note169"><b>169)</b></a></sup> The pragma can occur either outside external declarations or preceding all
8590  explicit declarations and statements inside a compound statement. When outside external
8591  
8592 <!--page 184 indent 4-->
8593  declarations, the pragma takes effect from its occurrence until another
8594  CX_LIMITED_RANGE pragma is encountered, or until the end of the translation unit.
8595  When inside a compound statement, the pragma takes effect from its occurrence until
8596  another CX_LIMITED_RANGE pragma is encountered (including within a nested
8597  compound statement), or until the end of the compound statement; at the end of a
8598  compound statement the state for the pragma is restored to its condition just before the
8599  compound statement. If this pragma is used in any other context, the behavior is
8600  undefined. The default state for the pragma is ''off''.
8601
8602 <h6>footnotes</h6>
8603 <p><a name="note169">169)</a> The purpose of the pragma is to allow the implementation to use the formulas:
8604
8605 <pre>
8606      (x + iy) x (u + iv) = (xu - yv) + i(yu + xv)
8607      (x + iy) / (u + iv) = [(xu + yv) + i(yu - xv)]/(u2 + v 2 )
8608      | x + iy | = (sqrt) x 2 + y 2
8609                   ???????????????</pre>
8610  where the programmer can determine they are safe.
8611
8612
8613 <a name="7.3.5" href="#7.3.5"><h4>7.3.5 Trigonometric functions</h4></a>
8614
8615 <a name="7.3.5.1" href="#7.3.5.1"><h5>7.3.5.1 The cacos functions</h5></a>
8616 <h6>Synopsis</h6>
8617 <p><!--para 1-->
8618 <pre>
8619         #include <a href="#7.3">&lt;complex.h&gt;</a>
8620         double complex cacos(double complex z);
8621         float complex cacosf(float complex z);
8622         long double complex cacosl(long double complex z);</pre>
8623 <h6>Description</h6>
8624 <p><!--para 2-->
8625  The cacos functions compute the complex arc cosine of z, with branch cuts outside the
8626  interval [-1, +1] along the real axis.
8627 <h6>Returns</h6>
8628 <p><!--para 3-->
8629  The cacos functions return the complex arc cosine value, in the range of a strip
8630  mathematically unbounded along the imaginary axis and in the interval [0, pi ] along the
8631  real axis.
8632
8633 <a name="7.3.5.2" href="#7.3.5.2"><h5>7.3.5.2 The casin functions</h5></a>
8634 <h6>Synopsis</h6>
8635 <p><!--para 1-->
8636 <pre>
8637         #include <a href="#7.3">&lt;complex.h&gt;</a>
8638         double complex casin(double complex z);
8639         float complex casinf(float complex z);
8640         long double complex casinl(long double complex z);</pre>
8641 <h6>Description</h6>
8642 <p><!--para 2-->
8643  The casin functions compute the complex arc sine of z, with branch cuts outside the
8644  interval [-1, +1] along the real axis.
8645 <h6>Returns</h6>
8646 <p><!--para 3-->
8647  The casin functions return the complex arc sine value, in the range of a strip
8648  mathematically unbounded along the imaginary axis and in the interval [-pi /2, +pi /2]
8649  along the real axis.
8650 <!--page 185 indent 4-->
8651
8652 <a name="7.3.5.3" href="#7.3.5.3"><h5>7.3.5.3 The catan functions</h5></a>
8653 <h6>Synopsis</h6>
8654 <p><!--para 1-->
8655 <pre>
8656         #include <a href="#7.3">&lt;complex.h&gt;</a>
8657         double complex catan(double complex z);
8658         float complex catanf(float complex z);
8659         long double complex catanl(long double complex z);</pre>
8660 <h6>Description</h6>
8661 <p><!--para 2-->
8662  The catan functions compute the complex arc tangent of z, with branch cuts outside the
8663  interval [-i, +i] along the imaginary axis.
8664 <h6>Returns</h6>
8665 <p><!--para 3-->
8666  The catan functions return the complex arc tangent value, in the range of a strip
8667  mathematically unbounded along the imaginary axis and in the interval [-pi /2, +pi /2]
8668  along the real axis.
8669
8670 <a name="7.3.5.4" href="#7.3.5.4"><h5>7.3.5.4 The ccos functions</h5></a>
8671 <h6>Synopsis</h6>
8672 <p><!--para 1-->
8673 <pre>
8674         #include <a href="#7.3">&lt;complex.h&gt;</a>
8675         double complex ccos(double complex z);
8676         float complex ccosf(float complex z);
8677         long double complex ccosl(long double complex z);</pre>
8678 <h6>Description</h6>
8679 <p><!--para 2-->
8680  The ccos functions compute the complex cosine of z.
8681 <h6>Returns</h6>
8682 <p><!--para 3-->
8683  The ccos functions return the complex cosine value.
8684
8685 <a name="7.3.5.5" href="#7.3.5.5"><h5>7.3.5.5 The csin functions</h5></a>
8686 <h6>Synopsis</h6>
8687 <p><!--para 1-->
8688 <pre>
8689         #include <a href="#7.3">&lt;complex.h&gt;</a>
8690         double complex csin(double complex z);
8691         float complex csinf(float complex z);
8692         long double complex csinl(long double complex z);</pre>
8693 <h6>Description</h6>
8694 <p><!--para 2-->
8695  The csin functions compute the complex sine of z.
8696 <h6>Returns</h6>
8697 <p><!--para 3-->
8698  The csin functions return the complex sine value.
8699 <!--page 186 indent 4-->
8700
8701 <a name="7.3.5.6" href="#7.3.5.6"><h5>7.3.5.6 The ctan functions</h5></a>
8702 <h6>Synopsis</h6>
8703 <p><!--para 1-->
8704 <pre>
8705         #include <a href="#7.3">&lt;complex.h&gt;</a>
8706         double complex ctan(double complex z);
8707         float complex ctanf(float complex z);
8708         long double complex ctanl(long double complex z);</pre>
8709 <h6>Description</h6>
8710 <p><!--para 2-->
8711  The ctan functions compute the complex tangent of z.
8712 <h6>Returns</h6>
8713 <p><!--para 3-->
8714  The ctan functions return the complex tangent value.
8715
8716 <a name="7.3.6" href="#7.3.6"><h4>7.3.6 Hyperbolic functions</h4></a>
8717
8718 <a name="7.3.6.1" href="#7.3.6.1"><h5>7.3.6.1 The cacosh functions</h5></a>
8719 <h6>Synopsis</h6>
8720 <p><!--para 1-->
8721 <pre>
8722         #include <a href="#7.3">&lt;complex.h&gt;</a>
8723         double complex cacosh(double complex z);
8724         float complex cacoshf(float complex z);
8725         long double complex cacoshl(long double complex z);</pre>
8726 <h6>Description</h6>
8727 <p><!--para 2-->
8728  The cacosh functions compute the complex arc hyperbolic cosine of z, with a branch
8729  cut at values less than 1 along the real axis.
8730 <h6>Returns</h6>
8731 <p><!--para 3-->
8732  The cacosh functions return the complex arc hyperbolic cosine value, in the range of a
8733  half-strip of non-negative values along the real axis and in the interval [-ipi , +ipi ] along
8734  the imaginary axis.
8735
8736 <a name="7.3.6.2" href="#7.3.6.2"><h5>7.3.6.2 The casinh functions</h5></a>
8737 <h6>Synopsis</h6>
8738 <p><!--para 1-->
8739 <pre>
8740         #include <a href="#7.3">&lt;complex.h&gt;</a>
8741         double complex casinh(double complex z);
8742         float complex casinhf(float complex z);
8743         long double complex casinhl(long double complex z);</pre>
8744 <h6>Description</h6>
8745 <p><!--para 2-->
8746  The casinh functions compute the complex arc hyperbolic sine of z, with branch cuts
8747  outside the interval [-i, +i] along the imaginary axis.
8748 <!--page 187 indent 4-->
8749 <h6>Returns</h6>
8750 <p><!--para 3-->
8751  The casinh functions return the complex arc hyperbolic sine value, in the range of a
8752  strip mathematically unbounded along the real axis and in the interval [-ipi /2, +ipi /2]
8753  along the imaginary axis.
8754
8755 <a name="7.3.6.3" href="#7.3.6.3"><h5>7.3.6.3 The catanh functions</h5></a>
8756 <h6>Synopsis</h6>
8757 <p><!--para 1-->
8758 <pre>
8759         #include <a href="#7.3">&lt;complex.h&gt;</a>
8760         double complex catanh(double complex z);
8761         float complex catanhf(float complex z);
8762         long double complex catanhl(long double complex z);</pre>
8763 <h6>Description</h6>
8764 <p><!--para 2-->
8765  The catanh functions compute the complex arc hyperbolic tangent of z, with branch
8766  cuts outside the interval [-1, +1] along the real axis.
8767 <h6>Returns</h6>
8768 <p><!--para 3-->
8769  The catanh functions return the complex arc hyperbolic tangent value, in the range of a
8770  strip mathematically unbounded along the real axis and in the interval [-ipi /2, +ipi /2]
8771  along the imaginary axis.
8772
8773 <a name="7.3.6.4" href="#7.3.6.4"><h5>7.3.6.4 The ccosh functions</h5></a>
8774 <h6>Synopsis</h6>
8775 <p><!--para 1-->
8776 <pre>
8777         #include <a href="#7.3">&lt;complex.h&gt;</a>
8778         double complex ccosh(double complex z);
8779         float complex ccoshf(float complex z);
8780         long double complex ccoshl(long double complex z);</pre>
8781 <h6>Description</h6>
8782 <p><!--para 2-->
8783  The ccosh functions compute the complex hyperbolic cosine of z.
8784 <h6>Returns</h6>
8785 <p><!--para 3-->
8786  The ccosh functions return the complex hyperbolic cosine value.
8787
8788 <a name="7.3.6.5" href="#7.3.6.5"><h5>7.3.6.5 The csinh functions</h5></a>
8789 <h6>Synopsis</h6>
8790 <p><!--para 1-->
8791 <!--page 188 indent 4-->
8792 <pre>
8793         #include <a href="#7.3">&lt;complex.h&gt;</a>
8794         double complex csinh(double complex z);
8795         float complex csinhf(float complex z);
8796         long double complex csinhl(long double complex z);</pre>
8797 <h6>Description</h6>
8798 <p><!--para 2-->
8799  The csinh functions compute the complex hyperbolic sine of z.
8800 <h6>Returns</h6>
8801 <p><!--para 3-->
8802  The csinh functions return the complex hyperbolic sine value.
8803
8804 <a name="7.3.6.6" href="#7.3.6.6"><h5>7.3.6.6 The ctanh functions</h5></a>
8805 <h6>Synopsis</h6>
8806 <p><!--para 1-->
8807 <pre>
8808         #include <a href="#7.3">&lt;complex.h&gt;</a>
8809         double complex ctanh(double complex z);
8810         float complex ctanhf(float complex z);
8811         long double complex ctanhl(long double complex z);</pre>
8812 <h6>Description</h6>
8813 <p><!--para 2-->
8814  The ctanh functions compute the complex hyperbolic tangent of z.
8815 <h6>Returns</h6>
8816 <p><!--para 3-->
8817  The ctanh functions return the complex hyperbolic tangent value.
8818
8819 <a name="7.3.7" href="#7.3.7"><h4>7.3.7 Exponential and logarithmic functions</h4></a>
8820
8821 <a name="7.3.7.1" href="#7.3.7.1"><h5>7.3.7.1 The cexp functions</h5></a>
8822 <h6>Synopsis</h6>
8823 <p><!--para 1-->
8824 <pre>
8825         #include <a href="#7.3">&lt;complex.h&gt;</a>
8826         double complex cexp(double complex z);
8827         float complex cexpf(float complex z);
8828         long double complex cexpl(long double complex z);</pre>
8829 <h6>Description</h6>
8830 <p><!--para 2-->
8831  The cexp functions compute the complex base-e exponential of z.
8832 <h6>Returns</h6>
8833 <p><!--para 3-->
8834  The cexp functions return the complex base-e exponential value.
8835
8836 <a name="7.3.7.2" href="#7.3.7.2"><h5>7.3.7.2 The clog functions</h5></a>
8837 <h6>Synopsis</h6>
8838 <p><!--para 1-->
8839 <!--page 189 indent 4-->
8840 <pre>
8841         #include <a href="#7.3">&lt;complex.h&gt;</a>
8842         double complex clog(double complex z);
8843         float complex clogf(float complex z);
8844         long double complex clogl(long double complex z);</pre>
8845 <h6>Description</h6>
8846 <p><!--para 2-->
8847  The clog functions compute the complex natural (base-e) logarithm of z, with a branch
8848  cut along the negative real axis.
8849 <h6>Returns</h6>
8850 <p><!--para 3-->
8851  The clog functions return the complex natural logarithm value, in the range of a strip
8852  mathematically unbounded along the real axis and in the interval [-ipi , +ipi ] along the
8853  imaginary axis.
8854
8855 <a name="7.3.8" href="#7.3.8"><h4>7.3.8 Power and absolute-value functions</h4></a>
8856
8857 <a name="7.3.8.1" href="#7.3.8.1"><h5>7.3.8.1 The cabs functions</h5></a>
8858 <h6>Synopsis</h6>
8859 <p><!--para 1-->
8860 <pre>
8861         #include <a href="#7.3">&lt;complex.h&gt;</a>
8862         double cabs(double complex z);
8863         float cabsf(float complex z);
8864         long double cabsl(long double complex z);</pre>
8865 <h6>Description</h6>
8866 <p><!--para 2-->
8867  The cabs functions compute the complex absolute value (also called norm, modulus, or
8868  magnitude) of z.
8869 <h6>Returns</h6>
8870 <p><!--para 3-->
8871  The cabs functions return the complex absolute value.
8872
8873 <a name="7.3.8.2" href="#7.3.8.2"><h5>7.3.8.2 The cpow functions</h5></a>
8874 <h6>Synopsis</h6>
8875 <p><!--para 1-->
8876 <pre>
8877         #include <a href="#7.3">&lt;complex.h&gt;</a>
8878         double complex cpow(double complex x, double complex y);
8879         float complex cpowf(float complex x, float complex y);
8880         long double complex cpowl(long double complex x,
8881              long double complex y);</pre>
8882 <h6>Description</h6>
8883 <p><!--para 2-->
8884  The cpow functions compute the complex power function xy , with a branch cut for the
8885  first parameter along the negative real axis.
8886 <h6>Returns</h6>
8887 <p><!--para 3-->
8888  The cpow functions return the complex power function value.
8889 <!--page 190 indent 4-->
8890
8891 <a name="7.3.8.3" href="#7.3.8.3"><h5>7.3.8.3 The csqrt functions</h5></a>
8892 <h6>Synopsis</h6>
8893 <p><!--para 1-->
8894 <pre>
8895         #include <a href="#7.3">&lt;complex.h&gt;</a>
8896         double complex csqrt(double complex z);
8897         float complex csqrtf(float complex z);
8898         long double complex csqrtl(long double complex z);</pre>
8899 <h6>Description</h6>
8900 <p><!--para 2-->
8901  The csqrt functions compute the complex square root of z, with a branch cut along the
8902  negative real axis.
8903 <h6>Returns</h6>
8904 <p><!--para 3-->
8905  The csqrt functions return the complex square root value, in the range of the right half-
8906  plane (including the imaginary axis).
8907
8908 <a name="7.3.9" href="#7.3.9"><h4>7.3.9 Manipulation functions</h4></a>
8909
8910 <a name="7.3.9.1" href="#7.3.9.1"><h5>7.3.9.1 The carg functions</h5></a>
8911 <h6>Synopsis</h6>
8912 <p><!--para 1-->
8913 <pre>
8914         #include <a href="#7.3">&lt;complex.h&gt;</a>
8915         double carg(double complex z);
8916         float cargf(float complex z);
8917         long double cargl(long double complex z);</pre>
8918 <h6>Description</h6>
8919 <p><!--para 2-->
8920  The carg functions compute the argument (also called phase angle) of z, with a branch
8921  cut along the negative real axis.
8922 <h6>Returns</h6>
8923 <p><!--para 3-->
8924  The carg functions return the value of the argument in the interval [-pi , +pi ].
8925
8926 <a name="7.3.9.2" href="#7.3.9.2"><h5>7.3.9.2 The cimag functions</h5></a>
8927 <h6>Synopsis</h6>
8928 <p><!--para 1-->
8929 <!--page 191 indent 4-->
8930 <pre>
8931         #include <a href="#7.3">&lt;complex.h&gt;</a>
8932         double cimag(double complex z);
8933         float cimagf(float complex z);
8934         long double cimagl(long double complex z);</pre>
8935 <h6>Description</h6>
8936 <p><!--para 2-->
8937  The cimag functions compute the imaginary part of z.<sup><a href="#note170"><b>170)</b></a></sup>
8938 <h6>Returns</h6>
8939 <p><!--para 3-->
8940  The cimag functions return the imaginary part value (as a real).
8941
8942 <h6>footnotes</h6>
8943 <p><a name="note170">170)</a> For a variable z of complex type, z == creal(z) + cimag(z)*I.
8944
8945
8946 <a name="7.3.9.3" href="#7.3.9.3"><h5>7.3.9.3 The conj functions</h5></a>
8947 <h6>Synopsis</h6>
8948 <p><!--para 1-->
8949 <pre>
8950         #include <a href="#7.3">&lt;complex.h&gt;</a>
8951         double complex conj(double complex z);
8952         float complex conjf(float complex z);
8953         long double complex conjl(long double complex z);</pre>
8954 <h6>Description</h6>
8955 <p><!--para 2-->
8956  The conj functions compute the complex conjugate of z, by reversing the sign of its
8957  imaginary part.
8958 <h6>Returns</h6>
8959 <p><!--para 3-->
8960  The conj functions return the complex conjugate value.
8961
8962 <a name="7.3.9.4" href="#7.3.9.4"><h5>7.3.9.4 The cproj functions</h5></a>
8963 <h6>Synopsis</h6>
8964 <p><!--para 1-->
8965 <pre>
8966         #include <a href="#7.3">&lt;complex.h&gt;</a>
8967         double complex cproj(double complex z);
8968         float complex cprojf(float complex z);
8969         long double complex cprojl(long double complex z);</pre>
8970 <h6>Description</h6>
8971 <p><!--para 2-->
8972  The cproj functions compute a projection of z onto the Riemann sphere: z projects to
8973  z except that all complex infinities (even those with one infinite part and one NaN part)
8974  project to positive infinity on the real axis. If z has an infinite part, then cproj(z) is
8975  equivalent to
8976 <pre>
8977         INFINITY + I * copysign(0.0, cimag(z))</pre>
8978 <h6>Returns</h6>
8979 <p><!--para 3-->
8980  The cproj functions return the value of the projection onto the Riemann sphere.
8981  
8982  
8983  
8984  
8985 <!--page 192 indent 4-->
8986
8987 <a name="7.3.9.5" href="#7.3.9.5"><h5>7.3.9.5 The creal functions</h5></a>
8988 <h6>Synopsis</h6>
8989 <p><!--para 1-->
8990 <pre>
8991         #include <a href="#7.3">&lt;complex.h&gt;</a>
8992         double creal(double complex z);
8993         float crealf(float complex z);
8994         long double creall(long double complex z);</pre>
8995 <h6>Description</h6>
8996 <p><!--para 2-->
8997  The creal functions compute the real part of z.<sup><a href="#note171"><b>171)</b></a></sup>
8998 <h6>Returns</h6>
8999 <p><!--para 3-->
9000  The creal functions return the real part value.
9001  
9002  
9003  
9004  
9005 <!--page 193 indent 4-->
9006
9007 <h6>footnotes</h6>
9008 <p><a name="note171">171)</a> For a variable z of complex type, z == creal(z) + cimag(z)*I.
9009
9010
9011 <a name="7.4" href="#7.4"><h3>7.4 Character handling <ctype.h></h3></a>
9012 <p><!--para 1-->
9013  The header <a href="#7.4">&lt;ctype.h&gt;</a> declares several functions useful for classifying and mapping
9014  characters.<sup><a href="#note172"><b>172)</b></a></sup> In all cases the argument is an int, the value of which shall be
9015  representable as an unsigned char or shall equal the value of the macro EOF. If the
9016  argument has any other value, the behavior is undefined.
9017 <p><!--para 2-->
9018  The behavior of these functions is affected by the current locale. Those functions that
9019  have locale-specific aspects only when not in the "C" locale are noted below.
9020 <p><!--para 3-->
9021  The term printing character refers to a member of a locale-specific set of characters, each
9022  of which occupies one printing position on a display device; the term control character
9023  refers to a member of a locale-specific set of characters that are not printing
9024  characters.<sup><a href="#note173"><b>173)</b></a></sup> All letters and digits are printing characters.
9025 <p><b> Forward references</b>: EOF (<a href="#7.19.1">7.19.1</a>), localization (<a href="#7.11">7.11</a>).
9026
9027 <h6>footnotes</h6>
9028 <p><a name="note172">172)</a> See ''future library directions'' (<a href="#7.26.2">7.26.2</a>).
9029
9030 <p><a name="note173">173)</a> In an implementation that uses the seven-bit US ASCII character set, the printing characters are those
9031  whose values lie from 0x20 (space) through 0x7E (tilde); the control characters are those whose
9032  values lie from 0 (NUL) through 0x1F (US), and the character 0x7F (DEL).
9033
9034
9035 <a name="7.4.1" href="#7.4.1"><h4>7.4.1 Character classification functions</h4></a>
9036 <p><!--para 1-->
9037  The functions in this subclause return nonzero (true) if and only if the value of the
9038  argument c conforms to that in the description of the function.
9039
9040 <a name="7.4.1.1" href="#7.4.1.1"><h5>7.4.1.1 The isalnum function</h5></a>
9041 <h6>Synopsis</h6>
9042 <p><!--para 1-->
9043 <pre>
9044           #include <a href="#7.4">&lt;ctype.h&gt;</a>
9045           int isalnum(int c);</pre>
9046 <h6>Description</h6>
9047 <p><!--para 2-->
9048  The isalnum function tests for any character for which isalpha or isdigit is true.
9049
9050 <a name="7.4.1.2" href="#7.4.1.2"><h5>7.4.1.2 The isalpha function</h5></a>
9051 <h6>Synopsis</h6>
9052 <p><!--para 1-->
9053 <pre>
9054           #include <a href="#7.4">&lt;ctype.h&gt;</a>
9055           int isalpha(int c);</pre>
9056 <h6>Description</h6>
9057 <p><!--para 2-->
9058  The isalpha function tests for any character for which isupper or islower is true,
9059  or any character that is one of a locale-specific set of alphabetic characters for which
9060  
9061  
9062  
9063 <!--page 194 indent 4-->
9064  none of iscntrl, isdigit, ispunct, or isspace is true.<sup><a href="#note174"><b>174)</b></a></sup> In the "C" locale,
9065  isalpha returns true only for the characters for which isupper or islower is true.
9066
9067 <h6>footnotes</h6>
9068 <p><a name="note174">174)</a> The functions islower and isupper test true or false separately for each of these additional
9069  characters; all four combinations are possible.
9070
9071
9072 <a name="7.4.1.3" href="#7.4.1.3"><h5>7.4.1.3 The isblank function</h5></a>
9073 <h6>Synopsis</h6>
9074 <p><!--para 1-->
9075 <pre>
9076          #include <a href="#7.4">&lt;ctype.h&gt;</a>
9077          int isblank(int c);</pre>
9078 <h6>Description</h6>
9079 <p><!--para 2-->
9080  The isblank function tests for any character that is a standard blank character or is one
9081  of a locale-specific set of characters for which isspace is true and that is used to
9082  separate words within a line of text. The standard blank characters are the following:
9083  space (' '), and horizontal tab ('\t'). In the "C" locale, isblank returns true only
9084  for the standard blank characters.
9085
9086 <a name="7.4.1.4" href="#7.4.1.4"><h5>7.4.1.4 The iscntrl function</h5></a>
9087 <h6>Synopsis</h6>
9088 <p><!--para 1-->
9089 <pre>
9090          #include <a href="#7.4">&lt;ctype.h&gt;</a>
9091          int iscntrl(int c);</pre>
9092 <h6>Description</h6>
9093 <p><!--para 2-->
9094  The iscntrl function tests for any control character.
9095
9096 <a name="7.4.1.5" href="#7.4.1.5"><h5>7.4.1.5 The isdigit function</h5></a>
9097 <h6>Synopsis</h6>
9098 <p><!--para 1-->
9099 <pre>
9100          #include <a href="#7.4">&lt;ctype.h&gt;</a>
9101          int isdigit(int c);</pre>
9102 <h6>Description</h6>
9103 <p><!--para 2-->
9104  The isdigit function tests for any decimal-digit character (as defined in <a href="#5.2.1">5.2.1</a>).
9105
9106 <a name="7.4.1.6" href="#7.4.1.6"><h5>7.4.1.6 The isgraph function</h5></a>
9107 <h6>Synopsis</h6>
9108 <p><!--para 1-->
9109 <pre>
9110          #include <a href="#7.4">&lt;ctype.h&gt;</a>
9111          int isgraph(int c);</pre>
9112  
9113  
9114  
9115  
9116 <!--page 195 indent 4-->
9117 <h6>Description</h6>
9118 <p><!--para 2-->
9119  The isgraph function tests for any printing character except space (' ').
9120
9121 <a name="7.4.1.7" href="#7.4.1.7"><h5>7.4.1.7 The islower function</h5></a>
9122 <h6>Synopsis</h6>
9123 <p><!--para 1-->
9124 <pre>
9125         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9126         int islower(int c);</pre>
9127 <h6>Description</h6>
9128 <p><!--para 2-->
9129  The islower function tests for any character that is a lowercase letter or is one of a
9130  locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
9131  isspace is true. In the "C" locale, islower returns true only for the lowercase
9132  letters (as defined in <a href="#5.2.1">5.2.1</a>).
9133
9134 <a name="7.4.1.8" href="#7.4.1.8"><h5>7.4.1.8 The isprint function</h5></a>
9135 <h6>Synopsis</h6>
9136 <p><!--para 1-->
9137 <pre>
9138         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9139         int isprint(int c);</pre>
9140 <h6>Description</h6>
9141 <p><!--para 2-->
9142  The isprint function tests for any printing character including space (' ').
9143
9144 <a name="7.4.1.9" href="#7.4.1.9"><h5>7.4.1.9 The ispunct function</h5></a>
9145 <h6>Synopsis</h6>
9146 <p><!--para 1-->
9147 <pre>
9148         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9149         int ispunct(int c);</pre>
9150 <h6>Description</h6>
9151 <p><!--para 2-->
9152  The ispunct function tests for any printing character that is one of a locale-specific set
9153  of punctuation characters for which neither isspace nor isalnum is true. In the "C"
9154  locale, ispunct returns true for every printing character for which neither isspace
9155  nor isalnum is true.
9156
9157 <a name="7.4.1.10" href="#7.4.1.10"><h5>7.4.1.10 The isspace function</h5></a>
9158 <h6>Synopsis</h6>
9159 <p><!--para 1-->
9160 <pre>
9161         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9162         int isspace(int c);</pre>
9163 <h6>Description</h6>
9164 <p><!--para 2-->
9165  The isspace function tests for any character that is a standard white-space character or
9166  is one of a locale-specific set of characters for which isalnum is false. The standard
9167 <!--page 196 indent 4-->
9168  white-space characters are the following: space (' '), form feed ('\f'), new-line
9169  ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). In the
9170  "C" locale, isspace returns true only for the standard white-space characters.
9171
9172 <a name="7.4.1.11" href="#7.4.1.11"><h5>7.4.1.11 The isupper function</h5></a>
9173 <h6>Synopsis</h6>
9174 <p><!--para 1-->
9175 <pre>
9176         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9177         int isupper(int c);</pre>
9178 <h6>Description</h6>
9179 <p><!--para 2-->
9180  The isupper function tests for any character that is an uppercase letter or is one of a
9181  locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
9182  isspace is true. In the "C" locale, isupper returns true only for the uppercase
9183  letters (as defined in <a href="#5.2.1">5.2.1</a>).
9184
9185 <a name="7.4.1.12" href="#7.4.1.12"><h5>7.4.1.12 The isxdigit function</h5></a>
9186 <h6>Synopsis</h6>
9187 <p><!--para 1-->
9188 <pre>
9189         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9190         int isxdigit(int c);</pre>
9191 <h6>Description</h6>
9192 <p><!--para 2-->
9193  The isxdigit function tests for any hexadecimal-digit character (as defined in <a href="#6.4.4.1">6.4.4.1</a>).
9194
9195 <a name="7.4.2" href="#7.4.2"><h4>7.4.2 Character case mapping functions</h4></a>
9196
9197 <a name="7.4.2.1" href="#7.4.2.1"><h5>7.4.2.1 The tolower function</h5></a>
9198 <h6>Synopsis</h6>
9199 <p><!--para 1-->
9200 <pre>
9201         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9202         int tolower(int c);</pre>
9203 <h6>Description</h6>
9204 <p><!--para 2-->
9205  The tolower function converts an uppercase letter to a corresponding lowercase letter.
9206 <h6>Returns</h6>
9207 <p><!--para 3-->
9208  If the argument is a character for which isupper is true and there are one or more
9209  corresponding characters, as specified by the current locale, for which islower is true,
9210  the tolower function returns one of the corresponding characters (always the same one
9211  for any given locale); otherwise, the argument is returned unchanged.
9212 <!--page 197 indent 4-->
9213
9214 <a name="7.4.2.2" href="#7.4.2.2"><h5>7.4.2.2 The toupper function</h5></a>
9215 <h6>Synopsis</h6>
9216 <p><!--para 1-->
9217 <pre>
9218         #include <a href="#7.4">&lt;ctype.h&gt;</a>
9219         int toupper(int c);</pre>
9220 <h6>Description</h6>
9221 <p><!--para 2-->
9222  The toupper function converts a lowercase letter to a corresponding uppercase letter.
9223 <h6>Returns</h6>
9224 <p><!--para 3-->
9225  If the argument is a character for which islower is true and there are one or more
9226  corresponding characters, as specified by the current locale, for which isupper is true,
9227  the toupper function returns one of the corresponding characters (always the same one
9228  for any given locale); otherwise, the argument is returned unchanged.
9229 <!--page 198 indent 4-->
9230
9231 <a name="7.5" href="#7.5"><h3>7.5 Errors <errno.h></h3></a>
9232 <p><!--para 1-->
9233  The header <a href="#7.5">&lt;errno.h&gt;</a> defines several macros, all relating to the reporting of error
9234  conditions.
9235 <p><!--para 2-->
9236  The macros are
9237 <pre>
9238           EDOM
9239           EILSEQ
9240           ERANGE</pre>
9241  which expand to integer constant expressions with type int, distinct positive values, and
9242  which are suitable for use in #if preprocessing directives; and
9243 <pre>
9244           errno</pre>
9245  which expands to a modifiable lvalue<sup><a href="#note175"><b>175)</b></a></sup> that has type int, the value of which is set to a
9246  positive error number by several library functions. It is unspecified whether errno is a
9247  macro or an identifier declared with external linkage. If a macro definition is suppressed
9248  in order to access an actual object, or a program defines an identifier with the name
9249  errno, the behavior is undefined.
9250 <p><!--para 3-->
9251  The value of errno is zero at program startup, but is never set to zero by any library
9252  function.<sup><a href="#note176"><b>176)</b></a></sup> The value of errno may be set to nonzero by a library function call
9253  whether or not there is an error, provided the use of errno is not documented in the
9254  description of the function in this International Standard.
9255 <p><!--para 4-->
9256  Additional macro definitions, beginning with E and a digit or E and an uppercase
9257  letter,<sup><a href="#note177"><b>177)</b></a></sup> may also be specified by the implementation.
9258  
9259  
9260  
9261  
9262 <!--page 199 indent 4-->
9263
9264 <h6>footnotes</h6>
9265 <p><a name="note175">175)</a> The macro errno need not be the identifier of an object. It might expand to a modifiable lvalue
9266  resulting from a function call (for example, *errno()).
9267
9268 <p><a name="note176">176)</a> Thus, a program that uses errno for error checking should set it to zero before a library function call,
9269  then inspect it before a subsequent library function call. Of course, a library function can save the
9270  value of errno on entry and then set it to zero, as long as the original value is restored if errno's
9271  value is still zero just before the return.
9272
9273 <p><a name="note177">177)</a> See ''future library directions'' (<a href="#7.26.3">7.26.3</a>).
9274
9275
9276 <a name="7.6" href="#7.6"><h3>7.6 Floating-point environment <fenv.h></h3></a>
9277 <p><!--para 1-->
9278  The header <a href="#7.6">&lt;fenv.h&gt;</a> declares two types and several macros and functions to provide
9279  access to the floating-point environment. The floating-point environment refers
9280  collectively to any floating-point status flags and control modes supported by the
9281  implementation.<sup><a href="#note178"><b>178)</b></a></sup> A floating-point status flag is a system variable whose value is set
9282  (but never cleared) when a floating-point exception is raised, which occurs as a side effect
9283  of exceptional floating-point arithmetic to provide auxiliary information.<sup><a href="#note179"><b>179)</b></a></sup> A floating-
9284  point control mode is a system variable whose value may be set by the user to affect the
9285  subsequent behavior of floating-point arithmetic.
9286 <p><!--para 2-->
9287  Certain programming conventions support the intended model of use for the floating-
9288  point environment:<sup><a href="#note180"><b>180)</b></a></sup>
9289 <ul>
9290 <li>  a function call does not alter its caller's floating-point control modes, clear its caller's
9291  floating-point status flags, nor depend on the state of its caller's floating-point status
9292  flags unless the function is so documented;
9293 <li>  a function call is assumed to require default floating-point control modes, unless its
9294  documentation promises otherwise;
9295 <li>  a function call is assumed to have the potential for raising floating-point exceptions,
9296  unless its documentation promises otherwise.
9297 </ul>
9298 <p><!--para 3-->
9299  The type
9300 <pre>
9301          fenv_t</pre>
9302  represents the entire floating-point environment.
9303 <p><!--para 4-->
9304  The type
9305 <pre>
9306          fexcept_t</pre>
9307  represents the floating-point status flags collectively, including any status the
9308  implementation associates with the flags.
9309  
9310  
9311  
9312  
9313 <!--page 200 indent 4-->
9314 <p><!--para 5-->
9315  Each of the macros
9316 <pre>
9317          FE_DIVBYZERO
9318          FE_INEXACT
9319          FE_INVALID
9320          FE_OVERFLOW
9321          FE_UNDERFLOW</pre>
9322  is defined if and only if the implementation supports the floating-point exception by
9323  means of the functions in 7.6.2.<sup><a href="#note181"><b>181)</b></a></sup> Additional implementation-defined floating-point
9324  exceptions, with macro definitions beginning with FE_ and an uppercase letter, may also
9325  be specified by the implementation. The defined macros expand to integer constant
9326  expressions with values such that bitwise ORs of all combinations of the macros result in
9327  distinct values, and furthermore, bitwise ANDs of all combinations of the macros result in
9328  zero.<sup><a href="#note182"><b>182)</b></a></sup>
9329 <p><!--para 6-->
9330  The macro
9331 <pre>
9332          FE_ALL_EXCEPT</pre>
9333  is simply the bitwise OR of all floating-point exception macros defined by the
9334  implementation. If no such macros are defined, FE_ALL_EXCEPT shall be defined as 0.
9335 <p><!--para 7-->
9336  Each of the macros
9337 <pre>
9338          FE_DOWNWARD
9339          FE_TONEAREST
9340          FE_TOWARDZERO
9341          FE_UPWARD</pre>
9342  is defined if and only if the implementation supports getting and setting the represented
9343  rounding direction by means of the fegetround and fesetround functions.
9344  Additional implementation-defined rounding directions, with macro definitions beginning
9345  with FE_ and an uppercase letter, may also be specified by the implementation. The
9346  defined macros expand to integer constant expressions whose values are distinct
9347  nonnegative values.<sup><a href="#note183"><b>183)</b></a></sup>
9348 <p><!--para 8-->
9349  The macro
9350  
9351  
9352  
9353 <!--page 201 indent 4-->
9354 <pre>
9355           FE_DFL_ENV</pre>
9356  represents the default floating-point environment -- the one installed at program startup
9357 <ul>
9358 <li>  and has type ''pointer to const-qualified fenv_t''. It can be used as an argument to
9359 </ul>
9360  <a href="#7.6">&lt;fenv.h&gt;</a> functions that manage the floating-point environment.
9361 <p><!--para 9-->
9362  Additional implementation-defined environments, with macro definitions beginning with
9363  FE_ and an uppercase letter, and having type ''pointer to const-qualified fenv_t'', may
9364  also be specified by the implementation.
9365
9366 <h6>footnotes</h6>
9367 <p><a name="note178">178)</a> This header is designed to support the floating-point exception status flags and directed-rounding
9368  control modes required by IEC 60559, and other similar floating-point state information. Also it is
9369  designed to facilitate code portability among all systems.
9370
9371 <p><a name="note179">179)</a> A floating-point status flag is not an object and can be set more than once within an expression.
9372
9373 <p><a name="note180">180)</a> With these conventions, a programmer can safely assume default floating-point control modes (or be
9374  unaware of them). The responsibilities associated with accessing the floating-point environment fall
9375  on the programmer or program that does so explicitly.
9376
9377 <p><a name="note181">181)</a> The implementation supports an exception if there are circumstances where a call to at least one of the
9378  functions in <a href="#7.6.2">7.6.2</a>, using the macro as the appropriate argument, will succeed. It is not necessary for
9379  all the functions to succeed all the time.
9380
9381 <p><a name="note182">182)</a> The macros should be distinct powers of two.
9382
9383 <p><a name="note183">183)</a> Even though the rounding direction macros may expand to constants corresponding to the values of
9384  FLT_ROUNDS, they are not required to do so.
9385
9386
9387 <a name="7.6.1" href="#7.6.1"><h4>7.6.1 The FENV_ACCESS pragma</h4></a>
9388 <h6>Synopsis</h6>
9389 <p><!--para 1-->
9390 <pre>
9391           #include <a href="#7.6">&lt;fenv.h&gt;</a>
9392           #pragma STDC FENV_ACCESS on-off-switch</pre>
9393 <h6>Description</h6>
9394 <p><!--para 2-->
9395  The FENV_ACCESS pragma provides a means to inform the implementation when a
9396  program might access the floating-point environment to test floating-point status flags or
9397  run under non-default floating-point control modes.<sup><a href="#note184"><b>184)</b></a></sup> The pragma shall occur either
9398  outside external declarations or preceding all explicit declarations and statements inside a
9399  compound statement. When outside external declarations, the pragma takes effect from
9400  its occurrence until another FENV_ACCESS pragma is encountered, or until the end of
9401  the translation unit. When inside a compound statement, the pragma takes effect from its
9402  occurrence until another FENV_ACCESS pragma is encountered (including within a
9403  nested compound statement), or until the end of the compound statement; at the end of a
9404  compound statement the state for the pragma is restored to its condition just before the
9405  compound statement. If this pragma is used in any other context, the behavior is
9406  undefined. If part of a program tests floating-point status flags, sets floating-point control
9407  modes, or runs under non-default mode settings, but was translated with the state for the
9408  FENV_ACCESS pragma ''off'', the behavior is undefined. The default state (''on'' or
9409  ''off'') for the pragma is implementation-defined. (When execution passes from a part of
9410  the program translated with FENV_ACCESS ''off'' to a part translated with
9411  FENV_ACCESS ''on'', the state of the floating-point status flags is unspecified and the
9412  floating-point control modes have their default settings.)
9413  
9414  
9415  
9416  
9417 <!--page 202 indent 4-->
9418 <p><!--para 3-->
9419  EXAMPLE
9420 <p><!--para 4-->
9421 <pre>
9422          #include <a href="#7.6">&lt;fenv.h&gt;</a>
9423          void f(double x)
9424          {
9425                #pragma STDC FENV_ACCESS ON
9426                void g(double);
9427                void h(double);
9428                /* ... */
9429                g(x + 1);
9430                h(x + 1);
9431                /* ... */
9432          }</pre>
9433  If the function g might depend on status flags set as a side effect of the first x + 1, or if the second
9434  x + 1 might depend on control modes set as a side effect of the call to function g, then the program shall
9435  contain an appropriately placed invocation of #pragma STDC FENV_ACCESS ON.<sup><a href="#note185"><b>185)</b></a></sup>
9436  
9437
9438 <h6>footnotes</h6>
9439 <p><a name="note184">184)</a> The purpose of the FENV_ACCESS pragma is to allow certain optimizations that could subvert flag
9440  tests and mode changes (e.g., global common subexpression elimination, code motion, and constant
9441  folding). In general, if the state of FENV_ACCESS is ''off'', the translator can assume that default
9442  modes are in effect and the flags are not tested.
9443
9444 <p><a name="note185">185)</a> The side effects impose a temporal ordering that requires two evaluations of x + 1. On the other
9445  hand, without the #pragma STDC FENV_ACCESS ON pragma, and assuming the default state is
9446  ''off'', just one evaluation of x + 1 would suffice.
9447
9448
9449 <a name="7.6.2" href="#7.6.2"><h4>7.6.2 Floating-point exceptions</h4></a>
9450 <p><!--para 1-->
9451  The following functions provide access to the floating-point status flags.<sup><a href="#note186"><b>186)</b></a></sup> The int
9452  input argument for the functions represents a subset of floating-point exceptions, and can
9453  be zero or the bitwise OR of one or more floating-point exception macros, for example
9454  FE_OVERFLOW | FE_INEXACT. For other argument values the behavior of these
9455  functions is undefined.
9456
9457 <h6>footnotes</h6>
9458 <p><a name="note186">186)</a> The functions fetestexcept, feraiseexcept, and feclearexcept support the basic
9459  abstraction of flags that are either set or clear. An implementation may endow floating-point status
9460  flags with more information -- for example, the address of the code which first raised the floating-
9461  point exception; the functions fegetexceptflag and fesetexceptflag deal with the full
9462  content of flags.
9463
9464
9465 <a name="7.6.2.1" href="#7.6.2.1"><h5>7.6.2.1 The feclearexcept function</h5></a>
9466 <h6>Synopsis</h6>
9467 <p><!--para 1-->
9468 <pre>
9469          #include <a href="#7.6">&lt;fenv.h&gt;</a>
9470          int feclearexcept(int excepts);</pre>
9471 <h6>Description</h6>
9472 <p><!--para 2-->
9473  The feclearexcept function attempts to clear the supported floating-point exceptions
9474  represented by its argument.
9475 <h6>Returns</h6>
9476 <p><!--para 3-->
9477  The feclearexcept function returns zero if the excepts argument is zero or if all
9478  the specified exceptions were successfully cleared. Otherwise, it returns a nonzero value.
9479  
9480  
9481 <!--page 203 indent 4-->
9482
9483 <a name="7.6.2.2" href="#7.6.2.2"><h5>7.6.2.2 The fegetexceptflag function</h5></a>
9484 <h6>Synopsis</h6>
9485 <p><!--para 1-->
9486 <pre>
9487           #include <a href="#7.6">&lt;fenv.h&gt;</a>
9488           int fegetexceptflag(fexcept_t *flagp,
9489                int excepts);</pre>
9490 <h6>Description</h6>
9491 <p><!--para 2-->
9492  The fegetexceptflag function attempts to store an implementation-defined
9493  representation of the states of the floating-point status flags indicated by the argument
9494  excepts in the object pointed to by the argument flagp.
9495 <h6>Returns</h6>
9496 <p><!--para 3-->
9497  The fegetexceptflag function returns zero if the representation was successfully
9498  stored. Otherwise, it returns a nonzero value.
9499
9500 <a name="7.6.2.3" href="#7.6.2.3"><h5>7.6.2.3 The feraiseexcept function</h5></a>
9501 <h6>Synopsis</h6>
9502 <p><!--para 1-->
9503 <pre>
9504           #include <a href="#7.6">&lt;fenv.h&gt;</a>
9505           int feraiseexcept(int excepts);</pre>
9506 <h6>Description</h6>
9507 <p><!--para 2-->
9508  The feraiseexcept function attempts to raise the supported floating-point exceptions
9509  represented by its argument.<sup><a href="#note187"><b>187)</b></a></sup> The order in which these floating-point exceptions are
9510  raised is unspecified, except as stated in <a href="#F.7.6">F.7.6</a>. Whether the feraiseexcept function
9511  additionally raises the ''inexact'' floating-point exception whenever it raises the
9512  ''overflow'' or ''underflow'' floating-point exception is implementation-defined.
9513 <h6>Returns</h6>
9514 <p><!--para 3-->
9515  The feraiseexcept function returns zero if the excepts argument is zero or if all
9516  the specified exceptions were successfully raised. Otherwise, it returns a nonzero value.
9517  
9518  
9519  
9520  
9521 <!--page 204 indent 4-->
9522
9523 <h6>footnotes</h6>
9524 <p><a name="note187">187)</a> The effect is intended to be similar to that of floating-point exceptions raised by arithmetic operations.
9525  Hence, enabled traps for floating-point exceptions raised by this function are taken. The specification
9526  in <a href="#F.7.6">F.7.6</a> is in the same spirit.
9527
9528
9529 <a name="7.6.2.4" href="#7.6.2.4"><h5>7.6.2.4 The fesetexceptflag function</h5></a>
9530 <h6>Synopsis</h6>
9531 <p><!--para 1-->
9532 <pre>
9533          #include <a href="#7.6">&lt;fenv.h&gt;</a>
9534          int fesetexceptflag(const fexcept_t *flagp,
9535               int excepts);</pre>
9536 <h6>Description</h6>
9537 <p><!--para 2-->
9538  The fesetexceptflag function attempts to set the floating-point status flags
9539  indicated by the argument excepts to the states stored in the object pointed to by
9540  flagp. The value of *flagp shall have been set by a previous call to
9541  fegetexceptflag whose second argument represented at least those floating-point
9542  exceptions represented by the argument excepts. This function does not raise floating-
9543  point exceptions, but only sets the state of the flags.
9544 <h6>Returns</h6>
9545 <p><!--para 3-->
9546  The fesetexceptflag function returns zero if the excepts argument is zero or if
9547  all the specified flags were successfully set to the appropriate state. Otherwise, it returns
9548  a nonzero value.
9549
9550 <a name="7.6.2.5" href="#7.6.2.5"><h5>7.6.2.5 The fetestexcept function</h5></a>
9551 <h6>Synopsis</h6>
9552 <p><!--para 1-->
9553 <pre>
9554          #include <a href="#7.6">&lt;fenv.h&gt;</a>
9555          int fetestexcept(int excepts);</pre>
9556 <h6>Description</h6>
9557 <p><!--para 2-->
9558  The fetestexcept function determines which of a specified subset of the floating-
9559  point exception flags are currently set. The excepts argument specifies the floating-
9560  point status flags to be queried.<sup><a href="#note188"><b>188)</b></a></sup>
9561 <h6>Returns</h6>
9562 <p><!--para 3-->
9563  The fetestexcept function returns the value of the bitwise OR of the floating-point
9564  exception macros corresponding to the currently set floating-point exceptions included in
9565  excepts.
9566 <p><!--para 4-->
9567  EXAMPLE       Call f if ''invalid'' is set, then g if ''overflow'' is set:
9568  
9569  
9570  
9571  
9572 <!--page 205 indent 4-->
9573 <pre>
9574         #include <a href="#7.6">&lt;fenv.h&gt;</a>
9575         /* ... */
9576         {
9577                 #pragma STDC FENV_ACCESS ON
9578                 int set_excepts;
9579                 feclearexcept(FE_INVALID | FE_OVERFLOW);
9580                 // maybe raise exceptions
9581                 set_excepts = fetestexcept(FE_INVALID | FE_OVERFLOW);
9582                 if (set_excepts &amp; FE_INVALID) f();
9583                 if (set_excepts &amp; FE_OVERFLOW) g();
9584                 /* ... */
9585         }</pre>
9586  
9587
9588 <h6>footnotes</h6>
9589 <p><a name="note188">188)</a> This mechanism allows testing several floating-point exceptions with just one function call.
9590
9591
9592 <a name="7.6.3" href="#7.6.3"><h4>7.6.3 Rounding</h4></a>
9593 <p><!--para 1-->
9594  The fegetround and fesetround functions provide control of rounding direction
9595  modes.
9596
9597 <a name="7.6.3.1" href="#7.6.3.1"><h5>7.6.3.1 The fegetround function</h5></a>
9598 <h6>Synopsis</h6>
9599 <p><!--para 1-->
9600 <pre>
9601         #include <a href="#7.6">&lt;fenv.h&gt;</a>
9602         int fegetround(void);</pre>
9603 <h6>Description</h6>
9604 <p><!--para 2-->
9605  The fegetround function gets the current rounding direction.
9606 <h6>Returns</h6>
9607 <p><!--para 3-->
9608  The fegetround function returns the value of the rounding direction macro
9609  representing the current rounding direction or a negative value if there is no such
9610  rounding direction macro or the current rounding direction is not determinable.
9611
9612 <a name="7.6.3.2" href="#7.6.3.2"><h5>7.6.3.2 The fesetround function</h5></a>
9613 <h6>Synopsis</h6>
9614 <p><!--para 1-->
9615 <pre>
9616         #include <a href="#7.6">&lt;fenv.h&gt;</a>
9617         int fesetround(int round);</pre>
9618 <h6>Description</h6>
9619 <p><!--para 2-->
9620  The fesetround function establishes the rounding direction represented by its
9621  argument round. If the argument is not equal to the value of a rounding direction macro,
9622  the rounding direction is not changed.
9623 <h6>Returns</h6>
9624 <p><!--para 3-->
9625  The fesetround function returns zero if and only if the requested rounding direction
9626  was established.
9627 <!--page 206 indent 4-->
9628 <p><!--para 4-->
9629  EXAMPLE Save, set, and restore the rounding direction. Report an error and abort if setting the
9630  rounding direction fails.
9631 <pre>
9632         #include <a href="#7.6">&lt;fenv.h&gt;</a>
9633         #include <a href="#7.2">&lt;assert.h&gt;</a>
9634         void f(int round_dir)
9635         {
9636               #pragma STDC FENV_ACCESS ON
9637               int save_round;
9638               int setround_ok;
9639               save_round = fegetround();
9640               setround_ok = fesetround(round_dir);
9641               assert(setround_ok == 0);
9642               /* ... */
9643               fesetround(save_round);
9644               /* ... */
9645         }</pre>
9646  
9647
9648 <a name="7.6.4" href="#7.6.4"><h4>7.6.4 Environment</h4></a>
9649 <p><!--para 1-->
9650  The functions in this section manage the floating-point environment -- status flags and
9651  control modes -- as one entity.
9652
9653 <a name="7.6.4.1" href="#7.6.4.1"><h5>7.6.4.1 The fegetenv function</h5></a>
9654 <h6>Synopsis</h6>
9655 <p><!--para 1-->
9656 <pre>
9657         #include <a href="#7.6">&lt;fenv.h&gt;</a>
9658         int fegetenv(fenv_t *envp);</pre>
9659 <h6>Description</h6>
9660 <p><!--para 2-->
9661  The fegetenv function attempts to store the current floating-point environment in the
9662  object pointed to by envp.
9663 <h6>Returns</h6>
9664 <p><!--para 3-->
9665  The fegetenv function returns zero if the environment was successfully stored.
9666  Otherwise, it returns a nonzero value.
9667
9668 <a name="7.6.4.2" href="#7.6.4.2"><h5>7.6.4.2 The feholdexcept function</h5></a>
9669 <h6>Synopsis</h6>
9670 <p><!--para 1-->
9671 <pre>
9672         #include <a href="#7.6">&lt;fenv.h&gt;</a>
9673         int feholdexcept(fenv_t *envp);</pre>
9674 <h6>Description</h6>
9675 <p><!--para 2-->
9676  The feholdexcept function saves the current floating-point environment in the object
9677  pointed to by envp, clears the floating-point status flags, and then installs a non-stop
9678  (continue on floating-point exceptions) mode, if available, for all floating-point
9679  exceptions.<sup><a href="#note189"><b>189)</b></a></sup>
9680 <!--page 207 indent 4-->
9681 <h6>Returns</h6>
9682 <p><!--para 3-->
9683  The feholdexcept function returns zero if and only if non-stop floating-point
9684  exception handling was successfully installed.
9685
9686 <h6>footnotes</h6>
9687 <p><a name="note189">189)</a> IEC 60559 systems have a default non-stop mode, and typically at least one other mode for trap
9688  handling or aborting; if the system provides only the non-stop mode then installing it is trivial. For
9689  such systems, the feholdexcept function can be used in conjunction with the feupdateenv
9690  function to write routines that hide spurious floating-point exceptions from their callers.
9691
9692
9693 <a name="7.6.4.3" href="#7.6.4.3"><h5>7.6.4.3 The fesetenv function</h5></a>
9694 <h6>Synopsis</h6>
9695 <p><!--para 1-->
9696 <pre>
9697          #include <a href="#7.6">&lt;fenv.h&gt;</a>
9698          int fesetenv(const fenv_t *envp);</pre>
9699 <h6>Description</h6>
9700 <p><!--para 2-->
9701  The fesetenv function attempts to establish the floating-point environment represented
9702  by the object pointed to by envp. The argument envp shall point to an object set by a
9703  call to fegetenv or feholdexcept, or equal a floating-point environment macro.
9704  Note that fesetenv merely installs the state of the floating-point status flags
9705  represented through its argument, and does not raise these floating-point exceptions.
9706 <h6>Returns</h6>
9707 <p><!--para 3-->
9708  The fesetenv function returns zero if the environment was successfully established.
9709  Otherwise, it returns a nonzero value.
9710
9711 <a name="7.6.4.4" href="#7.6.4.4"><h5>7.6.4.4 The feupdateenv function</h5></a>
9712 <h6>Synopsis</h6>
9713 <p><!--para 1-->
9714 <pre>
9715          #include <a href="#7.6">&lt;fenv.h&gt;</a>
9716          int feupdateenv(const fenv_t *envp);</pre>
9717 <h6>Description</h6>
9718 <p><!--para 2-->
9719  The feupdateenv function attempts to save the currently raised floating-point
9720  exceptions in its automatic storage, install the floating-point environment represented by
9721  the object pointed to by envp, and then raise the saved floating-point exceptions. The
9722  argument envp shall point to an object set by a call to feholdexcept or fegetenv,
9723  or equal a floating-point environment macro.
9724 <h6>Returns</h6>
9725 <p><!--para 3-->
9726  The feupdateenv function returns zero if all the actions were successfully carried out.
9727  Otherwise, it returns a nonzero value.
9728  
9729  
9730  
9731  
9732 <!--page 208 indent 4-->
9733 <p><!--para 4-->
9734  EXAMPLE   Hide spurious underflow floating-point exceptions:
9735 <!--page 209 indent 4-->
9736 <pre>
9737        #include <a href="#7.6">&lt;fenv.h&gt;</a>
9738        double f(double x)
9739        {
9740              #pragma STDC FENV_ACCESS ON
9741              double result;
9742              fenv_t save_env;
9743              if (feholdexcept(&amp;save_env))
9744                    return /* indication of an environmental problem */;
9745              // compute result
9746              if (/* test spurious underflow */)
9747                    if (feclearexcept(FE_UNDERFLOW))
9748                             return /* indication of an environmental problem */;
9749              if (feupdateenv(&amp;save_env))
9750                    return /* indication of an environmental problem */;
9751              return result;
9752        }</pre>
9753
9754 <a name="7.7" href="#7.7"><h3>7.7 Characteristics of floating types <float.h></h3></a>
9755 <p><!--para 1-->
9756  The header <a href="#7.7">&lt;float.h&gt;</a> defines several macros that expand to various limits and
9757  parameters of the standard floating-point types.
9758 <p><!--para 2-->
9759  The macros, their meanings, and the constraints (or restrictions) on their values are listed
9760  in <a href="#5.2.4.2.2">5.2.4.2.2</a>.
9761 <!--page 210 indent 4-->
9762
9763 <a name="7.8" href="#7.8"><h3>7.8 Format conversion of integer types <inttypes.h></h3></a>
9764 <p><!--para 1-->
9765  The header <a href="#7.8">&lt;inttypes.h&gt;</a> includes the header <a href="#7.18">&lt;stdint.h&gt;</a> and extends it with
9766  additional facilities provided by hosted implementations.
9767 <p><!--para 2-->
9768  It declares functions for manipulating greatest-width integers and converting numeric
9769  character strings to greatest-width integers, and it declares the type
9770 <pre>
9771           imaxdiv_t</pre>
9772  which is a structure type that is the type of the value returned by the imaxdiv function.
9773  For each type declared in <a href="#7.18">&lt;stdint.h&gt;</a>, it defines corresponding macros for conversion
9774  specifiers for use with the formatted input/output functions.<sup><a href="#note190"><b>190)</b></a></sup>
9775 <p><b> Forward references</b>: integer types <a href="#7.18">&lt;stdint.h&gt;</a> (<a href="#7.18">7.18</a>), formatted input/output
9776  functions (<a href="#7.19.6">7.19.6</a>), formatted wide character input/output functions (<a href="#7.24.2">7.24.2</a>).
9777
9778 <h6>footnotes</h6>
9779 <p><a name="note190">190)</a> See ''future library directions'' (<a href="#7.26.4">7.26.4</a>).
9780
9781
9782 <a name="7.8.1" href="#7.8.1"><h4>7.8.1 Macros for format specifiers</h4></a>
9783 <p><!--para 1-->
9784  Each of the following object-like macros<sup><a href="#note191"><b>191)</b></a></sup> expands to a character string literal
9785  containing a conversion specifier, possibly modified by a length modifier, suitable for use
9786  within the format argument of a formatted input/output function when converting the
9787  corresponding integer type. These macro names have the general form of PRI (character
9788  string literals for the fprintf and fwprintf family) or SCN (character string literals
9789  for the fscanf and fwscanf family),<sup><a href="#note192"><b>192)</b></a></sup> followed by the conversion specifier,
9790  followed by a name corresponding to a similar type name in <a href="#7.18.1">7.18.1</a>. In these names, N
9791  represents the width of the type as described in <a href="#7.18.1">7.18.1</a>. For example, PRIdFAST32 can
9792  be used in a format string to print the value of an integer of type int_fast32_t.
9793 <p><!--para 2-->
9794  The fprintf macros for signed integers are:
9795 <pre>
9796         PRIdN             PRIdLEASTN                PRIdFASTN          PRIdMAX             PRIdPTR
9797         PRIiN             PRIiLEASTN                PRIiFASTN          PRIiMAX             PRIiPTR</pre>
9798  
9799  
9800  
9801  
9802 <!--page 211 indent 4-->
9803 <p><!--para 3-->
9804  The fprintf macros for unsigned integers are:
9805 <p><!--para 4-->
9806 <pre>
9807         PRIoN           PRIoLEASTN               PRIoFASTN              PRIoMAX             PRIoPTR
9808         PRIuN           PRIuLEASTN               PRIuFASTN              PRIuMAX             PRIuPTR
9809         PRIxN           PRIxLEASTN               PRIxFASTN              PRIxMAX             PRIxPTR
9810         PRIXN           PRIXLEASTN               PRIXFASTN              PRIXMAX             PRIXPTR</pre>
9811  The fscanf macros for signed integers are:
9812 <p><!--para 5-->
9813 <pre>
9814         SCNdN           SCNdLEASTN               SCNdFASTN              SCNdMAX             SCNdPTR
9815         SCNiN           SCNiLEASTN               SCNiFASTN              SCNiMAX             SCNiPTR</pre>
9816  The fscanf macros for unsigned integers are:
9817 <p><!--para 6-->
9818 <pre>
9819         SCNoN           SCNoLEASTN               SCNoFASTN              SCNoMAX             SCNoPTR
9820         SCNuN           SCNuLEASTN               SCNuFASTN              SCNuMAX             SCNuPTR
9821         SCNxN           SCNxLEASTN               SCNxFASTN              SCNxMAX             SCNxPTR</pre>
9822  For each type that the implementation provides in <a href="#7.18">&lt;stdint.h&gt;</a>, the corresponding
9823  fprintf macros shall be defined and the corresponding fscanf macros shall be
9824  defined unless the implementation does not have a suitable fscanf length modifier for
9825  the type.
9826 <p><!--para 7-->
9827  EXAMPLE
9828 <pre>
9829          #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9830          #include <a href="#7.24">&lt;wchar.h&gt;</a>
9831          int main(void)
9832          {
9833                uintmax_t i = UINTMAX_MAX;    // this type always exists
9834                wprintf(L"The largest integer value is %020"
9835                      PRIxMAX "\n", i);
9836                return 0;
9837          }</pre>
9838  
9839
9840 <h6>footnotes</h6>
9841 <p><a name="note191">191)</a> C++ implementations should define these macros only when __STDC_FORMAT_MACROS is defined
9842  before <a href="#7.8">&lt;inttypes.h&gt;</a> is included.
9843
9844 <p><a name="note192">192)</a> Separate macros are given for use with fprintf and fscanf functions because, in the general case,
9845  different format specifiers may be required for fprintf and fscanf, even when the type is the
9846  same.
9847
9848
9849 <a name="7.8.2" href="#7.8.2"><h4>7.8.2 Functions for greatest-width integer types</h4></a>
9850
9851 <a name="7.8.2.1" href="#7.8.2.1"><h5>7.8.2.1 The imaxabs function</h5></a>
9852 <h6>Synopsis</h6>
9853 <p><!--para 1-->
9854 <pre>
9855          #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9856          intmax_t imaxabs(intmax_t j);</pre>
9857 <h6>Description</h6>
9858 <p><!--para 2-->
9859  The imaxabs function computes the absolute value of an integer j. If the result cannot
9860  be represented, the behavior is undefined.<sup><a href="#note193"><b>193)</b></a></sup>
9861  
9862  
9863  
9864 <!--page 212 indent 4-->
9865 <h6>Returns</h6>
9866 <p><!--para 3-->
9867  The imaxabs function returns the absolute value.
9868
9869 <h6>footnotes</h6>
9870 <p><a name="note193">193)</a> The absolute value of the most negative number cannot be represented in two's complement.
9871
9872
9873 <a name="7.8.2.2" href="#7.8.2.2"><h5>7.8.2.2 The imaxdiv function</h5></a>
9874 <h6>Synopsis</h6>
9875 <p><!--para 1-->
9876 <pre>
9877             #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9878             imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);</pre>
9879 <h6>Description</h6>
9880 <p><!--para 2-->
9881  The imaxdiv function computes numer / denom and numer % denom in a single
9882  operation.
9883 <h6>Returns</h6>
9884 <p><!--para 3-->
9885  The imaxdiv function returns a structure of type imaxdiv_t comprising both the
9886  quotient and the remainder. The structure shall contain (in either order) the members
9887  quot (the quotient) and rem (the remainder), each of which has type intmax_t. If
9888  either part of the result cannot be represented, the behavior is undefined.
9889
9890 <a name="7.8.2.3" href="#7.8.2.3"><h5>7.8.2.3 The strtoimax and strtoumax functions</h5></a>
9891 <h6>Synopsis</h6>
9892 <p><!--para 1-->
9893 <pre>
9894         #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9895         intmax_t strtoimax(const char * restrict nptr,
9896              char ** restrict endptr, int base);
9897         uintmax_t strtoumax(const char * restrict nptr,
9898              char ** restrict endptr, int base);</pre>
9899 <h6>Description</h6>
9900 <p><!--para 2-->
9901  The strtoimax and strtoumax functions are equivalent to the strtol, strtoll,
9902  strtoul, and strtoull functions, except that the initial portion of the string is
9903  converted to intmax_t and uintmax_t representation, respectively.
9904 <h6>Returns</h6>
9905 <p><!--para 3-->
9906  The strtoimax and strtoumax functions return the converted value, if any. If no
9907  conversion could be performed, zero is returned. If the correct value is outside the range
9908  of representable values, INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned
9909  (according to the return type and sign of the value, if any), and the value of the macro
9910  ERANGE is stored in errno.
9911 <p><b> Forward references</b>: the strtol, strtoll, strtoul, and strtoull functions
9912  (<a href="#7.20.1.4">7.20.1.4</a>).
9913 <!--page 213 indent 4-->
9914
9915 <a name="7.8.2.4" href="#7.8.2.4"><h5>7.8.2.4 The wcstoimax and wcstoumax functions</h5></a>
9916 <h6>Synopsis</h6>
9917 <p><!--para 1-->
9918 <pre>
9919         #include <a href="#7.17">&lt;stddef.h&gt;</a>           // for wchar_t
9920         #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9921         intmax_t wcstoimax(const wchar_t * restrict nptr,
9922              wchar_t ** restrict endptr, int base);
9923         uintmax_t wcstoumax(const wchar_t * restrict nptr,
9924              wchar_t ** restrict endptr, int base);</pre>
9925 <h6>Description</h6>
9926 <p><!--para 2-->
9927  The wcstoimax and wcstoumax functions are equivalent to the wcstol, wcstoll,
9928  wcstoul, and wcstoull functions except that the initial portion of the wide string is
9929  converted to intmax_t and uintmax_t representation, respectively.
9930 <h6>Returns</h6>
9931 <p><!--para 3-->
9932  The wcstoimax function returns the converted value, if any. If no conversion could be
9933  performed, zero is returned. If the correct value is outside the range of representable
9934  values, INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned (according to the
9935  return type and sign of the value, if any), and the value of the macro ERANGE is stored in
9936  errno.
9937 <p><b> Forward references</b>: the wcstol, wcstoll, wcstoul, and wcstoull functions
9938  (<a href="#7.24.4.1.2">7.24.4.1.2</a>).
9939 <!--page 214 indent 4-->
9940
9941 <a name="7.9" href="#7.9"><h3>7.9 Alternative spellings <iso646.h></h3></a>
9942 <p><!--para 1-->
9943  The header <a href="#7.9">&lt;iso646.h&gt;</a> defines the following eleven macros (on the left) that expand
9944  to the corresponding tokens (on the right):
9945 <!--page 215 indent 4-->
9946 <pre>
9947        and          &amp;&amp;
9948        and_eq       &amp;=
9949        bitand       &amp;
9950        bitor        |
9951        compl        ~
9952        not          !
9953        not_eq       !=
9954        or           ||
9955        or_eq        |=
9956        xor          ^
9957        xor_eq       ^=</pre>
9958
9959 <a name="7.10" href="#7.10"><h3>7.10 Sizes of integer types <limits.h></h3></a>
9960 <p><!--para 1-->
9961  The header <a href="#7.10">&lt;limits.h&gt;</a> defines several macros that expand to various limits and
9962  parameters of the standard integer types.
9963 <p><!--para 2-->
9964  The macros, their meanings, and the constraints (or restrictions) on their values are listed
9965  in <a href="#5.2.4.2.1">5.2.4.2.1</a>.
9966 <!--page 216 indent 4-->
9967
9968 <a name="7.11" href="#7.11"><h3>7.11 Localization <locale.h></h3></a>
9969 <p><!--para 1-->
9970  The header <a href="#7.11">&lt;locale.h&gt;</a> declares two functions, one type, and defines several macros.
9971 <p><!--para 2-->
9972  The type is
9973 <pre>
9974         struct lconv</pre>
9975  which contains members related to the formatting of numeric values. The structure shall
9976  contain at least the following members, in any order. The semantics of the members and
9977  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
9978  the values specified in the comments.
9979 <!--page 217 indent 4-->
9980 <p><!--para 3-->
9981 <pre>
9982         char   *decimal_point;                 //   "."
9983         char   *thousands_sep;                 //   ""
9984         char   *grouping;                      //   ""
9985         char   *mon_decimal_point;             //   ""
9986         char   *mon_thousands_sep;             //   ""
9987         char   *mon_grouping;                  //   ""
9988         char   *positive_sign;                 //   ""
9989         char   *negative_sign;                 //   ""
9990         char   *currency_symbol;               //   ""
9991         char   frac_digits;                    //   CHAR_MAX
9992         char   p_cs_precedes;                  //   CHAR_MAX
9993         char   n_cs_precedes;                  //   CHAR_MAX
9994         char   p_sep_by_space;                 //   CHAR_MAX
9995         char   n_sep_by_space;                 //   CHAR_MAX
9996         char   p_sign_posn;                    //   CHAR_MAX
9997         char   n_sign_posn;                    //   CHAR_MAX
9998         char   *int_curr_symbol;               //   ""
9999         char   int_frac_digits;                //   CHAR_MAX
10000         char   int_p_cs_precedes;              //   CHAR_MAX
10001         char   int_n_cs_precedes;              //   CHAR_MAX
10002         char   int_p_sep_by_space;             //   CHAR_MAX
10003         char   int_n_sep_by_space;             //   CHAR_MAX
10004         char   int_p_sign_posn;                //   CHAR_MAX
10005         char   int_n_sign_posn;                //   CHAR_MAX</pre>
10006  The macros defined are NULL (described in <a href="#7.17">7.17</a>); and
10007 <pre>
10008           LC_ALL
10009           LC_COLLATE
10010           LC_CTYPE
10011           LC_MONETARY
10012           LC_NUMERIC
10013           LC_TIME</pre>
10014  which expand to integer constant expressions with distinct values, suitable for use as the
10015  first argument to the setlocale function.<sup><a href="#note194"><b>194)</b></a></sup> Additional macro definitions, beginning
10016  with the characters LC_ and an uppercase letter,<sup><a href="#note195"><b>195)</b></a></sup> may also be specified by the
10017  implementation.
10018
10019 <h6>footnotes</h6>
10020 <p><a name="note194">194)</a> ISO/IEC 9945-2 specifies locale and charmap formats that may be used to specify locales for C.
10021
10022 <p><a name="note195">195)</a> See ''future library directions'' (<a href="#7.26.5">7.26.5</a>).
10023
10024
10025 <a name="7.11.1" href="#7.11.1"><h4>7.11.1 Locale control</h4></a>
10026
10027 <a name="7.11.1.1" href="#7.11.1.1"><h5>7.11.1.1 The setlocale function</h5></a>
10028 <h6>Synopsis</h6>
10029 <p><!--para 1-->
10030 <pre>
10031           #include <a href="#7.11">&lt;locale.h&gt;</a>
10032           char *setlocale(int category, const char *locale);</pre>
10033 <h6>Description</h6>
10034 <p><!--para 2-->
10035  The setlocale function selects the appropriate portion of the program's locale as
10036  specified by the category and locale arguments. The setlocale function may be
10037  used to change or query the program's entire current locale or portions thereof. The value
10038  LC_ALL for category names the program's entire locale; the other values for
10039  category name only a portion of the program's locale. LC_COLLATE affects the
10040  behavior of the strcoll and strxfrm functions. LC_CTYPE affects the behavior of
10041  the character handling functions<sup><a href="#note196"><b>196)</b></a></sup> and the multibyte and wide character functions.
10042  LC_MONETARY affects the monetary formatting information returned by the
10043  localeconv function. LC_NUMERIC affects the decimal-point character for the
10044  formatted input/output functions and the string conversion functions, as well as the
10045  nonmonetary formatting information returned by the localeconv function. LC_TIME
10046  affects the behavior of the strftime and wcsftime functions.
10047 <p><!--para 3-->
10048  A value of "C" for locale specifies the minimal environment for C translation; a value
10049  of "" for locale specifies the locale-specific native environment. Other
10050  implementation-defined strings may be passed as the second argument to setlocale.
10051  
10052 <!--page 218 indent 4-->
10053 <p><!--para 4-->
10054  At program startup, the equivalent of
10055 <pre>
10056          setlocale(LC_ALL, "C");</pre>
10057  is executed.
10058 <p><!--para 5-->
10059  The implementation shall behave as if no library function calls the setlocale function.
10060 <h6>Returns</h6>
10061 <p><!--para 6-->
10062  If a pointer to a string is given for locale and the selection can be honored, the
10063  setlocale function returns a pointer to the string associated with the specified
10064  category for the new locale. If the selection cannot be honored, the setlocale
10065  function returns a null pointer and the program's locale is not changed.
10066 <p><!--para 7-->
10067  A null pointer for locale causes the setlocale function to return a pointer to the
10068  string associated with the category for the program's current locale; the program's
10069  locale is not changed.<sup><a href="#note197"><b>197)</b></a></sup>
10070 <p><!--para 8-->
10071  The pointer to string returned by the setlocale function is such that a subsequent call
10072  with that string value and its associated category will restore that part of the program's
10073  locale. The string pointed to shall not be modified by the program, but may be
10074  overwritten by a subsequent call to the setlocale function.
10075 <p><b> Forward references</b>: formatted input/output functions (<a href="#7.19.6">7.19.6</a>), multibyte/wide
10076  character conversion functions (<a href="#7.20.7">7.20.7</a>), multibyte/wide string conversion functions
10077  (<a href="#7.20.8">7.20.8</a>), numeric conversion functions (<a href="#7.20.1">7.20.1</a>), the strcoll function (<a href="#7.21.4.3">7.21.4.3</a>), the
10078  strftime function (<a href="#7.23.3.5">7.23.3.5</a>), the strxfrm function (<a href="#7.21.4.5">7.21.4.5</a>).
10079
10080 <h6>footnotes</h6>
10081 <p><a name="note196">196)</a> The only functions in <a href="#7.4">7.4</a> whose behavior is not affected by the current locale are isdigit and
10082  isxdigit.
10083
10084 <p><a name="note197">197)</a> The implementation shall arrange to encode in a string the various categories due to a heterogeneous
10085  locale when category has the value LC_ALL.
10086
10087
10088 <a name="7.11.2" href="#7.11.2"><h4>7.11.2 Numeric formatting convention inquiry</h4></a>
10089
10090 <a name="7.11.2.1" href="#7.11.2.1"><h5>7.11.2.1 The localeconv function</h5></a>
10091 <h6>Synopsis</h6>
10092 <p><!--para 1-->
10093 <pre>
10094          #include <a href="#7.11">&lt;locale.h&gt;</a>
10095          struct lconv *localeconv(void);</pre>
10096 <h6>Description</h6>
10097 <p><!--para 2-->
10098  The localeconv function sets the components of an object with type struct lconv
10099  with values appropriate for the formatting of numeric quantities (monetary and otherwise)
10100  according to the rules of the current locale.
10101 <p><!--para 3-->
10102  The members of the structure with type char * are pointers to strings, any of which
10103  (except decimal_point) can point to "", to indicate that the value is not available in
10104  the current locale or is of zero length. Apart from grouping and mon_grouping, the
10105  
10106 <!--page 219 indent 0-->
10107  strings shall start and end in the initial shift state. The members with type char are
10108  nonnegative numbers, any of which can be CHAR_MAX to indicate that the value is not
10109  available in the current locale. The members include the following:
10110  char *decimal_point
10111 <pre>
10112            The decimal-point character used to format nonmonetary quantities.</pre>
10113  char *thousands_sep
10114 <pre>
10115            The character used to separate groups of digits before the decimal-point
10116            character in formatted nonmonetary quantities.</pre>
10117  char *grouping
10118 <pre>
10119            A string whose elements indicate the size of each group of digits in
10120            formatted nonmonetary quantities.</pre>
10121  char *mon_decimal_point
10122 <pre>
10123            The decimal-point used to format monetary quantities.</pre>
10124  char *mon_thousands_sep
10125 <pre>
10126            The separator for groups of digits before the decimal-point in formatted
10127            monetary quantities.</pre>
10128  char *mon_grouping
10129 <pre>
10130            A string whose elements indicate the size of each group of digits in
10131            formatted monetary quantities.</pre>
10132  char *positive_sign
10133 <pre>
10134            The string used to indicate a nonnegative-valued formatted monetary
10135            quantity.</pre>
10136  char *negative_sign
10137 <pre>
10138            The string used to indicate a negative-valued formatted monetary quantity.</pre>
10139  char *currency_symbol
10140 <pre>
10141            The local currency symbol applicable to the current locale.</pre>
10142  char frac_digits
10143 <pre>
10144            The number of fractional digits (those after the decimal-point) to be
10145            displayed in a locally formatted monetary quantity.</pre>
10146  char p_cs_precedes
10147 <pre>
10148            Set to 1 or 0 if the currency_symbol respectively precedes or
10149            succeeds the value for a nonnegative locally formatted monetary quantity.</pre>
10150  char n_cs_precedes
10151 <!--page 220 indent 0-->
10152 <pre>
10153            Set to 1 or 0 if the currency_symbol respectively precedes or
10154            succeeds the value for a negative locally formatted monetary quantity.</pre>
10155  char p_sep_by_space
10156 <pre>
10157            Set to a value indicating the separation of the currency_symbol, the
10158            sign string, and the value for a nonnegative locally formatted monetary
10159            quantity.</pre>
10160  char n_sep_by_space
10161 <pre>
10162            Set to a value indicating the separation of the currency_symbol, the
10163            sign string, and the value for a negative locally formatted monetary
10164            quantity.</pre>
10165  char p_sign_posn
10166 <pre>
10167            Set to a value indicating the positioning of the positive_sign for a
10168            nonnegative locally formatted monetary quantity.</pre>
10169  char n_sign_posn
10170 <pre>
10171            Set to a value indicating the positioning of the negative_sign for a
10172            negative locally formatted monetary quantity.</pre>
10173  char *int_curr_symbol
10174 <pre>
10175            The international currency symbol applicable to the current locale. The
10176            first three characters contain the alphabetic international currency symbol
10177            in accordance with those specified in ISO 4217. The fourth character
10178            (immediately preceding the null character) is the character used to separate
10179            the international currency symbol from the monetary quantity.</pre>
10180  char int_frac_digits
10181 <pre>
10182            The number of fractional digits (those after the decimal-point) to be
10183            displayed in an internationally formatted monetary quantity.</pre>
10184  char int_p_cs_precedes
10185 <pre>
10186            Set to 1 or 0 if the int_curr_symbol respectively precedes or
10187            succeeds the value for a nonnegative internationally formatted monetary
10188            quantity.</pre>
10189  char int_n_cs_precedes
10190 <pre>
10191            Set to 1 or 0 if the int_curr_symbol respectively precedes or
10192            succeeds the value for a negative internationally formatted monetary
10193            quantity.</pre>
10194  char int_p_sep_by_space
10195 <!--page 221 indent 4-->
10196 <pre>
10197            Set to a value indicating the separation of the int_curr_symbol, the
10198            sign string, and the value for a nonnegative internationally formatted
10199            monetary quantity.</pre>
10200  char int_n_sep_by_space
10201 <pre>
10202            Set to a value indicating the separation of the int_curr_symbol, the
10203            sign string, and the value for a negative internationally formatted monetary
10204            quantity.</pre>
10205  char int_p_sign_posn
10206 <pre>
10207            Set to a value indicating the positioning of the positive_sign for a
10208            nonnegative internationally formatted monetary quantity.</pre>
10209  char int_n_sign_posn
10210 <p><!--para 4-->
10211 <pre>
10212            Set to a value indicating the positioning of the negative_sign for a
10213            negative internationally formatted monetary quantity.</pre>
10214  The elements of grouping and mon_grouping are interpreted according to the
10215  following:
10216  CHAR_MAX      No further grouping is to be performed.
10217  0             The previous element is to be repeatedly used for the remainder of the
10218 <pre>
10219                digits.</pre>
10220  other         The integer value is the number of digits that compose the current group.
10221 <p><!--para 5-->
10222 <pre>
10223                The next element is examined to determine the size of the next group of
10224                digits before the current group.</pre>
10225  The values of p_sep_by_space, n_sep_by_space, int_p_sep_by_space,
10226  and int_n_sep_by_space are interpreted according to the following:
10227  0   No space separates the currency symbol and value.
10228  1   If the currency symbol and sign string are adjacent, a space separates them from the
10229 <pre>
10230      value; otherwise, a space separates the currency symbol from the value.</pre>
10231  2   If the currency symbol and sign string are adjacent, a space separates them;
10232 <pre>
10233      otherwise, a space separates the sign string from the value.</pre>
10234  For int_p_sep_by_space and int_n_sep_by_space, the fourth character of
10235  int_curr_symbol is used instead of a space.
10236 <p><!--para 6-->
10237  The values of p_sign_posn, n_sign_posn, int_p_sign_posn,                            and
10238  int_n_sign_posn are interpreted according to the following:
10239  0   Parentheses surround the quantity and currency symbol.
10240  1   The sign string precedes the quantity and currency symbol.
10241  2   The sign string succeeds the quantity and currency symbol.
10242  3   The sign string immediately precedes the currency symbol.
10243  4   The sign string immediately succeeds the currency symbol.
10244 <!--page 222 indent 5-->
10245 <p><!--para 7-->
10246  The implementation shall behave as if no library function calls the localeconv
10247  function.
10248 <h6>Returns</h6>
10249 <p><!--para 8-->
10250  The localeconv function returns a pointer to the filled-in object. The structure
10251  pointed to by the return value shall not be modified by the program, but may be
10252  overwritten by a subsequent call to the localeconv function. In addition, calls to the
10253  setlocale function with categories LC_ALL, LC_MONETARY, or LC_NUMERIC may
10254  overwrite the contents of the structure.
10255 <p><!--para 9-->
10256  EXAMPLE 1 The following table illustrates rules which may well be used by four countries to format
10257  monetary quantities.
10258 <pre>
10259                                Local format                                     International format</pre>
10260  
10261  Country            Positive                  Negative                    Positive               Negative
10262  
10263  Country1     1.234,56 mk             -1.234,56 mk                  FIM   1.234,56         FIM -1.234,56
10264  Country2     L.1.234                 -L.1.234                      ITL   1.234            -ITL 1.234
10265  Country3     fl. 1.234,56              fl. -1.234,56                   NLG   1.234,56         NLG -1.234,56
10266  Country4     SFrs.1,234.56           SFrs.1,234.56C                CHF   1,234.56         CHF 1,234.56C
10267 <p><!--para 10-->
10268  For these four countries, the respective values for the monetary members of the structure returned by
10269  localeconv could be:
10270 <pre>
10271                                    Country1              Country2              Country3            Country4</pre>
10272  
10273  mon_decimal_point                 ","                   ""                   ","                 "."
10274  mon_thousands_sep                 "."                   "."                  "."                 ","
10275  mon_grouping                      "\3"                  "\3"                 "\3"                "\3"
10276  positive_sign                     ""                    ""                   ""                  ""
10277  negative_sign                     "-"                   "-"                  "-"                 "C"
10278  currency_symbol                   "mk"                  "L."                 "\u0192"            "SFrs."
10279  frac_digits                       2                     0                    2                   2
10280  p_cs_precedes                     0                     1                    1                   1
10281  n_cs_precedes                     0                     1                    1                   1
10282  p_sep_by_space                    1                     0                    1                   0
10283  n_sep_by_space                    1                     0                    2                   0
10284  p_sign_posn                       1                     1                    1                   1
10285  n_sign_posn                       1                     1                    4                   2
10286  int_curr_symbol                   "FIM "                "ITL "               "NLG "              "CHF "
10287  int_frac_digits                   2                     0                    2                   2
10288  int_p_cs_precedes                 1                     1                    1                   1
10289  int_n_cs_precedes                 1                     1                    1                   1
10290  int_p_sep_by_space                1                     1                    1                   1
10291  int_n_sep_by_space                2                     1                    2                   1
10292  int_p_sign_posn                   1                     1                    1                   1
10293  int_n_sign_posn                   4                     1                    4                   2
10294 <!--page 223 indent 5-->
10295 <p><!--para 11-->
10296  EXAMPLE 2 The following table illustrates how the cs_precedes, sep_by_space, and sign_posn members
10297  affect the formatted value.
10298 <pre>
10299                                                                p_sep_by_space</pre>
10300  
10301  p_cs_precedes           p_sign_posn                0                   1                  2
10302  
10303 <pre>
10304                  0                    0         (<a href="#1.25">1.25</a>$)            (<a href="#1.25">1.25</a> $)            (<a href="#1.25">1.25</a>$)
10305                                       1         +1.25$             +1.25 $             + <a href="#1.25">1.25</a>$
10306                                       2         <a href="#1.25">1.25</a>$+             <a href="#1.25">1.25</a> $+             <a href="#1.25">1.25</a>$ +
10307                                       3         <a href="#1.25">1.25</a>+$             <a href="#1.25">1.25</a> +$             <a href="#1.25">1.25</a>+ $
10308                                       4         <a href="#1.25">1.25</a>$+             <a href="#1.25">1.25</a> $+             <a href="#1.25">1.25</a>$ +</pre>
10309  
10310 <!--page 224 indent 4-->
10311 <pre>
10312                  1                    0         ($1.25)            ($ <a href="#1.25">1.25</a>)            ($1.25)
10313                                       1         +$1.25             +$ <a href="#1.25">1.25</a>             + $1.25
10314                                       2         $1.25+             $ <a href="#1.25">1.25</a>+             $1.25 +
10315                                       3         +$1.25             +$ <a href="#1.25">1.25</a>             + $1.25
10316                                       4         $+1.25             $+ <a href="#1.25">1.25</a>             $ +1.25</pre>
10317
10318 <a name="7.12" href="#7.12"><h3>7.12 Mathematics <math.h></h3></a>
10319 <p><!--para 1-->
10320  The header <a href="#7.12">&lt;math.h&gt;</a> declares two types and many mathematical functions and defines
10321  several macros. Most synopses specify a family of functions consisting of a principal
10322  function with one or more double parameters, a double return value, or both; and
10323  other functions with the same name but with f and l suffixes, which are corresponding
10324  functions with float and long double parameters, return values, or both.<sup><a href="#note198"><b>198)</b></a></sup>
10325  Integer arithmetic functions and conversion functions are discussed later.
10326 <p><!--para 2-->
10327  The types
10328 <pre>
10329          float_t
10330          double_t</pre>
10331  are floating types at least as wide as float and double, respectively, and such that
10332  double_t is at least as wide as float_t. If FLT_EVAL_METHOD equals 0,
10333  float_t and double_t are float and double, respectively; if
10334  FLT_EVAL_METHOD equals 1, they are both double; if FLT_EVAL_METHOD equals
10335  2, they are both long double; and for other values of FLT_EVAL_METHOD, they are
10336  otherwise implementation-defined.<sup><a href="#note199"><b>199)</b></a></sup>
10337 <p><!--para 3-->
10338  The macro
10339 <pre>
10340          HUGE_VAL</pre>
10341  expands to a positive double constant expression, not necessarily representable as a
10342  float. The macros
10343 <pre>
10344          HUGE_VALF
10345          HUGE_VALL</pre>
10346  are respectively float and long double analogs of HUGE_VAL.<sup><a href="#note200"><b>200)</b></a></sup>
10347 <p><!--para 4-->
10348  The macro
10349 <pre>
10350          INFINITY</pre>
10351  expands to a constant expression of type float representing positive or unsigned
10352  infinity, if available; else to a positive constant of type float that overflows at
10353  
10354  
10355  
10356 <!--page 225 indent 4-->
10357  translation time.<sup><a href="#note201"><b>201)</b></a></sup>
10358 <p><!--para 5-->
10359  The macro
10360 <pre>
10361           NAN</pre>
10362  is defined if and only if the implementation supports quiet NaNs for the float type. It
10363  expands to a constant expression of type float representing a quiet NaN.
10364 <p><!--para 6-->
10365  The number classification macros
10366 <pre>
10367           FP_INFINITE
10368           FP_NAN
10369           FP_NORMAL
10370           FP_SUBNORMAL
10371           FP_ZERO</pre>
10372  represent the mutually exclusive kinds of floating-point values. They expand to integer
10373  constant expressions with distinct values. Additional implementation-defined floating-
10374  point classifications, with macro definitions beginning with FP_ and an uppercase letter,
10375  may also be specified by the implementation.
10376 <p><!--para 7-->
10377  The macro
10378 <pre>
10379           FP_FAST_FMA</pre>
10380  is optionally defined. If defined, it indicates that the fma function generally executes
10381  about as fast as, or faster than, a multiply and an add of double operands.<sup><a href="#note202"><b>202)</b></a></sup> The
10382  macros
10383 <pre>
10384           FP_FAST_FMAF
10385           FP_FAST_FMAL</pre>
10386  are, respectively, float and long double analogs of FP_FAST_FMA. If defined,
10387  these macros expand to the integer constant 1.
10388 <p><!--para 8-->
10389  The macros
10390 <pre>
10391           FP_ILOGB0
10392           FP_ILOGBNAN</pre>
10393  expand to integer constant expressions whose values are returned by ilogb(x) if x is
10394  zero or NaN, respectively. The value of FP_ILOGB0 shall be either INT_MIN or
10395  -INT_MAX. The value of FP_ILOGBNAN shall be either INT_MAX or INT_MIN.
10396  
10397  
10398 <!--page 226 indent 4-->
10399 <p><!--para 9-->
10400  The macros
10401 <pre>
10402          MATH_ERRNO
10403          MATH_ERREXCEPT</pre>
10404  expand to the integer constants 1 and 2, respectively; the macro
10405 <pre>
10406          math_errhandling</pre>
10407  expands to an expression that has type int and the value MATH_ERRNO,
10408  MATH_ERREXCEPT, or the bitwise OR of both. The value of math_errhandling is
10409  constant for the duration of the program. It is unspecified whether
10410  math_errhandling is a macro or an identifier with external linkage. If a macro
10411  definition is suppressed or a program defines an identifier with the name
10412  math_errhandling, the behavior is undefined.               If the expression
10413  math_errhandling &amp; MATH_ERREXCEPT can be nonzero, the implementation
10414  shall define the macros FE_DIVBYZERO, FE_INVALID, and FE_OVERFLOW in
10415  <a href="#7.6">&lt;fenv.h&gt;</a>.
10416
10417 <h6>footnotes</h6>
10418 <p><a name="note198">198)</a> Particularly on systems with wide expression evaluation, a <a href="#7.12">&lt;math.h&gt;</a> function might pass arguments
10419  and return values in wider format than the synopsis prototype indicates.
10420
10421 <p><a name="note199">199)</a> The types float_t and double_t are intended to be the implementation's most efficient types at
10422  least as wide as float and double, respectively. For FLT_EVAL_METHOD equal 0, 1, or 2, the
10423  type float_t is the narrowest type used by the implementation to evaluate floating expressions.
10424
10425 <p><a name="note200">200)</a> HUGE_VAL, HUGE_VALF, and HUGE_VALL can be positive infinities in an implementation that
10426  supports infinities.
10427
10428 <p><a name="note201">201)</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.
10429
10430 <p><a name="note202">202)</a> Typically, the FP_FAST_FMA macro is defined if and only if the fma function is implemented
10431  directly with a hardware multiply-add instruction. Software implementations are expected to be
10432  substantially slower.
10433
10434
10435 <a name="7.12.1" href="#7.12.1"><h4>7.12.1 Treatment of error conditions</h4></a>
10436 <p><!--para 1-->
10437  The behavior of each of the functions in <a href="#7.12">&lt;math.h&gt;</a> is specified for all representable
10438  values of its input arguments, except where stated otherwise. Each function shall execute
10439  as if it were a single operation without generating any externally visible exceptional
10440  conditions.
10441 <p><!--para 2-->
10442  For all functions, a domain error occurs if an input argument is outside the domain over
10443  which the mathematical function is defined. The description of each function lists any
10444  required domain errors; an implementation may define additional domain errors, provided
10445  that such errors are consistent with the mathematical definition of the function.<sup><a href="#note203"><b>203)</b></a></sup> On a
10446  domain error, the function returns an implementation-defined value; if the integer
10447  expression math_errhandling &amp; MATH_ERRNO is nonzero, the integer expression
10448  errno acquires the value EDOM; if the integer expression math_errhandling &amp;
10449  MATH_ERREXCEPT is nonzero, the ''invalid'' floating-point exception is raised.
10450 <p><!--para 3-->
10451  Similarly, a range error occurs if the mathematical result of the function cannot be
10452  represented in an object of the specified type, due to extreme magnitude.
10453 <p><!--para 4-->
10454  A floating result overflows if the magnitude of the mathematical result is finite but so
10455  large that the mathematical result cannot be represented without extraordinary roundoff
10456  error in an object of the specified type. If a floating result overflows and default rounding
10457  is in effect, or if the mathematical result is an exact infinity from finite arguments (for
10458  example log(0.0)), then the function returns the value of the macro HUGE_VAL,
10459  
10460  
10461 <!--page 227 indent 4-->
10462  HUGE_VALF, or HUGE_VALL according to the return type, with the same sign as the
10463  correct value of the function; if the integer expression math_errhandling &amp;
10464  MATH_ERRNO is nonzero, the integer expression errno acquires the value ERANGE; if
10465  the integer expression math_errhandling &amp; MATH_ERREXCEPT is nonzero, the
10466  ''divide-by-zero'' floating-point exception is raised if the mathematical result is an exact
10467  infinity and the ''overflow'' floating-point exception is raised otherwise.
10468 <p><!--para 5-->
10469  The result underflows if the magnitude of the mathematical result is so small that the
10470  mathematical result cannot be represented, without extraordinary roundoff error, in an
10471  object of the specified type.<sup><a href="#note204"><b>204)</b></a></sup> If the result underflows, the function returns an
10472  implementation-defined value whose magnitude is no greater than the smallest
10473  normalized positive number in the specified type; if the integer expression
10474  math_errhandling &amp; MATH_ERRNO is nonzero, whether errno acquires the
10475  value    ERANGE       is    implementation-defined;     if   the  integer   expression
10476  math_errhandling &amp; MATH_ERREXCEPT is nonzero, whether the ''underflow''
10477  floating-point exception is raised is implementation-defined.
10478
10479 <h6>footnotes</h6>
10480 <p><a name="note203">203)</a> In an implementation that supports infinities, this allows an infinity as an argument to be a domain
10481  error if the mathematical domain of the function does not include the infinity.
10482
10483 <p><a name="note204">204)</a> The term underflow here is intended to encompass both ''gradual underflow'' as in IEC 60559 and
10484  also ''flush-to-zero'' underflow.
10485
10486
10487 <a name="7.12.2" href="#7.12.2"><h4>7.12.2 The FP_CONTRACT pragma</h4></a>
10488 <h6>Synopsis</h6>
10489 <p><!--para 1-->
10490 <pre>
10491          #include <a href="#7.12">&lt;math.h&gt;</a>
10492          #pragma STDC FP_CONTRACT on-off-switch</pre>
10493 <h6>Description</h6>
10494 <p><!--para 2-->
10495  The FP_CONTRACT pragma can be used to allow (if the state is ''on'') or disallow (if the
10496  state is ''off'') the implementation to contract expressions (<a href="#6.5">6.5</a>). Each pragma can occur
10497  either outside external declarations or preceding all explicit declarations and statements
10498  inside a compound statement. When outside external declarations, the pragma takes
10499  effect from its occurrence until another FP_CONTRACT pragma is encountered, or until
10500  the end of the translation unit. When inside a compound statement, the pragma takes
10501  effect from its occurrence until another FP_CONTRACT pragma is encountered
10502  (including within a nested compound statement), or until the end of the compound
10503  statement; at the end of a compound statement the state for the pragma is restored to its
10504  condition just before the compound statement. If this pragma is used in any other
10505  context, the behavior is undefined. The default state (''on'' or ''off'') for the pragma is
10506  implementation-defined.
10507  
10508  
10509  
10510  
10511 <!--page 228 indent 4-->
10512
10513 <a name="7.12.3" href="#7.12.3"><h4>7.12.3 Classification macros</h4></a>
10514 <p><!--para 1-->
10515  In the synopses in this subclause, real-floating indicates that the argument shall be an
10516  expression of real floating type.
10517
10518 <a name="7.12.3.1" href="#7.12.3.1"><h5>7.12.3.1 The fpclassify macro</h5></a>
10519 <h6>Synopsis</h6>
10520 <p><!--para 1-->
10521 <pre>
10522           #include <a href="#7.12">&lt;math.h&gt;</a>
10523           int fpclassify(real-floating x);</pre>
10524 <h6>Description</h6>
10525 <p><!--para 2-->
10526  The fpclassify macro classifies its argument value as NaN, infinite, normal,
10527  subnormal, zero, or into another implementation-defined category. First, an argument
10528  represented in a format wider than its semantic type is converted to its semantic type.
10529  Then classification is based on the type of the argument.<sup><a href="#note205"><b>205)</b></a></sup>
10530 <h6>Returns</h6>
10531 <p><!--para 3-->
10532  The fpclassify macro returns the value of the number classification macro
10533  appropriate to the value of its argument.
10534 <p><!--para 4-->
10535  EXAMPLE        The fpclassify macro might be implemented in terms of ordinary functions as
10536 <pre>
10537           #define fpclassify(x) \
10538                 ((sizeof (x) == sizeof (float)) ? __fpclassifyf(x) : \
10539                  (sizeof (x) == sizeof (double)) ? __fpclassifyd(x) : \
10540                                                    __fpclassifyl(x))</pre>
10541  
10542
10543 <h6>footnotes</h6>
10544 <p><a name="note205">205)</a> Since an expression can be evaluated with more range and precision than its type has, it is important to
10545  know the type that classification is based on. For example, a normal long double value might
10546  become subnormal when converted to double, and zero when converted to float.
10547
10548
10549 <a name="7.12.3.2" href="#7.12.3.2"><h5>7.12.3.2 The isfinite macro</h5></a>
10550 <h6>Synopsis</h6>
10551 <p><!--para 1-->
10552 <pre>
10553           #include <a href="#7.12">&lt;math.h&gt;</a>
10554           int isfinite(real-floating x);</pre>
10555 <h6>Description</h6>
10556 <p><!--para 2-->
10557  The isfinite macro determines whether its argument has a finite value (zero,
10558  subnormal, or normal, and not infinite or NaN). First, an argument represented in a
10559  format wider than its semantic type is converted to its semantic type. Then determination
10560  is based on the type of the argument.
10561  
10562  
10563  
10564  
10565 <!--page 229 indent 4-->
10566 <h6>Returns</h6>
10567 <p><!--para 3-->
10568  The isfinite macro returns a nonzero value if and only if its argument has a finite
10569  value.
10570
10571 <a name="7.12.3.3" href="#7.12.3.3"><h5>7.12.3.3 The isinf macro</h5></a>
10572 <h6>Synopsis</h6>
10573 <p><!--para 1-->
10574 <pre>
10575          #include <a href="#7.12">&lt;math.h&gt;</a>
10576          int isinf(real-floating x);</pre>
10577 <h6>Description</h6>
10578 <p><!--para 2-->
10579  The isinf macro determines whether its argument value is an infinity (positive or
10580  negative). First, an argument represented in a format wider than its semantic type is
10581  converted to its semantic type. Then determination is based on the type of the argument.
10582 <h6>Returns</h6>
10583 <p><!--para 3-->
10584  The isinf macro returns a nonzero value if and only if its argument has an infinite
10585  value.
10586
10587 <a name="7.12.3.4" href="#7.12.3.4"><h5>7.12.3.4 The isnan macro</h5></a>
10588 <h6>Synopsis</h6>
10589 <p><!--para 1-->
10590 <pre>
10591          #include <a href="#7.12">&lt;math.h&gt;</a>
10592          int isnan(real-floating x);</pre>
10593 <h6>Description</h6>
10594 <p><!--para 2-->
10595  The isnan macro determines whether its argument value is a NaN. First, an argument
10596  represented in a format wider than its semantic type is converted to its semantic type.
10597  Then determination is based on the type of the argument.<sup><a href="#note206"><b>206)</b></a></sup>
10598 <h6>Returns</h6>
10599 <p><!--para 3-->
10600  The isnan macro returns a nonzero value if and only if its argument has a NaN value.
10601
10602 <h6>footnotes</h6>
10603 <p><a name="note206">206)</a> For the isnan macro, the type for determination does not matter unless the implementation supports
10604  NaNs in the evaluation type but not in the semantic type.
10605
10606
10607 <a name="7.12.3.5" href="#7.12.3.5"><h5>7.12.3.5 The isnormal macro</h5></a>
10608 <h6>Synopsis</h6>
10609 <p><!--para 1-->
10610 <pre>
10611          #include <a href="#7.12">&lt;math.h&gt;</a>
10612          int isnormal(real-floating x);</pre>
10613  
10614  
10615  
10616  
10617 <!--page 230 indent 4-->
10618 <h6>Description</h6>
10619 <p><!--para 2-->
10620  The isnormal macro determines whether its argument value is normal (neither zero,
10621  subnormal, infinite, nor NaN). First, an argument represented in a format wider than its
10622  semantic type is converted to its semantic type. Then determination is based on the type
10623  of the argument.
10624 <h6>Returns</h6>
10625 <p><!--para 3-->
10626  The isnormal macro returns a nonzero value if and only if its argument has a normal
10627  value.
10628
10629 <a name="7.12.3.6" href="#7.12.3.6"><h5>7.12.3.6 The signbit macro</h5></a>
10630 <h6>Synopsis</h6>
10631 <p><!--para 1-->
10632 <pre>
10633          #include <a href="#7.12">&lt;math.h&gt;</a>
10634          int signbit(real-floating x);</pre>
10635 <h6>Description</h6>
10636 <p><!--para 2-->
10637  The signbit macro determines whether the sign of its argument value is negative.<sup><a href="#note207"><b>207)</b></a></sup>
10638 <h6>Returns</h6>
10639 <p><!--para 3-->
10640  The signbit macro returns a nonzero value if and only if the sign of its argument value
10641  is negative.
10642
10643 <h6>footnotes</h6>
10644 <p><a name="note207">207)</a> The signbit macro reports the sign of all values, including infinities, zeros, and NaNs. If zero is
10645  unsigned, it is treated as positive.
10646
10647
10648 <a name="7.12.4" href="#7.12.4"><h4>7.12.4 Trigonometric functions</h4></a>
10649
10650 <a name="7.12.4.1" href="#7.12.4.1"><h5>7.12.4.1 The acos functions</h5></a>
10651 <h6>Synopsis</h6>
10652 <p><!--para 1-->
10653 <pre>
10654          #include <a href="#7.12">&lt;math.h&gt;</a>
10655          double acos(double x);
10656          float acosf(float x);
10657          long double acosl(long double x);</pre>
10658 <h6>Description</h6>
10659 <p><!--para 2-->
10660  The acos functions compute the principal value of the arc cosine of x. A domain error
10661  occurs for arguments not in the interval [-1, +1].
10662 <h6>Returns</h6>
10663 <p><!--para 3-->
10664  The acos functions return arccos x in the interval [0, pi ] radians.
10665  
10666  
10667  
10668  
10669 <!--page 231 indent 4-->
10670
10671 <a name="7.12.4.2" href="#7.12.4.2"><h5>7.12.4.2 The asin functions</h5></a>
10672 <h6>Synopsis</h6>
10673 <p><!--para 1-->
10674 <pre>
10675         #include <a href="#7.12">&lt;math.h&gt;</a>
10676         double asin(double x);
10677         float asinf(float x);
10678         long double asinl(long double x);</pre>
10679 <h6>Description</h6>
10680 <p><!--para 2-->
10681  The asin functions compute the principal value of the arc sine of x. A domain error
10682  occurs for arguments not in the interval [-1, +1].
10683 <h6>Returns</h6>
10684 <p><!--para 3-->
10685  The asin functions return arcsin x in the interval [-pi /2, +pi /2] radians.
10686
10687 <a name="7.12.4.3" href="#7.12.4.3"><h5>7.12.4.3 The atan functions</h5></a>
10688 <h6>Synopsis</h6>
10689 <p><!--para 1-->
10690 <pre>
10691         #include <a href="#7.12">&lt;math.h&gt;</a>
10692         double atan(double x);
10693         float atanf(float x);
10694         long double atanl(long double x);</pre>
10695 <h6>Description</h6>
10696 <p><!--para 2-->
10697  The atan functions compute the principal value of the arc tangent of x.
10698 <h6>Returns</h6>
10699 <p><!--para 3-->
10700  The atan functions return arctan x in the interval [-pi /2, +pi /2] radians.
10701
10702 <a name="7.12.4.4" href="#7.12.4.4"><h5>7.12.4.4 The atan2 functions</h5></a>
10703 <h6>Synopsis</h6>
10704 <p><!--para 1-->
10705 <pre>
10706         #include <a href="#7.12">&lt;math.h&gt;</a>
10707         double atan2(double y, double x);
10708         float atan2f(float y, float x);
10709         long double atan2l(long double y, long double x);</pre>
10710 <h6>Description</h6>
10711 <p><!--para 2-->
10712  The atan2 functions compute the value of the arc tangent of y/x, using the signs of both
10713  arguments to determine the quadrant of the return value. A domain error may occur if
10714  both arguments are zero.
10715 <h6>Returns</h6>
10716 <p><!--para 3-->
10717  The atan2 functions return arctan y/x in the interval [-pi , +pi ] radians.
10718 <!--page 232 indent 4-->
10719
10720 <a name="7.12.4.5" href="#7.12.4.5"><h5>7.12.4.5 The cos functions</h5></a>
10721 <h6>Synopsis</h6>
10722 <p><!--para 1-->
10723 <pre>
10724         #include <a href="#7.12">&lt;math.h&gt;</a>
10725         double cos(double x);
10726         float cosf(float x);
10727         long double cosl(long double x);</pre>
10728 <h6>Description</h6>
10729 <p><!--para 2-->
10730  The cos functions compute the cosine of x (measured in radians).
10731 <h6>Returns</h6>
10732 <p><!--para 3-->
10733  The cos functions return cos x.
10734
10735 <a name="7.12.4.6" href="#7.12.4.6"><h5>7.12.4.6 The sin functions</h5></a>
10736 <h6>Synopsis</h6>
10737 <p><!--para 1-->
10738 <pre>
10739         #include <a href="#7.12">&lt;math.h&gt;</a>
10740         double sin(double x);
10741         float sinf(float x);
10742         long double sinl(long double x);</pre>
10743 <h6>Description</h6>
10744 <p><!--para 2-->
10745  The sin functions compute the sine of x (measured in radians).
10746 <h6>Returns</h6>
10747 <p><!--para 3-->
10748  The sin functions return sin x.
10749
10750 <a name="7.12.4.7" href="#7.12.4.7"><h5>7.12.4.7 The tan functions</h5></a>
10751 <h6>Synopsis</h6>
10752 <p><!--para 1-->
10753 <pre>
10754         #include <a href="#7.12">&lt;math.h&gt;</a>
10755         double tan(double x);
10756         float tanf(float x);
10757         long double tanl(long double x);</pre>
10758 <h6>Description</h6>
10759 <p><!--para 2-->
10760  The tan functions return the tangent of x (measured in radians).
10761 <h6>Returns</h6>
10762 <p><!--para 3-->
10763  The tan functions return tan x.
10764 <!--page 233 indent 4-->
10765
10766 <a name="7.12.5" href="#7.12.5"><h4>7.12.5 Hyperbolic functions</h4></a>
10767
10768 <a name="7.12.5.1" href="#7.12.5.1"><h5>7.12.5.1 The acosh functions</h5></a>
10769 <h6>Synopsis</h6>
10770 <p><!--para 1-->
10771 <pre>
10772         #include <a href="#7.12">&lt;math.h&gt;</a>
10773         double acosh(double x);
10774         float acoshf(float x);
10775         long double acoshl(long double x);</pre>
10776 <h6>Description</h6>
10777 <p><!--para 2-->
10778  The acosh functions compute the (nonnegative) arc hyperbolic cosine of x. A domain
10779  error occurs for arguments less than 1.
10780 <h6>Returns</h6>
10781 <p><!--para 3-->
10782  The acosh functions return arcosh x in the interval [0, +(inf)].
10783
10784 <a name="7.12.5.2" href="#7.12.5.2"><h5>7.12.5.2 The asinh functions</h5></a>
10785 <h6>Synopsis</h6>
10786 <p><!--para 1-->
10787 <pre>
10788         #include <a href="#7.12">&lt;math.h&gt;</a>
10789         double asinh(double x);
10790         float asinhf(float x);
10791         long double asinhl(long double x);</pre>
10792 <h6>Description</h6>
10793 <p><!--para 2-->
10794  The asinh functions compute the arc hyperbolic sine of x.
10795 <h6>Returns</h6>
10796 <p><!--para 3-->
10797  The asinh functions return arsinh x.
10798
10799 <a name="7.12.5.3" href="#7.12.5.3"><h5>7.12.5.3 The atanh functions</h5></a>
10800 <h6>Synopsis</h6>
10801 <p><!--para 1-->
10802 <pre>
10803         #include <a href="#7.12">&lt;math.h&gt;</a>
10804         double atanh(double x);
10805         float atanhf(float x);
10806         long double atanhl(long double x);</pre>
10807 <h6>Description</h6>
10808 <p><!--para 2-->
10809  The atanh functions compute the arc hyperbolic tangent of x. A domain error occurs
10810  for arguments not in the interval [-1, +1]. A range error may occur if the argument
10811  equals -1 or +1.
10812 <!--page 234 indent 4-->
10813 <h6>Returns</h6>
10814 <p><!--para 3-->
10815  The atanh functions return artanh x.
10816
10817 <a name="7.12.5.4" href="#7.12.5.4"><h5>7.12.5.4 The cosh functions</h5></a>
10818 <h6>Synopsis</h6>
10819 <p><!--para 1-->
10820 <pre>
10821         #include <a href="#7.12">&lt;math.h&gt;</a>
10822         double cosh(double x);
10823         float coshf(float x);
10824         long double coshl(long double x);</pre>
10825 <h6>Description</h6>
10826 <p><!--para 2-->
10827  The cosh functions compute the hyperbolic cosine of x. A range error occurs if the
10828  magnitude of x is too large.
10829 <h6>Returns</h6>
10830 <p><!--para 3-->
10831  The cosh functions return cosh x.
10832
10833 <a name="7.12.5.5" href="#7.12.5.5"><h5>7.12.5.5 The sinh functions</h5></a>
10834 <h6>Synopsis</h6>
10835 <p><!--para 1-->
10836 <pre>
10837         #include <a href="#7.12">&lt;math.h&gt;</a>
10838         double sinh(double x);
10839         float sinhf(float x);
10840         long double sinhl(long double x);</pre>
10841 <h6>Description</h6>
10842 <p><!--para 2-->
10843  The sinh functions compute the hyperbolic sine of x. A range error occurs if the
10844  magnitude of x is too large.
10845 <h6>Returns</h6>
10846 <p><!--para 3-->
10847  The sinh functions return sinh x.
10848
10849 <a name="7.12.5.6" href="#7.12.5.6"><h5>7.12.5.6 The tanh functions</h5></a>
10850 <h6>Synopsis</h6>
10851 <p><!--para 1-->
10852 <pre>
10853         #include <a href="#7.12">&lt;math.h&gt;</a>
10854         double tanh(double x);
10855         float tanhf(float x);
10856         long double tanhl(long double x);</pre>
10857 <h6>Description</h6>
10858 <p><!--para 2-->
10859  The tanh functions compute the hyperbolic tangent of x.
10860 <!--page 235 indent 4-->
10861 <h6>Returns</h6>
10862 <p><!--para 3-->
10863  The tanh functions return tanh x.
10864
10865 <a name="7.12.6" href="#7.12.6"><h4>7.12.6 Exponential and logarithmic functions</h4></a>
10866
10867 <a name="7.12.6.1" href="#7.12.6.1"><h5>7.12.6.1 The exp functions</h5></a>
10868 <h6>Synopsis</h6>
10869 <p><!--para 1-->
10870 <pre>
10871         #include <a href="#7.12">&lt;math.h&gt;</a>
10872         double exp(double x);
10873         float expf(float x);
10874         long double expl(long double x);</pre>
10875 <h6>Description</h6>
10876 <p><!--para 2-->
10877  The exp functions compute the base-e exponential of x. A range error occurs if the
10878  magnitude of x is too large.
10879 <h6>Returns</h6>
10880 <p><!--para 3-->
10881  The exp functions return ex .
10882
10883 <a name="7.12.6.2" href="#7.12.6.2"><h5>7.12.6.2 The exp2 functions</h5></a>
10884 <h6>Synopsis</h6>
10885 <p><!--para 1-->
10886 <pre>
10887         #include <a href="#7.12">&lt;math.h&gt;</a>
10888         double exp2(double x);
10889         float exp2f(float x);
10890         long double exp2l(long double x);</pre>
10891 <h6>Description</h6>
10892 <p><!--para 2-->
10893  The exp2 functions compute the base-2 exponential of x. A range error occurs if the
10894  magnitude of x is too large.
10895 <h6>Returns</h6>
10896 <p><!--para 3-->
10897  The exp2 functions return 2x .
10898
10899 <a name="7.12.6.3" href="#7.12.6.3"><h5>7.12.6.3 The expm1 functions</h5></a>
10900 <h6>Synopsis</h6>
10901 <p><!--para 1-->
10902 <!--page 236 indent 4-->
10903 <pre>
10904         #include <a href="#7.12">&lt;math.h&gt;</a>
10905         double expm1(double x);
10906         float expm1f(float x);
10907         long double expm1l(long double x);</pre>
10908 <h6>Description</h6>
10909 <p><!--para 2-->
10910  The expm1 functions compute the base-e exponential of the argument, minus 1. A range
10911  error occurs if x is too large.<sup><a href="#note208"><b>208)</b></a></sup>
10912 <h6>Returns</h6>
10913 <p><!--para 3-->
10914  The expm1 functions return ex - 1.
10915
10916 <h6>footnotes</h6>
10917 <p><a name="note208">208)</a> For small magnitude x, expm1(x) is expected to be more accurate than exp(x) - 1.
10918
10919
10920 <a name="7.12.6.4" href="#7.12.6.4"><h5>7.12.6.4 The frexp functions</h5></a>
10921 <h6>Synopsis</h6>
10922 <p><!--para 1-->
10923 <pre>
10924          #include <a href="#7.12">&lt;math.h&gt;</a>
10925          double frexp(double value, int *exp);
10926          float frexpf(float value, int *exp);
10927          long double frexpl(long double value, int *exp);</pre>
10928 <h6>Description</h6>
10929 <p><!--para 2-->
10930  The frexp functions break a floating-point number into a normalized fraction and an
10931  integral power of 2. They store the integer in the int object pointed to by exp.
10932 <h6>Returns</h6>
10933 <p><!--para 3-->
10934  If value is not a floating-point number, the results are unspecified. Otherwise, the
10935  frexp functions return the value x, such that x has a magnitude in the interval [1/2, 1) or
10936  zero, and value equals x x 2*exp . If value is zero, both parts of the result are zero.
10937
10938 <a name="7.12.6.5" href="#7.12.6.5"><h5>7.12.6.5 The ilogb functions</h5></a>
10939 <h6>Synopsis</h6>
10940 <p><!--para 1-->
10941 <pre>
10942          #include <a href="#7.12">&lt;math.h&gt;</a>
10943          int ilogb(double x);
10944          int ilogbf(float x);
10945          int ilogbl(long double x);</pre>
10946 <h6>Description</h6>
10947 <p><!--para 2-->
10948  The ilogb functions extract the exponent of x as a signed int value. If x is zero they
10949  compute the value FP_ILOGB0; if x is infinite they compute the value INT_MAX; if x is
10950  a NaN they compute the value FP_ILOGBNAN; otherwise, they are equivalent to calling
10951  the corresponding logb function and casting the returned value to type int. A domain
10952  error or range error may occur if x is zero, infinite, or NaN. If the correct value is outside
10953  the range of the return type, the numeric result is unspecified.
10954  
10955  
10956  
10957  
10958 <!--page 237 indent 4-->
10959 <h6>Returns</h6>
10960 <p><!--para 3-->
10961  The ilogb functions return the exponent of x as a signed int value.
10962 <p><b> Forward references</b>: the logb functions (<a href="#7.12.6.11">7.12.6.11</a>).
10963
10964 <a name="7.12.6.6" href="#7.12.6.6"><h5>7.12.6.6 The ldexp functions</h5></a>
10965 <h6>Synopsis</h6>
10966 <p><!--para 1-->
10967 <pre>
10968         #include <a href="#7.12">&lt;math.h&gt;</a>
10969         double ldexp(double x, int exp);
10970         float ldexpf(float x, int exp);
10971         long double ldexpl(long double x, int exp);</pre>
10972 <h6>Description</h6>
10973 <p><!--para 2-->
10974  The ldexp functions multiply a floating-point number by an integral power of 2. A
10975  range error may occur.
10976 <h6>Returns</h6>
10977 <p><!--para 3-->
10978  The ldexp functions return x x 2exp .
10979
10980 <a name="7.12.6.7" href="#7.12.6.7"><h5>7.12.6.7 The log functions</h5></a>
10981 <h6>Synopsis</h6>
10982 <p><!--para 1-->
10983 <pre>
10984         #include <a href="#7.12">&lt;math.h&gt;</a>
10985         double log(double x);
10986         float logf(float x);
10987         long double logl(long double x);</pre>
10988 <h6>Description</h6>
10989 <p><!--para 2-->
10990  The log functions compute the base-e (natural) logarithm of x. A domain error occurs if
10991  the argument is negative. A range error may occur if the argument is zero.
10992 <h6>Returns</h6>
10993 <p><!--para 3-->
10994  The log functions return loge x.
10995
10996 <a name="7.12.6.8" href="#7.12.6.8"><h5>7.12.6.8 The log10 functions</h5></a>
10997 <h6>Synopsis</h6>
10998 <p><!--para 1-->
10999 <!--page 238 indent 4-->
11000 <pre>
11001         #include <a href="#7.12">&lt;math.h&gt;</a>
11002         double log10(double x);
11003         float log10f(float x);
11004         long double log10l(long double x);</pre>
11005 <h6>Description</h6>
11006 <p><!--para 2-->
11007  The log10 functions compute the base-10 (common) logarithm of x. A domain error
11008  occurs if the argument is negative. A range error may occur if the argument is zero.
11009 <h6>Returns</h6>
11010 <p><!--para 3-->
11011  The log10 functions return log10 x.
11012
11013 <a name="7.12.6.9" href="#7.12.6.9"><h5>7.12.6.9 The log1p functions</h5></a>
11014 <h6>Synopsis</h6>
11015 <p><!--para 1-->
11016 <pre>
11017          #include <a href="#7.12">&lt;math.h&gt;</a>
11018          double log1p(double x);
11019          float log1pf(float x);
11020          long double log1pl(long double x);</pre>
11021 <h6>Description</h6>
11022 <p><!--para 2-->
11023  The log1p functions compute the base-e (natural) logarithm of 1 plus the argument.<sup><a href="#note209"><b>209)</b></a></sup>
11024  A domain error occurs if the argument is less than -1. A range error may occur if the
11025  argument equals -1.
11026 <h6>Returns</h6>
11027 <p><!--para 3-->
11028  The log1p functions return loge (1 + x).
11029
11030 <h6>footnotes</h6>
11031 <p><a name="note209">209)</a> For small magnitude x, log1p(x) is expected to be more accurate than log(1 + x).
11032
11033
11034 <a name="7.12.6.10" href="#7.12.6.10"><h5>7.12.6.10 The log2 functions</h5></a>
11035 <h6>Synopsis</h6>
11036 <p><!--para 1-->
11037 <pre>
11038          #include <a href="#7.12">&lt;math.h&gt;</a>
11039          double log2(double x);
11040          float log2f(float x);
11041          long double log2l(long double x);</pre>
11042 <h6>Description</h6>
11043 <p><!--para 2-->
11044  The log2 functions compute the base-2 logarithm of x. A domain error occurs if the
11045  argument is less than zero. A range error may occur if the argument is zero.
11046 <h6>Returns</h6>
11047 <p><!--para 3-->
11048  The log2 functions return log2 x.
11049  
11050  
11051  
11052  
11053 <!--page 239 indent 4-->
11054
11055 <a name="7.12.6.11" href="#7.12.6.11"><h5>7.12.6.11 The logb functions</h5></a>
11056 <h6>Synopsis</h6>
11057 <p><!--para 1-->
11058 <pre>
11059         #include <a href="#7.12">&lt;math.h&gt;</a>
11060         double logb(double x);
11061         float logbf(float x);
11062         long double logbl(long double x);</pre>
11063 <h6>Description</h6>
11064 <p><!--para 2-->
11065  The logb functions extract the exponent of x, as a signed integer value in floating-point
11066  format. If x is subnormal it is treated as though it were normalized; thus, for positive
11067  finite x,
11068 <pre>
11069        1 &lt;= x x FLT_RADIX-logb(x) &lt; FLT_RADIX</pre>
11070  A domain error or range error may occur if the argument is zero.
11071 <h6>Returns</h6>
11072 <p><!--para 3-->
11073  The logb functions return the signed exponent of x.
11074
11075 <a name="7.12.6.12" href="#7.12.6.12"><h5>7.12.6.12 The modf functions</h5></a>
11076 <h6>Synopsis</h6>
11077 <p><!--para 1-->
11078 <pre>
11079         #include <a href="#7.12">&lt;math.h&gt;</a>
11080         double modf(double value, double *iptr);
11081         float modff(float value, float *iptr);
11082         long double modfl(long double value, long double *iptr);</pre>
11083 <h6>Description</h6>
11084 <p><!--para 2-->
11085  The modf functions break the argument value into integral and fractional parts, each of
11086  which has the same type and sign as the argument. They store the integral part (in
11087  floating-point format) in the object pointed to by iptr.
11088 <h6>Returns</h6>
11089 <p><!--para 3-->
11090  The modf functions return the signed fractional part of value.
11091 <!--page 240 indent 4-->
11092
11093 <a name="7.12.6.13" href="#7.12.6.13"><h5>7.12.6.13 The scalbn and scalbln functions</h5></a>
11094 <h6>Synopsis</h6>
11095 <p><!--para 1-->
11096 <pre>
11097         #include <a href="#7.12">&lt;math.h&gt;</a>
11098         double scalbn(double x, int n);
11099         float scalbnf(float x, int n);
11100         long double scalbnl(long double x, int n);
11101         double scalbln(double x, long int n);
11102         float scalblnf(float x, long int n);
11103         long double scalblnl(long double x, long int n);</pre>
11104 <h6>Description</h6>
11105 <p><!--para 2-->
11106  The scalbn and scalbln functions compute x x FLT_RADIXn efficiently, not
11107  normally by computing FLT_RADIXn explicitly. A range error may occur.
11108 <h6>Returns</h6>
11109 <p><!--para 3-->
11110  The scalbn and scalbln functions return x x FLT_RADIXn .
11111
11112 <a name="7.12.7" href="#7.12.7"><h4>7.12.7 Power and absolute-value functions</h4></a>
11113
11114 <a name="7.12.7.1" href="#7.12.7.1"><h5>7.12.7.1 The cbrt functions</h5></a>
11115 <h6>Synopsis</h6>
11116 <p><!--para 1-->
11117 <pre>
11118         #include <a href="#7.12">&lt;math.h&gt;</a>
11119         double cbrt(double x);
11120         float cbrtf(float x);
11121         long double cbrtl(long double x);</pre>
11122 <h6>Description</h6>
11123 <p><!--para 2-->
11124  The cbrt functions compute the real cube root of x.
11125 <h6>Returns</h6>
11126 <p><!--para 3-->
11127  The cbrt functions return x1/3 .
11128
11129 <a name="7.12.7.2" href="#7.12.7.2"><h5>7.12.7.2 The fabs functions</h5></a>
11130 <h6>Synopsis</h6>
11131 <p><!--para 1-->
11132 <pre>
11133         #include <a href="#7.12">&lt;math.h&gt;</a>
11134         double fabs(double x);
11135         float fabsf(float x);
11136         long double fabsl(long double x);</pre>
11137 <h6>Description</h6>
11138 <p><!--para 2-->
11139  The fabs functions compute the absolute value of a floating-point number x.
11140 <!--page 241 indent 4-->
11141 <h6>Returns</h6>
11142 <p><!--para 3-->
11143  The fabs functions return | x |.
11144
11145 <a name="7.12.7.3" href="#7.12.7.3"><h5>7.12.7.3 The hypot functions</h5></a>
11146 <h6>Synopsis</h6>
11147 <p><!--para 1-->
11148 <pre>
11149         #include <a href="#7.12">&lt;math.h&gt;</a>
11150         double hypot(double x, double y);
11151         float hypotf(float x, float y);
11152         long double hypotl(long double x, long double y);</pre>
11153 <h6>Description</h6>
11154 <p><!--para 2-->
11155  The hypot functions compute the square root of the sum of the squares of x and y,
11156  without undue overflow or underflow. A range error may occur.
11157 <p><!--para 3-->
11158 <h6>Returns</h6>
11159 <p><!--para 4-->
11160  The hypot functions return (sqrt)x2 + y2 .
11161 <pre>
11162                             ???
11163                             ???????????????</pre>
11164
11165 <a name="7.12.7.4" href="#7.12.7.4"><h5>7.12.7.4 The pow functions</h5></a>
11166 <h6>Synopsis</h6>
11167 <p><!--para 1-->
11168 <pre>
11169         #include <a href="#7.12">&lt;math.h&gt;</a>
11170         double pow(double x, double y);
11171         float powf(float x, float y);
11172         long double powl(long double x, long double y);</pre>
11173 <h6>Description</h6>
11174 <p><!--para 2-->
11175  The pow functions compute x raised to the power y. A domain error occurs if x is finite
11176  and negative and y is finite and not an integer value. A range error may occur. A domain
11177  error may occur if x is zero and y is zero. A domain error or range error may occur if x
11178  is zero and y is less than zero.
11179 <h6>Returns</h6>
11180 <p><!--para 3-->
11181  The pow functions return xy .
11182
11183 <a name="7.12.7.5" href="#7.12.7.5"><h5>7.12.7.5 The sqrt functions</h5></a>
11184 <h6>Synopsis</h6>
11185 <p><!--para 1-->
11186 <!--page 242 indent 4-->
11187 <pre>
11188         #include <a href="#7.12">&lt;math.h&gt;</a>
11189         double sqrt(double x);
11190         float sqrtf(float x);
11191         long double sqrtl(long double x);</pre>
11192 <h6>Description</h6>
11193 <p><!--para 2-->
11194  The sqrt functions compute the nonnegative square root of x. A domain error occurs if
11195  the argument is less than zero.
11196 <h6>Returns</h6>
11197 <p><!--para 3-->
11198  The sqrt functions return (sqrt)x.
11199 <pre>
11200                            ???
11201                            ???</pre>
11202
11203 <a name="7.12.8" href="#7.12.8"><h4>7.12.8 Error and gamma functions</h4></a>
11204
11205 <a name="7.12.8.1" href="#7.12.8.1"><h5>7.12.8.1 The erf functions</h5></a>
11206 <h6>Synopsis</h6>
11207 <p><!--para 1-->
11208 <pre>
11209         #include <a href="#7.12">&lt;math.h&gt;</a>
11210         double erf(double x);
11211         float erff(float x);
11212         long double erfl(long double x);</pre>
11213 <h6>Description</h6>
11214 <p><!--para 2-->
11215  The erf functions compute the error function of x.
11216 <h6>Returns</h6>
11217 <pre>
11218                                     2        x
11219                                          (integral)</pre>
11220  
11221  The erf functions return erf x =                e-t dt.
11222 <pre>
11223                                                    2</pre>
11224  
11225  
11226 <pre>
11227                                     (sqrt)pi
11228                                     ???
11229                                     ???    0</pre>
11230  
11231
11232 <a name="7.12.8.2" href="#7.12.8.2"><h5>7.12.8.2 The erfc functions</h5></a>
11233 <h6>Synopsis</h6>
11234 <p><!--para 1-->
11235 <pre>
11236         #include <a href="#7.12">&lt;math.h&gt;</a>
11237         double erfc(double x);
11238         float erfcf(float x);
11239         long double erfcl(long double x);</pre>
11240 <h6>Description</h6>
11241 <p><!--para 2-->
11242  The erfc functions compute the complementary error function of x. A range error
11243  occurs if x is too large.
11244 <h6>Returns</h6>
11245 <pre>
11246                                                            2        (inf)
11247                                                                 (integral)</pre>
11248  
11249  The erfc functions return erfc x = 1 - erf x =                         e-t dt.
11250 <pre>
11251                                                                           2</pre>
11252  
11253  
11254 <!--page 243 indent 4-->
11255 <pre>
11256                                                            (sqrt)pi
11257                                                            ???
11258                                                            ???    x</pre>
11259
11260 <a name="7.12.8.3" href="#7.12.8.3"><h5>7.12.8.3 The lgamma functions</h5></a>
11261 <h6>Synopsis</h6>
11262 <p><!--para 1-->
11263 <pre>
11264         #include <a href="#7.12">&lt;math.h&gt;</a>
11265         double lgamma(double x);
11266         float lgammaf(float x);
11267         long double lgammal(long double x);</pre>
11268 <h6>Description</h6>
11269 <p><!--para 2-->
11270  The lgamma functions compute the natural logarithm of the absolute value of gamma of
11271  x. A range error occurs if x is too large. A range error may occur if x is a negative
11272  integer or zero.
11273 <h6>Returns</h6>
11274 <p><!--para 3-->
11275  The lgamma functions return loge | (Gamma)(x) |.
11276
11277 <a name="7.12.8.4" href="#7.12.8.4"><h5>7.12.8.4 The tgamma functions</h5></a>
11278 <h6>Synopsis</h6>
11279 <p><!--para 1-->
11280 <pre>
11281         #include <a href="#7.12">&lt;math.h&gt;</a>
11282         double tgamma(double x);
11283         float tgammaf(float x);
11284         long double tgammal(long double x);</pre>
11285 <h6>Description</h6>
11286 <p><!--para 2-->
11287  The tgamma functions compute the gamma function of x. A domain error or range error
11288  may occur if x is a negative integer or zero. A range error may occur if the magnitude of
11289  x is too large or too small.
11290 <h6>Returns</h6>
11291 <p><!--para 3-->
11292  The tgamma functions return (Gamma)(x).
11293
11294 <a name="7.12.9" href="#7.12.9"><h4>7.12.9 Nearest integer functions</h4></a>
11295
11296 <a name="7.12.9.1" href="#7.12.9.1"><h5>7.12.9.1 The ceil functions</h5></a>
11297 <h6>Synopsis</h6>
11298 <p><!--para 1-->
11299 <pre>
11300         #include <a href="#7.12">&lt;math.h&gt;</a>
11301         double ceil(double x);
11302         float ceilf(float x);
11303         long double ceill(long double x);</pre>
11304 <h6>Description</h6>
11305 <p><!--para 2-->
11306  The ceil functions compute the smallest integer value not less than x.
11307 <!--page 244 indent 4-->
11308 <h6>Returns</h6>
11309 <p><!--para 3-->
11310  The ceil functions return ???x???, expressed as a floating-point number.
11311
11312 <a name="7.12.9.2" href="#7.12.9.2"><h5>7.12.9.2 The floor functions</h5></a>
11313 <h6>Synopsis</h6>
11314 <p><!--para 1-->
11315 <pre>
11316         #include <a href="#7.12">&lt;math.h&gt;</a>
11317         double floor(double x);
11318         float floorf(float x);
11319         long double floorl(long double x);</pre>
11320 <h6>Description</h6>
11321 <p><!--para 2-->
11322  The floor functions compute the largest integer value not greater than x.
11323 <h6>Returns</h6>
11324 <p><!--para 3-->
11325  The floor functions return ???x???, expressed as a floating-point number.
11326
11327 <a name="7.12.9.3" href="#7.12.9.3"><h5>7.12.9.3 The nearbyint functions</h5></a>
11328 <h6>Synopsis</h6>
11329 <p><!--para 1-->
11330 <pre>
11331         #include <a href="#7.12">&lt;math.h&gt;</a>
11332         double nearbyint(double x);
11333         float nearbyintf(float x);
11334         long double nearbyintl(long double x);</pre>
11335 <h6>Description</h6>
11336 <p><!--para 2-->
11337  The nearbyint functions round their argument to an integer value in floating-point
11338  format, using the current rounding direction and without raising the ''inexact'' floating-
11339  point exception.
11340 <h6>Returns</h6>
11341 <p><!--para 3-->
11342  The nearbyint functions return the rounded integer value.
11343
11344 <a name="7.12.9.4" href="#7.12.9.4"><h5>7.12.9.4 The rint functions</h5></a>
11345 <h6>Synopsis</h6>
11346 <p><!--para 1-->
11347 <pre>
11348         #include <a href="#7.12">&lt;math.h&gt;</a>
11349         double rint(double x);
11350         float rintf(float x);
11351         long double rintl(long double x);</pre>
11352 <h6>Description</h6>
11353 <p><!--para 2-->
11354  The rint functions differ from the nearbyint functions (<a href="#7.12.9.3">7.12.9.3</a>) only in that the
11355  rint functions may raise the ''inexact'' floating-point exception if the result differs in
11356  value from the argument.
11357 <!--page 245 indent 4-->
11358 <h6>Returns</h6>
11359 <p><!--para 3-->
11360  The rint functions return the rounded integer value.
11361
11362 <a name="7.12.9.5" href="#7.12.9.5"><h5>7.12.9.5 The lrint and llrint functions</h5></a>
11363 <h6>Synopsis</h6>
11364 <p><!--para 1-->
11365 <pre>
11366         #include <a href="#7.12">&lt;math.h&gt;</a>
11367         long int lrint(double x);
11368         long int lrintf(float x);
11369         long int lrintl(long double x);
11370         long long int llrint(double x);
11371         long long int llrintf(float x);
11372         long long int llrintl(long double x);</pre>
11373 <h6>Description</h6>
11374 <p><!--para 2-->
11375  The lrint and llrint functions round their argument to the nearest integer value,
11376  rounding according to the current rounding direction. If the rounded value is outside the
11377  range of the return type, the numeric result is unspecified and a domain error or range
11378  error may occur.                                                                          *
11379 <h6>Returns</h6>
11380 <p><!--para 3-->
11381  The lrint and llrint functions return the rounded integer value.
11382
11383 <a name="7.12.9.6" href="#7.12.9.6"><h5>7.12.9.6 The round functions</h5></a>
11384 <h6>Synopsis</h6>
11385 <p><!--para 1-->
11386 <pre>
11387         #include <a href="#7.12">&lt;math.h&gt;</a>
11388         double round(double x);
11389         float roundf(float x);
11390         long double roundl(long double x);</pre>
11391 <h6>Description</h6>
11392 <p><!--para 2-->
11393  The round functions round their argument to the nearest integer value in floating-point
11394  format, rounding halfway cases away from zero, regardless of the current rounding
11395  direction.
11396 <h6>Returns</h6>
11397 <p><!--para 3-->
11398  The round functions return the rounded integer value.
11399 <!--page 246 indent 4-->
11400
11401 <a name="7.12.9.7" href="#7.12.9.7"><h5>7.12.9.7 The lround and llround functions</h5></a>
11402 <h6>Synopsis</h6>
11403 <p><!--para 1-->
11404 <pre>
11405         #include <a href="#7.12">&lt;math.h&gt;</a>
11406         long int lround(double x);
11407         long int lroundf(float x);
11408         long int lroundl(long double x);
11409         long long int llround(double x);
11410         long long int llroundf(float x);
11411         long long int llroundl(long double x);</pre>
11412 <h6>Description</h6>
11413 <p><!--para 2-->
11414  The lround and llround functions round their argument to the nearest integer value,
11415  rounding halfway cases away from zero, regardless of the current rounding direction. If
11416  the rounded value is outside the range of the return type, the numeric result is unspecified
11417  and a domain error or range error may occur.
11418 <h6>Returns</h6>
11419 <p><!--para 3-->
11420  The lround and llround functions return the rounded integer value.
11421
11422 <a name="7.12.9.8" href="#7.12.9.8"><h5>7.12.9.8 The trunc functions</h5></a>
11423 <h6>Synopsis</h6>
11424 <p><!--para 1-->
11425 <pre>
11426         #include <a href="#7.12">&lt;math.h&gt;</a>
11427         double trunc(double x);
11428         float truncf(float x);
11429         long double truncl(long double x);</pre>
11430 <h6>Description</h6>
11431 <p><!--para 2-->
11432  The trunc functions round their argument to the integer value, in floating format,
11433  nearest to but no larger in magnitude than the argument.
11434 <h6>Returns</h6>
11435 <p><!--para 3-->
11436  The trunc functions return the truncated integer value.
11437 <!--page 247 indent 4-->
11438
11439 <a name="7.12.10" href="#7.12.10"><h4>7.12.10 Remainder functions</h4></a>
11440
11441 <a name="7.12.10.1" href="#7.12.10.1"><h5>7.12.10.1 The fmod functions</h5></a>
11442 <h6>Synopsis</h6>
11443 <p><!--para 1-->
11444 <pre>
11445           #include <a href="#7.12">&lt;math.h&gt;</a>
11446           double fmod(double x, double y);
11447           float fmodf(float x, float y);
11448           long double fmodl(long double x, long double y);</pre>
11449 <h6>Description</h6>
11450 <p><!--para 2-->
11451  The fmod functions compute the floating-point remainder of x/y.
11452 <h6>Returns</h6>
11453 <p><!--para 3-->
11454  The fmod functions return the value x - ny, for some integer n such that, if y is nonzero,
11455  the result has the same sign as x and magnitude less than the magnitude of y. If y is zero,
11456  whether a domain error occurs or the fmod functions return zero is implementation-
11457  defined.
11458
11459 <a name="7.12.10.2" href="#7.12.10.2"><h5>7.12.10.2 The remainder functions</h5></a>
11460 <h6>Synopsis</h6>
11461 <p><!--para 1-->
11462 <pre>
11463           #include <a href="#7.12">&lt;math.h&gt;</a>
11464           double remainder(double x, double y);
11465           float remainderf(float x, float y);
11466           long double remainderl(long double x, long double y);</pre>
11467 <h6>Description</h6>
11468 <p><!--para 2-->
11469  The remainder functions compute the remainder x REM y required by IEC 60559.<sup><a href="#note210"><b>210)</b></a></sup>
11470 <h6>Returns</h6>
11471 <p><!--para 3-->
11472  The remainder functions return x REM y. If y is zero, whether a domain error occurs
11473  or the functions return zero is implementation defined.
11474  
11475  
11476  
11477  
11478 <!--page 248 indent 4-->
11479
11480 <h6>footnotes</h6>
11481 <p><a name="note210">210)</a> ''When y != 0, the remainder r = x REM y is defined regardless of the rounding mode by the
11482  mathematical relation r = x - ny, where n is the integer nearest the exact value of x/y; whenever
11483  | n - x/y | = 1/2, then n is even. Thus, the remainder is always exact. If r = 0, its sign shall be that of
11484  x.'' This definition is applicable for all implementations.
11485
11486
11487 <a name="7.12.10.3" href="#7.12.10.3"><h5>7.12.10.3 The remquo functions</h5></a>
11488 <h6>Synopsis</h6>
11489 <p><!--para 1-->
11490 <pre>
11491         #include <a href="#7.12">&lt;math.h&gt;</a>
11492         double remquo(double x, double y, int *quo);
11493         float remquof(float x, float y, int *quo);
11494         long double remquol(long double x, long double y,
11495              int *quo);</pre>
11496 <h6>Description</h6>
11497 <p><!--para 2-->
11498  The remquo functions compute the same remainder as the remainder functions. In
11499  the object pointed to by quo they store a value whose sign is the sign of x/y and whose
11500  magnitude is congruent modulo 2n to the magnitude of the integral quotient of x/y, where
11501  n is an implementation-defined integer greater than or equal to 3.
11502 <h6>Returns</h6>
11503 <p><!--para 3-->
11504  The remquo functions return x REM y. If y is zero, the value stored in the object
11505  pointed to by quo is unspecified and whether a domain error occurs or the functions
11506  return zero is implementation defined.
11507
11508 <a name="7.12.11" href="#7.12.11"><h4>7.12.11 Manipulation functions</h4></a>
11509
11510 <a name="7.12.11.1" href="#7.12.11.1"><h5>7.12.11.1 The copysign functions</h5></a>
11511 <h6>Synopsis</h6>
11512 <p><!--para 1-->
11513 <pre>
11514         #include <a href="#7.12">&lt;math.h&gt;</a>
11515         double copysign(double x, double y);
11516         float copysignf(float x, float y);
11517         long double copysignl(long double x, long double y);</pre>
11518 <h6>Description</h6>
11519 <p><!--para 2-->
11520  The copysign functions produce a value with the magnitude of x and the sign of y.
11521  They produce a NaN (with the sign of y) if x is a NaN. On implementations that
11522  represent a signed zero but do not treat negative zero consistently in arithmetic
11523  operations, the copysign functions regard the sign of zero as positive.
11524 <h6>Returns</h6>
11525 <p><!--para 3-->
11526  The copysign functions return a value with the magnitude of x and the sign of y.
11527 <!--page 249 indent 4-->
11528
11529 <a name="7.12.11.2" href="#7.12.11.2"><h5>7.12.11.2 The nan functions</h5></a>
11530 <h6>Synopsis</h6>
11531 <p><!--para 1-->
11532 <pre>
11533          #include <a href="#7.12">&lt;math.h&gt;</a>
11534          double nan(const char *tagp);
11535          float nanf(const char *tagp);
11536          long double nanl(const char *tagp);</pre>
11537 <h6>Description</h6>
11538 <p><!--para 2-->
11539  The call nan("n-char-sequence") is equivalent to strtod("NAN(n-char-
11540  sequence)",     (char**)       NULL); the call nan("") is equivalent to
11541  strtod("NAN()", (char**) NULL). If tagp does not point to an n-char
11542  sequence or an empty string, the call is equivalent to strtod("NAN", (char**)
11543  NULL). Calls to nanf and nanl are equivalent to the corresponding calls to strtof
11544  and strtold.
11545 <h6>Returns</h6>
11546 <p><!--para 3-->
11547  The nan functions return a quiet NaN, if available, with content indicated through tagp.
11548  If the implementation does not support quiet NaNs, the functions return zero.
11549 <p><b> Forward references</b>: the strtod, strtof, and strtold functions (<a href="#7.20.1.3">7.20.1.3</a>).
11550
11551 <a name="7.12.11.3" href="#7.12.11.3"><h5>7.12.11.3 The nextafter functions</h5></a>
11552 <h6>Synopsis</h6>
11553 <p><!--para 1-->
11554 <pre>
11555          #include <a href="#7.12">&lt;math.h&gt;</a>
11556          double nextafter(double x, double y);
11557          float nextafterf(float x, float y);
11558          long double nextafterl(long double x, long double y);</pre>
11559 <h6>Description</h6>
11560 <p><!--para 2-->
11561  The nextafter functions determine the next representable value, in the type of the
11562  function, after x in the direction of y, where x and y are first converted to the type of the
11563  function.<sup><a href="#note211"><b>211)</b></a></sup> The nextafter functions return y if x equals y. A range error may occur
11564  if the magnitude of x is the largest finite value representable in the type and the result is
11565  infinite or not representable in the type.
11566 <h6>Returns</h6>
11567 <p><!--para 3-->
11568  The nextafter functions return the next representable value in the specified format
11569  after x in the direction of y.
11570  
11571  
11572 <!--page 250 indent 4-->
11573
11574 <h6>footnotes</h6>
11575 <p><a name="note211">211)</a> The argument values are converted to the type of the function, even by a macro implementation of the
11576  function.
11577
11578
11579 <a name="7.12.11.4" href="#7.12.11.4"><h5>7.12.11.4 The nexttoward functions</h5></a>
11580 <h6>Synopsis</h6>
11581 <p><!--para 1-->
11582 <pre>
11583          #include <a href="#7.12">&lt;math.h&gt;</a>
11584          double nexttoward(double x, long double y);
11585          float nexttowardf(float x, long double y);
11586          long double nexttowardl(long double x, long double y);</pre>
11587 <h6>Description</h6>
11588 <p><!--para 2-->
11589  The nexttoward functions are equivalent to the nextafter functions except that the
11590  second parameter has type long double and the functions return y converted to the
11591  type of the function if x equals y.<sup><a href="#note212"><b>212)</b></a></sup>
11592
11593 <h6>footnotes</h6>
11594 <p><a name="note212">212)</a> The result of the nexttoward functions is determined in the type of the function, without loss of
11595  range or precision in a floating second argument.
11596
11597
11598 <a name="7.12.12" href="#7.12.12"><h4>7.12.12 Maximum, minimum, and positive difference functions</h4></a>
11599
11600 <a name="7.12.12.1" href="#7.12.12.1"><h5>7.12.12.1 The fdim functions</h5></a>
11601 <h6>Synopsis</h6>
11602 <p><!--para 1-->
11603 <pre>
11604          #include <a href="#7.12">&lt;math.h&gt;</a>
11605          double fdim(double x, double y);
11606          float fdimf(float x, float y);
11607          long double fdiml(long double x, long double y);</pre>
11608 <h6>Description</h6>
11609 <p><!--para 2-->
11610  The fdim functions determine the positive difference between their arguments:
11611 <pre>
11612        ???x - y if x &gt; y
11613        ???
11614        ???+0     if x &lt;= y</pre>
11615  A range error may occur.
11616 <h6>Returns</h6>
11617 <p><!--para 3-->
11618  The fdim functions return the positive difference value.
11619
11620 <a name="7.12.12.2" href="#7.12.12.2"><h5>7.12.12.2 The fmax functions</h5></a>
11621 <h6>Synopsis</h6>
11622 <p><!--para 1-->
11623 <pre>
11624          #include <a href="#7.12">&lt;math.h&gt;</a>
11625          double fmax(double x, double y);
11626          float fmaxf(float x, float y);
11627          long double fmaxl(long double x, long double y);</pre>
11628  
11629  
11630  
11631 <!--page 251 indent 4-->
11632 <h6>Description</h6>
11633 <p><!--para 2-->
11634  The fmax functions determine the maximum numeric value of their arguments.<sup><a href="#note213"><b>213)</b></a></sup>
11635 <h6>Returns</h6>
11636 <p><!--para 3-->
11637  The fmax functions return the maximum numeric value of their arguments.
11638
11639 <h6>footnotes</h6>
11640 <p><a name="note213">213)</a> NaN arguments are treated as missing data: if one argument is a NaN and the other numeric, then the
11641  fmax functions choose the numeric value. See <a href="#F.9.9.2">F.9.9.2</a>.
11642
11643
11644 <a name="7.12.12.3" href="#7.12.12.3"><h5>7.12.12.3 The fmin functions</h5></a>
11645 <h6>Synopsis</h6>
11646 <p><!--para 1-->
11647 <pre>
11648          #include <a href="#7.12">&lt;math.h&gt;</a>
11649          double fmin(double x, double y);
11650          float fminf(float x, float y);
11651          long double fminl(long double x, long double y);</pre>
11652 <h6>Description</h6>
11653 <p><!--para 2-->
11654  The fmin functions determine the minimum numeric value of their arguments.<sup><a href="#note214"><b>214)</b></a></sup>
11655 <h6>Returns</h6>
11656 <p><!--para 3-->
11657  The fmin functions return the minimum numeric value of their arguments.
11658
11659 <h6>footnotes</h6>
11660 <p><a name="note214">214)</a> The fmin functions are analogous to the fmax functions in their treatment of NaNs.
11661
11662
11663 <a name="7.12.13" href="#7.12.13"><h4>7.12.13 Floating multiply-add</h4></a>
11664
11665 <a name="7.12.13.1" href="#7.12.13.1"><h5>7.12.13.1 The fma functions</h5></a>
11666 <h6>Synopsis</h6>
11667 <p><!--para 1-->
11668 <pre>
11669          #include <a href="#7.12">&lt;math.h&gt;</a>
11670          double fma(double x, double y, double z);
11671          float fmaf(float x, float y, float z);
11672          long double fmal(long double x, long double y,
11673               long double z);</pre>
11674 <h6>Description</h6>
11675 <p><!--para 2-->
11676  The fma functions compute (x x y) + z, rounded as one ternary operation: they compute
11677  the value (as if) to infinite precision and round once to the result format, according to the
11678  current rounding mode. A range error may occur.
11679 <h6>Returns</h6>
11680 <p><!--para 3-->
11681  The fma functions return (x x y) + z, rounded as one ternary operation.
11682  
11683  
11684  
11685  
11686 <!--page 252 indent 4-->
11687
11688 <a name="7.12.14" href="#7.12.14"><h4>7.12.14 Comparison macros</h4></a>
11689 <p><!--para 1-->
11690  The relational and equality operators support the usual mathematical relationships
11691  between numeric values. For any ordered pair of numeric values exactly one of the
11692  relationships -- less, greater, and equal -- is true. Relational operators may raise the
11693  ''invalid'' floating-point exception when argument values are NaNs. For a NaN and a
11694  numeric value, or for two NaNs, just the unordered relationship is true.<sup><a href="#note215"><b>215)</b></a></sup> The following
11695  subclauses provide macros that are quiet (non floating-point exception raising) versions
11696  of the relational operators, and other comparison macros that facilitate writing efficient
11697  code that accounts for NaNs without suffering the ''invalid'' floating-point exception. In
11698  the synopses in this subclause, real-floating indicates that the argument shall be an
11699  expression of real floating type.
11700
11701 <h6>footnotes</h6>
11702 <p><a name="note215">215)</a> IEC 60559 requires that the built-in relational operators raise the ''invalid'' floating-point exception if
11703  the operands compare unordered, as an error indicator for programs written without consideration of
11704  NaNs; the result in these cases is false.
11705
11706
11707 <a name="7.12.14.1" href="#7.12.14.1"><h5>7.12.14.1 The isgreater macro</h5></a>
11708 <h6>Synopsis</h6>
11709 <p><!--para 1-->
11710 <pre>
11711           #include <a href="#7.12">&lt;math.h&gt;</a>
11712           int isgreater(real-floating x, real-floating y);</pre>
11713 <h6>Description</h6>
11714 <p><!--para 2-->
11715  The isgreater macro determines whether its first argument is greater than its second
11716  argument. The value of isgreater(x, y) is always equal to (x) &gt; (y); however,
11717  unlike (x) &gt; (y), isgreater(x, y) does not raise the ''invalid'' floating-point
11718  exception when x and y are unordered.
11719 <h6>Returns</h6>
11720 <p><!--para 3-->
11721  The isgreater macro returns the value of (x) &gt; (y).
11722
11723 <a name="7.12.14.2" href="#7.12.14.2"><h5>7.12.14.2 The isgreaterequal macro</h5></a>
11724 <h6>Synopsis</h6>
11725 <p><!--para 1-->
11726 <pre>
11727           #include <a href="#7.12">&lt;math.h&gt;</a>
11728           int isgreaterequal(real-floating x, real-floating y);</pre>
11729 <h6>Description</h6>
11730 <p><!--para 2-->
11731  The isgreaterequal macro determines whether its first argument is greater than or
11732  equal to its second argument. The value of isgreaterequal(x, y) is always equal
11733  to (x) &gt;= (y); however, unlike (x) &gt;= (y), isgreaterequal(x, y) does
11734  not raise the ''invalid'' floating-point exception when x and y are unordered.
11735  
11736  
11737  
11738 <!--page 253 indent 4-->
11739 <h6>Returns</h6>
11740 <p><!--para 3-->
11741  The isgreaterequal macro returns the value of (x) &gt;= (y).
11742
11743 <a name="7.12.14.3" href="#7.12.14.3"><h5>7.12.14.3 The isless macro</h5></a>
11744 <h6>Synopsis</h6>
11745 <p><!--para 1-->
11746 <pre>
11747         #include <a href="#7.12">&lt;math.h&gt;</a>
11748         int isless(real-floating x, real-floating y);</pre>
11749 <h6>Description</h6>
11750 <p><!--para 2-->
11751  The isless macro determines whether its first argument is less than its second
11752  argument. The value of isless(x, y) is always equal to (x) &lt; (y); however,
11753  unlike (x) &lt; (y), isless(x, y) does not raise the ''invalid'' floating-point
11754  exception when x and y are unordered.
11755 <h6>Returns</h6>
11756 <p><!--para 3-->
11757  The isless macro returns the value of (x) &lt; (y).
11758
11759 <a name="7.12.14.4" href="#7.12.14.4"><h5>7.12.14.4 The islessequal macro</h5></a>
11760 <h6>Synopsis</h6>
11761 <p><!--para 1-->
11762 <pre>
11763         #include <a href="#7.12">&lt;math.h&gt;</a>
11764         int islessequal(real-floating x, real-floating y);</pre>
11765 <h6>Description</h6>
11766 <p><!--para 2-->
11767  The islessequal macro determines whether its first argument is less than or equal to
11768  its second argument. The value of islessequal(x, y) is always equal to
11769  (x) &lt;= (y); however, unlike (x) &lt;= (y), islessequal(x, y) does not raise
11770  the ''invalid'' floating-point exception when x and y are unordered.
11771 <h6>Returns</h6>
11772 <p><!--para 3-->
11773  The islessequal macro returns the value of (x) &lt;= (y).
11774
11775 <a name="7.12.14.5" href="#7.12.14.5"><h5>7.12.14.5 The islessgreater macro</h5></a>
11776 <h6>Synopsis</h6>
11777 <p><!--para 1-->
11778 <pre>
11779         #include <a href="#7.12">&lt;math.h&gt;</a>
11780         int islessgreater(real-floating x, real-floating y);</pre>
11781 <h6>Description</h6>
11782 <p><!--para 2-->
11783  The islessgreater macro determines whether its first argument is less than or
11784  greater than its second argument. The islessgreater(x, y) macro is similar to
11785  (x) &lt; (y) || (x) &gt; (y); however, islessgreater(x, y) does not raise
11786  the ''invalid'' floating-point exception when x and y are unordered (nor does it evaluate x
11787  and y twice).
11788 <!--page 254 indent 4-->
11789 <h6>Returns</h6>
11790 <p><!--para 3-->
11791  The islessgreater macro returns the value of (x) &lt; (y) || (x) &gt; (y).
11792
11793 <a name="7.12.14.6" href="#7.12.14.6"><h5>7.12.14.6 The isunordered macro</h5></a>
11794 <h6>Synopsis</h6>
11795 <p><!--para 1-->
11796 <pre>
11797        #include <a href="#7.12">&lt;math.h&gt;</a>
11798        int isunordered(real-floating x, real-floating y);</pre>
11799 <h6>Description</h6>
11800 <p><!--para 2-->
11801  The isunordered macro determines whether its arguments are unordered.
11802 <h6>Returns</h6>
11803 <p><!--para 3-->
11804  The isunordered macro returns 1 if its arguments are unordered and 0 otherwise.
11805 <!--page 255 indent 4-->
11806
11807 <a name="7.13" href="#7.13"><h3>7.13 Nonlocal jumps <setjmp.h></h3></a>
11808 <p><!--para 1-->
11809  The header <a href="#7.13">&lt;setjmp.h&gt;</a> defines the macro setjmp, and declares one function and
11810  one type, for bypassing the normal function call and return discipline.<sup><a href="#note216"><b>216)</b></a></sup>
11811 <p><!--para 2-->
11812  The type declared is
11813 <pre>
11814          jmp_buf</pre>
11815  which is an array type suitable for holding the information needed to restore a calling
11816  environment. The environment of a call to the setjmp macro consists of information
11817  sufficient for a call to the longjmp function to return execution to the correct block and
11818  invocation of that block, were it called recursively. It does not include the state of the
11819  floating-point status flags, of open files, or of any other component of the abstract
11820  machine.
11821 <p><!--para 3-->
11822  It is unspecified whether setjmp is a macro or an identifier declared with external
11823  linkage. If a macro definition is suppressed in order to access an actual function, or a
11824  program defines an external identifier with the name setjmp, the behavior is undefined.
11825
11826 <h6>footnotes</h6>
11827 <p><a name="note216">216)</a> These functions are useful for dealing with unusual conditions encountered in a low-level function of
11828  a program.
11829
11830
11831 <a name="7.13.1" href="#7.13.1"><h4>7.13.1 Save calling environment</h4></a>
11832
11833 <a name="7.13.1.1" href="#7.13.1.1"><h5>7.13.1.1 The setjmp macro</h5></a>
11834 <h6>Synopsis</h6>
11835 <p><!--para 1-->
11836 <pre>
11837          #include <a href="#7.13">&lt;setjmp.h&gt;</a>
11838          int setjmp(jmp_buf env);</pre>
11839 <h6>Description</h6>
11840 <p><!--para 2-->
11841  The setjmp macro saves its calling environment in its jmp_buf argument for later use
11842  by the longjmp function.
11843 <h6>Returns</h6>
11844 <p><!--para 3-->
11845  If the return is from a direct invocation, the setjmp macro returns the value zero. If the
11846  return is from a call to the longjmp function, the setjmp macro returns a nonzero
11847  value.
11848  Environmental limits
11849 <p><!--para 4-->
11850  An invocation of the setjmp macro shall appear only in one of the following contexts:
11851 <ul>
11852 <li>  the entire controlling expression of a selection or iteration statement;
11853 <li>  one operand of a relational or equality operator with the other operand an integer
11854  constant expression, with the resulting expression being the entire controlling
11855  
11856  
11857 <!--page 256 indent 4-->
11858    expression of a selection or iteration statement;
11859 <li>  the operand of a unary ! operator with the resulting expression being the entire
11860  controlling expression of a selection or iteration statement; or
11861 <li>  the entire expression of an expression statement (possibly cast to void).
11862 </ul>
11863 <p><!--para 5-->
11864  If the invocation appears in any other context, the behavior is undefined.
11865
11866 <a name="7.13.2" href="#7.13.2"><h4>7.13.2 Restore calling environment</h4></a>
11867
11868 <a name="7.13.2.1" href="#7.13.2.1"><h5>7.13.2.1 The longjmp function</h5></a>
11869 <h6>Synopsis</h6>
11870 <p><!--para 1-->
11871 <pre>
11872           #include <a href="#7.13">&lt;setjmp.h&gt;</a>
11873           void longjmp(jmp_buf env, int val);</pre>
11874 <h6>Description</h6>
11875 <p><!--para 2-->
11876  The longjmp function restores the environment saved by the most recent invocation of
11877  the setjmp macro in the same invocation of the program with the corresponding
11878  jmp_buf argument. If there has been no such invocation, or if the function containing
11879  the invocation of the setjmp macro has terminated execution<sup><a href="#note217"><b>217)</b></a></sup> in the interim, or if the
11880  invocation of the setjmp macro was within the scope of an identifier with variably
11881  modified type and execution has left that scope in the interim, the behavior is undefined.
11882 <p><!--para 3-->
11883  All accessible objects have values, and all other components of the abstract machine<sup><a href="#note218"><b>218)</b></a></sup>
11884  have state, as of the time the longjmp function was called, except that the values of
11885  objects of automatic storage duration that are local to the function containing the
11886  invocation of the corresponding setjmp macro that do not have volatile-qualified type
11887  and have been changed between the setjmp invocation and longjmp call are
11888  indeterminate.
11889 <h6>Returns</h6>
11890 <p><!--para 4-->
11891  After longjmp is completed, program execution continues as if the corresponding
11892  invocation of the setjmp macro had just returned the value specified by val. The
11893  longjmp function cannot cause the setjmp macro to return the value 0; if val is 0,
11894  the setjmp macro returns the value 1.
11895 <p><!--para 5-->
11896  EXAMPLE The longjmp function that returns control back to the point of the setjmp invocation
11897  might cause memory associated with a variable length array object to be squandered.
11898  
11899  
11900  
11901  
11902 <!--page 257 indent -1-->
11903 <!--page 258 indent 4-->
11904 <pre>
11905         #include <a href="#7.13">&lt;setjmp.h&gt;</a>
11906         jmp_buf buf;
11907         void g(int n);
11908         void h(int n);
11909         int n = 6;
11910         void f(void)
11911         {
11912               int x[n];          // valid: f is not terminated
11913               setjmp(buf);
11914               g(n);
11915         }
11916         void g(int n)
11917         {
11918               int a[n];          // a may remain allocated
11919               h(n);
11920         }
11921         void h(int n)
11922         {
11923               int b[n];          // b may remain allocated
11924               longjmp(buf, 2);   // might cause memory loss
11925         }</pre>
11926
11927 <h6>footnotes</h6>
11928 <p><a name="note217">217)</a> For example, by executing a return statement or because another longjmp call has caused a
11929  transfer to a setjmp invocation in a function earlier in the set of nested calls.
11930
11931 <p><a name="note218">218)</a> This includes, but is not limited to, the floating-point status flags and the state of open files.
11932
11933
11934 <a name="7.14" href="#7.14"><h3>7.14 Signal handling <signal.h></h3></a>
11935 <p><!--para 1-->
11936  The header <a href="#7.14">&lt;signal.h&gt;</a> declares a type and two functions and defines several macros,
11937  for handling various signals (conditions that may be reported during program execution).
11938 <p><!--para 2-->
11939  The type defined is
11940 <pre>
11941          sig_atomic_t</pre>
11942  which is the (possibly volatile-qualified) integer type of an object that can be accessed as
11943  an atomic entity, even in the presence of asynchronous interrupts.
11944 <p><!--para 3-->
11945  The macros defined are
11946 <pre>
11947          SIG_DFL
11948          SIG_ERR
11949          SIG_IGN</pre>
11950  which expand to constant expressions with distinct values that have type compatible with
11951  the second argument to, and the return value of, the signal function, and whose values
11952  compare unequal to the address of any declarable function; and the following, which
11953  expand to positive integer constant expressions with type int and distinct values that are
11954  the signal numbers, each corresponding to the specified condition:
11955 <p><!--para 4-->
11956 <pre>
11957          SIGABRT abnormal termination, such as is initiated by the abort function
11958          SIGFPE         an erroneous arithmetic operation, such as zero divide or an operation
11959                         resulting in overflow
11960          SIGILL         detection of an invalid function image, such as an invalid instruction
11961          SIGINT         receipt of an interactive attention signal
11962          SIGSEGV an invalid access to storage
11963          SIGTERM a termination request sent to the program</pre>
11964  An implementation need not generate any of these signals, except as a result of explicit
11965  calls to the raise function. Additional signals and pointers to undeclarable functions,
11966  with macro definitions beginning, respectively, with the letters SIG and an uppercase
11967  letter or with SIG_ and an uppercase letter,<sup><a href="#note219"><b>219)</b></a></sup> may also be specified by the
11968  implementation. The complete set of signals, their semantics, and their default handling
11969  is implementation-defined; all signal numbers shall be positive.
11970  
11971  
11972  
11973  
11974 <!--page 259 indent 4-->
11975
11976 <h6>footnotes</h6>
11977 <p><a name="note219">219)</a> See ''future library directions'' (<a href="#7.26.9">7.26.9</a>). The names of the signal numbers reflect the following terms
11978  (respectively): abort, floating-point exception, illegal instruction, interrupt, segmentation violation,
11979  and termination.
11980
11981
11982 <a name="7.14.1" href="#7.14.1"><h4>7.14.1 Specify signal handling</h4></a>
11983
11984 <a name="7.14.1.1" href="#7.14.1.1"><h5>7.14.1.1 The signal function</h5></a>
11985 <h6>Synopsis</h6>
11986 <p><!--para 1-->
11987 <pre>
11988          #include <a href="#7.14">&lt;signal.h&gt;</a>
11989          void (*signal(int sig, void (*func)(int)))(int);</pre>
11990 <h6>Description</h6>
11991 <p><!--para 2-->
11992  The signal function chooses one of three ways in which receipt of the signal number
11993  sig is to be subsequently handled. If the value of func is SIG_DFL, default handling
11994  for that signal will occur. If the value of func is SIG_IGN, the signal will be ignored.
11995  Otherwise, func shall point to a function to be called when that signal occurs. An
11996  invocation of such a function because of a signal, or (recursively) of any further functions
11997  called by that invocation (other than functions in the standard library), is called a signal
11998  handler.
11999 <p><!--para 3-->
12000  When a signal occurs and func points to a function, it is implementation-defined
12001  whether the equivalent of signal(sig, SIG_DFL); is executed or the
12002  implementation prevents some implementation-defined set of signals (at least including
12003  sig) from occurring until the current signal handling has completed; in the case of
12004  SIGILL, the implementation may alternatively define that no action is taken. Then the
12005  equivalent of (*func)(sig); is executed. If and when the function returns, if the
12006  value of sig is SIGFPE, SIGILL, SIGSEGV, or any other implementation-defined
12007  value corresponding to a computational exception, the behavior is undefined; otherwise
12008  the program will resume execution at the point it was interrupted.
12009 <p><!--para 4-->
12010  If the signal occurs as the result of calling the abort or raise function, the signal
12011  handler shall not call the raise function.
12012 <p><!--para 5-->
12013  If the signal occurs other than as the result of calling the abort or raise function, the
12014  behavior is undefined if the signal handler refers to any object with static storage duration
12015  other than by assigning a value to an object declared as volatile sig_atomic_t, or
12016  the signal handler calls any function in the standard library other than the abort
12017  function, the _Exit function, or the signal function with the first argument equal to
12018  the signal number corresponding to the signal that caused the invocation of the handler.
12019  Furthermore, if such a call to the signal function results in a SIG_ERR return, the
12020  value of errno is indeterminate.<sup><a href="#note220"><b>220)</b></a></sup>
12021 <p><!--para 6-->
12022  At program startup, the equivalent of
12023 <pre>
12024          signal(sig, SIG_IGN);</pre>
12025  
12026  
12027 <!--page 260 indent 4-->
12028  may be executed for some signals selected in an implementation-defined manner; the
12029  equivalent of
12030 <pre>
12031         signal(sig, SIG_DFL);</pre>
12032  is executed for all other signals defined by the implementation.
12033 <p><!--para 7-->
12034  The implementation shall behave as if no library function calls the signal function.
12035 <h6>Returns</h6>
12036 <p><!--para 8-->
12037  If the request can be honored, the signal function returns the value of func for the
12038  most recent successful call to signal for the specified signal sig. Otherwise, a value of
12039  SIG_ERR is returned and a positive value is stored in errno.
12040 <p><b> Forward references</b>: the abort function (<a href="#7.20.4.1">7.20.4.1</a>), the exit function (<a href="#7.20.4.3">7.20.4.3</a>), the
12041  _Exit function (<a href="#7.20.4.4">7.20.4.4</a>).
12042
12043 <h6>footnotes</h6>
12044 <p><a name="note220">220)</a> If any signal is generated by an asynchronous signal handler, the behavior is undefined.
12045
12046
12047 <a name="7.14.2" href="#7.14.2"><h4>7.14.2 Send signal</h4></a>
12048
12049 <a name="7.14.2.1" href="#7.14.2.1"><h5>7.14.2.1 The raise function</h5></a>
12050 <h6>Synopsis</h6>
12051 <p><!--para 1-->
12052 <pre>
12053         #include <a href="#7.14">&lt;signal.h&gt;</a>
12054         int raise(int sig);</pre>
12055 <h6>Description</h6>
12056 <p><!--para 2-->
12057  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
12058  signal handler is called, the raise function shall not return until after the signal handler
12059  does.
12060 <h6>Returns</h6>
12061 <p><!--para 3-->
12062  The raise function returns zero if successful, nonzero if unsuccessful.
12063 <!--page 261 indent 4-->
12064
12065 <a name="7.15" href="#7.15"><h3>7.15 Variable arguments <stdarg.h></h3></a>
12066 <p><!--para 1-->
12067  The header <a href="#7.15">&lt;stdarg.h&gt;</a> declares a type and defines four macros, for advancing
12068  through a list of arguments whose number and types are not known to the called function
12069  when it is translated.
12070 <p><!--para 2-->
12071  A function may be called with a variable number of arguments of varying types. As
12072  described in <a href="#6.9.1">6.9.1</a>, its parameter list contains one or more parameters. The rightmost
12073  parameter plays a special role in the access mechanism, and will be designated parmN in
12074  this description.
12075 <p><!--para 3-->
12076  The type declared is
12077 <pre>
12078          va_list</pre>
12079  which is an object type suitable for holding information needed by the macros
12080  va_start, va_arg, va_end, and va_copy. If access to the varying arguments is
12081  desired, the called function shall declare an object (generally referred to as ap in this
12082  subclause) having type va_list. The object ap may be passed as an argument to
12083  another function; if that function invokes the va_arg macro with parameter ap, the
12084  value of ap in the calling function is indeterminate and shall be passed to the va_end
12085  macro prior to any further reference to ap.<sup><a href="#note221"><b>221)</b></a></sup>
12086
12087 <h6>footnotes</h6>
12088 <p><a name="note221">221)</a> It is permitted to create a pointer to a va_list and pass that pointer to another function, in which
12089  case the original function may make further use of the original list after the other function returns.
12090
12091
12092 <a name="7.15.1" href="#7.15.1"><h4>7.15.1 Variable argument list access macros</h4></a>
12093 <p><!--para 1-->
12094  The va_start and va_arg macros described in this subclause shall be implemented
12095  as macros, not functions. It is unspecified whether va_copy and va_end are macros or
12096  identifiers declared with external linkage. If a macro definition is suppressed in order to
12097  access an actual function, or a program defines an external identifier with the same name,
12098  the behavior is undefined. Each invocation of the va_start and va_copy macros
12099  shall be matched by a corresponding invocation of the va_end macro in the same
12100  function.
12101
12102 <a name="7.15.1.1" href="#7.15.1.1"><h5>7.15.1.1 The va_arg macro</h5></a>
12103 <h6>Synopsis</h6>
12104 <p><!--para 1-->
12105 <pre>
12106          #include <a href="#7.15">&lt;stdarg.h&gt;</a>
12107          type va_arg(va_list ap, type);</pre>
12108 <h6>Description</h6>
12109 <p><!--para 2-->
12110  The va_arg macro expands to an expression that has the specified type and the value of
12111  the next argument in the call. The parameter ap shall have been initialized by the
12112  va_start or va_copy macro (without an intervening invocation of the va_end
12113  
12114 <!--page 262 indent 4-->
12115  macro for the same ap). Each invocation of the va_arg macro modifies ap so that the
12116  values of successive arguments are returned in turn. The parameter type shall be a type
12117  name specified such that the type of a pointer to an object that has the specified type can
12118  be obtained simply by postfixing a * to type. If there is no actual next argument, or if
12119  type is not compatible with the type of the actual next argument (as promoted according
12120  to the default argument promotions), the behavior is undefined, except for the following
12121  cases:
12122 <ul>
12123 <li>  one type is a signed integer type, the other type is the corresponding unsigned integer
12124  type, and the value is representable in both types;
12125 <li>  one type is pointer to void and the other is a pointer to a character type.
12126 </ul>
12127 <h6>Returns</h6>
12128 <p><!--para 3-->
12129  The first invocation of the va_arg macro after that of the va_start macro returns the
12130  value of the argument after that specified by parmN . Successive invocations return the
12131  values of the remaining arguments in succession.
12132
12133 <a name="7.15.1.2" href="#7.15.1.2"><h5>7.15.1.2 The va_copy macro</h5></a>
12134 <h6>Synopsis</h6>
12135 <p><!--para 1-->
12136 <pre>
12137         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
12138         void va_copy(va_list dest, va_list src);</pre>
12139 <h6>Description</h6>
12140 <p><!--para 2-->
12141  The va_copy macro initializes dest as a copy of src, as if the va_start macro had
12142  been applied to dest followed by the same sequence of uses of the va_arg macro as
12143  had previously been used to reach the present state of src. Neither the va_copy nor
12144  va_start macro shall be invoked to reinitialize dest without an intervening
12145  invocation of the va_end macro for the same dest.
12146 <h6>Returns</h6>
12147 <p><!--para 3-->
12148  The va_copy macro returns no value.
12149
12150 <a name="7.15.1.3" href="#7.15.1.3"><h5>7.15.1.3 The va_end macro</h5></a>
12151 <h6>Synopsis</h6>
12152 <p><!--para 1-->
12153 <pre>
12154         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
12155         void va_end(va_list ap);</pre>
12156 <h6>Description</h6>
12157 <p><!--para 2-->
12158  The va_end macro facilitates a normal return from the function whose variable
12159  argument list was referred to by the expansion of the va_start macro, or the function
12160  containing the expansion of the va_copy macro, that initialized the va_list ap. The
12161  va_end macro may modify ap so that it is no longer usable (without being reinitialized
12162 <!--page 263 indent 4-->
12163  by the va_start or va_copy macro). If there is no corresponding invocation of the
12164  va_start or va_copy macro, or if the va_end macro is not invoked before the
12165  return, the behavior is undefined.
12166 <h6>Returns</h6>
12167 <p><!--para 3-->
12168  The va_end macro returns no value.
12169
12170 <a name="7.15.1.4" href="#7.15.1.4"><h5>7.15.1.4 The va_start macro</h5></a>
12171 <h6>Synopsis</h6>
12172 <p><!--para 1-->
12173 <pre>
12174          #include <a href="#7.15">&lt;stdarg.h&gt;</a>
12175          void va_start(va_list ap, parmN);</pre>
12176 <h6>Description</h6>
12177 <p><!--para 2-->
12178  The va_start macro shall be invoked before any access to the unnamed arguments.
12179 <p><!--para 3-->
12180  The va_start macro initializes ap for subsequent use by the va_arg and va_end
12181  macros. Neither the va_start nor va_copy macro shall be invoked to reinitialize ap
12182  without an intervening invocation of the va_end macro for the same ap.
12183 <p><!--para 4-->
12184  The parameter parmN is the identifier of the rightmost parameter in the variable
12185  parameter list in the function definition (the one just before the , ...). If the parameter
12186  parmN is declared with the register storage class, with a function or array type, or
12187  with a type that is not compatible with the type that results after application of the default
12188  argument promotions, the behavior is undefined.
12189 <h6>Returns</h6>
12190 <p><!--para 5-->
12191  The va_start macro returns no value.
12192 <p><!--para 6-->
12193  EXAMPLE 1 The function f1 gathers into an array a list of arguments that are pointers to strings (but not
12194  more than MAXARGS arguments), then passes the array as a single argument to function f2. The number of
12195  pointers is specified by the first argument to f1.
12196 <!--page 264 indent 4-->
12197 <pre>
12198          #include <a href="#7.15">&lt;stdarg.h&gt;</a>
12199          #define MAXARGS   31
12200          void f1(int n_ptrs, ...)
12201          {
12202                va_list ap;
12203                char *array[MAXARGS];
12204                int ptr_no = 0;
12205                    if (n_ptrs &gt; MAXARGS)
12206                          n_ptrs = MAXARGS;
12207                    va_start(ap, n_ptrs);
12208                    while (ptr_no &lt; n_ptrs)
12209                          array[ptr_no++] = va_arg(ap, char *);
12210                    va_end(ap);
12211                    f2(n_ptrs, array);
12212           }</pre>
12213  Each call to f1 is required to have visible the definition of the function or a declaration such as
12214 <pre>
12215           void f1(int, ...);</pre>
12216  
12217 <p><!--para 7-->
12218  EXAMPLE 2 The function f3 is similar, but saves the status of the variable argument list after the
12219  indicated number of arguments; after f2 has been called once with the whole list, the trailing part of the list
12220  is gathered again and passed to function f4.
12221 <!--page 265 indent 4-->
12222 <pre>
12223           #include <a href="#7.15">&lt;stdarg.h&gt;</a>
12224           #define MAXARGS 31
12225           void f3(int n_ptrs, int f4_after, ...)
12226           {
12227                 va_list ap, ap_save;
12228                 char *array[MAXARGS];
12229                 int ptr_no = 0;
12230                 if (n_ptrs &gt; MAXARGS)
12231                       n_ptrs = MAXARGS;
12232                 va_start(ap, f4_after);
12233                 while (ptr_no &lt; n_ptrs) {
12234                       array[ptr_no++] = va_arg(ap, char *);
12235                       if (ptr_no == f4_after)
12236                             va_copy(ap_save, ap);
12237                 }
12238                 va_end(ap);
12239                 f2(n_ptrs, array);
12240                    // Now process the saved copy.
12241                    n_ptrs -= f4_after;
12242                    ptr_no = 0;
12243                    while (ptr_no &lt; n_ptrs)
12244                          array[ptr_no++] = va_arg(ap_save, char *);
12245                    va_end(ap_save);
12246                    f4(n_ptrs, array);
12247           }</pre>
12248
12249 <a name="7.16" href="#7.16"><h3>7.16 Boolean type and values <stdbool.h></h3></a>
12250 <p><!--para 1-->
12251  The header <a href="#7.16">&lt;stdbool.h&gt;</a> defines four macros.
12252 <p><!--para 2-->
12253  The macro
12254 <pre>
12255           bool</pre>
12256  expands to _Bool.
12257 <p><!--para 3-->
12258  The remaining three macros are suitable for use in #if preprocessing directives. They
12259  are
12260 <pre>
12261           true</pre>
12262  which expands to the integer constant 1,
12263 <pre>
12264           false</pre>
12265  which expands to the integer constant 0, and
12266 <pre>
12267           __bool_true_false_are_defined</pre>
12268  which expands to the integer constant 1.
12269 <p><!--para 4-->
12270  Notwithstanding the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and perhaps then
12271  redefine the macros bool, true, and false.<sup><a href="#note222"><b>222)</b></a></sup>
12272  
12273  
12274  
12275  
12276 <!--page 266 indent 4-->
12277
12278 <h6>footnotes</h6>
12279 <p><a name="note222">222)</a> See ''future library directions'' (<a href="#7.26.7">7.26.7</a>).
12280
12281
12282 <a name="7.17" href="#7.17"><h3>7.17 Common definitions <stddef.h></h3></a>
12283 <p><!--para 1-->
12284  The following types and macros are defined in the standard header <a href="#7.17">&lt;stddef.h&gt;</a>. Some
12285  are also defined in other headers, as noted in their respective subclauses.
12286 <p><!--para 2-->
12287  The types are
12288 <pre>
12289         ptrdiff_t</pre>
12290  which is the signed integer type of the result of subtracting two pointers;
12291 <pre>
12292         size_t</pre>
12293  which is the unsigned integer type of the result of the sizeof operator; and
12294 <pre>
12295         wchar_t</pre>
12296  which is an integer type whose range of values can represent distinct codes for all
12297  members of the largest extended character set specified among the supported locales; the
12298  null character shall have the code value zero. Each member of the basic character set
12299  shall have a code value equal to its value when used as the lone character in an integer
12300  character      constant     if     an      implementation      does      not      define
12301  __STDC_MB_MIGHT_NEQ_WC__.
12302 <p><!--para 3-->
12303  The macros are
12304 <pre>
12305         NULL</pre>
12306  which expands to an implementation-defined null pointer constant; and
12307 <pre>
12308         offsetof(type, member-designator)</pre>
12309  which expands to an integer constant expression that has type size_t, the value of
12310  which is the offset in bytes, to the structure member (designated by member-designator),
12311  from the beginning of its structure (designated by type). The type and member designator
12312  shall be such that given
12313 <pre>
12314         static type t;</pre>
12315  then the expression &amp;(t.member-designator) evaluates to an address constant. (If the
12316  specified member is a bit-field, the behavior is undefined.)
12317  Recommended practice
12318 <p><!--para 4-->
12319  The types used for size_t and ptrdiff_t should not have an integer conversion rank
12320  greater than that of signed long int unless the implementation supports objects
12321  large enough to make this necessary.
12322 <p><b> Forward references</b>: localization (<a href="#7.11">7.11</a>).
12323 <!--page 267 indent 4-->
12324
12325 <a name="7.18" href="#7.18"><h3>7.18 Integer types <stdint.h></h3></a>
12326 <p><!--para 1-->
12327  The header <a href="#7.18">&lt;stdint.h&gt;</a> declares sets of integer types having specified widths, and
12328  defines corresponding sets of macros.<sup><a href="#note223"><b>223)</b></a></sup> It also defines macros that specify limits of
12329  integer types corresponding to types defined in other standard headers.
12330 <p><!--para 2-->
12331  Types are defined in the following categories:
12332 <ul>
12333 <li>  integer types having certain exact widths;
12334 <li>  integer types having at least certain specified widths;
12335 <li>  fastest integer types having at least certain specified widths;
12336 <li>  integer types wide enough to hold pointers to objects;
12337 <li>  integer types having greatest width.
12338 </ul>
12339  (Some of these types may denote the same type.)
12340 <p><!--para 3-->
12341  Corresponding macros specify limits of the declared types and construct suitable
12342  constants.
12343 <p><!--para 4-->
12344  For each type described herein that the implementation provides,<sup><a href="#note224"><b>224)</b></a></sup> <a href="#7.18">&lt;stdint.h&gt;</a> shall
12345  declare that typedef name and define the associated macros. Conversely, for each type
12346  described herein that the implementation does not provide, <a href="#7.18">&lt;stdint.h&gt;</a> shall not
12347  declare that typedef name nor shall it define the associated macros. An implementation
12348  shall provide those types described as ''required'', but need not provide any of the others
12349  (described as ''optional'').
12350
12351 <h6>footnotes</h6>
12352 <p><a name="note223">223)</a> See ''future library directions'' (<a href="#7.26.8">7.26.8</a>).
12353
12354 <p><a name="note224">224)</a> Some of these types may denote implementation-defined extended integer types.
12355
12356
12357 <a name="7.18.1" href="#7.18.1"><h4>7.18.1 Integer types</h4></a>
12358 <p><!--para 1-->
12359  When typedef names differing only in the absence or presence of the initial u are defined,
12360  they shall denote corresponding signed and unsigned types as described in <a href="#6.2.5">6.2.5</a>; an
12361  implementation providing one of these corresponding types shall also provide the other.
12362 <p><!--para 2-->
12363  In the following descriptions, the symbol N represents an unsigned decimal integer with
12364  no leading zeros (e.g., 8 or 24, but not 04 or 048).
12365  
12366  
12367  
12368  
12369 <!--page 268 indent 4-->
12370
12371 <a name="7.18.1.1" href="#7.18.1.1"><h5>7.18.1.1 Exact-width integer types</h5></a>
12372 <p><!--para 1-->
12373  The typedef name intN_t designates a signed integer type with width N , no padding
12374  bits, and a two's complement representation. Thus, int8_t denotes a signed integer
12375  type with a width of exactly 8 bits.
12376 <p><!--para 2-->
12377  The typedef name uintN_t designates an unsigned integer type with width N . Thus,
12378  uint24_t denotes an unsigned integer type with a width of exactly 24 bits.
12379 <p><!--para 3-->
12380  These types are optional. However, if an implementation provides integer types with
12381  widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a
12382  two's complement representation, it shall define the corresponding typedef names.
12383
12384 <a name="7.18.1.2" href="#7.18.1.2"><h5>7.18.1.2 Minimum-width integer types</h5></a>
12385 <p><!--para 1-->
12386  The typedef name int_leastN_t designates a signed integer type with a width of at
12387  least N , such that no signed integer type with lesser size has at least the specified width.
12388  Thus, int_least32_t denotes a signed integer type with a width of at least 32 bits.
12389 <p><!--para 2-->
12390  The typedef name uint_leastN_t designates an unsigned integer type with a width
12391  of at least N , such that no unsigned integer type with lesser size has at least the specified
12392  width. Thus, uint_least16_t denotes an unsigned integer type with a width of at
12393  least 16 bits.
12394 <p><!--para 3-->
12395  The following types are required:
12396 <pre>
12397           int_least8_t                                      uint_least8_t
12398           int_least16_t                                     uint_least16_t
12399           int_least32_t                                     uint_least32_t
12400           int_least64_t                                     uint_least64_t</pre>
12401  All other types of this form are optional.
12402
12403 <a name="7.18.1.3" href="#7.18.1.3"><h5>7.18.1.3 Fastest minimum-width integer types</h5></a>
12404 <p><!--para 1-->
12405  Each of the following types designates an integer type that is usually fastest<sup><a href="#note225"><b>225)</b></a></sup> to operate
12406  with among all integer types that have at least the specified width.
12407 <p><!--para 2-->
12408  The typedef name int_fastN_t designates the fastest signed integer type with a width
12409  of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer
12410  type with a width of at least N .
12411  
12412  
12413  
12414  
12415 <!--page 269 indent 4-->
12416 <p><!--para 3-->
12417  The following types are required:
12418 <pre>
12419         int_fast8_t                                 uint_fast8_t
12420         int_fast16_t                                uint_fast16_t
12421         int_fast32_t                                uint_fast32_t
12422         int_fast64_t                                uint_fast64_t</pre>
12423  All other types of this form are optional.
12424
12425 <h6>footnotes</h6>
12426 <p><a name="note225">225)</a> The designated type is not guaranteed to be fastest for all purposes; if the implementation has no clear
12427  grounds for choosing one type over another, it will simply pick some integer type satisfying the
12428  signedness and width requirements.
12429
12430
12431 <a name="7.18.1.4" href="#7.18.1.4"><h5>7.18.1.4 Integer types capable of holding object pointers</h5></a>
12432 <p><!--para 1-->
12433  The following type designates a signed integer type with the property that any valid
12434  pointer to void can be converted to this type, then converted back to pointer to void,
12435  and the result will compare equal to the original pointer:
12436 <pre>
12437         intptr_t</pre>
12438  The following type designates an unsigned integer type with the property that any valid
12439  pointer to void can be converted to this type, then converted back to pointer to void,
12440  and the result will compare equal to the original pointer:
12441 <pre>
12442         uintptr_t</pre>
12443  These types are optional.
12444
12445 <a name="7.18.1.5" href="#7.18.1.5"><h5>7.18.1.5 Greatest-width integer types</h5></a>
12446 <p><!--para 1-->
12447  The following type designates a signed integer type capable of representing any value of
12448  any signed integer type:
12449 <pre>
12450         intmax_t</pre>
12451  The following type designates an unsigned integer type capable of representing any value
12452  of any unsigned integer type:
12453 <pre>
12454         uintmax_t</pre>
12455  These types are required.
12456
12457 <a name="7.18.2" href="#7.18.2"><h4>7.18.2 Limits of specified-width integer types</h4></a>
12458 <p><!--para 1-->
12459  The following object-like macros<sup><a href="#note226"><b>226)</b></a></sup> specify the minimum and maximum limits of the
12460  types declared in <a href="#7.18">&lt;stdint.h&gt;</a>. Each macro name corresponds to a similar type name in
12461  <a href="#7.18.1">7.18.1</a>.
12462 <p><!--para 2-->
12463  Each instance of any defined macro shall be replaced by a constant expression suitable
12464  for use in #if preprocessing directives, and this expression shall have the same type as
12465  would an expression that is an object of the corresponding type converted according to
12466  
12467 <!--page 270 indent 4-->
12468  the integer promotions. Its implementation-defined value shall be equal to or greater in
12469  magnitude (absolute value) than the corresponding value given below, with the same sign,
12470  except where stated to be exactly the given value.
12471
12472 <h6>footnotes</h6>
12473 <p><a name="note226">226)</a> C++ implementations should define these macros only when __STDC_LIMIT_MACROS is defined
12474  before <a href="#7.18">&lt;stdint.h&gt;</a> is included.
12475
12476
12477 <a name="7.18.2.1" href="#7.18.2.1"><h5>7.18.2.1 Limits of exact-width integer types</h5></a>
12478 <p><!--para 1-->
12479 <ul>
12480 <li>  minimum values of exact-width signed integer types
12481   INTN_MIN                                    exactly -(2 N -1 )
12482 <li>  maximum values of exact-width signed integer types
12483   INTN_MAX                                    exactly 2 N -1 - 1
12484 <li>  maximum values of exact-width unsigned integer types
12485   UINTN_MAX                                   exactly 2 N - 1
12486 </ul>
12487
12488 <a name="7.18.2.2" href="#7.18.2.2"><h5>7.18.2.2 Limits of minimum-width integer types</h5></a>
12489 <p><!--para 1-->
12490 <ul>
12491 <li>  minimum values of minimum-width signed integer types
12492   INT_LEASTN_MIN                                      -(2 N -1 - 1)
12493 <li>  maximum values of minimum-width signed integer types
12494   INT_LEASTN_MAX                                      2 N -1 - 1
12495 <li>  maximum values of minimum-width unsigned integer types
12496   UINT_LEASTN_MAX                                     2N - 1
12497 </ul>
12498
12499 <a name="7.18.2.3" href="#7.18.2.3"><h5>7.18.2.3 Limits of fastest minimum-width integer types</h5></a>
12500 <p><!--para 1-->
12501 <ul>
12502 <li>  minimum values of fastest minimum-width signed integer types
12503   INT_FASTN_MIN                                       -(2 N -1 - 1)
12504 <li>  maximum values of fastest minimum-width signed integer types
12505   INT_FASTN_MAX                                       2 N -1 - 1
12506 <li>  maximum values of fastest minimum-width unsigned integer types
12507   UINT_FASTN_MAX                                      2N - 1
12508 </ul>
12509
12510 <a name="7.18.2.4" href="#7.18.2.4"><h5>7.18.2.4 Limits of integer types capable of holding object pointers</h5></a>
12511 <p><!--para 1-->
12512 <ul>
12513 <li>  minimum value of pointer-holding signed integer type
12514 <pre>
12515      INTPTR_MIN                                       -(215 - 1)</pre>
12516 <li>  maximum value of pointer-holding signed integer type
12517 <!--page 271 indent 4-->
12518 <pre>
12519      INTPTR_MAX                                       215 - 1</pre>
12520 <li>  maximum value of pointer-holding unsigned integer type
12521    UINTPTR_MAX                                                   216 - 1
12522 </ul>
12523
12524 <a name="7.18.2.5" href="#7.18.2.5"><h5>7.18.2.5 Limits of greatest-width integer types</h5></a>
12525 <p><!--para 1-->
12526 <ul>
12527 <li>  minimum value of greatest-width signed integer type
12528    INTMAX_MIN                                                    -(263 - 1)
12529 <li>  maximum value of greatest-width signed integer type
12530    INTMAX_MAX                                                    263 - 1
12531 <li>  maximum value of greatest-width unsigned integer type
12532    UINTMAX_MAX                                                   264 - 1
12533 </ul>
12534
12535 <a name="7.18.3" href="#7.18.3"><h4>7.18.3 Limits of other integer types</h4></a>
12536 <p><!--para 1-->
12537  The following object-like macros<sup><a href="#note227"><b>227)</b></a></sup> specify the minimum and maximum limits of
12538  integer types corresponding to types defined in other standard headers.
12539 <p><!--para 2-->
12540  Each instance of these macros shall be replaced by a constant expression suitable for use
12541  in #if preprocessing directives, and this expression shall have the same type as would an
12542  expression that is an object of the corresponding type converted according to the integer
12543  promotions. Its implementation-defined value shall be equal to or greater in magnitude
12544  (absolute value) than the corresponding value given below, with the same sign. An
12545  implementation shall define only the macros corresponding to those typedef names it
12546  actually provides.<sup><a href="#note228"><b>228)</b></a></sup>
12547 <ul>
12548 <li>  limits of ptrdiff_t
12549    PTRDIFF_MIN                                                 -65535
12550    PTRDIFF_MAX                                                 +65535
12551 <li>  limits of sig_atomic_t
12552    SIG_ATOMIC_MIN                                              see below
12553    SIG_ATOMIC_MAX                                              see below
12554 <li>  limit of size_t
12555    SIZE_MAX                                                      65535
12556 <li>  limits of wchar_t
12557  
12558  
12559  
12560 <!--page 272 indent 4-->
12561   WCHAR_MIN                                              see below
12562   WCHAR_MAX                                              see below
12563 <li>  limits of wint_t
12564   WINT_MIN                                               see below
12565   WINT_MAX                                               see below
12566 </ul>
12567 <p><!--para 3-->
12568  If sig_atomic_t (see <a href="#7.14">7.14</a>) is defined as a signed integer type, the value of
12569  SIG_ATOMIC_MIN shall be no greater than -127 and the value of SIG_ATOMIC_MAX
12570  shall be no less than 127; otherwise, sig_atomic_t is defined as an unsigned integer
12571  type, and the value of SIG_ATOMIC_MIN shall be 0 and the value of
12572  SIG_ATOMIC_MAX shall be no less than 255.
12573 <p><!--para 4-->
12574  If wchar_t (see <a href="#7.17">7.17</a>) is defined as a signed integer type, the value of WCHAR_MIN
12575  shall be no greater than -127 and the value of WCHAR_MAX shall be no less than 127;
12576  otherwise, wchar_t is defined as an unsigned integer type, and the value of
12577  WCHAR_MIN shall be 0 and the value of WCHAR_MAX shall be no less than 255.<sup><a href="#note229"><b>229)</b></a></sup>
12578 <p><!--para 5-->
12579  If wint_t (see <a href="#7.24">7.24</a>) is defined as a signed integer type, the value of WINT_MIN shall
12580  be no greater than -32767 and the value of WINT_MAX shall be no less than 32767;
12581  otherwise, wint_t is defined as an unsigned integer type, and the value of WINT_MIN
12582  shall be 0 and the value of WINT_MAX shall be no less than 65535.
12583
12584 <h6>footnotes</h6>
12585 <p><a name="note227">227)</a> C++ implementations should define these macros only when __STDC_LIMIT_MACROS is defined
12586  before <a href="#7.18">&lt;stdint.h&gt;</a> is included.
12587
12588 <p><a name="note228">228)</a> A freestanding implementation need not provide all of these types.
12589
12590 <p><a name="note229">229)</a> The values WCHAR_MIN and WCHAR_MAX do not necessarily correspond to members of the extended
12591  character set.
12592
12593
12594 <a name="7.18.4" href="#7.18.4"><h4>7.18.4 Macros for integer constants</h4></a>
12595 <p><!--para 1-->
12596  The following function-like macros<sup><a href="#note230"><b>230)</b></a></sup> expand to integer constants suitable for
12597  initializing objects that have integer types corresponding to types defined in
12598  <a href="#7.18">&lt;stdint.h&gt;</a>. Each macro name corresponds to a similar type name in <a href="#7.18.1.2">7.18.1.2</a> or
12599  <a href="#7.18.1.5">7.18.1.5</a>.
12600 <p><!--para 2-->
12601  The argument in any instance of these macros shall be an unsuffixed integer constant (as
12602  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.
12603 <p><!--para 3-->
12604  Each invocation of one of these macros shall expand to an integer constant expression
12605  suitable for use in #if preprocessing directives. The type of the expression shall have
12606  the same type as would an expression of the corresponding type converted according to
12607  the integer promotions. The value of the expression shall be that of the argument.
12608  
12609  
12610  
12611  
12612 <!--page 273 indent 4-->
12613
12614 <h6>footnotes</h6>
12615 <p><a name="note230">230)</a> C++ implementations should define these macros only when __STDC_CONSTANT_MACROS is
12616  defined before <a href="#7.18">&lt;stdint.h&gt;</a> is included.
12617
12618
12619 <a name="7.18.4.1" href="#7.18.4.1"><h5>7.18.4.1 Macros for minimum-width integer constants</h5></a>
12620 <p><!--para 1-->
12621  The macro INTN_C(value) shall expand to an integer constant expression
12622  corresponding to the type int_leastN_t. The macro UINTN_C(value) shall expand
12623  to an integer constant expression corresponding to the type uint_leastN_t. For
12624  example, if uint_least64_t is a name for the type unsigned long long int,
12625  then UINT64_C(0x123) might expand to the integer constant 0x123ULL.
12626
12627 <a name="7.18.4.2" href="#7.18.4.2"><h5>7.18.4.2 Macros for greatest-width integer constants</h5></a>
12628 <p><!--para 1-->
12629  The following macro expands to an integer constant expression having the value specified
12630  by its argument and the type intmax_t:
12631 <pre>
12632         INTMAX_C(value)</pre>
12633  The following macro expands to an integer constant expression having the value specified
12634  by its argument and the type uintmax_t:
12635 <!--page 274 indent 4-->
12636 <pre>
12637         UINTMAX_C(value)</pre>
12638
12639 <a name="7.19" href="#7.19"><h3>7.19 Input/output <stdio.h></h3></a>
12640
12641 <a name="7.19.1" href="#7.19.1"><h4>7.19.1 Introduction</h4></a>
12642 <p><!--para 1-->
12643  The header <a href="#7.19">&lt;stdio.h&gt;</a> declares three types, several macros, and many functions for
12644  performing input and output.
12645 <p><!--para 2-->
12646  The types declared are size_t (described in <a href="#7.17">7.17</a>);
12647 <pre>
12648         FILE</pre>
12649  which is an object type capable of recording all the information needed to control a
12650  stream, including its file position indicator, a pointer to its associated buffer (if any), an
12651  error indicator that records whether a read/write error has occurred, and an end-of-file
12652  indicator that records whether the end of the file has been reached; and
12653 <pre>
12654         fpos_t</pre>
12655  which is an object type other than an array type capable of recording all the information
12656  needed to specify uniquely every position within a file.
12657 <p><!--para 3-->
12658  The macros are NULL (described in <a href="#7.17">7.17</a>);
12659 <pre>
12660         _IOFBF
12661         _IOLBF
12662         _IONBF</pre>
12663  which expand to integer constant expressions with distinct values, suitable for use as the
12664  third argument to the setvbuf function;
12665 <pre>
12666         BUFSIZ</pre>
12667  which expands to an integer constant expression that is the size of the buffer used by the
12668  setbuf function;
12669 <pre>
12670         EOF</pre>
12671  which expands to an integer constant expression, with type int and a negative value, that
12672  is returned by several functions to indicate end-of-file, that is, no more input from a
12673  stream;
12674 <pre>
12675         FOPEN_MAX</pre>
12676  which expands to an integer constant expression that is the minimum number of files that
12677  the implementation guarantees can be open simultaneously;
12678 <pre>
12679         FILENAME_MAX</pre>
12680  which expands to an integer constant expression that is the size needed for an array of
12681  char large enough to hold the longest file name string that the implementation
12682 <!--page 275 indent 4-->
12683  guarantees can be opened;<sup><a href="#note231"><b>231)</b></a></sup>
12684 <pre>
12685          L_tmpnam</pre>
12686  which expands to an integer constant expression that is the size needed for an array of
12687  char large enough to hold a temporary file name string generated by the tmpnam
12688  function;
12689 <pre>
12690          SEEK_CUR
12691          SEEK_END
12692          SEEK_SET</pre>
12693  which expand to integer constant expressions with distinct values, suitable for use as the
12694  third argument to the fseek function;
12695 <pre>
12696          TMP_MAX</pre>
12697  which expands to an integer constant expression that is the maximum number of unique
12698  file names that can be generated by the tmpnam function;
12699 <pre>
12700          stderr
12701          stdin
12702          stdout</pre>
12703  which are expressions of type ''pointer to FILE'' that point to the FILE objects
12704  associated, respectively, with the standard error, input, and output streams.
12705 <p><!--para 4-->
12706  The header <a href="#7.24">&lt;wchar.h&gt;</a> declares a number of functions useful for wide character input
12707  and output. The wide character input/output functions described in that subclause
12708  provide operations analogous to most of those described here, except that the
12709  fundamental units internal to the program are wide characters. The external
12710  representation (in the file) is a sequence of ''generalized'' multibyte characters, as
12711  described further in <a href="#7.19.3">7.19.3</a>.
12712 <p><!--para 5-->
12713  The input/output functions are given the following collective terms:
12714 <ul>
12715 <li>  The wide character input functions -- those functions described in <a href="#7.24">7.24</a> that perform
12716  input into wide characters and wide strings: fgetwc, fgetws, getwc, getwchar,
12717  fwscanf, wscanf, vfwscanf, and vwscanf.
12718 <li>  The wide character output functions -- those functions described in <a href="#7.24">7.24</a> that perform
12719  output from wide characters and wide strings: fputwc, fputws, putwc,
12720  putwchar, fwprintf, wprintf, vfwprintf, and vwprintf.
12721  
12722  
12723 <!--page 276 indent 4-->
12724 <li>  The wide character input/output functions -- the union of the ungetwc function, the
12725  wide character input functions, and the wide character output functions.
12726 <li>  The byte input/output functions -- those functions described in this subclause that
12727  perform input/output: fgetc, fgets, fprintf, fputc, fputs, fread,
12728  fscanf, fwrite, getc, getchar, gets, printf, putc, putchar, puts,
12729  scanf, ungetc, vfprintf, vfscanf, vprintf, and vscanf.
12730 </ul>
12731 <p><b> Forward references</b>: files (<a href="#7.19.3">7.19.3</a>), the fseek function (<a href="#7.19.9.2">7.19.9.2</a>), streams (<a href="#7.19.2">7.19.2</a>), the
12732  tmpnam function (<a href="#7.19.4.4">7.19.4.4</a>), <a href="#7.24">&lt;wchar.h&gt;</a> (<a href="#7.24">7.24</a>).
12733
12734 <h6>footnotes</h6>
12735 <p><a name="note231">231)</a> If the implementation imposes no practical limit on the length of file name strings, the value of
12736  FILENAME_MAX should instead be the recommended size of an array intended to hold a file name
12737  string. Of course, file name string contents are subject to other system-specific constraints; therefore
12738  all possible strings of length FILENAME_MAX cannot be expected to be opened successfully.
12739
12740
12741 <a name="7.19.2" href="#7.19.2"><h4>7.19.2 Streams</h4></a>
12742 <p><!--para 1-->
12743  Input and output, whether to or from physical devices such as terminals and tape drives,
12744  or whether to or from files supported on structured storage devices, are mapped into
12745  logical data streams, whose properties are more uniform than their various inputs and
12746  outputs. Two forms of mapping are supported, for text streams and for binary
12747  streams.<sup><a href="#note232"><b>232)</b></a></sup>
12748 <p><!--para 2-->
12749  A text stream is an ordered sequence of characters composed into lines, each line
12750  consisting of zero or more characters plus a terminating new-line character. Whether the
12751  last line requires a terminating new-line character is implementation-defined. Characters
12752  may have to be added, altered, or deleted on input and output to conform to differing
12753  conventions for representing text in the host environment. Thus, there need not be a one-
12754  to-one correspondence between the characters in a stream and those in the external
12755  representation. Data read in from a text stream will necessarily compare equal to the data
12756  that were earlier written out to that stream only if: the data consist only of printing
12757  characters and the control characters horizontal tab and new-line; no new-line character is
12758  immediately preceded by space characters; and the last character is a new-line character.
12759  Whether space characters that are written out immediately before a new-line character
12760  appear when read in is implementation-defined.
12761 <p><!--para 3-->
12762  A binary stream is an ordered sequence of characters that can transparently record
12763  internal data. Data read in from a binary stream shall compare equal to the data that were
12764  earlier written out to that stream, under the same implementation. Such a stream may,
12765  however, have an implementation-defined number of null characters appended to the end
12766  of the stream.
12767 <p><!--para 4-->
12768  Each stream has an orientation. After a stream is associated with an external file, but
12769  before any operations are performed on it, the stream is without orientation. Once a wide
12770  character input/output function has been applied to a stream without orientation, the
12771  
12772  
12773 <!--page 277 indent 4-->
12774  stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
12775  been applied to a stream without orientation, the stream becomes a byte-oriented stream.
12776  Only a call to the freopen function or the fwide function can otherwise alter the
12777  orientation of a stream. (A successful call to freopen removes any orientation.)<sup><a href="#note233"><b>233)</b></a></sup>
12778 <p><!--para 5-->
12779  Byte input/output functions shall not be applied to a wide-oriented stream and wide
12780  character input/output functions shall not be applied to a byte-oriented stream. The
12781  remaining stream operations do not affect, and are not affected by, a stream's orientation,
12782  except for the following additional restrictions:
12783 <ul>
12784 <li>  Binary wide-oriented streams have the file-positioning restrictions ascribed to both
12785  text and binary streams.
12786 <li>  For wide-oriented streams, after a successful call to a file-positioning function that
12787  leaves the file position indicator prior to the end-of-file, a wide character output
12788  function can overwrite a partial multibyte character; any file contents beyond the
12789  byte(s) written are henceforth indeterminate.
12790 </ul>
12791 <p><!--para 6-->
12792  Each wide-oriented stream has an associated mbstate_t object that stores the current
12793  parse state of the stream. A successful call to fgetpos stores a representation of the
12794  value of this mbstate_t object as part of the value of the fpos_t object. A later
12795  successful call to fsetpos using the same stored fpos_t value restores the value of
12796  the associated mbstate_t object as well as the position within the controlled stream.
12797  Environmental limits
12798 <p><!--para 7-->
12799  An implementation shall support text files with lines containing at least 254 characters,
12800  including the terminating new-line character. The value of the macro BUFSIZ shall be at
12801  least 256.
12802 <p><b> Forward references</b>: the freopen function (<a href="#7.19.5.4">7.19.5.4</a>), the fwide function (<a href="#7.24.3.5">7.24.3.5</a>),
12803  mbstate_t (<a href="#7.25.1">7.25.1</a>), the fgetpos function (<a href="#7.19.9.1">7.19.9.1</a>), the fsetpos function
12804  (<a href="#7.19.9.3">7.19.9.3</a>).
12805  
12806  
12807  
12808  
12809 <!--page 278 indent 4-->
12810
12811 <h6>footnotes</h6>
12812 <p><a name="note232">232)</a> An implementation need not distinguish between text streams and binary streams. In such an
12813  implementation, there need be no new-line characters in a text stream nor any limit to the length of a
12814  line.
12815
12816 <p><a name="note233">233)</a> The three predefined streams stdin, stdout, and stderr are unoriented at program startup.
12817
12818
12819 <a name="7.19.3" href="#7.19.3"><h4>7.19.3 Files</h4></a>
12820 <p><!--para 1-->
12821  A stream is associated with an external file (which may be a physical device) by opening
12822  a file, which may involve creating a new file. Creating an existing file causes its former
12823  contents to be discarded, if necessary. If a file can support positioning requests (such as a
12824  disk file, as opposed to a terminal), then a file position indicator associated with the
12825  stream is positioned at the start (character number zero) of the file, unless the file is
12826  opened with append mode in which case it is implementation-defined whether the file
12827  position indicator is initially positioned at the beginning or the end of the file. The file
12828  position indicator is maintained by subsequent reads, writes, and positioning requests, to
12829  facilitate an orderly progression through the file.
12830 <p><!--para 2-->
12831  Binary files are not truncated, except as defined in <a href="#7.19.5.3">7.19.5.3</a>. Whether a write on a text
12832  stream causes the associated file to be truncated beyond that point is implementation-
12833  defined.
12834 <p><!--para 3-->
12835  When a stream is unbuffered, characters are intended to appear from the source or at the
12836  destination as soon as possible. Otherwise characters may be accumulated and
12837  transmitted to or from the host environment as a block. When a stream is fully buffered,
12838  characters are intended to be transmitted to or from the host environment as a block when
12839  a buffer is filled. When a stream is line buffered, characters are intended to be
12840  transmitted to or from the host environment as a block when a new-line character is
12841  encountered. Furthermore, characters are intended to be transmitted as a block to the host
12842  environment when a buffer is filled, when input is requested on an unbuffered stream, or
12843  when input is requested on a line buffered stream that requires the transmission of
12844  characters from the host environment. Support for these characteristics is
12845  implementation-defined, and may be affected via the setbuf and setvbuf functions.
12846 <p><!--para 4-->
12847  A file may be disassociated from a controlling stream by closing the file. Output streams
12848  are flushed (any unwritten buffer contents are transmitted to the host environment) before
12849  the stream is disassociated from the file. The value of a pointer to a FILE object is
12850  indeterminate after the associated file is closed (including the standard text streams).
12851  Whether a file of zero length (on which no characters have been written by an output
12852  stream) actually exists is implementation-defined.
12853 <p><!--para 5-->
12854  The file may be subsequently reopened, by the same or another program execution, and
12855  its contents reclaimed or modified (if it can be repositioned at its start). If the main
12856  function returns to its original caller, or if the exit function is called, all open files are
12857  closed (hence all output streams are flushed) before program termination. Other paths to
12858  program termination, such as calling the abort function, need not close all files
12859  properly.
12860 <p><!--para 6-->
12861  The address of the FILE object used to control a stream may be significant; a copy of a
12862  FILE object need not serve in place of the original.
12863 <!--page 279 indent 5-->
12864 <p><!--para 7-->
12865  At program startup, three text streams are predefined and need not be opened explicitly
12866 <ul>
12867 <li>  standard input (for reading conventional input), standard output (for writing
12868 </ul>
12869  conventional output), and standard error (for writing diagnostic output). As initially
12870  opened, the standard error stream is not fully buffered; the standard input and standard
12871  output streams are fully buffered if and only if the stream can be determined not to refer
12872  to an interactive device.
12873 <p><!--para 8-->
12874  Functions that open additional (nontemporary) files require a file name, which is a string.
12875  The rules for composing valid file names are implementation-defined. Whether the same
12876  file can be simultaneously open multiple times is also implementation-defined.
12877 <p><!--para 9-->
12878  Although both text and binary wide-oriented streams are conceptually sequences of wide
12879  characters, the external file associated with a wide-oriented stream is a sequence of
12880  multibyte characters, generalized as follows:
12881 <ul>
12882 <li>  Multibyte encodings within files may contain embedded null bytes (unlike multibyte
12883  encodings valid for use internal to the program).
12884 <li>  A file need not begin nor end in the initial shift state.<sup><a href="#note234"><b>234)</b></a></sup>
12885 </ul>
12886 <p><!--para 10-->
12887  Moreover, the encodings used for multibyte characters may differ among files. Both the
12888  nature and choice of such encodings are implementation-defined.
12889 <p><!--para 11-->
12890  The wide character input functions read multibyte characters from the stream and convert
12891  them to wide characters as if they were read by successive calls to the fgetwc function.
12892  Each conversion occurs as if by a call to the mbrtowc function, with the conversion state
12893  described by the stream's own mbstate_t object. The byte input functions read
12894  characters from the stream as if by successive calls to the fgetc function.
12895 <p><!--para 12-->
12896  The wide character output functions convert wide characters to multibyte characters and
12897  write them to the stream as if they were written by successive calls to the fputwc
12898  function. Each conversion occurs as if by a call to the wcrtomb function, with the
12899  conversion state described by the stream's own mbstate_t object. The byte output
12900  functions write characters to the stream as if by successive calls to the fputc function.
12901 <p><!--para 13-->
12902  In some cases, some of the byte input/output functions also perform conversions between
12903  multibyte characters and wide characters. These conversions also occur as if by calls to
12904  the mbrtowc and wcrtomb functions.
12905 <p><!--para 14-->
12906  An encoding error occurs if the character sequence presented to the underlying
12907  mbrtowc function does not form a valid (generalized) multibyte character, or if the code
12908  value passed to the underlying wcrtomb does not correspond to a valid (generalized)
12909  
12910  
12911 <!--page 280 indent 5-->
12912  multibyte character. The wide character input/output functions and the byte input/output
12913  functions store the value of the macro EILSEQ in errno if and only if an encoding error
12914  occurs.
12915  Environmental limits
12916 <p><!--para 15-->
12917  The value of FOPEN_MAX shall be at least eight, including the three standard text
12918  streams.
12919 <p><b> Forward references</b>: the exit function (<a href="#7.20.4.3">7.20.4.3</a>), the fgetc function (<a href="#7.19.7.1">7.19.7.1</a>), the
12920  fopen function (<a href="#7.19.5.3">7.19.5.3</a>), the fputc function (<a href="#7.19.7.3">7.19.7.3</a>), the setbuf function
12921  (<a href="#7.19.5.5">7.19.5.5</a>), the setvbuf function (<a href="#7.19.5.6">7.19.5.6</a>), the fgetwc function (<a href="#7.24.3.1">7.24.3.1</a>), the
12922  fputwc function (<a href="#7.24.3.3">7.24.3.3</a>), conversion state (<a href="#7.24.6">7.24.6</a>), the mbrtowc function
12923  (<a href="#7.24.6.3.2">7.24.6.3.2</a>), the wcrtomb function (<a href="#7.24.6.3.3">7.24.6.3.3</a>).
12924
12925 <h6>footnotes</h6>
12926 <p><a name="note234">234)</a> Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has
12927  undefined behavior for a binary stream (because of possible trailing null characters) or for any stream
12928  with state-dependent encoding that does not assuredly end in the initial shift state.
12929
12930
12931 <a name="7.19.4" href="#7.19.4"><h4>7.19.4 Operations on files</h4></a>
12932
12933 <a name="7.19.4.1" href="#7.19.4.1"><h5>7.19.4.1 The remove function</h5></a>
12934 <h6>Synopsis</h6>
12935 <p><!--para 1-->
12936 <pre>
12937         #include <a href="#7.19">&lt;stdio.h&gt;</a>
12938         int remove(const char *filename);</pre>
12939 <h6>Description</h6>
12940 <p><!--para 2-->
12941  The remove function causes the file whose name is the string pointed to by filename
12942  to be no longer accessible by that name. A subsequent attempt to open that file using that
12943  name will fail, unless it is created anew. If the file is open, the behavior of the remove
12944  function is implementation-defined.
12945 <h6>Returns</h6>
12946 <p><!--para 3-->
12947  The remove function returns zero if the operation succeeds, nonzero if it fails.
12948
12949 <a name="7.19.4.2" href="#7.19.4.2"><h5>7.19.4.2 The rename function</h5></a>
12950 <h6>Synopsis</h6>
12951 <p><!--para 1-->
12952 <pre>
12953         #include <a href="#7.19">&lt;stdio.h&gt;</a>
12954         int rename(const char *old, const char *new);</pre>
12955 <h6>Description</h6>
12956 <p><!--para 2-->
12957  The rename function causes the file whose name is the string pointed to by old to be
12958  henceforth known by the name given by the string pointed to by new. The file named
12959  old is no longer accessible by that name. If a file named by the string pointed to by new
12960  exists prior to the call to the rename function, the behavior is implementation-defined.
12961 <!--page 281 indent 4-->
12962 <h6>Returns</h6>
12963 <p><!--para 3-->
12964  The rename function returns zero if the operation succeeds, nonzero if it fails,<sup><a href="#note235"><b>235)</b></a></sup> in
12965  which case if the file existed previously it is still known by its original name.
12966
12967 <h6>footnotes</h6>
12968 <p><a name="note235">235)</a> Among the reasons the implementation may cause the rename function to fail are that the file is open
12969  or that it is necessary to copy its contents to effectuate its renaming.
12970
12971
12972 <a name="7.19.4.3" href="#7.19.4.3"><h5>7.19.4.3 The tmpfile function</h5></a>
12973 <h6>Synopsis</h6>
12974 <p><!--para 1-->
12975 <pre>
12976          #include <a href="#7.19">&lt;stdio.h&gt;</a>
12977          FILE *tmpfile(void);</pre>
12978 <h6>Description</h6>
12979 <p><!--para 2-->
12980  The tmpfile function creates a temporary binary file that is different from any other
12981  existing file and that will automatically be removed when it is closed or at program
12982  termination. If the program terminates abnormally, whether an open temporary file is
12983  removed is implementation-defined. The file is opened for update with "wb+" mode.
12984  Recommended practice
12985 <p><!--para 3-->
12986  It should be possible to open at least TMP_MAX temporary files during the lifetime of the
12987  program (this limit may be shared with tmpnam) and there should be no limit on the
12988  number simultaneously open other than this limit and any limit on the number of open
12989  files (FOPEN_MAX).
12990 <h6>Returns</h6>
12991 <p><!--para 4-->
12992  The tmpfile function returns a pointer to the stream of the file that it created. If the file
12993  cannot be created, the tmpfile function returns a null pointer.
12994 <p><b> Forward references</b>: the fopen function (<a href="#7.19.5.3">7.19.5.3</a>).
12995
12996 <a name="7.19.4.4" href="#7.19.4.4"><h5>7.19.4.4 The tmpnam function</h5></a>
12997 <h6>Synopsis</h6>
12998 <p><!--para 1-->
12999 <pre>
13000          #include <a href="#7.19">&lt;stdio.h&gt;</a>
13001          char *tmpnam(char *s);</pre>
13002 <h6>Description</h6>
13003 <p><!--para 2-->
13004  The tmpnam function generates a string that is a valid file name and that is not the same
13005  as the name of an existing file.<sup><a href="#note236"><b>236)</b></a></sup> The function is potentially capable of generating
13006  
13007  
13008 <!--page 282 indent 4-->
13009  TMP_MAX different strings, but any or all of them may already be in use by existing files
13010  and thus not be suitable return values.
13011 <p><!--para 3-->
13012  The tmpnam function generates a different string each time it is called.
13013 <p><!--para 4-->
13014  The implementation shall behave as if no library function calls the tmpnam function.
13015 <h6>Returns</h6>
13016 <p><!--para 5-->
13017  If no suitable string can be generated, the tmpnam function returns a null pointer.
13018  Otherwise, if the argument is a null pointer, the tmpnam function leaves its result in an
13019  internal static object and returns a pointer to that object (subsequent calls to the tmpnam
13020  function may modify the same object). If the argument is not a null pointer, it is assumed
13021  to point to an array of at least L_tmpnam chars; the tmpnam function writes its result
13022  in that array and returns the argument as its value.
13023  Environmental limits
13024 <p><!--para 6-->
13025  The value of the macro TMP_MAX shall be at least 25.
13026
13027 <h6>footnotes</h6>
13028 <p><a name="note236">236)</a> Files created using strings generated by the tmpnam function are temporary only in the sense that
13029  their names should not collide with those generated by conventional naming rules for the
13030  implementation. It is still necessary to use the remove function to remove such files when their use
13031  is ended, and before program termination.
13032
13033
13034 <a name="7.19.5" href="#7.19.5"><h4>7.19.5 File access functions</h4></a>
13035
13036 <a name="7.19.5.1" href="#7.19.5.1"><h5>7.19.5.1 The fclose function</h5></a>
13037 <h6>Synopsis</h6>
13038 <p><!--para 1-->
13039 <pre>
13040         #include <a href="#7.19">&lt;stdio.h&gt;</a>
13041         int fclose(FILE *stream);</pre>
13042 <h6>Description</h6>
13043 <p><!--para 2-->
13044  A successful call to the fclose function causes the stream pointed to by stream to be
13045  flushed and the associated file to be closed. Any unwritten buffered data for the stream
13046  are delivered to the host environment to be written to the file; any unread buffered data
13047  are discarded. Whether or not the call succeeds, the stream is disassociated from the file
13048  and any buffer set by the setbuf or setvbuf function is disassociated from the stream
13049  (and deallocated if it was automatically allocated).
13050 <h6>Returns</h6>
13051 <p><!--para 3-->
13052  The fclose function returns zero if the stream was successfully closed, or EOF if any
13053  errors were detected.
13054
13055 <a name="7.19.5.2" href="#7.19.5.2"><h5>7.19.5.2 The fflush function</h5></a>
13056 <h6>Synopsis</h6>
13057 <p><!--para 1-->
13058 <!--page 283 indent 4-->
13059 <pre>
13060         #include <a href="#7.19">&lt;stdio.h&gt;</a>
13061         int fflush(FILE *stream);</pre>
13062 <h6>Description</h6>
13063 <p><!--para 2-->
13064  If stream points to an output stream or an update stream in which the most recent
13065  operation was not input, the fflush function causes any unwritten data for that stream
13066  to be delivered to the host environment to be written to the file; otherwise, the behavior is
13067  undefined.
13068 <p><!--para 3-->
13069  If stream is a null pointer, the fflush function performs this flushing action on all
13070  streams for which the behavior is defined above.
13071 <h6>Returns</h6>
13072 <p><!--para 4-->
13073  The fflush function sets the error indicator for the stream and returns EOF if a write
13074  error occurs, otherwise it returns zero.
13075 <p><b> Forward references</b>: the fopen function (<a href="#7.19.5.3">7.19.5.3</a>).
13076
13077 <a name="7.19.5.3" href="#7.19.5.3"><h5>7.19.5.3 The fopen function</h5></a>
13078 <h6>Synopsis</h6>
13079 <p><!--para 1-->
13080 <pre>
13081          #include <a href="#7.19">&lt;stdio.h&gt;</a>
13082          FILE *fopen(const char * restrict filename,
13083               const char * restrict mode);</pre>
13084 <h6>Description</h6>
13085 <p><!--para 2-->
13086  The fopen function opens the file whose name is the string pointed to by filename,
13087  and associates a stream with it.
13088 <p><!--para 3-->
13089  The argument mode points to a string. If the string is one of the following, the file is
13090  open in the indicated mode. Otherwise, the behavior is undefined.<sup><a href="#note237"><b>237)</b></a></sup>
13091  r                open text file for reading
13092  w                truncate to zero length or create text file for writing
13093  a                append; open or create text file for writing at end-of-file
13094  rb               open binary file for reading
13095  wb               truncate to zero length or create binary file for writing
13096  ab               append; open or create binary file for writing at end-of-file
13097  r+               open text file for update (reading and writing)
13098  w+               truncate to zero length or create text file for update
13099  a+               append; open or create text file for update, writing at end-of-file
13100  
13101  
13102  
13103  
13104 <!--page 284 indent 4-->
13105  r+b or rb+ open binary file for update (reading and writing)
13106  w+b or wb+ truncate to zero length or create binary file for update
13107  a+b or ab+ append; open or create binary file for update, writing at end-of-file
13108 <p><!--para 4-->
13109  Opening a file with read mode ('r' as the first character in the mode argument) fails if
13110  the file does not exist or cannot be read.
13111 <p><!--para 5-->
13112  Opening a file with append mode ('a' as the first character in the mode argument)
13113  causes all subsequent writes to the file to be forced to the then current end-of-file,
13114  regardless of intervening calls to the fseek function. In some implementations, opening
13115  a binary file with append mode ('b' as the second or third character in the above list of
13116  mode argument values) may initially position the file position indicator for the stream
13117  beyond the last data written, because of null character padding.
13118 <p><!--para 6-->
13119  When a file is opened with update mode ('+' as the second or third character in the
13120  above list of mode argument values), both input and output may be performed on the
13121  associated stream. However, output shall not be directly followed by input without an
13122  intervening call to the fflush function or to a file positioning function (fseek,
13123  fsetpos, or rewind), and input shall not be directly followed by output without an
13124  intervening call to a file positioning function, unless the input operation encounters end-
13125  of-file. Opening (or creating) a text file with update mode may instead open (or create) a
13126  binary stream in some implementations.
13127 <p><!--para 7-->
13128  When opened, a stream is fully buffered if and only if it can be determined not to refer to
13129  an interactive device. The error and end-of-file indicators for the stream are cleared.
13130 <h6>Returns</h6>
13131 <p><!--para 8-->
13132  The fopen function returns a pointer to the object controlling the stream. If the open
13133  operation fails, fopen returns a null pointer.
13134 <p><b> Forward references</b>: file positioning functions (<a href="#7.19.9">7.19.9</a>).
13135
13136 <h6>footnotes</h6>
13137 <p><a name="note237">237)</a> If the string begins with one of the above sequences, the implementation might choose to ignore the
13138  remaining characters, or it might use them to select different kinds of a file (some of which might not
13139  conform to the properties in <a href="#7.19.2">7.19.2</a>).
13140
13141
13142 <a name="7.19.5.4" href="#7.19.5.4"><h5>7.19.5.4 The freopen function</h5></a>
13143 <h6>Synopsis</h6>
13144 <p><!--para 1-->
13145 <pre>
13146         #include <a href="#7.19">&lt;stdio.h&gt;</a>
13147         FILE *freopen(const char * restrict filename,
13148              const char * restrict mode,
13149              FILE * restrict stream);</pre>
13150 <h6>Description</h6>
13151 <p><!--para 2-->
13152  The freopen function opens the file whose name is the string pointed to by filename
13153  and associates the stream pointed to by stream with it. The mode argument is used just
13154 <!--page 285 indent 4-->
13155  as in the fopen function.<sup><a href="#note238"><b>238)</b></a></sup>
13156 <p><!--para 3-->
13157  If filename is a null pointer, the freopen function attempts to change the mode of
13158  the stream to that specified by mode, as if the name of the file currently associated with
13159  the stream had been used. It is implementation-defined which changes of mode are
13160  permitted (if any), and under what circumstances.
13161 <p><!--para 4-->
13162  The freopen function first attempts to close any file that is associated with the specified
13163  stream. Failure to close the file is ignored. The error and end-of-file indicators for the
13164  stream are cleared.
13165 <h6>Returns</h6>
13166 <p><!--para 5-->
13167  The freopen function returns a null pointer if the open operation fails. Otherwise,
13168  freopen returns the value of stream.
13169
13170 <h6>footnotes</h6>
13171 <p><a name="note238">238)</a> The primary use of the freopen function is to change the file associated with a standard text stream
13172  (stderr, stdin, or stdout), as those identifiers need not be modifiable lvalues to which the value
13173  returned by the fopen function may be assigned.
13174
13175
13176 <a name="7.19.5.5" href="#7.19.5.5"><h5>7.19.5.5 The setbuf function</h5></a>
13177 <h6>Synopsis</h6>
13178 <p><!--para 1-->
13179 <pre>
13180          #include <a href="#7.19">&lt;stdio.h&gt;</a>
13181          void setbuf(FILE * restrict stream,
13182               char * restrict buf);</pre>
13183 <h6>Description</h6>
13184 <p><!--para 2-->
13185  Except that it returns no value, the setbuf function is equivalent to the setvbuf
13186  function invoked with the values _IOFBF for mode and BUFSIZ for size, or (if buf
13187  is a null pointer), with the value _IONBF for mode.
13188 <h6>Returns</h6>
13189 <p><!--para 3-->
13190  The setbuf function returns no value.
13191 <p><b> Forward references</b>: the setvbuf function (<a href="#7.19.5.6">7.19.5.6</a>).
13192
13193 <a name="7.19.5.6" href="#7.19.5.6"><h5>7.19.5.6 The setvbuf function</h5></a>
13194 <h6>Synopsis</h6>
13195 <p><!--para 1-->
13196 <pre>
13197          #include <a href="#7.19">&lt;stdio.h&gt;</a>
13198          int setvbuf(FILE * restrict stream,
13199               char * restrict buf,
13200               int mode, size_t size);</pre>
13201  
13202  
13203  
13204  
13205 <!--page 286 indent 4-->
13206 <h6>Description</h6>
13207 <p><!--para 2-->
13208  The setvbuf function may be used only after the stream pointed to by stream has
13209  been associated with an open file and before any other operation (other than an
13210  unsuccessful call to setvbuf) is performed on the stream. The argument mode
13211  determines how stream will be buffered, as follows: _IOFBF causes input/output to be
13212  fully buffered; _IOLBF causes input/output to be line buffered; _IONBF causes
13213  input/output to be unbuffered. If buf is not a null pointer, the array it points to may be
13214  used instead of a buffer allocated by the setvbuf function<sup><a href="#note239"><b>239)</b></a></sup> and the argument size
13215  specifies the size of the array; otherwise, size may determine the size of a buffer
13216  allocated by the setvbuf function. The contents of the array at any time are
13217  indeterminate.
13218 <h6>Returns</h6>
13219 <p><!--para 3-->
13220  The setvbuf function returns zero on success, or nonzero if an invalid value is given
13221  for mode or if the request cannot be honored.
13222
13223 <h6>footnotes</h6>
13224 <p><a name="note239">239)</a> The buffer has to have a lifetime at least as great as the open stream, so the stream should be closed
13225  before a buffer that has automatic storage duration is deallocated upon block exit.
13226
13227
13228 <a name="7.19.6" href="#7.19.6"><h4>7.19.6 Formatted input/output functions</h4></a>
13229 <p><!--para 1-->
13230  The formatted input/output functions shall behave as if there is a sequence point after the
13231  actions associated with each specifier.<sup><a href="#note240"><b>240)</b></a></sup>
13232
13233 <h6>footnotes</h6>
13234 <p><a name="note240">240)</a> The fprintf functions perform writes to memory for the %n specifier.
13235
13236
13237 <a name="7.19.6.1" href="#7.19.6.1"><h5>7.19.6.1 The fprintf function</h5></a>
13238 <h6>Synopsis</h6>
13239 <p><!--para 1-->
13240 <pre>
13241          #include <a href="#7.19">&lt;stdio.h&gt;</a>
13242          int fprintf(FILE * restrict stream,
13243               const char * restrict format, ...);</pre>
13244 <h6>Description</h6>
13245 <p><!--para 2-->
13246  The fprintf function writes output to the stream pointed to by stream, under control
13247  of the string pointed to by format that specifies how subsequent arguments are
13248  converted for output. If there are insufficient arguments for the format, the behavior is
13249  undefined. If the format is exhausted while arguments remain, the excess arguments are
13250  evaluated (as always) but are otherwise ignored. The fprintf function returns when
13251  the end of the format string is encountered.
13252 <p><!--para 3-->
13253  The format shall be a multibyte character sequence, beginning and ending in its initial
13254  shift state. The format is composed of zero or more directives: ordinary multibyte
13255  characters (not %), which are copied unchanged to the output stream; and conversion
13256  
13257  
13258 <!--page 287 indent 4-->
13259  specifications, each of which results in fetching zero or more subsequent arguments,
13260  converting them, if applicable, according to the corresponding conversion specifier, and
13261  then writing the result to the output stream.
13262 <p><!--para 4-->
13263  Each conversion specification is introduced by the character %. After the %, the following
13264  appear in sequence:
13265 <ul>
13266 <li>  Zero or more flags (in any order) that modify the meaning of the conversion
13267  specification.
13268 <li>  An optional minimum field width. If the converted value has fewer characters than the
13269  field width, it is padded with spaces (by default) on the left (or right, if the left
13270  adjustment flag, described later, has been given) to the field width. The field width
13271  takes the form of an asterisk * (described later) or a nonnegative decimal integer.<sup><a href="#note241"><b>241)</b></a></sup>
13272 <li>  An optional precision that gives the minimum number of digits to appear for the d, i,
13273  o, u, x, and X conversions, the number of digits to appear after the decimal-point
13274  character for a, A, e, E, f, and F conversions, the maximum number of significant
13275  digits for the g and G conversions, or the maximum number of bytes to be written for
13276  s conversions. The precision takes the form of a period (.) followed either by an
13277  asterisk * (described later) or by an optional decimal integer; if only the period is
13278  specified, the precision is taken as zero. If a precision appears with any other
13279  conversion specifier, the behavior is undefined.
13280 <li>  An optional length modifier that specifies the size of the argument.
13281 <li>  A conversion specifier character that specifies the type of conversion to be applied.
13282 </ul>
13283 <p><!--para 5-->
13284  As noted above, a field width, or precision, or both, may be indicated by an asterisk. In
13285  this case, an int argument supplies the field width or precision. The arguments
13286  specifying field width, or precision, or both, shall appear (in that order) before the
13287  argument (if any) to be converted. A negative field width argument is taken as a - flag
13288  followed by a positive field width. A negative precision argument is taken as if the
13289  precision were omitted.
13290 <p><!--para 6-->
13291  The flag characters and their meanings are:
13292  -        The result of the conversion is left-justified within the field. (It is right-justified if
13293 <pre>
13294           this flag is not specified.)</pre>
13295  +        The result of a signed conversion always begins with a plus or minus sign. (It
13296 <pre>
13297           begins with a sign only when a negative value is converted if this flag is not</pre>
13298  
13299  
13300  
13301  
13302 <!--page 288 indent 4-->
13303 <pre>
13304            specified.)<sup><a href="#note242"><b>242)</b></a></sup></pre>
13305  space If the first character of a signed conversion is not a sign, or if a signed conversion
13306 <pre>
13307        results in no characters, a space is prefixed to the result. If the space and + flags
13308        both appear, the space flag is ignored.</pre>
13309  #         The result is converted to an ''alternative form''. For o conversion, it increases
13310 <pre>
13311            the precision, if and only if necessary, to force the first digit of the result to be a
13312            zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
13313            conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,
13314            and G conversions, the result of converting a floating-point number always
13315            contains a decimal-point character, even if no digits follow it. (Normally, a
13316            decimal-point character appears in the result of these conversions only if a digit
13317            follows it.) For g and G conversions, trailing zeros are not removed from the
13318            result. For other conversions, the behavior is undefined.</pre>
13319  0         For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros
13320 <p><!--para 7-->
13321 <pre>
13322            (following any indication of sign or base) are used to pad to the field width rather
13323            than performing space padding, except when converting an infinity or NaN. If the
13324            0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X
13325            conversions, if a precision is specified, the 0 flag is ignored. For other
13326            conversions, the behavior is undefined.</pre>
13327  The length modifiers and their meanings are:
13328  hh             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
13329 <pre>
13330                 signed char or unsigned char argument (the argument will have
13331                 been promoted according to the integer promotions, but its value shall be
13332                 converted to signed char or unsigned char before printing); or that
13333                 a following n conversion specifier applies to a pointer to a signed char
13334                 argument.</pre>
13335  h              Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
13336 <pre>
13337                 short int or unsigned short int argument (the argument will
13338                 have been promoted according to the integer promotions, but its value shall
13339                 be converted to short int or unsigned short int before printing);
13340                 or that a following n conversion specifier applies to a pointer to a short
13341                 int argument.</pre>
13342  l (ell)        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
13343 <pre>
13344                 long int or unsigned long int argument; that a following n
13345                 conversion specifier applies to a pointer to a long int argument; that a</pre>
13346  
13347 <!--page 289 indent 4-->
13348 <pre>
13349               following c conversion specifier applies to a wint_t argument; that a
13350               following s conversion specifier applies to a pointer to a wchar_t
13351               argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
13352               specifier.</pre>
13353  ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
13354 <pre>
13355               long long int or unsigned long long int argument; or that a
13356               following n conversion specifier applies to a pointer to a long long int
13357               argument.</pre>
13358  j            Specifies that a following d, i, o, u, x, or X conversion specifier applies to
13359 <pre>
13360               an intmax_t or uintmax_t argument; or that a following n conversion
13361               specifier applies to a pointer to an intmax_t argument.</pre>
13362  z            Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
13363 <pre>
13364               size_t or the corresponding signed integer type argument; or that a
13365               following n conversion specifier applies to a pointer to a signed integer type
13366               corresponding to size_t argument.</pre>
13367  t            Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
13368 <pre>
13369               ptrdiff_t or the corresponding unsigned integer type argument; or that a
13370               following n conversion specifier applies to a pointer to a ptrdiff_t
13371               argument.</pre>
13372  L            Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
13373 <pre>
13374               applies to a long double argument.</pre>
13375  If a length modifier appears with any conversion specifier other than as specified above,
13376  the behavior is undefined.
13377 <p><!--para 8-->
13378  The conversion specifiers and their meanings are:
13379  d,i         The int argument is converted to signed decimal in the style [-]dddd. The
13380 <pre>
13381              precision specifies the minimum number of digits to appear; if the value
13382              being converted can be represented in fewer digits, it is expanded with
13383              leading zeros. The default precision is 1. The result of converting a zero
13384              value with a precision of zero is no characters.</pre>
13385  o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned
13386 <!--page 290 indent 0-->
13387 <pre>
13388          decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the
13389          letters abcdef are used for x conversion and the letters ABCDEF for X
13390          conversion. The precision specifies the minimum number of digits to appear;
13391          if the value being converted can be represented in fewer digits, it is expanded
13392          with leading zeros. The default precision is 1. The result of converting a
13393          zero value with a precision of zero is no characters.</pre>
13394  f,F          A double argument representing a floating-point number is converted to
13395 <pre>
13396               decimal notation in the style [-]ddd.ddd, where the number of digits after
13397               the decimal-point character is equal to the precision specification. If the
13398               precision is missing, it is taken as 6; if the precision is zero and the # flag is
13399               not specified, no decimal-point character appears. If a decimal-point
13400               character appears, at least one digit appears before it. The value is rounded to
13401               the appropriate number of digits.
13402               A double argument representing an infinity is converted in one of the styles
13403               [-]inf or [-]infinity -- which style is implementation-defined. A
13404               double argument representing a NaN is converted in one of the styles
13405               [-]nan or [-]nan(n-char-sequence) -- which style, and the meaning of
13406               any n-char-sequence, is implementation-defined. The F conversion specifier
13407               produces INF, INFINITY, or NAN instead of inf, infinity, or nan,
13408               respectively.<sup><a href="#note243"><b>243)</b></a></sup></pre>
13409  e,E          A double argument representing a floating-point number is converted in the
13410 <pre>
13411               style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
13412               argument is nonzero) before the decimal-point character and the number of
13413               digits after it is equal to the precision; if the precision is missing, it is taken as
13414               6; if the precision is zero and the # flag is not specified, no decimal-point
13415               character appears. The value is rounded to the appropriate number of digits.
13416               The E conversion specifier produces a number with E instead of e
13417               introducing the exponent. The exponent always contains at least two digits,
13418               and only as many more digits as necessary to represent the exponent. If the
13419               value is zero, the exponent is zero.
13420               A double argument representing an infinity or NaN is converted in the style
13421               of an f or F conversion specifier.</pre>
13422  g,G          A double argument representing a floating-point number is converted in
13423 <pre>
13424               style f or e (or in style F or E in the case of a G conversion specifier),
13425               depending on the value converted and the precision. Let P equal the
13426               precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero.
13427               Then, if a conversion with style E would have an exponent of X :
13428               -- if P &gt; X &gt;= -4, the conversion is with style f (or F) and precision
13429                 P - (X + 1).
13430               -- otherwise, the conversion is with style e (or E) and precision P - 1.
13431               Finally, unless the # flag is used, any trailing zeros are removed from the</pre>
13432  
13433 <!--page 291 indent 0-->
13434 <pre>
13435                fractional portion of the result and the decimal-point character is removed if
13436                there is no fractional portion remaining.
13437                A double argument representing an infinity or NaN is converted in the style
13438                of an f or F conversion specifier.</pre>
13439  a,A           A double argument representing a floating-point number is converted in the
13440 <pre>
13441                style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
13442                nonzero if the argument is a normalized floating-point number and is
13443                otherwise unspecified) before the decimal-point character<sup><a href="#note244"><b>244)</b></a></sup> and the number
13444                of hexadecimal digits after it is equal to the precision; if the precision is
13445                missing and FLT_RADIX is a power of 2, then the precision is sufficient for
13446                an exact representation of the value; if the precision is missing and
13447                FLT_RADIX is not a power of 2, then the precision is sufficient to
13448                distinguish<sup><a href="#note245"><b>245)</b></a></sup> values of type double, except that trailing zeros may be
13449                omitted; if the precision is zero and the # flag is not specified, no decimal-
13450                point character appears. The letters abcdef are used for a conversion and
13451                the letters ABCDEF for A conversion. The A conversion specifier produces a
13452                number with X and P instead of x and p. The exponent always contains at
13453                least one digit, and only as many more digits as necessary to represent the
13454                decimal exponent of 2. If the value is zero, the exponent is zero.
13455                A double argument representing an infinity or NaN is converted in the style
13456                of an f or F conversion specifier.</pre>
13457  c             If no l length modifier is present, the int argument is converted to an
13458 <pre>
13459                unsigned char, and the resulting character is written.
13460                If an l length modifier is present, the wint_t argument is converted as if by
13461                an ls conversion specification with no precision and an argument that points
13462                to the initial element of a two-element array of wchar_t, the first element
13463                containing the wint_t argument to the lc conversion specification and the
13464                second a null wide character.</pre>
13465  s             If no l length modifier is present, the argument shall be a pointer to the initial
13466 <pre>
13467                element of an array of character type.<sup><a href="#note246"><b>246)</b></a></sup> Characters from the array are</pre>
13468  
13469  
13470 <!--page 292 indent 5-->
13471 <pre>
13472                 written up to (but not including) the terminating null character. If the
13473                 precision is specified, no more than that many bytes are written. If the
13474                 precision is not specified or is greater than the size of the array, the array shall
13475                 contain a null character.
13476                 If an l length modifier is present, the argument shall be a pointer to the initial
13477                 element of an array of wchar_t type. Wide characters from the array are
13478                 converted to multibyte characters (each as if by a call to the wcrtomb
13479                 function, with the conversion state described by an mbstate_t object
13480                 initialized to zero before the first wide character is converted) up to and
13481                 including a terminating null wide character. The resulting multibyte
13482                 characters are written up to (but not including) the terminating null character
13483                 (byte). If no precision is specified, the array shall contain a null wide
13484                 character. If a precision is specified, no more than that many bytes are
13485                 written (including shift sequences, if any), and the array shall contain a null
13486                 wide character if, to equal the multibyte character sequence length given by
13487                 the precision, the function would need to access a wide character one past the
13488                 end of the array. In no case is a partial multibyte character written.<sup><a href="#note247"><b>247)</b></a></sup></pre>
13489  p              The argument shall be a pointer to void. The value of the pointer is
13490 <pre>
13491                 converted to a sequence of printing characters, in an implementation-defined
13492                 manner.</pre>
13493  n              The argument shall be a pointer to signed integer into which is written the
13494 <pre>
13495                 number of characters written to the output stream so far by this call to
13496                 fprintf. No argument is converted, but one is consumed. If the conversion
13497                 specification includes any flags, a field width, or a precision, the behavior is
13498                 undefined.</pre>
13499  %              A % character is written. No argument is converted. The complete
13500 <p><!--para 9-->
13501 <pre>
13502                 conversion specification shall be %%.</pre>
13503  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note248"><b>248)</b></a></sup> If any argument is
13504  not the correct type for the corresponding conversion specification, the behavior is
13505  undefined.
13506 <p><!--para 10-->
13507  In no case does a nonexistent or small field width cause truncation of a field; if the result
13508  of a conversion is wider than the field width, the field is expanded to contain the
13509  conversion result.
13510  
13511  
13512  
13513  
13514 <!--page 293 indent 5-->
13515 <p><!--para 11-->
13516  For a and A conversions, if FLT_RADIX is a power of 2, the value is correctly rounded
13517  to a hexadecimal floating number with the given precision.
13518  Recommended practice
13519 <p><!--para 12-->
13520  For a and A conversions, if FLT_RADIX is not a power of 2 and the result is not exactly
13521  representable in the given precision, the result should be one of the two adjacent numbers
13522  in hexadecimal floating style with the given precision, with the extra stipulation that the
13523  error should have a correct sign for the current rounding direction.
13524 <p><!--para 13-->
13525  For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
13526  DECIMAL_DIG, then the result should be correctly rounded.<sup><a href="#note249"><b>249)</b></a></sup> If the number of
13527  significant decimal digits is more than DECIMAL_DIG but the source value is exactly
13528  representable with DECIMAL_DIG digits, then the result should be an exact
13529  representation with trailing zeros. Otherwise, the source value is bounded by two
13530  adjacent decimal strings L &lt; U, both having DECIMAL_DIG significant digits; the value
13531  of the resultant decimal string D should satisfy L &lt;= D &lt;= U, with the extra stipulation that
13532  the error should have a correct sign for the current rounding direction.
13533 <h6>Returns</h6>
13534 <p><!--para 14-->
13535  The fprintf function returns the number of characters transmitted, or a negative value
13536  if an output or encoding error occurred.
13537  Environmental limits
13538 <p><!--para 15-->
13539  The number of characters that can be produced by any single conversion shall be at least
13540  4095.
13541 <p><!--para 16-->
13542  EXAMPLE 1 To print a date and time in the form ''Sunday, July 3, 10:02'' followed by pi to five decimal
13543  places:
13544 <pre>
13545          #include <a href="#7.12">&lt;math.h&gt;</a>
13546          #include <a href="#7.19">&lt;stdio.h&gt;</a>
13547          /* ... */
13548          char *weekday, *month;      // pointers to strings
13549          int day, hour, min;
13550          fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
13551                  weekday, month, day, hour, min);
13552          fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));</pre>
13553  
13554 <p><!--para 17-->
13555  EXAMPLE 2 In this example, multibyte characters do not have a state-dependent encoding, and the
13556  members of the extended character set that consist of more than one byte each consist of exactly two bytes,
13557  the first of which is denoted here by a and the second by an uppercase letter.
13558  
13559  
13560  
13561  
13562 <!--page 294 indent 5-->
13563 <p><!--para 18-->
13564  Given the following wide string with length seven,
13565 <pre>
13566           static wchar_t wstr[] = L" X Yabc Z W";</pre>
13567  the seven calls
13568 <pre>
13569           fprintf(stdout,          "|1234567890123|\n");
13570           fprintf(stdout,          "|%13ls|\n", wstr);
13571           fprintf(stdout,          "|%-13.9ls|\n", wstr);
13572           fprintf(stdout,          "|%13.10ls|\n", wstr);
13573           fprintf(stdout,          "|%13.11ls|\n", wstr);
13574           fprintf(stdout,          "|%13.15ls|\n", &amp;wstr[2]);
13575           fprintf(stdout,          "|%13lc|\n", (wint_t) wstr[5]);</pre>
13576  will print the following seven lines:
13577 <pre>
13578           |1234567890123|
13579           |   X Yabc Z W|
13580           | X Yabc Z    |
13581           |     X Yabc Z|
13582           |   X Yabc Z W|
13583           |      abc Z W|
13584           |            Z|</pre>
13585  
13586 <p><b> Forward references</b>: conversion state (<a href="#7.24.6">7.24.6</a>), the wcrtomb function (<a href="#7.24.6.3.3">7.24.6.3.3</a>).
13587
13588 <h6>footnotes</h6>
13589 <p><a name="note241">241)</a> Note that 0 is taken as a flag, not as the beginning of a field width.
13590
13591 <p><a name="note242">242)</a> The results of all floating conversions of a negative zero, and of negative values that round to zero,
13592  include a minus sign.
13593
13594 <p><a name="note243">243)</a> When applied to infinite and NaN values, the -, +, and space flag characters have their usual meaning;
13595  the # and 0 flag characters have no effect.
13596
13597 <p><a name="note244">244)</a> Binary implementations can choose the hexadecimal digit to the left of the decimal-point character so
13598  that subsequent digits align to nibble (4-bit) boundaries.
13599
13600 <p><a name="note245">245)</a> The precision p is sufficient to distinguish values of the source type if 16 p-1 &gt; b n where b is
13601  FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
13602  might suffice depending on the implementation's scheme for determining the digit to the left of the
13603  decimal-point character.
13604
13605 <p><a name="note246">246)</a> No special provisions are made for multibyte characters.
13606
13607 <p><a name="note247">247)</a> Redundant shift sequences may result if multibyte characters have a state-dependent encoding.
13608
13609 <p><a name="note248">248)</a> See ''future library directions'' (<a href="#7.26.9">7.26.9</a>).
13610
13611 <p><a name="note249">249)</a> For binary-to-decimal conversion, the result format's values are the numbers representable with the
13612  given format specifier. The number of significant digits is determined by the format specifier, and in
13613  the case of fixed-point conversion by the source value as well.
13614
13615
13616 <a name="7.19.6.2" href="#7.19.6.2"><h5>7.19.6.2 The fscanf function</h5></a>
13617 <h6>Synopsis</h6>
13618 <p><!--para 1-->
13619 <pre>
13620           #include <a href="#7.19">&lt;stdio.h&gt;</a>
13621           int fscanf(FILE * restrict stream,
13622                const char * restrict format, ...);</pre>
13623 <h6>Description</h6>
13624 <p><!--para 2-->
13625  The fscanf function reads input from the stream pointed to by stream, under control
13626  of the string pointed to by format that specifies the admissible input sequences and how
13627  they are to be converted for assignment, using subsequent arguments as pointers to the
13628  objects to receive the converted input. If there are insufficient arguments for the format,
13629  the behavior is undefined. If the format is exhausted while arguments remain, the excess
13630  arguments are evaluated (as always) but are otherwise ignored.
13631 <p><!--para 3-->
13632  The format shall be a multibyte character sequence, beginning and ending in its initial
13633  shift state. The format is composed of zero or more directives: one or more white-space
13634  characters, an ordinary multibyte character (neither % nor a white-space character), or a
13635  conversion specification. Each conversion specification is introduced by the character %.
13636  After the %, the following appear in sequence:
13637 <ul>
13638 <li>  An optional assignment-suppressing character *.
13639 <li>  An optional decimal integer greater than zero that specifies the maximum field width
13640  (in characters).
13641 <!--page 295 indent 5-->
13642 <li>  An optional length modifier that specifies the size of the receiving object.
13643 <li>  A conversion specifier character that specifies the type of conversion to be applied.
13644 </ul>
13645 <p><!--para 4-->
13646  The fscanf function executes each directive of the format in turn. If a directive fails, as
13647  detailed below, the function returns. Failures are described as input failures (due to the
13648  occurrence of an encoding error or the unavailability of input characters), or matching
13649  failures (due to inappropriate input).
13650 <p><!--para 5-->
13651  A directive composed of white-space character(s) is executed by reading input up to the
13652  first non-white-space character (which remains unread), or until no more characters can
13653  be read.
13654 <p><!--para 6-->
13655  A directive that is an ordinary multibyte character is executed by reading the next
13656  characters of the stream. If any of those characters differ from the ones composing the
13657  directive, the directive fails and the differing and subsequent characters remain unread.
13658  Similarly, if end-of-file, an encoding error, or a read error prevents a character from being
13659  read, the directive fails.
13660 <p><!--para 7-->
13661  A directive that is a conversion specification defines a set of matching input sequences, as
13662  described below for each specifier. A conversion specification is executed in the
13663  following steps:
13664 <p><!--para 8-->
13665  Input white-space characters (as specified by the isspace function) are skipped, unless
13666  the specification includes a [, c, or n specifier.<sup><a href="#note250"><b>250)</b></a></sup>
13667 <p><!--para 9-->
13668  An input item is read from the stream, unless the specification includes an n specifier. An
13669  input item is defined as the longest sequence of input characters which does not exceed
13670  any specified field width and which is, or is a prefix of, a matching input sequence.<sup><a href="#note251"><b>251)</b></a></sup>
13671  The first character, if any, after the input item remains unread. If the length of the input
13672  item is zero, the execution of the directive fails; this condition is a matching failure unless
13673  end-of-file, an encoding error, or a read error prevented input from the stream, in which
13674  case it is an input failure.
13675 <p><!--para 10-->
13676  Except in the case of a % specifier, the input item (or, in the case of a %n directive, the
13677  count of input characters) is converted to a type appropriate to the conversion specifier. If
13678  the input item is not a matching sequence, the execution of the directive fails: this
13679  condition is a matching failure. Unless assignment suppression was indicated by a *, the
13680  result of the conversion is placed in the object pointed to by the first argument following
13681  the format argument that has not already received a conversion result. If this object
13682  does not have an appropriate type, or if the result of the conversion cannot be represented
13683  
13684  
13685 <!--page 296 indent 5-->
13686  in the object, the behavior is undefined.
13687 <p><!--para 11-->
13688  The length modifiers and their meanings are:
13689  hh           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
13690 <pre>
13691               to an argument with type pointer to signed char or unsigned char.</pre>
13692  h            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
13693 <pre>
13694               to an argument with type pointer to short int or unsigned short
13695               int.</pre>
13696  l (ell)      Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
13697 <pre>
13698               to an argument with type pointer to long int or unsigned long
13699               int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to
13700               an argument with type pointer to double; or that a following c, s, or [
13701               conversion specifier applies to an argument with type pointer to wchar_t.</pre>
13702  ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
13703 <pre>
13704               to an argument with type pointer to long long int or unsigned
13705               long long int.</pre>
13706  j            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
13707 <pre>
13708               to an argument with type pointer to intmax_t or uintmax_t.</pre>
13709  z            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
13710 <pre>
13711               to an argument with type pointer to size_t or the corresponding signed
13712               integer type.</pre>
13713  t            Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
13714 <pre>
13715               to an argument with type pointer to ptrdiff_t or the corresponding
13716               unsigned integer type.</pre>
13717  L            Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
13718 <pre>
13719               applies to an argument with type pointer to long double.</pre>
13720  If a length modifier appears with any conversion specifier other than as specified above,
13721  the behavior is undefined.
13722 <p><!--para 12-->
13723  The conversion specifiers and their meanings are:
13724  d           Matches an optionally signed decimal integer, whose format is the same as
13725 <pre>
13726              expected for the subject sequence of the strtol function with the value 10
13727              for the base argument. The corresponding argument shall be a pointer to
13728              signed integer.</pre>
13729  i           Matches an optionally signed integer, whose format is the same as expected
13730 <!--page 297 indent 0-->
13731 <pre>
13732              for the subject sequence of the strtol function with the value 0 for the
13733              base argument. The corresponding argument shall be a pointer to signed
13734              integer.</pre>
13735  o             Matches an optionally signed octal integer, whose format is the same as
13736 <pre>
13737                expected for the subject sequence of the strtoul function with the value 8
13738                for the base argument. The corresponding argument shall be a pointer to
13739                unsigned integer.</pre>
13740  u             Matches an optionally signed decimal integer, whose format is the same as
13741 <pre>
13742                expected for the subject sequence of the strtoul function with the value 10
13743                for the base argument. The corresponding argument shall be a pointer to
13744                unsigned integer.</pre>
13745  x             Matches an optionally signed hexadecimal integer, whose format is the same
13746 <pre>
13747                as expected for the subject sequence of the strtoul function with the value
13748                16 for the base argument. The corresponding argument shall be a pointer to
13749                unsigned integer.</pre>
13750  a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
13751 <pre>
13752          format is the same as expected for the subject sequence of the strtod
13753          function. The corresponding argument shall be a pointer to floating.</pre>
13754  c             Matches a sequence of characters of exactly the number specified by the field
13755 <pre>
13756                width (1 if no field width is present in the directive).<sup><a href="#note252"><b>252)</b></a></sup>
13757                If no l length modifier is present, the corresponding argument shall be a
13758                pointer to the initial element of a character array large enough to accept the
13759                sequence. No null character is added.
13760                If an l length modifier is present, the input shall be a sequence of multibyte
13761                characters that begins in the initial shift state. Each multibyte character in the
13762                sequence is converted to a wide character as if by a call to the mbrtowc
13763                function, with the conversion state described by an mbstate_t object
13764                initialized to zero before the first multibyte character is converted. The
13765                corresponding argument shall be a pointer to the initial element of an array of
13766                wchar_t large enough to accept the resulting sequence of wide characters.
13767                No null wide character is added.</pre>
13768  s             Matches a sequence of non-white-space characters.252)
13769 <pre>
13770                If no l length modifier is present, the corresponding argument shall be a
13771                pointer to the initial element of a character array large enough to accept the
13772                sequence and a terminating null character, which will be added automatically.
13773                If an l length modifier is present, the input shall be a sequence of multibyte</pre>
13774  
13775  
13776 <!--page 298 indent 0-->
13777 <pre>
13778           characters that begins in the initial shift state. Each multibyte character is
13779           converted to a wide character as if by a call to the mbrtowc function, with
13780           the conversion state described by an mbstate_t object initialized to zero
13781           before the first multibyte character is converted. The corresponding argument
13782           shall be a pointer to the initial element of an array of wchar_t large enough
13783           to accept the sequence and the terminating null wide character, which will be
13784           added automatically.</pre>
13785  [        Matches a nonempty sequence of characters from a set of expected characters
13786 <pre>
13787           (the scanset).252)
13788           If no l length modifier is present, the corresponding argument shall be a
13789           pointer to the initial element of a character array large enough to accept the
13790           sequence and a terminating null character, which will be added automatically.
13791           If an l length modifier is present, the input shall be a sequence of multibyte
13792           characters that begins in the initial shift state. Each multibyte character is
13793           converted to a wide character as if by a call to the mbrtowc function, with
13794           the conversion state described by an mbstate_t object initialized to zero
13795           before the first multibyte character is converted. The corresponding argument
13796           shall be a pointer to the initial element of an array of wchar_t large enough
13797           to accept the sequence and the terminating null wide character, which will be
13798           added automatically.
13799           The conversion specifier includes all subsequent characters in the format
13800           string, up to and including the matching right bracket (]). The characters
13801           between the brackets (the scanlist) compose the scanset, unless the character
13802           after the left bracket is a circumflex (^), in which case the scanset contains all
13803           characters that do not appear in the scanlist between the circumflex and the
13804           right bracket. If the conversion specifier begins with [] or [^], the right
13805           bracket character is in the scanlist and the next following right bracket
13806           character is the matching right bracket that ends the specification; otherwise
13807           the first following right bracket character is the one that ends the
13808           specification. If a - character is in the scanlist and is not the first, nor the
13809           second where the first character is a ^, nor the last character, the behavior is
13810           implementation-defined.</pre>
13811  p        Matches an implementation-defined set of sequences, which should be the
13812 <!--page 299 indent 5-->
13813 <pre>
13814           same as the set of sequences that may be produced by the %p conversion of
13815           the fprintf function. The corresponding argument shall be a pointer to a
13816           pointer to void. The input item is converted to a pointer value in an
13817           implementation-defined manner. If the input item is a value converted earlier
13818           during the same program execution, the pointer that results shall compare
13819           equal to that value; otherwise the behavior of the %p conversion is undefined.</pre>
13820  n              No input is consumed. The corresponding argument shall be a pointer to
13821 <pre>
13822                 signed integer into which is to be written the number of characters read from
13823                 the input stream so far by this call to the fscanf function. Execution of a
13824                 %n directive does not increment the assignment count returned at the
13825                 completion of execution of the fscanf function. No argument is converted,
13826                 but one is consumed. If the conversion specification includes an assignment-
13827                 suppressing character or a field width, the behavior is undefined.</pre>
13828  %              Matches a single % character; no conversion or assignment occurs. The
13829 <p><!--para 13-->
13830 <pre>
13831                 complete conversion specification shall be %%.</pre>
13832  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note253"><b>253)</b></a></sup>
13833 <p><!--para 14-->
13834  The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
13835  respectively, a, e, f, g, and x.
13836 <p><!--para 15-->
13837  Trailing white space (including new-line characters) is left unread unless matched by a
13838  directive. The success of literal matches and suppressed assignments is not directly
13839  determinable other than via the %n directive.
13840 <h6>Returns</h6>
13841 <p><!--para 16-->
13842  The fscanf function returns the value of the macro EOF if an input failure occurs
13843  before any conversion. Otherwise, the function returns the number of input items
13844  assigned, which can be fewer than provided for, or even zero, in the event of an early
13845  matching failure.
13846 <p><!--para 17-->
13847  EXAMPLE 1        The call:
13848 <pre>
13849           #include <a href="#7.19">&lt;stdio.h&gt;</a>
13850           /* ... */
13851           int n, i; float x; char name[50];
13852           n = fscanf(stdin, "%d%f%s", &amp;i, &amp;x, name);</pre>
13853  with the input line:
13854 <pre>
13855           25 54.32E-1 thompson</pre>
13856  will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
13857  thompson\0.
13858  
13859 <p><!--para 18-->
13860  EXAMPLE 2        The call:
13861 <pre>
13862           #include <a href="#7.19">&lt;stdio.h&gt;</a>
13863           /* ... */
13864           int i; float x; char name[50];
13865           fscanf(stdin, "%2d%f%*d %[0123456789]", &amp;i, &amp;x, name);</pre>
13866  with input:
13867  
13868  
13869  
13870 <!--page 300 indent 5-->
13871 <pre>
13872           56789 0123 56a72</pre>
13873  will assign to i the value 56 and to x the value 789.0, will skip 0123, and will assign to name the
13874  sequence 56\0. The next character read from the input stream will be a.
13875  
13876 <p><!--para 19-->
13877  EXAMPLE 3         To accept repeatedly from stdin a quantity, a unit of measure, and an item name:
13878 <p><!--para 20-->
13879 <pre>
13880           #include <a href="#7.19">&lt;stdio.h&gt;</a>
13881           /* ... */
13882           int count; float quant; char units[21], item[21];
13883           do {
13884                   count = fscanf(stdin, "%f%20s of %20s", &amp;quant, units, item);
13885                   fscanf(stdin,"%*[^\n]");
13886           } while (!feof(stdin) &amp;&amp; !ferror(stdin));</pre>
13887  If the stdin stream contains the following lines:
13888 <pre>
13889           2 quarts of oil
13890           -12.8degrees Celsius
13891           lots of luck
13892           10.0LBS      of
13893           dirt
13894           100ergs of energy</pre>
13895  the execution of the above example will be analogous to the following assignments:
13896 <pre>
13897           quant     =    2; strcpy(units, "quarts"); strcpy(item, "oil");
13898           count     =    3;
13899           quant     =    -12.8; strcpy(units, "degrees");
13900           count     =    2; // "C" fails to match "o"
13901           count     =    0; // "l" fails to match "%f"
13902           quant     =    10.0; strcpy(units, "LBS"); strcpy(item, "dirt");
13903           count     =    3;
13904           count     =    0; // "100e" fails to match "%f"
13905           count     =    EOF;</pre>
13906  
13907 <p><!--para 21-->
13908  EXAMPLE 4         In:
13909 <pre>
13910           #include <a href="#7.19">&lt;stdio.h&gt;</a>
13911           /* ... */
13912           int d1, d2, n1, n2, i;
13913           i = sscanf("123", "%d%n%n%d", &amp;d1, &amp;n1, &amp;n2, &amp;d2);</pre>
13914  the value 123 is assigned to d1 and the value 3 to n1. Because %n can never get an input failure the value
13915  of 3 is also assigned to n2. The value of d2 is not affected. The value 1 is assigned to i.
13916  
13917 <p><!--para 22-->
13918  EXAMPLE 5 In these examples, multibyte characters do have a state-dependent encoding, and the
13919  members of the extended character set that consist of more than one byte each consist of exactly two bytes,
13920  the first of which is denoted here by a and the second by an uppercase letter, but are only recognized as
13921  such when in the alternate shift state. The shift sequences are denoted by (uparrow) and (downarrow), in which the first causes
13922  entry into the alternate shift state.
13923 <p><!--para 23-->
13924  After the call:
13925 <!--page 301 indent 5-->
13926 <pre>
13927            #include <a href="#7.19">&lt;stdio.h&gt;</a>
13928            /* ... */
13929            char str[50];
13930            fscanf(stdin, "a%s", str);</pre>
13931  with the input line:
13932 <pre>
13933            a(uparrow) X Y(downarrow) bc</pre>
13934  str will contain (uparrow) X Y(downarrow)\0 assuming that none of the bytes of the shift sequences (or of the multibyte
13935  characters, in the more general case) appears to be a single-byte white-space character.
13936 <p><!--para 24-->
13937  In contrast, after the call:
13938 <pre>
13939            #include <a href="#7.19">&lt;stdio.h&gt;</a>
13940            #include <a href="#7.17">&lt;stddef.h&gt;</a>
13941            /* ... */
13942            wchar_t wstr[50];
13943            fscanf(stdin, "a%ls", wstr);</pre>
13944  with the same input line, wstr will contain the two wide characters that correspond to X and Y and a
13945  terminating null wide character.
13946 <p><!--para 25-->
13947  However, the call:
13948 <pre>
13949            #include <a href="#7.19">&lt;stdio.h&gt;</a>
13950            #include <a href="#7.17">&lt;stddef.h&gt;</a>
13951            /* ... */
13952            wchar_t wstr[50];
13953            fscanf(stdin, "a(uparrow) X(downarrow)%ls", wstr);</pre>
13954  with the same input line will return zero due to a matching failure against the (downarrow) sequence in the format
13955  string.
13956 <p><!--para 26-->
13957  Assuming that the first byte of the multibyte character X is the same as the first byte of the multibyte
13958  character Y, after the call:
13959 <pre>
13960            #include <a href="#7.19">&lt;stdio.h&gt;</a>
13961            #include <a href="#7.17">&lt;stddef.h&gt;</a>
13962            /* ... */
13963            wchar_t wstr[50];
13964            fscanf(stdin, "a(uparrow) Y(downarrow)%ls", wstr);</pre>
13965  with the same input line, zero will again be returned, but stdin will be left with a partially consumed
13966  multibyte character.
13967  
13968 <p><b> Forward references</b>: the strtod, strtof, and strtold functions (<a href="#7.20.1.3">7.20.1.3</a>), the
13969  strtol, strtoll, strtoul, and strtoull functions (<a href="#7.20.1.4">7.20.1.4</a>), conversion state
13970  (<a href="#7.24.6">7.24.6</a>), the wcrtomb function (<a href="#7.24.6.3.3">7.24.6.3.3</a>).
13971 <!--page 302 indent 4-->
13972
13973 <h6>footnotes</h6>
13974 <p><a name="note250">250)</a> These white-space characters are not counted against a specified field width.
13975
13976 <p><a name="note251">251)</a> fscanf pushes back at most one input character onto the input stream. Therefore, some sequences
13977  that are acceptable to strtod, strtol, etc., are unacceptable to fscanf.
13978
13979 <p><a name="note252">252)</a> No special provisions are made for multibyte characters in the matching rules used by the c, s, and [
13980  conversion specifiers -- the extent of the input field is determined on a byte-by-byte basis. The
13981  resulting field is nevertheless a sequence of multibyte characters that begins in the initial shift state.
13982
13983 <p><a name="note253">253)</a> See ''future library directions'' (<a href="#7.26.9">7.26.9</a>).
13984
13985
13986 <a name="7.19.6.3" href="#7.19.6.3"><h5>7.19.6.3 The printf function</h5></a>
13987 <h6>Synopsis</h6>
13988 <p><!--para 1-->
13989 <pre>
13990         #include <a href="#7.19">&lt;stdio.h&gt;</a>
13991         int printf(const char * restrict format, ...);</pre>
13992 <h6>Description</h6>
13993 <p><!--para 2-->
13994  The printf function is equivalent to fprintf with the argument stdout interposed
13995  before the arguments to printf.
13996 <h6>Returns</h6>
13997 <p><!--para 3-->
13998  The printf function returns the number of characters transmitted, or a negative value if
13999  an output or encoding error occurred.
14000
14001 <a name="7.19.6.4" href="#7.19.6.4"><h5>7.19.6.4 The scanf function</h5></a>
14002 <h6>Synopsis</h6>
14003 <p><!--para 1-->
14004 <pre>
14005         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14006         int scanf(const char * restrict format, ...);</pre>
14007 <h6>Description</h6>
14008 <p><!--para 2-->
14009  The scanf function is equivalent to fscanf with the argument stdin interposed
14010  before the arguments to scanf.
14011 <h6>Returns</h6>
14012 <p><!--para 3-->
14013  The scanf function returns the value of the macro EOF if an input failure occurs before
14014  any conversion. Otherwise, the scanf function returns the number of input items
14015  assigned, which can be fewer than provided for, or even zero, in the event of an early
14016  matching failure.
14017
14018 <a name="7.19.6.5" href="#7.19.6.5"><h5>7.19.6.5 The snprintf function</h5></a>
14019 <h6>Synopsis</h6>
14020 <p><!--para 1-->
14021 <pre>
14022         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14023         int snprintf(char * restrict s, size_t n,
14024              const char * restrict format, ...);</pre>
14025 <h6>Description</h6>
14026 <p><!--para 2-->
14027  The snprintf function is equivalent to fprintf, except that the output is written into
14028  an array (specified by argument s) rather than to a stream. If n is zero, nothing is written,
14029  and s may be a null pointer. Otherwise, output characters beyond the n-1st are
14030  discarded rather than being written to the array, and a null character is written at the end
14031  of the characters actually written into the array. If copying takes place between objects
14032  that overlap, the behavior is undefined.
14033 <!--page 303 indent 4-->
14034 <h6>Returns</h6>
14035 <p><!--para 3-->
14036  The snprintf function returns the number of characters that would have been written
14037  had n been sufficiently large, not counting the terminating null character, or a negative
14038  value if an encoding error occurred. Thus, the null-terminated output has been
14039  completely written if and only if the returned value is nonnegative and less than n.
14040
14041 <a name="7.19.6.6" href="#7.19.6.6"><h5>7.19.6.6 The sprintf function</h5></a>
14042 <h6>Synopsis</h6>
14043 <p><!--para 1-->
14044 <pre>
14045         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14046         int sprintf(char * restrict s,
14047              const char * restrict format, ...);</pre>
14048 <h6>Description</h6>
14049 <p><!--para 2-->
14050  The sprintf function is equivalent to fprintf, except that the output is written into
14051  an array (specified by the argument s) rather than to a stream. A null character is written
14052  at the end of the characters written; it is not counted as part of the returned value. If
14053  copying takes place between objects that overlap, the behavior is undefined.
14054 <h6>Returns</h6>
14055 <p><!--para 3-->
14056  The sprintf function returns the number of characters written in the array, not
14057  counting the terminating null character, or a negative value if an encoding error occurred.
14058
14059 <a name="7.19.6.7" href="#7.19.6.7"><h5>7.19.6.7 The sscanf function</h5></a>
14060 <h6>Synopsis</h6>
14061 <p><!--para 1-->
14062 <pre>
14063         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14064         int sscanf(const char * restrict s,
14065              const char * restrict format, ...);</pre>
14066 <h6>Description</h6>
14067 <p><!--para 2-->
14068  The sscanf function is equivalent to fscanf, except that input is obtained from a
14069  string (specified by the argument s) rather than from a stream. Reaching the end of the
14070  string is equivalent to encountering end-of-file for the fscanf function. If copying
14071  takes place between objects that overlap, the behavior is undefined.
14072 <h6>Returns</h6>
14073 <p><!--para 3-->
14074  The sscanf function returns the value of the macro EOF if an input failure occurs
14075  before any conversion. Otherwise, the sscanf function returns the number of input
14076  items assigned, which can be fewer than provided for, or even zero, in the event of an
14077  early matching failure.
14078 <!--page 304 indent 4-->
14079
14080 <a name="7.19.6.8" href="#7.19.6.8"><h5>7.19.6.8 The vfprintf function</h5></a>
14081 <h6>Synopsis</h6>
14082 <p><!--para 1-->
14083 <pre>
14084         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14085         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14086         int vfprintf(FILE * restrict stream,
14087              const char * restrict format,
14088              va_list arg);</pre>
14089 <h6>Description</h6>
14090 <p><!--para 2-->
14091  The vfprintf function is equivalent to fprintf, with the variable argument list
14092  replaced by arg, which shall have been initialized by the va_start macro (and
14093  possibly subsequent va_arg calls). The vfprintf function does not invoke the
14094  va_end macro.<sup><a href="#note254"><b>254)</b></a></sup>
14095 <h6>Returns</h6>
14096 <p><!--para 3-->
14097  The vfprintf function returns the number of characters transmitted, or a negative
14098  value if an output or encoding error occurred.
14099 <p><!--para 4-->
14100  EXAMPLE       The following shows the use of the vfprintf function in a general error-reporting routine.
14101 <pre>
14102         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14103         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14104         void error(char *function_name, char *format, ...)
14105         {
14106               va_list args;
14107                  va_start(args, format);
14108                  // print out name of function causing error
14109                  fprintf(stderr, "ERROR in %s: ", function_name);
14110                  // print out remainder of message
14111                  vfprintf(stderr, format, args);
14112                  va_end(args);
14113         }</pre>
14114  
14115  
14116  
14117  
14118 <!--page 305 indent 4-->
14119
14120 <h6>footnotes</h6>
14121 <p><a name="note254">254)</a> As the functions vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf, and
14122  vsscanf invoke the va_arg macro, the value of arg after the return is indeterminate.
14123
14124
14125 <a name="7.19.6.9" href="#7.19.6.9"><h5>7.19.6.9 The vfscanf function</h5></a>
14126 <h6>Synopsis</h6>
14127 <p><!--para 1-->
14128 <pre>
14129         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14130         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14131         int vfscanf(FILE * restrict stream,
14132              const char * restrict format,
14133              va_list arg);</pre>
14134 <h6>Description</h6>
14135 <p><!--para 2-->
14136  The vfscanf function is equivalent to fscanf, with the variable argument list
14137  replaced by arg, which shall have been initialized by the va_start macro (and
14138  possibly subsequent va_arg calls). The vfscanf function does not invoke the
14139  va_end macro.254)
14140 <h6>Returns</h6>
14141 <p><!--para 3-->
14142  The vfscanf function returns the value of the macro EOF if an input failure occurs
14143  before any conversion. Otherwise, the vfscanf function returns the number of input
14144  items assigned, which can be fewer than provided for, or even zero, in the event of an
14145  early matching failure.
14146
14147 <a name="7.19.6.10" href="#7.19.6.10"><h5>7.19.6.10 The vprintf function</h5></a>
14148 <h6>Synopsis</h6>
14149 <p><!--para 1-->
14150 <pre>
14151         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14152         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14153         int vprintf(const char * restrict format,
14154              va_list arg);</pre>
14155 <h6>Description</h6>
14156 <p><!--para 2-->
14157  The vprintf function is equivalent to printf, with the variable argument list
14158  replaced by arg, which shall have been initialized by the va_start macro (and
14159  possibly subsequent va_arg calls). The vprintf function does not invoke the
14160  va_end macro.254)
14161 <h6>Returns</h6>
14162 <p><!--para 3-->
14163  The vprintf function returns the number of characters transmitted, or a negative value
14164  if an output or encoding error occurred.
14165 <!--page 306 indent 4-->
14166
14167 <a name="7.19.6.11" href="#7.19.6.11"><h5>7.19.6.11 The vscanf function</h5></a>
14168 <h6>Synopsis</h6>
14169 <p><!--para 1-->
14170 <pre>
14171         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14172         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14173         int vscanf(const char * restrict format,
14174              va_list arg);</pre>
14175 <h6>Description</h6>
14176 <p><!--para 2-->
14177  The vscanf function is equivalent to scanf, with the variable argument list replaced
14178  by arg, which shall have been initialized by the va_start macro (and possibly
14179  subsequent va_arg calls). The vscanf function does not invoke the va_end
14180  macro.254)
14181 <h6>Returns</h6>
14182 <p><!--para 3-->
14183  The vscanf function returns the value of the macro EOF if an input failure occurs
14184  before any conversion. Otherwise, the vscanf function returns the number of input
14185  items assigned, which can be fewer than provided for, or even zero, in the event of an
14186  early matching failure.
14187
14188 <a name="7.19.6.12" href="#7.19.6.12"><h5>7.19.6.12 The vsnprintf function</h5></a>
14189 <h6>Synopsis</h6>
14190 <p><!--para 1-->
14191 <pre>
14192         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14193         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14194         int vsnprintf(char * restrict s, size_t n,
14195              const char * restrict format,
14196              va_list arg);</pre>
14197 <h6>Description</h6>
14198 <p><!--para 2-->
14199  The vsnprintf function is equivalent to snprintf, with the variable argument list
14200  replaced by arg, which shall have been initialized by the va_start macro (and
14201  possibly subsequent va_arg calls). The vsnprintf function does not invoke the
14202  va_end macro.254) If copying takes place between objects that overlap, the behavior is
14203  undefined.
14204 <h6>Returns</h6>
14205 <p><!--para 3-->
14206  The vsnprintf function returns the number of characters that would have been written
14207  had n been sufficiently large, not counting the terminating null character, or a negative
14208  value if an encoding error occurred. Thus, the null-terminated output has been
14209  completely written if and only if the returned value is nonnegative and less than n.
14210 <!--page 307 indent 4-->
14211
14212 <a name="7.19.6.13" href="#7.19.6.13"><h5>7.19.6.13 The vsprintf function</h5></a>
14213 <h6>Synopsis</h6>
14214 <p><!--para 1-->
14215 <pre>
14216         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14217         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14218         int vsprintf(char * restrict s,
14219              const char * restrict format,
14220              va_list arg);</pre>
14221 <h6>Description</h6>
14222 <p><!--para 2-->
14223  The vsprintf function is equivalent to sprintf, with the variable argument list
14224  replaced by arg, which shall have been initialized by the va_start macro (and
14225  possibly subsequent va_arg calls). The vsprintf function does not invoke the
14226  va_end macro.254) If copying takes place between objects that overlap, the behavior is
14227  undefined.
14228 <h6>Returns</h6>
14229 <p><!--para 3-->
14230  The vsprintf function returns the number of characters written in the array, not
14231  counting the terminating null character, or a negative value if an encoding error occurred.
14232
14233 <a name="7.19.6.14" href="#7.19.6.14"><h5>7.19.6.14 The vsscanf function</h5></a>
14234 <h6>Synopsis</h6>
14235 <p><!--para 1-->
14236 <pre>
14237         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
14238         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14239         int vsscanf(const char * restrict s,
14240              const char * restrict format,
14241              va_list arg);</pre>
14242 <h6>Description</h6>
14243 <p><!--para 2-->
14244  The vsscanf function is equivalent to sscanf, with the variable argument list
14245  replaced by arg, which shall have been initialized by the va_start macro (and
14246  possibly subsequent va_arg calls). The vsscanf function does not invoke the
14247  va_end macro.254)
14248 <h6>Returns</h6>
14249 <p><!--para 3-->
14250  The vsscanf function returns the value of the macro EOF if an input failure occurs
14251  before any conversion. Otherwise, the vsscanf function returns the number of input
14252  items assigned, which can be fewer than provided for, or even zero, in the event of an
14253  early matching failure.
14254 <!--page 308 indent 4-->
14255
14256 <a name="7.19.7" href="#7.19.7"><h4>7.19.7 Character input/output functions</h4></a>
14257
14258 <a name="7.19.7.1" href="#7.19.7.1"><h5>7.19.7.1 The fgetc function</h5></a>
14259 <h6>Synopsis</h6>
14260 <p><!--para 1-->
14261 <pre>
14262          #include <a href="#7.19">&lt;stdio.h&gt;</a>
14263          int fgetc(FILE *stream);</pre>
14264 <h6>Description</h6>
14265 <p><!--para 2-->
14266  If the end-of-file indicator for the input stream pointed to by stream is not set and a
14267  next character is present, the fgetc function obtains that character as an unsigned
14268  char converted to an int and advances the associated file position indicator for the
14269  stream (if defined).
14270 <h6>Returns</h6>
14271 <p><!--para 3-->
14272  If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-
14273  of-file indicator for the stream is set and the fgetc function returns EOF. Otherwise, the
14274  fgetc function returns the next character from the input stream pointed to by stream.
14275  If a read error occurs, the error indicator for the stream is set and the fgetc function
14276  returns EOF.<sup><a href="#note255"><b>255)</b></a></sup>
14277
14278 <h6>footnotes</h6>
14279 <p><a name="note255">255)</a> An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
14280
14281
14282 <a name="7.19.7.2" href="#7.19.7.2"><h5>7.19.7.2 The fgets function</h5></a>
14283 <h6>Synopsis</h6>
14284 <p><!--para 1-->
14285 <pre>
14286          #include <a href="#7.19">&lt;stdio.h&gt;</a>
14287          char *fgets(char * restrict s, int n,
14288               FILE * restrict stream);</pre>
14289 <h6>Description</h6>
14290 <p><!--para 2-->
14291  The fgets function reads at most one less than the number of characters specified by n
14292  from the stream pointed to by stream into the array pointed to by s. No additional
14293  characters are read after a new-line character (which is retained) or after end-of-file. A
14294  null character is written immediately after the last character read into the array.
14295 <h6>Returns</h6>
14296 <p><!--para 3-->
14297  The fgets function returns s if successful. If end-of-file is encountered and no
14298  characters have been read into the array, the contents of the array remain unchanged and a
14299  null pointer is returned. If a read error occurs during the operation, the array contents are
14300  indeterminate and a null pointer is returned.
14301  
14302  
14303  
14304  
14305 <!--page 309 indent 4-->
14306
14307 <a name="7.19.7.3" href="#7.19.7.3"><h5>7.19.7.3 The fputc function</h5></a>
14308 <h6>Synopsis</h6>
14309 <p><!--para 1-->
14310 <pre>
14311         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14312         int fputc(int c, FILE *stream);</pre>
14313 <h6>Description</h6>
14314 <p><!--para 2-->
14315  The fputc function writes the character specified by c (converted to an unsigned
14316  char) to the output stream pointed to by stream, at the position indicated by the
14317  associated file position indicator for the stream (if defined), and advances the indicator
14318  appropriately. If the file cannot support positioning requests, or if the stream was opened
14319  with append mode, the character is appended to the output stream.
14320 <h6>Returns</h6>
14321 <p><!--para 3-->
14322  The fputc function returns the character written. If a write error occurs, the error
14323  indicator for the stream is set and fputc returns EOF.
14324
14325 <a name="7.19.7.4" href="#7.19.7.4"><h5>7.19.7.4 The fputs function</h5></a>
14326 <h6>Synopsis</h6>
14327 <p><!--para 1-->
14328 <pre>
14329         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14330         int fputs(const char * restrict s,
14331              FILE * restrict stream);</pre>
14332 <h6>Description</h6>
14333 <p><!--para 2-->
14334  The fputs function writes the string pointed to by s to the stream pointed to by
14335  stream. The terminating null character is not written.
14336 <h6>Returns</h6>
14337 <p><!--para 3-->
14338  The fputs function returns EOF if a write error occurs; otherwise it returns a
14339  nonnegative value.
14340
14341 <a name="7.19.7.5" href="#7.19.7.5"><h5>7.19.7.5 The getc function</h5></a>
14342 <h6>Synopsis</h6>
14343 <p><!--para 1-->
14344 <pre>
14345         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14346         int getc(FILE *stream);</pre>
14347 <h6>Description</h6>
14348 <p><!--para 2-->
14349  The getc function is equivalent to fgetc, except that if it is implemented as a macro, it
14350  may evaluate stream more than once, so the argument should never be an expression
14351  with side effects.
14352 <!--page 310 indent 4-->
14353 <h6>Returns</h6>
14354 <p><!--para 3-->
14355  The getc function returns the next character from the input stream pointed to by
14356  stream. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
14357  getc returns EOF. If a read error occurs, the error indicator for the stream is set and
14358  getc returns EOF.
14359
14360 <a name="7.19.7.6" href="#7.19.7.6"><h5>7.19.7.6 The getchar function</h5></a>
14361 <h6>Synopsis</h6>
14362 <p><!--para 1-->
14363 <pre>
14364         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14365         int getchar(void);</pre>
14366 <h6>Description</h6>
14367 <p><!--para 2-->
14368  The getchar function is equivalent to getc with the argument stdin.
14369 <h6>Returns</h6>
14370 <p><!--para 3-->
14371  The getchar function returns the next character from the input stream pointed to by
14372  stdin. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
14373  getchar returns EOF. If a read error occurs, the error indicator for the stream is set and
14374  getchar returns EOF.
14375
14376 <a name="7.19.7.7" href="#7.19.7.7"><h5>7.19.7.7 The gets function</h5></a>
14377 <h6>Synopsis</h6>
14378 <p><!--para 1-->
14379 <pre>
14380         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14381         char *gets(char *s);</pre>
14382 <h6>Description</h6>
14383 <p><!--para 2-->
14384  The gets function reads characters from the input stream pointed to by stdin, into the
14385  array pointed to by s, until end-of-file is encountered or a new-line character is read.
14386  Any new-line character is discarded, and a null character is written immediately after the
14387  last character read into the array.
14388 <h6>Returns</h6>
14389 <p><!--para 3-->
14390  The gets function returns s if successful. If end-of-file is encountered and no
14391  characters have been read into the array, the contents of the array remain unchanged and a
14392  null pointer is returned. If a read error occurs during the operation, the array contents are
14393  indeterminate and a null pointer is returned.
14394 <p><b> Forward references</b>: future library directions (<a href="#7.26.9">7.26.9</a>).
14395 <!--page 311 indent 4-->
14396
14397 <a name="7.19.7.8" href="#7.19.7.8"><h5>7.19.7.8 The putc function</h5></a>
14398 <h6>Synopsis</h6>
14399 <p><!--para 1-->
14400 <pre>
14401         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14402         int putc(int c, FILE *stream);</pre>
14403 <h6>Description</h6>
14404 <p><!--para 2-->
14405  The putc function is equivalent to fputc, except that if it is implemented as a macro, it
14406  may evaluate stream more than once, so that argument should never be an expression
14407  with side effects.
14408 <h6>Returns</h6>
14409 <p><!--para 3-->
14410  The putc function returns the character written. If a write error occurs, the error
14411  indicator for the stream is set and putc returns EOF.
14412
14413 <a name="7.19.7.9" href="#7.19.7.9"><h5>7.19.7.9 The putchar function</h5></a>
14414 <h6>Synopsis</h6>
14415 <p><!--para 1-->
14416 <pre>
14417         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14418         int putchar(int c);</pre>
14419 <h6>Description</h6>
14420 <p><!--para 2-->
14421  The putchar function is equivalent to putc with the second argument stdout.
14422 <h6>Returns</h6>
14423 <p><!--para 3-->
14424  The putchar function returns the character written. If a write error occurs, the error
14425  indicator for the stream is set and putchar returns EOF.
14426
14427 <a name="7.19.7.10" href="#7.19.7.10"><h5>7.19.7.10 The puts function</h5></a>
14428 <h6>Synopsis</h6>
14429 <p><!--para 1-->
14430 <pre>
14431         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14432         int puts(const char *s);</pre>
14433 <h6>Description</h6>
14434 <p><!--para 2-->
14435  The puts function writes the string pointed to by s to the stream pointed to by stdout,
14436  and appends a new-line character to the output. The terminating null character is not
14437  written.
14438 <h6>Returns</h6>
14439 <p><!--para 3-->
14440  The puts function returns EOF if a write error occurs; otherwise it returns a nonnegative
14441  value.
14442 <!--page 312 indent 4-->
14443
14444 <a name="7.19.7.11" href="#7.19.7.11"><h5>7.19.7.11 The ungetc function</h5></a>
14445 <h6>Synopsis</h6>
14446 <p><!--para 1-->
14447 <pre>
14448           #include <a href="#7.19">&lt;stdio.h&gt;</a>
14449           int ungetc(int c, FILE *stream);</pre>
14450 <h6>Description</h6>
14451 <p><!--para 2-->
14452  The ungetc function pushes the character specified by c (converted to an unsigned
14453  char) back onto the input stream pointed to by stream. Pushed-back characters will be
14454  returned by subsequent reads on that stream in the reverse order of their pushing. A
14455  successful intervening call (with the stream pointed to by stream) to a file positioning
14456  function (fseek, fsetpos, or rewind) discards any pushed-back characters for the
14457  stream. The external storage corresponding to the stream is unchanged.
14458 <p><!--para 3-->
14459  One character of pushback is guaranteed. If the ungetc function is called too many
14460  times on the same stream without an intervening read or file positioning operation on that
14461  stream, the operation may fail.
14462 <p><!--para 4-->
14463  If the value of c equals that of the macro EOF, the operation fails and the input stream is
14464  unchanged.
14465 <p><!--para 5-->
14466  A successful call to the ungetc function clears the end-of-file indicator for the stream.
14467  The value of the file position indicator for the stream after reading or discarding all
14468  pushed-back characters shall be the same as it was before the characters were pushed
14469  back. For a text stream, the value of its file position indicator after a successful call to the
14470  ungetc function is unspecified until all pushed-back characters are read or discarded.
14471  For a binary stream, its file position indicator is decremented by each successful call to
14472  the ungetc function; if its value was zero before a call, it is indeterminate after the
14473  call.<sup><a href="#note256"><b>256)</b></a></sup>
14474 <h6>Returns</h6>
14475 <p><!--para 6-->
14476  The ungetc function returns the character pushed back after conversion, or EOF if the
14477  operation fails.
14478 <p><b> Forward references</b>: file positioning functions (<a href="#7.19.9">7.19.9</a>).
14479  
14480  
14481  
14482  
14483 <!--page 313 indent 4-->
14484
14485 <h6>footnotes</h6>
14486 <p><a name="note256">256)</a> See ''future library directions'' (<a href="#7.26.9">7.26.9</a>).
14487
14488
14489 <a name="7.19.8" href="#7.19.8"><h4>7.19.8 Direct input/output functions</h4></a>
14490
14491 <a name="7.19.8.1" href="#7.19.8.1"><h5>7.19.8.1 The fread function</h5></a>
14492 <h6>Synopsis</h6>
14493 <p><!--para 1-->
14494 <pre>
14495         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14496         size_t fread(void * restrict ptr,
14497              size_t size, size_t nmemb,
14498              FILE * restrict stream);</pre>
14499 <h6>Description</h6>
14500 <p><!--para 2-->
14501  The fread function reads, into the array pointed to by ptr, up to nmemb elements
14502  whose size is specified by size, from the stream pointed to by stream. For each
14503  object, size calls are made to the fgetc function and the results stored, in the order
14504  read, in an array of unsigned char exactly overlaying the object. The file position
14505  indicator for the stream (if defined) is advanced by the number of characters successfully
14506  read. If an error occurs, the resulting value of the file position indicator for the stream is
14507  indeterminate. If a partial element is read, its value is indeterminate.
14508 <h6>Returns</h6>
14509 <p><!--para 3-->
14510  The fread function returns the number of elements successfully read, which may be
14511  less than nmemb if a read error or end-of-file is encountered. If size or nmemb is zero,
14512  fread returns zero and the contents of the array and the state of the stream remain
14513  unchanged.
14514
14515 <a name="7.19.8.2" href="#7.19.8.2"><h5>7.19.8.2 The fwrite function</h5></a>
14516 <h6>Synopsis</h6>
14517 <p><!--para 1-->
14518 <pre>
14519         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14520         size_t fwrite(const void * restrict ptr,
14521              size_t size, size_t nmemb,
14522              FILE * restrict stream);</pre>
14523 <h6>Description</h6>
14524 <p><!--para 2-->
14525  The fwrite function writes, from the array pointed to by ptr, up to nmemb elements
14526  whose size is specified by size, to the stream pointed to by stream. For each object,
14527  size calls are made to the fputc function, taking the values (in order) from an array of
14528  unsigned char exactly overlaying the object. The file position indicator for the
14529  stream (if defined) is advanced by the number of characters successfully written. If an
14530  error occurs, the resulting value of the file position indicator for the stream is
14531  indeterminate.
14532 <!--page 314 indent 4-->
14533 <h6>Returns</h6>
14534 <p><!--para 3-->
14535  The fwrite function returns the number of elements successfully written, which will be
14536  less than nmemb only if a write error is encountered. If size or nmemb is zero,
14537  fwrite returns zero and the state of the stream remains unchanged.
14538
14539 <a name="7.19.9" href="#7.19.9"><h4>7.19.9 File positioning functions</h4></a>
14540
14541 <a name="7.19.9.1" href="#7.19.9.1"><h5>7.19.9.1 The fgetpos function</h5></a>
14542 <h6>Synopsis</h6>
14543 <p><!--para 1-->
14544 <pre>
14545         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14546         int fgetpos(FILE * restrict stream,
14547              fpos_t * restrict pos);</pre>
14548 <h6>Description</h6>
14549 <p><!--para 2-->
14550  The fgetpos function stores the current values of the parse state (if any) and file
14551  position indicator for the stream pointed to by stream in the object pointed to by pos.
14552  The values stored contain unspecified information usable by the fsetpos function for
14553  repositioning the stream to its position at the time of the call to the fgetpos function.
14554 <h6>Returns</h6>
14555 <p><!--para 3-->
14556  If successful, the fgetpos function returns zero; on failure, the fgetpos function
14557  returns nonzero and stores an implementation-defined positive value in errno.
14558 <p><b> Forward references</b>: the fsetpos function (<a href="#7.19.9.3">7.19.9.3</a>).
14559
14560 <a name="7.19.9.2" href="#7.19.9.2"><h5>7.19.9.2 The fseek function</h5></a>
14561 <h6>Synopsis</h6>
14562 <p><!--para 1-->
14563 <pre>
14564         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14565         int fseek(FILE *stream, long int offset, int whence);</pre>
14566 <h6>Description</h6>
14567 <p><!--para 2-->
14568  The fseek function sets the file position indicator for the stream pointed to by stream.
14569  If a read or write error occurs, the error indicator for the stream is set and fseek fails.
14570 <p><!--para 3-->
14571  For a binary stream, the new position, measured in characters from the beginning of the
14572  file, is obtained by adding offset to the position specified by whence. The specified
14573  position is the beginning of the file if whence is SEEK_SET, the current value of the file
14574  position indicator if SEEK_CUR, or end-of-file if SEEK_END. A binary stream need not
14575  meaningfully support fseek calls with a whence value of SEEK_END.
14576 <p><!--para 4-->
14577  For a text stream, either offset shall be zero, or offset shall be a value returned by
14578  an earlier successful call to the ftell function on a stream associated with the same file
14579  and whence shall be SEEK_SET.
14580 <!--page 315 indent 4-->
14581 <p><!--para 5-->
14582  After determining the new position, a successful call to the fseek function undoes any
14583  effects of the ungetc function on the stream, clears the end-of-file indicator for the
14584  stream, and then establishes the new position. After a successful fseek call, the next
14585  operation on an update stream may be either input or output.
14586 <h6>Returns</h6>
14587 <p><!--para 6-->
14588  The fseek function returns nonzero only for a request that cannot be satisfied.
14589 <p><b> Forward references</b>: the ftell function (<a href="#7.19.9.4">7.19.9.4</a>).
14590
14591 <a name="7.19.9.3" href="#7.19.9.3"><h5>7.19.9.3 The fsetpos function</h5></a>
14592 <h6>Synopsis</h6>
14593 <p><!--para 1-->
14594 <pre>
14595         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14596         int fsetpos(FILE *stream, const fpos_t *pos);</pre>
14597 <h6>Description</h6>
14598 <p><!--para 2-->
14599  The fsetpos function sets the mbstate_t object (if any) and file position indicator
14600  for the stream pointed to by stream according to the value of the object pointed to by
14601  pos, which shall be a value obtained from an earlier successful call to the fgetpos
14602  function on a stream associated with the same file. If a read or write error occurs, the
14603  error indicator for the stream is set and fsetpos fails.
14604 <p><!--para 3-->
14605  A successful call to the fsetpos function undoes any effects of the ungetc function
14606  on the stream, clears the end-of-file indicator for the stream, and then establishes the new
14607  parse state and position. After a successful fsetpos call, the next operation on an
14608  update stream may be either input or output.
14609 <h6>Returns</h6>
14610 <p><!--para 4-->
14611  If successful, the fsetpos function returns zero; on failure, the fsetpos function
14612  returns nonzero and stores an implementation-defined positive value in errno.
14613
14614 <a name="7.19.9.4" href="#7.19.9.4"><h5>7.19.9.4 The ftell function</h5></a>
14615 <h6>Synopsis</h6>
14616 <p><!--para 1-->
14617 <pre>
14618         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14619         long int ftell(FILE *stream);</pre>
14620 <h6>Description</h6>
14621 <p><!--para 2-->
14622  The ftell function obtains the current value of the file position indicator for the stream
14623  pointed to by stream. For a binary stream, the value is the number of characters from
14624  the beginning of the file. For a text stream, its file position indicator contains unspecified
14625  information, usable by the fseek function for returning the file position indicator for the
14626  stream to its position at the time of the ftell call; the difference between two such
14627  return values is not necessarily a meaningful measure of the number of characters written
14628 <!--page 316 indent 4-->
14629  or read.
14630 <h6>Returns</h6>
14631 <p><!--para 3-->
14632  If successful, the ftell function returns the current value of the file position indicator
14633  for the stream. On failure, the ftell function returns -1L and stores an
14634  implementation-defined positive value in errno.
14635
14636 <a name="7.19.9.5" href="#7.19.9.5"><h5>7.19.9.5 The rewind function</h5></a>
14637 <h6>Synopsis</h6>
14638 <p><!--para 1-->
14639 <pre>
14640         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14641         void rewind(FILE *stream);</pre>
14642 <h6>Description</h6>
14643 <p><!--para 2-->
14644  The rewind function sets the file position indicator for the stream pointed to by
14645  stream to the beginning of the file. It is equivalent to
14646 <pre>
14647         (void)fseek(stream, 0L, SEEK_SET)</pre>
14648  except that the error indicator for the stream is also cleared.
14649 <h6>Returns</h6>
14650 <p><!--para 3-->
14651  The rewind function returns no value.
14652
14653 <a name="7.19.10" href="#7.19.10"><h4>7.19.10 Error-handling functions</h4></a>
14654
14655 <a name="7.19.10.1" href="#7.19.10.1"><h5>7.19.10.1 The clearerr function</h5></a>
14656 <h6>Synopsis</h6>
14657 <p><!--para 1-->
14658 <pre>
14659         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14660         void clearerr(FILE *stream);</pre>
14661 <h6>Description</h6>
14662 <p><!--para 2-->
14663  The clearerr function clears the end-of-file and error indicators for the stream pointed
14664  to by stream.
14665 <h6>Returns</h6>
14666 <p><!--para 3-->
14667  The clearerr function returns no value.
14668 <!--page 317 indent 4-->
14669
14670 <a name="7.19.10.2" href="#7.19.10.2"><h5>7.19.10.2 The feof function</h5></a>
14671 <h6>Synopsis</h6>
14672 <p><!--para 1-->
14673 <pre>
14674         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14675         int feof(FILE *stream);</pre>
14676 <h6>Description</h6>
14677 <p><!--para 2-->
14678  The feof function tests the end-of-file indicator for the stream pointed to by stream.
14679 <h6>Returns</h6>
14680 <p><!--para 3-->
14681  The feof function returns nonzero if and only if the end-of-file indicator is set for
14682  stream.
14683
14684 <a name="7.19.10.3" href="#7.19.10.3"><h5>7.19.10.3 The ferror function</h5></a>
14685 <h6>Synopsis</h6>
14686 <p><!--para 1-->
14687 <pre>
14688         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14689         int ferror(FILE *stream);</pre>
14690 <h6>Description</h6>
14691 <p><!--para 2-->
14692  The ferror function tests the error indicator for the stream pointed to by stream.
14693 <h6>Returns</h6>
14694 <p><!--para 3-->
14695  The ferror function returns nonzero if and only if the error indicator is set for
14696  stream.
14697
14698 <a name="7.19.10.4" href="#7.19.10.4"><h5>7.19.10.4 The perror function</h5></a>
14699 <h6>Synopsis</h6>
14700 <p><!--para 1-->
14701 <pre>
14702         #include <a href="#7.19">&lt;stdio.h&gt;</a>
14703         void perror(const char *s);</pre>
14704 <h6>Description</h6>
14705 <p><!--para 2-->
14706  The perror function maps the error number in the integer expression errno to an
14707  error message. It writes a sequence of characters to the standard error stream thus: first
14708  (if s is not a null pointer and the character pointed to by s is not the null character), the
14709  string pointed to by s followed by a colon (:) and a space; then an appropriate error
14710  message string followed by a new-line character. The contents of the error message
14711  strings are the same as those returned by the strerror function with argument errno.
14712 <h6>Returns</h6>
14713 <p><!--para 3-->
14714  The perror function returns no value.
14715 <p><b> Forward references</b>: the strerror function (<a href="#7.21.6.2">7.21.6.2</a>).
14716 <!--page 318 indent 4-->
14717
14718 <a name="7.20" href="#7.20"><h3>7.20 General utilities <stdlib.h></h3></a>
14719 <p><!--para 1-->
14720  The header <a href="#7.20">&lt;stdlib.h&gt;</a> declares five types and several functions of general utility, and
14721  defines several macros.<sup><a href="#note257"><b>257)</b></a></sup>
14722 <p><!--para 2-->
14723  The types declared are size_t and wchar_t (both described in <a href="#7.17">7.17</a>),
14724 <pre>
14725           div_t</pre>
14726  which is a structure type that is the type of the value returned by the div function,
14727 <pre>
14728           ldiv_t</pre>
14729  which is a structure type that is the type of the value returned by the ldiv function, and
14730 <pre>
14731           lldiv_t</pre>
14732  which is a structure type that is the type of the value returned by the lldiv function.
14733 <p><!--para 3-->
14734  The macros defined are NULL (described in <a href="#7.17">7.17</a>);
14735 <pre>
14736           EXIT_FAILURE</pre>
14737  and
14738 <pre>
14739           EXIT_SUCCESS</pre>
14740  which expand to integer constant expressions that can be used as the argument to the
14741  exit function to return unsuccessful or successful termination status, respectively, to the
14742  host environment;
14743 <pre>
14744           RAND_MAX</pre>
14745  which expands to an integer constant expression that is the maximum value returned by
14746  the rand function; and
14747 <pre>
14748           MB_CUR_MAX</pre>
14749  which expands to a positive integer expression with type size_t that is the maximum
14750  number of bytes in a multibyte character for the extended character set specified by the
14751  current locale (category LC_CTYPE), which is never greater than MB_LEN_MAX.
14752  
14753  
14754  
14755  
14756 <!--page 319 indent 4-->
14757
14758 <h6>footnotes</h6>
14759 <p><a name="note257">257)</a> See ''future library directions'' (<a href="#7.26.10">7.26.10</a>).
14760
14761
14762 <a name="7.20.1" href="#7.20.1"><h4>7.20.1 Numeric conversion functions</h4></a>
14763 <p><!--para 1-->
14764  The functions atof, atoi, atol, and atoll need not affect the value of the integer
14765  expression errno on an error. If the value of the result cannot be represented, the
14766  behavior is undefined.
14767
14768 <a name="7.20.1.1" href="#7.20.1.1"><h5>7.20.1.1 The atof function</h5></a>
14769 <h6>Synopsis</h6>
14770 <p><!--para 1-->
14771 <pre>
14772         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
14773         double atof(const char *nptr);</pre>
14774 <h6>Description</h6>
14775 <p><!--para 2-->
14776  The atof function converts the initial portion of the string pointed to by nptr to
14777  double representation. Except for the behavior on error, it is equivalent to
14778 <pre>
14779         strtod(nptr, (char **)NULL)</pre>
14780 <h6>Returns</h6>
14781 <p><!--para 3-->
14782  The atof function returns the converted value.
14783 <p><b> Forward references</b>: the strtod, strtof, and strtold functions (<a href="#7.20.1.3">7.20.1.3</a>).
14784
14785 <a name="7.20.1.2" href="#7.20.1.2"><h5>7.20.1.2 The atoi, atol, and atoll functions</h5></a>
14786 <h6>Synopsis</h6>
14787 <p><!--para 1-->
14788 <pre>
14789         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
14790         int atoi(const char *nptr);
14791         long int atol(const char *nptr);
14792         long long int atoll(const char *nptr);</pre>
14793 <h6>Description</h6>
14794 <p><!--para 2-->
14795  The atoi, atol, and atoll functions convert the initial portion of the string pointed
14796  to by nptr to int, long int, and long long int representation, respectively.
14797  Except for the behavior on error, they are equivalent to
14798 <pre>
14799         atoi: (int)strtol(nptr, (char **)NULL, 10)
14800         atol: strtol(nptr, (char **)NULL, 10)
14801         atoll: strtoll(nptr, (char **)NULL, 10)</pre>
14802 <h6>Returns</h6>
14803 <p><!--para 3-->
14804  The atoi, atol, and atoll functions return the converted value.
14805 <p><b> Forward references</b>: the strtol, strtoll, strtoul, and strtoull functions
14806  (<a href="#7.20.1.4">7.20.1.4</a>).
14807 <!--page 320 indent 4-->
14808
14809 <a name="7.20.1.3" href="#7.20.1.3"><h5>7.20.1.3 The strtod, strtof, and strtold functions</h5></a>
14810 <h6>Synopsis</h6>
14811 <p><!--para 1-->
14812 <pre>
14813         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
14814         double strtod(const char * restrict nptr,
14815              char ** restrict endptr);
14816         float strtof(const char * restrict nptr,
14817              char ** restrict endptr);
14818         long double strtold(const char * restrict nptr,
14819              char ** restrict endptr);</pre>
14820 <h6>Description</h6>
14821 <p><!--para 2-->
14822  The strtod, strtof, and strtold functions convert the initial portion of the string
14823  pointed to by nptr to double, float, and long double representation,
14824  respectively. First, they decompose the input string into three parts: an initial, possibly
14825  empty, sequence of white-space characters (as specified by the isspace function), a
14826  subject sequence resembling a floating-point constant or representing an infinity or NaN;
14827  and a final string of one or more unrecognized characters, including the terminating null
14828  character of the input string. Then, they attempt to convert the subject sequence to a
14829  floating-point number, and return the result.
14830 <p><!--para 3-->
14831  The expected form of the subject sequence is an optional plus or minus sign, then one of
14832  the following:
14833 <ul>
14834 <li>  a nonempty sequence of decimal digits optionally containing a decimal-point
14835  character, then an optional exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
14836 <li>  a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
14837  decimal-point character, then an optional binary exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
14838 <li>  INF or INFINITY, ignoring case
14839 <li>  NAN or NAN(n-char-sequenceopt), ignoring case in the NAN part, where:
14840 <pre>
14841           n-char-sequence:
14842                  digit
14843                  nondigit
14844                  n-char-sequence digit
14845                  n-char-sequence nondigit</pre>
14846 </ul>
14847  The subject sequence is defined as the longest initial subsequence of the input string,
14848  starting with the first non-white-space character, that is of the expected form. The subject
14849  sequence contains no characters if the input string is not of the expected form.
14850 <p><!--para 4-->
14851  If the subject sequence has the expected form for a floating-point number, the sequence of
14852  characters starting with the first digit or the decimal-point character (whichever occurs
14853  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
14854 <!--page 321 indent 4-->
14855  decimal-point character is used in place of a period, and that if neither an exponent part
14856  nor a decimal-point character appears in a decimal floating point number, or if a binary
14857  exponent part does not appear in a hexadecimal floating point number, an exponent part
14858  of the appropriate type with value zero is assumed to follow the last digit in the string. If
14859  the subject sequence begins with a minus sign, the sequence is interpreted as negated.<sup><a href="#note258"><b>258)</b></a></sup>
14860  A character sequence INF or INFINITY is interpreted as an infinity, if representable in
14861  the return type, else like a floating constant that is too large for the range of the return
14862  type. A character sequence NAN or NAN(n-char-sequenceopt), is interpreted as a quiet
14863  NaN, if supported in the return type, else like a subject sequence part that does not have
14864  the expected form; the meaning of the n-char sequences is implementation-defined.<sup><a href="#note259"><b>259)</b></a></sup> A
14865  pointer to the final string is stored in the object pointed to by endptr, provided that
14866  endptr is not a null pointer.
14867 <p><!--para 5-->
14868  If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
14869  value resulting from the conversion is correctly rounded.
14870 <p><!--para 6-->
14871  In other than the "C" locale, additional locale-specific subject sequence forms may be
14872  accepted.
14873 <p><!--para 7-->
14874  If the subject sequence is empty or does not have the expected form, no conversion is
14875  performed; the value of nptr is stored in the object pointed to by endptr, provided
14876  that endptr is not a null pointer.
14877  Recommended practice
14878 <p><!--para 8-->
14879  If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
14880  the result is not exactly representable, the result should be one of the two numbers in the
14881  appropriate internal format that are adjacent to the hexadecimal floating source value,
14882  with the extra stipulation that the error should have a correct sign for the current rounding
14883  direction.
14884 <p><!--para 9-->
14885  If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in
14886  <a href="#7.7">&lt;float.h&gt;</a>) significant digits, the result should be correctly rounded. If the subject
14887  sequence D has the decimal form and more than DECIMAL_DIG significant digits,
14888  consider the two bounding, adjacent decimal strings L and U, both having
14889  DECIMAL_DIG significant digits, such that the values of L, D, and U satisfy L &lt;= D &lt;= U.
14890  The result should be one of the (equal or adjacent) values that would be obtained by
14891  correctly rounding L and U according to the current rounding direction, with the extra
14892  
14893 <!--page 322 indent 5-->
14894  stipulation that the error with respect to D should have a correct sign for the current
14895  rounding direction.<sup><a href="#note260"><b>260)</b></a></sup>
14896 <h6>Returns</h6>
14897 <p><!--para 10-->
14898  The functions return the converted value, if any. If no conversion could be performed,
14899  zero is returned. If the correct value is outside the range of representable values, plus or
14900  minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the return
14901  type and sign of the value), and the value of the macro ERANGE is stored in errno. If
14902  the result underflows (<a href="#7.12.1">7.12.1</a>), the functions return a value whose magnitude is no greater
14903  than the smallest normalized positive number in the return type; whether errno acquires
14904  the value ERANGE is implementation-defined.
14905
14906 <h6>footnotes</h6>
14907 <p><a name="note258">258)</a> It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
14908  negating the value resulting from converting the corresponding unsigned sequence (see <a href="#F.5">F.5</a>); the two
14909  methods may yield different results if rounding is toward positive or negative infinity. In either case,
14910  the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
14911
14912 <p><a name="note259">259)</a> An implementation may use the n-char sequence to determine extra information to be represented in
14913  the NaN's significand.
14914
14915 <p><a name="note260">260)</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
14916  to the same internal floating value, but if not will round to adjacent values.
14917
14918
14919 <a name="7.20.1.4" href="#7.20.1.4"><h5>7.20.1.4 The strtol, strtoll, strtoul, and strtoull functions</h5></a>
14920 <h6>Synopsis</h6>
14921 <p><!--para 1-->
14922 <pre>
14923          #include <a href="#7.20">&lt;stdlib.h&gt;</a>
14924          long int strtol(
14925               const char * restrict nptr,
14926               char ** restrict endptr,
14927               int base);
14928          long long int strtoll(
14929               const char * restrict nptr,
14930               char ** restrict endptr,
14931               int base);
14932          unsigned long int strtoul(
14933               const char * restrict nptr,
14934               char ** restrict endptr,
14935               int base);
14936          unsigned long long int strtoull(
14937               const char * restrict nptr,
14938               char ** restrict endptr,
14939               int base);</pre>
14940 <h6>Description</h6>
14941 <p><!--para 2-->
14942  The strtol, strtoll, strtoul, and strtoull functions convert the initial
14943  portion of the string pointed to by nptr to long int, long long int, unsigned
14944  long int, and unsigned long long int representation, respectively. First,
14945  they decompose the input string into three parts: an initial, possibly empty, sequence of
14946  white-space characters (as specified by the isspace function), a subject sequence
14947  
14948  
14949 <!--page 323 indent 4-->
14950  resembling an integer represented in some radix determined by the value of base, and a
14951  final string of one or more unrecognized characters, including the terminating null
14952  character of the input string. Then, they attempt to convert the subject sequence to an
14953  integer, and return the result.
14954 <p><!--para 3-->
14955  If the value of base is zero, the expected form of the subject sequence is that of an
14956  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
14957  not including an integer suffix. If the value of base is between 2 and 36 (inclusive), the
14958  expected form of the subject sequence is a sequence of letters and digits representing an
14959  integer with the radix specified by base, optionally preceded by a plus or minus sign,
14960  but not including an integer suffix. The letters from a (or A) through z (or Z) are
14961  ascribed the values 10 through 35; only letters and digits whose ascribed values are less
14962  than that of base are permitted. If the value of base is 16, the characters 0x or 0X may
14963  optionally precede the sequence of letters and digits, following the sign if present.
14964 <p><!--para 4-->
14965  The subject sequence is defined as the longest initial subsequence of the input string,
14966  starting with the first non-white-space character, that is of the expected form. The subject
14967  sequence contains no characters if the input string is empty or consists entirely of white
14968  space, or if the first non-white-space character is other than a sign or a permissible letter
14969  or digit.
14970 <p><!--para 5-->
14971  If the subject sequence has the expected form and the value of base is zero, the sequence
14972  of characters starting with the first digit is interpreted as an integer constant according to
14973  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
14974  is between 2 and 36, it is used as the base for conversion, ascribing to each letter its value
14975  as given above. If the subject sequence begins with a minus sign, the value resulting from
14976  the conversion is negated (in the return type). A pointer to the final string is stored in the
14977  object pointed to by endptr, provided that endptr is not a null pointer.
14978 <p><!--para 6-->
14979  In other than the "C" locale, additional locale-specific subject sequence forms may be
14980  accepted.
14981 <p><!--para 7-->
14982  If the subject sequence is empty or does not have the expected form, no conversion is
14983  performed; the value of nptr is stored in the object pointed to by endptr, provided
14984  that endptr is not a null pointer.
14985 <h6>Returns</h6>
14986 <p><!--para 8-->
14987  The strtol, strtoll, strtoul, and strtoull functions return the converted
14988  value, if any. If no conversion could be performed, zero is returned. If the correct value
14989  is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
14990  LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
14991  and sign of the value, if any), and the value of the macro ERANGE is stored in errno.
14992 <!--page 324 indent 4-->
14993
14994 <a name="7.20.2" href="#7.20.2"><h4>7.20.2 Pseudo-random sequence generation functions</h4></a>
14995
14996 <a name="7.20.2.1" href="#7.20.2.1"><h5>7.20.2.1 The rand function</h5></a>
14997 <h6>Synopsis</h6>
14998 <p><!--para 1-->
14999 <pre>
15000         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15001         int rand(void);</pre>
15002 <h6>Description</h6>
15003 <p><!--para 2-->
15004  The rand function computes a sequence of pseudo-random integers in the range 0 to
15005  RAND_MAX.
15006 <p><!--para 3-->
15007  The implementation shall behave as if no library function calls the rand function.
15008 <h6>Returns</h6>
15009 <p><!--para 4-->
15010  The rand function returns a pseudo-random integer.
15011  Environmental limits
15012 <p><!--para 5-->
15013  The value of the RAND_MAX macro shall be at least 32767.
15014
15015 <a name="7.20.2.2" href="#7.20.2.2"><h5>7.20.2.2 The srand function</h5></a>
15016 <h6>Synopsis</h6>
15017 <p><!--para 1-->
15018 <pre>
15019         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15020         void srand(unsigned int seed);</pre>
15021 <h6>Description</h6>
15022 <p><!--para 2-->
15023  The srand function uses the argument as a seed for a new sequence of pseudo-random
15024  numbers to be returned by subsequent calls to rand. If srand is then called with the
15025  same seed value, the sequence of pseudo-random numbers shall be repeated. If rand is
15026  called before any calls to srand have been made, the same sequence shall be generated
15027  as when srand is first called with a seed value of 1.
15028 <p><!--para 3-->
15029  The implementation shall behave as if no library function calls the srand function.
15030 <h6>Returns</h6>
15031 <p><!--para 4-->
15032  The srand function returns no value.
15033 <p><!--para 5-->
15034  EXAMPLE       The following functions define a portable implementation of rand and srand.
15035 <!--page 325 indent 4-->
15036 <pre>
15037         static unsigned long int next = 1;
15038         int rand(void)   // RAND_MAX assumed to be 32767
15039         {
15040               next = next * 1103515245 + 12345;
15041               return (unsigned int)(next/65536) % 32768;
15042         }
15043          void srand(unsigned int seed)
15044          {
15045                next = seed;
15046          }</pre>
15047  
15048
15049 <a name="7.20.3" href="#7.20.3"><h4>7.20.3 Memory management functions</h4></a>
15050 <p><!--para 1-->
15051  The order and contiguity of storage allocated by successive calls to the calloc,
15052  malloc, and realloc functions is unspecified. The pointer returned if the allocation
15053  succeeds is suitably aligned so that it may be assigned to a pointer to any type of object
15054  and then used to access such an object or an array of such objects in the space allocated
15055  (until the space is explicitly deallocated). The lifetime of an allocated object extends
15056  from the allocation until the deallocation. Each such allocation shall yield a pointer to an
15057  object disjoint from any other object. The pointer returned points to the start (lowest byte
15058  address) of the allocated space. If the space cannot be allocated, a null pointer is
15059  returned. If the size of the space requested is zero, the behavior is implementation-
15060  defined: either a null pointer is returned, or the behavior is as if the size were some
15061  nonzero value, except that the returned pointer shall not be used to access an object.
15062
15063 <a name="7.20.3.1" href="#7.20.3.1"><h5>7.20.3.1 The calloc function</h5></a>
15064 <h6>Synopsis</h6>
15065 <p><!--para 1-->
15066 <pre>
15067          #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15068          void *calloc(size_t nmemb, size_t size);</pre>
15069 <h6>Description</h6>
15070 <p><!--para 2-->
15071  The calloc function allocates space for an array of nmemb objects, each of whose size
15072  is size. The space is initialized to all bits zero.<sup><a href="#note261"><b>261)</b></a></sup>
15073 <h6>Returns</h6>
15074 <p><!--para 3-->
15075  The calloc function returns either a null pointer or a pointer to the allocated space.
15076
15077 <h6>footnotes</h6>
15078 <p><a name="note261">261)</a> Note that this need not be the same as the representation of floating-point zero or a null pointer
15079  constant.
15080
15081
15082 <a name="7.20.3.2" href="#7.20.3.2"><h5>7.20.3.2 The free function</h5></a>
15083 <h6>Synopsis</h6>
15084 <p><!--para 1-->
15085 <pre>
15086          #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15087          void free(void *ptr);</pre>
15088 <h6>Description</h6>
15089 <p><!--para 2-->
15090  The free function causes the space pointed to by ptr to be deallocated, that is, made
15091  available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if
15092  the argument does not match a pointer earlier returned by the calloc, malloc, or
15093  
15094  
15095 <!--page 326 indent 4-->
15096  realloc function, or if the space has been deallocated by a call to free or realloc,
15097  the behavior is undefined.
15098 <h6>Returns</h6>
15099 <p><!--para 3-->
15100  The free function returns no value.
15101
15102 <a name="7.20.3.3" href="#7.20.3.3"><h5>7.20.3.3 The malloc function</h5></a>
15103 <h6>Synopsis</h6>
15104 <p><!--para 1-->
15105 <pre>
15106         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15107         void *malloc(size_t size);</pre>
15108 <h6>Description</h6>
15109 <p><!--para 2-->
15110  The malloc function allocates space for an object whose size is specified by size and
15111  whose value is indeterminate.
15112 <h6>Returns</h6>
15113 <p><!--para 3-->
15114  The malloc function returns either a null pointer or a pointer to the allocated space.
15115
15116 <a name="7.20.3.4" href="#7.20.3.4"><h5>7.20.3.4 The realloc function</h5></a>
15117 <h6>Synopsis</h6>
15118 <p><!--para 1-->
15119 <pre>
15120         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15121         void *realloc(void *ptr, size_t size);</pre>
15122 <h6>Description</h6>
15123 <p><!--para 2-->
15124  The realloc function deallocates the old object pointed to by ptr and returns a
15125  pointer to a new object that has the size specified by size. The contents of the new
15126  object shall be the same as that of the old object prior to deallocation, up to the lesser of
15127  the new and old sizes. Any bytes in the new object beyond the size of the old object have
15128  indeterminate values.
15129 <p><!--para 3-->
15130  If ptr is a null pointer, the realloc function behaves like the malloc function for the
15131  specified size. Otherwise, if ptr does not match a pointer earlier returned by the
15132  calloc, malloc, or realloc function, or if the space has been deallocated by a call
15133  to the free or realloc function, the behavior is undefined. If memory for the new
15134  object cannot be allocated, the old object is not deallocated and its value is unchanged.
15135 <h6>Returns</h6>
15136 <p><!--para 4-->
15137  The realloc function returns a pointer to the new object (which may have the same
15138  value as a pointer to the old object), or a null pointer if the new object could not be
15139  allocated.
15140 <!--page 327 indent 4-->
15141
15142 <a name="7.20.4" href="#7.20.4"><h4>7.20.4 Communication with the environment</h4></a>
15143
15144 <a name="7.20.4.1" href="#7.20.4.1"><h5>7.20.4.1 The abort function</h5></a>
15145 <h6>Synopsis</h6>
15146 <p><!--para 1-->
15147 <pre>
15148         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15149         void abort(void);</pre>
15150 <h6>Description</h6>
15151 <p><!--para 2-->
15152  The abort function causes abnormal program termination to occur, unless the signal
15153  SIGABRT is being caught and the signal handler does not return. Whether open streams
15154  with unwritten buffered data are flushed, open streams are closed, or temporary files are
15155  removed is implementation-defined. An implementation-defined form of the status
15156  unsuccessful termination is returned to the host environment by means of the function
15157  call raise(SIGABRT).
15158 <h6>Returns</h6>
15159 <p><!--para 3-->
15160  The abort function does not return to its caller.
15161
15162 <a name="7.20.4.2" href="#7.20.4.2"><h5>7.20.4.2 The atexit function</h5></a>
15163 <h6>Synopsis</h6>
15164 <p><!--para 1-->
15165 <pre>
15166         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15167         int atexit(void (*func)(void));</pre>
15168 <h6>Description</h6>
15169 <p><!--para 2-->
15170  The atexit function registers the function pointed to by func, to be called without
15171  arguments at normal program termination.
15172  Environmental limits
15173 <p><!--para 3-->
15174  The implementation shall support the registration of at least 32 functions.
15175 <h6>Returns</h6>
15176 <p><!--para 4-->
15177  The atexit function returns zero if the registration succeeds, nonzero if it fails.
15178 <p><b> Forward references</b>: the exit function (<a href="#7.20.4.3">7.20.4.3</a>).
15179
15180 <a name="7.20.4.3" href="#7.20.4.3"><h5>7.20.4.3 The exit function</h5></a>
15181 <h6>Synopsis</h6>
15182 <p><!--para 1-->
15183 <pre>
15184         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15185         void exit(int status);</pre>
15186 <h6>Description</h6>
15187 <p><!--para 2-->
15188  The exit function causes normal program termination to occur. If more than one call to
15189  the exit function is executed by a program, the behavior is undefined.
15190 <!--page 328 indent 4-->
15191 <p><!--para 3-->
15192  First, all functions registered by the atexit function are called, in the reverse order of
15193  their registration,<sup><a href="#note262"><b>262)</b></a></sup> except that a function is called after any previously registered
15194  functions that had already been called at the time it was registered. If, during the call to
15195  any such function, a call to the longjmp function is made that would terminate the call
15196  to the registered function, the behavior is undefined.
15197 <p><!--para 4-->
15198  Next, all open streams with unwritten buffered data are flushed, all open streams are
15199  closed, and all files created by the tmpfile function are removed.
15200 <p><!--para 5-->
15201  Finally, control is returned to the host environment. If the value of status is zero or
15202  EXIT_SUCCESS, an implementation-defined form of the status successful termination is
15203  returned. If the value of status is EXIT_FAILURE, an implementation-defined form
15204  of the status unsuccessful termination is returned. Otherwise the status returned is
15205  implementation-defined.
15206 <h6>Returns</h6>
15207 <p><!--para 6-->
15208  The exit function cannot return to its caller.
15209
15210 <h6>footnotes</h6>
15211 <p><a name="note262">262)</a> Each function is called as many times as it was registered, and in the correct order with respect to
15212  other registered functions.
15213
15214
15215 <a name="7.20.4.4" href="#7.20.4.4"><h5>7.20.4.4 The _Exit function</h5></a>
15216 <h6>Synopsis</h6>
15217 <p><!--para 1-->
15218 <pre>
15219          #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15220          void _Exit(int status);</pre>
15221 <h6>Description</h6>
15222 <p><!--para 2-->
15223  The _Exit function causes normal program termination to occur and control to be
15224  returned to the host environment. No functions registered by the atexit function or
15225  signal handlers registered by the signal function are called. The status returned to the
15226  host environment is determined in the same way as for the exit function (<a href="#7.20.4.3">7.20.4.3</a>).
15227  Whether open streams with unwritten buffered data are flushed, open streams are closed,
15228  or temporary files are removed is implementation-defined.
15229 <h6>Returns</h6>
15230 <p><!--para 3-->
15231  The _Exit function cannot return to its caller.
15232  
15233  
15234  
15235  
15236 <!--page 329 indent 4-->
15237
15238 <a name="7.20.4.5" href="#7.20.4.5"><h5>7.20.4.5 The getenv function</h5></a>
15239 <h6>Synopsis</h6>
15240 <p><!--para 1-->
15241 <pre>
15242         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15243         char *getenv(const char *name);</pre>
15244 <h6>Description</h6>
15245 <p><!--para 2-->
15246  The getenv function searches an environment list, provided by the host environment,
15247  for a string that matches the string pointed to by name. The set of environment names
15248  and the method for altering the environment list are implementation-defined.
15249 <p><!--para 3-->
15250  The implementation shall behave as if no library function calls the getenv function.
15251 <h6>Returns</h6>
15252 <p><!--para 4-->
15253  The getenv function returns a pointer to a string associated with the matched list
15254  member. The string pointed to shall not be modified by the program, but may be
15255  overwritten by a subsequent call to the getenv function. If the specified name cannot
15256  be found, a null pointer is returned.
15257
15258 <a name="7.20.4.6" href="#7.20.4.6"><h5>7.20.4.6 The system function</h5></a>
15259 <h6>Synopsis</h6>
15260 <p><!--para 1-->
15261 <pre>
15262         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15263         int system(const char *string);</pre>
15264 <h6>Description</h6>
15265 <p><!--para 2-->
15266  If string is a null pointer, the system function determines whether the host
15267  environment has a command processor. If string is not a null pointer, the system
15268  function passes the string pointed to by string to that command processor to be
15269  executed in a manner which the implementation shall document; this might then cause the
15270  program calling system to behave in a non-conforming manner or to terminate.
15271 <h6>Returns</h6>
15272 <p><!--para 3-->
15273  If the argument is a null pointer, the system function returns nonzero only if a
15274  command processor is available. If the argument is not a null pointer, and the system
15275  function does return, it returns an implementation-defined value.
15276 <!--page 330 indent 4-->
15277
15278 <a name="7.20.5" href="#7.20.5"><h4>7.20.5 Searching and sorting utilities</h4></a>
15279 <p><!--para 1-->
15280  These utilities make use of a comparison function to search or sort arrays of unspecified
15281  type. Where an argument declared as size_t nmemb specifies the length of the array
15282  for a function, nmemb can have the value zero on a call to that function; the comparison
15283  function is not called, a search finds no matching element, and sorting performs no
15284  rearrangement. Pointer arguments on such a call shall still have valid values, as described
15285  in <a href="#7.1.4">7.1.4</a>.
15286 <p><!--para 2-->
15287  The implementation shall ensure that the second argument of the comparison function
15288  (when called from bsearch), or both arguments (when called from qsort), are
15289  pointers to elements of the array.<sup><a href="#note263"><b>263)</b></a></sup> The first argument when called from bsearch
15290  shall equal key.
15291 <p><!--para 3-->
15292  The comparison function shall not alter the contents of the array. The implementation
15293  may reorder elements of the array between calls to the comparison function, but shall not
15294  alter the contents of any individual element.
15295 <p><!--para 4-->
15296  When the same objects (consisting of size bytes, irrespective of their current positions
15297  in the array) are passed more than once to the comparison function, the results shall be
15298  consistent with one another. That is, for qsort they shall define a total ordering on the
15299  array, and for bsearch the same object shall always compare the same way with the
15300  key.
15301 <p><!--para 5-->
15302  A sequence point occurs immediately before and immediately after each call to the
15303  comparison function, and also between any call to the comparison function and any
15304  movement of the objects passed as arguments to that call.
15305
15306 <h6>footnotes</h6>
15307 <p><a name="note263">263)</a> That is, if the value passed is p, then the following expressions are always nonzero:
15308
15309 <pre>
15310           ((char *)p - (char *)base) % size == 0
15311           (char *)p &gt;= (char *)base
15312           (char *)p &lt; (char *)base + nmemb * size</pre>
15313
15314
15315 <a name="7.20.5.1" href="#7.20.5.1"><h5>7.20.5.1 The bsearch function</h5></a>
15316 <h6>Synopsis</h6>
15317 <p><!--para 1-->
15318 <pre>
15319           #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15320           void *bsearch(const void *key, const void *base,
15321                size_t nmemb, size_t size,
15322                int (*compar)(const void *, const void *));</pre>
15323 <h6>Description</h6>
15324 <p><!--para 2-->
15325  The bsearch function searches an array of nmemb objects, the initial element of which
15326  is pointed to by base, for an element that matches the object pointed to by key. The
15327  
15328  
15329 <!--page 331 indent 4-->
15330  size of each element of the array is specified by size.
15331 <p><!--para 3-->
15332  The comparison function pointed to by compar is called with two arguments that point
15333  to the key object and to an array element, in that order. The function shall return an
15334  integer less than, equal to, or greater than zero if the key object is considered,
15335  respectively, to be less than, to match, or to be greater than the array element. The array
15336  shall consist of: all the elements that compare less than, all the elements that compare
15337  equal to, and all the elements that compare greater than the key object, in that order.<sup><a href="#note264"><b>264)</b></a></sup>
15338 <h6>Returns</h6>
15339 <p><!--para 4-->
15340  The bsearch function returns a pointer to a matching element of the array, or a null
15341  pointer if no match is found. If two elements compare as equal, which element is
15342  matched is unspecified.
15343
15344 <h6>footnotes</h6>
15345 <p><a name="note264">264)</a> In practice, the entire array is sorted according to the comparison function.
15346
15347
15348 <a name="7.20.5.2" href="#7.20.5.2"><h5>7.20.5.2 The qsort function</h5></a>
15349 <h6>Synopsis</h6>
15350 <p><!--para 1-->
15351 <pre>
15352           #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15353           void qsort(void *base, size_t nmemb, size_t size,
15354                int (*compar)(const void *, const void *));</pre>
15355 <h6>Description</h6>
15356 <p><!--para 2-->
15357  The qsort function sorts an array of nmemb objects, the initial element of which is
15358  pointed to by base. The size of each object is specified by size.
15359 <p><!--para 3-->
15360  The contents of the array are sorted into ascending order according to a comparison
15361  function pointed to by compar, which is called with two arguments that point to the
15362  objects being compared. The function shall return an integer less than, equal to, or
15363  greater than zero if the first argument is considered to be respectively less than, equal to,
15364  or greater than the second.
15365 <p><!--para 4-->
15366  If two elements compare as equal, their order in the resulting sorted array is unspecified.
15367 <h6>Returns</h6>
15368 <p><!--para 5-->
15369  The qsort function returns no value.
15370  
15371  
15372  
15373  
15374 <!--page 332 indent 4-->
15375
15376 <a name="7.20.6" href="#7.20.6"><h4>7.20.6 Integer arithmetic functions</h4></a>
15377
15378 <a name="7.20.6.1" href="#7.20.6.1"><h5>7.20.6.1 The abs, labs and llabs functions</h5></a>
15379 <h6>Synopsis</h6>
15380 <p><!--para 1-->
15381 <pre>
15382          #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15383          int abs(int j);
15384          long int labs(long int j);
15385          long long int llabs(long long int j);</pre>
15386 <h6>Description</h6>
15387 <p><!--para 2-->
15388  The abs, labs, and llabs functions compute the absolute value of an integer j. If the
15389  result cannot be represented, the behavior is undefined.<sup><a href="#note265"><b>265)</b></a></sup>
15390 <h6>Returns</h6>
15391 <p><!--para 3-->
15392  The abs, labs, and llabs, functions return the absolute value.
15393
15394 <h6>footnotes</h6>
15395 <p><a name="note265">265)</a> The absolute value of the most negative number cannot be represented in two's complement.
15396
15397
15398 <a name="7.20.6.2" href="#7.20.6.2"><h5>7.20.6.2 The div, ldiv, and lldiv functions</h5></a>
15399 <h6>Synopsis</h6>
15400 <p><!--para 1-->
15401 <pre>
15402          #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15403          div_t div(int numer, int denom);
15404          ldiv_t ldiv(long int numer, long int denom);
15405          lldiv_t lldiv(long long int numer, long long int denom);</pre>
15406 <h6>Description</h6>
15407 <p><!--para 2-->
15408  The div, ldiv, and lldiv, functions compute numer / denom and numer %
15409  denom in a single operation.
15410 <h6>Returns</h6>
15411 <p><!--para 3-->
15412  The div, ldiv, and lldiv functions return a structure of type div_t, ldiv_t, and
15413  lldiv_t, respectively, comprising both the quotient and the remainder. The structures
15414  shall contain (in either order) the members quot (the quotient) and rem (the remainder),
15415  each of which has the same type as the arguments numer and denom. If either part of
15416  the result cannot be represented, the behavior is undefined.
15417  
15418  
15419  
15420  
15421 <!--page 333 indent 4-->
15422
15423 <a name="7.20.7" href="#7.20.7"><h4>7.20.7 Multibyte/wide character conversion functions</h4></a>
15424 <p><!--para 1-->
15425  The behavior of the multibyte character functions is affected by the LC_CTYPE category
15426  of the current locale. For a state-dependent encoding, each function is placed into its
15427  initial conversion state by a call for which its character pointer argument, s, is a null
15428  pointer. Subsequent calls with s as other than a null pointer cause the internal conversion
15429  state of the function to be altered as necessary. A call with s as a null pointer causes
15430  these functions to return a nonzero value if encodings have state dependency, and zero
15431  otherwise.<sup><a href="#note266"><b>266)</b></a></sup> Changing the LC_CTYPE category causes the conversion state of these
15432  functions to be indeterminate.
15433
15434 <h6>footnotes</h6>
15435 <p><a name="note266">266)</a> If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
15436  character codes, but are grouped with an adjacent multibyte character.
15437
15438
15439 <a name="7.20.7.1" href="#7.20.7.1"><h5>7.20.7.1 The mblen function</h5></a>
15440 <h6>Synopsis</h6>
15441 <p><!--para 1-->
15442 <pre>
15443          #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15444          int mblen(const char *s, size_t n);</pre>
15445 <h6>Description</h6>
15446 <p><!--para 2-->
15447  If s is not a null pointer, the mblen function determines the number of bytes contained
15448  in the multibyte character pointed to by s. Except that the conversion state of the
15449  mbtowc function is not affected, it is equivalent to
15450 <p><!--para 3-->
15451 <pre>
15452          mbtowc((wchar_t *)0, s, n);</pre>
15453  The implementation shall behave as if no library function calls the mblen function.
15454 <h6>Returns</h6>
15455 <p><!--para 4-->
15456  If s is a null pointer, the mblen function returns a nonzero or zero value, if multibyte
15457  character encodings, respectively, do or do not have state-dependent encodings. If s is
15458  not a null pointer, the mblen function either returns 0 (if s points to the null character),
15459  or returns the number of bytes that are contained in the multibyte character (if the next n
15460  or fewer bytes form a valid multibyte character), or returns -1 (if they do not form a valid
15461  multibyte character).
15462 <p><b> Forward references</b>: the mbtowc function (<a href="#7.20.7.2">7.20.7.2</a>).
15463  
15464  
15465  
15466  
15467 <!--page 334 indent 4-->
15468
15469 <a name="7.20.7.2" href="#7.20.7.2"><h5>7.20.7.2 The mbtowc function</h5></a>
15470 <h6>Synopsis</h6>
15471 <p><!--para 1-->
15472 <pre>
15473         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15474         int mbtowc(wchar_t * restrict pwc,
15475              const char * restrict s,
15476              size_t n);</pre>
15477 <h6>Description</h6>
15478 <p><!--para 2-->
15479  If s is not a null pointer, the mbtowc function inspects at most n bytes beginning with
15480  the byte pointed to by s to determine the number of bytes needed to complete the next
15481  multibyte character (including any shift sequences). If the function determines that the
15482  next multibyte character is complete and valid, it determines the value of the
15483  corresponding wide character and then, if pwc is not a null pointer, stores that value in
15484  the object pointed to by pwc. If the corresponding wide character is the null wide
15485  character, the function is left in the initial conversion state.
15486 <p><!--para 3-->
15487  The implementation shall behave as if no library function calls the mbtowc function.
15488 <h6>Returns</h6>
15489 <p><!--para 4-->
15490  If s is a null pointer, the mbtowc function returns a nonzero or zero value, if multibyte
15491  character encodings, respectively, do or do not have state-dependent encodings. If s is
15492  not a null pointer, the mbtowc function either returns 0 (if s points to the null character),
15493  or returns the number of bytes that are contained in the converted multibyte character (if
15494  the next n or fewer bytes form a valid multibyte character), or returns -1 (if they do not
15495  form a valid multibyte character).
15496 <p><!--para 5-->
15497  In no case will the value returned be greater than n or the value of the MB_CUR_MAX
15498  macro.
15499
15500 <a name="7.20.7.3" href="#7.20.7.3"><h5>7.20.7.3 The wctomb function</h5></a>
15501 <h6>Synopsis</h6>
15502 <p><!--para 1-->
15503 <pre>
15504         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15505         int wctomb(char *s, wchar_t wc);</pre>
15506 <h6>Description</h6>
15507 <p><!--para 2-->
15508  The wctomb function determines the number of bytes needed to represent the multibyte
15509  character corresponding to the wide character given by wc (including any shift
15510  sequences), and stores the multibyte character representation in the array whose first
15511  element is pointed to by s (if s is not a null pointer). At most MB_CUR_MAX characters
15512  are stored. If wc is a null wide character, a null byte is stored, preceded by any shift
15513  sequence needed to restore the initial shift state, and the function is left in the initial
15514  conversion state.
15515 <!--page 335 indent 4-->
15516 <p><!--para 3-->
15517  The implementation shall behave as if no library function calls the wctomb function.
15518 <h6>Returns</h6>
15519 <p><!--para 4-->
15520  If s is a null pointer, the wctomb function returns a nonzero or zero value, if multibyte
15521  character encodings, respectively, do or do not have state-dependent encodings. If s is
15522  not a null pointer, the wctomb function returns -1 if the value of wc does not correspond
15523  to a valid multibyte character, or returns the number of bytes that are contained in the
15524  multibyte character corresponding to the value of wc.
15525 <p><!--para 5-->
15526  In no case will the value returned be greater than the value of the MB_CUR_MAX macro.
15527
15528 <a name="7.20.8" href="#7.20.8"><h4>7.20.8 Multibyte/wide string conversion functions</h4></a>
15529 <p><!--para 1-->
15530  The behavior of the multibyte string functions is affected by the LC_CTYPE category of
15531  the current locale.
15532
15533 <a name="7.20.8.1" href="#7.20.8.1"><h5>7.20.8.1 The mbstowcs function</h5></a>
15534 <h6>Synopsis</h6>
15535 <p><!--para 1-->
15536 <pre>
15537           #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15538           size_t mbstowcs(wchar_t * restrict pwcs,
15539                const char * restrict s,
15540                size_t n);</pre>
15541 <h6>Description</h6>
15542 <p><!--para 2-->
15543  The mbstowcs function converts a sequence of multibyte characters that begins in the
15544  initial shift state from the array pointed to by s into a sequence of corresponding wide
15545  characters and stores not more than n wide characters into the array pointed to by pwcs.
15546  No multibyte characters that follow a null character (which is converted into a null wide
15547  character) will be examined or converted. Each multibyte character is converted as if by
15548  a call to the mbtowc function, except that the conversion state of the mbtowc function is
15549  not affected.
15550 <p><!--para 3-->
15551  No more than n elements will be modified in the array pointed to by pwcs. If copying
15552  takes place between objects that overlap, the behavior is undefined.
15553 <h6>Returns</h6>
15554 <p><!--para 4-->
15555  If an invalid multibyte character is encountered, the mbstowcs function returns
15556  (size_t)(-1). Otherwise, the mbstowcs function returns the number of array
15557  elements modified, not including a terminating null wide character, if any.<sup><a href="#note267"><b>267)</b></a></sup>
15558  
15559  
15560  
15561  
15562 <!--page 336 indent 4-->
15563
15564 <h6>footnotes</h6>
15565 <p><a name="note267">267)</a> The array will not be null-terminated if the value returned is n.
15566
15567
15568 <a name="7.20.8.2" href="#7.20.8.2"><h5>7.20.8.2 The wcstombs function</h5></a>
15569 <h6>Synopsis</h6>
15570 <p><!--para 1-->
15571 <pre>
15572         #include <a href="#7.20">&lt;stdlib.h&gt;</a>
15573         size_t wcstombs(char * restrict s,
15574              const wchar_t * restrict pwcs,
15575              size_t n);</pre>
15576 <h6>Description</h6>
15577 <p><!--para 2-->
15578  The wcstombs function converts a sequence of wide characters from the array pointed
15579  to by pwcs into a sequence of corresponding multibyte characters that begins in the
15580  initial shift state, and stores these multibyte characters into the array pointed to by s,
15581  stopping if a multibyte character would exceed the limit of n total bytes or if a null
15582  character is stored. Each wide character is converted as if by a call to the wctomb
15583  function, except that the conversion state of the wctomb function is not affected.
15584 <p><!--para 3-->
15585  No more than n bytes will be modified in the array pointed to by s. If copying takes place
15586  between objects that overlap, the behavior is undefined.
15587 <h6>Returns</h6>
15588 <p><!--para 4-->
15589  If a wide character is encountered that does not correspond to a valid multibyte character,
15590  the wcstombs function returns (size_t)(-1). Otherwise, the wcstombs function
15591  returns the number of bytes modified, not including a terminating null character, if
15592  any.267)
15593 <!--page 337 indent 4-->
15594
15595 <a name="7.21" href="#7.21"><h3>7.21 String handling <string.h></h3></a>
15596
15597 <a name="7.21.1" href="#7.21.1"><h4>7.21.1 String function conventions</h4></a>
15598 <p><!--para 1-->
15599  The header <a href="#7.21">&lt;string.h&gt;</a> declares one type and several functions, and defines one
15600  macro useful for manipulating arrays of character type and other objects treated as arrays
15601  of character type.<sup><a href="#note268"><b>268)</b></a></sup> The type is size_t and the macro is NULL (both described in
15602  <a href="#7.17">7.17</a>). Various methods are used for determining the lengths of the arrays, but in all cases
15603  a char * or void * argument points to the initial (lowest addressed) character of the
15604  array. If an array is accessed beyond the end of an object, the behavior is undefined.
15605 <p><!--para 2-->
15606  Where an argument declared as size_t n specifies the length of the array for a
15607  function, n can have the value zero on a call to that function. Unless explicitly stated
15608  otherwise in the description of a particular function in this subclause, pointer arguments
15609  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
15610  function that locates a character finds no occurrence, a function that compares two
15611  character sequences returns zero, and a function that copies characters copies zero
15612  characters.
15613 <p><!--para 3-->
15614  For all functions in this subclause, each character shall be interpreted as if it had the type
15615  unsigned char (and therefore every possible object representation is valid and has a
15616  different value).
15617
15618 <h6>footnotes</h6>
15619 <p><a name="note268">268)</a> See ''future library directions'' (<a href="#7.26.11">7.26.11</a>).
15620
15621
15622 <a name="7.21.2" href="#7.21.2"><h4>7.21.2 Copying functions</h4></a>
15623
15624 <a name="7.21.2.1" href="#7.21.2.1"><h5>7.21.2.1 The memcpy function</h5></a>
15625 <h6>Synopsis</h6>
15626 <p><!--para 1-->
15627 <pre>
15628           #include <a href="#7.21">&lt;string.h&gt;</a>
15629           void *memcpy(void * restrict s1,
15630                const void * restrict s2,
15631                size_t n);</pre>
15632 <h6>Description</h6>
15633 <p><!--para 2-->
15634  The memcpy function copies n characters from the object pointed to by s2 into the
15635  object pointed to by s1. If copying takes place between objects that overlap, the behavior
15636  is undefined.
15637 <h6>Returns</h6>
15638 <p><!--para 3-->
15639  The memcpy function returns the value of s1.
15640  
15641  
15642  
15643  
15644 <!--page 338 indent 4-->
15645
15646 <a name="7.21.2.2" href="#7.21.2.2"><h5>7.21.2.2 The memmove function</h5></a>
15647 <h6>Synopsis</h6>
15648 <p><!--para 1-->
15649 <pre>
15650         #include <a href="#7.21">&lt;string.h&gt;</a>
15651         void *memmove(void *s1, const void *s2, size_t n);</pre>
15652 <h6>Description</h6>
15653 <p><!--para 2-->
15654  The memmove function copies n characters from the object pointed to by s2 into the
15655  object pointed to by s1. Copying takes place as if the n characters from the object
15656  pointed to by s2 are first copied into a temporary array of n characters that does not
15657  overlap the objects pointed to by s1 and s2, and then the n characters from the
15658  temporary array are copied into the object pointed to by s1.
15659 <h6>Returns</h6>
15660 <p><!--para 3-->
15661  The memmove function returns the value of s1.
15662
15663 <a name="7.21.2.3" href="#7.21.2.3"><h5>7.21.2.3 The strcpy function</h5></a>
15664 <h6>Synopsis</h6>
15665 <p><!--para 1-->
15666 <pre>
15667         #include <a href="#7.21">&lt;string.h&gt;</a>
15668         char *strcpy(char * restrict s1,
15669              const char * restrict s2);</pre>
15670 <h6>Description</h6>
15671 <p><!--para 2-->
15672  The strcpy function copies the string pointed to by s2 (including the terminating null
15673  character) into the array pointed to by s1. If copying takes place between objects that
15674  overlap, the behavior is undefined.
15675 <h6>Returns</h6>
15676 <p><!--para 3-->
15677  The strcpy function returns the value of s1.
15678
15679 <a name="7.21.2.4" href="#7.21.2.4"><h5>7.21.2.4 The strncpy function</h5></a>
15680 <h6>Synopsis</h6>
15681 <p><!--para 1-->
15682 <pre>
15683         #include <a href="#7.21">&lt;string.h&gt;</a>
15684         char *strncpy(char * restrict s1,
15685              const char * restrict s2,
15686              size_t n);</pre>
15687 <h6>Description</h6>
15688 <p><!--para 2-->
15689  The strncpy function copies not more than n characters (characters that follow a null
15690  character are not copied) from the array pointed to by s2 to the array pointed to by
15691 <!--page 339 indent 4-->
15692  s1.<sup><a href="#note269"><b>269)</b></a></sup> If copying takes place between objects that overlap, the behavior is undefined.
15693 <p><!--para 3-->
15694  If the array pointed to by s2 is a string that is shorter than n characters, null characters
15695  are appended to the copy in the array pointed to by s1, until n characters in all have been
15696  written.
15697 <h6>Returns</h6>
15698 <p><!--para 4-->
15699  The strncpy function returns the value of s1.
15700
15701 <h6>footnotes</h6>
15702 <p><a name="note269">269)</a> Thus, if there is no null character in the first n characters of the array pointed to by s2, the result will
15703  not be null-terminated.
15704
15705
15706 <a name="7.21.3" href="#7.21.3"><h4>7.21.3 Concatenation functions</h4></a>
15707
15708 <a name="7.21.3.1" href="#7.21.3.1"><h5>7.21.3.1 The strcat function</h5></a>
15709 <h6>Synopsis</h6>
15710 <p><!--para 1-->
15711 <pre>
15712           #include <a href="#7.21">&lt;string.h&gt;</a>
15713           char *strcat(char * restrict s1,
15714                const char * restrict s2);</pre>
15715 <h6>Description</h6>
15716 <p><!--para 2-->
15717  The strcat function appends a copy of the string pointed to by s2 (including the
15718  terminating null character) to the end of the string pointed to by s1. The initial character
15719  of s2 overwrites the null character at the end of s1. If copying takes place between
15720  objects that overlap, the behavior is undefined.
15721 <h6>Returns</h6>
15722 <p><!--para 3-->
15723  The strcat function returns the value of s1.
15724
15725 <a name="7.21.3.2" href="#7.21.3.2"><h5>7.21.3.2 The strncat function</h5></a>
15726 <h6>Synopsis</h6>
15727 <p><!--para 1-->
15728 <pre>
15729           #include <a href="#7.21">&lt;string.h&gt;</a>
15730           char *strncat(char * restrict s1,
15731                const char * restrict s2,
15732                size_t n);</pre>
15733 <h6>Description</h6>
15734 <p><!--para 2-->
15735  The strncat function appends not more than n characters (a null character and
15736  characters that follow it are not appended) from the array pointed to by s2 to the end of
15737  the string pointed to by s1. The initial character of s2 overwrites the null character at the
15738  end of s1. A terminating null character is always appended to the result.<sup><a href="#note270"><b>270)</b></a></sup> If copying
15739  
15740 <!--page 340 indent 4-->
15741  takes place between objects that overlap, the behavior is undefined.
15742 <h6>Returns</h6>
15743 <p><!--para 3-->
15744  The strncat function returns the value of s1.
15745 <p><b> Forward references</b>: the strlen function (<a href="#7.21.6.3">7.21.6.3</a>).
15746
15747 <h6>footnotes</h6>
15748 <p><a name="note270">270)</a> Thus, the maximum number of characters that can end up in the array pointed to by s1 is
15749  strlen(s1)+n+1.
15750
15751
15752 <a name="7.21.4" href="#7.21.4"><h4>7.21.4 Comparison functions</h4></a>
15753 <p><!--para 1-->
15754  The sign of a nonzero value returned by the comparison functions memcmp, strcmp,
15755  and strncmp is determined by the sign of the difference between the values of the first
15756  pair of characters (both interpreted as unsigned char) that differ in the objects being
15757  compared.
15758
15759 <a name="7.21.4.1" href="#7.21.4.1"><h5>7.21.4.1 The memcmp function</h5></a>
15760 <h6>Synopsis</h6>
15761 <p><!--para 1-->
15762 <pre>
15763          #include <a href="#7.21">&lt;string.h&gt;</a>
15764          int memcmp(const void *s1, const void *s2, size_t n);</pre>
15765 <h6>Description</h6>
15766 <p><!--para 2-->
15767  The memcmp function compares the first n characters of the object pointed to by s1 to
15768  the first n characters of the object pointed to by s2.<sup><a href="#note271"><b>271)</b></a></sup>
15769 <h6>Returns</h6>
15770 <p><!--para 3-->
15771  The memcmp function returns an integer greater than, equal to, or less than zero,
15772  accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
15773  pointed to by s2.
15774
15775 <h6>footnotes</h6>
15776 <p><a name="note271">271)</a> The contents of ''holes'' used as padding for purposes of alignment within structure objects are
15777  indeterminate. Strings shorter than their allocated space and unions may also cause problems in
15778  comparison.
15779
15780
15781 <a name="7.21.4.2" href="#7.21.4.2"><h5>7.21.4.2 The strcmp function</h5></a>
15782 <h6>Synopsis</h6>
15783 <p><!--para 1-->
15784 <pre>
15785          #include <a href="#7.21">&lt;string.h&gt;</a>
15786          int strcmp(const char *s1, const char *s2);</pre>
15787 <h6>Description</h6>
15788 <p><!--para 2-->
15789  The strcmp function compares the string pointed to by s1 to the string pointed to by
15790  s2.
15791 <h6>Returns</h6>
15792 <p><!--para 3-->
15793  The strcmp function returns an integer greater than, equal to, or less than zero,
15794  accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
15795  
15796 <!--page 341 indent 4-->
15797  pointed to by s2.
15798
15799 <a name="7.21.4.3" href="#7.21.4.3"><h5>7.21.4.3 The strcoll function</h5></a>
15800 <h6>Synopsis</h6>
15801 <p><!--para 1-->
15802 <pre>
15803         #include <a href="#7.21">&lt;string.h&gt;</a>
15804         int strcoll(const char *s1, const char *s2);</pre>
15805 <h6>Description</h6>
15806 <p><!--para 2-->
15807  The strcoll function compares the string pointed to by s1 to the string pointed to by
15808  s2, both interpreted as appropriate to the LC_COLLATE category of the current locale.
15809 <h6>Returns</h6>
15810 <p><!--para 3-->
15811  The strcoll function returns an integer greater than, equal to, or less than zero,
15812  accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
15813  pointed to by s2 when both are interpreted as appropriate to the current locale.
15814
15815 <a name="7.21.4.4" href="#7.21.4.4"><h5>7.21.4.4 The strncmp function</h5></a>
15816 <h6>Synopsis</h6>
15817 <p><!--para 1-->
15818 <pre>
15819         #include <a href="#7.21">&lt;string.h&gt;</a>
15820         int strncmp(const char *s1, const char *s2, size_t n);</pre>
15821 <h6>Description</h6>
15822 <p><!--para 2-->
15823  The strncmp function compares not more than n characters (characters that follow a
15824  null character are not compared) from the array pointed to by s1 to the array pointed to
15825  by s2.
15826 <h6>Returns</h6>
15827 <p><!--para 3-->
15828  The strncmp function returns an integer greater than, equal to, or less than zero,
15829  accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
15830  to, or less than the possibly null-terminated array pointed to by s2.
15831
15832 <a name="7.21.4.5" href="#7.21.4.5"><h5>7.21.4.5 The strxfrm function</h5></a>
15833 <h6>Synopsis</h6>
15834 <p><!--para 1-->
15835 <pre>
15836         #include <a href="#7.21">&lt;string.h&gt;</a>
15837         size_t strxfrm(char * restrict s1,
15838              const char * restrict s2,
15839              size_t n);</pre>
15840 <h6>Description</h6>
15841 <p><!--para 2-->
15842  The strxfrm function transforms the string pointed to by s2 and places the resulting
15843  string into the array pointed to by s1. The transformation is such that if the strcmp
15844  function is applied to two transformed strings, it returns a value greater than, equal to, or
15845 <!--page 342 indent 4-->
15846  less than zero, corresponding to the result of the strcoll function applied to the same
15847  two original strings. No more than n characters are placed into the resulting array
15848  pointed to by s1, including the terminating null character. If n is zero, s1 is permitted to
15849  be a null pointer. If copying takes place between objects that overlap, the behavior is
15850  undefined.
15851 <h6>Returns</h6>
15852 <p><!--para 3-->
15853  The strxfrm function returns the length of the transformed string (not including the
15854  terminating null character). If the value returned is n or more, the contents of the array
15855  pointed to by s1 are indeterminate.
15856 <p><!--para 4-->
15857  EXAMPLE The value of the following expression is the size of the array needed to hold the
15858  transformation of the string pointed to by s.
15859 <pre>
15860         1 + strxfrm(NULL, s, 0)</pre>
15861  
15862
15863 <a name="7.21.5" href="#7.21.5"><h4>7.21.5 Search functions</h4></a>
15864
15865 <a name="7.21.5.1" href="#7.21.5.1"><h5>7.21.5.1 The memchr function</h5></a>
15866 <h6>Synopsis</h6>
15867 <p><!--para 1-->
15868 <pre>
15869         #include <a href="#7.21">&lt;string.h&gt;</a>
15870         void *memchr(const void *s, int c, size_t n);</pre>
15871 <h6>Description</h6>
15872 <p><!--para 2-->
15873  The memchr function locates the first occurrence of c (converted to an unsigned
15874  char) in the initial n characters (each interpreted as unsigned char) of the object
15875  pointed to by s.
15876 <h6>Returns</h6>
15877 <p><!--para 3-->
15878  The memchr function returns a pointer to the located character, or a null pointer if the
15879  character does not occur in the object.
15880
15881 <a name="7.21.5.2" href="#7.21.5.2"><h5>7.21.5.2 The strchr function</h5></a>
15882 <h6>Synopsis</h6>
15883 <p><!--para 1-->
15884 <pre>
15885         #include <a href="#7.21">&lt;string.h&gt;</a>
15886         char *strchr(const char *s, int c);</pre>
15887 <h6>Description</h6>
15888 <p><!--para 2-->
15889  The strchr function locates the first occurrence of c (converted to a char) in the
15890  string pointed to by s. The terminating null character is considered to be part of the
15891  string.
15892 <h6>Returns</h6>
15893 <p><!--para 3-->
15894  The strchr function returns a pointer to the located character, or a null pointer if the
15895  character does not occur in the string.
15896 <!--page 343 indent 4-->
15897
15898 <a name="7.21.5.3" href="#7.21.5.3"><h5>7.21.5.3 The strcspn function</h5></a>
15899 <h6>Synopsis</h6>
15900 <p><!--para 1-->
15901 <pre>
15902         #include <a href="#7.21">&lt;string.h&gt;</a>
15903         size_t strcspn(const char *s1, const char *s2);</pre>
15904 <h6>Description</h6>
15905 <p><!--para 2-->
15906  The strcspn function computes the length of the maximum initial segment of the string
15907  pointed to by s1 which consists entirely of characters not from the string pointed to by
15908  s2.
15909 <h6>Returns</h6>
15910 <p><!--para 3-->
15911  The strcspn function returns the length of the segment.
15912
15913 <a name="7.21.5.4" href="#7.21.5.4"><h5>7.21.5.4 The strpbrk function</h5></a>
15914 <h6>Synopsis</h6>
15915 <p><!--para 1-->
15916 <pre>
15917         #include <a href="#7.21">&lt;string.h&gt;</a>
15918         char *strpbrk(const char *s1, const char *s2);</pre>
15919 <h6>Description</h6>
15920 <p><!--para 2-->
15921  The strpbrk function locates the first occurrence in the string pointed to by s1 of any
15922  character from the string pointed to by s2.
15923 <h6>Returns</h6>
15924 <p><!--para 3-->
15925  The strpbrk function returns a pointer to the character, or a null pointer if no character
15926  from s2 occurs in s1.
15927
15928 <a name="7.21.5.5" href="#7.21.5.5"><h5>7.21.5.5 The strrchr function</h5></a>
15929 <h6>Synopsis</h6>
15930 <p><!--para 1-->
15931 <pre>
15932         #include <a href="#7.21">&lt;string.h&gt;</a>
15933         char *strrchr(const char *s, int c);</pre>
15934 <h6>Description</h6>
15935 <p><!--para 2-->
15936  The strrchr function locates the last occurrence of c (converted to a char) in the
15937  string pointed to by s. The terminating null character is considered to be part of the
15938  string.
15939 <h6>Returns</h6>
15940 <p><!--para 3-->
15941  The strrchr function returns a pointer to the character, or a null pointer if c does not
15942  occur in the string.
15943 <!--page 344 indent 4-->
15944
15945 <a name="7.21.5.6" href="#7.21.5.6"><h5>7.21.5.6 The strspn function</h5></a>
15946 <h6>Synopsis</h6>
15947 <p><!--para 1-->
15948 <pre>
15949         #include <a href="#7.21">&lt;string.h&gt;</a>
15950         size_t strspn(const char *s1, const char *s2);</pre>
15951 <h6>Description</h6>
15952 <p><!--para 2-->
15953  The strspn function computes the length of the maximum initial segment of the string
15954  pointed to by s1 which consists entirely of characters from the string pointed to by s2.
15955 <h6>Returns</h6>
15956 <p><!--para 3-->
15957  The strspn function returns the length of the segment.
15958
15959 <a name="7.21.5.7" href="#7.21.5.7"><h5>7.21.5.7 The strstr function</h5></a>
15960 <h6>Synopsis</h6>
15961 <p><!--para 1-->
15962 <pre>
15963         #include <a href="#7.21">&lt;string.h&gt;</a>
15964         char *strstr(const char *s1, const char *s2);</pre>
15965 <h6>Description</h6>
15966 <p><!--para 2-->
15967  The strstr function locates the first occurrence in the string pointed to by s1 of the
15968  sequence of characters (excluding the terminating null character) in the string pointed to
15969  by s2.
15970 <h6>Returns</h6>
15971 <p><!--para 3-->
15972  The strstr function returns a pointer to the located string, or a null pointer if the string
15973  is not found. If s2 points to a string with zero length, the function returns s1.
15974
15975 <a name="7.21.5.8" href="#7.21.5.8"><h5>7.21.5.8 The strtok function</h5></a>
15976 <h6>Synopsis</h6>
15977 <p><!--para 1-->
15978 <pre>
15979         #include <a href="#7.21">&lt;string.h&gt;</a>
15980         char *strtok(char * restrict s1,
15981              const char * restrict s2);</pre>
15982 <h6>Description</h6>
15983 <p><!--para 2-->
15984  A sequence of calls to the strtok function breaks the string pointed to by s1 into a
15985  sequence of tokens, each of which is delimited by a character from the string pointed to
15986  by s2. The first call in the sequence has a non-null first argument; subsequent calls in the
15987  sequence have a null first argument. The separator string pointed to by s2 may be
15988  different from call to call.
15989 <p><!--para 3-->
15990  The first call in the sequence searches the string pointed to by s1 for the first character
15991  that is not contained in the current separator string pointed to by s2. If no such character
15992  is found, then there are no tokens in the string pointed to by s1 and the strtok function
15993 <!--page 345 indent 4-->
15994  returns a null pointer. If such a character is found, it is the start of the first token.
15995 <p><!--para 4-->
15996  The strtok function then searches from there for a character that is contained in the
15997  current separator string. If no such character is found, the current token extends to the
15998  end of the string pointed to by s1, and subsequent searches for a token will return a null
15999  pointer. If such a character is found, it is overwritten by a null character, which
16000  terminates the current token. The strtok function saves a pointer to the following
16001  character, from which the next search for a token will start.
16002 <p><!--para 5-->
16003  Each subsequent call, with a null pointer as the value of the first argument, starts
16004  searching from the saved pointer and behaves as described above.
16005 <p><!--para 6-->
16006  The implementation shall behave as if no library function calls the strtok function.
16007 <h6>Returns</h6>
16008 <p><!--para 7-->
16009  The strtok function returns a pointer to the first character of a token, or a null pointer
16010  if there is no token.
16011 <p><!--para 8-->
16012  EXAMPLE
16013 <pre>
16014          #include <a href="#7.21">&lt;string.h&gt;</a>
16015          static char str[] = "?a???b,,,#c";
16016          char *t;
16017          t   =   strtok(str, "?");       //   t   points to the token "a"
16018          t   =   strtok(NULL, ",");      //   t   points to the token "??b"
16019          t   =   strtok(NULL, "#,");     //   t   points to the token "c"
16020          t   =   strtok(NULL, "?");      //   t   is a null pointer</pre>
16021  
16022
16023 <a name="7.21.6" href="#7.21.6"><h4>7.21.6 Miscellaneous functions</h4></a>
16024
16025 <a name="7.21.6.1" href="#7.21.6.1"><h5>7.21.6.1 The memset function</h5></a>
16026 <h6>Synopsis</h6>
16027 <p><!--para 1-->
16028 <pre>
16029          #include <a href="#7.21">&lt;string.h&gt;</a>
16030          void *memset(void *s, int c, size_t n);</pre>
16031 <h6>Description</h6>
16032 <p><!--para 2-->
16033  The memset function copies the value of c (converted to an unsigned char) into
16034  each of the first n characters of the object pointed to by s.
16035 <h6>Returns</h6>
16036 <p><!--para 3-->
16037  The memset function returns the value of s.
16038 <!--page 346 indent 4-->
16039
16040 <a name="7.21.6.2" href="#7.21.6.2"><h5>7.21.6.2 The strerror function</h5></a>
16041 <h6>Synopsis</h6>
16042 <p><!--para 1-->
16043 <pre>
16044         #include <a href="#7.21">&lt;string.h&gt;</a>
16045         char *strerror(int errnum);</pre>
16046 <h6>Description</h6>
16047 <p><!--para 2-->
16048  The strerror function maps the number in errnum to a message string. Typically,
16049  the values for errnum come from errno, but strerror shall map any value of type
16050  int to a message.
16051 <p><!--para 3-->
16052  The implementation shall behave as if no library function calls the strerror function.
16053 <h6>Returns</h6>
16054 <p><!--para 4-->
16055  The strerror function returns a pointer to the string, the contents of which are locale-
16056  specific. The array pointed to shall not be modified by the program, but may be
16057  overwritten by a subsequent call to the strerror function.
16058
16059 <a name="7.21.6.3" href="#7.21.6.3"><h5>7.21.6.3 The strlen function</h5></a>
16060 <h6>Synopsis</h6>
16061 <p><!--para 1-->
16062 <pre>
16063         #include <a href="#7.21">&lt;string.h&gt;</a>
16064         size_t strlen(const char *s);</pre>
16065 <h6>Description</h6>
16066 <p><!--para 2-->
16067  The strlen function computes the length of the string pointed to by s.
16068 <h6>Returns</h6>
16069 <p><!--para 3-->
16070  The strlen function returns the number of characters that precede the terminating null
16071  character.
16072 <!--page 347 indent 4-->
16073
16074 <a name="7.22" href="#7.22"><h3>7.22 Type-generic math <tgmath.h></h3></a>
16075 <p><!--para 1-->
16076  The header <a href="#7.22">&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
16077  defines several type-generic macros.
16078 <p><!--para 2-->
16079  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
16080  double) suffix, several have one or more parameters whose corresponding real type is
16081  double. For each such function, except modf, there is a corresponding type-generic
16082  macro.<sup><a href="#note272"><b>272)</b></a></sup> The parameters whose corresponding real type is double in the function
16083  synopsis are generic parameters. Use of the macro invokes a function whose
16084  corresponding real type and type domain are determined by the arguments for the generic
16085  parameters.<sup><a href="#note273"><b>273)</b></a></sup>
16086 <p><!--para 3-->
16087  Use of the macro invokes a function whose generic parameters have the corresponding
16088  real type determined as follows:
16089 <ul>
16090 <li>  First, if any argument for generic parameters has type long double, the type
16091  determined is long double.
16092 <li>  Otherwise, if any argument for generic parameters has type double or is of integer
16093  type, the type determined is double.
16094 <li>  Otherwise, the type determined is float.
16095 </ul>
16096 <p><!--para 4-->
16097  For each unsuffixed function in <a href="#7.12">&lt;math.h&gt;</a> for which there is a function in
16098  <a href="#7.3">&lt;complex.h&gt;</a> with the same name except for a c prefix, the corresponding type-
16099  generic macro (for both functions) has the same name as the function in <a href="#7.12">&lt;math.h&gt;</a>. The
16100  corresponding type-generic macro for fabs and cabs is fabs.
16101  
16102  
16103  
16104  
16105 <!--page 348 indent 4-->
16106 <pre>
16107          <a href="#7.12">&lt;math.h&gt;</a>          <a href="#7.3">&lt;complex.h&gt;</a>           type-generic
16108           function            function              macro
16109            acos               cacos                acos
16110            asin               casin                asin
16111            atan               catan                atan
16112            acosh              cacosh               acosh
16113            asinh              casinh               asinh
16114            atanh              catanh               atanh
16115            cos                ccos                 cos
16116            sin                csin                 sin
16117            tan                ctan                 tan
16118            cosh               ccosh                cosh
16119            sinh               csinh                sinh
16120            tanh               ctanh                tanh
16121            exp                cexp                 exp
16122            log                clog                 log
16123            pow                cpow                 pow
16124            sqrt               csqrt                sqrt
16125            fabs               cabs                 fabs</pre>
16126  If at least one argument for a generic parameter is complex, then use of the macro invokes
16127  a complex function; otherwise, use of the macro invokes a real function.
16128 <p><!--para 5-->
16129  For each unsuffixed function in <a href="#7.12">&lt;math.h&gt;</a> without a c-prefixed counterpart in
16130  <a href="#7.3">&lt;complex.h&gt;</a> (except modf), the corresponding type-generic macro has the same
16131  name as the function. These type-generic macros are:
16132 <pre>
16133        atan2                fma                  llround              remainder
16134        cbrt                 fmax                 log10                remquo
16135        ceil                 fmin                 log1p                rint
16136        copysign             fmod                 log2                 round
16137        erf                  frexp                logb                 scalbn
16138        erfc                 hypot                lrint                scalbln
16139        exp2                 ilogb                lround               tgamma
16140        expm1                ldexp                nearbyint            trunc
16141        fdim                 lgamma               nextafter
16142        floor                llrint               nexttoward</pre>
16143  If all arguments for generic parameters are real, then use of the macro invokes a real
16144  function; otherwise, use of the macro results in undefined behavior.
16145 <p><!--para 6-->
16146  For each unsuffixed function in <a href="#7.3">&lt;complex.h&gt;</a> that is not a c-prefixed counterpart to a
16147  function in <a href="#7.12">&lt;math.h&gt;</a>, the corresponding type-generic macro has the same name as the
16148  function. These type-generic macros are:
16149 <!--page 349 indent 4-->
16150 <pre>
16151          carg                    conj                     creal
16152          cimag                   cproj</pre>
16153  Use of the macro with any real or complex argument invokes a complex function.
16154 <p><!--para 7-->
16155  EXAMPLE       With the declarations
16156 <pre>
16157          #include <a href="#7.22">&lt;tgmath.h&gt;</a>
16158          int n;
16159          float f;
16160          double d;
16161          long double ld;
16162          float complex fc;
16163          double complex dc;
16164          long double complex ldc;</pre>
16165  functions invoked by use of type-generic macros are shown in the following table:
16166 <!--page 350 indent 4-->
16167 <pre>
16168                   macro use                                  invokes
16169              exp(n)                              exp(n), the function
16170              acosh(f)                            acoshf(f)
16171              sin(d)                              sin(d), the function
16172              atan(ld)                            atanl(ld)
16173              log(fc)                             clogf(fc)
16174              sqrt(dc)                            csqrt(dc)
16175              pow(ldc, f)                         cpowl(ldc, f)
16176              remainder(n, n)                     remainder(n, n), the function
16177              nextafter(d, f)                     nextafter(d, f), the function
16178              nexttoward(f, ld)                   nexttowardf(f, ld)
16179              copysign(n, ld)                     copysignl(n, ld)
16180              ceil(fc)                            undefined behavior
16181              rint(dc)                            undefined behavior
16182              fmax(ldc, ld)                       undefined behavior
16183              carg(n)                             carg(n), the function
16184              cproj(f)                            cprojf(f)
16185              creal(d)                            creal(d), the function
16186              cimag(ld)                           cimagl(ld)
16187              fabs(fc)                            cabsf(fc)
16188              carg(dc)                            carg(dc), the function
16189              cproj(ldc)                          cprojl(ldc)</pre>
16190
16191 <h6>footnotes</h6>
16192 <p><a name="note272">272)</a> Like other function-like macros in Standard libraries, each type-generic macro can be suppressed to
16193  make available the corresponding ordinary function.
16194
16195 <p><a name="note273">273)</a> If the type of the argument is not compatible with the type of the parameter for the selected function,
16196  the behavior is undefined.
16197
16198
16199 <a name="7.23" href="#7.23"><h3>7.23 Date and time <time.h></h3></a>
16200
16201 <a name="7.23.1" href="#7.23.1"><h4>7.23.1 Components of time</h4></a>
16202 <p><!--para 1-->
16203  The header <a href="#7.23">&lt;time.h&gt;</a> defines two macros, and declares several types and functions for
16204  manipulating time. Many functions deal with a calendar time that represents the current
16205  date (according to the Gregorian calendar) and time. Some functions deal with local
16206  time, which is the calendar time expressed for some specific time zone, and with Daylight
16207  Saving Time, which is a temporary change in the algorithm for determining local time.
16208  The local time zone and Daylight Saving Time are implementation-defined.
16209 <p><!--para 2-->
16210  The macros defined are NULL (described in <a href="#7.17">7.17</a>); and
16211 <pre>
16212          CLOCKS_PER_SEC</pre>
16213  which expands to an expression with type clock_t (described below) that is the
16214  number per second of the value returned by the clock function.
16215 <p><!--para 3-->
16216  The types declared are size_t (described in <a href="#7.17">7.17</a>);
16217 <pre>
16218          clock_t</pre>
16219  and
16220 <pre>
16221          time_t</pre>
16222  which are arithmetic types capable of representing times; and
16223 <pre>
16224          struct tm</pre>
16225  which holds the components of a calendar time, called the broken-down time.
16226 <p><!--para 4-->
16227  The range and precision of times representable in clock_t and time_t are
16228  implementation-defined. The tm structure shall contain at least the following members,
16229  in any order. The semantics of the members and their normal ranges are expressed in the
16230  comments.<sup><a href="#note274"><b>274)</b></a></sup>
16231 <pre>
16232          int    tm_sec;           //   seconds after the minute -- [0, 60]
16233          int    tm_min;           //   minutes after the hour -- [0, 59]
16234          int    tm_hour;          //   hours since midnight -- [0, 23]
16235          int    tm_mday;          //   day of the month -- [1, 31]
16236          int    tm_mon;           //   months since January -- [0, 11]
16237          int    tm_year;          //   years since 1900
16238          int    tm_wday;          //   days since Sunday -- [0, 6]
16239          int    tm_yday;          //   days since January 1 -- [0, 365]
16240          int    tm_isdst;         //   Daylight Saving Time flag</pre>
16241  
16242  
16243  
16244 <!--page 351 indent 4-->
16245  The value of tm_isdst is positive if Daylight Saving Time is in effect, zero if Daylight
16246  Saving Time is not in effect, and negative if the information is not available.
16247
16248 <h6>footnotes</h6>
16249 <p><a name="note274">274)</a> The range [0, 60] for tm_sec allows for a positive leap second.
16250
16251
16252 <a name="7.23.2" href="#7.23.2"><h4>7.23.2 Time manipulation functions</h4></a>
16253
16254 <a name="7.23.2.1" href="#7.23.2.1"><h5>7.23.2.1 The clock function</h5></a>
16255 <h6>Synopsis</h6>
16256 <p><!--para 1-->
16257 <pre>
16258          #include <a href="#7.23">&lt;time.h&gt;</a>
16259          clock_t clock(void);</pre>
16260 <h6>Description</h6>
16261 <p><!--para 2-->
16262  The clock function determines the processor time used.
16263 <h6>Returns</h6>
16264 <p><!--para 3-->
16265  The clock function returns the implementation's best approximation to the processor
16266  time used by the program since the beginning of an implementation-defined era related
16267  only to the program invocation. To determine the time in seconds, the value returned by
16268  the clock function should be divided by the value of the macro CLOCKS_PER_SEC. If
16269  the processor time used is not available or its value cannot be represented, the function
16270  returns the value (clock_t)(-1).<sup><a href="#note275"><b>275)</b></a></sup>
16271
16272 <h6>footnotes</h6>
16273 <p><a name="note275">275)</a> In order to measure the time spent in a program, the clock function should be called at the start of
16274  the program and its return value subtracted from the value returned by subsequent calls.
16275
16276
16277 <a name="7.23.2.2" href="#7.23.2.2"><h5>7.23.2.2 The difftime function</h5></a>
16278 <h6>Synopsis</h6>
16279 <p><!--para 1-->
16280 <pre>
16281          #include <a href="#7.23">&lt;time.h&gt;</a>
16282          double difftime(time_t time1, time_t time0);</pre>
16283 <h6>Description</h6>
16284 <p><!--para 2-->
16285  The difftime function computes the difference between two calendar times: time1 -
16286  time0.
16287 <h6>Returns</h6>
16288 <p><!--para 3-->
16289  The difftime function returns the difference expressed in seconds as a double.
16290  
16291  
16292  
16293  
16294 <!--page 352 indent 4-->
16295
16296 <a name="7.23.2.3" href="#7.23.2.3"><h5>7.23.2.3 The mktime function</h5></a>
16297 <h6>Synopsis</h6>
16298 <p><!--para 1-->
16299 <pre>
16300          #include <a href="#7.23">&lt;time.h&gt;</a>
16301          time_t mktime(struct tm *timeptr);</pre>
16302 <h6>Description</h6>
16303 <p><!--para 2-->
16304  The mktime function converts the broken-down time, expressed as local time, in the
16305  structure pointed to by timeptr into a calendar time value with the same encoding as
16306  that of the values returned by the time function. The original values of the tm_wday
16307  and tm_yday components of the structure are ignored, and the original values of the
16308  other components are not restricted to the ranges indicated above.<sup><a href="#note276"><b>276)</b></a></sup> On successful
16309  completion, the values of the tm_wday and tm_yday components of the structure are
16310  set appropriately, and the other components are set to represent the specified calendar
16311  time, but with their values forced to the ranges indicated above; the final value of
16312  tm_mday is not set until tm_mon and tm_year are determined.
16313 <h6>Returns</h6>
16314 <p><!--para 3-->
16315  The mktime function returns the specified calendar time encoded as a value of type
16316  time_t. If the calendar time cannot be represented, the function returns the value
16317  (time_t)(-1).
16318 <p><!--para 4-->
16319  EXAMPLE       What day of the week is July 4, 2001?
16320 <pre>
16321          #include <a href="#7.19">&lt;stdio.h&gt;</a>
16322          #include <a href="#7.23">&lt;time.h&gt;</a>
16323          static const char *const wday[] = {
16324                  "Sunday", "Monday", "Tuesday", "Wednesday",
16325                  "Thursday", "Friday", "Saturday", "-unknown-"
16326          };
16327          struct tm time_str;
16328          /* ... */</pre>
16329  
16330  
16331  
16332  
16333 <!--page 353 indent 4-->
16334 <pre>
16335         time_str.tm_year   = 2001 - 1900;
16336         time_str.tm_mon    = 7 - 1;
16337         time_str.tm_mday   = 4;
16338         time_str.tm_hour   = 0;
16339         time_str.tm_min    = 0;
16340         time_str.tm_sec    = 1;
16341         time_str.tm_isdst = -1;
16342         if (mktime(&amp;time_str) == (time_t)(-1))
16343               time_str.tm_wday = 7;
16344         printf("%s\n", wday[time_str.tm_wday]);</pre>
16345  
16346
16347 <h6>footnotes</h6>
16348 <p><a name="note276">276)</a> Thus, a positive or zero value for tm_isdst causes the mktime function to presume initially that
16349  Daylight Saving Time, respectively, is or is not in effect for the specified time. A negative value
16350  causes it to attempt to determine whether Daylight Saving Time is in effect for the specified time.
16351
16352
16353 <a name="7.23.2.4" href="#7.23.2.4"><h5>7.23.2.4 The time function</h5></a>
16354 <h6>Synopsis</h6>
16355 <p><!--para 1-->
16356 <pre>
16357         #include <a href="#7.23">&lt;time.h&gt;</a>
16358         time_t time(time_t *timer);</pre>
16359 <h6>Description</h6>
16360 <p><!--para 2-->
16361  The time function determines the current calendar time. The encoding of the value is
16362  unspecified.
16363 <h6>Returns</h6>
16364 <p><!--para 3-->
16365  The time function returns the implementation's best approximation to the current
16366  calendar time. The value (time_t)(-1) is returned if the calendar time is not
16367  available. If timer is not a null pointer, the return value is also assigned to the object it
16368  points to.
16369
16370 <a name="7.23.3" href="#7.23.3"><h4>7.23.3 Time conversion functions</h4></a>
16371 <p><!--para 1-->
16372  Except for the strftime function, these functions each return a pointer to one of two
16373  types of static objects: a broken-down time structure or an array of char. Execution of
16374  any of the functions that return a pointer to one of these object types may overwrite the
16375  information in any object of the same type pointed to by the value returned from any
16376  previous call to any of them. The implementation shall behave as if no other library
16377  functions call these functions.
16378
16379 <a name="7.23.3.1" href="#7.23.3.1"><h5>7.23.3.1 The asctime function</h5></a>
16380 <h6>Synopsis</h6>
16381 <p><!--para 1-->
16382 <pre>
16383         #include <a href="#7.23">&lt;time.h&gt;</a>
16384         char *asctime(const struct tm *timeptr);</pre>
16385 <h6>Description</h6>
16386 <p><!--para 2-->
16387  The asctime function converts the broken-down time in the structure pointed to by
16388  timeptr into a string in the form
16389 <!--page 354 indent 4-->
16390 <pre>
16391         Sun Sep 16 01:03:52 1973\n\0</pre>
16392  using the equivalent of the following algorithm.
16393  char *asctime(const struct tm *timeptr)
16394  {
16395 <pre>
16396       static const char wday_name[7][3] = {
16397            "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
16398       };
16399       static const char mon_name[12][3] = {
16400            "Jan", "Feb", "Mar", "Apr", "May", "Jun",
16401            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
16402       };
16403       static char result[26];
16404         sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
16405              wday_name[timeptr-&gt;tm_wday],
16406              mon_name[timeptr-&gt;tm_mon],
16407              timeptr-&gt;tm_mday, timeptr-&gt;tm_hour,
16408              timeptr-&gt;tm_min, timeptr-&gt;tm_sec,
16409              1900 + timeptr-&gt;tm_year);
16410         return result;</pre>
16411  }
16412 <h6>Returns</h6>
16413 <p><!--para 3-->
16414  The asctime function returns a pointer to the string.
16415
16416 <a name="7.23.3.2" href="#7.23.3.2"><h5>7.23.3.2 The ctime function</h5></a>
16417 <h6>Synopsis</h6>
16418 <p><!--para 1-->
16419 <pre>
16420         #include <a href="#7.23">&lt;time.h&gt;</a>
16421         char *ctime(const time_t *timer);</pre>
16422 <h6>Description</h6>
16423 <p><!--para 2-->
16424  The ctime function converts the calendar time pointed to by timer to local time in the
16425  form of a string. It is equivalent to
16426 <pre>
16427         asctime(localtime(timer))</pre>
16428 <h6>Returns</h6>
16429 <p><!--para 3-->
16430  The ctime function returns the pointer returned by the asctime function with that
16431  broken-down time as argument.
16432 <p><b> Forward references</b>: the localtime function (<a href="#7.23.3.4">7.23.3.4</a>).
16433 <!--page 355 indent 4-->
16434
16435 <a name="7.23.3.3" href="#7.23.3.3"><h5>7.23.3.3 The gmtime function</h5></a>
16436 <h6>Synopsis</h6>
16437 <p><!--para 1-->
16438 <pre>
16439         #include <a href="#7.23">&lt;time.h&gt;</a>
16440         struct tm *gmtime(const time_t *timer);</pre>
16441 <h6>Description</h6>
16442 <p><!--para 2-->
16443  The gmtime function converts the calendar time pointed to by timer into a broken-
16444  down time, expressed as UTC.
16445 <h6>Returns</h6>
16446 <p><!--para 3-->
16447  The gmtime function returns a pointer to the broken-down time, or a null pointer if the
16448  specified time cannot be converted to UTC.
16449
16450 <a name="7.23.3.4" href="#7.23.3.4"><h5>7.23.3.4 The localtime function</h5></a>
16451 <h6>Synopsis</h6>
16452 <p><!--para 1-->
16453 <pre>
16454         #include <a href="#7.23">&lt;time.h&gt;</a>
16455         struct tm *localtime(const time_t *timer);</pre>
16456 <h6>Description</h6>
16457 <p><!--para 2-->
16458  The localtime function converts the calendar time pointed to by timer into a
16459  broken-down time, expressed as local time.
16460 <h6>Returns</h6>
16461 <p><!--para 3-->
16462  The localtime function returns a pointer to the broken-down time, or a null pointer if
16463  the specified time cannot be converted to local time.
16464
16465 <a name="7.23.3.5" href="#7.23.3.5"><h5>7.23.3.5 The strftime function</h5></a>
16466 <h6>Synopsis</h6>
16467 <p><!--para 1-->
16468 <pre>
16469         #include <a href="#7.23">&lt;time.h&gt;</a>
16470         size_t strftime(char * restrict s,
16471              size_t maxsize,
16472              const char * restrict format,
16473              const struct tm * restrict timeptr);</pre>
16474 <h6>Description</h6>
16475 <p><!--para 2-->
16476  The strftime function places characters into the array pointed to by s as controlled by
16477  the string pointed to by format. The format shall be a multibyte character sequence,
16478  beginning and ending in its initial shift state. The format string consists of zero or
16479  more conversion specifiers and ordinary multibyte characters. A conversion specifier
16480  consists of a % character, possibly followed by an E or O modifier character (described
16481  below), followed by a character that determines the behavior of the conversion specifier.
16482  All ordinary multibyte characters (including the terminating null character) are copied
16483 <!--page 356 indent 4-->
16484  unchanged into the array. If copying takes place between objects that overlap, the
16485  behavior is undefined. No more than maxsize characters are placed into the array.
16486 <p><!--para 3-->
16487  Each conversion specifier is replaced by appropriate characters as described in the
16488  following list. The appropriate characters are determined using the LC_TIME category
16489  of the current locale and by the values of zero or more members of the broken-down time
16490  structure pointed to by timeptr, as specified in brackets in the description. If any of
16491  the specified values is outside the normal range, the characters stored are unspecified.
16492  %a    is replaced by the locale's abbreviated weekday name. [tm_wday]
16493  %A    is replaced by the locale's full weekday name. [tm_wday]
16494  %b    is replaced by the locale's abbreviated month name. [tm_mon]
16495  %B    is replaced by the locale's full month name. [tm_mon]
16496  %c    is replaced by the locale's appropriate date and time representation. [all specified
16497 <pre>
16498        in <a href="#7.23.1">7.23.1</a>]</pre>
16499  %C    is replaced by the year divided by 100 and truncated to an integer, as a decimal
16500 <pre>
16501        number (00-99). [tm_year]</pre>
16502  %d    is replaced by the day of the month as a decimal number (01-31). [tm_mday]
16503  %D    is equivalent to ''%m/%d/%y''. [tm_mon, tm_mday, tm_year]
16504  %e    is replaced by the day of the month as a decimal number (1-31); a single digit is
16505 <pre>
16506        preceded by a space. [tm_mday]</pre>
16507  %F    is equivalent to ''%Y-%m-%d'' (the ISO 8601 date format). [tm_year, tm_mon,
16508 <pre>
16509        tm_mday]</pre>
16510  %g    is replaced by the last 2 digits of the week-based year (see below) as a decimal
16511 <pre>
16512        number (00-99). [tm_year, tm_wday, tm_yday]</pre>
16513  %G    is replaced by the week-based year (see below) as a decimal number (e.g., 1997).
16514 <pre>
16515        [tm_year, tm_wday, tm_yday]</pre>
16516  %h    is equivalent to ''%b''. [tm_mon]
16517  %H    is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour]
16518  %I    is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour]
16519  %j    is replaced by the day of the year as a decimal number (001-366). [tm_yday]
16520  %m    is replaced by the month as a decimal number (01-12). [tm_mon]
16521  %M    is replaced by the minute as a decimal number (00-59). [tm_min]
16522  %n    is replaced by a new-line character.
16523  %p    is replaced by the locale's equivalent of the AM/PM designations associated with a
16524 <pre>
16525        12-hour clock. [tm_hour]</pre>
16526  %r    is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec]
16527  %R    is equivalent to ''%H:%M''. [tm_hour, tm_min]
16528  %S    is replaced by the second as a decimal number (00-60). [tm_sec]
16529  %t    is replaced by a horizontal-tab character.
16530  %T    is equivalent to ''%H:%M:%S'' (the ISO 8601 time format). [tm_hour, tm_min,
16531 <!--page 357 indent 4-->
16532 <pre>
16533        tm_sec]</pre>
16534  %u   is replaced by the ISO 8601 weekday as a decimal number (1-7), where Monday
16535 <pre>
16536       is 1. [tm_wday]</pre>
16537  %U   is replaced by the week number of the year (the first Sunday as the first day of week
16538 <pre>
16539       1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]</pre>
16540  %V   is replaced by the ISO 8601 week number (see below) as a decimal number
16541 <pre>
16542       (01-53). [tm_year, tm_wday, tm_yday]</pre>
16543  %w   is replaced by the weekday as a decimal number (0-6), where Sunday is 0.
16544 <pre>
16545       [tm_wday]</pre>
16546  %W   is replaced by the week number of the year (the first Monday as the first day of
16547 <pre>
16548       week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]</pre>
16549  %x   is replaced by the locale's appropriate date representation. [all specified in <a href="#7.23.1">7.23.1</a>]
16550  %X   is replaced by the locale's appropriate time representation. [all specified in <a href="#7.23.1">7.23.1</a>]
16551  %y   is replaced by the last 2 digits of the year as a decimal number (00-99).
16552 <pre>
16553       [tm_year]</pre>
16554  %Y   is replaced by the year as a decimal number (e.g., 1997). [tm_year]
16555  %z   is replaced by the offset from UTC in the ISO 8601 format ''-0430'' (meaning 4
16556 <pre>
16557       hours 30 minutes behind UTC, west of Greenwich), or by no characters if no time
16558       zone is determinable. [tm_isdst]</pre>
16559  %Z   is replaced by the locale's time zone name or abbreviation, or by no characters if no
16560 <pre>
16561       time zone is determinable. [tm_isdst]</pre>
16562  %%   is replaced by %.
16563 <p><!--para 4-->
16564  Some conversion specifiers can be modified by the inclusion of an E or O modifier
16565  character to indicate an alternative format or specification. If the alternative format or
16566  specification does not exist for the current locale, the modifier is ignored.
16567  %Ec is replaced by the locale's alternative date and time representation.
16568  %EC is replaced by the name of the base year (period) in the locale's alternative
16569 <pre>
16570      representation.</pre>
16571  %Ex is replaced by the locale's alternative date representation.
16572  %EX is replaced by the locale's alternative time representation.
16573  %Ey is replaced by the offset from %EC (year only) in the locale's alternative
16574 <pre>
16575      representation.</pre>
16576  %EY is replaced by the locale's full alternative year representation.
16577  %Od is replaced by the day of the month, using the locale's alternative numeric symbols
16578 <pre>
16579      (filled as needed with leading zeros, or with leading spaces if there is no alternative
16580      symbol for zero).</pre>
16581  %Oe is replaced by the day of the month, using the locale's alternative numeric symbols
16582 <pre>
16583      (filled as needed with leading spaces).</pre>
16584  %OH is replaced by the hour (24-hour clock), using the locale's alternative numeric
16585 <!--page 358 indent 4-->
16586 <pre>
16587      symbols.</pre>
16588  %OI is replaced by the hour (12-hour clock), using the locale's alternative numeric
16589 <pre>
16590      symbols.</pre>
16591  %Om is replaced by the month, using the locale's alternative numeric symbols.
16592  %OM is replaced by the minutes, using the locale's alternative numeric symbols.
16593  %OS is replaced by the seconds, using the locale's alternative numeric symbols.
16594  %Ou is replaced by the ISO 8601 weekday as a number in the locale's alternative
16595 <pre>
16596      representation, where Monday is 1.</pre>
16597  %OU is replaced by the week number, using the locale's alternative numeric symbols.
16598  %OV is replaced by the ISO 8601 week number, using the locale's alternative numeric
16599 <pre>
16600      symbols.</pre>
16601  %Ow is replaced by the weekday as a number, using the locale's alternative numeric
16602 <pre>
16603      symbols.</pre>
16604  %OW is replaced by the week number of the year, using the locale's alternative numeric
16605 <pre>
16606      symbols.</pre>
16607  %Oy is replaced by the last 2 digits of the year, using the locale's alternative numeric
16608 <p><!--para 5-->
16609 <pre>
16610      symbols.</pre>
16611  %g, %G, and %V give values according to the ISO 8601 week-based year. In this system,
16612  weeks begin on a Monday and week 1 of the year is the week that includes January 4th,
16613  which is also the week that includes the first Thursday of the year, and is also the first
16614  week that contains at least four days in the year. If the first Monday of January is the
16615  2nd, 3rd, or 4th, the preceding days are part of the last week of the preceding year; thus,
16616  for Saturday 2nd January 1999, %G is replaced by 1998 and %V is replaced by 53. If
16617  December 29th, 30th, or 31st is a Monday, it and any following days are part of week 1 of
16618  the following year. Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and
16619  %V is replaced by 01.
16620 <p><!--para 6-->
16621  If a conversion specifier is not one of the above, the behavior is undefined.
16622 <p><!--para 7-->
16623  In the "C" locale, the E and O modifiers are ignored and the replacement strings for the
16624  following specifiers are:
16625  %a    the first three characters of %A.
16626  %A    one of ''Sunday'', ''Monday'', ... , ''Saturday''.
16627  %b    the first three characters of %B.
16628  %B    one of ''January'', ''February'', ... , ''December''.
16629  %c    equivalent to ''%a %b %e %T %Y''.
16630  %p    one of ''AM'' or ''PM''.
16631  %r    equivalent to ''%I:%M:%S %p''.
16632  %x    equivalent to ''%m/%d/%y''.
16633  %X    equivalent to %T.
16634  %Z    implementation-defined.
16635 <!--page 359 indent 4-->
16636 <h6>Returns</h6>
16637 <p><!--para 8-->
16638  If the total number of resulting characters including the terminating null character is not
16639  more than maxsize, the strftime function returns the number of characters placed
16640  into the array pointed to by s not including the terminating null character. Otherwise,
16641  zero is returned and the contents of the array are indeterminate.
16642 <!--page 360 indent 4-->
16643
16644 <a name="7.24" href="#7.24"><h3>7.24 Extended multibyte and wide character utilities <wchar.h></h3></a>
16645
16646 <a name="7.24.1" href="#7.24.1"><h4>7.24.1 Introduction</h4></a>
16647 <p><!--para 1-->
16648  The header <a href="#7.24">&lt;wchar.h&gt;</a> declares four data types, one tag, four macros, and many
16649  functions.<sup><a href="#note277"><b>277)</b></a></sup>
16650 <p><!--para 2-->
16651  The types declared are wchar_t and size_t (both described in <a href="#7.17">7.17</a>);
16652 <pre>
16653           mbstate_t</pre>
16654  which is an object type other than an array type that can hold the conversion state
16655  information necessary to convert between sequences of multibyte characters and wide
16656  characters;
16657 <pre>
16658           wint_t</pre>
16659  which is an integer type unchanged by default argument promotions that can hold any
16660  value corresponding to members of the extended character set, as well as at least one
16661  value that does not correspond to any member of the extended character set (see WEOF
16662  below);<sup><a href="#note278"><b>278)</b></a></sup> and
16663 <pre>
16664           struct tm</pre>
16665  which is declared as an incomplete structure type (the contents are described in <a href="#7.23.1">7.23.1</a>).
16666 <p><!--para 3-->
16667  The macros defined are NULL (described in <a href="#7.17">7.17</a>); WCHAR_MIN and WCHAR_MAX
16668  (described in <a href="#7.18.3">7.18.3</a>); and
16669 <pre>
16670           WEOF</pre>
16671  which expands to a constant expression of type wint_t whose value does not
16672  correspond to any member of the extended character set.<sup><a href="#note279"><b>279)</b></a></sup> It is accepted (and returned)
16673  by several functions in this subclause to indicate end-of-file, that is, no more input from a
16674  stream. It is also used as a wide character value that does not correspond to any member
16675  of the extended character set.
16676 <p><!--para 4-->
16677  The functions declared are grouped as follows:
16678 <ul>
16679 <li>  Functions that perform input and output of wide characters, or multibyte characters,
16680  or both;
16681 <li>  Functions that provide wide string numeric conversion;
16682 <li>  Functions that perform general wide string manipulation;
16683  
16684  
16685 <!--page 361 indent 4-->
16686 <li>  Functions for wide string date and time conversion; and
16687 <li>  Functions that provide extended capabilities for conversion between multibyte and
16688  wide character sequences.
16689 </ul>
16690 <p><!--para 5-->
16691  Unless explicitly stated otherwise, if the execution of a function described in this
16692  subclause causes copying to take place between objects that overlap, the behavior is
16693  undefined.
16694
16695 <h6>footnotes</h6>
16696 <p><a name="note277">277)</a> See ''future library directions'' (<a href="#7.26.12">7.26.12</a>).
16697
16698 <p><a name="note278">278)</a> wchar_t and wint_t can be the same integer type.
16699
16700 <p><a name="note279">279)</a> The value of the macro WEOF may differ from that of EOF and need not be negative.
16701
16702
16703 <a name="7.24.2" href="#7.24.2"><h4>7.24.2 Formatted wide character input/output functions</h4></a>
16704 <p><!--para 1-->
16705  The formatted wide character input/output functions shall behave as if there is a sequence
16706  point after the actions associated with each specifier.<sup><a href="#note280"><b>280)</b></a></sup>
16707
16708 <h6>footnotes</h6>
16709 <p><a name="note280">280)</a> The fwprintf functions perform writes to memory for the %n specifier.
16710
16711
16712 <a name="7.24.2.1" href="#7.24.2.1"><h5>7.24.2.1 The fwprintf function</h5></a>
16713 <h6>Synopsis</h6>
16714 <p><!--para 1-->
16715 <pre>
16716          #include <a href="#7.19">&lt;stdio.h&gt;</a>
16717          #include <a href="#7.24">&lt;wchar.h&gt;</a>
16718          int fwprintf(FILE * restrict stream,
16719               const wchar_t * restrict format, ...);</pre>
16720 <h6>Description</h6>
16721 <p><!--para 2-->
16722  The fwprintf function writes output to the stream pointed to by stream, under
16723  control of the wide string pointed to by format that specifies how subsequent arguments
16724  are converted for output. If there are insufficient arguments for the format, the behavior
16725  is undefined. If the format is exhausted while arguments remain, the excess arguments
16726  are evaluated (as always) but are otherwise ignored. The fwprintf function returns
16727  when the end of the format string is encountered.
16728 <p><!--para 3-->
16729  The format is composed of zero or more directives: ordinary wide characters (not %),
16730  which are copied unchanged to the output stream; and conversion specifications, each of
16731  which results in fetching zero or more subsequent arguments, converting them, if
16732  applicable, according to the corresponding conversion specifier, and then writing the
16733  result to the output stream.
16734 <p><!--para 4-->
16735  Each conversion specification is introduced by the wide character %. After the %, the
16736  following appear in sequence:
16737 <ul>
16738 <li>  Zero or more flags (in any order) that modify the meaning of the conversion
16739  specification.
16740 <li>  An optional minimum field width. If the converted value has fewer wide characters
16741  than the field width, it is padded with spaces (by default) on the left (or right, if the
16742  
16743  
16744 <!--page 362 indent 4-->
16745    left adjustment flag, described later, has been given) to the field width. The field
16746    width takes the form of an asterisk * (described later) or a nonnegative decimal
16747    integer.<sup><a href="#note281"><b>281)</b></a></sup>
16748 <li>  An optional precision that gives the minimum number of digits to appear for the d, i,
16749  o, u, x, and X conversions, the number of digits to appear after the decimal-point
16750  wide character for a, A, e, E, f, and F conversions, the maximum number of
16751  significant digits for the g and G conversions, or the maximum number of wide
16752  characters to be written for s conversions. The precision takes the form of a period
16753  (.) followed either by an asterisk * (described later) or by an optional decimal
16754  integer; if only the period is specified, the precision is taken as zero. If a precision
16755  appears with any other conversion specifier, the behavior is undefined.
16756 <li>  An optional length modifier that specifies the size of the argument.
16757 <li>  A conversion specifier wide character that specifies the type of conversion to be
16758  applied.
16759 </ul>
16760 <p><!--para 5-->
16761  As noted above, a field width, or precision, or both, may be indicated by an asterisk. In
16762  this case, an int argument supplies the field width or precision. The arguments
16763  specifying field width, or precision, or both, shall appear (in that order) before the
16764  argument (if any) to be converted. A negative field width argument is taken as a - flag
16765  followed by a positive field width. A negative precision argument is taken as if the
16766  precision were omitted.
16767 <p><!--para 6-->
16768  The flag wide characters and their meanings are:
16769  -        The result of the conversion is left-justified within the field. (It is right-justified if
16770 <pre>
16771           this flag is not specified.)</pre>
16772  +        The result of a signed conversion always begins with a plus or minus sign. (It
16773 <pre>
16774           begins with a sign only when a negative value is converted if this flag is not
16775           specified.)<sup><a href="#note282"><b>282)</b></a></sup></pre>
16776  space If the first wide character of a signed conversion is not a sign, or if a signed
16777 <pre>
16778        conversion results in no wide characters, a space is prefixed to the result. If the
16779        space and + flags both appear, the space flag is ignored.</pre>
16780  #        The result is converted to an ''alternative form''. For o conversion, it increases
16781 <pre>
16782           the precision, if and only if necessary, to force the first digit of the result to be a
16783           zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
16784           conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,</pre>
16785  
16786 <!--page 363 indent 4-->
16787 <pre>
16788            and G conversions, the result of converting a floating-point number always
16789            contains a decimal-point wide character, even if no digits follow it. (Normally, a
16790            decimal-point wide character appears in the result of these conversions only if a
16791            digit follows it.) For g and G conversions, trailing zeros are not removed from the
16792            result. For other conversions, the behavior is undefined.</pre>
16793  0         For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros
16794 <p><!--para 7-->
16795 <pre>
16796            (following any indication of sign or base) are used to pad to the field width rather
16797            than performing space padding, except when converting an infinity or NaN. If the
16798            0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X
16799            conversions, if a precision is specified, the 0 flag is ignored. For other
16800            conversions, the behavior is undefined.</pre>
16801  The length modifiers and their meanings are:
16802  hh             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16803 <pre>
16804                 signed char or unsigned char argument (the argument will have
16805                 been promoted according to the integer promotions, but its value shall be
16806                 converted to signed char or unsigned char before printing); or that
16807                 a following n conversion specifier applies to a pointer to a signed char
16808                 argument.</pre>
16809  h              Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16810 <pre>
16811                 short int or unsigned short int argument (the argument will
16812                 have been promoted according to the integer promotions, but its value shall
16813                 be converted to short int or unsigned short int before printing);
16814                 or that a following n conversion specifier applies to a pointer to a short
16815                 int argument.</pre>
16816  l (ell)        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16817 <pre>
16818                 long int or unsigned long int argument; that a following n
16819                 conversion specifier applies to a pointer to a long int argument; that a
16820                 following c conversion specifier applies to a wint_t argument; that a
16821                 following s conversion specifier applies to a pointer to a wchar_t
16822                 argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
16823                 specifier.</pre>
16824  ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16825 <pre>
16826               long long int or unsigned long long int argument; or that a
16827               following n conversion specifier applies to a pointer to a long long int
16828               argument.</pre>
16829  j              Specifies that a following d, i, o, u, x, or X conversion specifier applies to
16830 <!--page 364 indent 4-->
16831 <pre>
16832                 an intmax_t or uintmax_t argument; or that a following n conversion
16833                 specifier applies to a pointer to an intmax_t argument.</pre>
16834  z           Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16835 <pre>
16836              size_t or the corresponding signed integer type argument; or that a
16837              following n conversion specifier applies to a pointer to a signed integer type
16838              corresponding to size_t argument.</pre>
16839  t           Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
16840 <pre>
16841              ptrdiff_t or the corresponding unsigned integer type argument; or that a
16842              following n conversion specifier applies to a pointer to a ptrdiff_t
16843              argument.</pre>
16844  L           Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
16845 <pre>
16846              applies to a long double argument.</pre>
16847  If a length modifier appears with any conversion specifier other than as specified above,
16848  the behavior is undefined.
16849 <p><!--para 8-->
16850  The conversion specifiers and their meanings are:
16851  d,i        The int argument is converted to signed decimal in the style [-]dddd. The
16852 <pre>
16853             precision specifies the minimum number of digits to appear; if the value
16854             being converted can be represented in fewer digits, it is expanded with
16855             leading zeros. The default precision is 1. The result of converting a zero
16856             value with a precision of zero is no wide characters.</pre>
16857  o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned
16858 <pre>
16859          decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the
16860          letters abcdef are used for x conversion and the letters ABCDEF for X
16861          conversion. The precision specifies the minimum number of digits to appear;
16862          if the value being converted can be represented in fewer digits, it is expanded
16863          with leading zeros. The default precision is 1. The result of converting a
16864          zero value with a precision of zero is no wide characters.</pre>
16865  f,F        A double argument representing a floating-point number is converted to
16866 <!--page 365 indent 0-->
16867 <pre>
16868             decimal notation in the style [-]ddd.ddd, where the number of digits after
16869             the decimal-point wide character is equal to the precision specification. If the
16870             precision is missing, it is taken as 6; if the precision is zero and the # flag is
16871             not specified, no decimal-point wide character appears. If a decimal-point
16872             wide character appears, at least one digit appears before it. The value is
16873             rounded to the appropriate number of digits.
16874             A double argument representing an infinity is converted in one of the styles
16875             [-]inf or [-]infinity -- which style is implementation-defined. A
16876             double argument representing a NaN is converted in one of the styles
16877             [-]nan or [-]nan(n-wchar-sequence) -- which style, and the meaning of
16878             any n-wchar-sequence, is implementation-defined. The F conversion
16879             specifier produces INF, INFINITY, or NAN instead of inf, infinity, or
16880               nan, respectively.<sup><a href="#note283"><b>283)</b></a></sup></pre>
16881  e,E          A double argument representing a floating-point number is converted in the
16882 <pre>
16883               style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
16884               argument is nonzero) before the decimal-point wide character and the number
16885               of digits after it is equal to the precision; if the precision is missing, it is taken
16886               as 6; if the precision is zero and the # flag is not specified, no decimal-point
16887               wide character appears. The value is rounded to the appropriate number of
16888               digits. The E conversion specifier produces a number with E instead of e
16889               introducing the exponent. The exponent always contains at least two digits,
16890               and only as many more digits as necessary to represent the exponent. If the
16891               value is zero, the exponent is zero.
16892               A double argument representing an infinity or NaN is converted in the style
16893               of an f or F conversion specifier.</pre>
16894  g,G          A double argument representing a floating-point number is converted in
16895 <pre>
16896               style f or e (or in style F or E in the case of a G conversion specifier),
16897               depending on the value converted and the precision. Let P equal the
16898               precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero.
16899               Then, if a conversion with style E would have an exponent of X :
16900               -- if P &gt; X &gt;= -4, the conversion is with style f (or F) and precision
16901                 P - (X + 1).
16902               -- otherwise, the conversion is with style e (or E) and precision P - 1.
16903               Finally, unless the # flag is used, any trailing zeros are removed from the
16904               fractional portion of the result and the decimal-point wide character is
16905               removed if there is no fractional portion remaining.
16906               A double argument representing an infinity or NaN is converted in the style
16907               of an f or F conversion specifier.</pre>
16908  a,A          A double argument representing a floating-point number is converted in the
16909 <pre>
16910               style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
16911               nonzero if the argument is a normalized floating-point number and is
16912               otherwise unspecified) before the decimal-point wide character<sup><a href="#note284"><b>284)</b></a></sup> and the
16913               number of hexadecimal digits after it is equal to the precision; if the precision
16914               is missing and FLT_RADIX is a power of 2, then the precision is sufficient</pre>
16915  
16916  
16917 <!--page 366 indent 0-->
16918 <pre>
16919               for an exact representation of the value; if the precision is missing and
16920               FLT_RADIX is not a power of 2, then the precision is sufficient to
16921               distinguish<sup><a href="#note285"><b>285)</b></a></sup> values of type double, except that trailing zeros may be
16922               omitted; if the precision is zero and the # flag is not specified, no decimal-
16923               point wide character appears. The letters abcdef are used for a conversion
16924               and the letters ABCDEF for A conversion. The A conversion specifier
16925               produces a number with X and P instead of x and p. The exponent always
16926               contains at least one digit, and only as many more digits as necessary to
16927               represent the decimal exponent of 2. If the value is zero, the exponent is
16928               zero.
16929               A double argument representing an infinity or NaN is converted in the style
16930               of an f or F conversion specifier.</pre>
16931  c            If no l length modifier is present, the int argument is converted to a wide
16932 <pre>
16933               character as if by calling btowc and the resulting wide character is written.
16934               If an l length modifier is present, the wint_t argument is converted to
16935               wchar_t and written.</pre>
16936  s            If no l length modifier is present, the argument shall be a pointer to the initial
16937 <pre>
16938               element of a character array containing a multibyte character sequence
16939               beginning in the initial shift state. Characters from the array are converted as
16940               if by repeated calls to the mbrtowc function, with the conversion state
16941               described by an mbstate_t object initialized to zero before the first
16942               multibyte character is converted, and written up to (but not including) the
16943               terminating null wide character. If the precision is specified, no more than
16944               that many wide characters are written. If the precision is not specified or is
16945               greater than the size of the converted array, the converted array shall contain a
16946               null wide character.
16947               If an l length modifier is present, the argument shall be a pointer to the initial
16948               element of an array of wchar_t type. Wide characters from the array are
16949               written up to (but not including) a terminating null wide character. If the
16950               precision is specified, no more than that many wide characters are written. If
16951               the precision is not specified or is greater than the size of the array, the array
16952               shall contain a null wide character.</pre>
16953  p            The argument shall be a pointer to void. The value of the pointer is
16954 <pre>
16955               converted to a sequence of printing wide characters, in an implementation-</pre>
16956  
16957 <!--page 367 indent 5-->
16958 <pre>
16959                 defined manner.</pre>
16960  n              The argument shall be a pointer to signed integer into which is written the
16961 <pre>
16962                 number of wide characters written to the output stream so far by this call to
16963                 fwprintf. No argument is converted, but one is consumed. If the
16964                 conversion specification includes any flags, a field width, or a precision, the
16965                 behavior is undefined.</pre>
16966  %              A % wide character is written. No argument is converted. The complete
16967 <p><!--para 9-->
16968 <pre>
16969                 conversion specification shall be %%.</pre>
16970  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note286"><b>286)</b></a></sup> If any argument is
16971  not the correct type for the corresponding conversion specification, the behavior is
16972  undefined.
16973 <p><!--para 10-->
16974  In no case does a nonexistent or small field width cause truncation of a field; if the result
16975  of a conversion is wider than the field width, the field is expanded to contain the
16976  conversion result.
16977 <p><!--para 11-->
16978  For a and A conversions, if FLT_RADIX is a power of 2, the value is correctly rounded
16979  to a hexadecimal floating number with the given precision.
16980  Recommended practice
16981 <p><!--para 12-->
16982  For a and A conversions, if FLT_RADIX is not a power of 2 and the result is not exactly
16983  representable in the given precision, the result should be one of the two adjacent numbers
16984  in hexadecimal floating style with the given precision, with the extra stipulation that the
16985  error should have a correct sign for the current rounding direction.
16986 <p><!--para 13-->
16987  For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
16988  DECIMAL_DIG, then the result should be correctly rounded.<sup><a href="#note287"><b>287)</b></a></sup> If the number of
16989  significant decimal digits is more than DECIMAL_DIG but the source value is exactly
16990  representable with DECIMAL_DIG digits, then the result should be an exact
16991  representation with trailing zeros. Otherwise, the source value is bounded by two
16992  adjacent decimal strings L &lt; U, both having DECIMAL_DIG significant digits; the value
16993  of the resultant decimal string D should satisfy L &lt;= D &lt;= U, with the extra stipulation that
16994  the error should have a correct sign for the current rounding direction.
16995 <h6>Returns</h6>
16996 <p><!--para 14-->
16997  The fwprintf function returns the number of wide characters transmitted, or a negative
16998  value if an output or encoding error occurred.
16999  
17000 <!--page 368 indent 5-->
17001  Environmental limits
17002 <p><!--para 15-->
17003  The number of wide characters that can be produced by any single conversion shall be at
17004  least 4095.
17005 <p><!--para 16-->
17006  EXAMPLE       To print a date and time in the form ''Sunday, July 3, 10:02'' followed by pi to five decimal
17007  places:
17008 <pre>
17009         #include <a href="#7.12">&lt;math.h&gt;</a>
17010         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17011         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17012         /* ... */
17013         wchar_t *weekday, *month; // pointers to wide strings
17014         int day, hour, min;
17015         fwprintf(stdout, L"%ls, %ls %d, %.2d:%.2d\n",
17016                 weekday, month, day, hour, min);
17017         fwprintf(stdout, L"pi = %.5f\n", 4 * atan(1.0));</pre>
17018  
17019 <p><b> Forward references</b>:          the btowc function (<a href="#7.24.6.1.1">7.24.6.1.1</a>), the mbrtowc function
17020  (<a href="#7.24.6.3.2">7.24.6.3.2</a>).
17021
17022 <h6>footnotes</h6>
17023 <p><a name="note281">281)</a> Note that 0 is taken as a flag, not as the beginning of a field width.
17024
17025 <p><a name="note282">282)</a> The results of all floating conversions of a negative zero, and of negative values that round to zero,
17026  include a minus sign.
17027
17028 <p><a name="note283">283)</a> When applied to infinite and NaN values, the -, +, and space flag wide characters have their usual
17029  meaning; the # and 0 flag wide characters have no effect.
17030
17031 <p><a name="note284">284)</a> Binary implementations can choose the hexadecimal digit to the left of the decimal-point wide
17032  character so that subsequent digits align to nibble (4-bit) boundaries.
17033
17034 <p><a name="note285">285)</a> The precision p is sufficient to distinguish values of the source type if 16 p-1 &gt; b n where b is
17035  FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
17036  might suffice depending on the implementation's scheme for determining the digit to the left of the
17037  decimal-point wide character.
17038
17039 <p><a name="note286">286)</a> See ''future library directions'' (<a href="#7.26.12">7.26.12</a>).
17040
17041 <p><a name="note287">287)</a> For binary-to-decimal conversion, the result format's values are the numbers representable with the
17042  given format specifier. The number of significant digits is determined by the format specifier, and in
17043  the case of fixed-point conversion by the source value as well.
17044
17045
17046 <a name="7.24.2.2" href="#7.24.2.2"><h5>7.24.2.2 The fwscanf function</h5></a>
17047 <h6>Synopsis</h6>
17048 <p><!--para 1-->
17049 <pre>
17050         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17051         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17052         int fwscanf(FILE * restrict stream,
17053              const wchar_t * restrict format, ...);</pre>
17054 <h6>Description</h6>
17055 <p><!--para 2-->
17056  The fwscanf function reads input from the stream pointed to by stream, under
17057  control of the wide string pointed to by format that specifies the admissible input
17058  sequences and how they are to be converted for assignment, using subsequent arguments
17059  as pointers to the objects to receive the converted input. If there are insufficient
17060  arguments for the format, the behavior is undefined. If the format is exhausted while
17061  arguments remain, the excess arguments are evaluated (as always) but are otherwise
17062  ignored.
17063 <p><!--para 3-->
17064  The format is composed of zero or more directives: one or more white-space wide
17065  characters, an ordinary wide character (neither % nor a white-space wide character), or a
17066  conversion specification. Each conversion specification is introduced by the wide
17067  character %. After the %, the following appear in sequence:
17068 <ul>
17069 <li>  An optional assignment-suppressing wide character *.
17070 <li>  An optional decimal integer greater than zero that specifies the maximum field width
17071  (in wide characters).
17072 <!--page 369 indent 5-->
17073 <li>  An optional length modifier that specifies the size of the receiving object.
17074 <li>  A conversion specifier wide character that specifies the type of conversion to be
17075  applied.
17076 </ul>
17077 <p><!--para 4-->
17078  The fwscanf function executes each directive of the format in turn. If a directive fails,
17079  as detailed below, the function returns. Failures are described as input failures (due to the
17080  occurrence of an encoding error or the unavailability of input characters), or matching
17081  failures (due to inappropriate input).
17082 <p><!--para 5-->
17083  A directive composed of white-space wide character(s) is executed by reading input up to
17084  the first non-white-space wide character (which remains unread), or until no more wide
17085  characters can be read.
17086 <p><!--para 6-->
17087  A directive that is an ordinary wide character is executed by reading the next wide
17088  character of the stream. If that wide character differs from the directive, the directive
17089  fails and the differing and subsequent wide characters remain unread. Similarly, if end-
17090  of-file, an encoding error, or a read error prevents a wide character from being read, the
17091  directive fails.
17092 <p><!--para 7-->
17093  A directive that is a conversion specification defines a set of matching input sequences, as
17094  described below for each specifier. A conversion specification is executed in the
17095  following steps:
17096 <p><!--para 8-->
17097  Input white-space wide characters (as specified by the iswspace function) are skipped,
17098  unless the specification includes a [, c, or n specifier.<sup><a href="#note288"><b>288)</b></a></sup>
17099 <p><!--para 9-->
17100  An input item is read from the stream, unless the specification includes an n specifier. An
17101  input item is defined as the longest sequence of input wide characters which does not
17102  exceed any specified field width and which is, or is a prefix of, a matching input
17103  sequence.<sup><a href="#note289"><b>289)</b></a></sup> The first wide character, if any, after the input item remains unread. If the
17104  length of the input item is zero, the execution of the directive fails; this condition is a
17105  matching failure unless end-of-file, an encoding error, or a read error prevented input
17106  from the stream, in which case it is an input failure.
17107 <p><!--para 10-->
17108  Except in the case of a % specifier, the input item (or, in the case of a %n directive, the
17109  count of input wide characters) is converted to a type appropriate to the conversion
17110  specifier. If the input item is not a matching sequence, the execution of the directive fails:
17111  this condition is a matching failure. Unless assignment suppression was indicated by a *,
17112  the result of the conversion is placed in the object pointed to by the first argument
17113  following the format argument that has not already received a conversion result. If this
17114  
17115  
17116 <!--page 370 indent 5-->
17117  object does not have an appropriate type, or if the result of the conversion cannot be
17118  represented in the object, the behavior is undefined.
17119 <p><!--para 11-->
17120  The length modifiers and their meanings are:
17121  hh          Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
17122 <pre>
17123              to an argument with type pointer to signed char or unsigned char.</pre>
17124  h           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
17125 <pre>
17126              to an argument with type pointer to short int or unsigned short
17127              int.</pre>
17128  l (ell)     Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
17129 <pre>
17130              to an argument with type pointer to long int or unsigned long
17131              int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to
17132              an argument with type pointer to double; or that a following c, s, or [
17133              conversion specifier applies to an argument with type pointer to wchar_t.</pre>
17134  ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
17135 <pre>
17136               to an argument with type pointer to long long int or unsigned
17137               long long int.</pre>
17138  j           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
17139 <pre>
17140              to an argument with type pointer to intmax_t or uintmax_t.</pre>
17141  z           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
17142 <pre>
17143              to an argument with type pointer to size_t or the corresponding signed
17144              integer type.</pre>
17145  t           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
17146 <pre>
17147              to an argument with type pointer to ptrdiff_t or the corresponding
17148              unsigned integer type.</pre>
17149  L           Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
17150 <pre>
17151              applies to an argument with type pointer to long double.</pre>
17152  If a length modifier appears with any conversion specifier other than as specified above,
17153  the behavior is undefined.
17154 <p><!--para 12-->
17155  The conversion specifiers and their meanings are:
17156  d          Matches an optionally signed decimal integer, whose format is the same as
17157 <pre>
17158             expected for the subject sequence of the wcstol function with the value 10
17159             for the base argument. The corresponding argument shall be a pointer to
17160             signed integer.</pre>
17161  i          Matches an optionally signed integer, whose format is the same as expected
17162 <!--page 371 indent 0-->
17163 <pre>
17164             for the subject sequence of the wcstol function with the value 0 for the
17165             base argument. The corresponding argument shall be a pointer to signed
17166              integer.</pre>
17167  o           Matches an optionally signed octal integer, whose format is the same as
17168 <pre>
17169              expected for the subject sequence of the wcstoul function with the value 8
17170              for the base argument. The corresponding argument shall be a pointer to
17171              unsigned integer.</pre>
17172  u           Matches an optionally signed decimal integer, whose format is the same as
17173 <pre>
17174              expected for the subject sequence of the wcstoul function with the value 10
17175              for the base argument. The corresponding argument shall be a pointer to
17176              unsigned integer.</pre>
17177  x           Matches an optionally signed hexadecimal integer, whose format is the same
17178 <pre>
17179              as expected for the subject sequence of the wcstoul function with the value
17180              16 for the base argument. The corresponding argument shall be a pointer to
17181              unsigned integer.</pre>
17182  a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
17183 <pre>
17184          format is the same as expected for the subject sequence of the wcstod
17185          function. The corresponding argument shall be a pointer to floating.</pre>
17186  c           Matches a sequence of wide characters of exactly the number specified by the
17187 <pre>
17188              field width (1 if no field width is present in the directive).
17189              If no l length modifier is present, characters from the input field are
17190              converted as if by repeated calls to the wcrtomb function, with the
17191              conversion state described by an mbstate_t object initialized to zero
17192              before the first wide character is converted. The corresponding argument
17193              shall be a pointer to the initial element of a character array large enough to
17194              accept the sequence. No null character is added.
17195              If an l length modifier is present, the corresponding argument shall be a
17196              pointer to the initial element of an array of wchar_t large enough to accept
17197              the sequence. No null wide character is added.</pre>
17198  s           Matches a sequence of non-white-space wide characters.
17199 <!--page 372 indent 0-->
17200 <pre>
17201              If no l length modifier is present, characters from the input field are
17202              converted as if by repeated calls to the wcrtomb function, with the
17203              conversion state described by an mbstate_t object initialized to zero
17204              before the first wide character is converted. The corresponding argument
17205              shall be a pointer to the initial element of a character array large enough to
17206              accept the sequence and a terminating null character, which will be added
17207              automatically.
17208              If an l length modifier is present, the corresponding argument shall be a
17209              pointer to the initial element of an array of wchar_t large enough to accept
17210           the sequence and the terminating null wide character, which will be added
17211           automatically.</pre>
17212  [        Matches a nonempty sequence of wide characters from a set of expected
17213 <pre>
17214           characters (the scanset).
17215           If no l length modifier is present, characters from the input field are
17216           converted as if by repeated calls to the wcrtomb function, with the
17217           conversion state described by an mbstate_t object initialized to zero
17218           before the first wide character is converted. The corresponding argument
17219           shall be a pointer to the initial element of a character array large enough to
17220           accept the sequence and a terminating null character, which will be added
17221           automatically.
17222           If an l length modifier is present, the corresponding argument shall be a
17223           pointer to the initial element of an array of wchar_t large enough to accept
17224           the sequence and the terminating null wide character, which will be added
17225           automatically.
17226           The conversion specifier includes all subsequent wide characters in the
17227           format string, up to and including the matching right bracket (]). The wide
17228           characters between the brackets (the scanlist) compose the scanset, unless the
17229           wide character after the left bracket is a circumflex (^), in which case the
17230           scanset contains all wide characters that do not appear in the scanlist between
17231           the circumflex and the right bracket. If the conversion specifier begins with
17232           [] or [^], the right bracket wide character is in the scanlist and the next
17233           following right bracket wide character is the matching right bracket that ends
17234           the specification; otherwise the first following right bracket wide character is
17235           the one that ends the specification. If a - wide character is in the scanlist and
17236           is not the first, nor the second where the first wide character is a ^, nor the
17237           last character, the behavior is implementation-defined.</pre>
17238  p        Matches an implementation-defined set of sequences, which should be the
17239 <pre>
17240           same as the set of sequences that may be produced by the %p conversion of
17241           the fwprintf function. The corresponding argument shall be a pointer to a
17242           pointer to void. The input item is converted to a pointer value in an
17243           implementation-defined manner. If the input item is a value converted earlier
17244           during the same program execution, the pointer that results shall compare
17245           equal to that value; otherwise the behavior of the %p conversion is undefined.</pre>
17246  n        No input is consumed. The corresponding argument shall be a pointer to
17247 <!--page 373 indent 5-->
17248 <pre>
17249           signed integer into which is to be written the number of wide characters read
17250           from the input stream so far by this call to the fwscanf function. Execution
17251           of a %n directive does not increment the assignment count returned at the
17252           completion of execution of the fwscanf function. No argument is
17253                 converted, but one is consumed. If the conversion specification includes an
17254                 assignment-suppressing wide character or a field width, the behavior is
17255                 undefined.</pre>
17256  %              Matches a single % wide character; no conversion or assignment occurs. The
17257 <p><!--para 13-->
17258 <pre>
17259                 complete conversion specification shall be %%.</pre>
17260  If a conversion specification is invalid, the behavior is undefined.<sup><a href="#note290"><b>290)</b></a></sup>
17261 <p><!--para 14-->
17262  The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
17263  respectively, a, e, f, g, and x.
17264 <p><!--para 15-->
17265  Trailing white space (including new-line wide characters) is left unread unless matched
17266  by a directive. The success of literal matches and suppressed assignments is not directly
17267  determinable other than via the %n directive.
17268 <h6>Returns</h6>
17269 <p><!--para 16-->
17270  The fwscanf function returns the value of the macro EOF if an input failure occurs
17271  before any conversion. Otherwise, the function returns the number of input items
17272  assigned, which can be fewer than provided for, or even zero, in the event of an early
17273  matching failure.
17274 <p><!--para 17-->
17275  EXAMPLE 1        The call:
17276 <pre>
17277           #include <a href="#7.19">&lt;stdio.h&gt;</a>
17278           #include <a href="#7.24">&lt;wchar.h&gt;</a>
17279           /* ... */
17280           int n, i; float x; wchar_t name[50];
17281           n = fwscanf(stdin, L"%d%f%ls", &amp;i, &amp;x, name);</pre>
17282  with the input line:
17283 <pre>
17284           25 54.32E-1 thompson</pre>
17285  will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
17286  thompson\0.
17287  
17288 <p><!--para 18-->
17289  EXAMPLE 2        The call:
17290 <pre>
17291           #include <a href="#7.19">&lt;stdio.h&gt;</a>
17292           #include <a href="#7.24">&lt;wchar.h&gt;</a>
17293           /* ... */
17294           int i; float x; double y;
17295           fwscanf(stdin, L"%2d%f%*d %lf", &amp;i, &amp;x, &amp;y);</pre>
17296  with input:
17297 <pre>
17298           56789 0123 56a72</pre>
17299  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
17300  56.0. The next wide character read from the input stream will be a.
17301  
17302  
17303 <!--page 374 indent 4-->
17304 <p><b> Forward references</b>: the wcstod, wcstof, and wcstold functions (<a href="#7.24.4.1.1">7.24.4.1.1</a>), the
17305  wcstol, wcstoll, wcstoul, and wcstoull functions (<a href="#7.24.4.1.2">7.24.4.1.2</a>), the wcrtomb
17306  function (<a href="#7.24.6.3.3">7.24.6.3.3</a>).
17307
17308 <h6>footnotes</h6>
17309 <p><a name="note288">288)</a> These white-space wide characters are not counted against a specified field width.
17310
17311 <p><a name="note289">289)</a> fwscanf pushes back at most one input wide character onto the input stream. Therefore, some
17312  sequences that are acceptable to wcstod, wcstol, etc., are unacceptable to fwscanf.
17313
17314 <p><a name="note290">290)</a> See ''future library directions'' (<a href="#7.26.12">7.26.12</a>).
17315
17316
17317 <a name="7.24.2.3" href="#7.24.2.3"><h5>7.24.2.3 The swprintf function</h5></a>
17318 <h6>Synopsis</h6>
17319 <p><!--para 1-->
17320 <pre>
17321         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17322         int swprintf(wchar_t * restrict s,
17323              size_t n,
17324              const wchar_t * restrict format, ...);</pre>
17325 <h6>Description</h6>
17326 <p><!--para 2-->
17327  The swprintf function is equivalent to fwprintf, except that the argument s
17328  specifies an array of wide characters into which the generated output is to be written,
17329  rather than written to a stream. No more than n wide characters are written, including a
17330  terminating null wide character, which is always added (unless n is zero).
17331 <h6>Returns</h6>
17332 <p><!--para 3-->
17333  The swprintf function returns the number of wide characters written in the array, not
17334  counting the terminating null wide character, or a negative value if an encoding error
17335  occurred or if n or more wide characters were requested to be written.
17336
17337 <a name="7.24.2.4" href="#7.24.2.4"><h5>7.24.2.4 The swscanf function</h5></a>
17338 <h6>Synopsis</h6>
17339 <p><!--para 1-->
17340 <pre>
17341         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17342         int swscanf(const wchar_t * restrict s,
17343              const wchar_t * restrict format, ...);</pre>
17344 <h6>Description</h6>
17345 <p><!--para 2-->
17346  The swscanf function is equivalent to fwscanf, except that the argument s specifies a
17347  wide string from which the input is to be obtained, rather than from a stream. Reaching
17348  the end of the wide string is equivalent to encountering end-of-file for the fwscanf
17349  function.
17350 <h6>Returns</h6>
17351 <p><!--para 3-->
17352  The swscanf function returns the value of the macro EOF if an input failure occurs
17353  before any conversion. Otherwise, the swscanf function returns the number of input
17354  items assigned, which can be fewer than provided for, or even zero, in the event of an
17355  early matching failure.
17356 <!--page 375 indent 4-->
17357
17358 <a name="7.24.2.5" href="#7.24.2.5"><h5>7.24.2.5 The vfwprintf function</h5></a>
17359 <h6>Synopsis</h6>
17360 <p><!--para 1-->
17361 <pre>
17362         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
17363         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17364         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17365         int vfwprintf(FILE * restrict stream,
17366              const wchar_t * restrict format,
17367              va_list arg);</pre>
17368 <h6>Description</h6>
17369 <p><!--para 2-->
17370  The vfwprintf function is equivalent to fwprintf, with the variable argument list
17371  replaced by arg, which shall have been initialized by the va_start macro (and
17372  possibly subsequent va_arg calls). The vfwprintf function does not invoke the
17373  va_end macro.<sup><a href="#note291"><b>291)</b></a></sup>
17374 <h6>Returns</h6>
17375 <p><!--para 3-->
17376  The vfwprintf function returns the number of wide characters transmitted, or a
17377  negative value if an output or encoding error occurred.
17378 <p><!--para 4-->
17379  EXAMPLE       The following shows the use of the vfwprintf function in a general error-reporting
17380  routine.
17381 <pre>
17382         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
17383         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17384         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17385         void error(char *function_name, wchar_t *format, ...)
17386         {
17387               va_list args;
17388                  va_start(args, format);
17389                  // print out name of function causing error
17390                  fwprintf(stderr, L"ERROR in %s: ", function_name);
17391                  // print out remainder of message
17392                  vfwprintf(stderr, format, args);
17393                  va_end(args);
17394         }</pre>
17395  
17396  
17397  
17398  
17399 <!--page 376 indent 4-->
17400
17401 <h6>footnotes</h6>
17402 <p><a name="note291">291)</a> As the functions vfwprintf, vswprintf, vfwscanf, vwprintf, vwscanf, and vswscanf
17403  invoke the va_arg macro, the value of arg after the return is indeterminate.
17404
17405
17406 <a name="7.24.2.6" href="#7.24.2.6"><h5>7.24.2.6 The vfwscanf function</h5></a>
17407 <h6>Synopsis</h6>
17408 <p><!--para 1-->
17409 <pre>
17410         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
17411         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17412         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17413         int vfwscanf(FILE * restrict stream,
17414              const wchar_t * restrict format,
17415              va_list arg);</pre>
17416 <h6>Description</h6>
17417 <p><!--para 2-->
17418  The vfwscanf function is equivalent to fwscanf, with the variable argument list
17419  replaced by arg, which shall have been initialized by the va_start macro (and
17420  possibly subsequent va_arg calls). The vfwscanf function does not invoke the
17421  va_end macro.291)
17422 <h6>Returns</h6>
17423 <p><!--para 3-->
17424  The vfwscanf function returns the value of the macro EOF if an input failure occurs
17425  before any conversion. Otherwise, the vfwscanf function returns the number of input
17426  items assigned, which can be fewer than provided for, or even zero, in the event of an
17427  early matching failure.
17428
17429 <a name="7.24.2.7" href="#7.24.2.7"><h5>7.24.2.7 The vswprintf function</h5></a>
17430 <h6>Synopsis</h6>
17431 <p><!--para 1-->
17432 <pre>
17433         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
17434         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17435         int vswprintf(wchar_t * restrict s,
17436              size_t n,
17437              const wchar_t * restrict format,
17438              va_list arg);</pre>
17439 <h6>Description</h6>
17440 <p><!--para 2-->
17441  The vswprintf function is equivalent to swprintf, with the variable argument list
17442  replaced by arg, which shall have been initialized by the va_start macro (and
17443  possibly subsequent va_arg calls). The vswprintf function does not invoke the
17444  va_end macro.291)
17445 <h6>Returns</h6>
17446 <p><!--para 3-->
17447  The vswprintf function returns the number of wide characters written in the array, not
17448  counting the terminating null wide character, or a negative value if an encoding error
17449  occurred or if n or more wide characters were requested to be generated.
17450 <!--page 377 indent 4-->
17451
17452 <a name="7.24.2.8" href="#7.24.2.8"><h5>7.24.2.8 The vswscanf function</h5></a>
17453 <h6>Synopsis</h6>
17454 <p><!--para 1-->
17455 <pre>
17456         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
17457         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17458         int vswscanf(const wchar_t * restrict s,
17459              const wchar_t * restrict format,
17460              va_list arg);</pre>
17461 <h6>Description</h6>
17462 <p><!--para 2-->
17463  The vswscanf function is equivalent to swscanf, with the variable argument list
17464  replaced by arg, which shall have been initialized by the va_start macro (and
17465  possibly subsequent va_arg calls). The vswscanf function does not invoke the
17466  va_end macro.291)
17467 <h6>Returns</h6>
17468 <p><!--para 3-->
17469  The vswscanf function returns the value of the macro EOF if an input failure occurs
17470  before any conversion. Otherwise, the vswscanf function returns the number of input
17471  items assigned, which can be fewer than provided for, or even zero, in the event of an
17472  early matching failure.
17473
17474 <a name="7.24.2.9" href="#7.24.2.9"><h5>7.24.2.9 The vwprintf function</h5></a>
17475 <h6>Synopsis</h6>
17476 <p><!--para 1-->
17477 <pre>
17478         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
17479         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17480         int vwprintf(const wchar_t * restrict format,
17481              va_list arg);</pre>
17482 <h6>Description</h6>
17483 <p><!--para 2-->
17484  The vwprintf function is equivalent to wprintf, with the variable argument list
17485  replaced by arg, which shall have been initialized by the va_start macro (and
17486  possibly subsequent va_arg calls). The vwprintf function does not invoke the
17487  va_end macro.291)
17488 <h6>Returns</h6>
17489 <p><!--para 3-->
17490  The vwprintf function returns the number of wide characters transmitted, or a negative
17491  value if an output or encoding error occurred.
17492 <!--page 378 indent 4-->
17493
17494 <a name="7.24.2.10" href="#7.24.2.10"><h5>7.24.2.10 The vwscanf function</h5></a>
17495 <h6>Synopsis</h6>
17496 <p><!--para 1-->
17497 <pre>
17498         #include <a href="#7.15">&lt;stdarg.h&gt;</a>
17499         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17500         int vwscanf(const wchar_t * restrict format,
17501              va_list arg);</pre>
17502 <h6>Description</h6>
17503 <p><!--para 2-->
17504  The vwscanf function is equivalent to wscanf, with the variable argument list
17505  replaced by arg, which shall have been initialized by the va_start macro (and
17506  possibly subsequent va_arg calls). The vwscanf function does not invoke the
17507  va_end macro.291)
17508 <h6>Returns</h6>
17509 <p><!--para 3-->
17510  The vwscanf function returns the value of the macro EOF if an input failure occurs
17511  before any conversion. Otherwise, the vwscanf function returns the number of input
17512  items assigned, which can be fewer than provided for, or even zero, in the event of an
17513  early matching failure.
17514
17515 <a name="7.24.2.11" href="#7.24.2.11"><h5>7.24.2.11 The wprintf function</h5></a>
17516 <h6>Synopsis</h6>
17517 <p><!--para 1-->
17518 <pre>
17519         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17520         int wprintf(const wchar_t * restrict format, ...);</pre>
17521 <h6>Description</h6>
17522 <p><!--para 2-->
17523  The wprintf function is equivalent to fwprintf with the argument stdout
17524  interposed before the arguments to wprintf.
17525 <h6>Returns</h6>
17526 <p><!--para 3-->
17527  The wprintf function returns the number of wide characters transmitted, or a negative
17528  value if an output or encoding error occurred.
17529
17530 <a name="7.24.2.12" href="#7.24.2.12"><h5>7.24.2.12 The wscanf function</h5></a>
17531 <h6>Synopsis</h6>
17532 <p><!--para 1-->
17533 <pre>
17534         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17535         int wscanf(const wchar_t * restrict format, ...);</pre>
17536 <h6>Description</h6>
17537 <p><!--para 2-->
17538  The wscanf function is equivalent to fwscanf with the argument stdin interposed
17539  before the arguments to wscanf.
17540 <!--page 379 indent 4-->
17541 <h6>Returns</h6>
17542 <p><!--para 3-->
17543  The wscanf function returns the value of the macro EOF if an input failure occurs
17544  before any conversion. Otherwise, the wscanf function returns the number of input
17545  items assigned, which can be fewer than provided for, or even zero, in the event of an
17546  early matching failure.
17547
17548 <a name="7.24.3" href="#7.24.3"><h4>7.24.3 Wide character input/output functions</h4></a>
17549
17550 <a name="7.24.3.1" href="#7.24.3.1"><h5>7.24.3.1 The fgetwc function</h5></a>
17551 <h6>Synopsis</h6>
17552 <p><!--para 1-->
17553 <pre>
17554          #include <a href="#7.19">&lt;stdio.h&gt;</a>
17555          #include <a href="#7.24">&lt;wchar.h&gt;</a>
17556          wint_t fgetwc(FILE *stream);</pre>
17557 <h6>Description</h6>
17558 <p><!--para 2-->
17559  If the end-of-file indicator for the input stream pointed to by stream is not set and a
17560  next wide character is present, the fgetwc function obtains that wide character as a
17561  wchar_t converted to a wint_t and advances the associated file position indicator for
17562  the stream (if defined).
17563 <h6>Returns</h6>
17564 <p><!--para 3-->
17565  If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-
17566  of-file indicator for the stream is set and the fgetwc function returns WEOF. Otherwise,
17567  the fgetwc function returns the next wide character from the input stream pointed to by
17568  stream. If a read error occurs, the error indicator for the stream is set and the fgetwc
17569  function returns WEOF. If an encoding error occurs (including too few bytes), the value of
17570  the macro EILSEQ is stored in errno and the fgetwc function returns WEOF.<sup><a href="#note292"><b>292)</b></a></sup>
17571
17572 <h6>footnotes</h6>
17573 <p><a name="note292">292)</a> An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
17574  Also, errno will be set to EILSEQ by input/output functions only if an encoding error occurs.
17575
17576
17577 <a name="7.24.3.2" href="#7.24.3.2"><h5>7.24.3.2 The fgetws function</h5></a>
17578 <h6>Synopsis</h6>
17579 <p><!--para 1-->
17580 <pre>
17581          #include <a href="#7.19">&lt;stdio.h&gt;</a>
17582          #include <a href="#7.24">&lt;wchar.h&gt;</a>
17583          wchar_t *fgetws(wchar_t * restrict s,
17584               int n, FILE * restrict stream);</pre>
17585 <h6>Description</h6>
17586 <p><!--para 2-->
17587  The fgetws function reads at most one less than the number of wide characters
17588  specified by n from the stream pointed to by stream into the array pointed to by s. No
17589  
17590  
17591 <!--page 380 indent 4-->
17592  additional wide characters are read after a new-line wide character (which is retained) or
17593  after end-of-file. A null wide character is written immediately after the last wide
17594  character read into the array.
17595 <h6>Returns</h6>
17596 <p><!--para 3-->
17597  The fgetws function returns s if successful. If end-of-file is encountered and no
17598  characters have been read into the array, the contents of the array remain unchanged and a
17599  null pointer is returned. If a read or encoding error occurs during the operation, the array
17600  contents are indeterminate and a null pointer is returned.
17601
17602 <a name="7.24.3.3" href="#7.24.3.3"><h5>7.24.3.3 The fputwc function</h5></a>
17603 <h6>Synopsis</h6>
17604 <p><!--para 1-->
17605 <pre>
17606         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17607         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17608         wint_t fputwc(wchar_t c, FILE *stream);</pre>
17609 <h6>Description</h6>
17610 <p><!--para 2-->
17611  The fputwc function writes the wide character specified by c to the output stream
17612  pointed to by stream, at the position indicated by the associated file position indicator
17613  for the stream (if defined), and advances the indicator appropriately. If the file cannot
17614  support positioning requests, or if the stream was opened with append mode, the
17615  character is appended to the output stream.
17616 <h6>Returns</h6>
17617 <p><!--para 3-->
17618  The fputwc function returns the wide character written. If a write error occurs, the
17619  error indicator for the stream is set and fputwc returns WEOF. If an encoding error
17620  occurs, the value of the macro EILSEQ is stored in errno and fputwc returns WEOF.
17621
17622 <a name="7.24.3.4" href="#7.24.3.4"><h5>7.24.3.4 The fputws function</h5></a>
17623 <h6>Synopsis</h6>
17624 <p><!--para 1-->
17625 <pre>
17626         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17627         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17628         int fputws(const wchar_t * restrict s,
17629              FILE * restrict stream);</pre>
17630 <h6>Description</h6>
17631 <p><!--para 2-->
17632  The fputws function writes the wide string pointed to by s to the stream pointed to by
17633  stream. The terminating null wide character is not written.
17634 <h6>Returns</h6>
17635 <p><!--para 3-->
17636  The fputws function returns EOF if a write or encoding error occurs; otherwise, it
17637  returns a nonnegative value.
17638 <!--page 381 indent 4-->
17639
17640 <a name="7.24.3.5" href="#7.24.3.5"><h5>7.24.3.5 The fwide function</h5></a>
17641 <h6>Synopsis</h6>
17642 <p><!--para 1-->
17643 <pre>
17644          #include <a href="#7.19">&lt;stdio.h&gt;</a>
17645          #include <a href="#7.24">&lt;wchar.h&gt;</a>
17646          int fwide(FILE *stream, int mode);</pre>
17647 <h6>Description</h6>
17648 <p><!--para 2-->
17649  The fwide function determines the orientation of the stream pointed to by stream. If
17650  mode is greater than zero, the function first attempts to make the stream wide oriented. If
17651  mode is less than zero, the function first attempts to make the stream byte oriented.<sup><a href="#note293"><b>293)</b></a></sup>
17652  Otherwise, mode is zero and the function does not alter the orientation of the stream.
17653 <h6>Returns</h6>
17654 <p><!--para 3-->
17655  The fwide function returns a value greater than zero if, after the call, the stream has
17656  wide orientation, a value less than zero if the stream has byte orientation, or zero if the
17657  stream has no orientation.
17658
17659 <h6>footnotes</h6>
17660 <p><a name="note293">293)</a> If the orientation of the stream has already been determined, fwide does not change it.
17661
17662
17663 <a name="7.24.3.6" href="#7.24.3.6"><h5>7.24.3.6 The getwc function</h5></a>
17664 <h6>Synopsis</h6>
17665 <p><!--para 1-->
17666 <pre>
17667          #include <a href="#7.19">&lt;stdio.h&gt;</a>
17668          #include <a href="#7.24">&lt;wchar.h&gt;</a>
17669          wint_t getwc(FILE *stream);</pre>
17670 <h6>Description</h6>
17671 <p><!--para 2-->
17672  The getwc function is equivalent to fgetwc, except that if it is implemented as a
17673  macro, it may evaluate stream more than once, so the argument should never be an
17674  expression with side effects.
17675 <h6>Returns</h6>
17676 <p><!--para 3-->
17677  The getwc function returns the next wide character from the input stream pointed to by
17678  stream, or WEOF.
17679
17680 <a name="7.24.3.7" href="#7.24.3.7"><h5>7.24.3.7 The getwchar function</h5></a>
17681 <h6>Synopsis</h6>
17682 <p><!--para 1-->
17683 <pre>
17684          #include <a href="#7.24">&lt;wchar.h&gt;</a>
17685          wint_t getwchar(void);</pre>
17686  
17687  
17688  
17689  
17690 <!--page 382 indent 4-->
17691 <h6>Description</h6>
17692 <p><!--para 2-->
17693  The getwchar function is equivalent to getwc with the argument stdin.
17694 <h6>Returns</h6>
17695 <p><!--para 3-->
17696  The getwchar function returns the next wide character from the input stream pointed to
17697  by stdin, or WEOF.
17698
17699 <a name="7.24.3.8" href="#7.24.3.8"><h5>7.24.3.8 The putwc function</h5></a>
17700 <h6>Synopsis</h6>
17701 <p><!--para 1-->
17702 <pre>
17703         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17704         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17705         wint_t putwc(wchar_t c, FILE *stream);</pre>
17706 <h6>Description</h6>
17707 <p><!--para 2-->
17708  The putwc function is equivalent to fputwc, except that if it is implemented as a
17709  macro, it may evaluate stream more than once, so that argument should never be an
17710  expression with side effects.
17711 <h6>Returns</h6>
17712 <p><!--para 3-->
17713  The putwc function returns the wide character written, or WEOF.
17714
17715 <a name="7.24.3.9" href="#7.24.3.9"><h5>7.24.3.9 The putwchar function</h5></a>
17716 <h6>Synopsis</h6>
17717 <p><!--para 1-->
17718 <pre>
17719         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17720         wint_t putwchar(wchar_t c);</pre>
17721 <h6>Description</h6>
17722 <p><!--para 2-->
17723  The putwchar function is equivalent to putwc with the second argument stdout.
17724 <h6>Returns</h6>
17725 <p><!--para 3-->
17726  The putwchar function returns the character written, or WEOF.
17727
17728 <a name="7.24.3.10" href="#7.24.3.10"><h5>7.24.3.10 The ungetwc function</h5></a>
17729 <h6>Synopsis</h6>
17730 <p><!--para 1-->
17731 <pre>
17732         #include <a href="#7.19">&lt;stdio.h&gt;</a>
17733         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17734         wint_t ungetwc(wint_t c, FILE *stream);</pre>
17735 <h6>Description</h6>
17736 <p><!--para 2-->
17737  The ungetwc function pushes the wide character specified by c back onto the input
17738  stream pointed to by stream. Pushed-back wide characters will be returned by
17739  subsequent reads on that stream in the reverse order of their pushing. A successful
17740 <!--page 383 indent 4-->
17741  intervening call (with the stream pointed to by stream) to a file positioning function
17742  (fseek, fsetpos, or rewind) discards any pushed-back wide characters for the
17743  stream. The external storage corresponding to the stream is unchanged.
17744 <p><!--para 3-->
17745  One wide character of pushback is guaranteed, even if the call to the ungetwc function
17746  follows just after a call to a formatted wide character input function fwscanf,
17747  vfwscanf, vwscanf, or wscanf. If the ungetwc function is called too many times
17748  on the same stream without an intervening read or file positioning operation on that
17749  stream, the operation may fail.
17750 <p><!--para 4-->
17751  If the value of c equals that of the macro WEOF, the operation fails and the input stream is
17752  unchanged.
17753 <p><!--para 5-->
17754  A successful call to the ungetwc function clears the end-of-file indicator for the stream.
17755  The value of the file position indicator for the stream after reading or discarding all
17756  pushed-back wide characters is the same as it was before the wide characters were pushed
17757  back. For a text or binary stream, the value of its file position indicator after a successful
17758  call to the ungetwc function is unspecified until all pushed-back wide characters are
17759  read or discarded.
17760 <h6>Returns</h6>
17761 <p><!--para 6-->
17762  The ungetwc function returns the wide character pushed back, or WEOF if the operation
17763  fails.
17764
17765 <a name="7.24.4" href="#7.24.4"><h4>7.24.4 General wide string utilities</h4></a>
17766 <p><!--para 1-->
17767  The header <a href="#7.24">&lt;wchar.h&gt;</a> declares a number of functions useful for wide string
17768  manipulation. Various methods are used for determining the lengths of the arrays, but in
17769  all cases a wchar_t * argument points to the initial (lowest addressed) element of the
17770  array. If an array is accessed beyond the end of an object, the behavior is undefined.
17771 <p><!--para 2-->
17772  Where an argument declared as size_t n determines the length of the array for a
17773  function, n can have the value zero on a call to that function. Unless explicitly stated
17774  otherwise in the description of a particular function in this subclause, pointer arguments
17775  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
17776  function that locates a wide character finds no occurrence, a function that compares two
17777  wide character sequences returns zero, and a function that copies wide characters copies
17778  zero wide characters.
17779 <!--page 384 indent 4-->
17780
17781 <a name="7.24.4.1" href="#7.24.4.1"><h5>7.24.4.1 Wide string numeric conversion functions</h5></a>
17782
17783 <a name="7.24.4.1.1" href="#7.24.4.1.1"><h5>7.24.4.1.1 The wcstod, wcstof, and wcstold functions</h5></a>
17784 <h6>Synopsis</h6>
17785 <p><!--para 1-->
17786 <pre>
17787         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17788         double wcstod(const wchar_t * restrict nptr,
17789              wchar_t ** restrict endptr);
17790         float wcstof(const wchar_t * restrict nptr,
17791              wchar_t ** restrict endptr);
17792         long double wcstold(const wchar_t * restrict nptr,
17793              wchar_t ** restrict endptr);</pre>
17794 <h6>Description</h6>
17795 <p><!--para 2-->
17796  The wcstod, wcstof, and wcstold functions convert the initial portion of the wide
17797  string pointed to by nptr to double, float, and long double representation,
17798  respectively. First, they decompose the input string into three parts: an initial, possibly
17799  empty, sequence of white-space wide characters (as specified by the iswspace
17800  function), a subject sequence resembling a floating-point constant or representing an
17801  infinity or NaN; and a final wide string of one or more unrecognized wide characters,
17802  including the terminating null wide character of the input wide string. Then, they attempt
17803  to convert the subject sequence to a floating-point number, and return the result.
17804 <p><!--para 3-->
17805  The expected form of the subject sequence is an optional plus or minus sign, then one of
17806  the following:
17807 <ul>
17808 <li>  a nonempty sequence of decimal digits optionally containing a decimal-point wide
17809  character, then an optional exponent part as defined for the corresponding single-byte
17810  characters in <a href="#6.4.4.2">6.4.4.2</a>;
17811 <li>  a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
17812  decimal-point wide character, then an optional binary exponent part as defined in
17813  <a href="#6.4.4.2">6.4.4.2</a>;
17814 <li>  INF or INFINITY, or any other wide string equivalent except for case
17815 <li>  NAN or NAN(n-wchar-sequenceopt), or any other wide string equivalent except for
17816  case in the NAN part, where:
17817 <pre>
17818           n-wchar-sequence:
17819                 digit
17820                 nondigit
17821                 n-wchar-sequence digit
17822                 n-wchar-sequence nondigit</pre>
17823 </ul>
17824  The subject sequence is defined as the longest initial subsequence of the input wide
17825  string, starting with the first non-white-space wide character, that is of the expected form.
17826 <!--page 385 indent 4-->
17827  The subject sequence contains no wide characters if the input wide string is not of the
17828  expected form.
17829 <p><!--para 4-->
17830  If the subject sequence has the expected form for a floating-point number, the sequence of
17831  wide characters starting with the first digit or the decimal-point wide character
17832  (whichever occurs first) is interpreted as a floating constant according to the rules of
17833  <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
17834  if neither an exponent part nor a decimal-point wide character appears in a decimal
17835  floating point number, or if a binary exponent part does not appear in a hexadecimal
17836  floating point number, an exponent part of the appropriate type with value zero is
17837  assumed to follow the last digit in the string. If the subject sequence begins with a minus
17838  sign, the sequence is interpreted as negated.<sup><a href="#note294"><b>294)</b></a></sup> A wide character sequence INF or
17839  INFINITY is interpreted as an infinity, if representable in the return type, else like a
17840  floating constant that is too large for the range of the return type. A wide character
17841  sequence NAN or NAN(n-wchar-sequenceopt) is interpreted as a quiet NaN, if supported
17842  in the return type, else like a subject sequence part that does not have the expected form;
17843  the meaning of the n-wchar sequences is implementation-defined.<sup><a href="#note295"><b>295)</b></a></sup> A pointer to the
17844  final wide string is stored in the object pointed to by endptr, provided that endptr is
17845  not a null pointer.
17846 <p><!--para 5-->
17847  If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
17848  value resulting from the conversion is correctly rounded.
17849 <p><!--para 6-->
17850  In other than the "C" locale, additional locale-specific subject sequence forms may be
17851  accepted.
17852 <p><!--para 7-->
17853  If the subject sequence is empty or does not have the expected form, no conversion is
17854  performed; the value of nptr is stored in the object pointed to by endptr, provided
17855  that endptr is not a null pointer.
17856  Recommended practice
17857 <p><!--para 8-->
17858  If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
17859  the result is not exactly representable, the result should be one of the two numbers in the
17860  appropriate internal format that are adjacent to the hexadecimal floating source value,
17861  with the extra stipulation that the error should have a correct sign for the current rounding
17862  direction.
17863  
17864  
17865  
17866 <!--page 386 indent 5-->
17867 <p><!--para 9-->
17868  If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in
17869  <a href="#7.7">&lt;float.h&gt;</a>) significant digits, the result should be correctly rounded. If the subject
17870  sequence D has the decimal form and more than DECIMAL_DIG significant digits,
17871  consider the two bounding, adjacent decimal strings L and U, both having
17872  DECIMAL_DIG significant digits, such that the values of L, D, and U satisfy L &lt;= D &lt;= U.
17873  The result should be one of the (equal or adjacent) values that would be obtained by
17874  correctly rounding L and U according to the current rounding direction, with the extra
17875  stipulation that the error with respect to D should have a correct sign for the current
17876  rounding direction.<sup><a href="#note296"><b>296)</b></a></sup>
17877 <h6>Returns</h6>
17878 <p><!--para 10-->
17879  The functions return the converted value, if any. If no conversion could be performed,
17880  zero is returned. If the correct value is outside the range of representable values, plus or
17881  minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the return
17882  type and sign of the value), and the value of the macro ERANGE is stored in errno. If
17883  the result underflows (<a href="#7.12.1">7.12.1</a>), the functions return a value whose magnitude is no greater
17884  than the smallest normalized positive number in the return type; whether errno acquires
17885  the value ERANGE is implementation-defined.
17886  
17887  
17888  
17889  
17890 <!--page 387 indent 4-->
17891
17892 <h6>footnotes</h6>
17893 <p><a name="note294">294)</a> It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
17894  negating the value resulting from converting the corresponding unsigned sequence (see <a href="#F.5">F.5</a>); the two
17895  methods may yield different results if rounding is toward positive or negative infinity. In either case,
17896  the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
17897
17898 <p><a name="note295">295)</a> An implementation may use the n-wchar sequence to determine extra information to be represented in
17899  the NaN's significand.
17900
17901 <p><a name="note296">296)</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
17902  to the same internal floating value, but if not will round to adjacent values.
17903
17904
17905 <a name="7.24.4.1.2" href="#7.24.4.1.2"><h5>7.24.4.1.2 The wcstol, wcstoll, wcstoul, and wcstoull functions</h5></a>
17906 <h6>Synopsis</h6>
17907 <p><!--para 1-->
17908 <pre>
17909         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17910         long int wcstol(
17911              const wchar_t * restrict nptr,
17912              wchar_t ** restrict endptr,
17913              int base);
17914         long long int wcstoll(
17915              const wchar_t * restrict nptr,
17916              wchar_t ** restrict endptr,
17917              int base);
17918         unsigned long int wcstoul(
17919              const wchar_t * restrict nptr,
17920              wchar_t ** restrict endptr,
17921              int base);
17922         unsigned long long int wcstoull(
17923              const wchar_t * restrict nptr,
17924              wchar_t ** restrict endptr,
17925              int base);</pre>
17926 <h6>Description</h6>
17927 <p><!--para 2-->
17928  The wcstol, wcstoll, wcstoul, and wcstoull functions convert the initial
17929  portion of the wide string pointed to by nptr to long int, long long int,
17930  unsigned long int, and unsigned long long int representation,
17931  respectively. First, they decompose the input string into three parts: an initial, possibly
17932  empty, sequence of white-space wide characters (as specified by the iswspace
17933  function), a subject sequence resembling an integer represented in some radix determined
17934  by the value of base, and a final wide string of one or more unrecognized wide
17935  characters, including the terminating null wide character of the input wide string. Then,
17936  they attempt to convert the subject sequence to an integer, and return the result.
17937 <p><!--para 3-->
17938  If the value of base is zero, the expected form of the subject sequence is that of an
17939  integer constant as described for the corresponding single-byte characters in <a href="#6.4.4.1">6.4.4.1</a>,
17940  optionally preceded by a plus or minus sign, but not including an integer suffix. If the
17941  value of base is between 2 and 36 (inclusive), the expected form of the subject sequence
17942  is a sequence of letters and digits representing an integer with the radix specified by
17943  base, optionally preceded by a plus or minus sign, but not including an integer suffix.
17944  The letters from a (or A) through z (or Z) are ascribed the values 10 through 35; only
17945  letters and digits whose ascribed values are less than that of base are permitted. If the
17946  value of base is 16, the wide characters 0x or 0X may optionally precede the sequence
17947  of letters and digits, following the sign if present.
17948 <!--page 388 indent 4-->
17949 <p><!--para 4-->
17950  The subject sequence is defined as the longest initial subsequence of the input wide
17951  string, starting with the first non-white-space wide character, that is of the expected form.
17952  The subject sequence contains no wide characters if the input wide string is empty or
17953  consists entirely of white space, or if the first non-white-space wide character is other
17954  than a sign or a permissible letter or digit.
17955 <p><!--para 5-->
17956  If the subject sequence has the expected form and the value of base is zero, the sequence
17957  of wide characters starting with the first digit is interpreted as an integer constant
17958  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
17959  value of base is between 2 and 36, it is used as the base for conversion, ascribing to each
17960  letter its value as given above. If the subject sequence begins with a minus sign, the value
17961  resulting from the conversion is negated (in the return type). A pointer to the final wide
17962  string is stored in the object pointed to by endptr, provided that endptr is not a null
17963  pointer.
17964 <p><!--para 6-->
17965  In other than the "C" locale, additional locale-specific subject sequence forms may be
17966  accepted.
17967 <p><!--para 7-->
17968  If the subject sequence is empty or does not have the expected form, no conversion is
17969  performed; the value of nptr is stored in the object pointed to by endptr, provided
17970  that endptr is not a null pointer.
17971 <h6>Returns</h6>
17972 <p><!--para 8-->
17973  The wcstol, wcstoll, wcstoul, and wcstoull functions return the converted
17974  value, if any. If no conversion could be performed, zero is returned. If the correct value
17975  is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
17976  LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
17977  sign of the value, if any), and the value of the macro ERANGE is stored in errno.
17978
17979 <a name="7.24.4.2" href="#7.24.4.2"><h5>7.24.4.2 Wide string copying functions</h5></a>
17980
17981 <a name="7.24.4.2.1" href="#7.24.4.2.1"><h5>7.24.4.2.1 The wcscpy function</h5></a>
17982 <h6>Synopsis</h6>
17983 <p><!--para 1-->
17984 <pre>
17985         #include <a href="#7.24">&lt;wchar.h&gt;</a>
17986         wchar_t *wcscpy(wchar_t * restrict s1,
17987              const wchar_t * restrict s2);</pre>
17988 <h6>Description</h6>
17989 <p><!--para 2-->
17990  The wcscpy function copies the wide string pointed to by s2 (including the terminating
17991  null wide character) into the array pointed to by s1.
17992 <h6>Returns</h6>
17993 <p><!--para 3-->
17994  The wcscpy function returns the value of s1.
17995 <!--page 389 indent 4-->
17996
17997 <a name="7.24.4.2.2" href="#7.24.4.2.2"><h5>7.24.4.2.2 The wcsncpy function</h5></a>
17998 <h6>Synopsis</h6>
17999 <p><!--para 1-->
18000 <pre>
18001           #include <a href="#7.24">&lt;wchar.h&gt;</a>
18002           wchar_t *wcsncpy(wchar_t * restrict s1,
18003                const wchar_t * restrict s2,
18004                size_t n);</pre>
18005 <h6>Description</h6>
18006 <p><!--para 2-->
18007  The wcsncpy function copies not more than n wide characters (those that follow a null
18008  wide character are not copied) from the array pointed to by s2 to the array pointed to by
18009  s1.<sup><a href="#note297"><b>297)</b></a></sup>
18010 <p><!--para 3-->
18011  If the array pointed to by s2 is a wide string that is shorter than n wide characters, null
18012  wide characters are appended to the copy in the array pointed to by s1, until n wide
18013  characters in all have been written.
18014 <h6>Returns</h6>
18015 <p><!--para 4-->
18016  The wcsncpy function returns the value of s1.
18017
18018 <h6>footnotes</h6>
18019 <p><a name="note297">297)</a> Thus, if there is no null wide character in the first n wide characters of the array pointed to by s2, the
18020  result will not be null-terminated.
18021
18022
18023 <a name="7.24.4.2.3" href="#7.24.4.2.3"><h5>7.24.4.2.3 The wmemcpy function</h5></a>
18024 <h6>Synopsis</h6>
18025 <p><!--para 1-->
18026 <pre>
18027           #include <a href="#7.24">&lt;wchar.h&gt;</a>
18028           wchar_t *wmemcpy(wchar_t * restrict s1,
18029                const wchar_t * restrict s2,
18030                size_t n);</pre>
18031 <h6>Description</h6>
18032 <p><!--para 2-->
18033  The wmemcpy function copies n wide characters from the object pointed to by s2 to the
18034  object pointed to by s1.
18035 <h6>Returns</h6>
18036 <p><!--para 3-->
18037  The wmemcpy function returns the value of s1.
18038  
18039  
18040  
18041  
18042 <!--page 390 indent 4-->
18043
18044 <a name="7.24.4.2.4" href="#7.24.4.2.4"><h5>7.24.4.2.4 The wmemmove function</h5></a>
18045 <h6>Synopsis</h6>
18046 <p><!--para 1-->
18047 <pre>
18048         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18049         wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
18050              size_t n);</pre>
18051 <h6>Description</h6>
18052 <p><!--para 2-->
18053  The wmemmove function copies n wide characters from the object pointed to by s2 to
18054  the object pointed to by s1. Copying takes place as if the n wide characters from the
18055  object pointed to by s2 are first copied into a temporary array of n wide characters that
18056  does not overlap the objects pointed to by s1 or s2, and then the n wide characters from
18057  the temporary array are copied into the object pointed to by s1.
18058 <h6>Returns</h6>
18059 <p><!--para 3-->
18060  The wmemmove function returns the value of s1.
18061
18062 <a name="7.24.4.3" href="#7.24.4.3"><h5>7.24.4.3 Wide string concatenation functions</h5></a>
18063
18064 <a name="7.24.4.3.1" href="#7.24.4.3.1"><h5>7.24.4.3.1 The wcscat function</h5></a>
18065 <h6>Synopsis</h6>
18066 <p><!--para 1-->
18067 <pre>
18068         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18069         wchar_t *wcscat(wchar_t * restrict s1,
18070              const wchar_t * restrict s2);</pre>
18071 <h6>Description</h6>
18072 <p><!--para 2-->
18073  The wcscat function appends a copy of the wide string pointed to by s2 (including the
18074  terminating null wide character) to the end of the wide string pointed to by s1. The initial
18075  wide character of s2 overwrites the null wide character at the end of s1.
18076 <h6>Returns</h6>
18077 <p><!--para 3-->
18078  The wcscat function returns the value of s1.
18079
18080 <a name="7.24.4.3.2" href="#7.24.4.3.2"><h5>7.24.4.3.2 The wcsncat function</h5></a>
18081 <h6>Synopsis</h6>
18082 <p><!--para 1-->
18083 <pre>
18084         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18085         wchar_t *wcsncat(wchar_t * restrict s1,
18086              const wchar_t * restrict s2,
18087              size_t n);</pre>
18088 <h6>Description</h6>
18089 <p><!--para 2-->
18090  The wcsncat function appends not more than n wide characters (a null wide character
18091  and those that follow it are not appended) from the array pointed to by s2 to the end of
18092 <!--page 391 indent 4-->
18093  the wide string pointed to by s1. The initial wide character of s2 overwrites the null
18094  wide character at the end of s1. A terminating null wide character is always appended to
18095  the result.<sup><a href="#note298"><b>298)</b></a></sup>
18096 <h6>Returns</h6>
18097 <p><!--para 3-->
18098  The wcsncat function returns the value of s1.
18099
18100 <h6>footnotes</h6>
18101 <p><a name="note298">298)</a> Thus, the maximum number of wide characters that can end up in the array pointed to by s1 is
18102  wcslen(s1)+n+1.
18103
18104
18105 <a name="7.24.4.4" href="#7.24.4.4"><h5>7.24.4.4 Wide string comparison functions</h5></a>
18106 <p><!--para 1-->
18107  Unless explicitly stated otherwise, the functions described in this subclause order two
18108  wide characters the same way as two integers of the underlying integer type designated
18109  by wchar_t.
18110
18111 <a name="7.24.4.4.1" href="#7.24.4.4.1"><h5>7.24.4.4.1 The wcscmp function</h5></a>
18112 <h6>Synopsis</h6>
18113 <p><!--para 1-->
18114 <pre>
18115          #include <a href="#7.24">&lt;wchar.h&gt;</a>
18116          int wcscmp(const wchar_t *s1, const wchar_t *s2);</pre>
18117 <h6>Description</h6>
18118 <p><!--para 2-->
18119  The wcscmp function compares the wide string pointed to by s1 to the wide string
18120  pointed to by s2.
18121 <h6>Returns</h6>
18122 <p><!--para 3-->
18123  The wcscmp function returns an integer greater than, equal to, or less than zero,
18124  accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
18125  wide string pointed to by s2.
18126
18127 <a name="7.24.4.4.2" href="#7.24.4.4.2"><h5>7.24.4.4.2 The wcscoll function</h5></a>
18128 <h6>Synopsis</h6>
18129 <p><!--para 1-->
18130 <pre>
18131          #include <a href="#7.24">&lt;wchar.h&gt;</a>
18132          int wcscoll(const wchar_t *s1, const wchar_t *s2);</pre>
18133 <h6>Description</h6>
18134 <p><!--para 2-->
18135  The wcscoll function compares the wide string pointed to by s1 to the wide string
18136  pointed to by s2, both interpreted as appropriate to the LC_COLLATE category of the
18137  current locale.
18138 <h6>Returns</h6>
18139 <p><!--para 3-->
18140  The wcscoll function returns an integer greater than, equal to, or less than zero,
18141  accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
18142  
18143  
18144 <!--page 392 indent 4-->
18145  wide string pointed to by s2 when both are interpreted as appropriate to the current
18146  locale.
18147
18148 <a name="7.24.4.4.3" href="#7.24.4.4.3"><h5>7.24.4.4.3 The wcsncmp function</h5></a>
18149 <h6>Synopsis</h6>
18150 <p><!--para 1-->
18151 <pre>
18152         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18153         int wcsncmp(const wchar_t *s1, const wchar_t *s2,
18154              size_t n);</pre>
18155 <h6>Description</h6>
18156 <p><!--para 2-->
18157  The wcsncmp function compares not more than n wide characters (those that follow a
18158  null wide character are not compared) from the array pointed to by s1 to the array
18159  pointed to by s2.
18160 <h6>Returns</h6>
18161 <p><!--para 3-->
18162  The wcsncmp function returns an integer greater than, equal to, or less than zero,
18163  accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
18164  to, or less than the possibly null-terminated array pointed to by s2.
18165
18166 <a name="7.24.4.4.4" href="#7.24.4.4.4"><h5>7.24.4.4.4 The wcsxfrm function</h5></a>
18167 <h6>Synopsis</h6>
18168 <p><!--para 1-->
18169 <pre>
18170         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18171         size_t wcsxfrm(wchar_t * restrict s1,
18172              const wchar_t * restrict s2,
18173              size_t n);</pre>
18174 <h6>Description</h6>
18175 <p><!--para 2-->
18176  The wcsxfrm function transforms the wide string pointed to by s2 and places the
18177  resulting wide string into the array pointed to by s1. The transformation is such that if
18178  the wcscmp function is applied to two transformed wide strings, it returns a value greater
18179  than, equal to, or less than zero, corresponding to the result of the wcscoll function
18180  applied to the same two original wide strings. No more than n wide characters are placed
18181  into the resulting array pointed to by s1, including the terminating null wide character. If
18182  n is zero, s1 is permitted to be a null pointer.
18183 <h6>Returns</h6>
18184 <p><!--para 3-->
18185  The wcsxfrm function returns the length of the transformed wide string (not including
18186  the terminating null wide character). If the value returned is n or greater, the contents of
18187  the array pointed to by s1 are indeterminate.
18188 <p><!--para 4-->
18189  EXAMPLE The value of the following expression is the length of the array needed to hold the
18190  transformation of the wide string pointed to by s:
18191 <!--page 393 indent 4-->
18192 <pre>
18193         1 + wcsxfrm(NULL, s, 0)</pre>
18194  
18195
18196 <a name="7.24.4.4.5" href="#7.24.4.4.5"><h5>7.24.4.4.5 The wmemcmp function</h5></a>
18197 <h6>Synopsis</h6>
18198 <p><!--para 1-->
18199 <pre>
18200         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18201         int wmemcmp(const wchar_t *s1, const wchar_t *s2,
18202              size_t n);</pre>
18203 <h6>Description</h6>
18204 <p><!--para 2-->
18205  The wmemcmp function compares the first n wide characters of the object pointed to by
18206  s1 to the first n wide characters of the object pointed to by s2.
18207 <h6>Returns</h6>
18208 <p><!--para 3-->
18209  The wmemcmp function returns an integer greater than, equal to, or less than zero,
18210  accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
18211  pointed to by s2.
18212
18213 <a name="7.24.4.5" href="#7.24.4.5"><h5>7.24.4.5 Wide string search functions</h5></a>
18214
18215 <a name="7.24.4.5.1" href="#7.24.4.5.1"><h5>7.24.4.5.1 The wcschr function</h5></a>
18216 <h6>Synopsis</h6>
18217 <p><!--para 1-->
18218 <pre>
18219         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18220         wchar_t *wcschr(const wchar_t *s, wchar_t c);</pre>
18221 <h6>Description</h6>
18222 <p><!--para 2-->
18223  The wcschr function locates the first occurrence of c in the wide string pointed to by s.
18224  The terminating null wide character is considered to be part of the wide string.
18225 <h6>Returns</h6>
18226 <p><!--para 3-->
18227  The wcschr function returns a pointer to the located wide character, or a null pointer if
18228  the wide character does not occur in the wide string.
18229
18230 <a name="7.24.4.5.2" href="#7.24.4.5.2"><h5>7.24.4.5.2 The wcscspn function</h5></a>
18231 <h6>Synopsis</h6>
18232 <p><!--para 1-->
18233 <pre>
18234         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18235         size_t wcscspn(const wchar_t *s1, const wchar_t *s2);</pre>
18236 <h6>Description</h6>
18237 <p><!--para 2-->
18238  The wcscspn function computes the length of the maximum initial segment of the wide
18239  string pointed to by s1 which consists entirely of wide characters not from the wide
18240  string pointed to by s2.
18241 <!--page 394 indent 4-->
18242 <h6>Returns</h6>
18243 <p><!--para 3-->
18244  The wcscspn function returns the length of the segment.
18245
18246 <a name="7.24.4.5.3" href="#7.24.4.5.3"><h5>7.24.4.5.3 The wcspbrk function</h5></a>
18247 <h6>Synopsis</h6>
18248 <p><!--para 1-->
18249 <pre>
18250         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18251         wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);</pre>
18252 <h6>Description</h6>
18253 <p><!--para 2-->
18254  The wcspbrk function locates the first occurrence in the wide string pointed to by s1 of
18255  any wide character from the wide string pointed to by s2.
18256 <h6>Returns</h6>
18257 <p><!--para 3-->
18258  The wcspbrk function returns a pointer to the wide character in s1, or a null pointer if
18259  no wide character from s2 occurs in s1.
18260
18261 <a name="7.24.4.5.4" href="#7.24.4.5.4"><h5>7.24.4.5.4 The wcsrchr function</h5></a>
18262 <h6>Synopsis</h6>
18263 <p><!--para 1-->
18264 <pre>
18265         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18266         wchar_t *wcsrchr(const wchar_t *s, wchar_t c);</pre>
18267 <h6>Description</h6>
18268 <p><!--para 2-->
18269  The wcsrchr function locates the last occurrence of c in the wide string pointed to by
18270  s. The terminating null wide character is considered to be part of the wide string.
18271 <h6>Returns</h6>
18272 <p><!--para 3-->
18273  The wcsrchr function returns a pointer to the wide character, or a null pointer if c does
18274  not occur in the wide string.
18275
18276 <a name="7.24.4.5.5" href="#7.24.4.5.5"><h5>7.24.4.5.5 The wcsspn function</h5></a>
18277 <h6>Synopsis</h6>
18278 <p><!--para 1-->
18279 <pre>
18280         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18281         size_t wcsspn(const wchar_t *s1, const wchar_t *s2);</pre>
18282 <h6>Description</h6>
18283 <p><!--para 2-->
18284  The wcsspn function computes the length of the maximum initial segment of the wide
18285  string pointed to by s1 which consists entirely of wide characters from the wide string
18286  pointed to by s2.
18287 <h6>Returns</h6>
18288 <p><!--para 3-->
18289  The wcsspn function returns the length of the segment.
18290 <!--page 395 indent 4-->
18291
18292 <a name="7.24.4.5.6" href="#7.24.4.5.6"><h5>7.24.4.5.6 The wcsstr function</h5></a>
18293 <h6>Synopsis</h6>
18294 <p><!--para 1-->
18295 <pre>
18296         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18297         wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);</pre>
18298 <h6>Description</h6>
18299 <p><!--para 2-->
18300  The wcsstr function locates the first occurrence in the wide string pointed to by s1 of
18301  the sequence of wide characters (excluding the terminating null wide character) in the
18302  wide string pointed to by s2.
18303 <h6>Returns</h6>
18304 <p><!--para 3-->
18305  The wcsstr function returns a pointer to the located wide string, or a null pointer if the
18306  wide string is not found. If s2 points to a wide string with zero length, the function
18307  returns s1.
18308
18309 <a name="7.24.4.5.7" href="#7.24.4.5.7"><h5>7.24.4.5.7 The wcstok function</h5></a>
18310 <h6>Synopsis</h6>
18311 <p><!--para 1-->
18312 <pre>
18313         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18314         wchar_t *wcstok(wchar_t * restrict s1,
18315              const wchar_t * restrict s2,
18316              wchar_t ** restrict ptr);</pre>
18317 <h6>Description</h6>
18318 <p><!--para 2-->
18319  A sequence of calls to the wcstok function breaks the wide string pointed to by s1 into
18320  a sequence of tokens, each of which is delimited by a wide character from the wide string
18321  pointed to by s2. The third argument points to a caller-provided wchar_t pointer into
18322  which the wcstok function stores information necessary for it to continue scanning the
18323  same wide string.
18324 <p><!--para 3-->
18325  The first call in a sequence has a non-null first argument and stores an initial value in the
18326  object pointed to by ptr. Subsequent calls in the sequence have a null first argument and
18327  the object pointed to by ptr is required to have the value stored by the previous call in
18328  the sequence, which is then updated. The separator wide string pointed to by s2 may be
18329  different from call to call.
18330 <p><!--para 4-->
18331  The first call in the sequence searches the wide string pointed to by s1 for the first wide
18332  character that is not contained in the current separator wide string pointed to by s2. If no
18333  such wide character is found, then there are no tokens in the wide string pointed to by s1
18334  and the wcstok function returns a null pointer. If such a wide character is found, it is
18335  the start of the first token.
18336 <p><!--para 5-->
18337  The wcstok function then searches from there for a wide character that is contained in
18338  the current separator wide string. If no such wide character is found, the current token
18339 <!--page 396 indent 4-->
18340  extends to the end of the wide string pointed to by s1, and subsequent searches in the
18341  same wide string for a token return a null pointer. If such a wide character is found, it is
18342  overwritten by a null wide character, which terminates the current token.
18343 <p><!--para 6-->
18344  In all cases, the wcstok function stores sufficient information in the pointer pointed to
18345  by ptr so that subsequent calls, with a null pointer for s1 and the unmodified pointer
18346  value for ptr, shall start searching just past the element overwritten by a null wide
18347  character (if any).
18348 <h6>Returns</h6>
18349 <p><!--para 7-->
18350  The wcstok function returns a pointer to the first wide character of a token, or a null
18351  pointer if there is no token.
18352 <p><!--para 8-->
18353  EXAMPLE
18354 <pre>
18355         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18356         static wchar_t str1[] = L"?a???b,,,#c";
18357         static wchar_t str2[] = L"\t \t";
18358         wchar_t *t, *ptr1, *ptr2;
18359         t   =   wcstok(str1,   L"?", &amp;ptr1);          //   t   points to the token L"a"
18360         t   =   wcstok(NULL,   L",", &amp;ptr1);          //   t   points to the token L"??b"
18361         t   =   wcstok(str2,   L" \t", &amp;ptr2);        //   t   is a null pointer
18362         t   =   wcstok(NULL,   L"#,", &amp;ptr1);         //   t   points to the token L"c"
18363         t   =   wcstok(NULL,   L"?", &amp;ptr1);          //   t   is a null pointer</pre>
18364  
18365
18366 <a name="7.24.4.5.8" href="#7.24.4.5.8"><h5>7.24.4.5.8 The wmemchr function</h5></a>
18367 <h6>Synopsis</h6>
18368 <p><!--para 1-->
18369 <pre>
18370         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18371         wchar_t *wmemchr(const wchar_t *s, wchar_t c,
18372              size_t n);</pre>
18373 <h6>Description</h6>
18374 <p><!--para 2-->
18375  The wmemchr function locates the first occurrence of c in the initial n wide characters of
18376  the object pointed to by s.
18377 <h6>Returns</h6>
18378 <p><!--para 3-->
18379  The wmemchr function returns a pointer to the located wide character, or a null pointer if
18380  the wide character does not occur in the object.
18381 <!--page 397 indent 4-->
18382
18383 <a name="7.24.4.6" href="#7.24.4.6"><h5>7.24.4.6 Miscellaneous functions</h5></a>
18384
18385 <a name="7.24.4.6.1" href="#7.24.4.6.1"><h5>7.24.4.6.1 The wcslen function</h5></a>
18386 <h6>Synopsis</h6>
18387 <p><!--para 1-->
18388 <pre>
18389         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18390         size_t wcslen(const wchar_t *s);</pre>
18391 <h6>Description</h6>
18392 <p><!--para 2-->
18393  The wcslen function computes the length of the wide string pointed to by s.
18394 <h6>Returns</h6>
18395 <p><!--para 3-->
18396  The wcslen function returns the number of wide characters that precede the terminating
18397  null wide character.
18398
18399 <a name="7.24.4.6.2" href="#7.24.4.6.2"><h5>7.24.4.6.2 The wmemset function</h5></a>
18400 <h6>Synopsis</h6>
18401 <p><!--para 1-->
18402 <pre>
18403         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18404         wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);</pre>
18405 <h6>Description</h6>
18406 <p><!--para 2-->
18407  The wmemset function copies the value of c into each of the first n wide characters of
18408  the object pointed to by s.
18409 <h6>Returns</h6>
18410 <p><!--para 3-->
18411  The wmemset function returns the value of s.
18412
18413 <a name="7.24.5" href="#7.24.5"><h4>7.24.5 Wide character time conversion functions</h4></a>
18414
18415 <a name="7.24.5.1" href="#7.24.5.1"><h5>7.24.5.1 The wcsftime function</h5></a>
18416 <h6>Synopsis</h6>
18417 <p><!--para 1-->
18418 <pre>
18419         #include <a href="#7.23">&lt;time.h&gt;</a>
18420         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18421         size_t wcsftime(wchar_t * restrict s,
18422              size_t maxsize,
18423              const wchar_t * restrict format,
18424              const struct tm * restrict timeptr);</pre>
18425 <h6>Description</h6>
18426 <p><!--para 2-->
18427  The wcsftime function is equivalent to the strftime function, except that:
18428 <ul>
18429 <li>  The argument s points to the initial element of an array of wide characters into which
18430  the generated output is to be placed.
18431 <!--page 398 indent 4-->
18432 <li>  The argument maxsize indicates the limiting number of wide characters.
18433 <li>  The argument format is a wide string and the conversion specifiers are replaced by
18434  corresponding sequences of wide characters.
18435 <li>  The return value indicates the number of wide characters.
18436 </ul>
18437 <h6>Returns</h6>
18438 <p><!--para 3-->
18439  If the total number of resulting wide characters including the terminating null wide
18440  character is not more than maxsize, the wcsftime function returns the number of
18441  wide characters placed into the array pointed to by s not including the terminating null
18442  wide character. Otherwise, zero is returned and the contents of the array are
18443  indeterminate.
18444
18445 <a name="7.24.6" href="#7.24.6"><h4>7.24.6 Extended multibyte/wide character conversion utilities</h4></a>
18446 <p><!--para 1-->
18447  The header <a href="#7.24">&lt;wchar.h&gt;</a> declares an extended set of functions useful for conversion
18448  between multibyte characters and wide characters.
18449 <p><!--para 2-->
18450  Most of the following functions -- those that are listed as ''restartable'', <a href="#7.24.6.3">7.24.6.3</a> and
18451  <a href="#7.24.6.4">7.24.6.4</a> -- take as a last argument a pointer to an object of type mbstate_t that is used
18452  to describe the current conversion state from a particular multibyte character sequence to
18453  a wide character sequence (or the reverse) under the rules of a particular setting for the
18454  LC_CTYPE category of the current locale.
18455 <p><!--para 3-->
18456  The initial conversion state corresponds, for a conversion in either direction, to the
18457  beginning of a new multibyte character in the initial shift state. A zero-valued
18458  mbstate_t object is (at least) one way to describe an initial conversion state. A zero-
18459  valued mbstate_t object can be used to initiate conversion involving any multibyte
18460  character sequence, in any LC_CTYPE category setting. If an mbstate_t object has
18461  been altered by any of the functions described in this subclause, and is then used with a
18462  different multibyte character sequence, or in the other conversion direction, or with a
18463  different LC_CTYPE category setting than on earlier function calls, the behavior is
18464  undefined.<sup><a href="#note299"><b>299)</b></a></sup>
18465 <p><!--para 4-->
18466  On entry, each function takes the described conversion state (either internal or pointed to
18467  by an argument) as current. The conversion state described by the pointed-to object is
18468  altered as needed to track the shift state, and the position within a multibyte character, for
18469  the associated multibyte character sequence.
18470  
18471  
18472  
18473  
18474 <!--page 399 indent 4-->
18475
18476 <h6>footnotes</h6>
18477 <p><a name="note299">299)</a> Thus, a particular mbstate_t object can be used, for example, with both the mbrtowc and
18478  mbsrtowcs functions as long as they are used to step sequentially through the same multibyte
18479  character string.
18480
18481
18482 <a name="7.24.6.1" href="#7.24.6.1"><h5>7.24.6.1 Single-byte/wide character conversion functions</h5></a>
18483
18484 <a name="7.24.6.1.1" href="#7.24.6.1.1"><h5>7.24.6.1.1 The btowc function</h5></a>
18485 <h6>Synopsis</h6>
18486 <p><!--para 1-->
18487 <pre>
18488         #include <a href="#7.19">&lt;stdio.h&gt;</a>
18489         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18490         wint_t btowc(int c);</pre>
18491 <h6>Description</h6>
18492 <p><!--para 2-->
18493  The btowc function determines whether c constitutes a valid single-byte character in the
18494  initial shift state.
18495 <h6>Returns</h6>
18496 <p><!--para 3-->
18497  The btowc function returns WEOF if c has the value EOF or if (unsigned char)c
18498  does not constitute a valid single-byte character in the initial shift state. Otherwise, it
18499  returns the wide character representation of that character.
18500
18501 <a name="7.24.6.1.2" href="#7.24.6.1.2"><h5>7.24.6.1.2 The wctob function</h5></a>
18502 <h6>Synopsis</h6>
18503 <p><!--para 1-->
18504 <pre>
18505         #include <a href="#7.19">&lt;stdio.h&gt;</a>
18506         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18507         int wctob(wint_t c);</pre>
18508 <h6>Description</h6>
18509 <p><!--para 2-->
18510  The wctob function determines whether c corresponds to a member of the extended
18511  character set whose multibyte character representation is a single byte when in the initial
18512  shift state.
18513 <h6>Returns</h6>
18514 <p><!--para 3-->
18515  The wctob function returns EOF if c does not correspond to a multibyte character with
18516  length one in the initial shift state. Otherwise, it returns the single-byte representation of
18517  that character as an unsigned char converted to an int.
18518
18519 <a name="7.24.6.2" href="#7.24.6.2"><h5>7.24.6.2 Conversion state functions</h5></a>
18520
18521 <a name="7.24.6.2.1" href="#7.24.6.2.1"><h5>7.24.6.2.1 The mbsinit function</h5></a>
18522 <h6>Synopsis</h6>
18523 <p><!--para 1-->
18524 <pre>
18525         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18526         int mbsinit(const mbstate_t *ps);</pre>
18527 <h6>Description</h6>
18528 <p><!--para 2-->
18529  If ps is not a null pointer, the mbsinit function determines whether the pointed-to
18530  mbstate_t object describes an initial conversion state.
18531 <!--page 400 indent 4-->
18532 <h6>Returns</h6>
18533 <p><!--para 3-->
18534  The mbsinit function returns nonzero if ps is a null pointer or if the pointed-to object
18535  describes an initial conversion state; otherwise, it returns zero.
18536
18537 <a name="7.24.6.3" href="#7.24.6.3"><h5>7.24.6.3 Restartable multibyte/wide character conversion functions</h5></a>
18538 <p><!--para 1-->
18539  These functions differ from the corresponding multibyte character functions of <a href="#7.20.7">7.20.7</a>
18540  (mblen, mbtowc, and wctomb) in that they have an extra parameter, ps, of type
18541  pointer to mbstate_t that points to an object that can completely describe the current
18542  conversion state of the associated multibyte character sequence. If ps is a null pointer,
18543  each function uses its own internal mbstate_t object instead, which is initialized at
18544  program startup to the initial conversion state. The implementation behaves as if no
18545  library function calls these functions with a null pointer for ps.
18546 <p><!--para 2-->
18547  Also unlike their corresponding functions, the return value does not represent whether the
18548  encoding is state-dependent.
18549
18550 <a name="7.24.6.3.1" href="#7.24.6.3.1"><h5>7.24.6.3.1 The mbrlen function</h5></a>
18551 <h6>Synopsis</h6>
18552 <p><!--para 1-->
18553 <pre>
18554         #include <a href="#7.24">&lt;wchar.h&gt;</a>
18555         size_t mbrlen(const char * restrict s,
18556              size_t n,
18557              mbstate_t * restrict ps);</pre>
18558 <h6>Description</h6>
18559 <p><!--para 2-->
18560  The mbrlen function is equivalent to the call:
18561 <pre>
18562         mbrtowc(NULL, s, n, ps != NULL ? ps : &amp;internal)</pre>
18563  where internal is the mbstate_t object for the mbrlen function, except that the
18564  expression designated by ps is evaluated only once.
18565 <h6>Returns</h6>
18566 <p><!--para 3-->
18567  The mbrlen function returns a value between zero and n, inclusive, (size_t)(-2),
18568  or (size_t)(-1).
18569 <p><b> Forward references</b>: the mbrtowc function (<a href="#7.24.6.3.2">7.24.6.3.2</a>).
18570 <!--page 401 indent 4-->
18571
18572 <a name="7.24.6.3.2" href="#7.24.6.3.2"><h5>7.24.6.3.2 The mbrtowc function</h5></a>
18573 <h6>Synopsis</h6>
18574 <p><!--para 1-->
18575 <pre>
18576          #include <a href="#7.24">&lt;wchar.h&gt;</a>
18577          size_t mbrtowc(wchar_t * restrict pwc,
18578               const char * restrict s,
18579               size_t n,
18580               mbstate_t * restrict ps);</pre>
18581 <h6>Description</h6>
18582 <p><!--para 2-->
18583  If s is a null pointer, the mbrtowc function is equivalent to the call:
18584 <pre>
18585                  mbrtowc(NULL, "", 1, ps)</pre>
18586  In this case, the values of the parameters pwc and n are ignored.
18587 <p><!--para 3-->
18588  If s is not a null pointer, the mbrtowc function inspects at most n bytes beginning with
18589  the byte pointed to by s to determine the number of bytes needed to complete the next
18590  multibyte character (including any shift sequences). If the function determines that the
18591  next multibyte character is complete and valid, it determines the value of the
18592  corresponding wide character and then, if pwc is not a null pointer, stores that value in
18593  the object pointed to by pwc. If the corresponding wide character is the null wide
18594  character, the resulting state described is the initial conversion state.
18595 <h6>Returns</h6>
18596 <p><!--para 4-->
18597  The mbrtowc function returns the first of the following that applies (given the current
18598  conversion state):
18599  0                     if the next n or fewer bytes complete the multibyte character that
18600 <pre>
18601                        corresponds to the null wide character (which is the value stored).</pre>
18602  between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte
18603 <pre>
18604                     character (which is the value stored); the value returned is the number
18605                     of bytes that complete the multibyte character.</pre>
18606  (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
18607 <pre>
18608               multibyte character, and all n bytes have been processed (no value is
18609               stored).<sup><a href="#note300"><b>300)</b></a></sup></pre>
18610  (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
18611 <pre>
18612               do not contribute to a complete and valid multibyte character (no
18613               value is stored); the value of the macro EILSEQ is stored in errno,
18614               and the conversion state is unspecified.</pre>
18615  
18616 <!--page 402 indent 4-->
18617
18618 <h6>footnotes</h6>
18619 <p><a name="note300">300)</a> When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
18620  sequence of redundant shift sequences (for implementations with state-dependent encodings).
18621
18622
18623 <a name="7.24.6.3.3" href="#7.24.6.3.3"><h5>7.24.6.3.3 The wcrtomb function</h5></a>
18624 <h6>Synopsis</h6>
18625 <p><!--para 1-->
18626 <pre>
18627          #include <a href="#7.24">&lt;wchar.h&gt;</a>
18628          size_t wcrtomb(char * restrict s,
18629               wchar_t wc,
18630               mbstate_t * restrict ps);</pre>
18631 <h6>Description</h6>
18632 <p><!--para 2-->
18633  If s is a null pointer, the wcrtomb function is equivalent to the call
18634 <pre>
18635                  wcrtomb(buf, L'\0', ps)</pre>
18636  where buf is an internal buffer.
18637 <p><!--para 3-->
18638  If s is not a null pointer, the wcrtomb function determines the number of bytes needed
18639  to represent the multibyte character that corresponds to the wide character given by wc
18640  (including any shift sequences), and stores the multibyte character representation in the
18641  array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
18642  wc is a null wide character, a null byte is stored, preceded by any shift sequence needed
18643  to restore the initial shift state; the resulting state described is the initial conversion state.
18644 <h6>Returns</h6>
18645 <p><!--para 4-->
18646  The wcrtomb function returns the number of bytes stored in the array object (including
18647  any shift sequences). When wc is not a valid wide character, an encoding error occurs:
18648  the function stores the value of the macro EILSEQ in errno and returns
18649  (size_t)(-1); the conversion state is unspecified.
18650
18651 <a name="7.24.6.4" href="#7.24.6.4"><h5>7.24.6.4 Restartable multibyte/wide string conversion functions</h5></a>
18652 <p><!--para 1-->
18653  These functions differ from the corresponding multibyte string functions of <a href="#7.20.8">7.20.8</a>
18654  (mbstowcs and wcstombs) in that they have an extra parameter, ps, of type pointer to
18655  mbstate_t that points to an object that can completely describe the current conversion
18656  state of the associated multibyte character sequence. If ps is a null pointer, each function
18657  uses its own internal mbstate_t object instead, which is initialized at program startup
18658  to the initial conversion state. The implementation behaves as if no library function calls
18659  these functions with a null pointer for ps.
18660 <p><!--para 2-->
18661  Also unlike their corresponding functions, the conversion source parameter, src, has a
18662  pointer-to-pointer type. When the function is storing the results of conversions (that is,
18663  when dst is not a null pointer), the pointer object pointed to by this parameter is updated
18664  to reflect the amount of the source processed by that invocation.
18665 <!--page 403 indent 4-->
18666
18667 <a name="7.24.6.4.1" href="#7.24.6.4.1"><h5>7.24.6.4.1 The mbsrtowcs function</h5></a>
18668 <h6>Synopsis</h6>
18669 <p><!--para 1-->
18670 <pre>
18671           #include <a href="#7.24">&lt;wchar.h&gt;</a>
18672           size_t mbsrtowcs(wchar_t * restrict dst,
18673                const char ** restrict src,
18674                size_t len,
18675                mbstate_t * restrict ps);</pre>
18676 <h6>Description</h6>
18677 <p><!--para 2-->
18678  The mbsrtowcs function converts a sequence of multibyte characters that begins in the
18679  conversion state described by the object pointed to by ps, from the array indirectly
18680  pointed to by src into a sequence of corresponding wide characters. If dst is not a null
18681  pointer, the converted characters are stored into the array pointed to by dst. Conversion
18682  continues up to and including a terminating null character, which is also stored.
18683  Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
18684  not form a valid multibyte character, or (if dst is not a null pointer) when len wide
18685  characters have been stored into the array pointed to by dst.<sup><a href="#note301"><b>301)</b></a></sup> Each conversion takes
18686  place as if by a call to the mbrtowc function.
18687 <p><!--para 3-->
18688  If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
18689  pointer (if conversion stopped due to reaching a terminating null character) or the address
18690  just past the last multibyte character converted (if any). If conversion stopped due to
18691  reaching a terminating null character and if dst is not a null pointer, the resulting state
18692  described is the initial conversion state.
18693 <h6>Returns</h6>
18694 <p><!--para 4-->
18695  If the input conversion encounters a sequence of bytes that do not form a valid multibyte
18696  character, an encoding error occurs: the mbsrtowcs function stores the value of the
18697  macro EILSEQ in errno and returns (size_t)(-1); the conversion state is
18698  unspecified. Otherwise, it returns the number of multibyte characters successfully
18699  converted, not including the terminating null character (if any).
18700  
18701  
18702  
18703  
18704 <!--page 404 indent 4-->
18705
18706 <h6>footnotes</h6>
18707 <p><a name="note301">301)</a> Thus, the value of len is ignored if dst is a null pointer.
18708
18709
18710 <a name="7.24.6.4.2" href="#7.24.6.4.2"><h5>7.24.6.4.2 The wcsrtombs function</h5></a>
18711 <h6>Synopsis</h6>
18712 <p><!--para 1-->
18713 <pre>
18714          #include <a href="#7.24">&lt;wchar.h&gt;</a>
18715          size_t wcsrtombs(char * restrict dst,
18716               const wchar_t ** restrict src,
18717               size_t len,
18718               mbstate_t * restrict ps);</pre>
18719 <h6>Description</h6>
18720 <p><!--para 2-->
18721  The wcsrtombs function converts a sequence of wide characters from the array
18722  indirectly pointed to by src into a sequence of corresponding multibyte characters that
18723  begins in the conversion state described by the object pointed to by ps. If dst is not a
18724  null pointer, the converted characters are then stored into the array pointed to by dst.
18725  Conversion continues up to and including a terminating null wide character, which is also
18726  stored. Conversion stops earlier in two cases: when a wide character is reached that does
18727  not correspond to a valid multibyte character, or (if dst is not a null pointer) when the
18728  next multibyte character would exceed the limit of len total bytes to be stored into the
18729  array pointed to by dst. Each conversion takes place as if by a call to the wcrtomb
18730  function.<sup><a href="#note302"><b>302)</b></a></sup>
18731 <p><!--para 3-->
18732  If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
18733  pointer (if conversion stopped due to reaching a terminating null wide character) or the
18734  address just past the last wide character converted (if any). If conversion stopped due to
18735  reaching a terminating null wide character, the resulting state described is the initial
18736  conversion state.
18737 <h6>Returns</h6>
18738 <p><!--para 4-->
18739  If conversion stops because a wide character is reached that does not correspond to a
18740  valid multibyte character, an encoding error occurs: the wcsrtombs function stores the
18741  value of the macro EILSEQ in errno and returns (size_t)(-1); the conversion
18742  state is unspecified. Otherwise, it returns the number of bytes in the resulting multibyte
18743  character sequence, not including the terminating null character (if any).
18744  
18745  
18746  
18747  
18748 <!--page 405 indent 4-->
18749
18750 <h6>footnotes</h6>
18751 <p><a name="note302">302)</a> If conversion stops because a terminating null wide character has been reached, the bytes stored
18752  include those necessary to reach the initial shift state immediately before the null byte.
18753
18754
18755 <a name="7.25" href="#7.25"><h3>7.25 Wide character classification and mapping utilities <wctype.h></h3></a>
18756
18757 <a name="7.25.1" href="#7.25.1"><h4>7.25.1 Introduction</h4></a>
18758 <p><!--para 1-->
18759  The header <a href="#7.25">&lt;wctype.h&gt;</a> declares three data types, one macro, and many functions.<sup><a href="#note303"><b>303)</b></a></sup>
18760 <p><!--para 2-->
18761  The types declared are
18762 <pre>
18763           wint_t</pre>
18764  described in <a href="#7.24.1">7.24.1</a>;
18765 <pre>
18766           wctrans_t</pre>
18767  which is a scalar type that can hold values which represent locale-specific character
18768  mappings; and
18769 <pre>
18770           wctype_t</pre>
18771  which is a scalar type that can hold values which represent locale-specific character
18772  classifications.
18773 <p><!--para 3-->
18774  The macro defined is WEOF (described in <a href="#7.24.1">7.24.1</a>).
18775 <p><!--para 4-->
18776  The functions declared are grouped as follows:
18777 <ul>
18778 <li>  Functions that provide wide character classification;
18779 <li>  Extensible functions that provide wide character classification;
18780 <li>  Functions that provide wide character case mapping;
18781 <li>  Extensible functions that provide wide character mapping.
18782 </ul>
18783 <p><!--para 5-->
18784  For all functions described in this subclause that accept an argument of type wint_t, the
18785  value shall be representable as a wchar_t or shall equal the value of the macro WEOF. If
18786  this argument has any other value, the behavior is undefined.
18787 <p><!--para 6-->
18788  The behavior of these functions is affected by the LC_CTYPE category of the current
18789  locale.
18790  
18791  
18792  
18793  
18794 <!--page 406 indent 4-->
18795
18796 <h6>footnotes</h6>
18797 <p><a name="note303">303)</a> See ''future library directions'' (<a href="#7.26.13">7.26.13</a>).
18798
18799
18800 <a name="7.25.2" href="#7.25.2"><h4>7.25.2 Wide character classification utilities</h4></a>
18801 <p><!--para 1-->
18802  The header <a href="#7.25">&lt;wctype.h&gt;</a> declares several functions useful for classifying wide
18803  characters.
18804 <p><!--para 2-->
18805  The term printing wide character refers to a member of a locale-specific set of wide
18806  characters, each of which occupies at least one printing position on a display device. The
18807  term control wide character refers to a member of a locale-specific set of wide characters
18808  that are not printing wide characters.
18809
18810 <a name="7.25.2.1" href="#7.25.2.1"><h5>7.25.2.1 Wide character classification functions</h5></a>
18811 <p><!--para 1-->
18812  The functions in this subclause return nonzero (true) if and only if the value of the
18813  argument wc conforms to that in the description of the function.
18814 <p><!--para 2-->
18815  Each of the following functions returns true for each wide character that corresponds (as
18816  if by a call to the wctob function) to a single-byte character for which the corresponding
18817  character classification function from <a href="#7.4.1">7.4.1</a> returns true, except that the iswgraph and
18818  iswpunct functions may differ with respect to wide characters other than L' ' that are
18819  both printing and white-space wide characters.<sup><a href="#note304"><b>304)</b></a></sup>
18820 <p><b> Forward references</b>: the wctob function (<a href="#7.24.6.1.2">7.24.6.1.2</a>).
18821
18822 <h6>footnotes</h6>
18823 <p><a name="note304">304)</a> For example, if the expression isalpha(wctob(wc)) evaluates to true, then the call
18824  iswalpha(wc) also returns true. But, if the expression isgraph(wctob(wc)) evaluates to true
18825  (which cannot occur for wc == L' ' of course), then either iswgraph(wc) or iswprint(wc)
18826  &amp;&amp; iswspace(wc) is true, but not both.
18827
18828
18829 <a name="7.25.2.1.1" href="#7.25.2.1.1"><h5>7.25.2.1.1 The iswalnum function</h5></a>
18830 <h6>Synopsis</h6>
18831 <p><!--para 1-->
18832 <pre>
18833         #include <a href="#7.25">&lt;wctype.h&gt;</a>
18834         int iswalnum(wint_t wc);</pre>
18835 <h6>Description</h6>
18836 <p><!--para 2-->
18837  The iswalnum function tests for any wide character for which iswalpha or
18838  iswdigit is true.
18839
18840 <a name="7.25.2.1.2" href="#7.25.2.1.2"><h5>7.25.2.1.2 The iswalpha function</h5></a>
18841 <h6>Synopsis</h6>
18842 <p><!--para 1-->
18843 <pre>
18844         #include <a href="#7.25">&lt;wctype.h&gt;</a>
18845         int iswalpha(wint_t wc);</pre>
18846 <h6>Description</h6>
18847 <p><!--para 2-->
18848  The iswalpha function tests for any wide character for which iswupper or
18849  iswlower is true, or any wide character that is one of a locale-specific set of alphabetic
18850  
18851 <!--page 407 indent 4-->
18852  wide characters for which none of iswcntrl, iswdigit, iswpunct, or iswspace
18853  is true.<sup><a href="#note305"><b>305)</b></a></sup>
18854
18855 <h6>footnotes</h6>
18856 <p><a name="note305">305)</a> The functions iswlower and iswupper test true or false separately for each of these additional
18857  wide characters; all four combinations are possible.
18858
18859
18860 <a name="7.25.2.1.3" href="#7.25.2.1.3"><h5>7.25.2.1.3 The iswblank function</h5></a>
18861 <h6>Synopsis</h6>
18862 <p><!--para 1-->
18863 <pre>
18864          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18865          int iswblank(wint_t wc);</pre>
18866 <h6>Description</h6>
18867 <p><!--para 2-->
18868  The iswblank function tests for any wide character that is a standard blank wide
18869  character or is one of a locale-specific set of wide characters for which iswspace is true
18870  and that is used to separate words within a line of text. The standard blank wide
18871  characters are the following: space (L' '), and horizontal tab (L'\t'). In the "C"
18872  locale, iswblank returns true only for the standard blank characters.
18873
18874 <a name="7.25.2.1.4" href="#7.25.2.1.4"><h5>7.25.2.1.4 The iswcntrl function</h5></a>
18875 <h6>Synopsis</h6>
18876 <p><!--para 1-->
18877 <pre>
18878          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18879          int iswcntrl(wint_t wc);</pre>
18880 <h6>Description</h6>
18881 <p><!--para 2-->
18882  The iswcntrl function tests for any control wide character.
18883
18884 <a name="7.25.2.1.5" href="#7.25.2.1.5"><h5>7.25.2.1.5 The iswdigit function</h5></a>
18885 <h6>Synopsis</h6>
18886 <p><!--para 1-->
18887 <pre>
18888          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18889          int iswdigit(wint_t wc);</pre>
18890 <h6>Description</h6>
18891 <p><!--para 2-->
18892  The iswdigit function tests for any wide character that corresponds to a decimal-digit
18893  character (as defined in <a href="#5.2.1">5.2.1</a>).
18894
18895 <a name="7.25.2.1.6" href="#7.25.2.1.6"><h5>7.25.2.1.6 The iswgraph function</h5></a>
18896 <h6>Synopsis</h6>
18897 <p><!--para 1-->
18898 <pre>
18899          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18900          int iswgraph(wint_t wc);</pre>
18901  
18902  
18903  
18904  
18905 <!--page 408 indent 4-->
18906 <h6>Description</h6>
18907 <p><!--para 2-->
18908  The iswgraph function tests for any wide character for which iswprint is true and
18909  iswspace is false.<sup><a href="#note306"><b>306)</b></a></sup>
18910
18911 <h6>footnotes</h6>
18912 <p><a name="note306">306)</a> Note that the behavior of the iswgraph and iswpunct functions may differ from their
18913  corresponding functions in <a href="#7.4.1">7.4.1</a> with respect to printing, white-space, single-byte execution
18914  characters other than ' '.
18915
18916
18917 <a name="7.25.2.1.7" href="#7.25.2.1.7"><h5>7.25.2.1.7 The iswlower function</h5></a>
18918 <h6>Synopsis</h6>
18919 <p><!--para 1-->
18920 <pre>
18921          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18922          int iswlower(wint_t wc);</pre>
18923 <h6>Description</h6>
18924 <p><!--para 2-->
18925  The iswlower function tests for any wide character that corresponds to a lowercase
18926  letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
18927  iswdigit, iswpunct, or iswspace is true.
18928
18929 <a name="7.25.2.1.8" href="#7.25.2.1.8"><h5>7.25.2.1.8 The iswprint function</h5></a>
18930 <h6>Synopsis</h6>
18931 <p><!--para 1-->
18932 <pre>
18933          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18934          int iswprint(wint_t wc);</pre>
18935 <h6>Description</h6>
18936 <p><!--para 2-->
18937  The iswprint function tests for any printing wide character.
18938
18939 <a name="7.25.2.1.9" href="#7.25.2.1.9"><h5>7.25.2.1.9 The iswpunct function</h5></a>
18940 <h6>Synopsis</h6>
18941 <p><!--para 1-->
18942 <pre>
18943          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18944          int iswpunct(wint_t wc);</pre>
18945 <h6>Description</h6>
18946 <p><!--para 2-->
18947  The iswpunct function tests for any printing wide character that is one of a locale-
18948  specific set of punctuation wide characters for which neither iswspace nor iswalnum
18949  is true.306)
18950
18951 <a name="7.25.2.1.10" href="#7.25.2.1.10"><h5>7.25.2.1.10 The iswspace function</h5></a>
18952 <h6>Synopsis</h6>
18953 <p><!--para 1-->
18954 <pre>
18955          #include <a href="#7.25">&lt;wctype.h&gt;</a>
18956          int iswspace(wint_t wc);</pre>
18957  
18958  
18959  
18960 <!--page 409 indent 4-->
18961 <h6>Description</h6>
18962 <p><!--para 2-->
18963  The iswspace function tests for any wide character that corresponds to a locale-specific
18964  set of white-space wide characters for which none of iswalnum, iswgraph, or
18965  iswpunct is true.
18966
18967 <a name="7.25.2.1.11" href="#7.25.2.1.11"><h5>7.25.2.1.11 The iswupper function</h5></a>
18968 <h6>Synopsis</h6>
18969 <p><!--para 1-->
18970 <pre>
18971         #include <a href="#7.25">&lt;wctype.h&gt;</a>
18972         int iswupper(wint_t wc);</pre>
18973 <h6>Description</h6>
18974 <p><!--para 2-->
18975  The iswupper function tests for any wide character that corresponds to an uppercase
18976  letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
18977  iswdigit, iswpunct, or iswspace is true.
18978
18979 <a name="7.25.2.1.12" href="#7.25.2.1.12"><h5>7.25.2.1.12 The iswxdigit function</h5></a>
18980 <h6>Synopsis</h6>
18981 <p><!--para 1-->
18982 <pre>
18983         #include <a href="#7.25">&lt;wctype.h&gt;</a>
18984         int iswxdigit(wint_t wc);</pre>
18985 <h6>Description</h6>
18986 <p><!--para 2-->
18987  The iswxdigit function tests for any wide character that corresponds to a
18988  hexadecimal-digit character (as defined in <a href="#6.4.4.1">6.4.4.1</a>).
18989
18990 <a name="7.25.2.2" href="#7.25.2.2"><h5>7.25.2.2 Extensible wide character classification functions</h5></a>
18991 <p><!--para 1-->
18992  The functions wctype and iswctype provide extensible wide character classification
18993  as well as testing equivalent to that performed by the functions described in the previous
18994  subclause (<a href="#7.25.2.1">7.25.2.1</a>).
18995
18996 <a name="7.25.2.2.1" href="#7.25.2.2.1"><h5>7.25.2.2.1 The iswctype function</h5></a>
18997 <h6>Synopsis</h6>
18998 <p><!--para 1-->
18999 <pre>
19000         #include <a href="#7.25">&lt;wctype.h&gt;</a>
19001         int iswctype(wint_t wc, wctype_t desc);</pre>
19002 <h6>Description</h6>
19003 <p><!--para 2-->
19004  The iswctype function determines whether the wide character wc has the property
19005  described by desc. The current setting of the LC_CTYPE category shall be the same as
19006  during the call to wctype that returned the value desc.
19007 <p><!--para 3-->
19008  Each of the following expressions has a truth-value equivalent to the call to the wide
19009  character classification function (<a href="#7.25.2.1">7.25.2.1</a>) in the comment that follows the expression:
19010 <!--page 410 indent 4-->
19011 <pre>
19012         iswctype(wc,       wctype("alnum"))             //   iswalnum(wc)
19013         iswctype(wc,       wctype("alpha"))             //   iswalpha(wc)
19014         iswctype(wc,       wctype("blank"))             //   iswblank(wc)
19015         iswctype(wc,       wctype("cntrl"))             //   iswcntrl(wc)
19016         iswctype(wc,       wctype("digit"))             //   iswdigit(wc)
19017         iswctype(wc,       wctype("graph"))             //   iswgraph(wc)
19018         iswctype(wc,       wctype("lower"))             //   iswlower(wc)
19019         iswctype(wc,       wctype("print"))             //   iswprint(wc)
19020         iswctype(wc,       wctype("punct"))             //   iswpunct(wc)
19021         iswctype(wc,       wctype("space"))             //   iswspace(wc)
19022         iswctype(wc,       wctype("upper"))             //   iswupper(wc)
19023         iswctype(wc,       wctype("xdigit"))            //   iswxdigit(wc)</pre>
19024 <h6>Returns</h6>
19025 <p><!--para 4-->
19026  The iswctype function returns nonzero (true) if and only if the value of the wide
19027  character wc has the property described by desc.
19028 <p><b> Forward references</b>: the wctype function (<a href="#7.25.2.2.2">7.25.2.2.2</a>).
19029
19030 <a name="7.25.2.2.2" href="#7.25.2.2.2"><h5>7.25.2.2.2 The wctype function</h5></a>
19031 <h6>Synopsis</h6>
19032 <p><!--para 1-->
19033 <pre>
19034         #include <a href="#7.25">&lt;wctype.h&gt;</a>
19035         wctype_t wctype(const char *property);</pre>
19036 <h6>Description</h6>
19037 <p><!--para 2-->
19038  The wctype function constructs a value with type wctype_t that describes a class of
19039  wide characters identified by the string argument property.
19040 <p><!--para 3-->
19041  The strings listed in the description of the iswctype function shall be valid in all
19042  locales as property arguments to the wctype function.
19043 <h6>Returns</h6>
19044 <p><!--para 4-->
19045  If property identifies a valid class of wide characters according to the LC_CTYPE
19046  category of the current locale, the wctype function returns a nonzero value that is valid
19047  as the second argument to the iswctype function; otherwise, it returns zero.              *
19048 <!--page 411 indent 4-->
19049
19050 <a name="7.25.3" href="#7.25.3"><h4>7.25.3 Wide character case mapping utilities</h4></a>
19051 <p><!--para 1-->
19052  The header <a href="#7.25">&lt;wctype.h&gt;</a> declares several functions useful for mapping wide characters.
19053
19054 <a name="7.25.3.1" href="#7.25.3.1"><h5>7.25.3.1 Wide character case mapping functions</h5></a>
19055
19056 <a name="7.25.3.1.1" href="#7.25.3.1.1"><h5>7.25.3.1.1 The towlower function</h5></a>
19057 <h6>Synopsis</h6>
19058 <p><!--para 1-->
19059 <pre>
19060         #include <a href="#7.25">&lt;wctype.h&gt;</a>
19061         wint_t towlower(wint_t wc);</pre>
19062 <h6>Description</h6>
19063 <p><!--para 2-->
19064  The towlower function converts an uppercase letter to a corresponding lowercase letter.
19065 <h6>Returns</h6>
19066 <p><!--para 3-->
19067  If the argument is a wide character for which iswupper is true and there are one or
19068  more corresponding wide characters, as specified by the current locale, for which
19069  iswlower is true, the towlower function returns one of the corresponding wide
19070  characters (always the same one for any given locale); otherwise, the argument is
19071  returned unchanged.
19072
19073 <a name="7.25.3.1.2" href="#7.25.3.1.2"><h5>7.25.3.1.2 The towupper function</h5></a>
19074 <h6>Synopsis</h6>
19075 <p><!--para 1-->
19076 <pre>
19077         #include <a href="#7.25">&lt;wctype.h&gt;</a>
19078         wint_t towupper(wint_t wc);</pre>
19079 <h6>Description</h6>
19080 <p><!--para 2-->
19081  The towupper function converts a lowercase letter to a corresponding uppercase letter.
19082 <h6>Returns</h6>
19083 <p><!--para 3-->
19084  If the argument is a wide character for which iswlower is true and there are one or
19085  more corresponding wide characters, as specified by the current locale, for which
19086  iswupper is true, the towupper function returns one of the corresponding wide
19087  characters (always the same one for any given locale); otherwise, the argument is
19088  returned unchanged.
19089
19090 <a name="7.25.3.2" href="#7.25.3.2"><h5>7.25.3.2 Extensible wide character case mapping functions</h5></a>
19091 <p><!--para 1-->
19092  The functions wctrans and towctrans provide extensible wide character mapping as
19093  well as case mapping equivalent to that performed by the functions described in the
19094  previous subclause (<a href="#7.25.3.1">7.25.3.1</a>).
19095 <!--page 412 indent 4-->
19096
19097 <a name="7.25.3.2.1" href="#7.25.3.2.1"><h5>7.25.3.2.1 The towctrans function</h5></a>
19098 <h6>Synopsis</h6>
19099 <p><!--para 1-->
19100 <pre>
19101         #include <a href="#7.25">&lt;wctype.h&gt;</a>
19102         wint_t towctrans(wint_t wc, wctrans_t desc);</pre>
19103 <h6>Description</h6>
19104 <p><!--para 2-->
19105  The towctrans function maps the wide character wc using the mapping described by
19106  desc. The current setting of the LC_CTYPE category shall be the same as during the call
19107  to wctrans that returned the value desc.
19108 <p><!--para 3-->
19109  Each of the following expressions behaves the same as the call to the wide character case
19110  mapping function (<a href="#7.25.3.1">7.25.3.1</a>) in the comment that follows the expression:
19111 <pre>
19112         towctrans(wc, wctrans("tolower"))                      // towlower(wc)
19113         towctrans(wc, wctrans("toupper"))                      // towupper(wc)</pre>
19114 <h6>Returns</h6>
19115 <p><!--para 4-->
19116  The towctrans function returns the mapped value of wc using the mapping described
19117  by desc.
19118
19119 <a name="7.25.3.2.2" href="#7.25.3.2.2"><h5>7.25.3.2.2 The wctrans function</h5></a>
19120 <h6>Synopsis</h6>
19121 <p><!--para 1-->
19122 <pre>
19123         #include <a href="#7.25">&lt;wctype.h&gt;</a>
19124         wctrans_t wctrans(const char *property);</pre>
19125 <h6>Description</h6>
19126 <p><!--para 2-->
19127  The wctrans function constructs a value with type wctrans_t that describes a
19128  mapping between wide characters identified by the string argument property.
19129 <p><!--para 3-->
19130  The strings listed in the description of the towctrans function shall be valid in all
19131  locales as property arguments to the wctrans function.
19132 <h6>Returns</h6>
19133 <p><!--para 4-->
19134  If property identifies a valid mapping of wide characters according to the LC_CTYPE
19135  category of the current locale, the wctrans function returns a nonzero value that is valid
19136  as the second argument to the towctrans function; otherwise, it returns zero.
19137 <!--page 413 indent 4-->
19138
19139 <a name="7.26" href="#7.26"><h3>7.26 Future library directions</h3></a>
19140 <p><!--para 1-->
19141  The following names are grouped under individual headers for convenience. All external
19142  names described below are reserved no matter what headers are included by the program.
19143
19144 <a name="7.26.1" href="#7.26.1"><h4>7.26.1 Complex arithmetic <complex.h></h4></a>
19145 <p><!--para 1-->
19146  The function names
19147 <pre>
19148       cerf                cexpm1              clog2
19149       cerfc               clog10              clgamma
19150       cexp2               clog1p              ctgamma</pre>
19151  and the same names suffixed with f or l may be added to the declarations in the
19152  <a href="#7.3">&lt;complex.h&gt;</a> header.
19153
19154 <a name="7.26.2" href="#7.26.2"><h4>7.26.2 Character handling <ctype.h></h4></a>
19155 <p><!--para 1-->
19156  Function names that begin with either is or to, and a lowercase letter may be added to
19157  the declarations in the <a href="#7.4">&lt;ctype.h&gt;</a> header.
19158
19159 <a name="7.26.3" href="#7.26.3"><h4>7.26.3 Errors <errno.h></h4></a>
19160 <p><!--para 1-->
19161  Macros that begin with E and a digit or E and an uppercase letter may be added to the
19162  declarations in the <a href="#7.5">&lt;errno.h&gt;</a> header.
19163
19164 <a name="7.26.4" href="#7.26.4"><h4>7.26.4 Format conversion of integer types <inttypes.h></h4></a>
19165 <p><!--para 1-->
19166  Macro names beginning with PRI or SCN followed by any lowercase letter or X may be
19167  added to the macros defined in the <a href="#7.8">&lt;inttypes.h&gt;</a> header.
19168
19169 <a name="7.26.5" href="#7.26.5"><h4>7.26.5 Localization <locale.h></h4></a>
19170 <p><!--para 1-->
19171  Macros that begin with LC_ and an uppercase letter may be added to the definitions in
19172  the <a href="#7.11">&lt;locale.h&gt;</a> header.
19173
19174 <a name="7.26.6" href="#7.26.6"><h4>7.26.6 Signal handling <signal.h></h4></a>
19175 <p><!--para 1-->
19176  Macros that begin with either SIG and an uppercase letter or SIG_ and an uppercase
19177  letter may be added to the definitions in the <a href="#7.14">&lt;signal.h&gt;</a> header.
19178
19179 <a name="7.26.7" href="#7.26.7"><h4>7.26.7 Boolean type and values <stdbool.h></h4></a>
19180 <p><!--para 1-->
19181  The ability to undefine and perhaps then redefine the macros bool, true, and false is
19182  an obsolescent feature.
19183
19184 <a name="7.26.8" href="#7.26.8"><h4>7.26.8 Integer types <stdint.h></h4></a>
19185 <p><!--para 1-->
19186  Typedef names beginning with int or uint and ending with _t may be added to the
19187  types defined in the <a href="#7.18">&lt;stdint.h&gt;</a> header. Macro names beginning with INT or UINT
19188  and ending with _MAX, _MIN, or _C may be added to the macros defined in the
19189  <a href="#7.18">&lt;stdint.h&gt;</a> header.
19190 <!--page 414 indent 4-->
19191
19192 <a name="7.26.9" href="#7.26.9"><h4>7.26.9 Input/output <stdio.h></h4></a>
19193 <p><!--para 1-->
19194  Lowercase letters may be added to the conversion specifiers and length modifiers in
19195  fprintf and fscanf. Other characters may be used in extensions.
19196 <p><!--para 2-->
19197  The gets function is obsolescent, and is deprecated.
19198 <p><!--para 3-->
19199  The use of ungetc on a binary stream where the file position indicator is zero prior to
19200  the call is an obsolescent feature.
19201
19202 <a name="7.26.10" href="#7.26.10"><h4>7.26.10 General utilities <stdlib.h></h4></a>
19203 <p><!--para 1-->
19204  Function names that begin with str and a lowercase letter may be added to the
19205  declarations in the <a href="#7.20">&lt;stdlib.h&gt;</a> header.
19206
19207 <a name="7.26.11" href="#7.26.11"><h4>7.26.11 String handling <string.h></h4></a>
19208 <p><!--para 1-->
19209  Function names that begin with str, mem, or wcs and a lowercase letter may be added
19210  to the declarations in the <a href="#7.21">&lt;string.h&gt;</a> header.
19211
19212 <a name="7.26.12" href="#7.26.12"><h4>7.26.12 Extended multibyte and wide character utilities <wchar.h></h4></a>
19213 <p><!--para 1-->
19214  Function names that begin with wcs and a lowercase letter may be added to the
19215  declarations in the <a href="#7.24">&lt;wchar.h&gt;</a> header.
19216 <p><!--para 2-->
19217  Lowercase letters may be added to the conversion specifiers and length modifiers in
19218  fwprintf and fwscanf. Other characters may be used in extensions.
19219
19220 <a name="7.26.13" href="#7.26.13"><h4>7.26.13 Wide character classification and mapping utilities</h4></a>
19221  <a href="#7.25">&lt;wctype.h&gt;</a>
19222 <p><!--para 1-->
19223  Function names that begin with is or to and a lowercase letter may be added to the
19224  declarations in the <a href="#7.25">&lt;wctype.h&gt;</a> header.
19225 <!--page 415 indent 4-->
19226
19227 <a name="A" href="#A"><h2>Annex A</h2></a>
19228 <p><!--para 1-->
19229 <pre>
19230                                               (informative)
19231                                Language syntax summary</pre>
19232  NOTE     The notation is described in <a href="#6.1">6.1</a>.
19233  
19234
19235 <a name="A.1" href="#A.1"><h3>A.1 Lexical grammar</h3></a>
19236
19237 <a name="A.1.1" href="#A.1.1"><h4>A.1.1 Lexical elements</h4></a>
19238  (<a href="#6.4">6.4</a>) token:
19239 <pre>
19240                   keyword
19241                   identifier
19242                   constant
19243                   string-literal
19244                   punctuator</pre>
19245  (<a href="#6.4">6.4</a>) preprocessing-token:
19246 <pre>
19247                header-name
19248                identifier
19249                pp-number
19250                character-constant
19251                string-literal
19252                punctuator
19253                each non-white-space character that cannot be one of the above</pre>
19254
19255 <a name="A.1.2" href="#A.1.2"><h4>A.1.2 Keywords</h4></a>
19256  (<a href="#6.4.1">6.4.1</a>) keyword: one of
19257 <!--page 416 indent 0-->
19258 <pre>
19259                auto                      enum             restrict    unsigned
19260                break                     extern           return      void
19261                case                      float            short       volatile
19262                char                      for              signed      while
19263                const                     goto             sizeof      _Bool
19264                continue                  if               static      _Complex
19265                default                   inline           struct      _Imaginary
19266                do                        int              switch
19267                double                    long             typedef
19268                else                      register         union</pre>
19269
19270 <a name="A.1.3" href="#A.1.3"><h4>A.1.3 Identifiers</h4></a>
19271  (<a href="#6.4.2.1">6.4.2.1</a>) identifier:
19272 <pre>
19273                 identifier-nondigit
19274                 identifier identifier-nondigit
19275                 identifier digit</pre>
19276  (<a href="#6.4.2.1">6.4.2.1</a>) identifier-nondigit:
19277 <pre>
19278                 nondigit
19279                 universal-character-name
19280                 other implementation-defined characters</pre>
19281  (<a href="#6.4.2.1">6.4.2.1</a>) nondigit: one of
19282 <pre>
19283                _ a b          c    d   e   f   g   h     i   j   k   l   m
19284                     n o       p    q   r   s   t   u     v   w   x   y   z
19285                     A B       C    D   E   F   G   H     I   J   K   L   M
19286                     N O       P    Q   R   S   T   U     V   W   X   Y   Z</pre>
19287  (<a href="#6.4.2.1">6.4.2.1</a>) digit: one of
19288 <pre>
19289                 0 1 2         3    4   5   6   7   8     9</pre>
19290
19291 <a name="A.1.4" href="#A.1.4"><h4>A.1.4 Universal character names</h4></a>
19292  (<a href="#6.4.3">6.4.3</a>) universal-character-name:
19293 <pre>
19294                \u hex-quad
19295                \U hex-quad hex-quad</pre>
19296  (<a href="#6.4.3">6.4.3</a>) hex-quad:
19297 <pre>
19298                hexadecimal-digit hexadecimal-digit
19299                             hexadecimal-digit hexadecimal-digit</pre>
19300
19301 <a name="A.1.5" href="#A.1.5"><h4>A.1.5 Constants</h4></a>
19302  (<a href="#6.4.4">6.4.4</a>) constant:
19303 <pre>
19304                integer-constant
19305                floating-constant
19306                enumeration-constant
19307                character-constant</pre>
19308  (<a href="#6.4.4.1">6.4.4.1</a>) integer-constant:
19309 <pre>
19310                 decimal-constant integer-suffixopt
19311                 octal-constant integer-suffixopt
19312                 hexadecimal-constant integer-suffixopt</pre>
19313  (<a href="#6.4.4.1">6.4.4.1</a>) decimal-constant:
19314 <!--page 417 indent 0-->
19315 <pre>
19316                nonzero-digit
19317                decimal-constant digit</pre>
19318  (<a href="#6.4.4.1">6.4.4.1</a>) octal-constant:
19319 <pre>
19320                 0
19321                 octal-constant octal-digit</pre>
19322  (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-constant:
19323 <pre>
19324                hexadecimal-prefix hexadecimal-digit
19325                hexadecimal-constant hexadecimal-digit</pre>
19326  (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-prefix: one of
19327 <pre>
19328                0x 0X</pre>
19329  (<a href="#6.4.4.1">6.4.4.1</a>) nonzero-digit: one of
19330 <pre>
19331                1 2 3 4 5              6      7   8   9</pre>
19332  (<a href="#6.4.4.1">6.4.4.1</a>) octal-digit: one of
19333 <pre>
19334                 0 1 2 3           4   5      6   7</pre>
19335  (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-digit: one of
19336 <pre>
19337                0 1 2 3 4 5                   6   7   8   9
19338                a b c d e f
19339                A B C D E F</pre>
19340  (<a href="#6.4.4.1">6.4.4.1</a>) integer-suffix:
19341 <pre>
19342                 unsigned-suffix long-suffixopt
19343                 unsigned-suffix long-long-suffix
19344                 long-suffix unsigned-suffixopt
19345                 long-long-suffix unsigned-suffixopt</pre>
19346  (<a href="#6.4.4.1">6.4.4.1</a>) unsigned-suffix: one of
19347 <pre>
19348                 u U</pre>
19349  (<a href="#6.4.4.1">6.4.4.1</a>) long-suffix: one of
19350 <pre>
19351                 l L</pre>
19352  (<a href="#6.4.4.1">6.4.4.1</a>) long-long-suffix: one of
19353 <pre>
19354                 ll LL</pre>
19355  (<a href="#6.4.4.2">6.4.4.2</a>) floating-constant:
19356 <pre>
19357                 decimal-floating-constant
19358                 hexadecimal-floating-constant</pre>
19359  (<a href="#6.4.4.2">6.4.4.2</a>) decimal-floating-constant:
19360 <!--page 418 indent 0-->
19361 <pre>
19362                fractional-constant exponent-partopt floating-suffixopt
19363                digit-sequence exponent-part floating-suffixopt</pre>
19364  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-floating-constant:
19365 <pre>
19366                hexadecimal-prefix hexadecimal-fractional-constant
19367                              binary-exponent-part floating-suffixopt
19368                hexadecimal-prefix hexadecimal-digit-sequence
19369                              binary-exponent-part floating-suffixopt</pre>
19370  (<a href="#6.4.4.2">6.4.4.2</a>) fractional-constant:
19371 <pre>
19372                 digit-sequenceopt . digit-sequence
19373                 digit-sequence .</pre>
19374  (<a href="#6.4.4.2">6.4.4.2</a>) exponent-part:
19375 <pre>
19376                e signopt digit-sequence
19377                E signopt digit-sequence</pre>
19378  (<a href="#6.4.4.2">6.4.4.2</a>) sign: one of
19379 <pre>
19380                 + -</pre>
19381  (<a href="#6.4.4.2">6.4.4.2</a>) digit-sequence:
19382 <pre>
19383                 digit
19384                 digit-sequence digit</pre>
19385  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-fractional-constant:
19386 <pre>
19387                hexadecimal-digit-sequenceopt .
19388                               hexadecimal-digit-sequence
19389                hexadecimal-digit-sequence .</pre>
19390  (<a href="#6.4.4.2">6.4.4.2</a>) binary-exponent-part:
19391 <pre>
19392                 p signopt digit-sequence
19393                 P signopt digit-sequence</pre>
19394  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-digit-sequence:
19395 <pre>
19396                hexadecimal-digit
19397                hexadecimal-digit-sequence hexadecimal-digit</pre>
19398  (<a href="#6.4.4.2">6.4.4.2</a>) floating-suffix: one of
19399 <pre>
19400                 f l F L</pre>
19401  (<a href="#6.4.4.3">6.4.4.3</a>) enumeration-constant:
19402 <pre>
19403                identifier</pre>
19404  (<a href="#6.4.4.4">6.4.4.4</a>) character-constant:
19405 <!--page 419 indent 0-->
19406 <pre>
19407                ' c-char-sequence '
19408                L' c-char-sequence '</pre>
19409  (<a href="#6.4.4.4">6.4.4.4</a>) c-char-sequence:
19410 <pre>
19411                 c-char
19412                 c-char-sequence c-char</pre>
19413  (<a href="#6.4.4.4">6.4.4.4</a>) c-char:
19414 <pre>
19415                 any member of the source character set except
19416                              the single-quote ', backslash \, or new-line character
19417                 escape-sequence</pre>
19418  (<a href="#6.4.4.4">6.4.4.4</a>) escape-sequence:
19419 <pre>
19420                simple-escape-sequence
19421                octal-escape-sequence
19422                hexadecimal-escape-sequence
19423                universal-character-name</pre>
19424  (<a href="#6.4.4.4">6.4.4.4</a>) simple-escape-sequence: one of
19425 <pre>
19426                \' \" \? \\
19427                \a \b \f \n \r \t                   \v</pre>
19428  (<a href="#6.4.4.4">6.4.4.4</a>) octal-escape-sequence:
19429 <pre>
19430                 \ octal-digit
19431                 \ octal-digit octal-digit
19432                 \ octal-digit octal-digit octal-digit</pre>
19433  (<a href="#6.4.4.4">6.4.4.4</a>) hexadecimal-escape-sequence:
19434 <pre>
19435                \x hexadecimal-digit
19436                hexadecimal-escape-sequence hexadecimal-digit</pre>
19437
19438 <a name="A.1.6" href="#A.1.6"><h4>A.1.6 String literals</h4></a>
19439  (<a href="#6.4.5">6.4.5</a>) string-literal:
19440 <pre>
19441                 " s-char-sequenceopt "
19442                 L" s-char-sequenceopt "</pre>
19443  (<a href="#6.4.5">6.4.5</a>) s-char-sequence:
19444 <pre>
19445                 s-char
19446                 s-char-sequence s-char</pre>
19447  (<a href="#6.4.5">6.4.5</a>) s-char:
19448 <!--page 420 indent 0-->
19449 <pre>
19450                 any member of the source character set except
19451                              the double-quote ", backslash \, or new-line character
19452                 escape-sequence</pre>
19453
19454 <a name="A.1.7" href="#A.1.7"><h4>A.1.7 Punctuators</h4></a>
19455  (<a href="#6.4.6">6.4.6</a>) punctuator: one of
19456 <pre>
19457                [ ] ( ) { } . -&gt;
19458                ++ -- &amp; * + - ~ !
19459                / % &lt;&lt; &gt;&gt; &lt; &gt; &lt;= &gt;=                     ==      !=    ^    |    &amp;&amp;   ||
19460                ? : ; ...
19461                = *= /= %= += -= &lt;&lt;=                    &gt;&gt;=      &amp;=       ^=   |=
19462                , # ##
19463                &lt;: :&gt; &lt;% %&gt; %: %:%:</pre>
19464
19465 <a name="A.1.8" href="#A.1.8"><h4>A.1.8 Header names</h4></a>
19466  (<a href="#6.4.7">6.4.7</a>) header-name:
19467 <pre>
19468                &lt; h-char-sequence &gt;
19469                " q-char-sequence "</pre>
19470  (<a href="#6.4.7">6.4.7</a>) h-char-sequence:
19471 <pre>
19472                h-char
19473                h-char-sequence h-char</pre>
19474  (<a href="#6.4.7">6.4.7</a>) h-char:
19475 <pre>
19476                any member of the source character set except
19477                             the new-line character and &gt;</pre>
19478  (<a href="#6.4.7">6.4.7</a>) q-char-sequence:
19479 <pre>
19480                q-char
19481                q-char-sequence q-char</pre>
19482  (<a href="#6.4.7">6.4.7</a>) q-char:
19483 <pre>
19484                any member of the source character set except
19485                             the new-line character and "</pre>
19486
19487 <a name="A.1.9" href="#A.1.9"><h4>A.1.9 Preprocessing numbers</h4></a>
19488  (<a href="#6.4.8">6.4.8</a>) pp-number:
19489 <!--page 421 indent 0-->
19490 <pre>
19491                digit
19492                . digit
19493                pp-number   digit
19494                pp-number   identifier-nondigit
19495                pp-number   e sign
19496                pp-number   E sign
19497                pp-number   p sign
19498                pp-number   P sign
19499                pp-number   .</pre>
19500
19501 <a name="A.2" href="#A.2"><h3>A.2 Phrase structure grammar</h3></a>
19502
19503 <a name="A.2.1" href="#A.2.1"><h4>A.2.1 Expressions</h4></a>
19504  (<a href="#6.5.1">6.5.1</a>) primary-expression:
19505 <pre>
19506                identifier
19507                constant
19508                string-literal
19509                ( expression )</pre>
19510  (<a href="#6.5.2">6.5.2</a>) postfix-expression:
19511 <pre>
19512                primary-expression
19513                postfix-expression [ expression ]
19514                postfix-expression ( argument-expression-listopt )
19515                postfix-expression . identifier
19516                postfix-expression -&gt; identifier
19517                postfix-expression ++
19518                postfix-expression --
19519                ( type-name ) { initializer-list }
19520                ( type-name ) { initializer-list , }</pre>
19521  (<a href="#6.5.2">6.5.2</a>) argument-expression-list:
19522 <pre>
19523               assignment-expression
19524               argument-expression-list , assignment-expression</pre>
19525  (<a href="#6.5.3">6.5.3</a>) unary-expression:
19526 <pre>
19527                postfix-expression
19528                ++ unary-expression
19529                -- unary-expression
19530                unary-operator cast-expression
19531                sizeof unary-expression
19532                sizeof ( type-name )</pre>
19533  (<a href="#6.5.3">6.5.3</a>) unary-operator: one of
19534 <pre>
19535                &amp; * + - ~             !</pre>
19536  (<a href="#6.5.4">6.5.4</a>) cast-expression:
19537 <pre>
19538                 unary-expression
19539                 ( type-name ) cast-expression</pre>
19540  (<a href="#6.5.5">6.5.5</a>) multiplicative-expression:
19541 <!--page 422 indent 0-->
19542 <pre>
19543                 cast-expression
19544                 multiplicative-expression * cast-expression
19545                 multiplicative-expression / cast-expression
19546                 multiplicative-expression % cast-expression</pre>
19547  (<a href="#6.5.6">6.5.6</a>) additive-expression:
19548 <pre>
19549                 multiplicative-expression
19550                 additive-expression + multiplicative-expression
19551                 additive-expression - multiplicative-expression</pre>
19552  (<a href="#6.5.7">6.5.7</a>) shift-expression:
19553 <pre>
19554                  additive-expression
19555                  shift-expression &lt;&lt; additive-expression
19556                  shift-expression &gt;&gt; additive-expression</pre>
19557  (<a href="#6.5.8">6.5.8</a>) relational-expression:
19558 <pre>
19559                 shift-expression
19560                 relational-expression   &lt;    shift-expression
19561                 relational-expression   &gt;    shift-expression
19562                 relational-expression   &lt;=   shift-expression
19563                 relational-expression   &gt;=   shift-expression</pre>
19564  (<a href="#6.5.9">6.5.9</a>) equality-expression:
19565 <pre>
19566                 relational-expression
19567                 equality-expression == relational-expression
19568                 equality-expression != relational-expression</pre>
19569  (<a href="#6.5.10">6.5.10</a>) AND-expression:
19570 <pre>
19571               equality-expression
19572               AND-expression &amp; equality-expression</pre>
19573  (<a href="#6.5.11">6.5.11</a>) exclusive-OR-expression:
19574 <pre>
19575                AND-expression
19576                exclusive-OR-expression ^ AND-expression</pre>
19577  (<a href="#6.5.12">6.5.12</a>) inclusive-OR-expression:
19578 <pre>
19579                 exclusive-OR-expression
19580                 inclusive-OR-expression | exclusive-OR-expression</pre>
19581  (<a href="#6.5.13">6.5.13</a>) logical-AND-expression:
19582 <pre>
19583                inclusive-OR-expression
19584                logical-AND-expression &amp;&amp; inclusive-OR-expression</pre>
19585  (<a href="#6.5.14">6.5.14</a>) logical-OR-expression:
19586 <pre>
19587                logical-AND-expression
19588                logical-OR-expression || logical-AND-expression</pre>
19589  (<a href="#6.5.15">6.5.15</a>) conditional-expression:
19590 <!--page 423 indent 0-->
19591 <pre>
19592                logical-OR-expression
19593                logical-OR-expression ? expression : conditional-expression</pre>
19594  (<a href="#6.5.16">6.5.16</a>) assignment-expression:
19595 <pre>
19596                conditional-expression
19597                unary-expression assignment-operator assignment-expression</pre>
19598  (<a href="#6.5.16">6.5.16</a>) assignment-operator: one of
19599 <pre>
19600                = *= /= %= +=                -=    &lt;&lt;=    &gt;&gt;=      &amp;=   ^=   |=</pre>
19601  (<a href="#6.5.17">6.5.17</a>) expression:
19602 <pre>
19603                assignment-expression
19604                expression , assignment-expression</pre>
19605  (<a href="#6.6">6.6</a>) constant-expression:
19606 <pre>
19607                conditional-expression</pre>
19608
19609 <a name="A.2.2" href="#A.2.2"><h4>A.2.2 Declarations</h4></a>
19610  (<a href="#6.7">6.7</a>) declaration:
19611 <pre>
19612                 declaration-specifiers init-declarator-listopt ;</pre>
19613  (<a href="#6.7">6.7</a>) declaration-specifiers:
19614 <pre>
19615                 storage-class-specifier declaration-specifiersopt
19616                 type-specifier declaration-specifiersopt
19617                 type-qualifier declaration-specifiersopt
19618                 function-specifier declaration-specifiersopt</pre>
19619  (<a href="#6.7">6.7</a>) init-declarator-list:
19620 <pre>
19621                 init-declarator
19622                 init-declarator-list , init-declarator</pre>
19623  (<a href="#6.7">6.7</a>) init-declarator:
19624 <pre>
19625                 declarator
19626                 declarator = initializer</pre>
19627  (<a href="#6.7.1">6.7.1</a>) storage-class-specifier:
19628 <!--page 424 indent 0-->
19629 <pre>
19630                typedef
19631                extern
19632                static
19633                auto
19634                register</pre>
19635  (<a href="#6.7.2">6.7.2</a>) type-specifier:
19636 <pre>
19637                 void
19638                 char
19639                 short
19640                 int
19641                 long
19642                 float
19643                 double
19644                 signed
19645                 unsigned
19646                 _Bool
19647                 _Complex
19648                 struct-or-union-specifier                                                 *
19649                 enum-specifier
19650                 typedef-name</pre>
19651  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union-specifier:
19652 <pre>
19653                 struct-or-union identifieropt { struct-declaration-list }
19654                 struct-or-union identifier</pre>
19655  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union:
19656 <pre>
19657                 struct
19658                 union</pre>
19659  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration-list:
19660 <pre>
19661                 struct-declaration
19662                 struct-declaration-list struct-declaration</pre>
19663  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration:
19664 <pre>
19665                 specifier-qualifier-list struct-declarator-list ;</pre>
19666  (<a href="#6.7.2.1">6.7.2.1</a>) specifier-qualifier-list:
19667 <pre>
19668                 type-specifier specifier-qualifier-listopt
19669                 type-qualifier specifier-qualifier-listopt</pre>
19670  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator-list:
19671 <pre>
19672                 struct-declarator
19673                 struct-declarator-list , struct-declarator</pre>
19674  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator:
19675 <!--page 425 indent 0-->
19676 <pre>
19677                 declarator
19678                 declaratoropt : constant-expression</pre>
19679  (<a href="#6.7.2.2">6.7.2.2</a>) enum-specifier:
19680 <pre>
19681                enum identifieropt { enumerator-list }
19682                enum identifieropt { enumerator-list , }
19683                enum identifier</pre>
19684  (<a href="#6.7.2.2">6.7.2.2</a>) enumerator-list:
19685 <pre>
19686                enumerator
19687                enumerator-list , enumerator</pre>
19688  (<a href="#6.7.2.2">6.7.2.2</a>) enumerator:
19689 <pre>
19690                enumeration-constant
19691                enumeration-constant = constant-expression</pre>
19692  (<a href="#6.7.3">6.7.3</a>) type-qualifier:
19693 <pre>
19694                const
19695                restrict
19696                volatile</pre>
19697  (<a href="#6.7.4">6.7.4</a>) function-specifier:
19698 <pre>
19699                 inline</pre>
19700  (<a href="#6.7.5">6.7.5</a>) declarator:
19701 <pre>
19702                pointeropt direct-declarator</pre>
19703  (<a href="#6.7.5">6.7.5</a>) direct-declarator:
19704 <pre>
19705                 identifier
19706                 ( declarator )
19707                 direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
19708                 direct-declarator [ static type-qualifier-listopt assignment-expression ]
19709                 direct-declarator [ type-qualifier-list static assignment-expression ]
19710                 direct-declarator [ type-qualifier-listopt * ]
19711                 direct-declarator ( parameter-type-list )
19712                 direct-declarator ( identifier-listopt )</pre>
19713  (<a href="#6.7.5">6.7.5</a>) pointer:
19714 <pre>
19715                 * type-qualifier-listopt
19716                 * type-qualifier-listopt pointer</pre>
19717  (<a href="#6.7.5">6.7.5</a>) type-qualifier-list:
19718 <pre>
19719                type-qualifier
19720                type-qualifier-list type-qualifier</pre>
19721  (<a href="#6.7.5">6.7.5</a>) parameter-type-list:
19722 <!--page 426 indent 0-->
19723 <pre>
19724               parameter-list
19725               parameter-list , ...</pre>
19726  (<a href="#6.7.5">6.7.5</a>) parameter-list:
19727 <pre>
19728               parameter-declaration
19729               parameter-list , parameter-declaration</pre>
19730  (<a href="#6.7.5">6.7.5</a>) parameter-declaration:
19731 <pre>
19732               declaration-specifiers declarator
19733               declaration-specifiers abstract-declaratoropt</pre>
19734  (<a href="#6.7.5">6.7.5</a>) identifier-list:
19735 <pre>
19736                 identifier
19737                 identifier-list , identifier</pre>
19738  (<a href="#6.7.6">6.7.6</a>) type-name:
19739 <pre>
19740                specifier-qualifier-list abstract-declaratoropt</pre>
19741  (<a href="#6.7.6">6.7.6</a>) abstract-declarator:
19742 <pre>
19743                pointer
19744                pointeropt direct-abstract-declarator</pre>
19745  (<a href="#6.7.6">6.7.6</a>) direct-abstract-declarator:
19746 <pre>
19747                 ( abstract-declarator )
19748                 direct-abstract-declaratoropt [ type-qualifier-listopt
19749                                assignment-expressionopt ]
19750                 direct-abstract-declaratoropt [ static type-qualifier-listopt
19751                                assignment-expression ]
19752                 direct-abstract-declaratoropt [ type-qualifier-list static
19753                                assignment-expression ]
19754                 direct-abstract-declaratoropt [ * ]
19755                 direct-abstract-declaratoropt ( parameter-type-listopt )</pre>
19756  (<a href="#6.7.7">6.7.7</a>) typedef-name:
19757 <pre>
19758                identifier</pre>
19759  (<a href="#6.7.8">6.7.8</a>) initializer:
19760 <pre>
19761                  assignment-expression
19762                  { initializer-list }
19763                  { initializer-list , }</pre>
19764  (<a href="#6.7.8">6.7.8</a>) initializer-list:
19765 <pre>
19766                  designationopt initializer
19767                  initializer-list , designationopt initializer</pre>
19768  (<a href="#6.7.8">6.7.8</a>) designation:
19769 <!--page 427 indent 0-->
19770 <pre>
19771                designator-list =</pre>
19772  (<a href="#6.7.8">6.7.8</a>) designator-list:
19773 <pre>
19774                designator
19775                designator-list designator</pre>
19776  (<a href="#6.7.8">6.7.8</a>) designator:
19777 <pre>
19778                [ constant-expression ]
19779                . identifier</pre>
19780
19781 <a name="A.2.3" href="#A.2.3"><h4>A.2.3 Statements</h4></a>
19782  (<a href="#6.8">6.8</a>) statement:
19783 <pre>
19784                labeled-statement
19785                compound-statement
19786                expression-statement
19787                selection-statement
19788                iteration-statement
19789                jump-statement</pre>
19790  (<a href="#6.8.1">6.8.1</a>) labeled-statement:
19791 <pre>
19792                 identifier : statement
19793                 case constant-expression : statement
19794                 default : statement</pre>
19795  (<a href="#6.8.2">6.8.2</a>) compound-statement:
19796 <pre>
19797               { block-item-listopt }</pre>
19798  (<a href="#6.8.2">6.8.2</a>) block-item-list:
19799 <pre>
19800                 block-item
19801                 block-item-list block-item</pre>
19802  (<a href="#6.8.2">6.8.2</a>) block-item:
19803 <pre>
19804                 declaration
19805                 statement</pre>
19806  (<a href="#6.8.3">6.8.3</a>) expression-statement:
19807 <pre>
19808                expressionopt ;</pre>
19809  (<a href="#6.8.4">6.8.4</a>) selection-statement:
19810 <!--page 428 indent 0-->
19811 <pre>
19812                 if ( expression ) statement
19813                 if ( expression ) statement else statement
19814                 switch ( expression ) statement</pre>
19815  (<a href="#6.8.5">6.8.5</a>) iteration-statement:
19816 <pre>
19817                  while ( expression ) statement
19818                  do statement while ( expression ) ;
19819                  for ( expressionopt ; expressionopt ; expressionopt ) statement
19820                  for ( declaration expressionopt ; expressionopt ) statement</pre>
19821  (<a href="#6.8.6">6.8.6</a>) jump-statement:
19822 <pre>
19823                goto identifier ;
19824                continue ;
19825                break ;
19826                return expressionopt ;</pre>
19827
19828 <a name="A.2.4" href="#A.2.4"><h4>A.2.4 External definitions</h4></a>
19829  (<a href="#6.9">6.9</a>) translation-unit:
19830 <pre>
19831                 external-declaration
19832                 translation-unit external-declaration</pre>
19833  (<a href="#6.9">6.9</a>) external-declaration:
19834 <pre>
19835                 function-definition
19836                 declaration</pre>
19837  (<a href="#6.9.1">6.9.1</a>) function-definition:
19838 <pre>
19839                 declaration-specifiers declarator declaration-listopt compound-statement</pre>
19840  (<a href="#6.9.1">6.9.1</a>) declaration-list:
19841 <pre>
19842                declaration
19843                declaration-list declaration</pre>
19844
19845 <a name="A.3" href="#A.3"><h3>A.3 Preprocessing directives</h3></a>
19846  (<a href="#6.10">6.10</a>) preprocessing-file:
19847 <pre>
19848                groupopt</pre>
19849  (<a href="#6.10">6.10</a>) group:
19850 <pre>
19851                  group-part
19852                  group group-part</pre>
19853  (<a href="#6.10">6.10</a>) group-part:
19854 <pre>
19855                if-section
19856                control-line
19857                text-line
19858                # non-directive</pre>
19859  (<a href="#6.10">6.10</a>) if-section:
19860 <!--page 429 indent 0-->
19861 <pre>
19862                  if-group elif-groupsopt else-groupopt endif-line</pre>
19863  (<a href="#6.10">6.10</a>) if-group:
19864 <pre>
19865                 # if     constant-expression new-line groupopt
19866                 # ifdef identifier new-line groupopt
19867                 # ifndef identifier new-line groupopt</pre>
19868  (<a href="#6.10">6.10</a>) elif-groups:
19869 <pre>
19870                 elif-group
19871                 elif-groups elif-group</pre>
19872  (<a href="#6.10">6.10</a>) elif-group:
19873 <pre>
19874                 # elif        constant-expression new-line groupopt</pre>
19875  (<a href="#6.10">6.10</a>) else-group:
19876 <pre>
19877                 # else        new-line groupopt</pre>
19878  (<a href="#6.10">6.10</a>) endif-line:
19879 <pre>
19880                 # endif       new-line</pre>
19881  (<a href="#6.10">6.10</a>) control-line:
19882 <pre>
19883                # include pp-tokens new-line
19884                # define identifier replacement-list new-line
19885                # define identifier lparen identifier-listopt )
19886                                                replacement-list new-line
19887                # define identifier lparen ... ) replacement-list new-line
19888                # define identifier lparen identifier-list , ... )
19889                                                replacement-list new-line
19890                # undef   identifier new-line
19891                # line    pp-tokens new-line
19892                # error   pp-tokensopt new-line
19893                # pragma pp-tokensopt new-line
19894                #         new-line</pre>
19895  (<a href="#6.10">6.10</a>) text-line:
19896 <pre>
19897                 pp-tokensopt new-line</pre>
19898  (<a href="#6.10">6.10</a>) non-directive:
19899 <pre>
19900                pp-tokens new-line</pre>
19901  (<a href="#6.10">6.10</a>) lparen:
19902 <pre>
19903                   a ( character not immediately preceded by white-space</pre>
19904  (<a href="#6.10">6.10</a>) replacement-list:
19905 <!--page 430 indent 0-->
19906 <pre>
19907                pp-tokensopt</pre>
19908  (<a href="#6.10">6.10</a>) pp-tokens:
19909 <pre>
19910                preprocessing-token
19911                pp-tokens preprocessing-token</pre>
19912  (<a href="#6.10">6.10</a>) new-line:
19913 <!--page 431 indent 0-->
19914 <pre>
19915                the new-line character</pre>
19916
19917 <a name="B" href="#B"><h2>Annex B</h2></a>
19918 <pre>
19919                                (informative)
19920                            Library summary</pre>
19921
19922 <a name="B.1" href="#B.1"><h3>B.1 Diagnostics <assert.h></h3></a>
19923 <pre>
19924         NDEBUG
19925         void assert(scalar expression);</pre>
19926
19927 <a name="B.2" href="#B.2"><h3>B.2 Complex <complex.h></h3></a>
19928 <!--page 432 indent -1-->
19929 <!--page 433 indent 0-->
19930 <pre>
19931         complex               imaginary               I
19932         _Complex_I            _Imaginary_I
19933         #pragma STDC CX_LIMITED_RANGE on-off-switch
19934         double complex cacos(double complex z);
19935         float complex cacosf(float complex z);
19936         long double complex cacosl(long double complex z);
19937         double complex casin(double complex z);
19938         float complex casinf(float complex z);
19939         long double complex casinl(long double complex z);
19940         double complex catan(double complex z);
19941         float complex catanf(float complex z);
19942         long double complex catanl(long double complex z);
19943         double complex ccos(double complex z);
19944         float complex ccosf(float complex z);
19945         long double complex ccosl(long double complex z);
19946         double complex csin(double complex z);
19947         float complex csinf(float complex z);
19948         long double complex csinl(long double complex z);
19949         double complex ctan(double complex z);
19950         float complex ctanf(float complex z);
19951         long double complex ctanl(long double complex z);
19952         double complex cacosh(double complex z);
19953         float complex cacoshf(float complex z);
19954         long double complex cacoshl(long double complex z);
19955         double complex casinh(double complex z);
19956         float complex casinhf(float complex z);
19957         long double complex casinhl(long double complex z);
19958         double complex catanh(double complex z);
19959         float complex catanhf(float complex z);
19960         long double complex catanhl(long double complex z);
19961        double complex ccosh(double complex z);
19962        float complex ccoshf(float complex z);
19963        long double complex ccoshl(long double complex z);
19964        double complex csinh(double complex z);
19965        float complex csinhf(float complex z);
19966        long double complex csinhl(long double complex z);
19967        double complex ctanh(double complex z);
19968        float complex ctanhf(float complex z);
19969        long double complex ctanhl(long double complex z);
19970        double complex cexp(double complex z);
19971        float complex cexpf(float complex z);
19972        long double complex cexpl(long double complex z);
19973        double complex clog(double complex z);
19974        float complex clogf(float complex z);
19975        long double complex clogl(long double complex z);
19976        double cabs(double complex z);
19977        float cabsf(float complex z);
19978        long double cabsl(long double complex z);
19979        double complex cpow(double complex x, double complex y);
19980        float complex cpowf(float complex x, float complex y);
19981        long double complex cpowl(long double complex x,
19982             long double complex y);
19983        double complex csqrt(double complex z);
19984        float complex csqrtf(float complex z);
19985        long double complex csqrtl(long double complex z);
19986        double carg(double complex z);
19987        float cargf(float complex z);
19988        long double cargl(long double complex z);
19989        double cimag(double complex z);
19990        float cimagf(float complex z);
19991        long double cimagl(long double complex z);
19992        double complex conj(double complex z);
19993        float complex conjf(float complex z);
19994        long double complex conjl(long double complex z);
19995        double complex cproj(double complex z);
19996        float complex cprojf(float complex z);
19997        long double complex cprojl(long double complex z);
19998        double creal(double complex z);
19999        float crealf(float complex z);
20000        long double creall(long double complex z);</pre>
20001
20002 <a name="B.3" href="#B.3"><h3>B.3 Character handling <ctype.h></h3></a>
20003 <pre>
20004         int    isalnum(int c);
20005         int    isalpha(int c);
20006         int    isblank(int c);
20007         int    iscntrl(int c);
20008         int    isdigit(int c);
20009         int    isgraph(int c);
20010         int    islower(int c);
20011         int    isprint(int c);
20012         int    ispunct(int c);
20013         int    isspace(int c);
20014         int    isupper(int c);
20015         int    isxdigit(int c);
20016         int    tolower(int c);
20017         int    toupper(int c);</pre>
20018
20019 <a name="B.4" href="#B.4"><h3>B.4 Errors <errno.h></h3></a>
20020 <pre>
20021         EDOM            EILSEQ             ERANGE            errno</pre>
20022
20023 <a name="B.5" href="#B.5"><h3>B.5 Floating-point environment <fenv.h></h3></a>
20024 <!--page 434 indent 0-->
20025 <pre>
20026         fenv_t                 FE_OVERFLOW             FE_TOWARDZERO
20027         fexcept_t              FE_UNDERFLOW            FE_UPWARD
20028         FE_DIVBYZERO           FE_ALL_EXCEPT           FE_DFL_ENV
20029         FE_INEXACT             FE_DOWNWARD
20030         FE_INVALID             FE_TONEAREST
20031         #pragma STDC FENV_ACCESS on-off-switch
20032         int feclearexcept(int excepts);
20033         int fegetexceptflag(fexcept_t *flagp, int excepts);
20034         int feraiseexcept(int excepts);
20035         int fesetexceptflag(const fexcept_t *flagp,
20036              int excepts);
20037         int fetestexcept(int excepts);
20038         int fegetround(void);
20039         int fesetround(int round);
20040         int fegetenv(fenv_t *envp);
20041         int feholdexcept(fenv_t *envp);
20042         int fesetenv(const fenv_t *envp);
20043         int feupdateenv(const fenv_t *envp);</pre>
20044
20045 <a name="B.6" href="#B.6"><h3>B.6 Characteristics of floating types <float.h></h3></a>
20046 <pre>
20047        FLT_ROUNDS              DBL_MIN_EXP             FLT_MAX
20048        FLT_EVAL_METHOD         LDBL_MIN_EXP            DBL_MAX
20049        FLT_RADIX               FLT_MIN_10_EXP          LDBL_MAX
20050        FLT_MANT_DIG            DBL_MIN_10_EXP          FLT_EPSILON
20051        DBL_MANT_DIG            LDBL_MIN_10_EXP         DBL_EPSILON
20052        LDBL_MANT_DIG           FLT_MAX_EXP             LDBL_EPSILON
20053        DECIMAL_DIG             DBL_MAX_EXP             FLT_MIN
20054        FLT_DIG                 LDBL_MAX_EXP            DBL_MIN
20055        DBL_DIG                 FLT_MAX_10_EXP          LDBL_MIN
20056        LDBL_DIG                DBL_MAX_10_EXP
20057        FLT_MIN_EXP             LDBL_MAX_10_EXP</pre>
20058
20059 <a name="B.7" href="#B.7"><h3>B.7 Format conversion of integer types <inttypes.h></h3></a>
20060 <!--page 435 indent 0-->
20061 <pre>
20062        imaxdiv_t
20063        PRIdN        PRIdLEASTN        PRIdFASTN        PRIdMAX     PRIdPTR
20064        PRIiN        PRIiLEASTN        PRIiFASTN        PRIiMAX     PRIiPTR
20065        PRIoN        PRIoLEASTN        PRIoFASTN        PRIoMAX     PRIoPTR
20066        PRIuN        PRIuLEASTN        PRIuFASTN        PRIuMAX     PRIuPTR
20067        PRIxN        PRIxLEASTN        PRIxFASTN        PRIxMAX     PRIxPTR
20068        PRIXN        PRIXLEASTN        PRIXFASTN        PRIXMAX     PRIXPTR
20069        SCNdN        SCNdLEASTN        SCNdFASTN        SCNdMAX     SCNdPTR
20070        SCNiN        SCNiLEASTN        SCNiFASTN        SCNiMAX     SCNiPTR
20071        SCNoN        SCNoLEASTN        SCNoFASTN        SCNoMAX     SCNoPTR
20072        SCNuN        SCNuLEASTN        SCNuFASTN        SCNuMAX     SCNuPTR
20073        SCNxN        SCNxLEASTN        SCNxFASTN        SCNxMAX     SCNxPTR
20074        intmax_t imaxabs(intmax_t j);
20075        imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
20076        intmax_t strtoimax(const char * restrict nptr,
20077                char ** restrict endptr, int base);
20078        uintmax_t strtoumax(const char * restrict nptr,
20079                char ** restrict endptr, int base);
20080        intmax_t wcstoimax(const wchar_t * restrict nptr,
20081                wchar_t ** restrict endptr, int base);
20082        uintmax_t wcstoumax(const wchar_t * restrict nptr,
20083                wchar_t ** restrict endptr, int base);</pre>
20084
20085 <a name="B.8" href="#B.8"><h3>B.8 Alternative spellings <iso646.h></h3></a>
20086 <pre>
20087       and             bitor             not_eq            xor
20088       and_eq          compl             or                xor_eq
20089       bitand          not               or_eq</pre>
20090
20091 <a name="B.9" href="#B.9"><h3>B.9 Sizes of integer types <limits.h></h3></a>
20092 <pre>
20093       CHAR_BIT        CHAR_MAX          INT_MIN           ULONG_MAX
20094       SCHAR_MIN       MB_LEN_MAX        INT_MAX           LLONG_MIN
20095       SCHAR_MAX       SHRT_MIN          UINT_MAX          LLONG_MAX
20096       UCHAR_MAX       SHRT_MAX          LONG_MIN          ULLONG_MAX
20097       CHAR_MIN        USHRT_MAX         LONG_MAX</pre>
20098
20099 <a name="B.10" href="#B.10"><h3>B.10 Localization <locale.h></h3></a>
20100 <pre>
20101       struct lconv    LC_ALL            LC_CTYPE          LC_NUMERIC
20102       NULL            LC_COLLATE        LC_MONETARY       LC_TIME
20103       char *setlocale(int category, const char *locale);
20104       struct lconv *localeconv(void);</pre>
20105
20106 <a name="B.11" href="#B.11"><h3>B.11 Mathematics <math.h></h3></a>
20107 <!--page 436 indent -1-->
20108 <!--page 437 indent -1-->
20109 <!--page 438 indent -1-->
20110 <!--page 439 indent -1-->
20111 <!--page 440 indent 0-->
20112 <pre>
20113       float_t               FP_INFINITE             FP_FAST_FMAL
20114       double_t              FP_NAN                  FP_ILOGB0
20115       HUGE_VAL              FP_NORMAL               FP_ILOGBNAN
20116       HUGE_VALF             FP_SUBNORMAL            MATH_ERRNO
20117       HUGE_VALL             FP_ZERO                 MATH_ERREXCEPT
20118       INFINITY              FP_FAST_FMA             math_errhandling
20119       NAN                   FP_FAST_FMAF
20120        #pragma STDC FP_CONTRACT on-off-switch
20121        int fpclassify(real-floating x);
20122        int isfinite(real-floating x);
20123        int isinf(real-floating x);
20124        int isnan(real-floating x);
20125        int isnormal(real-floating x);
20126        int signbit(real-floating x);
20127        double acos(double x);
20128        float acosf(float x);
20129        long double acosl(long double x);
20130        double asin(double x);
20131        float asinf(float x);
20132        long double asinl(long double x);
20133        double atan(double x);
20134        float atanf(float x);
20135        long double atanl(long double x);
20136        double atan2(double y, double x);
20137        float atan2f(float y, float x);
20138        long double atan2l(long double y, long double x);
20139        double cos(double x);
20140        float cosf(float x);
20141        long double cosl(long double x);
20142        double sin(double x);
20143        float sinf(float x);
20144        long double sinl(long double x);
20145        double tan(double x);
20146        float tanf(float x);
20147        long double tanl(long double x);
20148        double acosh(double x);
20149        float acoshf(float x);
20150        long double acoshl(long double x);
20151        double asinh(double x);
20152        float asinhf(float x);
20153        long double asinhl(long double x);
20154        double atanh(double x);
20155        float atanhf(float x);
20156        long double atanhl(long double x);
20157        double cosh(double x);
20158        float coshf(float x);
20159        long double coshl(long double x);
20160        double sinh(double x);
20161        float sinhf(float x);
20162        long double sinhl(long double x);
20163        double tanh(double x);
20164        float tanhf(float x);
20165        long double tanhl(long double x);
20166        double exp(double x);
20167        float expf(float x);
20168        long double expl(long double x);
20169        double exp2(double x);
20170        float exp2f(float x);
20171        long double exp2l(long double x);
20172        double expm1(double x);
20173        float expm1f(float x);
20174        long double expm1l(long double x);
20175          double frexp(double value, int *exp);
20176          float frexpf(float value, int *exp);
20177          long double frexpl(long double value, int *exp);
20178          int ilogb(double x);
20179          int ilogbf(float x);
20180          int ilogbl(long double x);
20181          double ldexp(double x, int exp);
20182          float ldexpf(float x, int exp);
20183          long double ldexpl(long double x, int exp);
20184          double log(double x);
20185          float logf(float x);
20186          long double logl(long double x);
20187          double log10(double x);
20188          float log10f(float x);
20189          long double log10l(long double x);
20190          double log1p(double x);
20191          float log1pf(float x);
20192          long double log1pl(long double x);
20193          double log2(double x);
20194          float log2f(float x);
20195          long double log2l(long double x);
20196          double logb(double x);
20197          float logbf(float x);
20198          long double logbl(long double x);
20199          double modf(double value, double *iptr);
20200          float modff(float value, float *iptr);
20201          long double modfl(long double value, long double *iptr);
20202          double scalbn(double x, int n);
20203          float scalbnf(float x, int n);
20204          long double scalbnl(long double x, int n);
20205          double scalbln(double x, long int n);
20206          float scalblnf(float x, long int n);
20207          long double scalblnl(long double x, long int n);
20208          double cbrt(double x);
20209          float cbrtf(float x);
20210          long double cbrtl(long double x);
20211          double fabs(double x);
20212          float fabsf(float x);
20213          long double fabsl(long double x);
20214          double hypot(double x, double y);
20215          float hypotf(float x, float y);
20216        long double hypotl(long double x, long double y);
20217        double pow(double x, double y);
20218        float powf(float x, float y);
20219        long double powl(long double x, long double y);
20220        double sqrt(double x);
20221        float sqrtf(float x);
20222        long double sqrtl(long double x);
20223        double erf(double x);
20224        float erff(float x);
20225        long double erfl(long double x);
20226        double erfc(double x);
20227        float erfcf(float x);
20228        long double erfcl(long double x);
20229        double lgamma(double x);
20230        float lgammaf(float x);
20231        long double lgammal(long double x);
20232        double tgamma(double x);
20233        float tgammaf(float x);
20234        long double tgammal(long double x);
20235        double ceil(double x);
20236        float ceilf(float x);
20237        long double ceill(long double x);
20238        double floor(double x);
20239        float floorf(float x);
20240        long double floorl(long double x);
20241        double nearbyint(double x);
20242        float nearbyintf(float x);
20243        long double nearbyintl(long double x);
20244        double rint(double x);
20245        float rintf(float x);
20246        long double rintl(long double x);
20247        long int lrint(double x);
20248        long int lrintf(float x);
20249        long int lrintl(long double x);
20250        long long int llrint(double x);
20251        long long int llrintf(float x);
20252        long long int llrintl(long double x);
20253        double round(double x);
20254        float roundf(float x);
20255        long double roundl(long double x);
20256        long int lround(double x);
20257          long int lroundf(float x);
20258          long int lroundl(long double x);
20259          long long int llround(double x);
20260          long long int llroundf(float x);
20261          long long int llroundl(long double x);
20262          double trunc(double x);
20263          float truncf(float x);
20264          long double truncl(long double x);
20265          double fmod(double x, double y);
20266          float fmodf(float x, float y);
20267          long double fmodl(long double x, long double y);
20268          double remainder(double x, double y);
20269          float remainderf(float x, float y);
20270          long double remainderl(long double x, long double y);
20271          double remquo(double x, double y, int *quo);
20272          float remquof(float x, float y, int *quo);
20273          long double remquol(long double x, long double y,
20274               int *quo);
20275          double copysign(double x, double y);
20276          float copysignf(float x, float y);
20277          long double copysignl(long double x, long double y);
20278          double nan(const char *tagp);
20279          float nanf(const char *tagp);
20280          long double nanl(const char *tagp);
20281          double nextafter(double x, double y);
20282          float nextafterf(float x, float y);
20283          long double nextafterl(long double x, long double y);
20284          double nexttoward(double x, long double y);
20285          float nexttowardf(float x, long double y);
20286          long double nexttowardl(long double x, long double y);
20287          double fdim(double x, double y);
20288          float fdimf(float x, float y);
20289          long double fdiml(long double x, long double y);
20290          double fmax(double x, double y);
20291          float fmaxf(float x, float y);
20292          long double fmaxl(long double x, long double y);
20293          double fmin(double x, double y);
20294          float fminf(float x, float y);
20295          long double fminl(long double x, long double y);
20296          double fma(double x, double y, double z);
20297          float fmaf(float x, float y, float z);
20298        long double fmal(long double x, long double y,
20299             long double z);
20300        int isgreater(real-floating x, real-floating y);
20301        int isgreaterequal(real-floating x, real-floating y);
20302        int isless(real-floating x, real-floating y);
20303        int islessequal(real-floating x, real-floating y);
20304        int islessgreater(real-floating x, real-floating y);
20305        int isunordered(real-floating x, real-floating y);</pre>
20306
20307 <a name="B.12" href="#B.12"><h3>B.12 Nonlocal jumps <setjmp.h></h3></a>
20308 <pre>
20309        jmp_buf
20310        int setjmp(jmp_buf env);
20311        void longjmp(jmp_buf env, int val);</pre>
20312
20313 <a name="B.13" href="#B.13"><h3>B.13 Signal handling <signal.h></h3></a>
20314 <pre>
20315        sig_atomic_t   SIG_IGN            SIGILL            SIGTERM
20316        SIG_DFL        SIGABRT            SIGINT
20317        SIG_ERR        SIGFPE             SIGSEGV
20318        void (*signal(int sig, void (*func)(int)))(int);
20319        int raise(int sig);</pre>
20320
20321 <a name="B.14" href="#B.14"><h3>B.14 Variable arguments <stdarg.h></h3></a>
20322 <pre>
20323        va_list
20324        type va_arg(va_list ap, type);
20325        void va_copy(va_list dest, va_list src);
20326        void va_end(va_list ap);
20327        void va_start(va_list ap, parmN);</pre>
20328
20329 <a name="B.15" href="#B.15"><h3>B.15 Boolean type and values <stdbool.h></h3></a>
20330 <!--page 441 indent 0-->
20331 <pre>
20332        bool
20333        true
20334        false
20335        __bool_true_false_are_defined</pre>
20336
20337 <a name="B.16" href="#B.16"><h3>B.16 Common definitions <stddef.h></h3></a>
20338 <pre>
20339          ptrdiff_t       size_t            wchar_t           NULL
20340          offsetof(type, member-designator)</pre>
20341
20342 <a name="B.17" href="#B.17"><h3>B.17 Integer types <stdint.h></h3></a>
20343 <pre>
20344          intN_t                INT_LEASTN_MIN          PTRDIFF_MAX
20345          uintN_t               INT_LEASTN_MAX          SIG_ATOMIC_MIN
20346          int_leastN_t          UINT_LEASTN_MAX         SIG_ATOMIC_MAX
20347          uint_leastN_t         INT_FASTN_MIN           SIZE_MAX
20348          int_fastN_t           INT_FASTN_MAX           WCHAR_MIN
20349          uint_fastN_t          UINT_FASTN_MAX          WCHAR_MAX
20350          intptr_t              INTPTR_MIN              WINT_MIN
20351          uintptr_t             INTPTR_MAX              WINT_MAX
20352          intmax_t              UINTPTR_MAX             INTN_C(value)
20353          uintmax_t             INTMAX_MIN              UINTN_C(value)
20354          INTN_MIN              INTMAX_MAX              INTMAX_C(value)
20355          INTN_MAX              UINTMAX_MAX             UINTMAX_C(value)
20356          UINTN_MAX             PTRDIFF_MIN</pre>
20357
20358 <a name="B.18" href="#B.18"><h3>B.18 Input/output <stdio.h></h3></a>
20359 <!--page 442 indent -1-->
20360 <!--page 443 indent 0-->
20361 <pre>
20362          size_t          _IOLBF            FILENAME_MAX      TMP_MAX
20363          FILE            _IONBF            L_tmpnam          stderr
20364          fpos_t          BUFSIZ            SEEK_CUR          stdin
20365          NULL            EOF               SEEK_END          stdout
20366          _IOFBF          FOPEN_MAX         SEEK_SET
20367          int remove(const char *filename);
20368          int rename(const char *old, const char *new);
20369          FILE *tmpfile(void);
20370          char *tmpnam(char *s);
20371          int fclose(FILE *stream);
20372          int fflush(FILE *stream);
20373          FILE *fopen(const char * restrict filename,
20374               const char * restrict mode);
20375          FILE *freopen(const char * restrict filename,
20376               const char * restrict mode,
20377               FILE * restrict stream);
20378          void setbuf(FILE * restrict stream,
20379               char * restrict buf);
20380        int setvbuf(FILE * restrict stream,
20381             char * restrict buf,
20382             int mode, size_t size);
20383        int fprintf(FILE * restrict stream,
20384             const char * restrict format, ...);
20385        int fscanf(FILE * restrict stream,
20386             const char * restrict format, ...);
20387        int printf(const char * restrict format, ...);
20388        int scanf(const char * restrict format, ...);
20389        int snprintf(char * restrict s, size_t n,
20390             const char * restrict format, ...);
20391        int sprintf(char * restrict s,
20392             const char * restrict format, ...);
20393        int sscanf(const char * restrict s,
20394             const char * restrict format, ...);
20395        int vfprintf(FILE * restrict stream,
20396             const char * restrict format, va_list arg);
20397        int vfscanf(FILE * restrict stream,
20398             const char * restrict format, va_list arg);
20399        int vprintf(const char * restrict format, va_list arg);
20400        int vscanf(const char * restrict format, va_list arg);
20401        int vsnprintf(char * restrict s, size_t n,
20402             const char * restrict format, va_list arg);
20403        int vsprintf(char * restrict s,
20404             const char * restrict format, va_list arg);
20405        int vsscanf(const char * restrict s,
20406             const char * restrict format, va_list arg);
20407        int fgetc(FILE *stream);
20408        char *fgets(char * restrict s, int n,
20409             FILE * restrict stream);
20410        int fputc(int c, FILE *stream);
20411        int fputs(const char * restrict s,
20412             FILE * restrict stream);
20413        int getc(FILE *stream);
20414        int getchar(void);
20415        char *gets(char *s);
20416        int putc(int c, FILE *stream);
20417        int putchar(int c);
20418        int puts(const char *s);
20419        int ungetc(int c, FILE *stream);
20420          size_t fread(void * restrict ptr,
20421               size_t size, size_t nmemb,
20422               FILE * restrict stream);
20423          size_t fwrite(const void * restrict ptr,
20424               size_t size, size_t nmemb,
20425               FILE * restrict stream);
20426          int fgetpos(FILE * restrict stream,
20427               fpos_t * restrict pos);
20428          int fseek(FILE *stream, long int offset, int whence);
20429          int fsetpos(FILE *stream, const fpos_t *pos);
20430          long int ftell(FILE *stream);
20431          void rewind(FILE *stream);
20432          void clearerr(FILE *stream);
20433          int feof(FILE *stream);
20434          int ferror(FILE *stream);
20435          void perror(const char *s);</pre>
20436
20437 <a name="B.19" href="#B.19"><h3>B.19 General utilities <stdlib.h></h3></a>
20438 <!--page 444 indent -1-->
20439 <!--page 445 indent 0-->
20440 <pre>
20441          size_t       ldiv_t             EXIT_FAILURE      MB_CUR_MAX
20442          wchar_t      lldiv_t            EXIT_SUCCESS
20443          div_t        NULL               RAND_MAX
20444          double atof(const char *nptr);
20445          int atoi(const char *nptr);
20446          long int atol(const char *nptr);
20447          long long int atoll(const char *nptr);
20448          double strtod(const char * restrict nptr,
20449               char ** restrict endptr);
20450          float strtof(const char * restrict nptr,
20451               char ** restrict endptr);
20452          long double strtold(const char * restrict nptr,
20453               char ** restrict endptr);
20454          long int strtol(const char * restrict nptr,
20455               char ** restrict endptr, int base);
20456          long long int strtoll(const char * restrict nptr,
20457               char ** restrict endptr, int base);
20458          unsigned long int strtoul(
20459               const char * restrict nptr,
20460               char ** restrict endptr, int base);
20461        unsigned long long int strtoull(
20462             const char * restrict nptr,
20463             char ** restrict endptr, int base);
20464        int rand(void);
20465        void srand(unsigned int seed);
20466        void *calloc(size_t nmemb, size_t size);
20467        void free(void *ptr);
20468        void *malloc(size_t size);
20469        void *realloc(void *ptr, size_t size);
20470        void abort(void);
20471        int atexit(void (*func)(void));
20472        void exit(int status);
20473        void _Exit(int status);
20474        char *getenv(const char *name);
20475        int system(const char *string);
20476        void *bsearch(const void *key, const void *base,
20477             size_t nmemb, size_t size,
20478             int (*compar)(const void *, const void *));
20479        void qsort(void *base, size_t nmemb, size_t size,
20480             int (*compar)(const void *, const void *));
20481        int abs(int j);
20482        long int labs(long int j);
20483        long long int llabs(long long int j);
20484        div_t div(int numer, int denom);
20485        ldiv_t ldiv(long int numer, long int denom);
20486        lldiv_t lldiv(long long int numer,
20487             long long int denom);
20488        int mblen(const char *s, size_t n);
20489        int mbtowc(wchar_t * restrict pwc,
20490             const char * restrict s, size_t n);
20491        int wctomb(char *s, wchar_t wchar);
20492        size_t mbstowcs(wchar_t * restrict pwcs,
20493             const char * restrict s, size_t n);
20494        size_t wcstombs(char * restrict s,
20495             const wchar_t * restrict pwcs, size_t n);</pre>
20496
20497 <a name="B.20" href="#B.20"><h3>B.20 String handling <string.h></h3></a>
20498 <!--page 446 indent 0-->
20499 <pre>
20500          size_t
20501          NULL
20502          void *memcpy(void * restrict s1,
20503               const void * restrict s2, size_t n);
20504          void *memmove(void *s1, const void *s2, size_t n);
20505          char *strcpy(char * restrict s1,
20506               const char * restrict s2);
20507          char *strncpy(char * restrict s1,
20508               const char * restrict s2, size_t n);
20509          char *strcat(char * restrict s1,
20510               const char * restrict s2);
20511          char *strncat(char * restrict s1,
20512               const char * restrict s2, size_t n);
20513          int memcmp(const void *s1, const void *s2, size_t n);
20514          int strcmp(const char *s1, const char *s2);
20515          int strcoll(const char *s1, const char *s2);
20516          int strncmp(const char *s1, const char *s2, size_t n);
20517          size_t strxfrm(char * restrict s1,
20518               const char * restrict s2, size_t n);
20519          void *memchr(const void *s, int c, size_t n);
20520          char *strchr(const char *s, int c);
20521          size_t strcspn(const char *s1, const char *s2);
20522          char *strpbrk(const char *s1, const char *s2);
20523          char *strrchr(const char *s, int c);
20524          size_t strspn(const char *s1, const char *s2);
20525          char *strstr(const char *s1, const char *s2);
20526          char *strtok(char * restrict s1,
20527               const char * restrict s2);
20528          void *memset(void *s, int c, size_t n);
20529          char *strerror(int errnum);
20530          size_t strlen(const char *s);</pre>
20531
20532 <a name="B.21" href="#B.21"><h3>B.21 Type-generic math <tgmath.h></h3></a>
20533 <pre>
20534        acos           sqrt               fmod              nextafter
20535        asin           fabs               frexp             nexttoward
20536        atan           atan2              hypot             remainder
20537        acosh          cbrt               ilogb             remquo
20538        asinh          ceil               ldexp             rint
20539        atanh          copysign           lgamma            round
20540        cos            erf                llrint            scalbn
20541        sin            erfc               llround           scalbln
20542        tan            exp2               log10             tgamma
20543        cosh           expm1              log1p             trunc
20544        sinh           fdim               log2              carg
20545        tanh           floor              logb              cimag
20546        exp            fma                lrint             conj
20547        log            fmax               lround            cproj
20548        pow            fmin               nearbyint         creal</pre>
20549
20550 <a name="B.22" href="#B.22"><h3>B.22 Date and time <time.h></h3></a>
20551 <!--page 447 indent 0-->
20552 <pre>
20553        NULL                  size_t                  time_t
20554        CLOCKS_PER_SEC        clock_t                 struct tm
20555        clock_t clock(void);
20556        double difftime(time_t time1, time_t time0);
20557        time_t mktime(struct tm *timeptr);
20558        time_t time(time_t *timer);
20559        char *asctime(const struct tm *timeptr);
20560        char *ctime(const time_t *timer);
20561        struct tm *gmtime(const time_t *timer);
20562        struct tm *localtime(const time_t *timer);
20563        size_t strftime(char * restrict s,
20564             size_t maxsize,
20565             const char * restrict format,
20566             const struct tm * restrict timeptr);</pre>
20567
20568 <a name="B.23" href="#B.23"><h3>B.23 Extended multibyte/wide character utilities <wchar.h></h3></a>
20569 <!--page 448 indent -1-->
20570 <!--page 449 indent 0-->
20571 <pre>
20572          wchar_t       wint_t             WCHAR_MAX
20573          size_t        struct tm          WCHAR_MIN
20574          mbstate_t     NULL               WEOF
20575          int fwprintf(FILE * restrict stream,
20576               const wchar_t * restrict format, ...);
20577          int fwscanf(FILE * restrict stream,
20578               const wchar_t * restrict format, ...);
20579          int swprintf(wchar_t * restrict s, size_t n,
20580               const wchar_t * restrict format, ...);
20581          int swscanf(const wchar_t * restrict s,
20582               const wchar_t * restrict format, ...);
20583          int vfwprintf(FILE * restrict stream,
20584               const wchar_t * restrict format, va_list arg);
20585          int vfwscanf(FILE * restrict stream,
20586               const wchar_t * restrict format, va_list arg);
20587          int vswprintf(wchar_t * restrict s, size_t n,
20588               const wchar_t * restrict format, va_list arg);
20589          int vswscanf(const wchar_t * restrict s,
20590               const wchar_t * restrict format, va_list arg);
20591          int vwprintf(const wchar_t * restrict format,
20592               va_list arg);
20593          int vwscanf(const wchar_t * restrict format,
20594               va_list arg);
20595          int wprintf(const wchar_t * restrict format, ...);
20596          int wscanf(const wchar_t * restrict format, ...);
20597          wint_t fgetwc(FILE *stream);
20598          wchar_t *fgetws(wchar_t * restrict s, int n,
20599               FILE * restrict stream);
20600          wint_t fputwc(wchar_t c, FILE *stream);
20601          int fputws(const wchar_t * restrict s,
20602               FILE * restrict stream);
20603          int fwide(FILE *stream, int mode);
20604          wint_t getwc(FILE *stream);
20605          wint_t getwchar(void);
20606          wint_t putwc(wchar_t c, FILE *stream);
20607          wint_t putwchar(wchar_t c);
20608          wint_t ungetwc(wint_t c, FILE *stream);
20609        double wcstod(const wchar_t * restrict nptr,
20610             wchar_t ** restrict endptr);
20611        float wcstof(const wchar_t * restrict nptr,
20612             wchar_t ** restrict endptr);
20613        long double wcstold(const wchar_t * restrict nptr,
20614             wchar_t ** restrict endptr);
20615        long int wcstol(const wchar_t * restrict nptr,
20616             wchar_t ** restrict endptr, int base);
20617        long long int wcstoll(const wchar_t * restrict nptr,
20618             wchar_t ** restrict endptr, int base);
20619        unsigned long int wcstoul(const wchar_t * restrict nptr,
20620             wchar_t ** restrict endptr, int base);
20621        unsigned long long int wcstoull(
20622             const wchar_t * restrict nptr,
20623             wchar_t ** restrict endptr, int base);
20624        wchar_t *wcscpy(wchar_t * restrict s1,
20625             const wchar_t * restrict s2);
20626        wchar_t *wcsncpy(wchar_t * restrict s1,
20627             const wchar_t * restrict s2, size_t n);
20628        wchar_t *wmemcpy(wchar_t * restrict s1,
20629             const wchar_t * restrict s2, size_t n);
20630        wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
20631             size_t n);
20632        wchar_t *wcscat(wchar_t * restrict s1,
20633             const wchar_t * restrict s2);
20634        wchar_t *wcsncat(wchar_t * restrict s1,
20635             const wchar_t * restrict s2, size_t n);
20636        int wcscmp(const wchar_t *s1, const wchar_t *s2);
20637        int wcscoll(const wchar_t *s1, const wchar_t *s2);
20638        int wcsncmp(const wchar_t *s1, const wchar_t *s2,
20639             size_t n);
20640        size_t wcsxfrm(wchar_t * restrict s1,
20641             const wchar_t * restrict s2, size_t n);
20642        int wmemcmp(const wchar_t *s1, const wchar_t *s2,
20643             size_t n);
20644        wchar_t *wcschr(const wchar_t *s, wchar_t c);
20645        size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
20646        wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2); *
20647        wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
20648        size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
20649        wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
20650          wchar_t *wcstok(wchar_t * restrict s1,
20651               const wchar_t * restrict s2,
20652               wchar_t ** restrict ptr);
20653          wchar_t *wmemchr(const wchar_t *s, wchar_t c, size_t n);
20654          size_t wcslen(const wchar_t *s);
20655          wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);
20656          size_t wcsftime(wchar_t * restrict s, size_t maxsize,
20657               const wchar_t * restrict format,
20658               const struct tm * restrict timeptr);
20659          wint_t btowc(int c);
20660          int wctob(wint_t c);
20661          int mbsinit(const mbstate_t *ps);
20662          size_t mbrlen(const char * restrict s, size_t n,
20663               mbstate_t * restrict ps);
20664          size_t mbrtowc(wchar_t * restrict pwc,
20665               const char * restrict s, size_t n,
20666               mbstate_t * restrict ps);
20667          size_t wcrtomb(char * restrict s, wchar_t wc,
20668               mbstate_t * restrict ps);
20669          size_t mbsrtowcs(wchar_t * restrict dst,
20670               const char ** restrict src, size_t len,
20671               mbstate_t * restrict ps);
20672          size_t wcsrtombs(char * restrict dst,
20673               const wchar_t ** restrict src, size_t len,
20674               mbstate_t * restrict ps);</pre>
20675
20676 <a name="B.24" href="#B.24"><h3>B.24 Wide character classification and mapping utilities <wctype.h></h3></a>
20677 <!--page 450 indent -1-->
20678 <!--page 451 indent 4-->
20679 <pre>
20680          wint_t         wctrans_t          wctype_t          WEOF
20681          int   iswalnum(wint_t wc);
20682          int   iswalpha(wint_t wc);
20683          int   iswblank(wint_t wc);
20684          int   iswcntrl(wint_t wc);
20685          int   iswdigit(wint_t wc);
20686          int   iswgraph(wint_t wc);
20687          int   iswlower(wint_t wc);
20688          int   iswprint(wint_t wc);
20689          int   iswpunct(wint_t wc);
20690          int   iswspace(wint_t wc);
20691          int   iswupper(wint_t wc);
20692          int   iswxdigit(wint_t wc);
20693          int   iswctype(wint_t wc, wctype_t desc);
20694        wctype_t wctype(const char *property);
20695        wint_t towlower(wint_t wc);
20696        wint_t towupper(wint_t wc);
20697        wint_t towctrans(wint_t wc, wctrans_t desc);
20698        wctrans_t wctrans(const char *property);</pre>
20699
20700 <a name="C" href="#C"><h2>Annex C</h2></a>
20701 <p><!--para 1-->
20702 <pre>
20703                                      (informative)
20704                                    Sequence points</pre>
20705  The following are the sequence points described in <a href="#5.1.2.3">5.1.2.3</a>:
20706 <ul>
20707 <li>  The call to a function, after the arguments have been evaluated (<a href="#6.5.2.2">6.5.2.2</a>).
20708 <li>  The end of the first operand of the following operators: logical AND &amp;&amp; (<a href="#6.5.13">6.5.13</a>);
20709  logical OR || (<a href="#6.5.14">6.5.14</a>); conditional ? (<a href="#6.5.15">6.5.15</a>); comma , (<a href="#6.5.17">6.5.17</a>).
20710 <li>  The end of a full declarator: declarators (<a href="#6.7.5">6.7.5</a>);
20711 <li>  The end of a full expression: an initializer (<a href="#6.7.8">6.7.8</a>); the expression in an expression
20712  statement (<a href="#6.8.3">6.8.3</a>); the controlling expression of a selection statement (if or switch)
20713  (<a href="#6.8.4">6.8.4</a>); the controlling expression of a while or do statement (<a href="#6.8.5">6.8.5</a>); each of the
20714  expressions of a for statement (<a href="#6.8.5.3">6.8.5.3</a>); the expression in a return statement
20715  (<a href="#6.8.6.4">6.8.6.4</a>).
20716 <li>  Immediately before a library function returns (<a href="#7.1.4">7.1.4</a>).
20717 <li>  After the actions associated with each formatted input/output function conversion
20718  specifier (<a href="#7.19.6">7.19.6</a>, <a href="#7.24.2">7.24.2</a>).
20719 <li>  Immediately before and immediately after each call to a comparison function, and
20720  also between any call to a comparison function and any movement of the objects
20721  passed as arguments to that call (<a href="#7.20.5">7.20.5</a>).
20722 <!--page 452 indent 4-->
20723 </ul>
20724
20725 <a name="D" href="#D"><h2>Annex D</h2></a>
20726 <p><!--para 1-->
20727 <pre>
20728                                      (normative)
20729                 Universal character names for identifiers</pre>
20730  This clause lists the hexadecimal code values that are valid in universal character names
20731  in identifiers.
20732 <p><!--para 2-->
20733  This table is reproduced unchanged from ISO/IEC TR 10176:1998, produced by ISO/IEC
20734  JTC 1/SC 22/WG 20, except for the omission of ranges that are part of the basic character
20735  sets.
20736  Latin:            00AA, 00BA, 00C0-00D6, 00D8-00F6, 00F8-01F5, 01FA-0217,
20737 <pre>
20738                    0250-02A8, 1E00-1E9B, 1EA0-1EF9, 207F</pre>
20739  Greek:            0386, 0388-038A, 038C, 038E-03A1, 03A3-03CE, 03D0-03D6,
20740 <pre>
20741                    03DA, 03DC, 03DE, 03E0, 03E2-03F3, 1F00-1F15, 1F18-1F1D,
20742                    1F20-1F45, 1F48-1F4D, 1F50-1F57, 1F59, 1F5B, 1F5D,
20743                    1F5F-1F7D, 1F80-1FB4, 1FB6-1FBC, 1FC2-1FC4, 1FC6-1FCC,
20744                    1FD0-1FD3, 1FD6-1FDB, 1FE0-1FEC, 1FF2-1FF4, 1FF6-1FFC</pre>
20745  Cyrillic:         0401-040C, 040E-044F, 0451-045C, 045E-0481, 0490-04C4,
20746 <pre>
20747                    04C7-04C8, 04CB-04CC, 04D0-04EB, 04EE-04F5, 04F8-04F9</pre>
20748  Armenian:         0531-0556, 0561-0587
20749  Hebrew:           05B0-05B9,      05BB-05BD,       05BF,   05C1-05C2,      05D0-05EA,
20750 <pre>
20751                    05F0-05F2</pre>
20752  Arabic:           0621-063A, 0640-0652, 0670-06B7, 06BA-06BE, 06C0-06CE,
20753 <pre>
20754                    06D0-06DC, 06E5-06E8, 06EA-06ED</pre>
20755  Devanagari:       0901-0903, 0905-0939, 093E-094D, 0950-0952, 0958-0963
20756  Bengali:          0981-0983, 0985-098C, 098F-0990, 0993-09A8, 09AA-09B0,
20757 <pre>
20758                    09B2, 09B6-09B9, 09BE-09C4, 09C7-09C8, 09CB-09CD,
20759                    09DC-09DD, 09DF-09E3, 09F0-09F1</pre>
20760  Gurmukhi:         0A02, 0A05-0A0A, 0A0F-0A10, 0A13-0A28, 0A2A-0A30,
20761 <pre>
20762                    0A32-0A33, 0A35-0A36, 0A38-0A39, 0A3E-0A42, 0A47-0A48,
20763                    0A4B-0A4D, 0A59-0A5C, 0A5E, 0A74</pre>
20764  Gujarati:         0A81-0A83, 0A85-0A8B, 0A8D, 0A8F-0A91, 0A93-0AA8,
20765 <pre>
20766                    0AAA-0AB0,    0AB2-0AB3,     0AB5-0AB9, 0ABD-0AC5,
20767                    0AC7-0AC9, 0ACB-0ACD, 0AD0, 0AE0</pre>
20768  Oriya:            0B01-0B03, 0B05-0B0C, 0B0F-0B10, 0B13-0B28, 0B2A-0B30,
20769 <!--page 453 indent 0-->
20770 <pre>
20771                    0B32-0B33, 0B36-0B39, 0B3E-0B43, 0B47-0B48, 0B4B-0B4D,
20772                  0B5C-0B5D, 0B5F-0B61</pre>
20773  Tamil:          0B82-0B83, 0B85-0B8A, 0B8E-0B90, 0B92-0B95, 0B99-0B9A,
20774 <pre>
20775                  0B9C, 0B9E-0B9F, 0BA3-0BA4, 0BA8-0BAA, 0BAE-0BB5,
20776                  0BB7-0BB9, 0BBE-0BC2, 0BC6-0BC8, 0BCA-0BCD</pre>
20777  Telugu:         0C01-0C03, 0C05-0C0C, 0C0E-0C10, 0C12-0C28, 0C2A-0C33,
20778 <pre>
20779                  0C35-0C39, 0C3E-0C44, 0C46-0C48, 0C4A-0C4D, 0C60-0C61</pre>
20780  Kannada:        0C82-0C83, 0C85-0C8C, 0C8E-0C90, 0C92-0CA8, 0CAA-0CB3,
20781 <pre>
20782                  0CB5-0CB9, 0CBE-0CC4, 0CC6-0CC8, 0CCA-0CCD, 0CDE,
20783                  0CE0-0CE1</pre>
20784  Malayalam:      0D02-0D03, 0D05-0D0C, 0D0E-0D10, 0D12-0D28, 0D2A-0D39,
20785 <pre>
20786                  0D3E-0D43, 0D46-0D48, 0D4A-0D4D, 0D60-0D61</pre>
20787  Thai:           0E01-0E3A, 0E40-0E5B
20788  Lao:            0E81-0E82, 0E84, 0E87-0E88, 0E8A, 0E8D, 0E94-0E97,
20789 <pre>
20790                  0E99-0E9F,   0EA1-0EA3,  0EA5,  0EA7,  0EAA-0EAB,
20791                  0EAD-0EAE, 0EB0-0EB9, 0EBB-0EBD, 0EC0-0EC4, 0EC6,
20792                  0EC8-0ECD, 0EDC-0EDD</pre>
20793  Tibetan:        0F00, 0F18-0F19, 0F35, 0F37, 0F39, 0F3E-0F47, 0F49-0F69,
20794 <pre>
20795                  0F71-0F84, 0F86-0F8B, 0F90-0F95, 0F97, 0F99-0FAD,
20796                  0FB1-0FB7, 0FB9</pre>
20797  Georgian:       10A0-10C5, 10D0-10F6
20798  Hiragana:       3041-3093, 309B-309C
20799  Katakana:       30A1-30F6, 30FB-30FC
20800  Bopomofo:       3105-312C
20801  CJK Unified Ideographs: 4E00-9FA5
20802  Hangul:         AC00-D7A3
20803  Digits:         0660-0669, 06F0-06F9, 0966-096F, 09E6-09EF, 0A66-0A6F,
20804 <pre>
20805                  0AE6-0AEF, 0B66-0B6F, 0BE7-0BEF, 0C66-0C6F, 0CE6-0CEF,
20806                  0D66-0D6F, 0E50-0E59, 0ED0-0ED9, 0F20-0F33</pre>
20807  Special characters: 00B5, 00B7, 02B0-02B8, 02BB, 02BD-02C1, 02D0-02D1,
20808 <!--page 454 indent 4-->
20809 <pre>
20810                     02E0-02E4, 037A, 0559, 093D, 0B3D, 1FBE, 203F-2040, 2102,
20811                     2107, 210A-2113, 2115, 2118-211D, 2124, 2126, 2128, 212A-2131,
20812                     2133-2138, 2160-2182, 3005-3007, 3021-3029</pre>
20813
20814 <a name="E" href="#E"><h2>Annex E</h2></a>
20815 <p><!--para 1-->
20816 <pre>
20817                                     (informative)
20818                              Implementation limits</pre>
20819  The contents of the header <a href="#7.10">&lt;limits.h&gt;</a> are given below, in alphabetical order. The
20820  minimum magnitudes shown shall be replaced by implementation-defined magnitudes
20821  with the same sign. The values shall all be constant expressions suitable for use in #if
20822  preprocessing directives. The components are described further in <a href="#5.2.4.2.1">5.2.4.2.1</a>.
20823 <p><!--para 2-->
20824 <pre>
20825         #define     CHAR_BIT                               8
20826         #define     CHAR_MAX          UCHAR_MAX or SCHAR_MAX
20827         #define     CHAR_MIN                  0 or SCHAR_MIN
20828         #define     INT_MAX                           +32767
20829         #define     INT_MIN                           -32767
20830         #define     LONG_MAX                     +2147483647
20831         #define     LONG_MIN                     -2147483647
20832         #define     LLONG_MAX           +9223372036854775807
20833         #define     LLONG_MIN           -9223372036854775807
20834         #define     MB_LEN_MAX                             1
20835         #define     SCHAR_MAX                           +127
20836         #define     SCHAR_MIN                           -127
20837         #define     SHRT_MAX                          +32767
20838         #define     SHRT_MIN                          -32767
20839         #define     UCHAR_MAX                            255
20840         #define     USHRT_MAX                          65535
20841         #define     UINT_MAX                           65535
20842         #define     ULONG_MAX                     4294967295
20843         #define     ULLONG_MAX          18446744073709551615</pre>
20844  The contents of the header <a href="#7.7">&lt;float.h&gt;</a> are given below. All integer values, except
20845  FLT_ROUNDS, shall be constant expressions suitable for use in #if preprocessing
20846  directives; all floating values shall be constant expressions. The components are
20847  described further in <a href="#5.2.4.2.2">5.2.4.2.2</a>.
20848 <p><!--para 3-->
20849  The values given in the following list shall be replaced by implementation-defined
20850  expressions:
20851 <p><!--para 4-->
20852 <pre>
20853         #define FLT_EVAL_METHOD
20854         #define FLT_ROUNDS</pre>
20855  The values given in the following list shall be replaced by implementation-defined
20856  constant expressions that are greater or equal in magnitude (absolute value) to those
20857  shown, with the same sign:
20858 <!--page 455 indent 4-->
20859 <p><!--para 5-->
20860 <pre>
20861         #define    DBL_DIG                                        10
20862         #define    DBL_MANT_DIG
20863         #define    DBL_MAX_10_EXP                               +37
20864         #define    DBL_MAX_EXP
20865         #define    DBL_MIN_10_EXP                               -37
20866         #define    DBL_MIN_EXP
20867         #define    DECIMAL_DIG                                    10
20868         #define    FLT_DIG                                         6
20869         #define    FLT_MANT_DIG
20870         #define    FLT_MAX_10_EXP                               +37
20871         #define    FLT_MAX_EXP
20872         #define    FLT_MIN_10_EXP                               -37
20873         #define    FLT_MIN_EXP
20874         #define    FLT_RADIX                                       2
20875         #define    LDBL_DIG                                       10
20876         #define    LDBL_MANT_DIG
20877         #define    LDBL_MAX_10_EXP                              +37
20878         #define    LDBL_MAX_EXP
20879         #define    LDBL_MIN_10_EXP                              -37
20880         #define    LDBL_MIN_EXP</pre>
20881  The values given in the following list shall be replaced by implementation-defined
20882  constant expressions with values that are greater than or equal to those shown:
20883 <p><!--para 6-->
20884 <pre>
20885         #define DBL_MAX                                      1E+37
20886         #define FLT_MAX                                      1E+37
20887         #define LDBL_MAX                                     1E+37</pre>
20888  The values given in the following list shall be replaced by implementation-defined
20889  constant expressions with (positive) values that are less than or equal to those shown:
20890 <!--page 456 indent 4-->
20891 <pre>
20892         #define    DBL_EPSILON                                1E-9
20893         #define    DBL_MIN                                   1E-37
20894         #define    FLT_EPSILON                                1E-5
20895         #define    FLT_MIN                                   1E-37
20896         #define    LDBL_EPSILON                               1E-9
20897         #define    LDBL_MIN                                  1E-37</pre>
20898
20899 <a name="F" href="#F"><h2>Annex F</h2></a>
20900 <pre>
20901                                            (normative)
20902                        IEC 60559 floating-point arithmetic</pre>
20903
20904 <a name="F.1" href="#F.1"><h3>F.1 Introduction</h3></a>
20905 <p><!--para 1-->
20906  This annex specifies C language support for the IEC 60559 floating-point standard. The
20907  IEC 60559 floating-point standard is specifically Binary floating-point arithmetic for
20908  microprocessor systems, second edition (IEC 60559:1989), previously designated
20909  IEC 559:1989 and as IEEE Standard for Binary Floating-Point Arithmetic
20910  (ANSI/IEEE 754-1985). IEEE Standard for Radix-Independent Floating-Point
20911  Arithmetic (ANSI/IEEE 854-1987) generalizes the binary standard to remove
20912  dependencies on radix and word length. IEC 60559 generally refers to the floating-point
20913  standard, as in IEC 60559 operation, IEC 60559 format, etc. An implementation that
20914  defines __STDC_IEC_559__ shall conform to the specifications in this annex. Where
20915  a binding between the C language and IEC 60559 is indicated, the IEC 60559-specified
20916  behavior is adopted by reference, unless stated otherwise.
20917
20918 <a name="F.2" href="#F.2"><h3>F.2 Types</h3></a>
20919 <p><!--para 1-->
20920  The C floating types match the IEC 60559 formats as follows:
20921 <ul>
20922 <li>  The float type matches the IEC 60559 single format.
20923 <li>  The double type matches the IEC 60559 double format.
20924 <li>  The long double type matches an IEC 60559 extended format,<sup><a href="#note307"><b>307)</b></a></sup> else a
20925  non-IEC 60559 extended format, else the IEC 60559 double format.
20926 </ul>
20927  Any non-IEC 60559 extended format used for the long double type shall have more
20928  precision than IEC 60559 double and at least the range of IEC 60559 double.<sup><a href="#note308"><b>308)</b></a></sup>
20929  Recommended practice
20930 <p><!--para 2-->
20931  The long double type should match an IEC 60559 extended format.
20932  
20933  
20934  
20935  
20936 <!--page 457 indent 4-->
20937
20938 <h6>footnotes</h6>
20939 <p><a name="note307">307)</a> ''Extended'' is IEC 60559's double-extended data format. Extended refers to both the common 80-bit
20940  and quadruple 128-bit IEC 60559 formats.
20941
20942 <p><a name="note308">308)</a> A non-IEC 60559 long double type is required to provide infinity and NaNs, as its values include
20943  all double values.
20944
20945
20946 <a name="F.2.1" href="#F.2.1"><h4>F.2.1 Infinities, signed zeros, and NaNs</h4></a>
20947 <p><!--para 1-->
20948  This specification does not define the behavior of signaling NaNs.<sup><a href="#note309"><b>309)</b></a></sup> It generally uses
20949  the term NaN to denote quiet NaNs. The NAN and INFINITY macros and the nan
20950  functions in <a href="#7.12">&lt;math.h&gt;</a> provide designations for IEC 60559 NaNs and infinities.
20951
20952 <h6>footnotes</h6>
20953 <p><a name="note309">309)</a> Since NaNs created by IEC 60559 operations are always quiet, quiet NaNs (along with infinities) are
20954  sufficient for closure of the arithmetic.
20955
20956
20957 <a name="F.3" href="#F.3"><h3>F.3 Operators and functions</h3></a>
20958 <p><!--para 1-->
20959  C operators and functions provide IEC 60559 required and recommended facilities as
20960  listed below.
20961 <ul>
20962 <li>  The +, -, *, and / operators provide the IEC 60559 add, subtract, multiply, and
20963  divide operations.
20964 <li>  The sqrt functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 square root operation.
20965 <li>  The remainder functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 remainder
20966  operation. The remquo functions in <a href="#7.12">&lt;math.h&gt;</a> provide the same operation but
20967  with additional information.
20968 <li>  The rint functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 operation that rounds a
20969  floating-point number to an integer value (in the same precision). The nearbyint
20970  functions in <a href="#7.12">&lt;math.h&gt;</a> provide the nearbyinteger function recommended in the
20971  Appendix to ANSI/IEEE 854.
20972 <li>  The conversions for floating types provide the IEC 60559 conversions between
20973  floating-point precisions.
20974 <li>  The conversions from integer to floating types provide the IEC 60559 conversions
20975  from integer to floating point.
20976 <li>  The conversions from floating to integer types provide IEC 60559-like conversions
20977  but always round toward zero.
20978 <li>  The lrint and llrint functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559
20979  conversions, which honor the directed rounding mode, from floating point to the
20980  long int and long long int integer formats. The lrint and llrint
20981  functions can be used to implement IEC 60559 conversions from floating to other
20982  integer formats.
20983 <li>  The translation time conversion of floating constants and the strtod, strtof,
20984  strtold, fprintf, fscanf, and related library functions in <a href="#7.20">&lt;stdlib.h&gt;</a>,
20985  <a href="#7.19">&lt;stdio.h&gt;</a>, and <a href="#7.24">&lt;wchar.h&gt;</a> provide IEC 60559 binary-decimal conversions. The
20986  strtold function in <a href="#7.20">&lt;stdlib.h&gt;</a> provides the conv function recommended in the
20987  Appendix to ANSI/IEEE 854.
20988  
20989 <!--page 458 indent 0-->
20990 <li>  The relational and equality operators provide IEC 60559 comparisons. IEC 60559
20991  identifies a need for additional comparison predicates to facilitate writing code that
20992  accounts for NaNs. The comparison macros (isgreater, isgreaterequal,
20993  isless, islessequal, islessgreater, and isunordered) in <a href="#7.12">&lt;math.h&gt;</a>
20994  supplement the language operators to address this need. The islessgreater and
20995  isunordered macros provide respectively a quiet version of the &lt;&gt; predicate and
20996  the unordered predicate recommended in the Appendix to IEC 60559.
20997 <li>  The feclearexcept, feraiseexcept, and fetestexcept functions in
20998  <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility to test and alter the IEC 60559 floating-point
20999  exception status flags. The fegetexceptflag and fesetexceptflag
21000  functions in <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility to save and restore all five status flags at
21001  one time. These functions are used in conjunction with the type fexcept_t and the
21002  floating-point     exception      macros      (FE_INEXACT,         FE_DIVBYZERO,
21003  FE_UNDERFLOW, FE_OVERFLOW, FE_INVALID) also in <a href="#7.6">&lt;fenv.h&gt;</a>.
21004 <li>  The fegetround and fesetround functions in <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility
21005  to select among the IEC 60559 directed rounding modes represented by the rounding
21006  direction macros in <a href="#7.6">&lt;fenv.h&gt;</a> (FE_TONEAREST, FE_UPWARD, FE_DOWNWARD,
21007  FE_TOWARDZERO) and the values 0, 1, 2, and 3 of FLT_ROUNDS are the
21008  IEC 60559 directed rounding modes.
21009 <li>  The fegetenv, feholdexcept, fesetenv, and feupdateenv functions in
21010  <a href="#7.6">&lt;fenv.h&gt;</a> provide a facility to manage the floating-point environment, comprising
21011  the IEC 60559 status flags and control modes.
21012 <li>  The copysign functions in <a href="#7.12">&lt;math.h&gt;</a> provide the copysign function
21013  recommended in the Appendix to IEC 60559.
21014 <li>  The unary minus (-) operator provides the minus (-) operation recommended in the
21015  Appendix to IEC 60559.
21016 <li>  The scalbn and scalbln functions in <a href="#7.12">&lt;math.h&gt;</a> provide the scalb function
21017  recommended in the Appendix to IEC 60559.
21018 <li>  The logb functions in <a href="#7.12">&lt;math.h&gt;</a> provide the logb function recommended in the
21019  Appendix to IEC 60559, but following the newer specifications in ANSI/IEEE 854.
21020 <li>  The nextafter and nexttoward functions in <a href="#7.12">&lt;math.h&gt;</a> provide the nextafter
21021  function recommended in the Appendix to IEC 60559 (but with a minor change to
21022  better handle signed zeros).
21023 <li>  The isfinite macro in <a href="#7.12">&lt;math.h&gt;</a> provides the finite function recommended in
21024  the Appendix to IEC 60559.
21025 <li>  The isnan macro in <a href="#7.12">&lt;math.h&gt;</a> provides the isnan function recommended in the
21026  Appendix to IEC 60559.
21027 <!--page 459 indent 4-->
21028 <li>  The signbit macro and the fpclassify macro in <a href="#7.12">&lt;math.h&gt;</a>, used in
21029  conjunction with the number classification macros (FP_NAN, FP_INFINITE,
21030  FP_NORMAL, FP_SUBNORMAL, FP_ZERO), provide the facility of the class
21031  function recommended in the Appendix to IEC 60559 (except that the classification
21032  macros defined in <a href="#7.12.3">7.12.3</a> do not distinguish signaling from quiet NaNs).
21033 </ul>
21034
21035 <a name="F.4" href="#F.4"><h3>F.4 Floating to integer conversion</h3></a>
21036 <p><!--para 1-->
21037  If the floating value is infinite or NaN or if the integral part of the floating value exceeds
21038  the range of the integer type, then the ''invalid'' floating-point exception is raised and the
21039  resulting value is unspecified. Whether conversion of non-integer floating values whose
21040  integral part is within the range of the integer type raises the ''inexact'' floating-point
21041  exception is unspecified.<sup><a href="#note310"><b>310)</b></a></sup>
21042
21043 <h6>footnotes</h6>
21044 <p><a name="note310">310)</a> ANSI/IEEE 854, but not IEC 60559 (ANSI/IEEE 754), directly specifies that floating-to-integer
21045  conversions raise the ''inexact'' floating-point exception for non-integer in-range values. In those
21046  cases where it matters, library functions can be used to effect such conversions with or without raising
21047  the ''inexact'' floating-point exception. See rint, lrint, llrint, and nearbyint in
21048  <a href="#7.12">&lt;math.h&gt;</a>.
21049
21050
21051 <a name="F.5" href="#F.5"><h3>F.5 Binary-decimal conversion</h3></a>
21052 <p><!--para 1-->
21053  Conversion from the widest supported IEC 60559 format to decimal with
21054  DECIMAL_DIG digits and back is the identity function.<sup><a href="#note311"><b>311)</b></a></sup>
21055 <p><!--para 2-->
21056  Conversions involving IEC 60559 formats follow all pertinent recommended practice. In
21057  particular, conversion between any supported IEC 60559 format and decimal with
21058  DECIMAL_DIG or fewer significant digits is correctly rounded (honoring the current
21059  rounding mode), which assures that conversion from the widest supported IEC 60559
21060  format to decimal with DECIMAL_DIG digits and back is the identity function.
21061 <p><!--para 3-->
21062  Functions such as strtod that convert character sequences to floating types honor the
21063  rounding direction. Hence, if the rounding direction might be upward or downward, the
21064  implementation cannot convert a minus-signed sequence by negating the converted
21065  unsigned sequence.
21066  
21067  
21068  
21069  
21070 <!--page 460 indent 4-->
21071
21072 <h6>footnotes</h6>
21073 <p><a name="note311">311)</a> If the minimum-width IEC 60559 extended format (64 bits of precision) is supported,
21074  DECIMAL_DIG shall be at least 21. If IEC 60559 double (53 bits of precision) is the widest
21075  IEC 60559 format supported, then DECIMAL_DIG shall be at least 17. (By contrast, LDBL_DIG and
21076  DBL_DIG are 18 and 15, respectively, for these formats.)
21077
21078
21079 <a name="F.6" href="#F.6"><h3>F.6 Contracted expressions</h3></a>
21080 <p><!--para 1-->
21081  A contracted expression treats infinities, NaNs, signed zeros, subnormals, and the
21082  rounding directions in a manner consistent with the basic arithmetic operations covered
21083  by IEC 60559.
21084  Recommended practice
21085 <p><!--para 2-->
21086  A contracted expression should raise floating-point exceptions in a manner generally
21087  consistent with the basic arithmetic operations. A contracted expression should deliver
21088  the same value as its uncontracted counterpart, else should be correctly rounded (once).
21089
21090 <a name="F.7" href="#F.7"><h3>F.7 Floating-point environment</h3></a>
21091 <p><!--para 1-->
21092  The floating-point environment defined in <a href="#7.6">&lt;fenv.h&gt;</a> includes the IEC 60559 floating-
21093  point exception status flags and directed-rounding control modes. It includes also
21094  IEC 60559 dynamic rounding precision and trap enablement modes, if the
21095  implementation supports them.<sup><a href="#note312"><b>312)</b></a></sup>
21096
21097 <h6>footnotes</h6>
21098 <p><a name="note312">312)</a> This specification does not require dynamic rounding precision nor trap enablement modes.
21099
21100
21101 <a name="F.7.1" href="#F.7.1"><h4>F.7.1 Environment management</h4></a>
21102 <p><!--para 1-->
21103  IEC 60559 requires that floating-point operations implicitly raise floating-point exception
21104  status flags, and that rounding control modes can be set explicitly to affect result values of
21105  floating-point operations. When the state for the FENV_ACCESS pragma (defined in
21106  <a href="#7.6">&lt;fenv.h&gt;</a>) is ''on'', these changes to the floating-point state are treated as side effects
21107  which respect sequence points.<sup><a href="#note313"><b>313)</b></a></sup>
21108
21109 <h6>footnotes</h6>
21110 <p><a name="note313">313)</a> If the state for the FENV_ACCESS pragma is ''off'', the implementation is free to assume the floating-
21111  point control modes will be the default ones and the floating-point status flags will not be tested,
21112  which allows certain optimizations (see <a href="#F.8">F.8</a>).
21113
21114
21115 <a name="F.7.2" href="#F.7.2"><h4>F.7.2 Translation</h4></a>
21116 <p><!--para 1-->
21117  During translation the IEC 60559 default modes are in effect:
21118 <ul>
21119 <li>  The rounding direction mode is rounding to nearest.
21120 <li>  The rounding precision mode (if supported) is set so that results are not shortened.
21121 <li>  Trapping or stopping (if supported) is disabled on all floating-point exceptions.
21122 </ul>
21123  Recommended practice
21124 <p><!--para 2-->
21125  The implementation should produce a diagnostic message for each translation-time
21126  
21127  
21128  
21129  
21130 <!--page 461 indent 4-->
21131  floating-point exception, other than ''inexact'';<sup><a href="#note314"><b>314)</b></a></sup> the implementation should then
21132  proceed with the translation of the program.
21133
21134 <h6>footnotes</h6>
21135 <p><a name="note314">314)</a> As floating constants are converted to appropriate internal representations at translation time, their
21136  conversion is subject to default rounding modes and raises no execution-time floating-point exceptions
21137  (even where the state of the FENV_ACCESS pragma is ''on''). Library functions, for example
21138  strtod, provide execution-time conversion of numeric strings.
21139
21140
21141 <a name="F.7.3" href="#F.7.3"><h4>F.7.3 Execution</h4></a>
21142 <p><!--para 1-->
21143  At program startup the floating-point environment is initialized as prescribed by
21144  IEC 60559:
21145 <ul>
21146 <li>  All floating-point exception status flags are cleared.
21147 <li>  The rounding direction mode is rounding to nearest.
21148 <li>  The dynamic rounding precision mode (if supported) is set so that results are not
21149  shortened.
21150 <li>  Trapping or stopping (if supported) is disabled on all floating-point exceptions.
21151 </ul>
21152
21153 <a name="F.7.4" href="#F.7.4"><h4>F.7.4 Constant expressions</h4></a>
21154 <p><!--para 1-->
21155  An arithmetic constant expression of floating type, other than one in an initializer for an
21156  object that has static storage duration, is evaluated (as if) during execution; thus, it is
21157  affected by any operative floating-point control modes and raises floating-point
21158  exceptions as required by IEC 60559 (provided the state for the FENV_ACCESS pragma
21159  is ''on'').<sup><a href="#note315"><b>315)</b></a></sup>
21160 <p><!--para 2-->
21161  EXAMPLE
21162 <p><!--para 3-->
21163 <pre>
21164           #include <a href="#7.6">&lt;fenv.h&gt;</a>
21165           #pragma STDC FENV_ACCESS ON
21166           void f(void)
21167           {
21168                 float w[] = { 0.0/0.0 };                  //   raises an exception
21169                 static float x = 0.0/0.0;                 //   does not raise an exception
21170                 float y = 0.0/0.0;                        //   raises an exception
21171                 double z = 0.0/0.0;                       //   raises an exception
21172                 /* ... */
21173           }</pre>
21174  For the static initialization, the division is done at translation time, raising no (execution-time) floating-
21175  point exceptions. On the other hand, for the three automatic initializations the invalid division occurs at
21176  
21177  
21178 <!--page 462 indent 4-->
21179  execution time.
21180  
21181
21182 <h6>footnotes</h6>
21183 <p><a name="note315">315)</a> Where the state for the FENV_ACCESS pragma is ''on'', results of inexact expressions like 1.0/3.0
21184  are affected by rounding modes set at execution time, and expressions such as 0.0/0.0 and
21185  1.0/0.0 generate execution-time floating-point exceptions. The programmer can achieve the
21186  efficiency of translation-time evaluation through static initialization, such as
21187
21188 <pre>
21189           const static double one_third = 1.0/3.0;</pre>
21190
21191
21192 <a name="F.7.5" href="#F.7.5"><h4>F.7.5 Initialization</h4></a>
21193 <p><!--para 1-->
21194  All computation for automatic initialization is done (as if) at execution time; thus, it is
21195  affected by any operative modes and raises floating-point exceptions as required by
21196  IEC 60559 (provided the state for the FENV_ACCESS pragma is ''on''). All computation
21197  for initialization of objects that have static storage duration is done (as if) at translation
21198  time.
21199 <p><!--para 2-->
21200  EXAMPLE
21201 <p><!--para 3-->
21202 <pre>
21203           #include <a href="#7.6">&lt;fenv.h&gt;</a>
21204           #pragma STDC FENV_ACCESS ON
21205           void f(void)
21206           {
21207                 float u[] = { 1.1e75 };                  //   raises exceptions
21208                 static float v = 1.1e75;                 //   does not raise exceptions
21209                 float w = 1.1e75;                        //   raises exceptions
21210                 double x = 1.1e75;                       //   may raise exceptions
21211                 float y = 1.1e75f;                       //   may raise exceptions
21212                 long double z = 1.1e75;                  //   does not raise exceptions
21213                 /* ... */
21214           }</pre>
21215  The static initialization of v raises no (execution-time) floating-point exceptions because its computation is
21216  done at translation time. The automatic initialization of u and w require an execution-time conversion to
21217  float of the wider value 1.1e75, which raises floating-point exceptions. The automatic initializations
21218  of x and y entail execution-time conversion; however, in some expression evaluation methods, the
21219  conversions is not to a narrower format, in which case no floating-point exception is raised.<sup><a href="#note316"><b>316)</b></a></sup> The
21220  automatic initialization of z entails execution-time conversion, but not to a narrower format, so no floating-
21221  point exception is raised. Note that the conversions of the floating constants 1.1e75 and 1.1e75f to
21222  their internal representations occur at translation time in all cases.
21223  
21224  
21225  
21226  
21227 <!--page 463 indent 4-->
21228
21229 <h6>footnotes</h6>
21230 <p><a name="note316">316)</a> Use of float_t and double_t variables increases the likelihood of translation-time computation.
21231  For example, the automatic initialization
21232
21233 <pre>
21234            double_t x = 1.1e75;</pre>
21235   could be done at translation time, regardless of the expression evaluation method.
21236
21237
21238 <a name="F.7.6" href="#F.7.6"><h4>F.7.6 Changing the environment</h4></a>
21239 <p><!--para 1-->
21240  Operations defined in <a href="#6.5">6.5</a> and functions and macros defined for the standard libraries
21241  change floating-point status flags and control modes just as indicated by their
21242  specifications (including conformance to IEC 60559). They do not change flags or modes
21243  (so as to be detectable by the user) in any other cases.
21244 <p><!--para 2-->
21245  If the argument to the feraiseexcept function in <a href="#7.6">&lt;fenv.h&gt;</a> represents IEC 60559
21246  valid coincident floating-point exceptions for atomic operations (namely ''overflow'' and
21247  ''inexact'', or ''underflow'' and ''inexact''), then ''overflow'' or ''underflow'' is raised
21248  before ''inexact''.
21249
21250 <a name="F.8" href="#F.8"><h3>F.8 Optimization</h3></a>
21251 <p><!--para 1-->
21252  This section identifies code transformations that might subvert IEC 60559-specified
21253  behavior, and others that do not.
21254
21255 <a name="F.8.1" href="#F.8.1"><h4>F.8.1 Global transformations</h4></a>
21256 <p><!--para 1-->
21257  Floating-point arithmetic operations and external function calls may entail side effects
21258  which optimization shall honor, at least where the state of the FENV_ACCESS pragma is
21259  ''on''. The flags and modes in the floating-point environment may be regarded as global
21260  variables; floating-point operations (+, *, etc.) implicitly read the modes and write the
21261  flags.
21262 <p><!--para 2-->
21263  Concern about side effects may inhibit code motion and removal of seemingly useless
21264  code. For example, in
21265 <pre>
21266           #include <a href="#7.6">&lt;fenv.h&gt;</a>
21267           #pragma STDC FENV_ACCESS ON
21268           void f(double x)
21269           {
21270                /* ... */
21271                for (i = 0; i &lt; n; i++) x + 1;
21272                /* ... */
21273           }</pre>
21274  x + 1 might raise floating-point exceptions, so cannot be removed. And since the loop
21275  body might not execute (maybe 0 &gt;= n), x + 1 cannot be moved out of the loop. (Of
21276  course these optimizations are valid if the implementation can rule out the nettlesome
21277  cases.)
21278 <p><!--para 3-->
21279  This specification does not require support for trap handlers that maintain information
21280  about the order or count of floating-point exceptions. Therefore, between function calls,
21281  floating-point exceptions need not be precise: the actual order and number of occurrences
21282  of floating-point exceptions (&gt; 1) may vary from what the source code expresses. Thus,
21283  the preceding loop could be treated as
21284 <!--page 464 indent 4-->
21285 <pre>
21286          if (0 &lt; n) x + 1;</pre>
21287
21288 <a name="F.8.2" href="#F.8.2"><h4>F.8.2 Expression transformations</h4></a>
21289 <p><!--para 1-->
21290  x / 2 &lt;-&gt; x * 0.5                         Although similar transformations involving inexact
21291 <pre>
21292                                          constants generally do not yield numerically equivalent
21293                                          expressions, if the constants are exact then such
21294                                          transformations can be made on IEC 60559 machines
21295                                          and others that round perfectly.</pre>
21296  1 * x and x / 1 -&gt; x                     The expressions 1 * x, x / 1, and x are equivalent
21297 <pre>
21298                                          (on IEC 60559 machines, among others).<sup><a href="#note317"><b>317)</b></a></sup></pre>
21299  x / x -&gt; 1.0                             The expressions x / x and 1.0 are not equivalent if x
21300 <pre>
21301                                          can be zero, infinite, or NaN.</pre>
21302  x - y &lt;-&gt; x + (-y)                        The expressions x - y, x + (-y), and (-y) + x
21303 <pre>
21304                                          are equivalent (on IEC 60559 machines, among others).</pre>
21305  x - y &lt;-&gt; -(y - x)                        The expressions x - y and -(y - x) are not
21306 <pre>
21307                                          equivalent because 1 - 1 is +0 but -(1 - 1) is -0 (in the
21308                                          default rounding direction).<sup><a href="#note318"><b>318)</b></a></sup></pre>
21309  x - x -&gt; 0.0                             The expressions x - x and 0.0 are not equivalent if
21310 <pre>
21311                                          x is a NaN or infinite.</pre>
21312  0 * x -&gt; 0.0                             The expressions 0 * x and 0.0 are not equivalent if
21313 <pre>
21314                                          x is a NaN, infinite, or -0.</pre>
21315  x + 0-&gt;x                                 The expressions x + 0 and x are not equivalent if x is
21316 <pre>
21317                                          -0, because (-0) + (+0) yields +0 (in the default
21318                                          rounding direction), not -0.</pre>
21319  x - 0-&gt;x                                 (+0) - (+0) yields -0 when rounding is downward
21320 <pre>
21321                                          (toward -(inf)), but +0 otherwise, and (-0) - (+0) always
21322                                          yields -0; so, if the state of the FENV_ACCESS pragma
21323                                          is ''off'', promising default rounding, then the
21324                                          implementation can replace x - 0 by x, even if x</pre>
21325  
21326  
21327 <!--page 465 indent 4-->
21328 <pre>
21329                                           might be zero.</pre>
21330  -x &lt;-&gt; 0 - x                               The expressions -x and 0 - x are not equivalent if x
21331 <pre>
21332                                           is +0, because -(+0) yields -0, but 0 - (+0) yields +0
21333                                           (unless rounding is downward).</pre>
21334
21335 <h6>footnotes</h6>
21336 <p><a name="note317">317)</a> Strict support for signaling NaNs -- not required by this specification -- would invalidate these and
21337  other transformations that remove arithmetic operators.
21338
21339 <p><a name="note318">318)</a> IEC 60559 prescribes a signed zero to preserve mathematical identities across certain discontinuities.
21340  Examples include:
21341
21342 <pre>
21343     1/(1/ (+-) (inf)) is (+-) (inf)</pre>
21344  and
21345
21346 <pre>
21347     conj(csqrt(z)) is csqrt(conj(z)),</pre>
21348  for complex z.
21349
21350
21351 <a name="F.8.3" href="#F.8.3"><h4>F.8.3 Relational operators</h4></a>
21352 <p><!--para 1-->
21353  x != x -&gt; false                           The statement x != x is true if x is a NaN.
21354  x == x -&gt; true                            The statement x == x is false if x is a NaN.
21355  x &lt; y -&gt; isless(x,y)                      (and similarly for &lt;=, &gt;, &gt;=) Though numerically
21356 <pre>
21357                                           equal, these expressions are not equivalent because of
21358                                           side effects when x or y is a NaN and the state of the
21359                                           FENV_ACCESS pragma is ''on''. This transformation,
21360                                           which would be desirable if extra code were required to
21361                                           cause the ''invalid'' floating-point exception for
21362                                           unordered cases, could be performed provided the state
21363                                           of the FENV_ACCESS pragma is ''off''.</pre>
21364  The sense of relational operators shall be maintained. This includes handling unordered
21365  cases as expressed by the source code.
21366 <p><!--para 2-->
21367  EXAMPLE
21368 <pre>
21369           // calls g and raises ''invalid'' if a and b are unordered
21370           if (a &lt; b)
21371                   f();
21372           else
21373                   g();</pre>
21374  is not equivalent to
21375 <pre>
21376           // calls f and raises ''invalid'' if a and b are unordered
21377           if (a &gt;= b)
21378                   g();
21379           else
21380                   f();</pre>
21381  nor to
21382 <pre>
21383           // calls f without raising ''invalid'' if a and b are unordered
21384           if (isgreaterequal(a,b))
21385                   g();
21386           else
21387                   f();</pre>
21388  nor, unless the state of the FENV_ACCESS pragma is ''off'', to
21389 <!--page 466 indent 4-->
21390 <pre>
21391           // calls g without raising ''invalid'' if a and b are unordered
21392           if (isless(a,b))
21393                   f();
21394           else
21395                   g();</pre>
21396  but is equivalent to
21397 <pre>
21398           if (!(a &lt; b))
21399                 g();
21400           else
21401                 f();</pre>
21402  
21403
21404 <a name="F.8.4" href="#F.8.4"><h4>F.8.4 Constant arithmetic</h4></a>
21405 <p><!--para 1-->
21406  The implementation shall honor floating-point exceptions raised by execution-time
21407  constant arithmetic wherever the state of the FENV_ACCESS pragma is ''on''. (See <a href="#F.7.4">F.7.4</a>
21408  and <a href="#F.7.5">F.7.5</a>.) An operation on constants that raises no floating-point exception can be
21409  folded during translation, except, if the state of the FENV_ACCESS pragma is ''on'', a
21410  further check is required to assure that changing the rounding direction to downward does
21411  not alter the sign of the result,<sup><a href="#note319"><b>319)</b></a></sup> and implementations that support dynamic rounding
21412  precision modes shall assure further that the result of the operation raises no floating-
21413  point exception when converted to the semantic type of the operation.
21414
21415 <h6>footnotes</h6>
21416 <p><a name="note319">319)</a> 0 - 0 yields -0 instead of +0 just when the rounding direction is downward.
21417
21418
21419 <a name="F.9" href="#F.9"><h3>F.9 Mathematics <math.h></h3></a>
21420 <p><!--para 1-->
21421  This subclause contains specifications of <a href="#7.12">&lt;math.h&gt;</a> facilities that are particularly suited
21422  for IEC 60559 implementations.
21423 <p><!--para 2-->
21424  The Standard C macro HUGE_VAL and its float and long double analogs,
21425  HUGE_VALF and HUGE_VALL, expand to expressions whose values are positive
21426  infinities.
21427 <p><!--para 3-->
21428  Special cases for functions in <a href="#7.12">&lt;math.h&gt;</a> are covered directly or indirectly by
21429  IEC 60559. The functions that IEC 60559 specifies directly are identified in <a href="#F.3">F.3</a>. The
21430  other functions in <a href="#7.12">&lt;math.h&gt;</a> treat infinities, NaNs, signed zeros, subnormals, and
21431  (provided the state of the FENV_ACCESS pragma is ''on'') the floating-point status flags
21432  in a manner consistent with the basic arithmetic operations covered by IEC 60559.
21433 <p><!--para 4-->
21434  The expression math_errhandling &amp; MATH_ERREXCEPT shall evaluate to a
21435  nonzero value.
21436 <p><!--para 5-->
21437  The ''invalid'' and ''divide-by-zero'' floating-point exceptions are raised as specified in
21438  subsequent subclauses of this annex.
21439 <p><!--para 6-->
21440  The ''overflow'' floating-point exception is raised whenever an infinity -- or, because of
21441  rounding direction, a maximal-magnitude finite number -- is returned in lieu of a value
21442  
21443  
21444 <!--page 467 indent 5-->
21445  whose magnitude is too large.
21446 <p><!--para 7-->
21447  The ''underflow'' floating-point exception is raised whenever a result is tiny (essentially
21448  subnormal or zero) and suffers loss of accuracy.<sup><a href="#note320"><b>320)</b></a></sup>
21449 <p><!--para 8-->
21450  Whether or when library functions raise the ''inexact'' floating-point exception is
21451  unspecified, unless explicitly specified otherwise.
21452 <p><!--para 9-->
21453  Whether or when library functions raise an undeserved ''underflow'' floating-point
21454  exception is unspecified.<sup><a href="#note321"><b>321)</b></a></sup> Otherwise, as implied by <a href="#F.7.6">F.7.6</a>, the <a href="#7.12">&lt;math.h&gt;</a> functions do
21455  not raise spurious floating-point exceptions (detectable by the user), other than the
21456  ''inexact'' floating-point exception.
21457 <p><!--para 10-->
21458  Whether the functions honor the rounding direction mode is implementation-defined,
21459  unless explicitly specified otherwise.
21460 <p><!--para 11-->
21461  Functions with a NaN argument return a NaN result and raise no floating-point exception,
21462  except where stated otherwise.
21463 <p><!--para 12-->
21464  The specifications in the following subclauses append to the definitions in <a href="#7.12">&lt;math.h&gt;</a>.
21465  For families of functions, the specifications apply to all of the functions even though only
21466  the principal function is shown. Unless otherwise specified, where the symbol ''(+-)''
21467  occurs in both an argument and the result, the result has the same sign as the argument.
21468  Recommended practice
21469 <p><!--para 13-->
21470  If a function with one or more NaN arguments returns a NaN result, the result should be
21471  the same as one of the NaN arguments (after possible type conversion), except perhaps
21472  for the sign.
21473
21474 <h6>footnotes</h6>
21475 <p><a name="note320">320)</a> IEC 60559 allows different definitions of underflow. They all result in the same values, but differ on
21476  when the floating-point exception is raised.
21477
21478 <p><a name="note321">321)</a> It is intended that undeserved ''underflow'' and ''inexact'' floating-point exceptions are raised only if
21479  avoiding them would be too costly.
21480
21481
21482 <a name="F.9.1" href="#F.9.1"><h4>F.9.1 Trigonometric functions</h4></a>
21483
21484 <a name="F.9.1.1" href="#F.9.1.1"><h5>F.9.1.1 The acos functions</h5></a>
21485 <p><!--para 1-->
21486 <ul>
21487 <li>  acos(1) returns +0.
21488 <li>  acos(x) returns a NaN and raises the ''invalid'' floating-point exception for
21489  | x | &gt; 1.
21490  
21491  
21492  
21493  
21494 <!--page 468 indent 4-->
21495 </ul>
21496
21497 <a name="F.9.1.2" href="#F.9.1.2"><h5>F.9.1.2 The asin functions</h5></a>
21498 <p><!--para 1-->
21499 <ul>
21500 <li>  asin((+-)0) returns (+-)0.
21501 <li>  asin(x) returns a NaN and raises the ''invalid'' floating-point exception for
21502  | x | &gt; 1.
21503 </ul>
21504
21505 <a name="F.9.1.3" href="#F.9.1.3"><h5>F.9.1.3 The atan functions</h5></a>
21506 <p><!--para 1-->
21507 <ul>
21508 <li>  atan((+-)0) returns (+-)0.
21509 <li>  atan((+-)(inf)) returns (+-)pi /2.
21510 </ul>
21511
21512 <a name="F.9.1.4" href="#F.9.1.4"><h5>F.9.1.4 The atan2 functions</h5></a>
21513 <p><!--para 1-->
21514 <ul>
21515 <li>  atan2((+-)0, -0) returns (+-)pi .<sup><a href="#note322"><b>322)</b></a></sup>
21516 <li>  atan2((+-)0, +0) returns (+-)0.
21517 <li>  atan2((+-)0, x) returns (+-)pi for x &lt; 0.
21518 <li>  atan2((+-)0, x) returns (+-)0 for x &gt; 0.
21519 <li>  atan2(y, (+-)0) returns -pi /2 for y &lt; 0.
21520 <li>  atan2(y, (+-)0) returns pi /2 for y &gt; 0.
21521 <li>  atan2((+-)y, -(inf)) returns (+-)pi for finite y &gt; 0.
21522 <li>  atan2((+-)y, +(inf)) returns (+-)0 for finite y &gt; 0.
21523 <li>  atan2((+-)(inf), x) returns (+-)pi /2 for finite x.
21524 <li>  atan2((+-)(inf), -(inf)) returns (+-)3pi /4.
21525 <li>  atan2((+-)(inf), +(inf)) returns (+-)pi /4.
21526 </ul>
21527
21528 <h6>footnotes</h6>
21529 <p><a name="note322">322)</a> atan2(0, 0) does not raise the ''invalid'' floating-point exception, nor does atan2( y ,    0) raise
21530  the ''divide-by-zero'' floating-point exception.
21531
21532
21533 <a name="F.9.1.5" href="#F.9.1.5"><h5>F.9.1.5 The cos functions</h5></a>
21534 <p><!--para 1-->
21535 <ul>
21536 <li>  cos((+-)0) returns 1.
21537 <li>  cos((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
21538 </ul>
21539
21540 <a name="F.9.1.6" href="#F.9.1.6"><h5>F.9.1.6 The sin functions</h5></a>
21541 <p><!--para 1-->
21542 <ul>
21543 <li>  sin((+-)0) returns (+-)0.
21544 <li>  sin((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
21545  
21546  
21547  
21548  
21549 <!--page 469 indent 4-->
21550 </ul>
21551
21552 <a name="F.9.1.7" href="#F.9.1.7"><h5>F.9.1.7 The tan functions</h5></a>
21553 <p><!--para 1-->
21554 <ul>
21555 <li>  tan((+-)0) returns (+-)0.
21556 <li>  tan((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
21557 </ul>
21558
21559 <a name="F.9.2" href="#F.9.2"><h4>F.9.2 Hyperbolic functions</h4></a>
21560
21561 <a name="F.9.2.1" href="#F.9.2.1"><h5>F.9.2.1 The acosh functions</h5></a>
21562 <p><!--para 1-->
21563 <ul>
21564 <li>  acosh(1) returns +0.
21565 <li>  acosh(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 1.
21566 <li>  acosh(+(inf)) returns +(inf).
21567 </ul>
21568
21569 <a name="F.9.2.2" href="#F.9.2.2"><h5>F.9.2.2 The asinh functions</h5></a>
21570 <p><!--para 1-->
21571 <ul>
21572 <li>  asinh((+-)0) returns (+-)0.
21573 <li>  asinh((+-)(inf)) returns (+-)(inf).
21574 </ul>
21575
21576 <a name="F.9.2.3" href="#F.9.2.3"><h5>F.9.2.3 The atanh functions</h5></a>
21577 <p><!--para 1-->
21578 <ul>
21579 <li>  atanh((+-)0) returns (+-)0.
21580 <li>  atanh((+-)1) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception.
21581 <li>  atanh(x) returns a NaN and raises the ''invalid'' floating-point exception for
21582  | x | &gt; 1.
21583 </ul>
21584
21585 <a name="F.9.2.4" href="#F.9.2.4"><h5>F.9.2.4 The cosh functions</h5></a>
21586 <p><!--para 1-->
21587 <ul>
21588 <li>  cosh((+-)0) returns 1.
21589 <li>  cosh((+-)(inf)) returns +(inf).
21590 </ul>
21591
21592 <a name="F.9.2.5" href="#F.9.2.5"><h5>F.9.2.5 The sinh functions</h5></a>
21593 <p><!--para 1-->
21594 <ul>
21595 <li>  sinh((+-)0) returns (+-)0.
21596 <li>  sinh((+-)(inf)) returns (+-)(inf).
21597 </ul>
21598
21599 <a name="F.9.2.6" href="#F.9.2.6"><h5>F.9.2.6 The tanh functions</h5></a>
21600 <p><!--para 1-->
21601 <ul>
21602 <li>  tanh((+-)0) returns (+-)0.
21603 <li>  tanh((+-)(inf)) returns (+-)1.
21604 <!--page 470 indent 4-->
21605 </ul>
21606
21607 <a name="F.9.3" href="#F.9.3"><h4>F.9.3 Exponential and logarithmic functions</h4></a>
21608
21609 <a name="F.9.3.1" href="#F.9.3.1"><h5>F.9.3.1 The exp functions</h5></a>
21610 <p><!--para 1-->
21611 <ul>
21612 <li>  exp((+-)0) returns 1.
21613 <li>  exp(-(inf)) returns +0.
21614 <li>  exp(+(inf)) returns +(inf).
21615 </ul>
21616
21617 <a name="F.9.3.2" href="#F.9.3.2"><h5>F.9.3.2 The exp2 functions</h5></a>
21618 <p><!--para 1-->
21619 <ul>
21620 <li>  exp2((+-)0) returns 1.
21621 <li>  exp2(-(inf)) returns +0.
21622 <li>  exp2(+(inf)) returns +(inf).
21623 </ul>
21624
21625 <a name="F.9.3.3" href="#F.9.3.3"><h5>F.9.3.3 The expm1 functions</h5></a>
21626 <p><!--para 1-->
21627 <ul>
21628 <li>  expm1((+-)0) returns (+-)0.
21629 <li>  expm1(-(inf)) returns -1.
21630 <li>  expm1(+(inf)) returns +(inf).
21631 </ul>
21632
21633 <a name="F.9.3.4" href="#F.9.3.4"><h5>F.9.3.4 The frexp functions</h5></a>
21634 <p><!--para 1-->
21635 <ul>
21636 <li>  frexp((+-)0, exp) returns (+-)0, and stores 0 in the object pointed to by exp.
21637 <li>  frexp((+-)(inf), exp) returns (+-)(inf), and stores an unspecified value in the object
21638  pointed to by exp.
21639 <li>  frexp(NaN, exp) stores an unspecified value in the object pointed to by exp
21640  (and returns a NaN).
21641 </ul>
21642 <p><!--para 2-->
21643  frexp raises no floating-point exceptions.
21644 <p><!--para 3-->
21645  On a binary system, the body of the frexp function might be
21646 <pre>
21647         {
21648                *exp = (value == 0) ? 0 : (int)(1 + logb(value));
21649                return scalbn(value, -(*exp));
21650         }</pre>
21651
21652 <a name="F.9.3.5" href="#F.9.3.5"><h5>F.9.3.5 The ilogb functions</h5></a>
21653 <p><!--para 1-->
21654  If the correct result is outside the range of the return type, the numeric result is
21655  unspecified and the ''invalid'' floating-point exception is raised.
21656 <!--page 471 indent 4-->
21657
21658 <a name="F.9.3.6" href="#F.9.3.6"><h5>F.9.3.6 The ldexp functions</h5></a>
21659 <p><!--para 1-->
21660  On a binary system, ldexp(x, exp) is equivalent to scalbn(x, exp).
21661
21662 <a name="F.9.3.7" href="#F.9.3.7"><h5>F.9.3.7 The log functions</h5></a>
21663 <p><!--para 1-->
21664 <ul>
21665 <li>  log((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
21666 <li>  log(1) returns +0.
21667 <li>  log(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
21668 <li>  log(+(inf)) returns +(inf).
21669 </ul>
21670
21671 <a name="F.9.3.8" href="#F.9.3.8"><h5>F.9.3.8 The log10 functions</h5></a>
21672 <p><!--para 1-->
21673 <ul>
21674 <li>  log10((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
21675 <li>  log10(1) returns +0.
21676 <li>  log10(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
21677 <li>  log10(+(inf)) returns +(inf).
21678 </ul>
21679
21680 <a name="F.9.3.9" href="#F.9.3.9"><h5>F.9.3.9 The log1p functions</h5></a>
21681 <p><!--para 1-->
21682 <ul>
21683 <li>  log1p((+-)0) returns (+-)0.
21684 <li>  log1p(-1) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
21685 <li>  log1p(x) returns a NaN and raises the ''invalid'' floating-point exception for
21686  x &lt; -1.
21687 <li>  log1p(+(inf)) returns +(inf).
21688 </ul>
21689
21690 <a name="F.9.3.10" href="#F.9.3.10"><h5>F.9.3.10 The log2 functions</h5></a>
21691 <p><!--para 1-->
21692 <ul>
21693 <li>  log2((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
21694 <li>  log2(1) returns +0.
21695 <li>  log2(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
21696 <li>  log2(+(inf)) returns +(inf).
21697 </ul>
21698
21699 <a name="F.9.3.11" href="#F.9.3.11"><h5>F.9.3.11 The logb functions</h5></a>
21700 <p><!--para 1-->
21701 <ul>
21702 <li>  logb((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
21703 <li>  logb((+-)(inf)) returns +(inf).
21704 <!--page 472 indent 4-->
21705 </ul>
21706
21707 <a name="F.9.3.12" href="#F.9.3.12"><h5>F.9.3.12 The modf functions</h5></a>
21708 <p><!--para 1-->
21709 <ul>
21710 <li>  modf((+-)x, iptr) returns a result with the same sign as x.
21711 <li>  modf((+-)(inf), iptr) returns (+-)0 and stores (+-)(inf) in the object pointed to by iptr.
21712 <li>  modf(NaN, iptr) stores a NaN in the object pointed to by iptr (and returns a
21713  NaN).
21714 </ul>
21715 <p><!--para 2-->
21716  modf behaves as though implemented by
21717 <pre>
21718        #include <a href="#7.12">&lt;math.h&gt;</a>
21719        #include <a href="#7.6">&lt;fenv.h&gt;</a>
21720        #pragma STDC FENV_ACCESS ON
21721        double modf(double value, double *iptr)
21722        {
21723             int save_round = fegetround();
21724             fesetround(FE_TOWARDZERO);
21725             *iptr = nearbyint(value);
21726             fesetround(save_round);
21727             return copysign(
21728                  isinf(value) ? 0.0 :
21729                       value - (*iptr), value);
21730        }</pre>
21731
21732 <a name="F.9.3.13" href="#F.9.3.13"><h5>F.9.3.13 The scalbn and scalbln functions</h5></a>
21733 <p><!--para 1-->
21734 <ul>
21735 <li>  scalbn((+-)0, n) returns (+-)0.
21736 <li>  scalbn(x, 0) returns x.
21737 <li>  scalbn((+-)(inf), n) returns (+-)(inf).
21738 </ul>
21739
21740 <a name="F.9.4" href="#F.9.4"><h4>F.9.4 Power and absolute value functions</h4></a>
21741
21742 <a name="F.9.4.1" href="#F.9.4.1"><h5>F.9.4.1 The cbrt functions</h5></a>
21743 <p><!--para 1-->
21744 <ul>
21745 <li>  cbrt((+-)0) returns (+-)0.
21746 <li>  cbrt((+-)(inf)) returns (+-)(inf).
21747 </ul>
21748
21749 <a name="F.9.4.2" href="#F.9.4.2"><h5>F.9.4.2 The fabs functions</h5></a>
21750 <p><!--para 1-->
21751 <ul>
21752 <li>  fabs((+-)0) returns +0.
21753 <li>  fabs((+-)(inf)) returns +(inf).
21754 <!--page 473 indent 4-->
21755 </ul>
21756
21757 <a name="F.9.4.3" href="#F.9.4.3"><h5>F.9.4.3 The hypot functions</h5></a>
21758 <p><!--para 1-->
21759 <ul>
21760 <li>  hypot(x, y), hypot(y, x), and hypot(x, -y) are equivalent.
21761 <li>  hypot(x, (+-)0) is equivalent to fabs(x).
21762 <li>  hypot((+-)(inf), y) returns +(inf), even if y is a NaN.
21763 </ul>
21764
21765 <a name="F.9.4.4" href="#F.9.4.4"><h5>F.9.4.4 The pow functions</h5></a>
21766 <p><!--para 1-->
21767 <ul>
21768 <li>  pow((+-)0, y) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception
21769  for y an odd integer &lt; 0.
21770 <li>  pow((+-)0, y) returns +(inf) and raises the ''divide-by-zero'' floating-point exception
21771  for y &lt; 0 and not an odd integer.
21772 <li>  pow((+-)0, y) returns (+-)0 for y an odd integer &gt; 0.
21773 <li>  pow((+-)0, y) returns +0 for y &gt; 0 and not an odd integer.
21774 <li>  pow(-1, (+-)(inf)) returns 1.
21775 <li>  pow(+1, y) returns 1 for any y, even a NaN.
21776 <li>  pow(x, (+-)0) returns 1 for any x, even a NaN.
21777 <li>  pow(x, y) returns a NaN and raises the ''invalid'' floating-point exception for
21778  finite x &lt; 0 and finite non-integer y.
21779 <li>  pow(x, -(inf)) returns +(inf) for | x | &lt; 1.
21780 <li>  pow(x, -(inf)) returns +0 for | x | &gt; 1.
21781 <li>  pow(x, +(inf)) returns +0 for | x | &lt; 1.
21782 <li>  pow(x, +(inf)) returns +(inf) for | x | &gt; 1.
21783 <li>  pow(-(inf), y) returns -0 for y an odd integer &lt; 0.
21784 <li>  pow(-(inf), y) returns +0 for y &lt; 0 and not an odd integer.
21785 <li>  pow(-(inf), y) returns -(inf) for y an odd integer &gt; 0.
21786 <li>  pow(-(inf), y) returns +(inf) for y &gt; 0 and not an odd integer.
21787 <li>  pow(+(inf), y) returns +0 for y &lt; 0.
21788 <li>  pow(+(inf), y) returns +(inf) for y &gt; 0.
21789 <!--page 474 indent 4-->
21790 </ul>
21791
21792 <a name="F.9.4.5" href="#F.9.4.5"><h5>F.9.4.5 The sqrt functions</h5></a>
21793 <p><!--para 1-->
21794  sqrt is fully specified as a basic arithmetic operation in IEC 60559.
21795
21796 <a name="F.9.5" href="#F.9.5"><h4>F.9.5 Error and gamma functions</h4></a>
21797
21798 <a name="F.9.5.1" href="#F.9.5.1"><h5>F.9.5.1 The erf functions</h5></a>
21799 <p><!--para 1-->
21800 <ul>
21801 <li>  erf((+-)0) returns (+-)0.
21802 <li>  erf((+-)(inf)) returns (+-)1.
21803 </ul>
21804
21805 <a name="F.9.5.2" href="#F.9.5.2"><h5>F.9.5.2 The erfc functions</h5></a>
21806 <p><!--para 1-->
21807 <ul>
21808 <li>  erfc(-(inf)) returns 2.
21809 <li>  erfc(+(inf)) returns +0.
21810 </ul>
21811
21812 <a name="F.9.5.3" href="#F.9.5.3"><h5>F.9.5.3 The lgamma functions</h5></a>
21813 <p><!--para 1-->
21814 <ul>
21815 <li>  lgamma(1) returns +0.
21816 <li>  lgamma(2) returns +0.
21817 <li>  lgamma(x) returns +(inf) and raises the ''divide-by-zero'' floating-point exception for
21818  x a negative integer or zero.
21819 <li>  lgamma(-(inf)) returns +(inf).
21820 <li>  lgamma(+(inf)) returns +(inf).
21821 </ul>
21822
21823 <a name="F.9.5.4" href="#F.9.5.4"><h5>F.9.5.4 The tgamma functions</h5></a>
21824 <p><!--para 1-->
21825 <ul>
21826 <li>  tgamma((+-)0) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception.
21827 <li>  tgamma(x) returns a NaN and raises the ''invalid'' floating-point exception for x a
21828  negative integer.
21829 <li>  tgamma(-(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
21830 <li>  tgamma(+(inf)) returns +(inf).
21831 </ul>
21832
21833 <a name="F.9.6" href="#F.9.6"><h4>F.9.6 Nearest integer functions</h4></a>
21834
21835 <a name="F.9.6.1" href="#F.9.6.1"><h5>F.9.6.1 The ceil functions</h5></a>
21836 <p><!--para 1-->
21837 <ul>
21838 <li>  ceil((+-)0) returns (+-)0.
21839 <li>  ceil((+-)(inf)) returns (+-)(inf).
21840 </ul>
21841 <p><!--para 2-->
21842  The double version of ceil behaves as though implemented by
21843 <!--page 475 indent 4-->
21844 <pre>
21845         #include <a href="#7.12">&lt;math.h&gt;</a>
21846         #include <a href="#7.6">&lt;fenv.h&gt;</a>
21847         #pragma STDC FENV_ACCESS ON
21848         double ceil(double x)
21849         {
21850              double result;
21851              int save_round = fegetround();
21852              fesetround(FE_UPWARD);
21853              result = rint(x); // or nearbyint instead of rint
21854              fesetround(save_round);
21855              return result;
21856         }</pre>
21857
21858 <a name="F.9.6.2" href="#F.9.6.2"><h5>F.9.6.2 The floor functions</h5></a>
21859 <p><!--para 1-->
21860 <ul>
21861 <li>  floor((+-)0) returns (+-)0.
21862 <li>  floor((+-)(inf)) returns (+-)(inf).
21863 </ul>
21864 <p><!--para 2-->
21865  See the sample implementation for ceil in <a href="#F.9.6.1">F.9.6.1</a>.
21866
21867 <a name="F.9.6.3" href="#F.9.6.3"><h5>F.9.6.3 The nearbyint functions</h5></a>
21868 <p><!--para 1-->
21869  The nearbyint functions use IEC 60559 rounding according to the current rounding
21870  direction. They do not raise the ''inexact'' floating-point exception if the result differs in
21871  value from the argument.
21872 <ul>
21873 <li>  nearbyint((+-)0) returns (+-)0 (for all rounding directions).
21874 <li>  nearbyint((+-)(inf)) returns (+-)(inf) (for all rounding directions).
21875 </ul>
21876
21877 <a name="F.9.6.4" href="#F.9.6.4"><h5>F.9.6.4 The rint functions</h5></a>
21878 <p><!--para 1-->
21879  The rint functions differ from the nearbyint functions only in that they do raise the
21880  ''inexact'' floating-point exception if the result differs in value from the argument.
21881
21882 <a name="F.9.6.5" href="#F.9.6.5"><h5>F.9.6.5 The lrint and llrint functions</h5></a>
21883 <p><!--para 1-->
21884  The lrint and llrint functions provide floating-to-integer conversion as prescribed
21885  by IEC 60559. They round according to the current rounding direction. If the rounded
21886  value is outside the range of the return type, the numeric result is unspecified and the
21887  ''invalid'' floating-point exception is raised. When they raise no other floating-point
21888  exception and the result differs from the argument, they raise the ''inexact'' floating-point
21889  exception.
21890 <!--page 476 indent 4-->
21891
21892 <a name="F.9.6.6" href="#F.9.6.6"><h5>F.9.6.6 The round functions</h5></a>
21893 <p><!--para 1-->
21894 <ul>
21895 <li>  round((+-)0) returns (+-)0.
21896 <li>  round((+-)(inf)) returns (+-)(inf).
21897 </ul>
21898 <p><!--para 2-->
21899  The double version of round behaves as though implemented by
21900 <pre>
21901         #include <a href="#7.12">&lt;math.h&gt;</a>
21902         #include <a href="#7.6">&lt;fenv.h&gt;</a>
21903         #pragma STDC FENV_ACCESS ON
21904         double round(double x)
21905         {
21906              double result;
21907              fenv_t save_env;
21908              feholdexcept(&amp;save_env);
21909              result = rint(x);
21910              if (fetestexcept(FE_INEXACT)) {
21911                   fesetround(FE_TOWARDZERO);
21912                   result = rint(copysign(0.5 + fabs(x), x));
21913              }
21914              feupdateenv(&amp;save_env);
21915              return result;
21916         }</pre>
21917  The round functions may, but are not required to, raise the ''inexact'' floating-point
21918  exception for non-integer numeric arguments, as this implementation does.
21919
21920 <a name="F.9.6.7" href="#F.9.6.7"><h5>F.9.6.7 The lround and llround functions</h5></a>
21921 <p><!--para 1-->
21922  The lround and llround functions differ from the lrint and llrint functions
21923  with the default rounding direction just in that the lround and llround functions
21924  round halfway cases away from zero and need not raise the ''inexact'' floating-point
21925  exception for non-integer arguments that round to within the range of the return type.
21926
21927 <a name="F.9.6.8" href="#F.9.6.8"><h5>F.9.6.8 The trunc functions</h5></a>
21928 <p><!--para 1-->
21929  The trunc functions use IEC 60559 rounding toward zero (regardless of the current
21930  rounding direction).
21931 <ul>
21932 <li>  trunc((+-)0) returns (+-)0.
21933 <li>  trunc((+-)(inf)) returns (+-)(inf).
21934 <!--page 477 indent 4-->
21935 </ul>
21936
21937 <a name="F.9.7" href="#F.9.7"><h4>F.9.7 Remainder functions</h4></a>
21938
21939 <a name="F.9.7.1" href="#F.9.7.1"><h5>F.9.7.1 The fmod functions</h5></a>
21940 <p><!--para 1-->
21941 <ul>
21942 <li>  fmod((+-)0, y) returns (+-)0 for y not zero.
21943 <li>  fmod(x, y) returns a NaN and raises the ''invalid'' floating-point exception for x
21944  infinite or y zero.
21945 <li>  fmod(x, (+-)(inf)) returns x for x not infinite.
21946 </ul>
21947 <p><!--para 2-->
21948  The double version of fmod behaves as though implemented by
21949 <pre>
21950         #include <a href="#7.12">&lt;math.h&gt;</a>
21951         #include <a href="#7.6">&lt;fenv.h&gt;</a>
21952         #pragma STDC FENV_ACCESS ON
21953         double fmod(double x, double y)
21954         {
21955              double result;
21956              result = remainder(fabs(x), (y = fabs(y)));
21957              if (signbit(result)) result += y;
21958              return copysign(result, x);
21959         }</pre>
21960
21961 <a name="F.9.7.2" href="#F.9.7.2"><h5>F.9.7.2 The remainder functions</h5></a>
21962 <p><!--para 1-->
21963  The remainder functions are fully specified as a basic arithmetic operation in
21964  IEC 60559.
21965
21966 <a name="F.9.7.3" href="#F.9.7.3"><h5>F.9.7.3 The remquo functions</h5></a>
21967 <p><!--para 1-->
21968  The remquo functions follow the specifications for the remainder functions. They
21969  have no further specifications special to IEC 60559 implementations.
21970
21971 <a name="F.9.8" href="#F.9.8"><h4>F.9.8 Manipulation functions</h4></a>
21972
21973 <a name="F.9.8.1" href="#F.9.8.1"><h5>F.9.8.1 The copysign functions</h5></a>
21974 <p><!--para 1-->
21975  copysign is specified in the Appendix to IEC 60559.
21976
21977 <a name="F.9.8.2" href="#F.9.8.2"><h5>F.9.8.2 The nan functions</h5></a>
21978 <p><!--para 1-->
21979  All IEC 60559 implementations support quiet NaNs, in all floating formats.
21980 <!--page 478 indent 4-->
21981
21982 <a name="F.9.8.3" href="#F.9.8.3"><h5>F.9.8.3 The nextafter functions</h5></a>
21983 <p><!--para 1-->
21984 <ul>
21985 <li>  nextafter(x, y) raises the ''overflow'' and ''inexact'' floating-point exceptions
21986  for x finite and the function value infinite.
21987 <li>  nextafter(x, y) raises the ''underflow'' and ''inexact'' floating-point
21988  exceptions for the function value subnormal or zero and x != y.
21989 </ul>
21990
21991 <a name="F.9.8.4" href="#F.9.8.4"><h5>F.9.8.4 The nexttoward functions</h5></a>
21992 <p><!--para 1-->
21993  No additional requirements beyond those on nextafter.
21994
21995 <a name="F.9.9" href="#F.9.9"><h4>F.9.9 Maximum, minimum, and positive difference functions</h4></a>
21996
21997 <a name="F.9.9.1" href="#F.9.9.1"><h5>F.9.9.1 The fdim functions</h5></a>
21998 <p><!--para 1-->
21999  No additional requirements.
22000
22001 <a name="F.9.9.2" href="#F.9.9.2"><h5>F.9.9.2 The fmax functions</h5></a>
22002 <p><!--para 1-->
22003  If just one argument is a NaN, the fmax functions return the other argument (if both
22004  arguments are NaNs, the functions return a NaN).
22005 <p><!--para 2-->
22006  The body of the fmax function might be<sup><a href="#note323"><b>323)</b></a></sup>
22007 <pre>
22008         { return (isgreaterequal(x, y) ||
22009              isnan(y)) ? x : y; }</pre>
22010
22011 <h6>footnotes</h6>
22012 <p><a name="note323">323)</a> Ideally, fmax would be sensitive to the sign of zero, for example fmax(-0.0, +0.0) would
22013  return +0; however, implementation in software might be impractical.
22014
22015
22016 <a name="F.9.9.3" href="#F.9.9.3"><h5>F.9.9.3 The fmin functions</h5></a>
22017 <p><!--para 1-->
22018  The fmin functions are analogous to the fmax functions (see <a href="#F.9.9.2">F.9.9.2</a>).
22019
22020 <a name="F.9.10" href="#F.9.10"><h4>F.9.10 Floating multiply-add</h4></a>
22021
22022 <a name="F.9.10.1" href="#F.9.10.1"><h5>F.9.10.1 The fma functions</h5></a>
22023 <p><!--para 1-->
22024 <ul>
22025 <li>  fma(x, y, z) computes xy + z, correctly rounded once.
22026 <li>  fma(x, y, z) returns a NaN and optionally raises the ''invalid'' floating-point
22027  exception if one of x and y is infinite, the other is zero, and z is a NaN.
22028 <li>  fma(x, y, z) returns a NaN and raises the ''invalid'' floating-point exception if
22029  one of x and y is infinite, the other is zero, and z is not a NaN.
22030 <li>  fma(x, y, z) returns a NaN and raises the ''invalid'' floating-point exception if x
22031  times y is an exact infinity and z is also an infinity but with the opposite sign.
22032  
22033  
22034  
22035  
22036 <!--page 479 indent 4-->
22037 </ul>
22038
22039 <a name="G" href="#G"><h2>Annex G</h2></a>
22040 <pre>
22041                                      (informative)
22042                IEC 60559-compatible complex arithmetic</pre>
22043
22044 <a name="G.1" href="#G.1"><h3>G.1 Introduction</h3></a>
22045 <p><!--para 1-->
22046  This annex supplements <a href="#F">annex F</a> to specify complex arithmetic for compatibility with
22047  IEC 60559 real floating-point arithmetic. Although these specifications have been
22048  carefully designed, there is little existing practice to validate the design decisions.
22049  Therefore, these specifications are not normative, but should be viewed more as
22050  recommended          practice.       An         implementation        that     defines
22051  __STDC_IEC_559_COMPLEX__ should conform to the specifications in this annex.
22052
22053 <a name="G.2" href="#G.2"><h3>G.2 Types</h3></a>
22054 <p><!--para 1-->
22055  There is a new keyword _Imaginary, which is used to specify imaginary types. It is
22056  used as a type specifier within declaration specifiers in the same way as _Complex is
22057  (thus, _Imaginary float is a valid type name).
22058 <p><!--para 2-->
22059  There are three imaginary types, designated as float _Imaginary, double
22060  _Imaginary, and long double _Imaginary. The imaginary types (along with
22061  the real floating and complex types) are floating types.
22062 <p><!--para 3-->
22063  For imaginary types, the corresponding real type is given by deleting the keyword
22064  _Imaginary from the type name.
22065 <p><!--para 4-->
22066  Each imaginary type has the same representation and alignment requirements as the
22067  corresponding real type. The value of an object of imaginary type is the value of the real
22068  representation times the imaginary unit.
22069 <p><!--para 5-->
22070  The imaginary type domain comprises the imaginary types.
22071
22072 <a name="G.3" href="#G.3"><h3>G.3 Conventions</h3></a>
22073 <p><!--para 1-->
22074  A complex or imaginary value with at least one infinite part is regarded as an infinity
22075  (even if its other part is a NaN). A complex or imaginary value is a finite number if each
22076  of its parts is a finite number (neither infinite nor NaN). A complex or imaginary value is
22077  a zero if each of its parts is a zero.
22078 <!--page 480 indent 4-->
22079
22080 <a name="G.4" href="#G.4"><h3>G.4 Conversions</h3></a>
22081
22082 <a name="G.4.1" href="#G.4.1"><h4>G.4.1 Imaginary types</h4></a>
22083 <p><!--para 1-->
22084  Conversions among imaginary types follow rules analogous to those for real floating
22085  types.
22086
22087 <a name="G.4.2" href="#G.4.2"><h4>G.4.2 Real and imaginary</h4></a>
22088 <p><!--para 1-->
22089  When a value of imaginary type is converted to a real type other than _Bool,<sup><a href="#note324"><b>324)</b></a></sup> the
22090  result is a positive zero.
22091 <p><!--para 2-->
22092  When a value of real type is converted to an imaginary type, the result is a positive
22093  imaginary zero.
22094
22095 <h6>footnotes</h6>
22096 <p><a name="note324">324)</a> See <a href="#6.3.1.2">6.3.1.2</a>.
22097
22098
22099 <a name="G.4.3" href="#G.4.3"><h4>G.4.3 Imaginary and complex</h4></a>
22100 <p><!--para 1-->
22101  When a value of imaginary type is converted to a complex type, the real part of the
22102  complex result value is a positive zero and the imaginary part of the complex result value
22103  is determined by the conversion rules for the corresponding real types.
22104 <p><!--para 2-->
22105  When a value of complex type is converted to an imaginary type, the real part of the
22106  complex value is discarded and the value of the imaginary part is converted according to
22107  the conversion rules for the corresponding real types.
22108
22109 <a name="G.5" href="#G.5"><h3>G.5 Binary operators</h3></a>
22110 <p><!--para 1-->
22111  The following subclauses supplement <a href="#6.5">6.5</a> in order to specify the type of the result for an
22112  operation with an imaginary operand.
22113 <p><!--para 2-->
22114  For most operand types, the value of the result of a binary operator with an imaginary or
22115  complex operand is completely determined, with reference to real arithmetic, by the usual
22116  mathematical formula. For some operand types, the usual mathematical formula is
22117  problematic because of its treatment of infinities and because of undue overflow or
22118  underflow; in these cases the result satisfies certain properties (specified in <a href="#G.5.1">G.5.1</a>), but is
22119  not completely determined.
22120  
22121  
22122  
22123  
22124 <!--page 481 indent 4-->
22125
22126 <a name="G.5.1" href="#G.5.1"><h4>G.5.1 Multiplicative operators</h4></a>
22127 <h6>Semantics</h6>
22128 <p><!--para 1-->
22129  If one operand has real type and the other operand has imaginary type, then the result has
22130  imaginary type. If both operands have imaginary type, then the result has real type. (If
22131  either operand has complex type, then the result has complex type.)
22132 <p><!--para 2-->
22133  If the operands are not both complex, then the result and floating-point exception
22134  behavior of the * operator is defined by the usual mathematical formula:
22135 <pre>
22136         *                  u                   iv                 u + iv</pre>
22137  
22138 <pre>
22139         x                  xu                i(xv)            (xu) + i(xv)</pre>
22140  
22141 <pre>
22142         iy               i(yu)                -yv            (-yv) + i(yu)</pre>
22143  
22144 <p><!--para 3-->
22145 <pre>
22146         x + iy       (xu) + i(yu)        (-yv) + i(xv)</pre>
22147  If the second operand is not complex, then the result and floating-point exception
22148  behavior of the / operator is defined by the usual mathematical formula:
22149 <pre>
22150         /                   u                       iv</pre>
22151  
22152 <pre>
22153         x                  x/u                 i(-x/v)</pre>
22154  
22155 <pre>
22156         iy               i(y/u)                     y/v</pre>
22157  
22158 <p><!--para 4-->
22159 <pre>
22160         x + iy       (x/u) + i(y/u)        (y/v) + i(-x/v)</pre>
22161  The * and / operators satisfy the following infinity properties for all real, imaginary, and
22162  complex operands:<sup><a href="#note325"><b>325)</b></a></sup>
22163 <ul>
22164 <li>  if one operand is an infinity and the other operand is a nonzero finite number or an
22165  infinity, then the result of the * operator is an infinity;
22166 <li>  if the first operand is an infinity and the second operand is a finite number, then the
22167  result of the / operator is an infinity;
22168 <li>  if the first operand is a finite number and the second operand is an infinity, then the
22169  result of the / operator is a zero;
22170  
22171  
22172  
22173  
22174 <!--page 482 indent 4-->
22175 <li>  if the first operand is a nonzero finite number or an infinity and the second operand is
22176  a zero, then the result of the / operator is an infinity.
22177 </ul>
22178 <p><!--para 5-->
22179  If both operands of the * operator are complex or if the second operand of the / operator
22180  is complex, the operator raises floating-point exceptions if appropriate for the calculation
22181  of the parts of the result, and may raise spurious floating-point exceptions.
22182 <p><!--para 6-->
22183  EXAMPLE 1 Multiplication of double _Complex operands could be implemented as follows. Note
22184  that the imaginary unit I has imaginary type (see <a href="#G.6">G.6</a>).
22185 <!--page 483 indent 4-->
22186 <p><!--para 7-->
22187 <pre>
22188         #include <a href="#7.12">&lt;math.h&gt;</a>
22189         #include <a href="#7.3">&lt;complex.h&gt;</a>
22190         /* Multiply z * w ... */
22191         double complex _Cmultd(double complex z, double complex w)
22192         {
22193                #pragma STDC FP_CONTRACT OFF
22194                double a, b, c, d, ac, bd, ad, bc, x, y;
22195                a = creal(z); b = cimag(z);
22196                c = creal(w); d = cimag(w);
22197                ac = a * c;       bd = b * d;
22198                ad = a * d;       bc = b * c;
22199                x = ac - bd; y = ad + bc;
22200                if (isnan(x) &amp;&amp; isnan(y)) {
22201                        /* Recover infinities that computed as NaN+iNaN ... */
22202                        int recalc = 0;
22203                        if ( isinf(a) || isinf(b) ) { // z is infinite
22204                                /* "Box" the infinity and change NaNs in the other factor to 0 */
22205                                a = copysign(isinf(a) ? 1.0 : 0.0, a);
22206                                b = copysign(isinf(b) ? 1.0 : 0.0, b);
22207                                if (isnan(c)) c = copysign(0.0, c);
22208                                if (isnan(d)) d = copysign(0.0, d);
22209                                recalc = 1;
22210                        }
22211                        if ( isinf(c) || isinf(d) ) { // w is infinite
22212                                /* "Box" the infinity and change NaNs in the other factor to 0 */
22213                                c = copysign(isinf(c) ? 1.0 : 0.0, c);
22214                                d = copysign(isinf(d) ? 1.0 : 0.0, d);
22215                                if (isnan(a)) a = copysign(0.0, a);
22216                                if (isnan(b)) b = copysign(0.0, b);
22217                                recalc = 1;
22218                        }
22219                        if (!recalc &amp;&amp; (isinf(ac) || isinf(bd) ||
22220                                               isinf(ad) || isinf(bc))) {
22221                                /* Recover infinities from overflow by changing NaNs to 0 ... */
22222                                if (isnan(a)) a = copysign(0.0, a);
22223                                if (isnan(b)) b = copysign(0.0, b);
22224                                if (isnan(c)) c = copysign(0.0, c);
22225                                if (isnan(d)) d = copysign(0.0, d);
22226                                recalc = 1;
22227                        }
22228                        if (recalc) {
22229                                    x = INFINITY * ( a * c - b * d );
22230                                    y = INFINITY * ( a * d + b * c );
22231                         }
22232                   }
22233                   return x + I * y;
22234           }</pre>
22235  This implementation achieves the required treatment of infinities at the cost of only one isnan test in
22236  ordinary (finite) cases. It is less than ideal in that undue overflow and underflow may occur.
22237  
22238 <p><!--para 8-->
22239  EXAMPLE 2      Division of two double _Complex operands could be implemented as follows.
22240 <!--page 484 indent 4-->
22241 <p><!--para 9-->
22242 <pre>
22243           #include <a href="#7.12">&lt;math.h&gt;</a>
22244           #include <a href="#7.3">&lt;complex.h&gt;</a>
22245           /* Divide z / w ... */
22246           double complex _Cdivd(double complex z, double complex w)
22247           {
22248                  #pragma STDC FP_CONTRACT OFF
22249                  double a, b, c, d, logbw, denom, x, y;
22250                  int ilogbw = 0;
22251                  a = creal(z); b = cimag(z);
22252                  c = creal(w); d = cimag(w);
22253                  logbw = logb(fmax(fabs(c), fabs(d)));
22254                  if (isfinite(logbw)) {
22255                         ilogbw = (int)logbw;
22256                         c = scalbn(c, -ilogbw); d = scalbn(d, -ilogbw);
22257                  }
22258                  denom = c * c + d * d;
22259                  x = scalbn((a * c + b * d) / denom, -ilogbw);
22260                  y = scalbn((b * c - a * d) / denom, -ilogbw);
22261                   /* Recover infinities and zeros that computed as NaN+iNaN;                 */
22262                   /* the only cases are nonzero/zero, infinite/finite, and finite/infinite, ... */
22263                   if (isnan(x) &amp;&amp; isnan(y)) {
22264                         if ((denom == 0.0) &amp;&amp;
22265                               (!isnan(a) || !isnan(b))) {
22266                               x = copysign(INFINITY, c) * a;
22267                               y = copysign(INFINITY, c) * b;
22268                         }
22269                         else if ((isinf(a) || isinf(b)) &amp;&amp;
22270                               isfinite(c) &amp;&amp; isfinite(d)) {
22271                               a = copysign(isinf(a) ? 1.0 : 0.0,                        a);
22272                               b = copysign(isinf(b) ? 1.0 : 0.0,                        b);
22273                               x = INFINITY * ( a * c + b * d );
22274                               y = INFINITY * ( b * c - a * d );
22275                         }
22276                         else if (isinf(logbw) &amp;&amp;
22277                               isfinite(a) &amp;&amp; isfinite(b)) {
22278                               c = copysign(isinf(c) ? 1.0 : 0.0,                        c);
22279                               d = copysign(isinf(d) ? 1.0 : 0.0,                        d);
22280                               x = 0.0 * ( a * c + b * d );
22281                               y = 0.0 * ( b * c - a * d );
22282                         }
22283                   }
22284                   return x + I * y;
22285          }</pre>
22286  Scaling the denominator alleviates the main overflow and underflow problem, which is more serious than
22287  for multiplication. In the spirit of the multiplication example above, this code does not defend against
22288  overflow and underflow in the calculation of the numerator. Scaling with the scalbn function, instead of
22289  with division, provides better roundoff characteristics.
22290  
22291
22292 <h6>footnotes</h6>
22293 <p><a name="note325">325)</a> These properties are already implied for those cases covered in the tables, but are required for all cases
22294  (at least where the state for CX_LIMITED_RANGE is ''off'').
22295
22296
22297 <a name="G.5.2" href="#G.5.2"><h4>G.5.2 Additive operators</h4></a>
22298 <h6>Semantics</h6>
22299 <p><!--para 1-->
22300  If both operands have imaginary type, then the result has imaginary type. (If one operand
22301  has real type and the other operand has imaginary type, or if either operand has complex
22302  type, then the result has complex type.)
22303 <p><!--para 2-->
22304  In all cases the result and floating-point exception behavior of a + or - operator is defined
22305  by the usual mathematical formula:
22306 <pre>
22307         + or -              u                       iv                    u + iv</pre>
22308  
22309 <pre>
22310         x                 x(+-)u                     x (+-) iv              (x (+-) u) (+-) iv</pre>
22311  
22312 <pre>
22313         iy               (+-)u + iy                 i(y (+-) v)             (+-)u + i(y (+-) v)</pre>
22314  
22315 <pre>
22316         x + iy         (x (+-) u) + iy            x + i(y (+-) v)        (x (+-) u) + i(y (+-) v)</pre>
22317
22318 <a name="G.6" href="#G.6"><h3>G.6 Complex arithmetic <complex.h></h3></a>
22319 <p><!--para 1-->
22320  The macros
22321 <pre>
22322          imaginary</pre>
22323  and
22324 <pre>
22325          _Imaginary_I</pre>
22326  are defined, respectively, as _Imaginary and a constant expression of type const
22327  float _Imaginary with the value of the imaginary unit. The macro
22328 <pre>
22329          I</pre>
22330  is defined to be _Imaginary_I (not _Complex_I as stated in <a href="#7.3">7.3</a>). Notwithstanding
22331  the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and then perhaps redefine the macro
22332  imaginary.
22333 <p><!--para 2-->
22334  This subclause contains specifications for the <a href="#7.3">&lt;complex.h&gt;</a> functions that are
22335  particularly suited to IEC 60559 implementations. For families of functions, the
22336  specifications apply to all of the functions even though only the principal function is
22337 <!--page 485 indent 4-->
22338  shown. Unless otherwise specified, where the symbol ''(+-)'' occurs in both an argument
22339  and the result, the result has the same sign as the argument.
22340 <p><!--para 3-->
22341  The functions are continuous onto both sides of their branch cuts, taking into account the
22342  sign of zero. For example, csqrt(-2 (+-) i0) = (+-)i(sqrt)2.  ???
22343 <p><!--para 4-->
22344  Since complex and imaginary values are composed of real values, each function may be
22345  regarded as computing real values from real values. Except as noted, the functions treat
22346  real infinities, NaNs, signed zeros, subnormals, and the floating-point exception flags in a
22347  manner consistent with the specifications for real functions in F.9.<sup><a href="#note326"><b>326)</b></a></sup>
22348 <p><!--para 5-->
22349  The functions cimag, conj, cproj, and creal are fully specified for all
22350  implementations, including IEC 60559 ones, in <a href="#7.3.9">7.3.9</a>. These functions raise no floating-
22351  point exceptions.
22352 <p><!--para 6-->
22353  Each of the functions cabs and carg is specified by a formula in terms of a real
22354  function (whose special cases are covered in <a href="#F">annex F</a>):
22355 <p><!--para 7-->
22356 <pre>
22357          cabs(x + iy) = hypot(x, y)
22358          carg(x + iy) = atan2(y, x)</pre>
22359  Each of the functions casin, catan, ccos, csin, and ctan is specified implicitly by
22360  a formula in terms of other complex functions (whose special cases are specified below):
22361 <p><!--para 8-->
22362 <pre>
22363          casin(z)        =   -i casinh(iz)
22364          catan(z)        =   -i catanh(iz)
22365          ccos(z)         =   ccosh(iz)
22366          csin(z)         =   -i csinh(iz)
22367          ctan(z)         =   -i ctanh(iz)</pre>
22368  For the other functions, the following subclauses specify behavior for special cases,
22369  including treatment of the ''invalid'' and ''divide-by-zero'' floating-point exceptions. For
22370  families of functions, the specifications apply to all of the functions even though only the
22371  principal function is shown. For a function f satisfying f (conj(z)) = conj( f (z)), the
22372  specifications for the upper half-plane imply the specifications for the lower half-plane; if
22373  the function f is also either even, f (-z) = f (z), or odd, f (-z) = - f (z), then the
22374  specifications for the first quadrant imply the specifications for the other three quadrants.
22375 <p><!--para 9-->
22376  In the following subclauses, cis(y) is defined as cos(y) + i sin(y).
22377  
22378  
22379  
22380  
22381 <!--page 486 indent 4-->
22382
22383 <h6>footnotes</h6>
22384 <p><a name="note326">326)</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
22385  other part is a NaN.
22386
22387
22388 <a name="G.6.1" href="#G.6.1"><h4>G.6.1 Trigonometric functions</h4></a>
22389
22390 <a name="G.6.1.1" href="#G.6.1.1"><h5>G.6.1.1 The cacos functions</h5></a>
22391 <p><!--para 1-->
22392 <ul>
22393 <li>  cacos(conj(z)) = conj(cacos(z)).
22394 <li>  cacos((+-)0 + i0) returns pi /2 - i0.
22395 <li>  cacos((+-)0 + iNaN) returns pi /2 + iNaN.
22396 <li>  cacos(x + i (inf)) returns pi /2 - i (inf), for finite x.
22397 <li>  cacos(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22398  point exception, for nonzero finite x.
22399 <li>  cacos(-(inf) + iy) returns pi - i (inf), for positive-signed finite y.
22400 <li>  cacos(+(inf) + iy) returns +0 - i (inf), for positive-signed finite y.
22401 <li>  cacos(-(inf) + i (inf)) returns 3pi /4 - i (inf).
22402 <li>  cacos(+(inf) + i (inf)) returns pi /4 - i (inf).
22403 <li>  cacos((+-)(inf) + iNaN) returns NaN (+-) i (inf) (where the sign of the imaginary part of the
22404  result is unspecified).
22405 <li>  cacos(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22406  point exception, for finite y.
22407 <li>  cacos(NaN + i (inf)) returns NaN - i (inf).
22408 <li>  cacos(NaN + iNaN) returns NaN + iNaN.
22409 </ul>
22410
22411 <a name="G.6.2" href="#G.6.2"><h4>G.6.2 Hyperbolic functions</h4></a>
22412
22413 <a name="G.6.2.1" href="#G.6.2.1"><h5>G.6.2.1 The cacosh functions</h5></a>
22414 <p><!--para 1-->
22415 <ul>
22416 <li>  cacosh(conj(z)) = conj(cacosh(z)).
22417 <li>  cacosh((+-)0 + i0) returns +0 + ipi /2.
22418 <li>  cacosh(x + i (inf)) returns +(inf) + ipi /2, for finite x.
22419 <li>  cacosh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
22420  floating-point exception, for finite x.
22421 <li>  cacosh(-(inf) + iy) returns +(inf) + ipi , for positive-signed finite y.
22422 <li>  cacosh(+(inf) + iy) returns +(inf) + i0, for positive-signed finite y.
22423 <li>  cacosh(-(inf) + i (inf)) returns +(inf) + i3pi /4.
22424 <li>  cacosh(+(inf) + i (inf)) returns +(inf) + ipi /4.
22425 <li>  cacosh((+-)(inf) + iNaN) returns +(inf) + iNaN.
22426 <!--page 487 indent 4-->
22427 <li>  cacosh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
22428  floating-point exception, for finite y.
22429 <li>  cacosh(NaN + i (inf)) returns +(inf) + iNaN.
22430 <li>  cacosh(NaN + iNaN) returns NaN + iNaN.
22431 </ul>
22432
22433 <a name="G.6.2.2" href="#G.6.2.2"><h5>G.6.2.2 The casinh functions</h5></a>
22434 <p><!--para 1-->
22435 <ul>
22436 <li>  casinh(conj(z)) = conj(casinh(z)) and casinh is odd.
22437 <li>  casinh(+0 + i0) returns 0 + i0.
22438 <li>  casinh(x + i (inf)) returns +(inf) + ipi /2 for positive-signed finite x.
22439 <li>  casinh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
22440  floating-point exception, for finite x.
22441 <li>  casinh(+(inf) + iy) returns +(inf) + i0 for positive-signed finite y.
22442 <li>  casinh(+(inf) + i (inf)) returns +(inf) + ipi /4.
22443 <li>  casinh(+(inf) + iNaN) returns +(inf) + iNaN.
22444 <li>  casinh(NaN + i0) returns NaN + i0.
22445 <li>  casinh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
22446  floating-point exception, for finite nonzero y.
22447 <li>  casinh(NaN + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result
22448  is unspecified).
22449 <li>  casinh(NaN + iNaN) returns NaN + iNaN.
22450 </ul>
22451
22452 <a name="G.6.2.3" href="#G.6.2.3"><h5>G.6.2.3 The catanh functions</h5></a>
22453 <p><!--para 1-->
22454 <ul>
22455 <li>  catanh(conj(z)) = conj(catanh(z)) and catanh is odd.
22456 <li>  catanh(+0 + i0) returns +0 + i0.
22457 <li>  catanh(+0 + iNaN) returns +0 + iNaN.
22458 <li>  catanh(+1 + i0) returns +(inf) + i0 and raises the ''divide-by-zero'' floating-point
22459  exception.
22460 <li>  catanh(x + i (inf)) returns +0 + ipi /2, for finite positive-signed x.
22461 <li>  catanh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
22462  floating-point exception, for nonzero finite x.
22463 <li>  catanh(+(inf) + iy) returns +0 + ipi /2, for finite positive-signed y.
22464 <li>  catanh(+(inf) + i (inf)) returns +0 + ipi /2.
22465 <li>  catanh(+(inf) + iNaN) returns +0 + iNaN.
22466 <!--page 488 indent 4-->
22467 <li>  catanh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
22468  floating-point exception, for finite y.
22469 <li>  catanh(NaN + i (inf)) returns (+-)0 + ipi /2 (where the sign of the real part of the result is
22470  unspecified).
22471 <li>  catanh(NaN + iNaN) returns NaN + iNaN.
22472 </ul>
22473
22474 <a name="G.6.2.4" href="#G.6.2.4"><h5>G.6.2.4 The ccosh functions</h5></a>
22475 <p><!--para 1-->
22476 <ul>
22477 <li>  ccosh(conj(z)) = conj(ccosh(z)) and ccosh is even.
22478 <li>  ccosh(+0 + i0) returns 1 + i0.
22479 <li>  ccosh(+0 + i (inf)) returns NaN (+-) i0 (where the sign of the imaginary part of the
22480  result is unspecified) and raises the ''invalid'' floating-point exception.
22481 <li>  ccosh(+0 + iNaN) returns NaN (+-) i0 (where the sign of the imaginary part of the
22482  result is unspecified).
22483 <li>  ccosh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
22484  exception, for finite nonzero x.
22485 <li>  ccosh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22486  point exception, for finite nonzero x.
22487 <li>  ccosh(+(inf) + i0) returns +(inf) + i0.
22488 <li>  ccosh(+(inf) + iy) returns +(inf) cis(y), for finite nonzero y.
22489 <li>  ccosh(+(inf) + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result is
22490  unspecified) and raises the ''invalid'' floating-point exception.
22491 <li>  ccosh(+(inf) + iNaN) returns +(inf) + iNaN.
22492 <li>  ccosh(NaN + i0) returns NaN (+-) i0 (where the sign of the imaginary part of the
22493  result is unspecified).
22494 <li>  ccosh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22495  point exception, for all nonzero numbers y.
22496 <li>  ccosh(NaN + iNaN) returns NaN + iNaN.
22497 </ul>
22498
22499 <a name="G.6.2.5" href="#G.6.2.5"><h5>G.6.2.5 The csinh functions</h5></a>
22500 <p><!--para 1-->
22501 <ul>
22502 <li>  csinh(conj(z)) = conj(csinh(z)) and csinh is odd.
22503 <li>  csinh(+0 + i0) returns +0 + i0.
22504 <li>  csinh(+0 + i (inf)) returns (+-)0 + iNaN (where the sign of the real part of the result is
22505  unspecified) and raises the ''invalid'' floating-point exception.
22506 <li>  csinh(+0 + iNaN) returns (+-)0 + iNaN (where the sign of the real part of the result is
22507  unspecified).
22508 <!--page 489 indent 4-->
22509 <li>  csinh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
22510  exception, for positive finite x.
22511 <li>  csinh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22512  point exception, for finite nonzero x.
22513 <li>  csinh(+(inf) + i0) returns +(inf) + i0.
22514 <li>  csinh(+(inf) + iy) returns +(inf) cis(y), for positive finite y.
22515 <li>  csinh(+(inf) + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result is
22516  unspecified) and raises the ''invalid'' floating-point exception.
22517 <li>  csinh(+(inf) + iNaN) returns (+-)(inf) + iNaN (where the sign of the real part of the result
22518  is unspecified).
22519 <li>  csinh(NaN + i0) returns NaN + i0.
22520 <li>  csinh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22521  point exception, for all nonzero numbers y.
22522 <li>  csinh(NaN + iNaN) returns NaN + iNaN.
22523 </ul>
22524
22525 <a name="G.6.2.6" href="#G.6.2.6"><h5>G.6.2.6 The ctanh functions</h5></a>
22526 <p><!--para 1-->
22527 <ul>
22528 <li>  ctanh(conj(z)) = conj(ctanh(z))and ctanh is odd.
22529 <li>  ctanh(+0 + i0) returns +0 + i0.
22530 <li>  ctanh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
22531  exception, for finite x.
22532 <li>  ctanh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22533  point exception, for finite x.
22534 <li>  ctanh(+(inf) + iy) returns 1 + i0 sin(2y), for positive-signed finite y.
22535 <li>  ctanh(+(inf) + i (inf)) returns 1 (+-) i0 (where the sign of the imaginary part of the result
22536  is unspecified).
22537 <li>  ctanh(+(inf) + iNaN) returns 1 (+-) i0 (where the sign of the imaginary part of the
22538  result is unspecified).
22539 <li>  ctanh(NaN + i0) returns NaN + i0.
22540 <li>  ctanh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22541  point exception, for all nonzero numbers y.
22542 <li>  ctanh(NaN + iNaN) returns NaN + iNaN.
22543 <!--page 490 indent 4-->
22544 </ul>
22545
22546 <a name="G.6.3" href="#G.6.3"><h4>G.6.3 Exponential and logarithmic functions</h4></a>
22547
22548 <a name="G.6.3.1" href="#G.6.3.1"><h5>G.6.3.1 The cexp functions</h5></a>
22549 <p><!--para 1-->
22550 <ul>
22551 <li>  cexp(conj(z)) = conj(cexp(z)).
22552 <li>  cexp((+-)0 + i0) returns 1 + i0.
22553 <li>  cexp(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
22554  exception, for finite x.
22555 <li>  cexp(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22556  point exception, for finite x.
22557 <li>  cexp(+(inf) + i0) returns +(inf) + i0.
22558 <li>  cexp(-(inf) + iy) returns +0 cis(y), for finite y.
22559 <li>  cexp(+(inf) + iy) returns +(inf) cis(y), for finite nonzero y.
22560 <li>  cexp(-(inf) + i (inf)) returns (+-)0 (+-) i0 (where the signs of the real and imaginary parts of
22561  the result are unspecified).
22562 <li>  cexp(+(inf) + i (inf)) returns (+-)(inf) + iNaN and raises the ''invalid'' floating-point
22563  exception (where the sign of the real part of the result is unspecified).
22564 <li>  cexp(-(inf) + iNaN) returns (+-)0 (+-) i0 (where the signs of the real and imaginary parts
22565  of the result are unspecified).
22566 <li>  cexp(+(inf) + iNaN) returns (+-)(inf) + iNaN (where the sign of the real part of the result
22567  is unspecified).
22568 <li>  cexp(NaN + i0) returns NaN + i0.
22569 <li>  cexp(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22570  point exception, for all nonzero numbers y.
22571 <li>  cexp(NaN + iNaN) returns NaN + iNaN.
22572 </ul>
22573
22574 <a name="G.6.3.2" href="#G.6.3.2"><h5>G.6.3.2 The clog functions</h5></a>
22575 <p><!--para 1-->
22576 <ul>
22577 <li>  clog(conj(z)) = conj(clog(z)).
22578 <li>  clog(-0 + i0) returns -(inf) + ipi and raises the ''divide-by-zero'' floating-point
22579  exception.
22580 <li>  clog(+0 + i0) returns -(inf) + i0 and raises the ''divide-by-zero'' floating-point
22581  exception.
22582 <li>  clog(x + i (inf)) returns +(inf) + ipi /2, for finite x.
22583 <li>  clog(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22584  point exception, for finite x.
22585 <!--page 491 indent 4-->
22586 <li>  clog(-(inf) + iy) returns +(inf) + ipi , for finite positive-signed y.
22587 <li>  clog(+(inf) + iy) returns +(inf) + i0, for finite positive-signed y.
22588 <li>  clog(-(inf) + i (inf)) returns +(inf) + i3pi /4.
22589 <li>  clog(+(inf) + i (inf)) returns +(inf) + ipi /4.
22590 <li>  clog((+-)(inf) + iNaN) returns +(inf) + iNaN.
22591 <li>  clog(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22592  point exception, for finite y.
22593 <li>  clog(NaN + i (inf)) returns +(inf) + iNaN.
22594 <li>  clog(NaN + iNaN) returns NaN + iNaN.
22595 </ul>
22596
22597 <a name="G.6.4" href="#G.6.4"><h4>G.6.4 Power and absolute-value functions</h4></a>
22598
22599 <a name="G.6.4.1" href="#G.6.4.1"><h5>G.6.4.1 The cpow functions</h5></a>
22600 <p><!--para 1-->
22601  The cpow functions raise floating-point exceptions if appropriate for the calculation of
22602  the parts of the result, and may raise spurious exceptions.<sup><a href="#note327"><b>327)</b></a></sup>
22603
22604 <h6>footnotes</h6>
22605 <p><a name="note327">327)</a> This allows cpow( z , c ) to be implemented as cexp(c      clog( z )) without precluding
22606  implementations that treat special cases more carefully.
22607
22608
22609 <a name="G.6.4.2" href="#G.6.4.2"><h5>G.6.4.2 The csqrt functions</h5></a>
22610 <p><!--para 1-->
22611 <ul>
22612 <li>  csqrt(conj(z)) = conj(csqrt(z)).
22613 <li>  csqrt((+-)0 + i0) returns +0 + i0.
22614 <li>  csqrt(x + i (inf)) returns +(inf) + i (inf), for all x (including NaN).
22615 <li>  csqrt(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22616  point exception, for finite x.
22617 <li>  csqrt(-(inf) + iy) returns +0 + i (inf), for finite positive-signed y.
22618 <li>  csqrt(+(inf) + iy) returns +(inf) + i0, for finite positive-signed y.
22619 <li>  csqrt(-(inf) + iNaN) returns NaN (+-) i (inf) (where the sign of the imaginary part of the
22620  result is unspecified).
22621 <li>  csqrt(+(inf) + iNaN) returns +(inf) + iNaN.
22622 <li>  csqrt(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
22623  point exception, for finite y.
22624 <li>  csqrt(NaN + iNaN) returns NaN + iNaN.
22625  
22626  
22627  
22628  
22629 <!--page 492 indent 4-->
22630 </ul>
22631
22632 <a name="G.7" href="#G.7"><h3>G.7 Type-generic math <tgmath.h></h3></a>
22633 <p><!--para 1-->
22634  Type-generic macros that accept complex arguments also accept imaginary arguments. If
22635  an argument is imaginary, the macro expands to an expression whose type is real,
22636  imaginary, or complex, as appropriate for the particular function: if the argument is
22637  imaginary, then the types of cos, cosh, fabs, carg, cimag, and creal are real; the
22638  types of sin, tan, sinh, tanh, asin, atan, asinh, and atanh are imaginary; and
22639  the types of the others are complex.
22640 <p><!--para 2-->
22641  Given an imaginary argument, each of the type-generic macros cos, sin, tan, cosh,
22642  sinh, tanh, asin, atan, asinh, atanh is specified by a formula in terms of real
22643  functions:
22644 <!--page 493 indent 4-->
22645 <pre>
22646         cos(iy)      =   cosh(y)
22647         sin(iy)      =   i sinh(y)
22648         tan(iy)      =   i tanh(y)
22649         cosh(iy)     =   cos(y)
22650         sinh(iy)     =   i sin(y)
22651         tanh(iy)     =   i tan(y)
22652         asin(iy)     =   i asinh(y)
22653         atan(iy)     =   i atanh(y)
22654         asinh(iy)    =   i asin(y)
22655         atanh(iy)    =   i atan(y)</pre>
22656
22657 <a name="H" href="#H"><h2>Annex H</h2></a>
22658 <pre>
22659                                      (informative)
22660                      Language independent arithmetic</pre>
22661
22662 <a name="H.1" href="#H.1"><h3>H.1 Introduction</h3></a>
22663 <p><!--para 1-->
22664  This annex documents the extent to which the C language supports the ISO/IEC 10967-1
22665  standard for language-independent arithmetic (LIA-1). LIA-1 is more general than
22666  IEC 60559 (<a href="#F">annex F</a>) in that it covers integer and diverse floating-point arithmetics.
22667
22668 <a name="H.2" href="#H.2"><h3>H.2 Types</h3></a>
22669 <p><!--para 1-->
22670  The relevant C arithmetic types meet the requirements of LIA-1 types if an
22671  implementation adds notification of exceptional arithmetic operations and meets the 1
22672  unit in the last place (ULP) accuracy requirement (LIA-1 subclause <a href="#5.2.8">5.2.8</a>).
22673
22674 <a name="H.2.1" href="#H.2.1"><h4>H.2.1 Boolean type</h4></a>
22675 <p><!--para 1-->
22676  The LIA-1 data type Boolean is implemented by the C data type bool with values of
22677  true and false, all from <a href="#7.16">&lt;stdbool.h&gt;</a>.
22678
22679 <a name="H.2.2" href="#H.2.2"><h4>H.2.2 Integer types</h4></a>
22680 <p><!--para 1-->
22681  The signed C integer types int, long int, long long int, and the corresponding
22682  unsigned types are compatible with LIA-1. If an implementation adds support for the
22683  LIA-1 exceptional values ''integer_overflow'' and ''undefined'', then those types are
22684  LIA-1 conformant types. C's unsigned integer types are ''modulo'' in the LIA-1 sense
22685  in that overflows or out-of-bounds results silently wrap. An implementation that defines
22686  signed integer types as also being modulo need not detect integer overflow, in which case,
22687  only integer divide-by-zero need be detected.
22688 <p><!--para 2-->
22689  The parameters for the integer data types can be accessed by the following:
22690  maxint        INT_MAX, LONG_MAX, LLONG_MAX, UINT_MAX, ULONG_MAX,
22691 <pre>
22692                ULLONG_MAX</pre>
22693  minint        INT_MIN, LONG_MIN, LLONG_MIN
22694 <p><!--para 3-->
22695  The parameter ''bounded'' is always true, and is not provided. The parameter ''minint''
22696  is always 0 for the unsigned types, and is not provided for those types.
22697 <!--page 494 indent 4-->
22698
22699 <a name="H.2.2.1" href="#H.2.2.1"><h5>H.2.2.1 Integer operations</h5></a>
22700 <p><!--para 1-->
22701  The integer operations on integer types are the following:
22702  addI           x + y
22703  subI           x - y
22704  mulI           x * y
22705  divI, divtI    x / y
22706  remI, remtI    x % y
22707  negI           -x
22708  absI           abs(x), labs(x), llabs(x)
22709  eqI            x == y
22710  neqI           x != y
22711  lssI           x &lt; y
22712  leqI           x &lt;= y
22713  gtrI           x &gt; y
22714  geqI           x &gt;= y
22715  where x and y are expressions of the same integer type.
22716
22717 <a name="H.2.3" href="#H.2.3"><h4>H.2.3 Floating-point types</h4></a>
22718 <p><!--para 1-->
22719  The C floating-point types float, double, and long double are compatible with
22720  LIA-1. If an implementation adds support for the LIA-1 exceptional values
22721  ''underflow'', ''floating_overflow'', and ''"undefined'', then those types are conformant
22722  with LIA-1. An implementation that uses IEC 60559 floating-point formats and
22723  operations (see <a href="#F">annex F</a>) along with IEC 60559 status flags and traps has LIA-1
22724  conformant types.
22725
22726 <a name="H.2.3.1" href="#H.2.3.1"><h5>H.2.3.1 Floating-point parameters</h5></a>
22727 <p><!--para 1-->
22728  The parameters for a floating point data type can be accessed by the following:
22729  r              FLT_RADIX
22730  p              FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG
22731  emax           FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP
22732  emin           FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP
22733 <p><!--para 2-->
22734  The derived constants for the floating point types are accessed by the following:
22735 <!--page 495 indent 4-->
22736  fmax          FLT_MAX, DBL_MAX, LDBL_MAX
22737  fminN         FLT_MIN, DBL_MIN, LDBL_MIN
22738  epsilon       FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON
22739  rnd_style     FLT_ROUNDS
22740
22741 <a name="H.2.3.2" href="#H.2.3.2"><h5>H.2.3.2 Floating-point operations</h5></a>
22742 <p><!--para 1-->
22743  The floating-point operations on floating-point types are the following:
22744  addF          x + y
22745  subF          x - y
22746  mulF          x * y
22747  divF          x / y
22748  negF          -x
22749  absF          fabsf(x), fabs(x), fabsl(x)
22750  exponentF     1.f+logbf(x), 1.0+logb(x), 1.L+logbl(x)
22751  scaleF        scalbnf(x, n), scalbn(x, n), scalbnl(x, n),
22752 <pre>
22753                scalblnf(x, li), scalbln(x, li), scalblnl(x, li)</pre>
22754  intpartF      modff(x, &amp;y), modf(x, &amp;y), modfl(x, &amp;y)
22755  fractpartF    modff(x, &amp;y), modf(x, &amp;y), modfl(x, &amp;y)
22756  eqF           x == y
22757  neqF          x != y
22758  lssF          x &lt; y
22759  leqF          x &lt;= y
22760  gtrF          x &gt; y
22761  geqF          x &gt;= y
22762  where x and y are expressions of the same floating point type, n is of type int, and li
22763  is of type long int.
22764
22765 <a name="H.2.3.3" href="#H.2.3.3"><h5>H.2.3.3 Rounding styles</h5></a>
22766 <p><!--para 1-->
22767  The C Standard requires all floating types to use the same radix and rounding style, so
22768  that only one identifier for each is provided to map to LIA-1.
22769 <p><!--para 2-->
22770  The FLT_ROUNDS parameter can be used to indicate the LIA-1 rounding styles:
22771  truncate      FLT_ROUNDS == 0
22772 <!--page 496 indent 4-->
22773  nearest        FLT_ROUNDS == 1
22774  other          FLT_ROUNDS != 0 &amp;&amp; FLT_ROUNDS != 1
22775  provided that an implementation extends FLT_ROUNDS to cover the rounding style used
22776  in all relevant LIA-1 operations, not just addition as in C.
22777
22778 <a name="H.2.4" href="#H.2.4"><h4>H.2.4 Type conversions</h4></a>
22779 <p><!--para 1-->
22780  The LIA-1 type conversions are the following type casts:
22781  cvtI' -&gt; I      (int)i, (long int)i, (long long int)i,
22782 <pre>
22783                 (unsigned int)i, (unsigned long int)i,
22784                 (unsigned long long int)i</pre>
22785  cvtF -&gt; I       (int)x, (long int)x, (long long int)x,
22786 <pre>
22787                 (unsigned int)x, (unsigned long int)x,
22788                 (unsigned long long int)x</pre>
22789  cvtI -&gt; F       (float)i, (double)i, (long double)i
22790  cvtF' -&gt; F      (float)x, (double)x, (long double)x
22791 <p><!--para 2-->
22792  In the above conversions from floating to integer, the use of (cast)x can be replaced with
22793  (cast)round(x), (cast)rint(x), (cast)nearbyint(x), (cast)trunc(x),
22794  (cast)ceil(x), or (cast)floor(x). In addition, C's floating-point to integer
22795  conversion functions, lrint(), llrint(), lround(), and llround(), can be
22796  used. They all meet LIA-1's requirements on floating to integer rounding for in-range
22797  values. For out-of-range values, the conversions shall silently wrap for the modulo types.
22798 <p><!--para 3-->
22799  The fmod() function is useful for doing silent wrapping to unsigned integer types, e.g.,
22800  fmod( fabs(rint(x)), 65536.0 ) or (0.0 &lt;= (y = fmod( rint(x),
22801  65536.0 )) ? y : 65536.0 + y) will compute an integer value in the range 0.0
22802  to 65535.0 which can then be cast to unsigned short int. But, the
22803  remainder() function is not useful for doing silent wrapping to signed integer types,
22804  e.g., remainder( rint(x), 65536.0 ) will compute an integer value in the
22805  range -32767.0 to +32768.0 which is not, in general, in the range of signed short
22806  int.
22807 <p><!--para 4-->
22808  C's conversions (casts) from floating-point to floating-point can meet LIA-1
22809  requirements if an implementation uses round-to-nearest (IEC 60559 default).
22810 <p><!--para 5-->
22811  C's conversions (casts) from integer to floating-point can meet LIA-1 requirements if an
22812  implementation uses round-to-nearest.
22813 <!--page 497 indent 4-->
22814
22815 <a name="H.3" href="#H.3"><h3>H.3 Notification</h3></a>
22816 <p><!--para 1-->
22817  Notification is the process by which a user or program is informed that an exceptional
22818  arithmetic operation has occurred. C's operations are compatible with LIA-1 in that C
22819  allows an implementation to cause a notification to occur when any arithmetic operation
22820  returns an exceptional value as defined in LIA-1 clause 5.
22821
22822 <a name="H.3.1" href="#H.3.1"><h4>H.3.1 Notification alternatives</h4></a>
22823 <p><!--para 1-->
22824  LIA-1 requires at least the following two alternatives for handling of notifications:
22825  setting indicators or trap-and-terminate. LIA-1 allows a third alternative: trap-and-
22826  resume.
22827 <p><!--para 2-->
22828  An implementation need only support a given notification alternative for the entire
22829  program. An implementation may support the ability to switch between notification
22830  alternatives during execution, but is not required to do so. An implementation can
22831  provide separate selection for each kind of notification, but this is not required.
22832 <p><!--para 3-->
22833  C allows an implementation to provide notification. C's SIGFPE (for traps) and
22834  FE_INVALID, FE_DIVBYZERO, FE_OVERFLOW, FE_UNDERFLOW (for indicators)
22835  can provide LIA-1 notification.
22836 <p><!--para 4-->
22837  C's signal handlers are compatible with LIA-1. Default handling of SIGFPE can
22838  provide trap-and-terminate behavior, except for those LIA-1 operations implemented by
22839  math library function calls. User-provided signal handlers for SIGFPE allow for trap-
22840  and-resume behavior with the same constraint.
22841
22842 <a name="H.3.1.1" href="#H.3.1.1"><h5>H.3.1.1 Indicators</h5></a>
22843 <p><!--para 1-->
22844  C's <a href="#7.6">&lt;fenv.h&gt;</a> status flags are compatible with the LIA-1 indicators.
22845 <p><!--para 2-->
22846  The following mapping is for floating-point types:
22847  undefined                FE_INVALID, FE_DIVBYZERO
22848  floating_overflow         FE_OVERFLOW
22849  underflow                FE_UNDERFLOW
22850 <p><!--para 3-->
22851  The floating-point indicator interrogation and manipulation operations are:
22852  set_indicators          feraiseexcept(i)
22853  clear_indicators        feclearexcept(i)
22854  test_indicators         fetestexcept(i)
22855  current_indicators      fetestexcept(FE_ALL_EXCEPT)
22856  where i is an expression of type int representing a subset of the LIA-1 indicators.
22857 <p><!--para 4-->
22858  C allows an implementation to provide the following LIA-1 required behavior: at
22859  program termination if any indicator is set the implementation shall send an unambiguous
22860 <!--page 498 indent 4-->
22861  and ''hard to ignore'' message (see LIA-1 subclause <a href="#6.1.2">6.1.2</a>)
22862 <p><!--para 5-->
22863  LIA-1 does not make the distinction between floating-point and integer for ''undefined''.
22864  This documentation makes that distinction because <a href="#7.6">&lt;fenv.h&gt;</a> covers only the floating-
22865  point indicators.
22866
22867 <a name="H.3.1.2" href="#H.3.1.2"><h5>H.3.1.2 Traps</h5></a>
22868 <p><!--para 1-->
22869  C is compatible with LIA-1's trap requirements for arithmetic operations, but not for
22870  math library functions (which are not permitted to generate any externally visible
22871  exceptional conditions). An implementation can provide an alternative of notification
22872  through termination with a ''hard-to-ignore'' message (see LIA-1 subclause <a href="#6.1.3">6.1.3</a>).
22873 <p><!--para 2-->
22874  LIA-1 does not require that traps be precise.
22875 <p><!--para 3-->
22876  C does require that SIGFPE be the signal corresponding to arithmetic exceptions, if there
22877  is any signal raised for them.
22878 <p><!--para 4-->
22879  C supports signal handlers for SIGFPE and allows trapping of arithmetic exceptions.
22880  When arithmetic exceptions do trap, C's signal-handler mechanism allows trap-and-
22881  terminate (either default implementation behavior or user replacement for it) or trap-and-
22882  resume, at the programmer's option.
22883 <!--page 499 indent 4-->
22884
22885 <a name="I" href="#I"><h2>Annex I</h2></a>
22886 <p><!--para 1-->
22887 <pre>
22888                                      (informative)
22889                                 Common warnings</pre>
22890  An implementation may generate warnings in many situations, none of which are
22891  specified as part of this International Standard. The following are a few of the more
22892  common situations.
22893 <p><!--para 2-->
22894 <ul>
22895 <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>).
22896 <li>  A block with initialization of an object that has automatic storage duration is jumped
22897  into (<a href="#6.2.4">6.2.4</a>).
22898 <li>  An implicit narrowing conversion is encountered, such as the assignment of a long
22899  int or a double to an int, or a pointer to void to a pointer to any type other than
22900  a character type (<a href="#6.3">6.3</a>).
22901 <li>  A hexadecimal floating constant cannot be represented exactly in its evaluation format
22902  (<a href="#6.4.4.2">6.4.4.2</a>).
22903 <li>  An integer character constant includes more than one character or a wide character
22904  constant includes more than one multibyte character (<a href="#6.4.4.4">6.4.4.4</a>).
22905 <li>  The characters /* are found in a comment (<a href="#6.4.7">6.4.7</a>).
22906 <li>  An ''unordered'' binary operator (not comma, &amp;&amp;, or ||) contains a side effect to an
22907  lvalue in one operand, and a side effect to, or an access to the value of, the identical
22908  lvalue in the other operand (<a href="#6.5">6.5</a>).
22909 <li>  A function is called but no prototype has been supplied (<a href="#6.5.2.2">6.5.2.2</a>).
22910 <li>  The arguments in a function call do not agree in number and type with those of the
22911  parameters in a function definition that is not a prototype (<a href="#6.5.2.2">6.5.2.2</a>).
22912 <li>  An object is defined but not used (<a href="#6.7">6.7</a>).
22913 <li>  A value is given to an object of an enumerated type other than by assignment of an
22914  enumeration constant that is a member of that type, or an enumeration object that has
22915  the same type, or the value of a function that returns the same enumerated type
22916  (<a href="#6.7.2.2">6.7.2.2</a>).
22917 <li>  An aggregate has a partly bracketed initialization (<a href="#6.7.7">6.7.7</a>).
22918 <li>  A statement cannot be reached (<a href="#6.8">6.8</a>).
22919 <li>  A statement with no apparent effect is encountered (<a href="#6.8">6.8</a>).
22920 <li>  A constant expression is used as the controlling expression of a selection statement
22921  (<a href="#6.8.4">6.8.4</a>).
22922 <!--page 500 indent 0-->
22923 <li>  An incorrectly formed preprocessing group is encountered while skipping a
22924  preprocessing group (<a href="#6.10.1">6.10.1</a>).
22925 <li>  An unrecognized #pragma directive is encountered (<a href="#6.10.6">6.10.6</a>).
22926 <!--page 501 indent 4-->
22927 </ul>
22928
22929 <a name="J" href="#J"><h2>Annex J</h2></a>
22930 <p><!--para 1-->
22931 <pre>
22932                                       (informative)
22933                                    Portability issues</pre>
22934  This annex collects some information about portability that appears in this International
22935  Standard.
22936
22937 <a name="J.1" href="#J.1"><h3>J.1 Unspecified behavior</h3></a>
22938 <p><!--para 1-->
22939  The following are unspecified:
22940 <ul>
22941 <li>  The manner and timing of static initialization (<a href="#5.1.2">5.1.2</a>).
22942 <li>  The termination status returned to the hosted environment if the return type of main
22943  is not compatible with int (<a href="#5.1.2.2.3">5.1.2.2.3</a>).
22944 <li>  The behavior of the display device if a printing character is written when the active
22945  position is at the final position of a line (<a href="#5.2.2">5.2.2</a>).
22946 <li>  The behavior of the display device if a backspace character is written when the active
22947  position is at the initial position of a line (<a href="#5.2.2">5.2.2</a>).
22948 <li>  The behavior of the display device if a horizontal tab character is written when the
22949  active position is at or past the last defined horizontal tabulation position (<a href="#5.2.2">5.2.2</a>).
22950 <li>  The behavior of the display device if a vertical tab character is written when the active
22951  position is at or past the last defined vertical tabulation position (<a href="#5.2.2">5.2.2</a>).
22952 <li>  How an extended source character that does not correspond to a universal character
22953  name counts toward the significant initial characters in an external identifier (<a href="#5.2.4.1">5.2.4.1</a>).
22954 <li>  Many aspects of the representations of types (<a href="#6.2.6">6.2.6</a>).
22955 <li>  The value of padding bytes when storing values in structures or unions (<a href="#6.2.6.1">6.2.6.1</a>).
22956 <li>  The value of a union member other than the last one stored into (<a href="#6.2.6.1">6.2.6.1</a>).
22957 <li>  The representation used when storing a value in an object that has more than one
22958  object representation for that value (<a href="#6.2.6.1">6.2.6.1</a>).
22959 <li>  The values of any padding bits in integer representations (<a href="#6.2.6.2">6.2.6.2</a>).
22960 <li>  Whether certain operators can generate negative zeros and whether a negative zero
22961  becomes a normal zero when stored in an object (<a href="#6.2.6.2">6.2.6.2</a>).
22962 <li>  Whether two string literals result in distinct arrays (<a href="#6.4.5">6.4.5</a>).
22963 <li>  The order in which subexpressions are evaluated and the order in which side effects
22964  take place, except as specified for the function-call (), &amp;&amp;, ||, ?:, and comma
22965  operators (<a href="#6.5">6.5</a>).
22966 <!--page 502 indent 0-->
22967 <li>  The order in which the function designator, arguments, and subexpressions within the
22968  arguments are evaluated in a function call (<a href="#6.5.2.2">6.5.2.2</a>).
22969 <li>  The order of side effects among compound literal initialization list expressions
22970  (<a href="#6.5.2.5">6.5.2.5</a>).
22971 <li>  The order in which the operands of an assignment operator are evaluated (<a href="#6.5.16">6.5.16</a>).
22972 <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>).
22973 <li>  Whether a call to an inline function uses the inline definition or the external definition
22974  of the function (<a href="#6.7.4">6.7.4</a>).
22975 <li>  Whether or not a size expression is evaluated when it is part of the operand of a
22976  sizeof operator and changing the value of the size expression would not affect the
22977  result of the operator (<a href="#6.7.5.2">6.7.5.2</a>).
22978 <li>  The order in which any side effects occur among the initialization list expressions in
22979  an initializer (<a href="#6.7.8">6.7.8</a>).
22980 <li>  The layout of storage for function parameters (<a href="#6.9.1">6.9.1</a>).
22981 <li>  When a fully expanded macro replacement list contains a function-like macro name
22982  as its last preprocessing token and the next preprocessing token from the source file is
22983  a (, and the fully expanded replacement of that macro ends with the name of the first
22984  macro and the next preprocessing token from the source file is again a (, whether that
22985  is considered a nested replacement (<a href="#6.10.3">6.10.3</a>).
22986 <li>  The order in which # and ## operations are evaluated during macro substitution
22987  (<a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.3.3">6.10.3.3</a>).
22988 <li>  Whether errno is a macro or an identifier with external linkage (<a href="#7.5">7.5</a>).
22989 <li>  The state of the floating-point status flags when execution passes from a part of the
22990  program translated with FENV_ACCESS ''off'' to a part translated with
22991  FENV_ACCESS ''on'' (<a href="#7.6.1">7.6.1</a>).
22992 <li>  The order in which feraiseexcept raises floating-point exceptions, except as
22993  stated in <a href="#F.7.6">F.7.6</a> (<a href="#7.6.2.3">7.6.2.3</a>).
22994 <li>  Whether math_errhandling is a macro or an identifier with external linkage
22995  (<a href="#7.12">7.12</a>).
22996 <li>  The results of the frexp functions when the specified value is not a floating-point
22997  number (<a href="#7.12.6.4">7.12.6.4</a>).
22998 <li>  The numeric result of the ilogb functions when the correct value is outside the
22999  range of the return type (<a href="#7.12.6.5">7.12.6.5</a>, <a href="#F.9.3.5">F.9.3.5</a>).
23000 <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.9.6.5">F.9.6.5</a>).
23001 <!--page 503 indent 0-->
23002 <li>  The value stored by the remquo functions in the object pointed to by quo when y is
23003  zero (<a href="#7.12.10.3">7.12.10.3</a>).
23004 <li>  Whether setjmp is a macro or an identifier with external linkage (<a href="#7.13">7.13</a>).
23005 <li>  Whether va_copy and va_end are macros or identifiers with external linkage
23006  (<a href="#7.15.1">7.15.1</a>).
23007 <li>  The hexadecimal digit before the decimal point when a non-normalized floating-point
23008  number is printed with an a or A conversion specifier (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>).
23009 <li>  The value of the file position indicator after a successful call to the ungetc function
23010  for a text stream, or the ungetwc function for any stream, until all pushed-back
23011  characters are read or discarded (<a href="#7.19.7.11">7.19.7.11</a>, <a href="#7.24.3.10">7.24.3.10</a>).
23012 <li>  The details of the value stored by the fgetpos function (<a href="#7.19.9.1">7.19.9.1</a>).
23013 <li>  The details of the value returned by the ftell function for a text stream (<a href="#7.19.9.4">7.19.9.4</a>).
23014 <li>  Whether the strtod, strtof, strtold, wcstod, wcstof, and wcstold
23015  functions convert a minus-signed sequence to a negative number directly or by
23016  negating the value resulting from converting the corresponding unsigned sequence
23017  (<a href="#7.20.1.3">7.20.1.3</a>, <a href="#7.24.4.1.1">7.24.4.1.1</a>).
23018 <li>  The order and contiguity of storage allocated by successive calls to the calloc,
23019  malloc, and realloc functions (<a href="#7.20.3">7.20.3</a>).
23020 <li>  The amount of storage allocated by a successful call to the calloc, malloc, or
23021  realloc function when 0 bytes was requested (<a href="#7.20.3">7.20.3</a>).
23022 <li>  Which of two elements that compare as equal is matched by the bsearch function
23023  (<a href="#7.20.5.1">7.20.5.1</a>).
23024 <li>  The order of two elements that compare as equal in an array sorted by the qsort
23025  function (<a href="#7.20.5.2">7.20.5.2</a>).
23026 <li>  The encoding of the calendar time returned by the time function (<a href="#7.23.2.4">7.23.2.4</a>).
23027 <li>  The characters stored by the strftime or wcsftime function if any of the time
23028  values being converted is outside the normal range (<a href="#7.23.3.5">7.23.3.5</a>, <a href="#7.24.5.1">7.24.5.1</a>).
23029 <li>  The conversion state after an encoding error occurs (<a href="#7.24.6.3.2">7.24.6.3.2</a>, <a href="#7.24.6.3.3">7.24.6.3.3</a>, <a href="#7.24.6.4.1">7.24.6.4.1</a>,
23030  <a href="#7.24.6.4.2">7.24.6.4.2</a>,
23031 <li>  The resulting value when the ''invalid'' floating-point exception is raised during
23032  IEC 60559 floating to integer conversion (<a href="#F.4">F.4</a>).
23033 <li>  Whether conversion of non-integer IEC 60559 floating values to integer raises the
23034  ''inexact'' floating-point exception (<a href="#F.4">F.4</a>).
23035 <!--page 504 indent 4-->
23036 <li>  Whether or when library functions in <a href="#7.12">&lt;math.h&gt;</a> raise the ''inexact'' floating-point
23037  exception in an IEC 60559 conformant implementation (<a href="#F.9">F.9</a>).
23038 <li>  Whether or when library functions in <a href="#7.12">&lt;math.h&gt;</a> raise an undeserved ''underflow''
23039  floating-point exception in an IEC 60559 conformant implementation (<a href="#F.9">F.9</a>).
23040 <li>  The exponent value stored by frexp for a NaN or infinity (<a href="#F.9.3.4">F.9.3.4</a>).
23041 <li>  The numeric result returned by the lrint, llrint, lround, and llround
23042  functions if the rounded value is outside the range of the return type (<a href="#F.9.6.5">F.9.6.5</a>, <a href="#F.9.6.7">F.9.6.7</a>).
23043 <li>  The sign of one part of the complex result of several math functions for certain
23044  exceptional values 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>,
23045  <a href="#G.6.2.3">G.6.2.3</a>, <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>).
23046 </ul>
23047
23048 <a name="J.2" href="#J.2"><h3>J.2 Undefined behavior</h3></a>
23049 <p><!--para 1-->
23050  The behavior is undefined in the following circumstances:
23051 <ul>
23052 <li>  A ''shall'' or ''shall not'' requirement that appears outside of a constraint is violated
23053  (clause 4).
23054 <li>  A nonempty source file does not end in a new-line character which is not immediately
23055  preceded by a backslash character or ends in a partial preprocessing token or
23056  comment (<a href="#5.1.1.2">5.1.1.2</a>).
23057 <li>  Token concatenation produces a character sequence matching the syntax of a
23058  universal character name (<a href="#5.1.1.2">5.1.1.2</a>).
23059 <li>  A program in a hosted environment does not define a function named main using one
23060  of the specified forms (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
23061 <li>  A character not in the basic source character set is encountered in a source file, except
23062  in an identifier, a character constant, a string literal, a header name, a comment, or a
23063  preprocessing token that is never converted to a token (<a href="#5.2.1">5.2.1</a>).
23064 <li>  An identifier, comment, string literal, character constant, or header name contains an
23065  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>).
23066 <li>  The same identifier has both internal and external linkage in the same translation unit
23067  (<a href="#6.2.2">6.2.2</a>).
23068 <li>  An object is referred to outside of its lifetime (<a href="#6.2.4">6.2.4</a>).
23069 <li>  The value of a pointer to an object whose lifetime has ended is used (<a href="#6.2.4">6.2.4</a>).
23070 <li>  The value of an object with automatic storage duration is used while it is
23071  indeterminate (<a href="#6.2.4">6.2.4</a>, <a href="#6.7.8">6.7.8</a>, <a href="#6.8">6.8</a>).
23072 <li>  A trap representation is read by an lvalue expression that does not have character type
23073  (<a href="#6.2.6.1">6.2.6.1</a>).
23074 <!--page 505 indent 0-->
23075 <li>  A trap representation is produced by a side effect that modifies any part of the object
23076  using an lvalue expression that does not have character type (<a href="#6.2.6.1">6.2.6.1</a>).
23077 <li>  The arguments to certain operators are such that could produce a negative zero result,
23078  but the implementation does not support negative zeros (<a href="#6.2.6.2">6.2.6.2</a>).
23079 <li>  Two declarations of the same object or function specify types that are not compatible
23080  (<a href="#6.2.7">6.2.7</a>).
23081 <li>  Conversion to or from an integer type produces a value outside the range that can be
23082  represented (<a href="#6.3.1.4">6.3.1.4</a>).
23083 <li>  Demotion of one real floating type to another produces a value outside the range that
23084  can be represented (<a href="#6.3.1.5">6.3.1.5</a>).
23085 <li>  An lvalue does not designate an object when evaluated (<a href="#6.3.2.1">6.3.2.1</a>).
23086 <li>  A non-array lvalue with an incomplete type is used in a context that requires the value
23087  of the designated object (<a href="#6.3.2.1">6.3.2.1</a>).
23088 <li>  An lvalue having array type is converted to a pointer to the initial element of the
23089  array, and the array object has register storage class (<a href="#6.3.2.1">6.3.2.1</a>).
23090 <li>  An attempt is made to use the value of a void expression, or an implicit or explicit
23091  conversion (except to void) is applied to a void expression (<a href="#6.3.2.2">6.3.2.2</a>).
23092 <li>  Conversion of a pointer to an integer type produces a value outside the range that can
23093  be represented (<a href="#6.3.2.3">6.3.2.3</a>).
23094 <li>  Conversion between two pointer types produces a result that is incorrectly aligned
23095  (<a href="#6.3.2.3">6.3.2.3</a>).
23096 <li>  A pointer is used to call a function whose type is not compatible with the pointed-to
23097  type (<a href="#6.3.2.3">6.3.2.3</a>).
23098 <li>  An unmatched ' or " character is encountered on a logical source line during
23099  tokenization (<a href="#6.4">6.4</a>).
23100 <li>  A reserved keyword token is used in translation phase 7 or 8 for some purpose other
23101  than as a keyword (<a href="#6.4.1">6.4.1</a>).
23102 <li>  A universal character name in an identifier does not designate a character whose
23103  encoding falls into one of the specified ranges (<a href="#6.4.2.1">6.4.2.1</a>).
23104 <li>  The initial character of an identifier is a universal character name designating a digit
23105  (<a href="#6.4.2.1">6.4.2.1</a>).
23106 <li>  Two identifiers differ only in nonsignificant characters (<a href="#6.4.2.1">6.4.2.1</a>).
23107 <li>  The identifier __func__ is explicitly declared (<a href="#6.4.2.2">6.4.2.2</a>).
23108 <!--page 506 indent 0-->
23109 <li>  The program attempts to modify a string literal (<a href="#6.4.5">6.4.5</a>).
23110 <li>  The characters ', \, ", //, or /* occur in the sequence between the &lt; and &gt;
23111  delimiters, or the characters ', \, //, or /* occur in the sequence between the "
23112  delimiters, in a header name preprocessing token (<a href="#6.4.7">6.4.7</a>).
23113 <li>  Between two sequence points, an object is modified more than once, or is modified
23114  and the prior value is read other than to determine the value to be stored (<a href="#6.5">6.5</a>).
23115 <li>  An exceptional condition occurs during the evaluation of an expression (<a href="#6.5">6.5</a>).
23116 <li>  An object has its stored value accessed other than by an lvalue of an allowable type
23117  (<a href="#6.5">6.5</a>).
23118 <li>  An attempt is made to modify the result of a function call, a conditional operator, an
23119  assignment operator, or a comma operator, or to access it after the next sequence
23120  point (<a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.5.15">6.5.15</a>, <a href="#6.5.16">6.5.16</a>, <a href="#6.5.17">6.5.17</a>).
23121 <li>  For a call to a function without a function prototype in scope, the number of
23122  arguments does not equal the number of parameters (<a href="#6.5.2.2">6.5.2.2</a>).
23123 <li>  For call to a function without a function prototype in scope where the function is
23124  defined with a function prototype, either the prototype ends with an ellipsis or the
23125  types of the arguments after promotion are not compatible with the types of the
23126  parameters (<a href="#6.5.2.2">6.5.2.2</a>).
23127 <li>  For a call to a function without a function prototype in scope where the function is not
23128  defined with a function prototype, the types of the arguments after promotion are not
23129  compatible with those of the parameters after promotion (with certain exceptions)
23130  (<a href="#6.5.2.2">6.5.2.2</a>).
23131 <li>  A function is defined with a type that is not compatible with the type (of the
23132  expression) pointed to by the expression that denotes the called function (<a href="#6.5.2.2">6.5.2.2</a>).
23133 <li>  The operand of the unary * operator has an invalid value (<a href="#6.5.3.2">6.5.3.2</a>).
23134 <li>  A pointer is converted to other than an integer or pointer type (<a href="#6.5.4">6.5.4</a>).
23135 <li>  The value of the second operand of the / or % operator is zero (<a href="#6.5.5">6.5.5</a>).
23136 <li>  Addition or subtraction of a pointer into, or just beyond, an array object and an
23137  integer type produces a result that does not point into, or just beyond, the same array
23138  object (<a href="#6.5.6">6.5.6</a>).
23139 <li>  Addition or subtraction of a pointer into, or just beyond, an array object and an
23140  integer type produces a result that points just beyond the array object and is used as
23141  the operand of a unary * operator that is evaluated (<a href="#6.5.6">6.5.6</a>).
23142 <li>  Pointers that do not point into, or just beyond, the same array object are subtracted
23143  (<a href="#6.5.6">6.5.6</a>).
23144 <!--page 507 indent 0-->
23145 <li>  An array subscript is out of range, even if an object is apparently accessible with the
23146  given subscript (as in the lvalue expression a[1][7] given the declaration int
23147  a[4][5]) (<a href="#6.5.6">6.5.6</a>).
23148 <li>  The result of subtracting two pointers is not representable in an object of type
23149  ptrdiff_t (<a href="#6.5.6">6.5.6</a>).
23150 <li>  An expression is shifted by a negative number or by an amount greater than or equal
23151  to the width of the promoted expression (<a href="#6.5.7">6.5.7</a>).
23152 <li>  An expression having signed promoted type is left-shifted and either the value of the
23153  expression is negative or the result of shifting would be not be representable in the
23154  promoted type (<a href="#6.5.7">6.5.7</a>).
23155 <li>  Pointers that do not point to the same aggregate or union (nor just beyond the same
23156  array object) are compared using relational operators (<a href="#6.5.8">6.5.8</a>).
23157 <li>  An object is assigned to an inexactly overlapping object or to an exactly overlapping
23158  object with incompatible type (<a href="#6.5.16.1">6.5.16.1</a>).
23159 <li>  An expression that is required to be an integer constant expression does not have an
23160  integer type; has operands that are not integer constants, enumeration constants,
23161  character constants, sizeof expressions whose results are integer constants, or
23162  immediately-cast floating constants; or contains casts (outside operands to sizeof
23163  operators) other than conversions of arithmetic types to integer types (<a href="#6.6">6.6</a>).
23164 <li>  A constant expression in an initializer is not, or does not evaluate to, one of the
23165  following: an arithmetic constant expression, a null pointer constant, an address
23166  constant, or an address constant for an object type plus or minus an integer constant
23167  expression (<a href="#6.6">6.6</a>).
23168 <li>  An arithmetic constant expression does not have arithmetic type; has operands that
23169  are not integer constants, floating constants, enumeration constants, character
23170  constants, or sizeof expressions; or contains casts (outside operands to sizeof
23171  operators) other than conversions of arithmetic types to arithmetic types (<a href="#6.6">6.6</a>).
23172 <li>  The value of an object is accessed by an array-subscript [], member-access . or -&gt;,
23173  address &amp;, or indirection * operator or a pointer cast in creating an address constant
23174  (<a href="#6.6">6.6</a>).
23175 <li>  An identifier for an object is declared with no linkage and the type of the object is
23176  incomplete after its declarator, or after its init-declarator if it has an initializer (<a href="#6.7">6.7</a>).
23177 <li>  A function is declared at block scope with an explicit storage-class specifier other
23178  than extern (<a href="#6.7.1">6.7.1</a>).
23179 <li>  A structure or union is defined as containing no named members (<a href="#6.7.2.1">6.7.2.1</a>).
23180 <!--page 508 indent 0-->
23181 <li>  An attempt is made to access, or generate a pointer to just past, a flexible array
23182  member of a structure when the referenced object provides no elements for that array
23183  (<a href="#6.7.2.1">6.7.2.1</a>).
23184 <li>  When the complete type is needed, an incomplete structure or union type is not
23185  completed in the same scope by another declaration of the tag that defines the content
23186  (<a href="#6.7.2.3">6.7.2.3</a>).
23187 <li>  An attempt is made to modify an object defined with a const-qualified type through
23188  use of an lvalue with non-const-qualified type (<a href="#6.7.3">6.7.3</a>).
23189 <li>  An attempt is made to refer to an object defined with a volatile-qualified type through
23190  use of an lvalue with non-volatile-qualified type (<a href="#6.7.3">6.7.3</a>).
23191 <li>  The specification of a function type includes any type qualifiers (<a href="#6.7.3">6.7.3</a>).
23192 <li>  Two qualified types that are required to be compatible do not have the identically
23193  qualified version of a compatible type (<a href="#6.7.3">6.7.3</a>).
23194 <li>  An object which has been modified is accessed through a restrict-qualified pointer to
23195  a const-qualified type, or through a restrict-qualified pointer and another pointer that
23196  are not both based on the same object (<a href="#6.7.3.1">6.7.3.1</a>).
23197 <li>  A restrict-qualified pointer is assigned a value based on another restricted pointer
23198  whose associated block neither began execution before the block associated with this
23199  pointer, nor ended before the assignment (<a href="#6.7.3.1">6.7.3.1</a>).
23200 <li>  A function with external linkage is declared with an inline function specifier, but is
23201  not also defined in the same translation unit (<a href="#6.7.4">6.7.4</a>).
23202 <li>  Two pointer types that are required to be compatible are not identically qualified, or
23203  are not pointers to compatible types (<a href="#6.7.5.1">6.7.5.1</a>).
23204 <li>  The size expression in an array declaration is not a constant expression and evaluates
23205  at program execution time to a nonpositive value (<a href="#6.7.5.2">6.7.5.2</a>).
23206 <li>  In a context requiring two array types to be compatible, they do not have compatible
23207  element types, or their size specifiers evaluate to unequal values (<a href="#6.7.5.2">6.7.5.2</a>).
23208 <li>  A declaration of an array parameter includes the keyword static within the [ and
23209  ] and the corresponding argument does not provide access to the first element of an
23210  array with at least the specified number of elements (<a href="#6.7.5.3">6.7.5.3</a>).
23211 <li>  A storage-class specifier or type qualifier modifies the keyword void as a function
23212  parameter type list (<a href="#6.7.5.3">6.7.5.3</a>).
23213 <li>  In a context requiring two function types to be compatible, they do not have
23214   compatible return types, or their parameters disagree in use of the ellipsis terminator
23215   or the number and type of parameters (after default argument promotion, when there
23216    is no parameter type list or when one type is specified by a function definition with an
23217 <!--page 509 indent 0-->
23218   identifier list) (<a href="#6.7.5.3">6.7.5.3</a>).
23219 <li>  The value of an unnamed member of a structure or union is used (<a href="#6.7.8">6.7.8</a>).
23220 <li>  The initializer for a scalar is neither a single expression nor a single expression
23221  enclosed in braces (<a href="#6.7.8">6.7.8</a>).
23222 <li>  The initializer for a structure or union object that has automatic storage duration is
23223  neither an initializer list nor a single expression that has compatible structure or union
23224  type (<a href="#6.7.8">6.7.8</a>).
23225 <li>  The initializer for an aggregate or union, other than an array initialized by a string
23226  literal, is not a brace-enclosed list of initializers for its elements or members (<a href="#6.7.8">6.7.8</a>).
23227 <li>  An identifier with external linkage is used, but in the program there does not exist
23228  exactly one external definition for the identifier, or the identifier is not used and there
23229  exist multiple external definitions for the identifier (<a href="#6.9">6.9</a>).
23230 <li>  A function definition includes an identifier list, but the types of the parameters are not
23231  declared in a following declaration list (<a href="#6.9.1">6.9.1</a>).
23232 <li>  An adjusted parameter type in a function definition is not an object type (<a href="#6.9.1">6.9.1</a>).
23233 <li>  A function that accepts a variable number of arguments is defined without a
23234  parameter type list that ends with the ellipsis notation (<a href="#6.9.1">6.9.1</a>).
23235 <li>  The } that terminates a function is reached, and the value of the function call is used
23236  by the caller (<a href="#6.9.1">6.9.1</a>).
23237 <li>  An identifier for an object with internal linkage and an incomplete type is declared
23238  with a tentative definition (<a href="#6.9.2">6.9.2</a>).
23239 <li>  The token defined is generated during the expansion of a #if or #elif
23240  preprocessing directive, or the use of the defined unary operator does not match
23241  one of the two specified forms prior to macro replacement (<a href="#6.10.1">6.10.1</a>).
23242 <li>  The #include preprocessing directive that results after expansion does not match
23243  one of the two header name forms (<a href="#6.10.2">6.10.2</a>).
23244 <li>  The character sequence in an #include preprocessing directive does not start with a
23245  letter (<a href="#6.10.2">6.10.2</a>).
23246 <li>  There are sequences of preprocessing tokens within the list of macro arguments that
23247  would otherwise act as preprocessing directives (<a href="#6.10.3">6.10.3</a>).
23248 <li>  The result of the preprocessing operator # is not a valid character string literal
23249  (<a href="#6.10.3.2">6.10.3.2</a>).
23250 <li>  The result of the preprocessing operator ## is not a valid preprocessing token
23251  (<a href="#6.10.3.3">6.10.3.3</a>).
23252 <!--page 510 indent 0-->
23253 <li>  The #line preprocessing directive that results after expansion does not match one of
23254  the two well-defined forms, or its digit sequence specifies zero or a number greater
23255  than 2147483647 (<a href="#6.10.4">6.10.4</a>).
23256 <li>  A non-STDC #pragma preprocessing directive that is documented as causing
23257  translation failure or some other form of undefined behavior is encountered (<a href="#6.10.6">6.10.6</a>).
23258 <li>  A #pragma STDC preprocessing directive does not match one of the well-defined
23259  forms (<a href="#6.10.6">6.10.6</a>).
23260 <li>  The name of a predefined macro, or the identifier defined, is the subject of a
23261  #define or #undef preprocessing directive (<a href="#6.10.8">6.10.8</a>).
23262 <li>  An attempt is made to copy an object to an overlapping object by use of a library
23263  function, other than as explicitly allowed (e.g., memmove) (clause 7).
23264 <li>  A file with the same name as one of the standard headers, not provided as part of the
23265  implementation, is placed in any of the standard places that are searched for included
23266  source files (<a href="#7.1.2">7.1.2</a>).
23267 <li>  A header is included within an external declaration or definition (<a href="#7.1.2">7.1.2</a>).
23268 <li>  A function, object, type, or macro that is specified as being declared or defined by
23269  some standard header is used before any header that declares or defines it is included
23270  (<a href="#7.1.2">7.1.2</a>).
23271 <li>  A standard header is included while a macro is defined with the same name as a
23272  keyword (<a href="#7.1.2">7.1.2</a>).
23273 <li>  The program attempts to declare a library function itself, rather than via a standard
23274  header, but the declaration does not have external linkage (<a href="#7.1.2">7.1.2</a>).
23275 <li>  The program declares or defines a reserved identifier, other than as allowed by <a href="#7.1.4">7.1.4</a>
23276  (<a href="#7.1.3">7.1.3</a>).
23277 <li>  The program removes the definition of a macro whose name begins with an
23278  underscore and either an uppercase letter or another underscore (<a href="#7.1.3">7.1.3</a>).
23279 <li>  An argument to a library function has an invalid value or a type not expected by a
23280  function with variable number of arguments (<a href="#7.1.4">7.1.4</a>).
23281 <li>  The pointer passed to a library function array parameter does not have a value such
23282  that all address computations and object accesses are valid (<a href="#7.1.4">7.1.4</a>).
23283 <li>  The macro definition of assert is suppressed in order to access an actual function
23284  (<a href="#7.2">7.2</a>).
23285 <li>  The argument to the assert macro does not have a scalar type (<a href="#7.2">7.2</a>).
23286 <li>  The CX_LIMITED_RANGE, FENV_ACCESS, or FP_CONTRACT pragma is used in
23287  any context other than outside all external declarations or preceding all explicit
23288 <!--page 511 indent 0-->
23289   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>).
23290 <li>  The value of an argument to a character handling function is neither equal to the value
23291  of EOF nor representable as an unsigned char (<a href="#7.4">7.4</a>).
23292 <li>  A macro definition of errno is suppressed in order to access an actual object, or the
23293  program defines an identifier with the name errno (<a href="#7.5">7.5</a>).
23294 <li>  Part of the program tests floating-point status flags, sets floating-point control modes,
23295  or runs under non-default mode settings, but was translated with the state for the
23296  FENV_ACCESS pragma ''off'' (<a href="#7.6.1">7.6.1</a>).
23297 <li>  The exception-mask argument for one of the functions that provide access to the
23298  floating-point status flags has a nonzero value not obtained by bitwise OR of the
23299  floating-point exception macros (<a href="#7.6.2">7.6.2</a>).
23300 <li>  The fesetexceptflag function is used to set floating-point status flags that were
23301  not specified in the call to the fegetexceptflag function that provided the value
23302  of the corresponding fexcept_t object (<a href="#7.6.2.4">7.6.2.4</a>).
23303 <li>  The argument to fesetenv or feupdateenv is neither an object set by a call to
23304  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>).
23305 <li>  The value of the result of an integer arithmetic or conversion function cannot be
23306  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.20.6.1">7.20.6.1</a>, <a href="#7.20.6.2">7.20.6.2</a>, <a href="#7.20.1">7.20.1</a>).
23307 <li>  The program modifies the string pointed to by the value returned by the setlocale
23308  function (<a href="#7.11.1.1">7.11.1.1</a>).
23309 <li>  The program modifies the structure pointed to by the value returned by the
23310  localeconv function (<a href="#7.11.2.1">7.11.2.1</a>).
23311 <li>  A macro definition of math_errhandling is suppressed or the program defines
23312  an identifier with the name math_errhandling (<a href="#7.12">7.12</a>).
23313 <li>  An argument to a floating-point classification or comparison macro is not of real
23314  floating type (<a href="#7.12.3">7.12.3</a>, <a href="#7.12.14">7.12.14</a>).
23315 <li>  A macro definition of setjmp is suppressed in order to access an actual function, or
23316  the program defines an external identifier with the name setjmp (<a href="#7.13">7.13</a>).
23317 <li>  An invocation of the setjmp macro occurs other than in an allowed context
23318  (<a href="#7.13.2.1">7.13.2.1</a>).
23319 <li>  The longjmp function is invoked to restore a nonexistent environment (<a href="#7.13.2.1">7.13.2.1</a>).
23320 <li>  After a longjmp, there is an attempt to access the value of an object of automatic
23321  storage class with non-volatile-qualified type, local to the function containing the
23322  invocation of the corresponding setjmp macro, that was changed between the
23323  setjmp invocation and longjmp call (<a href="#7.13.2.1">7.13.2.1</a>).
23324 <!--page 512 indent 0-->
23325 <li>  The program specifies an invalid pointer to a signal handler function (<a href="#7.14.1.1">7.14.1.1</a>).
23326 <li>  A signal handler returns when the signal corresponded to a computational exception
23327  (<a href="#7.14.1.1">7.14.1.1</a>).
23328 <li>  A signal occurs as the result of calling the abort or raise function, and the signal
23329  handler calls the raise function (<a href="#7.14.1.1">7.14.1.1</a>).
23330 <li>  A signal occurs other than as the result of calling the abort or raise function, and
23331  the signal handler refers to an object with static storage duration other than by
23332  assigning a value to an object declared as volatile sig_atomic_t, or calls any
23333  function in the standard library other than the abort function, the _Exit function,
23334  or the signal function (for the same signal number) (<a href="#7.14.1.1">7.14.1.1</a>).
23335 <li>  The value of errno is referred to after a signal occurred other than as the result of
23336  calling the abort or raise function and the corresponding signal handler obtained
23337  a SIG_ERR return from a call to the signal function (<a href="#7.14.1.1">7.14.1.1</a>).
23338 <li>  A signal is generated by an asynchronous signal handler (<a href="#7.14.1.1">7.14.1.1</a>).
23339 <li>  A function with a variable number of arguments attempts to access its varying
23340  arguments other than through a properly declared and initialized va_list object, or
23341  before the va_start macro is invoked (<a href="#7.15">7.15</a>, <a href="#7.15.1.1">7.15.1.1</a>, <a href="#7.15.1.4">7.15.1.4</a>).
23342 <li>  The macro va_arg is invoked using the parameter ap that was passed to a function
23343  that invoked the macro va_arg with the same parameter (<a href="#7.15">7.15</a>).
23344 <li>  A macro definition of va_start, va_arg, va_copy, or va_end is suppressed in
23345  order to access an actual function, or the program defines an external identifier with
23346  the name va_copy or va_end (<a href="#7.15.1">7.15.1</a>).
23347 <li>  The va_start or va_copy macro is invoked without a corresponding invocation
23348  of the va_end macro in the same function, or vice versa (<a href="#7.15.1">7.15.1</a>, <a href="#7.15.1.2">7.15.1.2</a>, <a href="#7.15.1.3">7.15.1.3</a>,
23349  <a href="#7.15.1.4">7.15.1.4</a>).
23350 <li>  The type parameter to the va_arg macro is not such that a pointer to an object of
23351  that type can be obtained simply by postfixing a * (<a href="#7.15.1.1">7.15.1.1</a>).
23352 <li>  The va_arg macro is invoked when there is no actual next argument, or with a
23353  specified type that is not compatible with the promoted type of the actual next
23354  argument, with certain exceptions (<a href="#7.15.1.1">7.15.1.1</a>).
23355 <li>  The va_copy or va_start macro is called to initialize a va_list that was
23356  previously initialized by either macro without an intervening invocation of the
23357  va_end macro for the same va_list (<a href="#7.15.1.2">7.15.1.2</a>, <a href="#7.15.1.4">7.15.1.4</a>).
23358 <li>  The parameter parmN of a va_start macro is declared with the register
23359  storage class, with a function or array type, or with a type that is not compatible with
23360  the type that results after application of the default argument promotions (<a href="#7.15.1.4">7.15.1.4</a>).
23361 <!--page 513 indent 0-->
23362 <li>  The member designator parameter of an offsetof macro is an invalid right
23363  operand of the . operator for the type parameter, or designates a bit-field (<a href="#7.17">7.17</a>).
23364 <li>  The argument in an instance of one of the integer-constant macros is not a decimal,
23365  octal, or hexadecimal constant, or it has a value that exceeds the limits for the
23366  corresponding type (<a href="#7.18.4">7.18.4</a>).
23367 <li>  A byte input/output function is applied to a wide-oriented stream, or a wide character
23368  input/output function is applied to a byte-oriented stream (<a href="#7.19.2">7.19.2</a>).
23369 <li>  Use is made of any portion of a file beyond the most recent wide character written to
23370  a wide-oriented stream (<a href="#7.19.2">7.19.2</a>).
23371 <li>  The value of a pointer to a FILE object is used after the associated file is closed
23372  (<a href="#7.19.3">7.19.3</a>).
23373 <li>  The stream for the fflush function points to an input stream or to an update stream
23374  in which the most recent operation was input (<a href="#7.19.5.2">7.19.5.2</a>).
23375 <li>  The string pointed to by the mode argument in a call to the fopen function does not
23376  exactly match one of the specified character sequences (<a href="#7.19.5.3">7.19.5.3</a>).
23377 <li>  An output operation on an update stream is followed by an input operation without an
23378  intervening call to the fflush function or a file positioning function, or an input
23379  operation on an update stream is followed by an output operation with an intervening
23380  call to a file positioning function (<a href="#7.19.5.3">7.19.5.3</a>).
23381 <li>  An attempt is made to use the contents of the array that was supplied in a call to the
23382  setvbuf function (<a href="#7.19.5.6">7.19.5.6</a>).
23383 <li>  There are insufficient arguments for the format in a call to one of the formatted
23384  input/output functions, or an argument does not have an appropriate type (<a href="#7.19.6.1">7.19.6.1</a>,
23385  <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23386 <li>  The format in a call to one of the formatted input/output functions or to the
23387  strftime or wcsftime function is not a valid multibyte character sequence that
23388  begins and ends in its initial shift state (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.23.3.5">7.23.3.5</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>,
23389  <a href="#7.24.5.1">7.24.5.1</a>).
23390 <li>  In a call to one of the formatted output functions, a precision appears with a
23391  conversion specifier other than those described (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>).
23392 <li>  A conversion specification for a formatted output function uses an asterisk to denote
23393  an argument-supplied field width or precision, but the corresponding argument is not
23394  provided (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>).
23395 <li>  A conversion specification for a formatted output function uses a # or 0 flag with a
23396  conversion specifier other than those described (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>).
23397 <!--page 514 indent 0-->
23398 <li>  A conversion specification for one of the formatted input/output functions uses a
23399  length modifier with a conversion specifier other than those described (<a href="#7.19.6.1">7.19.6.1</a>,
23400  <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23401 <li>  An s conversion specifier is encountered by one of the formatted output functions,
23402  and the argument is missing the null terminator (unless a precision is specified that
23403  does not require null termination) (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>).
23404 <li>  An n conversion specification for one of the formatted input/output functions includes
23405  any flags, an assignment-suppressing character, a field width, or a precision (<a href="#7.19.6.1">7.19.6.1</a>,
23406  <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23407 <li>  A % conversion specifier is encountered by one of the formatted input/output
23408  functions, but the complete conversion specification is not exactly %% (<a href="#7.19.6.1">7.19.6.1</a>,
23409  <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23410 <li>  An invalid conversion specification is found in the format for one of the formatted
23411  input/output functions, or the strftime or wcsftime function (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>,
23412  <a href="#7.23.3.5">7.23.3.5</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>, <a href="#7.24.5.1">7.24.5.1</a>).
23413 <li>  The number of characters transmitted by a formatted output function is greater than
23414  INT_MAX (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.3">7.19.6.3</a>, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.10">7.19.6.10</a>).
23415 <li>  The result of a conversion by one of the formatted input functions cannot be
23416  represented in the corresponding object, or the receiving object does not have an
23417  appropriate type (<a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23418 <li>  A c, s, or [ conversion specifier is encountered by one of the formatted input
23419  functions, and the array pointed to by the corresponding argument is not large enough
23420  to accept the input sequence (and a null terminator if the conversion specifier is s or
23421  [) (<a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23422 <li>  A c, s, or [ conversion specifier with an l qualifier is encountered by one of the
23423  formatted input functions, but the input is not a valid multibyte character sequence
23424  that begins in the initial shift state (<a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23425 <li>  The input item for a %p conversion by one of the formatted input functions is not a
23426  value converted earlier during the same program execution (<a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23427 <li>  The vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf,
23428  vsscanf, vfwprintf, vfwscanf, vswprintf, vswscanf, vwprintf, or
23429  vwscanf function is called with an improperly initialized va_list argument, or
23430  the argument is used (other than in an invocation of va_end) after the function
23431  returns (<a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.9">7.19.6.9</a>, <a href="#7.19.6.10">7.19.6.10</a>, <a href="#7.19.6.11">7.19.6.11</a>, <a href="#7.19.6.12">7.19.6.12</a>, <a href="#7.19.6.13">7.19.6.13</a>, <a href="#7.19.6.14">7.19.6.14</a>,
23432  <a href="#7.24.2.5">7.24.2.5</a>, <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.2.7">7.24.2.7</a>, <a href="#7.24.2.8">7.24.2.8</a>, <a href="#7.24.2.9">7.24.2.9</a>, <a href="#7.24.2.10">7.24.2.10</a>).
23433 <li>  The contents of the array supplied in a call to the fgets, gets, or fgetws function
23434  are used after a read error occurred (<a href="#7.19.7.2">7.19.7.2</a>, <a href="#7.19.7.7">7.19.7.7</a>, <a href="#7.24.3.2">7.24.3.2</a>).
23435 <!--page 515 indent 0-->
23436 <li>  The file position indicator for a binary stream is used after a call to the ungetc
23437  function where its value was zero before the call (<a href="#7.19.7.11">7.19.7.11</a>).
23438 <li>  The file position indicator for a stream is used after an error occurred during a call to
23439  the fread or fwrite function (<a href="#7.19.8.1">7.19.8.1</a>, <a href="#7.19.8.2">7.19.8.2</a>).
23440 <li>  A partial element read by a call to the fread function is used (<a href="#7.19.8.1">7.19.8.1</a>).
23441 <li>  The fseek function is called for a text stream with a nonzero offset and either the
23442  offset was not returned by a previous successful call to the ftell function on a
23443  stream associated with the same file or whence is not SEEK_SET (<a href="#7.19.9.2">7.19.9.2</a>).
23444 <li>  The fsetpos function is called to set a position that was not returned by a previous
23445  successful call to the fgetpos function on a stream associated with the same file
23446  (<a href="#7.19.9.3">7.19.9.3</a>).
23447 <li>  A non-null pointer returned by a call to the calloc, malloc, or realloc function
23448  with a zero requested size is used to access an object (<a href="#7.20.3">7.20.3</a>).
23449 <li>  The value of a pointer that refers to space deallocated by a call to the free or
23450  realloc function is used (<a href="#7.20.3">7.20.3</a>).
23451 <li>  The pointer argument to the free or realloc function does not match a pointer
23452  earlier returned by calloc, malloc, or realloc, or the space has been
23453  deallocated by a call to free or realloc (<a href="#7.20.3.2">7.20.3.2</a>, <a href="#7.20.3.4">7.20.3.4</a>).
23454 <li>  The value of the object allocated by the malloc function is used (<a href="#7.20.3.3">7.20.3.3</a>).
23455 <li>  The value of any bytes in a new object allocated by the realloc function beyond
23456  the size of the old object are used (<a href="#7.20.3.4">7.20.3.4</a>).
23457 <li>  The program executes more than one call to the exit function (<a href="#7.20.4.3">7.20.4.3</a>).
23458 <li>  During the call to a function registered with the atexit function, a call is made to
23459  the longjmp function that would terminate the call to the registered function
23460  (<a href="#7.20.4.3">7.20.4.3</a>).
23461 <li>  The string set up by the getenv or strerror function is modified by the program
23462  (<a href="#7.20.4.5">7.20.4.5</a>, <a href="#7.21.6.2">7.21.6.2</a>).
23463 <li>  A command is executed through the system function in a way that is documented as
23464  causing termination or some other form of undefined behavior (<a href="#7.20.4.6">7.20.4.6</a>).
23465 <li>  A searching or sorting utility function is called with an invalid pointer argument, even
23466  if the number of elements is zero (<a href="#7.20.5">7.20.5</a>).
23467 <li>  The comparison function called by a searching or sorting utility function alters the
23468  contents of the array being searched or sorted, or returns ordering values
23469  inconsistently (<a href="#7.20.5">7.20.5</a>).
23470 <!--page 516 indent 0-->
23471 <li>  The array being searched by the bsearch function does not have its elements in
23472  proper order (<a href="#7.20.5.1">7.20.5.1</a>).
23473 <li>  The current conversion state is used by a multibyte/wide character conversion
23474  function after changing the LC_CTYPE category (<a href="#7.20.7">7.20.7</a>).
23475 <li>  A string or wide string utility function is instructed to access an array beyond the end
23476  of an object (<a href="#7.21.1">7.21.1</a>, <a href="#7.24.4">7.24.4</a>).
23477 <li>  A string or wide string utility function is called with an invalid pointer argument, even
23478  if the length is zero (<a href="#7.21.1">7.21.1</a>, <a href="#7.24.4">7.24.4</a>).
23479 <li>  The contents of the destination array are used after a call to the strxfrm,
23480  strftime, wcsxfrm, or wcsftime function in which the specified length was
23481  too small to hold the entire null-terminated result (<a href="#7.21.4.5">7.21.4.5</a>, <a href="#7.23.3.5">7.23.3.5</a>, <a href="#7.24.4.4.4">7.24.4.4.4</a>,
23482  <a href="#7.24.5.1">7.24.5.1</a>).
23483 <li>  The first argument in the very first call to the strtok or wcstok is a null pointer
23484  (<a href="#7.21.5.8">7.21.5.8</a>, <a href="#7.24.4.5.7">7.24.4.5.7</a>).
23485 <li>  The type of an argument to a type-generic macro is not compatible with the type of
23486  the corresponding parameter of the selected function (<a href="#7.22">7.22</a>).
23487 <li>  A complex argument is supplied for a generic parameter of a type-generic macro that
23488  has no corresponding complex function (<a href="#7.22">7.22</a>).
23489 <li>  The argument corresponding to an s specifier without an l qualifier in a call to the
23490  fwprintf function does not point to a valid multibyte character sequence that
23491  begins in the initial shift state (<a href="#7.24.2.11">7.24.2.11</a>).
23492 <li>  In a call to the wcstok function, the object pointed to by ptr does not have the
23493  value stored by the previous call for the same wide string (<a href="#7.24.4.5.7">7.24.4.5.7</a>).
23494 <li>  An mbstate_t object is used inappropriately (<a href="#7.24.6">7.24.6</a>).
23495 <li>  The value of an argument of type wint_t to a wide character classification or case
23496  mapping function is neither equal to the value of WEOF nor representable as a
23497  wchar_t (<a href="#7.25.1">7.25.1</a>).
23498 <li>  The iswctype function is called using a different LC_CTYPE category from the
23499  one in effect for the call to the wctype function that returned the description
23500  (<a href="#7.25.2.2.1">7.25.2.2.1</a>).
23501 <li>  The towctrans function is called using a different LC_CTYPE category from the
23502  one in effect for the call to the wctrans function that returned the description
23503  (<a href="#7.25.3.2.1">7.25.3.2.1</a>).
23504 <!--page 517 indent 4-->
23505 </ul>
23506
23507 <a name="J.3" href="#J.3"><h3>J.3 Implementation-defined behavior</h3></a>
23508 <p><!--para 1-->
23509  A conforming implementation is required to document its choice of behavior in each of
23510  the areas listed in this subclause. The following are implementation-defined:
23511
23512 <a name="J.3.1" href="#J.3.1"><h4>J.3.1 Translation</h4></a>
23513 <p><!--para 1-->
23514 <ul>
23515 <li>  How a diagnostic is identified (<a href="#3.10">3.10</a>, <a href="#5.1.1.3">5.1.1.3</a>).
23516 <li>  Whether each nonempty sequence of white-space characters other than new-line is
23517  retained or replaced by one space character in translation phase 3 (<a href="#5.1.1.2">5.1.1.2</a>).
23518 </ul>
23519
23520 <a name="J.3.2" href="#J.3.2"><h4>J.3.2 Environment</h4></a>
23521 <p><!--para 1-->
23522 <ul>
23523 <li>  The mapping between physical source file multibyte characters and the source
23524  character set in translation phase 1 (<a href="#5.1.1.2">5.1.1.2</a>).
23525 <li>  The name and type of the function called at program startup in a freestanding
23526  environment (<a href="#5.1.2.1">5.1.2.1</a>).
23527 <li>  The effect of program termination in a freestanding environment (<a href="#5.1.2.1">5.1.2.1</a>).
23528 <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>).
23529 <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>).
23530 <li>  What constitutes an interactive device (<a href="#5.1.2.3">5.1.2.3</a>).
23531 <li>  The set of signals, their semantics, and their default handling (<a href="#7.14">7.14</a>).
23532 <li>  Signal values other than SIGFPE, SIGILL, and SIGSEGV that correspond to a
23533  computational exception (<a href="#7.14.1.1">7.14.1.1</a>).
23534 <li>  Signals for which the equivalent of signal(sig, SIG_IGN); is executed at
23535  program startup (<a href="#7.14.1.1">7.14.1.1</a>).
23536 <li>  The set of environment names and the method for altering the environment list used
23537  by the getenv function (<a href="#7.20.4.5">7.20.4.5</a>).
23538 <li>  The manner of execution of the string by the system function (<a href="#7.20.4.6">7.20.4.6</a>).
23539 </ul>
23540
23541 <a name="J.3.3" href="#J.3.3"><h4>J.3.3 Identifiers</h4></a>
23542 <p><!--para 1-->
23543 <ul>
23544 <li>  Which additional multibyte characters may appear in identifiers and their
23545  correspondence to universal character names (<a href="#6.4.2">6.4.2</a>).
23546 <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>).
23547 <!--page 518 indent 4-->
23548 </ul>
23549
23550 <a name="J.3.4" href="#J.3.4"><h4>J.3.4 Characters</h4></a>
23551 <p><!--para 1-->
23552 <ul>
23553 <li>  The number of bits in a byte (<a href="#3.6">3.6</a>).
23554 <li>  The values of the members of the execution character set (<a href="#5.2.1">5.2.1</a>).
23555 <li>  The unique value of the member of the execution character set produced for each of
23556  the standard alphabetic escape sequences (<a href="#5.2.2">5.2.2</a>).
23557 <li>  The value of a char object into which has been stored any character other than a
23558  member of the basic execution character set (<a href="#6.2.5">6.2.5</a>).
23559 <li>  Which of signed char or unsigned char has the same range, representation,
23560  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>).
23561 <li>  The mapping of members of the source character set (in character constants and string
23562  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>).
23563 <li>  The value of an integer character constant containing more than one character or
23564  containing a character or escape sequence that does not map to a single-byte
23565  execution character (<a href="#6.4.4.4">6.4.4.4</a>).
23566 <li>  The value of a wide character constant containing more than one multibyte character,
23567  or containing a multibyte character or escape sequence not represented in the
23568  extended execution character set (<a href="#6.4.4.4">6.4.4.4</a>).
23569 <li>  The current locale used to convert a wide character constant consisting of a single
23570  multibyte character that maps to a member of the extended execution character set
23571  into a corresponding wide character code (<a href="#6.4.4.4">6.4.4.4</a>).
23572 <li>  The current locale used to convert a wide string literal into corresponding wide
23573  character codes (<a href="#6.4.5">6.4.5</a>).
23574 <li>  The value of a string literal containing a multibyte character or escape sequence not
23575  represented in the execution character set (<a href="#6.4.5">6.4.5</a>).
23576 </ul>
23577
23578 <a name="J.3.5" href="#J.3.5"><h4>J.3.5 Integers</h4></a>
23579 <p><!--para 1-->
23580 <ul>
23581 <li>  Any extended integer types that exist in the implementation (<a href="#6.2.5">6.2.5</a>).
23582 <li>  Whether signed integer types are represented using sign and magnitude, two's
23583  complement, or ones' complement, and whether the extraordinary value is a trap
23584  representation or an ordinary value (<a href="#6.2.6.2">6.2.6.2</a>).
23585 <li>  The rank of any extended integer type relative to another extended integer type with
23586  the same precision (<a href="#6.3.1.1">6.3.1.1</a>).
23587 <li>  The result of, or the signal raised by, converting an integer to a signed integer type
23588  when the value cannot be represented in an object of that type (<a href="#6.3.1.3">6.3.1.3</a>).
23589 <!--page 519 indent 4-->
23590 <li>  The results of some bitwise operations on signed integers (<a href="#6.5">6.5</a>).
23591 </ul>
23592
23593 <a name="J.3.6" href="#J.3.6"><h4>J.3.6 Floating point</h4></a>
23594 <p><!--para 1-->
23595 <ul>
23596 <li>  The accuracy of the floating-point operations and of the library functions in
23597  <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>).
23598 <li>  The accuracy of the conversions between floating-point internal representations and
23599  string representations performed by the library functions in <a href="#7.19">&lt;stdio.h&gt;</a>,
23600  <a href="#7.20">&lt;stdlib.h&gt;</a>, and <a href="#7.24">&lt;wchar.h&gt;</a> (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
23601 <li>  The rounding behaviors characterized by non-standard values of FLT_ROUNDS
23602  (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
23603 <li>  The evaluation methods characterized by non-standard negative values of
23604  FLT_EVAL_METHOD (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
23605 <li>  The direction of rounding when an integer is converted to a floating-point number that
23606  cannot exactly represent the original value (<a href="#6.3.1.4">6.3.1.4</a>).
23607 <li>  The direction of rounding when a floating-point number is converted to a narrower
23608  floating-point number (<a href="#6.3.1.5">6.3.1.5</a>).
23609 <li>  How the nearest representable value or the larger or smaller representable value
23610  immediately adjacent to the nearest representable value is chosen for certain floating
23611  constants (<a href="#6.4.4.2">6.4.4.2</a>).
23612 <li>  Whether and how floating expressions are contracted when not disallowed by the
23613  FP_CONTRACT pragma (<a href="#6.5">6.5</a>).
23614 <li>  The default state for the FENV_ACCESS pragma (<a href="#7.6.1">7.6.1</a>).
23615 <li>  Additional floating-point exceptions, rounding             modes,    environments,   and
23616  classifications, and their macro names (<a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>).
23617 <li>  The default state for the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>).                                    *
23618 </ul>
23619
23620 <a name="J.3.7" href="#J.3.7"><h4>J.3.7 Arrays and pointers</h4></a>
23621 <p><!--para 1-->
23622 <ul>
23623 <li>  The result of converting a pointer to an integer or vice versa (<a href="#6.3.2.3">6.3.2.3</a>).
23624 <li>  The size of the result of subtracting two pointers to elements of the same array
23625  (<a href="#6.5.6">6.5.6</a>).
23626 <!--page 520 indent 4-->
23627 </ul>
23628
23629 <a name="J.3.8" href="#J.3.8"><h4>J.3.8 Hints</h4></a>
23630 <p><!--para 1-->
23631 <ul>
23632 <li>  The extent to which suggestions made by using the register storage-class
23633  specifier are effective (<a href="#6.7.1">6.7.1</a>).
23634 <li>  The extent to which suggestions made by using the inline function specifier are
23635  effective (<a href="#6.7.4">6.7.4</a>).
23636 </ul>
23637
23638 <a name="J.3.9" href="#J.3.9"><h4>J.3.9 Structures, unions, enumerations, and bit-fields</h4></a>
23639 <p><!--para 1-->
23640 <ul>
23641 <li>  Whether a ''plain'' int bit-field is treated as a signed int bit-field or as an
23642  unsigned int bit-field (<a href="#6.7.2">6.7.2</a>, <a href="#6.7.2.1">6.7.2.1</a>).
23643 <li>  Allowable bit-field types other than _Bool, signed int, and unsigned int
23644  (<a href="#6.7.2.1">6.7.2.1</a>).
23645 <li>  Whether a bit-field can straddle a storage-unit boundary (<a href="#6.7.2.1">6.7.2.1</a>).
23646 <li>  The order of allocation of bit-fields within a unit (<a href="#6.7.2.1">6.7.2.1</a>).
23647 <li>  The alignment of non-bit-field members of structures (<a href="#6.7.2.1">6.7.2.1</a>). This should present
23648  no problem unless binary data written by one implementation is read by another.
23649 <li>  The integer type compatible with each enumerated type (<a href="#6.7.2.2">6.7.2.2</a>).
23650 </ul>
23651
23652 <a name="J.3.10" href="#J.3.10"><h4>J.3.10 Qualifiers</h4></a>
23653 <p><!--para 1-->
23654 <ul>
23655 <li>  What constitutes an access to an object that has volatile-qualified type (<a href="#6.7.3">6.7.3</a>).
23656 </ul>
23657
23658 <a name="J.3.11" href="#J.3.11"><h4>J.3.11 Preprocessing directives</h4></a>
23659 <p><!--para 1-->
23660 <ul>
23661 <li>  The locations within #pragma directives where header name preprocessing tokens
23662  are recognized (<a href="#6.4">6.4</a>, <a href="#6.4.7">6.4.7</a>).
23663 <li>  How sequences in both forms of header names are mapped to headers or external
23664  source file names (<a href="#6.4.7">6.4.7</a>).
23665 <li>  Whether the value of a character constant in a constant expression that controls
23666  conditional inclusion matches the value of the same character constant in the
23667  execution character set (<a href="#6.10.1">6.10.1</a>).
23668 <li>  Whether the value of a single-character character constant in a constant expression
23669  that controls conditional inclusion may have a negative value (<a href="#6.10.1">6.10.1</a>).
23670 <li>  The places that are searched for an included &lt; &gt; delimited header, and how the places
23671  are specified or the header is identified (<a href="#6.10.2">6.10.2</a>).
23672 <li>  How the named source file is searched for in an included " " delimited header
23673  (<a href="#6.10.2">6.10.2</a>).
23674 <li>  The method by which preprocessing tokens (possibly resulting from macro
23675  expansion) in a #include directive are combined into a header name (<a href="#6.10.2">6.10.2</a>).
23676 <!--page 521 indent 4-->
23677 <li>  The nesting limit for #include processing (<a href="#6.10.2">6.10.2</a>).
23678 <li>  Whether the # operator inserts a \ character before the \ character that begins a
23679  universal character name in a character constant or string literal (<a href="#6.10.3.2">6.10.3.2</a>).
23680 <li>  The behavior on each recognized non-STDC #pragma directive (<a href="#6.10.6">6.10.6</a>).
23681 <li>  The definitions for __DATE__ and __TIME__ when respectively, the date and
23682  time of translation are not available (<a href="#6.10.8">6.10.8</a>).
23683 </ul>
23684
23685 <a name="J.3.12" href="#J.3.12"><h4>J.3.12 Library functions</h4></a>
23686 <p><!--para 1-->
23687 <ul>
23688 <li>  Any library facilities available to a freestanding program, other than the minimal set
23689  required by clause 4 (<a href="#5.1.2.1">5.1.2.1</a>).
23690 <li>  The format of the diagnostic printed by the assert macro (<a href="#7.2.1.1">7.2.1.1</a>).
23691 <li>  The representation of the floating-point               status   flags     stored   by   the
23692  fegetexceptflag function (<a href="#7.6.2.2">7.6.2.2</a>).
23693 <li>  Whether the feraiseexcept function raises the ''inexact'' floating-point
23694  exception in addition to the ''overflow'' or ''underflow'' floating-point exception
23695  (<a href="#7.6.2.3">7.6.2.3</a>).
23696 <li>  Strings other than "C" and "" that may be passed as the second argument to the
23697  setlocale function (<a href="#7.11.1.1">7.11.1.1</a>).
23698 <li>  The types defined for float_t and double_t when the value of the
23699  FLT_EVAL_METHOD macro is less than 0 (<a href="#7.12">7.12</a>).
23700 <li>  Domain errors for the mathematics functions, other than those required by this
23701  International Standard (<a href="#7.12.1">7.12.1</a>).
23702 <li>  The values returned by the mathematics functions on domain errors (<a href="#7.12.1">7.12.1</a>).
23703 <li>  The values returned by the mathematics functions on underflow range errors, whether
23704  errno is set to the value of the macro ERANGE when the integer expression
23705  math_errhandling &amp; MATH_ERRNO is nonzero, and whether the ''underflow''
23706  floating-point exception is raised when the integer expression math_errhandling
23707  &amp; MATH_ERREXCEPT is nonzero. (<a href="#7.12.1">7.12.1</a>).
23708 <li>  Whether a domain error occurs or zero is returned when an fmod function has a
23709  second argument of zero (<a href="#7.12.10.1">7.12.10.1</a>).
23710 <li>  Whether a domain error occurs or zero is returned when a remainder function has
23711  a second argument of zero (<a href="#7.12.10.2">7.12.10.2</a>).
23712 <li>  The base-2 logarithm of the modulus used by the remquo functions in reducing the
23713  quotient (<a href="#7.12.10.3">7.12.10.3</a>).
23714 <!--page 522 indent 0-->
23715 <li>  Whether a domain error occurs or zero is returned when a remquo function has a
23716  second argument of zero (<a href="#7.12.10.3">7.12.10.3</a>).
23717 <li>  Whether the equivalent of signal(sig, SIG_DFL); is executed prior to the call
23718  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>).
23719 <li>  The null pointer constant to which the macro NULL expands (<a href="#7.17">7.17</a>).
23720 <li>  Whether the last line of a text stream requires a terminating new-line character
23721  (<a href="#7.19.2">7.19.2</a>).
23722 <li>  Whether space characters that are written out to a text stream immediately before a
23723  new-line character appear when read in (<a href="#7.19.2">7.19.2</a>).
23724 <li>  The number of null characters that may be appended to data written to a binary
23725  stream (<a href="#7.19.2">7.19.2</a>).
23726 <li>  Whether the file position indicator of an append-mode stream is initially positioned at
23727  the beginning or end of the file (<a href="#7.19.3">7.19.3</a>).
23728 <li>  Whether a write on a text stream causes the associated file to be truncated beyond that
23729  point (<a href="#7.19.3">7.19.3</a>).
23730 <li>  The characteristics of file buffering (<a href="#7.19.3">7.19.3</a>).
23731 <li>  Whether a zero-length file actually exists (<a href="#7.19.3">7.19.3</a>).
23732 <li>  The rules for composing valid file names (<a href="#7.19.3">7.19.3</a>).
23733 <li>  Whether the same file can be simultaneously open multiple times (<a href="#7.19.3">7.19.3</a>).
23734 <li>  The nature and choice of encodings used for multibyte characters in files (<a href="#7.19.3">7.19.3</a>).
23735 <li>  The effect of the remove function on an open file (<a href="#7.19.4.1">7.19.4.1</a>).
23736 <li>  The effect if a file with the new name exists prior to a call to the rename function
23737  (<a href="#7.19.4.2">7.19.4.2</a>).
23738 <li>  Whether an open temporary file is removed upon abnormal program termination
23739  (<a href="#7.19.4.3">7.19.4.3</a>).
23740 <li>  Which changes of mode are permitted (if any), and under what circumstances
23741  (<a href="#7.19.5.4">7.19.5.4</a>).
23742 <li>  The style used to print an infinity or NaN, and the meaning of any n-char or n-wchar
23743  sequence printed for a NaN (<a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>).
23744 <li>  The output for %p conversion in the fprintf or fwprintf function (<a href="#7.19.6.1">7.19.6.1</a>,
23745  <a href="#7.24.2.1">7.24.2.1</a>).
23746 <li>  The interpretation of a - character that is neither the first nor the last character, nor
23747    the second where a ^ character is the first, in the scanlist for %[ conversion in the
23748   fscanf or fwscanf function (<a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>).
23749 <!--page 523 indent 4-->
23750 <li>  The set of sequences matched by a %p conversion and the interpretation of the
23751  corresponding input item in the fscanf or fwscanf function (<a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>).
23752 <li>  The value to which the macro errno is set by the fgetpos, fsetpos, or ftell
23753  functions on failure (<a href="#7.19.9.1">7.19.9.1</a>, <a href="#7.19.9.3">7.19.9.3</a>, <a href="#7.19.9.4">7.19.9.4</a>).
23754 <li>  The meaning of any n-char or n-wchar sequence in a string representing a NaN that is
23755  converted by the strtod, strtof, strtold, wcstod, wcstof, or wcstold
23756  function (<a href="#7.20.1.3">7.20.1.3</a>, <a href="#7.24.4.1.1">7.24.4.1.1</a>).
23757 <li>  Whether or not the strtod, strtof, strtold, wcstod, wcstof, or wcstold
23758  function sets errno to ERANGE when underflow occurs (<a href="#7.20.1.3">7.20.1.3</a>, <a href="#7.24.4.1.1">7.24.4.1.1</a>).
23759 <li>  Whether the calloc, malloc, and realloc functions return a null pointer or a
23760  pointer to an allocated object when the size requested is zero (<a href="#7.20.3">7.20.3</a>).
23761 <li>  Whether open streams with unwritten buffered data are flushed, open streams are
23762  closed, or temporary files are removed when the abort or _Exit function is called
23763  (<a href="#7.20.4.1">7.20.4.1</a>, <a href="#7.20.4.4">7.20.4.4</a>).
23764 <li>  The termination status returned to the host environment by the abort, exit, or
23765  _Exit function (<a href="#7.20.4.1">7.20.4.1</a>, <a href="#7.20.4.3">7.20.4.3</a>, <a href="#7.20.4.4">7.20.4.4</a>).
23766 <li>  The value returned by the system function when its argument is not a null pointer
23767  (<a href="#7.20.4.6">7.20.4.6</a>).
23768 <li>  The local time zone and Daylight Saving Time (<a href="#7.23.1">7.23.1</a>).
23769 <li>  The range and precision of times representable in clock_t and time_t (<a href="#7.23">7.23</a>).
23770 <li>  The era for the clock function (<a href="#7.23.2.1">7.23.2.1</a>).
23771 <li>  The replacement string for the %Z specifier to the strftime, and wcsftime
23772  functions in the "C" locale (<a href="#7.23.3.5">7.23.3.5</a>, <a href="#7.24.5.1">7.24.5.1</a>).
23773 <li>  Whether the functions in <a href="#7.12">&lt;math.h&gt;</a> honor the rounding direction mode in an
23774  IEC 60559 conformant implementation, unless explicitly specified otherwise (<a href="#F.9">F.9</a>).
23775 </ul>
23776
23777 <a name="J.3.13" href="#J.3.13"><h4>J.3.13 Architecture</h4></a>
23778 <p><!--para 1-->
23779 <ul>
23780 <li>  The values or expressions assigned to the macros specified in the headers
23781  <a href="#7.7">&lt;float.h&gt;</a>, <a href="#7.10">&lt;limits.h&gt;</a>, and <a href="#7.18">&lt;stdint.h&gt;</a> (<a href="#5.2.4.2">5.2.4.2</a>, <a href="#7.18.2">7.18.2</a>, <a href="#7.18.3">7.18.3</a>).
23782 <li>  The number, order, and encoding of bytes in any object (when not explicitly specified
23783  in this International Standard) (<a href="#6.2.6.1">6.2.6.1</a>).
23784 <li>  The value of the result of the sizeof operator (<a href="#6.5.3.4">6.5.3.4</a>).
23785 <!--page 524 indent 4-->
23786 </ul>
23787
23788 <a name="J.4" href="#J.4"><h3>J.4 Locale-specific behavior</h3></a>
23789 <p><!--para 1-->
23790  The following characteristics of a hosted environment are locale-specific and are required
23791  to be documented by the implementation:
23792 <ul>
23793 <li>  Additional members of the source and execution character sets beyond the basic
23794  character set (<a href="#5.2.1">5.2.1</a>).
23795 <li>  The presence, meaning, and representation of additional multibyte characters in the
23796  execution character set beyond the basic character set (<a href="#5.2.1.2">5.2.1.2</a>).
23797 <li>  The shift states used for the encoding of multibyte characters (<a href="#5.2.1.2">5.2.1.2</a>).
23798 <li>  The direction of writing of successive printing characters (<a href="#5.2.2">5.2.2</a>).
23799 <li>  The decimal-point character (<a href="#7.1.1">7.1.1</a>).
23800 <li>  The set of printing characters (<a href="#7.4">7.4</a>, <a href="#7.25.2">7.25.2</a>).
23801 <li>  The set of control characters (<a href="#7.4">7.4</a>, <a href="#7.25.2">7.25.2</a>).
23802 <li>  The sets of characters tested for by the isalpha, isblank, islower, ispunct,
23803  isspace, isupper, iswalpha, iswblank, iswlower, iswpunct,
23804  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>,
23805  <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.25.2.1.2">7.25.2.1.2</a>, <a href="#7.25.2.1.3">7.25.2.1.3</a>, <a href="#7.25.2.1.7">7.25.2.1.7</a>, <a href="#7.25.2.1.9">7.25.2.1.9</a>, <a href="#7.25.2.1.10">7.25.2.1.10</a>, <a href="#7.25.2.1.11">7.25.2.1.11</a>).
23806 <li>  The native environment (<a href="#7.11.1.1">7.11.1.1</a>).
23807 <li>  Additional subject sequences accepted by the numeric conversion functions (<a href="#7.20.1">7.20.1</a>,
23808  <a href="#7.24.4.1">7.24.4.1</a>).
23809 <li>  The collation sequence of the execution character set (<a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.24.4.4.2">7.24.4.4.2</a>).
23810 <li>  The contents of the error message strings set up by the strerror function
23811  (<a href="#7.21.6.2">7.21.6.2</a>).
23812 <li>  The formats for time and date (<a href="#7.23.3.5">7.23.3.5</a>, <a href="#7.24.5.1">7.24.5.1</a>).
23813 <li>  Character mappings that are supported by the towctrans function (<a href="#7.25.1">7.25.1</a>).
23814 <li>  Character classifications that are supported by the iswctype function (<a href="#7.25.1">7.25.1</a>).
23815 <!--page 525 indent 4-->
23816 </ul>
23817
23818 <a name="J.5" href="#J.5"><h3>J.5 Common extensions</h3></a>
23819 <p><!--para 1-->
23820  The following extensions are widely used in many systems, but are not portable to all
23821  implementations. The inclusion of any extension that may cause a strictly conforming
23822  program to become invalid renders an implementation nonconforming. Examples of such
23823  extensions are new keywords, extra library functions declared in standard headers, or
23824  predefined macros with names that do not begin with an underscore.
23825
23826 <a name="J.5.1" href="#J.5.1"><h4>J.5.1 Environment arguments</h4></a>
23827 <p><!--para 1-->
23828  In a hosted environment, the main function receives a third argument, char *envp[],
23829  that points to a null-terminated array of pointers to char, each of which points to a string
23830  that provides information about the environment for this execution of the program
23831  (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
23832
23833 <a name="J.5.2" href="#J.5.2"><h4>J.5.2 Specialized identifiers</h4></a>
23834 <p><!--para 1-->
23835  Characters other than the underscore _, letters, and digits, that are not part of the basic
23836  source character set (such as the dollar sign $, or characters in national character sets)
23837  may appear in an identifier (<a href="#6.4.2">6.4.2</a>).
23838
23839 <a name="J.5.3" href="#J.5.3"><h4>J.5.3 Lengths and cases of identifiers</h4></a>
23840 <p><!--para 1-->
23841  All characters in identifiers (with or without external linkage) are significant (<a href="#6.4.2">6.4.2</a>).
23842
23843 <a name="J.5.4" href="#J.5.4"><h4>J.5.4 Scopes of identifiers</h4></a>
23844 <p><!--para 1-->
23845  A function identifier, or the identifier of an object the declaration of which contains the
23846  keyword extern, has file scope (<a href="#6.2.1">6.2.1</a>).
23847
23848 <a name="J.5.5" href="#J.5.5"><h4>J.5.5 Writable string literals</h4></a>
23849 <p><!--para 1-->
23850  String literals are modifiable (in which case, identical string literals should denote distinct
23851  objects) (<a href="#6.4.5">6.4.5</a>).
23852
23853 <a name="J.5.6" href="#J.5.6"><h4>J.5.6 Other arithmetic types</h4></a>
23854 <p><!--para 1-->
23855  Additional arithmetic types, such as __int128 or double double, and their
23856  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
23857  more range or precision than long double, may be used for evaluating expressions of
23858  other floating types, and may be used to define float_t or double_t.
23859 <!--page 526 indent 4-->
23860
23861 <a name="J.5.7" href="#J.5.7"><h4>J.5.7 Function pointer casts</h4></a>
23862 <p><!--para 1-->
23863  A pointer to an object or to void may be cast to a pointer to a function, allowing data to
23864  be invoked as a function (<a href="#6.5.4">6.5.4</a>).
23865 <p><!--para 2-->
23866  A pointer to a function may be cast to a pointer to an object or to void, allowing a
23867  function to be inspected or modified (for example, by a debugger) (<a href="#6.5.4">6.5.4</a>).
23868
23869 <a name="J.5.8" href="#J.5.8"><h4>J.5.8 Extended bit-field types</h4></a>
23870 <p><!--para 1-->
23871  A bit-field may be declared with a type other than _Bool, unsigned int, or
23872  signed int, with an appropriate maximum width (<a href="#6.7.2.1">6.7.2.1</a>).
23873
23874 <a name="J.5.9" href="#J.5.9"><h4>J.5.9 The fortran keyword</h4></a>
23875 <p><!--para 1-->
23876  The fortran function specifier may be used in a function declaration to indicate that
23877  calls suitable for FORTRAN should be generated, or that a different representation for the
23878  external name is to be generated (<a href="#6.7.4">6.7.4</a>).
23879
23880 <a name="J.5.10" href="#J.5.10"><h4>J.5.10 The asm keyword</h4></a>
23881 <p><!--para 1-->
23882  The asm keyword may be used to insert assembly language directly into the translator
23883  output (<a href="#6.8">6.8</a>). The most common implementation is via a statement of the form:
23884 <pre>
23885         asm ( character-string-literal );</pre>
23886
23887 <a name="J.5.11" href="#J.5.11"><h4>J.5.11 Multiple external definitions</h4></a>
23888 <p><!--para 1-->
23889  There may be more than one external definition for the identifier of an object, with or
23890  without the explicit use of the keyword extern; if the definitions disagree, or more than
23891  one is initialized, the behavior is undefined (<a href="#6.9.2">6.9.2</a>).
23892
23893 <a name="J.5.12" href="#J.5.12"><h4>J.5.12 Predefined macro names</h4></a>
23894 <p><!--para 1-->
23895  Macro names that do not begin with an underscore, describing the translation and
23896  execution environments, are defined by the implementation before translation begins
23897  (<a href="#6.10.8">6.10.8</a>).
23898
23899 <a name="J.5.13" href="#J.5.13"><h4>J.5.13 Floating-point status flags</h4></a>
23900 <p><!--para 1-->
23901  If any floating-point status flags are set on normal termination after all calls to functions
23902  registered by the atexit function have been made (see <a href="#7.20.4.3">7.20.4.3</a>), the implementation
23903  writes some diagnostics indicating the fact to the stderr stream, if it is still open,
23904 <!--page 527 indent 4-->
23905
23906 <a name="J.5.14" href="#J.5.14"><h4>J.5.14 Extra arguments for signal handlers</h4></a>
23907 <p><!--para 1-->
23908  Handlers for specific signals are called with extra arguments in addition to the signal
23909  number (<a href="#7.14.1.1">7.14.1.1</a>).
23910
23911 <a name="J.5.15" href="#J.5.15"><h4>J.5.15 Additional stream types and file-opening modes</h4></a>
23912 <p><!--para 1-->
23913  Additional mappings from files to streams are supported (<a href="#7.19.2">7.19.2</a>).
23914 <p><!--para 2-->
23915  Additional file-opening modes may be specified by characters appended to the mode
23916  argument of the fopen function (<a href="#7.19.5.3">7.19.5.3</a>).
23917
23918 <a name="J.5.16" href="#J.5.16"><h4>J.5.16 Defined file position indicator</h4></a>
23919 <p><!--para 1-->
23920  The file position indicator is decremented by each successful call to the ungetc or
23921  ungetwc function for a text stream, except if its value was zero before a call (<a href="#7.19.7.11">7.19.7.11</a>,
23922  <a href="#7.24.3.10">7.24.3.10</a>).
23923
23924 <a name="J.5.17" href="#J.5.17"><h4>J.5.17 Math error reporting</h4></a>
23925 <p><!--para 1-->
23926  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
23927  instead of, or in addition to, setting errno or raising floating-point exceptions (<a href="#7.3">7.3</a>,
23928  <a href="#7.12">7.12</a>).
23929 <!--page 528 indent -1-->
23930
23931 <a name="Bibliography" href="#Bibliography"><h2>Bibliography</h2></a>
23932 <ol>
23933 <li>  ''The C Reference Manual'' by Dennis M. Ritchie, a version of which was
23934  published in The C Programming Language by Brian W. Kernighan and Dennis
23935  M. Ritchie, Prentice-Hall, Inc., (1978). Copyright owned by AT&amp;T.
23936 <li>  1984 /usr/group Standard by the /usr/group Standards Committee, Santa Clara,
23937  California, USA, November 1984.
23938 <li>  ANSI X3/TR-1-82 (1982), American National Dictionary for Information
23939  Processing Systems, Information Processing Systems Technical Report.
23940 <li>  ANSI/IEEE 754-1985, American National Standard for Binary Floating-Point
23941  Arithmetic.
23942 <li>  ANSI/IEEE 854-1988, American National Standard for Radix-Independent
23943  Floating-Point Arithmetic.
23944 <li>  IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems,
23945  second edition (previously designated IEC 559:1989).
23946 <li>  ISO 31-11:1992, Quantities and units -- Part 11: Mathematical signs and
23947  symbols for use in the physical sciences and technology.
23948 <li>  ISO/IEC 646:1991, Information technology -- ISO 7-bit coded character set for
23949  information interchange.
23950 <li>  ISO/IEC 2382-1:1993, Information technology -- Vocabulary -- Part 1:
23951  Fundamental terms.
23952 <li>  ISO 4217:1995, Codes for the representation of currencies and funds.
23953 <li>  ISO 8601:1988, Data elements and interchange formats -- Information
23954  interchange -- Representation of dates and times.
23955 <li>  ISO/IEC 9899:1990, Programming languages -- C.
23956 <li>  ISO/IEC 9899/COR1:1994, Technical Corrigendum 1.
23957 <li>  ISO/IEC 9899/COR2:1996, Technical Corrigendum 2.
23958 <li>  ISO/IEC 9899/AMD1:1995, Amendment 1 to ISO/IEC 9899:1990 C Integrity.
23959 <li>  ISO/IEC 9945-2:1993, Information technology -- Portable Operating System
23960  Interface (POSIX) -- Part 2: Shell and Utilities.
23961 <li>  ISO/IEC TR 10176:1998, Information technology -- Guidelines for the
23962  preparation of programming language standards.
23963 <li>  ISO/IEC 10646-1:1993, Information technology -- Universal Multiple-Octet
23964  Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane.
23965 <!--page 529 indent -1-->
23966 <li>  ISO/IEC 10646-1/COR1:1996,      Technical       Corrigendum      1      to
23967  ISO/IEC 10646-1:1993.
23968 <li>  ISO/IEC 10646-1/COR2:1998,      Technical       Corrigendum      2      to
23969  ISO/IEC 10646-1:1993.
23970 <li>  ISO/IEC 10646-1/AMD1:1996, Amendment 1 to ISO/IEC 10646-1:1993
23971  Transformation Format for 16 planes of group 00 (UTF-16).
23972 <li>  ISO/IEC 10646-1/AMD2:1996, Amendment 2 to ISO/IEC 10646-1:1993 UCS
23973  Transformation Format 8 (UTF-8).
23974 <li>  ISO/IEC 10646-1/AMD3:1996, Amendment 3 to ISO/IEC 10646-1:1993.
23975 <li>  ISO/IEC 10646-1/AMD4:1996, Amendment 4 to ISO/IEC 10646-1:1993.
23976 <li>  ISO/IEC 10646-1/AMD5:1998, Amendment 5 to ISO/IEC 10646-1:1993 Hangul
23977  syllables.
23978 <li>  ISO/IEC 10646-1/AMD6:1997, Amendment 6 to ISO/IEC 10646-1:1993 Tibetan.
23979 <li>  ISO/IEC 10646-1/AMD7:1997, Amendment 7 to ISO/IEC 10646-1:1993 33
23980  additional characters.
23981 <li>  ISO/IEC 10646-1/AMD8:1997, Amendment 8 to ISO/IEC 10646-1:1993.
23982 <li>  ISO/IEC 10646-1/AMD9:1997,    Amendment     9   to    ISO/IEC 10646-1:1993
23983  Identifiers for characters.
23984 <li>  ISO/IEC 10646-1/AMD10:1998, Amendment 10 to ISO/IEC 10646-1:1993
23985  Ethiopic.
23986 <li>  ISO/IEC 10646-1/AMD11:1998, Amendment 11 to ISO/IEC 10646-1:1993
23987  Unified Canadian Aboriginal Syllabics.
23988 <li>  ISO/IEC 10646-1/AMD12:1998, Amendment 12 to ISO/IEC 10646-1:1993
23989  Cherokee.
23990 <li>  ISO/IEC 10967-1:1994, Information technology -- Language independent
23991  arithmetic -- Part 1: Integer and floating point arithmetic.
23992 <!--page 530 indent 0-->
23993 <!--page 531 indent 0-->
23994 </ol>
23995
23996 <a name="Index" href="#Index"><h2>Index</h2></a>
23997 <pre>
23998  ??? x ???, <a href="#3.18">3.18</a>                                                    , (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>,
23999                                                                      <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.8">6.7.8</a>
24000  ??? x ???, <a href="#3.19">3.19</a>                                                    - (subtraction operator), <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>
24001  ! (logical negation operator), <a href="#6.5.3.3">6.5.3.3</a>                         - (unary minus operator), <a href="#6.5.3.3">6.5.3.3</a>, <a href="#F.3">F.3</a>
24002  != (inequality operator), <a href="#6.5.9">6.5.9</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>
24003  # operator, <a href="#6.10.3.2">6.10.3.2</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>
24004  # preprocessing directive, <a href="#6.10.7">6.10.7</a>                              -= (subtraction assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
24005  # punctuator, <a href="#6.10">6.10</a>                                             -&gt; (structure/union pointer operator), <a href="#6.5.2.3">6.5.2.3</a>
24006  ## operator, <a href="#6.10.3.3">6.10.3.3</a>                                          . (structure/union member operator), <a href="#6.3.2.1">6.3.2.1</a>,
24007  #define preprocessing directive, <a href="#6.10.3">6.10.3</a>                             <a href="#6.5.2.3">6.5.2.3</a>
24008  #elif preprocessing directive, <a href="#6.10.1">6.10.1</a>                          . punctuator, <a href="#6.7.8">6.7.8</a>
24009  #else 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.5.3">6.7.5.3</a>, <a href="#6.10.3">6.10.3</a>
24010  #endif preprocessing directive, <a href="#6.10.1">6.10.1</a>                         / (division operator), <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>
24011  #error preprocessing directive, <a href="#4">4</a>, <a href="#6.10.5">6.10.5</a>                      /* */ (comment delimiters), <a href="#6.4.9">6.4.9</a>
24012  #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 delimiter), <a href="#6.4.9">6.4.9</a>
24013       <a href="#6.10.1">6.10.1</a>, <a href="#7.1.4">7.1.4</a>                                             /= (division assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
24014  #ifdef preprocessing directive, <a href="#6.10.1">6.10.1</a>                         : (colon punctuator), <a href="#6.7.2.1">6.7.2.1</a>
24015  #ifndef preprocessing directive, <a href="#6.10.1">6.10.1</a>                        :&gt; (alternative spelling of ]), <a href="#6.4.6">6.4.6</a>
24016  #include preprocessing directive, <a href="#5.1.1.2">5.1.1.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>,
24017       <a href="#6.10.2">6.10.2</a>                                                         <a href="#6.8.5">6.8.5</a>, <a href="#6.8.6">6.8.6</a>
24018  #line preprocessing directive, <a href="#6.10.4">6.10.4</a>                          &lt; (less-than operator), <a href="#6.5.8">6.5.8</a>
24019  #pragma preprocessing directive, <a href="#6.10.6">6.10.6</a>                        &lt;% (alternative spelling of {), <a href="#6.4.6">6.4.6</a>
24020  #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>
24021       <a href="#7.1.4">7.1.4</a>                                                     &lt;&lt; (left-shift operator), <a href="#6.5.7">6.5.7</a>
24022  % (remainder operator), <a href="#6.5.5">6.5.5</a>                                  &lt;&lt;= (left-shift assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
24023  %: (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>
24024  %:%: (alternative spelling of ##), <a href="#6.4.6">6.4.6</a>                       <a href="#7.2">&lt;assert.h&gt;</a> header, <a href="#7.2">7.2</a>, <a href="#B.1">B.1</a>
24025  %= (remainder assignment operator), <a href="#6.5.16.2">6.5.16.2</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="#7.3">7.3</a>, <a href="#7.22">7.22</a>,
24026  %&gt; (alternative spelling of }), <a href="#6.4.6">6.4.6</a>                               <a href="#7.26.1">7.26.1</a>, <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>
24027  &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.4">&lt;ctype.h&gt;</a> header, <a href="#7.4">7.4</a>, <a href="#7.26.2">7.26.2</a>
24028  &amp; (bitwise AND operator), <a href="#6.5.10">6.5.10</a>                               <a href="#7.5">&lt;errno.h&gt;</a> header, <a href="#7.5">7.5</a>, <a href="#7.26.3">7.26.3</a>
24029  &amp;&amp; (logical AND operator), <a href="#6.5.13">6.5.13</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>,
24030  &amp;= (bitwise AND assignment operator), <a href="#6.5.16.2">6.5.16.2</a>                      <a href="#H">H</a>
24031  ' ' (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="#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.20.1.3">7.20.1.3</a>,
24032       <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.25.2.1.3">7.25.2.1.3</a>                                           <a href="#7.24.4.1.1">7.24.4.1.1</a>
24033  ( ) (cast operator), <a href="#6.5.4">6.5.4</a>                                     <a href="#7.8">&lt;inttypes.h&gt;</a> header, <a href="#7.8">7.8</a>, <a href="#7.26.4">7.26.4</a>
24034  ( ) (function-call operator), <a href="#6.5.2.2">6.5.2.2</a>                          <a href="#7.9">&lt;iso646.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.9">7.9</a>
24035  ( ) (parentheses punctuator), <a href="#6.7.5.3">6.7.5.3</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.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>
24036  ( ){ } (compound-literal operator), <a href="#6.5.2.5">6.5.2.5</a>                    <a href="#7.11">&lt;locale.h&gt;</a> header, <a href="#7.11">7.11</a>, <a href="#7.26.5">7.26.5</a>
24037  * (asterisk punctuator), <a href="#6.7.5.1">6.7.5.1</a>, <a href="#6.7.5.2">6.7.5.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.22">7.22</a>, <a href="#F">F</a>,
24038  * (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="#F.9">F.9</a>, <a href="#J.5.17">J.5.17</a>
24039  * (multiplication operator), <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>                 <a href="#7.13">&lt;setjmp.h&gt;</a> header, <a href="#7.13">7.13</a>
24040  *= (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.26.6">7.26.6</a>
24041  + (addition 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="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>,           <a href="#7.15">&lt;stdarg.h&gt;</a> header, <a href="#4">4</a>, <a href="#6.7.5.3">6.7.5.3</a>, <a href="#7.15">7.15</a>
24042       <a href="#G.5.2">G.5.2</a>                                                     <a href="#7.16">&lt;stdbool.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.16">7.16</a>, <a href="#7.26.7">7.26.7</a>, <a href="#H">H</a>
24043  + (unary plus operator), <a href="#6.5.3.3">6.5.3.3</a>                               <a href="#7.17">&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>,
24044  ++ (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="#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.17">7.17</a>
24045  ++ (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.18">&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>,
24046  += (addition assignment operator), <a href="#6.5.16.2">6.5.16.2</a>                         <a href="#7.18">7.18</a>, <a href="#7.26.8">7.26.8</a>
24047  , (comma operator), <a href="#6.5.17">6.5.17</a>
24048 <!--page 532 indent 0-->
24049  <a href="#7.19">&lt;stdio.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19">7.19</a>, <a href="#7.26.9">7.26.9</a>, <a href="#F">F</a>                 __cplusplus macro, <a href="#6.10.8">6.10.8</a>
24050  <a href="#7.20">&lt;stdlib.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.20">7.20</a>, <a href="#7.26.10">7.26.10</a>, <a href="#F">F</a>               __DATE__ macro, <a href="#6.10.8">6.10.8</a>
24051  <a href="#7.21">&lt;string.h&gt;</a> header, <a href="#7.21">7.21</a>, <a href="#7.26.11">7.26.11</a>                             __FILE__ macro, <a href="#6.10.8">6.10.8</a>, <a href="#7.2.1.1">7.2.1.1</a>
24052  <a href="#7.22">&lt;tgmath.h&gt;</a> header, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</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>
24053  <a href="#7.23">&lt;time.h&gt;</a> header, <a href="#7.23">7.23</a>                                        __LINE__ macro, <a href="#6.10.8">6.10.8</a>, <a href="#7.2.1.1">7.2.1.1</a>
24054  <a href="#7.24">&lt;wchar.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.24">7.24</a>,                   __STDC_, <a href="#6.11.9">6.11.9</a>
24055       <a href="#7.26.12">7.26.12</a>, <a href="#F">F</a>                                              __STDC__ macro, <a href="#6.10.8">6.10.8</a>
24056  <a href="#7.25">&lt;wctype.h&gt;</a> header, <a href="#7.25">7.25</a>, <a href="#7.26.13">7.26.13</a>                             __STDC_CONSTANT_MACROS macro, <a href="#7.18.4">7.18.4</a>
24057  = (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.8">6.7.8</a>               __STDC_FORMAT_MACROS macro, <a href="#7.8.1">7.8.1</a>
24058  = (simple assignment operator), <a href="#6.5.16.1">6.5.16.1</a>                     __STDC_HOSTED__ macro, <a href="#6.10.8">6.10.8</a>
24059  == (equality operator), <a href="#6.5.9">6.5.9</a>                                __STDC_IEC_559__ macro, <a href="#6.10.8">6.10.8</a>, <a href="#F.1">F.1</a>
24060  &gt; (greater-than operator), <a href="#6.5.8">6.5.8</a>                             __STDC_IEC_559_COMPLEX__ macro,
24061  &gt;= (greater-than-or-equal-to operator), <a href="#6.5.8">6.5.8</a>                     <a href="#6.10.8">6.10.8</a>, <a href="#G.1">G.1</a>
24062  &gt;&gt; (right-shift operator), <a href="#6.5.7">6.5.7</a>                             __STDC_ISO_10646__ macro, <a href="#6.10.8">6.10.8</a>
24063  &gt;&gt;= (right-shift assignment operator), <a href="#6.5.16.2">6.5.16.2</a>              __STDC_LIMIT_MACROS macro, <a href="#7.18.2">7.18.2</a>,
24064  ? : (conditional operator), <a href="#6.5.15">6.5.15</a>                                <a href="#7.18.3">7.18.3</a>
24065  ?? (trigraph sequences), <a href="#5.2.1.1">5.2.1.1</a>                             __STDC_MB_MIGHT_NEQ_WC__ macro,
24066  [ ] (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>                  <a href="#6.10.8">6.10.8</a>, <a href="#7.17">7.17</a>
24067  [ ] (brackets punctuator), <a href="#6.7.5.2">6.7.5.2</a>, <a href="#6.7.8">6.7.8</a>                    __STDC_VERSION__ macro, <a href="#6.10.8">6.10.8</a>
24068  \ (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>             __TIME__ macro, <a href="#6.10.8">6.10.8</a>
24069  \ (escape character), <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>
24070  \" (double-quote escape sequence), <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>
24071       <a href="#6.4.5">6.4.5</a>, <a href="#6.10.9">6.10.9</a>                                           _Bool type conversions, <a href="#6.3.1.2">6.3.1.2</a>
24072  \\ (backslash escape sequence), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.10.9">6.10.9</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>
24073  \' (single-quote escape sequence), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>            _Complex_I macro, <a href="#7.3.1">7.3.1</a>
24074  \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>                   _Exit function, <a href="#7.20.4.4">7.20.4.4</a>
24075    padding of binary stream, <a href="#7.19.2">7.19.2</a>                           _Imaginary keyword, <a href="#G.2">G.2</a>
24076  \? (question-mark escape sequence), <a href="#6.4.4.4">6.4.4.4</a>                  _Imaginary types, <a href="#7.3.1">7.3.1</a>, <a href="#G">G</a>
24077  \a (alert escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                   _Imaginary_I macro, <a href="#7.3.1">7.3.1</a>, <a href="#G.6">G.6</a>
24078  \b (backspace escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>               _IOFBF macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.5.5">7.19.5.5</a>, <a href="#7.19.5.6">7.19.5.6</a>
24079  \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>,              _IOLBF macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.5.6">7.19.5.6</a>
24080       <a href="#7.4.1.10">7.4.1.10</a>                                                _IONBF macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.5.5">7.19.5.5</a>, <a href="#7.19.5.6">7.19.5.6</a>
24081  \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>,               _Pragma operator, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.9">6.10.9</a>
24082       <a href="#7.4.1.10">7.4.1.10</a>                                                { } (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.8">6.7.8</a>,
24083  \octal digits (octal-character escape sequence),                  <a href="#6.8.2">6.8.2</a>
24084       <a href="#6.4.4.4">6.4.4.4</a>                                                 { } (compound-literal operator), <a href="#6.5.2.5">6.5.2.5</a>
24085  \r (carriage-return escape sequence), <a href="#5.2.2">5.2.2</a>,                 | (bitwise inclusive OR operator), <a href="#6.5.12">6.5.12</a>
24086       <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.10">7.4.1.10</a>                                       |= (bitwise inclusive OR assignment operator),
24087  \t (horizontal-tab escape sequence), <a href="#5.2.2">5.2.2</a>,                       <a href="#6.5.16.2">6.5.16.2</a>
24088       <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.25.2.1.3">7.25.2.1.3</a>                  || (logical OR operator), <a href="#6.5.14">6.5.14</a>
24089  \U (universal character names), <a href="#6.4.3">6.4.3</a>                        ~ (bitwise complement operator), <a href="#6.5.3.3">6.5.3.3</a>
24090  \u (universal character names), <a href="#6.4.3">6.4.3</a>
24091  \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>,           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.19.3">7.19.3</a>,
24092       <a href="#7.4.1.10">7.4.1.10</a>                                                     <a href="#7.20.4.1">7.20.4.1</a>
24093  \x hexadecimal digits (hexadecimal-character                 abs function, <a href="#7.20.6.1">7.20.6.1</a>
24094       escape sequence), <a href="#6.4.4.4">6.4.4.4</a>                               absolute-value functions
24095  ^ (bitwise exclusive OR operator), <a href="#6.5.11">6.5.11</a>                      complex, <a href="#7.3.8">7.3.8</a>, <a href="#G.6.4">G.6.4</a>
24096  ^= (bitwise exclusive OR assignment operator),                 integer, <a href="#7.8.2.1">7.8.2.1</a>, <a href="#7.20.6.1">7.20.6.1</a>
24097       <a href="#6.5.16.2">6.5.16.2</a>                                                  real, <a href="#7.12.7">7.12.7</a>, <a href="#F.9.4">F.9.4</a>
24098  __bool_true_false_are_defined                               abstract declarator, <a href="#6.7.6">6.7.6</a>
24099       macro, <a href="#7.16">7.16</a>                                             abstract machine, <a href="#5.1.2.3">5.1.2.3</a>
24100 <!--page 533 indent 0-->
24101  access, <a href="#3.1">3.1</a>, <a href="#6.7.3">6.7.3</a>                                             array
24102  accuracy, see floating-point accuracy                              argument, <a href="#6.9.1">6.9.1</a>
24103  acos functions, <a href="#7.12.4.1">7.12.4.1</a>, <a href="#F.9.1.1">F.9.1.1</a>                                 declarator, <a href="#6.7.5.2">6.7.5.2</a>
24104  acos type-generic macro, <a href="#7.22">7.22</a>                                     initialization, <a href="#6.7.8">6.7.8</a>
24105  acosh functions, <a href="#7.12.5.1">7.12.5.1</a>, <a href="#F.9.2.1">F.9.2.1</a>                                multidimensional, <a href="#6.5.2.1">6.5.2.1</a>
24106  acosh type-generic macro, <a href="#7.22">7.22</a>                                    parameter, <a href="#6.9.1">6.9.1</a>
24107  active position, <a href="#5.2.2">5.2.2</a>                                            storage order, <a href="#6.5.2.1">6.5.2.1</a>
24108  actual argument, <a href="#3.3">3.3</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>
24109  actual parameter (deprecated), <a href="#3.3">3.3</a>                                subscripting, <a href="#6.5.2.1">6.5.2.1</a>
24110  addition assignment operator (+=), <a href="#6.5.16.2">6.5.16.2</a>                       type, <a href="#6.2.5">6.2.5</a>
24111  addition 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="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>,              type conversion, <a href="#6.3.2.1">6.3.2.1</a>
24112        <a href="#G.5.2">G.5.2</a>                                                       variable length, <a href="#6.7.5">6.7.5</a>, <a href="#6.7.5.2">6.7.5.2</a>
24113  additive expressions, <a href="#6.5.6">6.5.6</a>, <a href="#G.5.2">G.5.2</a>                             arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
24114  address constant, <a href="#6.6">6.6</a>                                          as-if rule, <a href="#5.1.2.3">5.1.2.3</a>
24115  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>                         ASCII code set, <a href="#5.2.1.1">5.2.1.1</a>
24116  aggregate initialization, <a href="#6.7.8">6.7.8</a>                                asctime function, <a href="#7.23.3.1">7.23.3.1</a>
24117  aggregate types, <a href="#6.2.5">6.2.5</a>                                         asin functions, <a href="#7.12.4.2">7.12.4.2</a>, <a href="#F.9.1.2">F.9.1.2</a>
24118  alert escape sequence (\a), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                     asin type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
24119  aliasing, <a href="#6.5">6.5</a>                                                  asinh functions, <a href="#7.12.5.2">7.12.5.2</a>, <a href="#F.9.2.2">F.9.2.2</a>
24120  alignment, <a href="#3.2">3.2</a>                                                 asinh type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
24121     pointer, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.2.3">6.3.2.3</a>                                     asm keyword, <a href="#J.5.10">J.5.10</a>
24122     structure/union member, <a href="#6.7.2.1">6.7.2.1</a>                             assert macro, <a href="#7.2.1.1">7.2.1.1</a>
24123  allocated storage, order and contiguity, <a href="#7.20.3">7.20.3</a>                assert.h header, <a href="#7.2">7.2</a>, <a href="#B.1">B.1</a>
24124  and macro, <a href="#7.9">7.9</a>                                                 assignment
24125  AND operators                                                     compound, <a href="#6.5.16.2">6.5.16.2</a>
24126     bitwise (&amp;), <a href="#6.5.10">6.5.10</a>                                            conversion, <a href="#6.5.16.1">6.5.16.1</a>
24127     bitwise assignment (&amp;=), <a href="#6.5.16.2">6.5.16.2</a>                              expression, <a href="#6.5.16">6.5.16</a>
24128     logical (&amp;&amp;), <a href="#6.5.13">6.5.13</a>                                           operators, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.16">6.5.16</a>
24129  and_eq macro, <a href="#7.9">7.9</a>                                                 simple, <a href="#6.5.16.1">6.5.16.1</a>
24130  ANSI/IEEE 754, <a href="#F.1">F.1</a>                                             associativity of operators, <a href="#6.5">6.5</a>
24131  ANSI/IEEE 854, <a href="#F.1">F.1</a>                                             asterisk punctuator (*), <a href="#6.7.5.1">6.7.5.1</a>, <a href="#6.7.5.2">6.7.5.2</a>
24132  argc (main function parameter), <a href="#5.1.2.2.1">5.1.2.2.1</a>                      atan functions, <a href="#7.12.4.3">7.12.4.3</a>, <a href="#F.9.1.3">F.9.1.3</a>
24133  argument, <a href="#3.3">3.3</a>                                                  atan type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
24134     array, <a href="#6.9.1">6.9.1</a>                                                atan2 functions, <a href="#7.12.4.4">7.12.4.4</a>, <a href="#F.9.1.4">F.9.1.4</a>
24135     default promotions, <a href="#6.5.2.2">6.5.2.2</a>                                 atan2 type-generic macro, <a href="#7.22">7.22</a>
24136     function, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>                                    atanh functions, <a href="#7.12.5.3">7.12.5.3</a>, <a href="#F.9.2.3">F.9.2.3</a>
24137     macro, substitution, <a href="#6.10.3.1">6.10.3.1</a>                               atanh type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
24138  argument, complex, <a href="#7.3.9.1">7.3.9.1</a>                                     atexit function, <a href="#7.20.4.2">7.20.4.2</a>, <a href="#7.20.4.3">7.20.4.3</a>, <a href="#7.20.4.4">7.20.4.4</a>,
24139  argv (main function parameter), <a href="#5.1.2.2.1">5.1.2.2.1</a>                            <a href="#J.5.13">J.5.13</a>
24140  arithmetic constant expression, <a href="#6.6">6.6</a>                            atof function, <a href="#7.20.1">7.20.1</a>, <a href="#7.20.1.1">7.20.1.1</a>
24141  arithmetic conversions, usual, see usual arithmetic            atoi function, <a href="#7.20.1">7.20.1</a>, <a href="#7.20.1.2">7.20.1.2</a>
24142        conversions                                              atol function, <a href="#7.20.1">7.20.1</a>, <a href="#7.20.1.2">7.20.1.2</a>
24143  arithmetic operators                                           atoll function, <a href="#7.20.1">7.20.1</a>, <a href="#7.20.1.2">7.20.1.2</a>
24144     additive, <a href="#6.5.6">6.5.6</a>, <a href="#G.5.2">G.5.2</a>                                      auto storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.9">6.9</a>
24145     bitwise, <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>                             automatic storage duration, <a href="#5.2.3">5.2.3</a>, <a href="#6.2.4">6.2.4</a>
24146     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>
24147     multiplicative, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</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>
24148     shift, <a href="#6.5.7">6.5.7</a>                                                backslash escape sequence (\\), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.10.9">6.10.9</a>
24149     unary, <a href="#6.5.3.3">6.5.3.3</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>
24150  arithmetic types, <a href="#6.2.5">6.2.5</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>
24151  arithmetic, pointer, <a href="#6.5.6">6.5.6</a>                                     basic types, <a href="#6.2.5">6.2.5</a>
24152 <!--page 534 indent 0-->
24153  behavior, <a href="#3.4">3.4</a>                                                  call by value, <a href="#6.5.2.2">6.5.2.2</a>
24154  binary streams, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.7.11">7.19.7.11</a>, <a href="#7.19.9.2">7.19.9.2</a>,                   calloc function, <a href="#7.20.3">7.20.3</a>, <a href="#7.20.3.1">7.20.3.1</a>, <a href="#7.20.3.2">7.20.3.2</a>,
24155        <a href="#7.19.9.4">7.19.9.4</a>                                                       <a href="#7.20.3.4">7.20.3.4</a>
24156  bit, <a href="#3.5">3.5</a>                                                       carg functions, <a href="#7.3.9.1">7.3.9.1</a>, <a href="#G.6">G.6</a>
24157     high order, <a href="#3.6">3.6</a>                                             carg type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
24158     low order, <a href="#3.6">3.6</a>                                              carriage-return escape sequence (\r), <a href="#5.2.2">5.2.2</a>,
24159  bit-field, <a href="#6.7.2.1">6.7.2.1</a>                                                    <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.10">7.4.1.10</a>
24160  bitand macro, <a href="#7.9">7.9</a>                                              case label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
24161  bitor macro, <a href="#7.9">7.9</a>                                               case mapping functions
24162  bitwise operators, <a href="#6.5">6.5</a>                                           character, <a href="#7.4.2">7.4.2</a>
24163     AND, <a href="#6.5.10">6.5.10</a>                                                   wide character, <a href="#7.25.3.1">7.25.3.1</a>
24164     AND assignment (&amp;=), <a href="#6.5.16.2">6.5.16.2</a>                                     extensible, <a href="#7.25.3.2">7.25.3.2</a>
24165     complement (~), <a href="#6.5.3.3">6.5.3.3</a>                                     casin functions, <a href="#7.3.5.2">7.3.5.2</a>, <a href="#G.6">G.6</a>
24166     exclusive OR, <a href="#6.5.11">6.5.11</a>                                          type-generic macro for, <a href="#7.22">7.22</a>
24167     exclusive OR assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>                      casinh functions, <a href="#7.3.6.2">7.3.6.2</a>, <a href="#G.6.2.2">G.6.2.2</a>
24168     inclusive OR, <a href="#6.5.12">6.5.12</a>                                          type-generic macro for, <a href="#7.22">7.22</a>
24169     inclusive OR assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>                      cast expression, <a href="#6.5.4">6.5.4</a>
24170     shift, <a href="#6.5.7">6.5.7</a>                                                cast operator (( )), <a href="#6.5.4">6.5.4</a>
24171  blank character, <a href="#7.4.1.3">7.4.1.3</a>                                       catan functions, <a href="#7.3.5.3">7.3.5.3</a>, <a href="#G.6">G.6</a>
24172  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>                                  type-generic macro for, <a href="#7.22">7.22</a>
24173  block scope, <a href="#6.2.1">6.2.1</a>                                             catanh functions, <a href="#7.3.6.3">7.3.6.3</a>, <a href="#G.6.2.3">G.6.2.3</a>
24174  block structure, <a href="#6.2.1">6.2.1</a>                                           type-generic macro for, <a href="#7.22">7.22</a>
24175  bold type convention, <a href="#6.1">6.1</a>                                      cbrt functions, <a href="#7.12.7.1">7.12.7.1</a>, <a href="#F.9.4.1">F.9.4.1</a>
24176  bool macro, <a href="#7.16">7.16</a>                                               cbrt type-generic macro, <a href="#7.22">7.22</a>
24177  boolean type, <a href="#6.3.1.2">6.3.1.2</a>                                          ccos functions, <a href="#7.3.5.4">7.3.5.4</a>, <a href="#G.6">G.6</a>
24178  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>                        type-generic macro for, <a href="#7.22">7.22</a>
24179  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.8">6.7.8</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>
24180        <a href="#6.8.2">6.8.2</a>                                                      type-generic macro for, <a href="#7.22">7.22</a>
24181  brackets operator ([ ]), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                      ceil functions, <a href="#7.12.9.1">7.12.9.1</a>, <a href="#F.9.6.1">F.9.6.1</a>
24182  brackets punctuator ([ ]), <a href="#6.7.5.2">6.7.5.2</a>, <a href="#6.7.8">6.7.8</a>                      ceil type-generic macro, <a href="#7.22">7.22</a>
24183  branch cuts, <a href="#7.3.3">7.3.3</a>                                             cerf function, <a href="#7.26.1">7.26.1</a>
24184  break statement, <a href="#6.8.6.3">6.8.6.3</a>                                       cerfc function, <a href="#7.26.1">7.26.1</a>
24185  broken-down time, <a href="#7.23.1">7.23.1</a>, <a href="#7.23.2.3">7.23.2.3</a>, <a href="#7.23.3">7.23.3</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>
24186        <a href="#7.23.3.1">7.23.3.1</a>, <a href="#7.23.3.3">7.23.3.3</a>, <a href="#7.23.3.4">7.23.3.4</a>, <a href="#7.23.3.5">7.23.3.5</a>                     type-generic macro for, <a href="#7.22">7.22</a>
24187  bsearch function, <a href="#7.20.5">7.20.5</a>, <a href="#7.20.5.1">7.20.5.1</a>                             cexp2 function, <a href="#7.26.1">7.26.1</a>
24188  btowc function, <a href="#7.24.6.1.1">7.24.6.1.1</a>                                     cexpm1 function, <a href="#7.26.1">7.26.1</a>
24189  BUFSIZ macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.5.5">7.19.5.5</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>
24190  byte, <a href="#3.6">3.6</a>, <a href="#6.5.3.4">6.5.3.4</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>,
24191  byte input/output functions, <a href="#7.19.1">7.19.1</a>                                  <a href="#6.3.1.8">6.3.1.8</a>
24192  byte-oriented stream, <a href="#7.19.2">7.19.2</a>                                   CHAR_BIT macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
24193                                                                 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>
24194  <a href="#C">C</a> program, <a href="#5.1.1.1">5.1.1.1</a>                                             CHAR_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
24195  <a href="#C">C</a>++, <a href="#7.8.1">7.8.1</a>, <a href="#7.18.2">7.18.2</a>, <a href="#7.18.3">7.18.3</a>, <a href="#7.18.4">7.18.4</a>                             character, <a href="#3.7">3.7</a>, <a href="#3.7.1">3.7.1</a>
24196  cabs functions, <a href="#7.3.8.1">7.3.8.1</a>, <a href="#G.6">G.6</a>                                   character array initialization, <a href="#6.7.8">6.7.8</a>
24197    type-generic macro for, <a href="#7.22">7.22</a>                                 character case mapping functions, <a href="#7.4.2">7.4.2</a>
24198  cacos functions, <a href="#7.3.5.1">7.3.5.1</a>, <a href="#G.6.1.1">G.6.1.1</a>                                wide character, <a href="#7.25.3.1">7.25.3.1</a>
24199    type-generic macro for, <a href="#7.22">7.22</a>                                       extensible, <a href="#7.25.3.2">7.25.3.2</a>
24200  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 classification functions, <a href="#7.4.1">7.4.1</a>
24201    type-generic macro for, <a href="#7.22">7.22</a>                                   wide character, <a href="#7.25.2.1">7.25.2.1</a>
24202  calendar time, <a href="#7.23.1">7.23.1</a>, <a href="#7.23.2.2">7.23.2.2</a>, <a href="#7.23.2.3">7.23.2.3</a>, <a href="#7.23.2.4">7.23.2.4</a>,                 extensible, <a href="#7.25.2.2">7.25.2.2</a>
24203       <a href="#7.23.3.2">7.23.3.2</a>, <a href="#7.23.3.3">7.23.3.3</a>, <a href="#7.23.3.4">7.23.3.4</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>
24204 <!--page 535 indent 0-->
24205  character display semantics, <a href="#5.2.2">5.2.2</a>                            complex.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.3">7.3</a>, <a href="#7.22">7.22</a>, <a href="#7.26.1">7.26.1</a>,
24206  character handling header, <a href="#7.4">7.4</a>, <a href="#7.11.1.1">7.11.1.1</a>                           <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>
24207  character input/output functions, <a href="#7.19.7">7.19.7</a>                      compliance, see conformance
24208     wide character, <a href="#7.24.3">7.24.3</a>                                     components of time, <a href="#7.23.1">7.23.1</a>
24209  character sets, <a href="#5.2.1">5.2.1</a>                                         composite type, <a href="#6.2.7">6.2.7</a>
24210  character string literal, see string literal                  compound assignment, <a href="#6.5.16.2">6.5.16.2</a>
24211  character type conversion, <a href="#6.3.1.1">6.3.1.1</a>                            compound literals, <a href="#6.5.2.5">6.5.2.5</a>
24212  character types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.8">6.7.8</a>                                 compound statement, <a href="#6.8.2">6.8.2</a>
24213  cimag functions, <a href="#7.3.9.2">7.3.9.2</a>, <a href="#7.3.9.4">7.3.9.4</a>, <a href="#G.6">G.6</a>                        compound-literal operator (( ){ }), <a href="#6.5.2.5">6.5.2.5</a>
24214  cimag type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                           concatenation functions
24215  cis function, <a href="#G.6">G.6</a>                                               string, <a href="#7.21.3">7.21.3</a>
24216  classification functions                                         wide string, <a href="#7.24.4.3">7.24.4.3</a>
24217     character, <a href="#7.4.1">7.4.1</a>                                           concatenation, preprocessing, see preprocessing
24218     floating-point, <a href="#7.12.3">7.12.3</a>                                           concatenation
24219     wide character, <a href="#7.25.2.1">7.25.2.1</a>                                   conceptual models, <a href="#5.1">5.1</a>
24220        extensible, <a href="#7.25.2.2">7.25.2.2</a>                                    conditional inclusion, <a href="#6.10.1">6.10.1</a>
24221  clearerr function, <a href="#7.19.10.1">7.19.10.1</a>                                  conditional operator (? :), <a href="#6.5.15">6.5.15</a>
24222  clgamma function, <a href="#7.26.1">7.26.1</a>                                      conformance, <a href="#4">4</a>
24223  clock function, <a href="#7.23.2.1">7.23.2.1</a>                                      conj functions, <a href="#7.3.9.3">7.3.9.3</a>, <a href="#G.6">G.6</a>
24224  clock_t type, <a href="#7.23.1">7.23.1</a>, <a href="#7.23.2.1">7.23.2.1</a>                                conj type-generic macro, <a href="#7.22">7.22</a>
24225  CLOCKS_PER_SEC macro, <a href="#7.23.1">7.23.1</a>, <a href="#7.23.2.1">7.23.2.1</a>                        const type qualifier, <a href="#6.7.3">6.7.3</a>
24226  clog functions, <a href="#7.3.7.2">7.3.7.2</a>, <a href="#G.6.3.2">G.6.3.2</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>
24227     type-generic macro for, <a href="#7.22">7.22</a>                               constant expression, <a href="#6.6">6.6</a>, <a href="#F.7.4">F.7.4</a>
24228  clog10 function, <a href="#7.26.1">7.26.1</a>                                       constants, <a href="#6.4.4">6.4.4</a>
24229  clog1p function, <a href="#7.26.1">7.26.1</a>                                         as primary expression, <a href="#6.5.1">6.5.1</a>
24230  clog2 function, <a href="#7.26.1">7.26.1</a>                                          character, <a href="#6.4.4.4">6.4.4.4</a>
24231  collating sequences, <a href="#5.2.1">5.2.1</a>                                      enumeration, <a href="#6.2.1">6.2.1</a>, <a href="#6.4.4.3">6.4.4.3</a>
24232  colon punctuator (:), <a href="#6.7.2.1">6.7.2.1</a>                                   floating, <a href="#6.4.4.2">6.4.4.2</a>
24233  comma operator (,), <a href="#6.5.17">6.5.17</a>                                      hexadecimal, <a href="#6.4.4.1">6.4.4.1</a>
24234  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>,             integer, <a href="#6.4.4.1">6.4.4.1</a>
24235        <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.8">6.7.8</a>                                            octal, <a href="#6.4.4.1">6.4.4.1</a>
24236  command processor, <a href="#7.20.4.6">7.20.4.6</a>                                   constraint, <a href="#3.8">3.8</a>, <a href="#4">4</a>
24237  comment delimiters (/* */ and //), <a href="#6.4.9">6.4.9</a>                      content of structure/union/enumeration, <a href="#6.7.2.3">6.7.2.3</a>
24238  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>                                 contiguity of allocated storage, <a href="#7.20.3">7.20.3</a>
24239  common extensions, <a href="#J.5">J.5</a>                                        continue statement, <a href="#6.8.6.2">6.8.6.2</a>
24240  common initial sequence, <a href="#6.5.2.3">6.5.2.3</a>                              contracted expression, <a href="#6.5">6.5</a>, <a href="#7.12.2">7.12.2</a>, <a href="#F.6">F.6</a>
24241  common real type, <a href="#6.3.1.8">6.3.1.8</a>                                     control character, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>
24242  common warnings, <a href="#I">I</a>                                            control wide character, <a href="#7.25.2">7.25.2</a>
24243  comparison functions, <a href="#7.20.5">7.20.5</a>, <a href="#7.20.5.1">7.20.5.1</a>, <a href="#7.20.5.2">7.20.5.2</a>              conversion, <a href="#6.3">6.3</a>
24244     string, <a href="#7.21.4">7.21.4</a>                                               arithmetic operands, <a href="#6.3.1">6.3.1</a>
24245     wide string, <a href="#7.24.4.4">7.24.4.4</a>                                        array argument, <a href="#6.9.1">6.9.1</a>                           *
24246  comparison macros, <a href="#7.12.14">7.12.14</a>                                      array parameter, <a href="#6.9.1">6.9.1</a>
24247  comparison, pointer, <a href="#6.5.8">6.5.8</a>                                      arrays, <a href="#6.3.2.1">6.3.2.1</a>
24248  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.5">6.7.5</a>                     boolean, <a href="#6.3.1.2">6.3.1.2</a>
24249  compl macro, <a href="#7.9">7.9</a>                                                boolean, characters, and integers, <a href="#6.3.1.1">6.3.1.1</a>
24250  complement operator (~), <a href="#6.5.3.3">6.5.3.3</a>                                by assignment, <a href="#6.5.16.1">6.5.16.1</a>
24251  complex macro, <a href="#7.3.1">7.3.1</a>                                            by return statement, <a href="#6.8.6.4">6.8.6.4</a>
24252  complex numbers, <a href="#6.2.5">6.2.5</a>, <a href="#G">G</a>                                       complex types, <a href="#6.3.1.6">6.3.1.6</a>
24253  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>                       explicit, <a href="#6.3">6.3</a>
24254  complex type domain, <a href="#6.2.5">6.2.5</a>                                      function, <a href="#6.3.2.1">6.3.2.1</a>
24255  complex types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#G">G</a>                                  function argument, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>
24256 <!--page 536 indent 0-->
24257    function designators, <a href="#6.3.2.1">6.3.2.1</a>                                type-generic macro for, <a href="#7.22">7.22</a>
24258    function parameter, <a href="#6.9.1">6.9.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>
24259    imaginary, <a href="#G.4.1">G.4.1</a>                                             type-generic macro for, <a href="#7.22">7.22</a>
24260    imaginary and complex, <a href="#G.4.3">G.4.3</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>
24261    implicit, <a href="#6.3">6.3</a>                                                type-generic macro for, <a href="#7.22">7.22</a>
24262    lvalues, <a href="#6.3.2.1">6.3.2.1</a>                                           ctan functions, <a href="#7.3.5.6">7.3.5.6</a>, <a href="#G.6">G.6</a>
24263    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.22">7.22</a>
24264    real and complex, <a href="#6.3.1.7">6.3.1.7</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>
24265    real and imaginary, <a href="#G.4.2">G.4.2</a>                                    type-generic macro for, <a href="#7.22">7.22</a>
24266    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>                ctgamma function, <a href="#7.26.1">7.26.1</a>
24267    real floating types, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#F.3">F.3</a>                           ctime function, <a href="#7.23.3.2">7.23.3.2</a>
24268    signed and unsigned integers, <a href="#6.3.1.3">6.3.1.3</a>                      ctype.h header, <a href="#7.4">7.4</a>, <a href="#7.26.2">7.26.2</a>
24269    usual arithmetic, see usual arithmetic                     current object, <a href="#6.7.8">6.7.8</a>
24270          conversions                                          CX_LIMITED_RANGE pragma, <a href="#6.10.6">6.10.6</a>, <a href="#7.3.4">7.3.4</a>
24271    void type, <a href="#6.3.2.2">6.3.2.2</a>
24272  conversion functions                                         data stream, see streams
24273    multibyte/wide character, <a href="#7.20.7">7.20.7</a>                           date and time header, <a href="#7.23">7.23</a>
24274       extended, <a href="#7.24.6">7.24.6</a>                                        Daylight Saving Time, <a href="#7.23.1">7.23.1</a>
24275       restartable, <a href="#7.24.6.3">7.24.6.3</a>                                   DBL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24276    multibyte/wide string, <a href="#7.20.8">7.20.8</a>                              DBL_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24277       restartable, <a href="#7.24.6.4">7.24.6.4</a>                                   DBL_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24278    numeric, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.20.1">7.20.1</a>                                   DBL_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24279       wide string, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.24.4.1">7.24.4.1</a>                          DBL_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24280    single byte/wide character, <a href="#7.24.6.1">7.24.6.1</a>                       DBL_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24281    time, <a href="#7.23.3">7.23.3</a>                                               DBL_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24282       wide character, <a href="#7.24.5">7.24.5</a>                                  DBL_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24283  conversion specifier, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>,           DBL_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24284       <a href="#7.24.2.2">7.24.2.2</a>                                                decimal constant, <a href="#6.4.4.1">6.4.4.1</a>
24285  conversion state, <a href="#7.20.7">7.20.7</a>, <a href="#7.24.6">7.24.6</a>, <a href="#7.24.6.2.1">7.24.6.2.1</a>,                decimal digit, <a href="#5.2.1">5.2.1</a>
24286       <a href="#7.24.6.3">7.24.6.3</a>, <a href="#7.24.6.3.2">7.24.6.3.2</a>, <a href="#7.24.6.3.3">7.24.6.3.3</a>, <a href="#7.24.6.4">7.24.6.4</a>,             decimal-point character, <a href="#7.1.1">7.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
24287       <a href="#7.24.6.4.1">7.24.6.4.1</a>, <a href="#7.24.6.4.2">7.24.6.4.2</a>                                  DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19.6.1">7.19.6.1</a>,
24288  conversion state functions, <a href="#7.24.6.2">7.24.6.2</a>                              <a href="#7.20.1.3">7.20.1.3</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.4.1.1">7.24.4.1.1</a>, <a href="#F.5">F.5</a>
24289  copying functions                                            declaration specifiers, <a href="#6.7">6.7</a>
24290    string, <a href="#7.21.2">7.21.2</a>                                             declarations, <a href="#6.7">6.7</a>
24291    wide string, <a href="#7.24.4.2">7.24.4.2</a>                                        function, <a href="#6.7.5.3">6.7.5.3</a>
24292  copysign functions, <a href="#7.3.9.4">7.3.9.4</a>, <a href="#7.12.11.1">7.12.11.1</a>, <a href="#F.3">F.3</a>,                   pointer, <a href="#6.7.5.1">6.7.5.1</a>
24293       <a href="#F.9.8.1">F.9.8.1</a>                                                   structure/union, <a href="#6.7.2.1">6.7.2.1</a>
24294  copysign type-generic macro, <a href="#7.22">7.22</a>                              typedef, <a href="#6.7.7">6.7.7</a>
24295  correctly rounded result, <a href="#3.9">3.9</a>                                declarator, <a href="#6.7.5">6.7.5</a>
24296  corresponding real type, <a href="#6.2.5">6.2.5</a>                                 abstract, <a href="#6.7.6">6.7.6</a>
24297  cos functions, <a href="#7.12.4.5">7.12.4.5</a>, <a href="#F.9.1.5">F.9.1.5</a>                             declarator type derivation, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.5">6.7.5</a>
24298  cos type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                            decrement operators, see arithmetic operators,
24299  cosh functions, <a href="#7.12.5.4">7.12.5.4</a>, <a href="#F.9.2.4">F.9.2.4</a>                                 increment and decrement
24300  cosh type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                           default argument promotions, <a href="#6.5.2.2">6.5.2.2</a>
24301  cpow functions, <a href="#7.3.8.2">7.3.8.2</a>, <a href="#G.6.4.1">G.6.4.1</a>                             default initialization, <a href="#6.7.8">6.7.8</a>
24302    type-generic macro for, <a href="#7.22">7.22</a>                               default label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
24303  cproj functions, <a href="#7.3.9.4">7.3.9.4</a>, <a href="#G.6">G.6</a>                                define preprocessing directive, <a href="#6.10.3">6.10.3</a>
24304  cproj type-generic macro, <a href="#7.22">7.22</a>                               defined operator, <a href="#6.10.1">6.10.1</a>, <a href="#6.10.8">6.10.8</a>
24305  creal functions, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#G.6">G.6</a>                                definition, <a href="#6.7">6.7</a>
24306  creal type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                            function, <a href="#6.9.1">6.9.1</a>
24307  csin functions, <a href="#7.3.5.5">7.3.5.5</a>, <a href="#G.6">G.6</a>                                 derived declarator types, <a href="#6.2.5">6.2.5</a>
24308 <!--page 537 indent 0-->
24309  derived types, <a href="#6.2.5">6.2.5</a>                                            end-of-file indicator, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.5.3">7.19.5.3</a>, <a href="#7.19.7.1">7.19.7.1</a>,
24310  designated initializer, <a href="#6.7.8">6.7.8</a>                                         <a href="#7.19.7.5">7.19.7.5</a>, <a href="#7.19.7.6">7.19.7.6</a>, <a href="#7.19.7.11">7.19.7.11</a>, <a href="#7.19.9.2">7.19.9.2</a>,
24311  destringizing, <a href="#6.10.9">6.10.9</a>                                                 <a href="#7.19.9.3">7.19.9.3</a>, <a href="#7.19.10.1">7.19.10.1</a>, <a href="#7.19.10.2">7.19.10.2</a>, <a href="#7.24.3.1">7.24.3.1</a>,
24312  device input/output, <a href="#5.1.2.3">5.1.2.3</a>                                          <a href="#7.24.3.10">7.24.3.10</a>
24313  diagnostic message, <a href="#3.10">3.10</a>, <a href="#5.1.1.3">5.1.1.3</a>                               end-of-file macro, see EOF macro
24314  diagnostics, <a href="#5.1.1.3">5.1.1.3</a>                                            end-of-line indicator, <a href="#5.2.1">5.2.1</a>
24315  diagnostics header, <a href="#7.2">7.2</a>                                         endif preprocessing directive, <a href="#6.10.1">6.10.1</a>
24316  difftime function, <a href="#7.23.2.2">7.23.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>
24317  digit, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>                                               enumerated type, <a href="#6.2.5">6.2.5</a>
24318  digraphs, <a href="#6.4.6">6.4.6</a>                                                 enumeration, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.2">6.7.2.2</a>
24319  direct input/output functions, <a href="#7.19.8">7.19.8</a>                           enumeration constant, <a href="#6.2.1">6.2.1</a>, <a href="#6.4.4.3">6.4.4.3</a>
24320  display device, <a href="#5.2.2">5.2.2</a>                                           enumeration content, <a href="#6.7.2.3">6.7.2.3</a>
24321  div function, <a href="#7.20.6.2">7.20.6.2</a>                                          enumeration members, <a href="#6.7.2.2">6.7.2.2</a>
24322  div_t type, <a href="#7.20">7.20</a>                                                enumeration specifiers, <a href="#6.7.2.2">6.7.2.2</a>
24323  division assignment operator (/=), <a href="#6.5.16.2">6.5.16.2</a>                     enumeration tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>
24324  division operator (/), <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>                        enumerator, <a href="#6.7.2.2">6.7.2.2</a>
24325  do statement, <a href="#6.8.5.2">6.8.5.2</a>                                           environment, <a href="#5">5</a>
24326  documentation of implementation, <a href="#4">4</a>                              environment functions, <a href="#7.20.4">7.20.4</a>
24327  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>,             environment list, <a href="#7.20.4.5">7.20.4.5</a>
24328        <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>,                   environmental considerations, <a href="#5.2">5.2</a>
24329        <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>,                 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.19.2">7.19.2</a>,
24330        <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>,                         <a href="#7.19.3">7.19.3</a>, <a href="#7.19.4.4">7.19.4.4</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.20.2.1">7.20.2.1</a>, <a href="#7.20.4.2">7.20.4.2</a>,
24331        <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>                       <a href="#7.24.2.1">7.24.2.1</a>
24332  dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>                                       EOF macro, <a href="#7.4">7.4</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.5.1">7.19.5.1</a>, <a href="#7.19.5.2">7.19.5.2</a>,
24333  double _Complex type, <a href="#6.2.5">6.2.5</a>                                           <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.19.6.7">7.19.6.7</a>, <a href="#7.19.6.9">7.19.6.9</a>, <a href="#7.19.6.11">7.19.6.11</a>,
24334  double _Complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>,                             <a href="#7.19.6.14">7.19.6.14</a>, <a href="#7.19.7.1">7.19.7.1</a>, <a href="#7.19.7.3">7.19.7.3</a>, <a href="#7.19.7.4">7.19.7.4</a>,
24335        <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.19.7.5">7.19.7.5</a>, <a href="#7.19.7.6">7.19.7.6</a>, <a href="#7.19.7.9">7.19.7.9</a>, <a href="#7.19.7.10">7.19.7.10</a>,
24336  double _Imaginary type, <a href="#G.2">G.2</a>                                           <a href="#7.19.7.11">7.19.7.11</a>, <a href="#7.24.1">7.24.1</a>, <a href="#7.24.2.2">7.24.2.2</a>, <a href="#7.24.2.4">7.24.2.4</a>,
24337  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.19.6.2">7.19.6.2</a>,                         <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.2.8">7.24.2.8</a>, <a href="#7.24.2.10">7.24.2.10</a>, <a href="#7.24.2.12">7.24.2.12</a>,
24338        <a href="#7.24.2.2">7.24.2.2</a>, <a href="#F.2">F.2</a>                                                   <a href="#7.24.3.4">7.24.3.4</a>, <a href="#7.24.6.1.1">7.24.6.1.1</a>, <a href="#7.24.6.1.2">7.24.6.1.2</a>
24339  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>,              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.8">6.7.8</a>
24340        <a href="#6.3.1.8">6.3.1.8</a>                                                   equal-to operator, see equality operator
24341  double-precision arithmetic, <a href="#5.1.2.3">5.1.2.3</a>                            equality expressions, <a href="#6.5.9">6.5.9</a>
24342  double-quote escape sequence (\"), <a href="#6.4.4.4">6.4.4.4</a>,                     equality operator (==), <a href="#6.5.9">6.5.9</a>
24343        <a href="#6.4.5">6.4.5</a>, <a href="#6.10.9">6.10.9</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>,
24344  double_t type, <a href="#7.12">7.12</a>, <a href="#J.5.6">J.5.6</a>                                            <a href="#7.20.1.3">7.20.1.3</a>, <a href="#7.20.1.4">7.20.1.4</a>, <a href="#7.24.4.1.1">7.24.4.1.1</a>, <a href="#7.24.4.1.2">7.24.4.1.2</a>, see
24345                                                                        also range error
24346  EDOM macro, <a href="#7.5">7.5</a>, <a href="#7.12.1">7.12.1</a>, see also domain error                  erf functions, <a href="#7.12.8.1">7.12.8.1</a>, <a href="#F.9.5.1">F.9.5.1</a>
24347  effective type, <a href="#6.5">6.5</a>                                             erf type-generic macro, <a href="#7.22">7.22</a>
24348  EILSEQ macro, <a href="#7.5">7.5</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.24.3.1">7.24.3.1</a>, <a href="#7.24.3.3">7.24.3.3</a>,                  erfc functions, <a href="#7.12.8.2">7.12.8.2</a>, <a href="#F.9.5.2">F.9.5.2</a>
24349        <a href="#7.24.6.3.2">7.24.6.3.2</a>, <a href="#7.24.6.3.3">7.24.6.3.3</a>, <a href="#7.24.6.4.1">7.24.6.4.1</a>, <a href="#7.24.6.4.2">7.24.6.4.2</a>,           erfc type-generic macro, <a href="#7.22">7.22</a>
24350        see also encoding error                                   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>,
24351  element type, <a href="#6.2.5">6.2.5</a>                                                   <a href="#7.12.1">7.12.1</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.9.3">7.19.9.3</a>, <a href="#7.19.10.4">7.19.10.4</a>,
24352  elif preprocessing directive, <a href="#6.10.1">6.10.1</a>                                  <a href="#7.20.1">7.20.1</a>, <a href="#7.20.1.3">7.20.1.3</a>, <a href="#7.20.1.4">7.20.1.4</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.24.3.1">7.24.3.1</a>,
24353  ellipsis punctuator (...), <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7.5.3">6.7.5.3</a>, <a href="#6.10.3">6.10.3</a>                   <a href="#7.24.3.3">7.24.3.3</a>, <a href="#7.24.4.1.1">7.24.4.1.1</a>, <a href="#7.24.4.1.2">7.24.4.1.2</a>, <a href="#7.24.6.3.2">7.24.6.3.2</a>,
24354  else preprocessing directive, <a href="#6.10.1">6.10.1</a>                                  <a href="#7.24.6.3.3">7.24.6.3.3</a>, <a href="#7.24.6.4.1">7.24.6.4.1</a>, <a href="#7.24.6.4.2">7.24.6.4.2</a>, <a href="#J.5.17">J.5.17</a>
24355  else statement, <a href="#6.8.4.1">6.8.4.1</a>                                         errno.h header, <a href="#7.5">7.5</a>, <a href="#7.26.3">7.26.3</a>
24356  empty statement, <a href="#6.8.3">6.8.3</a>                                          error
24357  encoding error, <a href="#7.19.3">7.19.3</a>, <a href="#7.24.3.1">7.24.3.1</a>, <a href="#7.24.3.3">7.24.3.3</a>,                        domain, see domain error
24358        <a href="#7.24.6.3.2">7.24.6.3.2</a>, <a href="#7.24.6.3.3">7.24.6.3.3</a>, <a href="#7.24.6.4.1">7.24.6.4.1</a>, <a href="#7.24.6.4.2">7.24.6.4.2</a>               encoding, see encoding error
24359  end-of-file, <a href="#7.24.1">7.24.1</a>                                                 range, see range error
24360 <!--page 538 indent 0-->
24361  error conditions, <a href="#7.12.1">7.12.1</a>                                     extended characters, <a href="#5.2.1">5.2.1</a>
24362  error functions, <a href="#7.12.8">7.12.8</a>, <a href="#F.9.5">F.9.5</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>,
24363  error indicator, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.5.3">7.19.5.3</a>, <a href="#7.19.7.1">7.19.7.1</a>,                      <a href="#7.18">7.18</a>
24364        <a href="#7.19.7.3">7.19.7.3</a>, <a href="#7.19.7.5">7.19.7.5</a>, <a href="#7.19.7.6">7.19.7.6</a>, <a href="#7.19.7.8">7.19.7.8</a>,                extended multibyte/wide character conversion
24365        <a href="#7.19.7.9">7.19.7.9</a>, <a href="#7.19.9.2">7.19.9.2</a>, <a href="#7.19.10.1">7.19.10.1</a>, <a href="#7.19.10.3">7.19.10.3</a>,                   utilities, <a href="#7.24.6">7.24.6</a>
24366        <a href="#7.24.3.1">7.24.3.1</a>, <a href="#7.24.3.3">7.24.3.3</a>                                     extensible wide character case mapping functions,
24367  error preprocessing directive, <a href="#4">4</a>, <a href="#6.10.5">6.10.5</a>                          <a href="#7.25.3.2">7.25.3.2</a>
24368  error-handling functions, <a href="#7.19.10">7.19.10</a>, <a href="#7.21.6.2">7.21.6.2</a>                  extensible wide character classification functions,
24369  escape character (\), <a href="#6.4.4.4">6.4.4.4</a>                                     <a href="#7.25.2.2">7.25.2.2</a>
24370  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>              extern storage-class specifier, <a href="#6.2.2">6.2.2</a>, <a href="#6.7.1">6.7.1</a>
24371  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>                  external definition, <a href="#6.9">6.9</a>
24372  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.7.5">F.7.5</a>                     external identifiers, underscore, <a href="#7.1.3">7.1.3</a>
24373  evaluation order, <a href="#6.5">6.5</a>                                        external linkage, <a href="#6.2.2">6.2.2</a>
24374  exceptional condition, <a href="#6.5">6.5</a>, <a href="#7.12.1">7.12.1</a>                           external name, <a href="#6.4.2.1">6.4.2.1</a>
24375  excess precision, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.8">6.3.1.8</a>,               external object definitions, <a href="#6.9.2">6.9.2</a>
24376        <a href="#6.8.6.4">6.8.6.4</a>
24377  excess range, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>           fabs functions, <a href="#7.12.7.2">7.12.7.2</a>, <a href="#F.9.4.2">F.9.4.2</a>
24378  exclusive OR operators                                       fabs type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
24379     bitwise (^), <a href="#6.5.11">6.5.11</a>                                       false macro, <a href="#7.16">7.16</a>
24380     bitwise assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>                         fclose function, <a href="#7.19.5.1">7.19.5.1</a>
24381  executable program, <a href="#5.1.1.1">5.1.1.1</a>                                  fdim functions, <a href="#7.12.12.1">7.12.12.1</a>, <a href="#F.9.9.1">F.9.9.1</a>
24382  execution character set, <a href="#5.2.1">5.2.1</a>                               fdim type-generic macro, <a href="#7.22">7.22</a>
24383  execution environment, <a href="#5">5</a>, <a href="#5.1.2">5.1.2</a>, see also                    FE_ALL_EXCEPT macro, <a href="#7.6">7.6</a>
24384        environmental limits                                   FE_DFL_ENV macro, <a href="#7.6">7.6</a>
24385  execution sequence, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.8">6.8</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>
24386  exit function, <a href="#5.1.2.2.3">5.1.2.2.3</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.20">7.20</a>, <a href="#7.20.4.3">7.20.4.3</a>,            FE_DOWNWARD macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
24387        <a href="#7.20.4.4">7.20.4.4</a>                                               FE_INEXACT macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
24388  EXIT_FAILURE macro, <a href="#7.20">7.20</a>, <a href="#7.20.4.3">7.20.4.3</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>
24389  EXIT_SUCCESS macro, <a href="#7.20">7.20</a>, <a href="#7.20.4.3">7.20.4.3</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>
24390  exp functions, <a href="#7.12.6.1">7.12.6.1</a>, <a href="#F.9.3.1">F.9.3.1</a>                             FE_TONEAREST macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
24391  exp type-generic macro, <a href="#7.22">7.22</a>                                 FE_TOWARDZERO macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
24392  exp2 functions, <a href="#7.12.6.2">7.12.6.2</a>, <a href="#F.9.3.2">F.9.3.2</a>                            FE_UNDERFLOW macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
24393  exp2 type-generic macro, <a href="#7.22">7.22</a>                                FE_UPWARD macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
24394  explicit conversion, <a href="#6.3">6.3</a>                                     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>
24395  expm1 functions, <a href="#7.12.6.3">7.12.6.3</a>, <a href="#F.9.3.3">F.9.3.3</a>                           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>
24396  expm1 type-generic macro, <a href="#7.22">7.22</a>                               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>
24397  exponent part, <a href="#6.4.4.2">6.4.4.2</a>                                       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>
24398  exponential functions                                        feholdexcept function, <a href="#7.6.4.2">7.6.4.2</a>, <a href="#7.6.4.3">7.6.4.3</a>,
24399     complex, <a href="#7.3.7">7.3.7</a>, <a href="#G.6.3">G.6.3</a>                                        <a href="#7.6.4.4">7.6.4.4</a>, <a href="#F.3">F.3</a>
24400     real, <a href="#7.12.6">7.12.6</a>, <a href="#F.9.3">F.9.3</a>                                       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>
24401  expression, <a href="#6.5">6.5</a>                                              FENV_ACCESS pragma, <a href="#6.10.6">6.10.6</a>, <a href="#7.6.1">7.6.1</a>, <a href="#F.7">F.7</a>, <a href="#F.8">F.8</a>,
24402     assignment, <a href="#6.5.16">6.5.16</a>                                           <a href="#F.9">F.9</a>
24403     cast, <a href="#6.5.4">6.5.4</a>                                               fenv_t type, <a href="#7.6">7.6</a>
24404     constant, <a href="#6.6">6.6</a>                                             feof function, <a href="#7.19.10.2">7.19.10.2</a>
24405     full, <a href="#6.8">6.8</a>                                                 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>
24406     order of evaluation, <a href="#6.5">6.5</a>                                  ferror function, <a href="#7.19.10.3">7.19.10.3</a>
24407     parenthesized, <a href="#6.5.1">6.5.1</a>                                      fesetenv function, <a href="#7.6.4.3">7.6.4.3</a>, <a href="#F.3">F.3</a>
24408     primary, <a href="#6.5.1">6.5.1</a>                                            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>
24409     unary, <a href="#6.5.3">6.5.3</a>                                              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>
24410  expression statement, <a href="#6.8.3">6.8.3</a>                                  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>
24411  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>                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>
24412 <!--page 539 indent 0-->
24413  fexcept_t type, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                      floating-point status flag, <a href="#7.6">7.6</a>, <a href="#F.7.6">F.7.6</a>
24414  fflush function, <a href="#7.19.5.2">7.19.5.2</a>, <a href="#7.19.5.3">7.19.5.3</a>                           floor functions, <a href="#7.12.9.2">7.12.9.2</a>, <a href="#F.9.6.2">F.9.6.2</a>
24415  fgetc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.7.1">7.19.7.1</a>,                     floor type-generic macro, <a href="#7.22">7.22</a>
24416       <a href="#7.19.7.5">7.19.7.5</a>, <a href="#7.19.8.1">7.19.8.1</a>                                       FLT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24417  fgetpos function, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.9.1">7.19.9.1</a>, <a href="#7.19.9.3">7.19.9.3</a>                  FLT_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24418  fgets function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.2">7.19.7.2</a>                              FLT_EVAL_METHOD macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.8.6.4">6.8.6.4</a>,
24419  fgetwc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.24.3.1">7.24.3.1</a>,                         <a href="#7.12">7.12</a>
24420       <a href="#7.24.3.6">7.24.3.6</a>                                                 FLT_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24421  fgetws function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3.2">7.24.3.2</a>                             FLT_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24422  field width, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>                                FLT_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24423  file, <a href="#7.19.3">7.19.3</a>                                                   FLT_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24424    access functions, <a href="#7.19.5">7.19.5</a>                                    FLT_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24425    name, <a href="#7.19.3">7.19.3</a>                                                FLT_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24426    operations, <a href="#7.19.4">7.19.4</a>                                          FLT_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24427    position indicator, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.3">7.19.3</a>,                 FLT_RADIX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.20.1.3">7.20.1.3</a>,
24428          <a href="#7.19.5.3">7.19.5.3</a>, <a href="#7.19.7.1">7.19.7.1</a>, <a href="#7.19.7.3">7.19.7.3</a>, <a href="#7.19.7.11">7.19.7.11</a>,                   <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.4.1.1">7.24.4.1.1</a>
24429          <a href="#7.19.8.1">7.19.8.1</a>, <a href="#7.19.8.2">7.19.8.2</a>, <a href="#7.19.9.1">7.19.9.1</a>, <a href="#7.19.9.2">7.19.9.2</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>
24430          <a href="#7.19.9.3">7.19.9.3</a>, <a href="#7.19.9.4">7.19.9.4</a>, <a href="#7.19.9.5">7.19.9.5</a>, <a href="#7.24.3.1">7.24.3.1</a>,               fma functions, <a href="#7.12">7.12</a>, <a href="#7.12.13.1">7.12.13.1</a>, <a href="#F.9.10.1">F.9.10.1</a>
24431          <a href="#7.24.3.3">7.24.3.3</a>, <a href="#7.24.3.10">7.24.3.10</a>                                   fma type-generic macro, <a href="#7.22">7.22</a>
24432    positioning functions, <a href="#7.19.9">7.19.9</a>                               fmax functions, <a href="#7.12.12.2">7.12.12.2</a>, <a href="#F.9.9.2">F.9.9.2</a>
24433  file scope, <a href="#6.2.1">6.2.1</a>, <a href="#6.9">6.9</a>                                         fmax type-generic macro, <a href="#7.22">7.22</a>
24434  FILE type, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>                                     fmin functions, <a href="#7.12.12.3">7.12.12.3</a>, <a href="#F.9.9.3">F.9.9.3</a>
24435  FILENAME_MAX macro, <a href="#7.19.1">7.19.1</a>                                    fmin type-generic macro, <a href="#7.22">7.22</a>
24436  flags, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>                                      fmod functions, <a href="#7.12.10.1">7.12.10.1</a>, <a href="#F.9.7.1">F.9.7.1</a>
24437    floating-point status, see floating-point status              fmod type-generic macro, <a href="#7.22">7.22</a>
24438          flag                                                   fopen function, <a href="#7.19.5.3">7.19.5.3</a>, <a href="#7.19.5.4">7.19.5.4</a>
24439  flexible array member, <a href="#6.7.2.1">6.7.2.1</a>                                 FOPEN_MAX macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.4.3">7.19.4.3</a>
24440  float _Complex type, <a href="#6.2.5">6.2.5</a>                                    for statement, <a href="#6.8.5">6.8.5</a>, <a href="#6.8.5.3">6.8.5.3</a>
24441  float _Complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>,                      form-feed character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>
24442       <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>                                         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>,
24443  float _Imaginary type, <a href="#G.2">G.2</a>                                         <a href="#7.4.1.10">7.4.1.10</a>
24444  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>                        formal argument (deprecated), <a href="#3.15">3.15</a>
24445  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>,             formal parameter, <a href="#3.15">3.15</a>
24446       <a href="#6.3.1.8">6.3.1.8</a>                                                  formatted input/output functions, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.19.6">7.19.6</a>
24447  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.20.1.3">7.20.1.3</a>,                     wide character, <a href="#7.24.2">7.24.2</a>
24448       <a href="#7.24.4.1.1">7.24.4.1.1</a>                                               fortran keyword, <a href="#J.5.9">J.5.9</a>
24449  float_t type, <a href="#7.12">7.12</a>, <a href="#J.5.6">J.5.6</a>                                     forward reference, <a href="#3.11">3.11</a>
24450  floating constant, <a href="#6.4.4.2">6.4.4.2</a>                                     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
24451  floating suffix, f or <a href="#F">F</a>, <a href="#6.4.4.2">6.4.4.2</a>                                     also contracted expression
24452  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>,           FP_FAST_FMA macro, <a href="#7.12">7.12</a>
24453       <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>                                                 FP_FAST_FMAF macro, <a href="#7.12">7.12</a>
24454  floating types, <a href="#6.2.5">6.2.5</a>, <a href="#6.11.1">6.11.1</a>                                  FP_FAST_FMAL macro, <a href="#7.12">7.12</a>
24455  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>,              FP_ILOGB0 macro, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>
24456       <a href="#7.20.1.3">7.20.1.3</a>, <a href="#F.5">F.5</a>, see also contracted expression            FP_ILOGBNAN macro, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>
24457  floating-point arithmetic functions, <a href="#7.12">7.12</a>, <a href="#F.9">F.9</a>                 FP_INFINITE macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
24458  floating-point classification functions, <a href="#7.12.3">7.12.3</a>                 FP_NAN macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
24459  floating-point control mode, <a href="#7.6">7.6</a>, <a href="#F.7.6">F.7.6</a>                        FP_NORMAL macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
24460  floating-point environment, <a href="#7.6">7.6</a>, <a href="#F.7">F.7</a>, <a href="#F.7.6">F.7.6</a>                    FP_SUBNORMAL macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
24461  floating-point exception, <a href="#7.6">7.6</a>, <a href="#7.6.2">7.6.2</a>, <a href="#F.9">F.9</a>                      FP_ZERO macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
24462  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>                        fpclassify macro, <a href="#7.12.3.1">7.12.3.1</a>, <a href="#F.3">F.3</a>
24463  floating-point rounding mode, <a href="#5.2.4.2.2">5.2.4.2.2</a>                        fpos_t type, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.2">7.19.2</a>
24464 <!--page 540 indent 0-->
24465  fprintf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.1">7.19.6.1</a>,                       language, <a href="#6.11">6.11</a>
24466        <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.19.6.3">7.19.6.3</a>, <a href="#7.19.6.5">7.19.6.5</a>, <a href="#7.19.6.6">7.19.6.6</a>,                    library, <a href="#7.26">7.26</a>
24467        <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.24.2.2">7.24.2.2</a>, <a href="#F.3">F.3</a>                                  fwide function, <a href="#7.19.2">7.19.2</a>, <a href="#7.24.3.5">7.24.3.5</a>
24468  fputc function, <a href="#5.2.2">5.2.2</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.7.3">7.19.7.3</a>,               fwprintf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.2">7.19.6.2</a>,
24469        <a href="#7.19.7.8">7.19.7.8</a>, <a href="#7.19.8.2">7.19.8.2</a>                                            <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>, <a href="#7.24.2.3">7.24.2.3</a>, <a href="#7.24.2.5">7.24.2.5</a>,
24470  fputs function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.4">7.19.7.4</a>                                    <a href="#7.24.2.11">7.24.2.11</a>
24471  fputwc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.24.3.3">7.24.3.3</a>,                     fwrite function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.8.2">7.19.8.2</a>
24472        <a href="#7.24.3.8">7.24.3.8</a>                                                 fwscanf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.2.2">7.24.2.2</a>,
24473  fputws function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3.4">7.24.3.4</a>                                   <a href="#7.24.2.4">7.24.2.4</a>, <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.2.12">7.24.2.12</a>, <a href="#7.24.3.10">7.24.3.10</a>
24474  fread function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.8.1">7.19.8.1</a>
24475  free function, <a href="#7.20.3.2">7.20.3.2</a>, <a href="#7.20.3.4">7.20.3.4</a>                              gamma functions, <a href="#7.12.8">7.12.8</a>, <a href="#F.9.5">F.9.5</a>
24476  freestanding execution environment, <a href="#4">4</a>, <a href="#5.1.2">5.1.2</a>,                  general utilities, <a href="#7.20">7.20</a>
24477        <a href="#5.1.2.1">5.1.2.1</a>                                                    wide string, <a href="#7.24.4">7.24.4</a>
24478  freopen function, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.5.4">7.19.5.4</a>                             general wide string utilities, <a href="#7.24.4">7.24.4</a>
24479  frexp functions, <a href="#7.12.6.4">7.12.6.4</a>, <a href="#F.9.3.4">F.9.3.4</a>                             generic parameters, <a href="#7.22">7.22</a>
24480  frexp type-generic macro, <a href="#7.22">7.22</a>                                 getc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.5">7.19.7.5</a>, <a href="#7.19.7.6">7.19.7.6</a>
24481  fscanf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.2">7.19.6.2</a>,                      getchar function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.6">7.19.7.6</a>
24482        <a href="#7.19.6.4">7.19.6.4</a>, <a href="#7.19.6.7">7.19.6.7</a>, <a href="#7.19.6.9">7.19.6.9</a>, <a href="#F.3">F.3</a>                        getenv function, <a href="#7.20.4.5">7.20.4.5</a>
24483  fseek function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.5.3">7.19.5.3</a>, <a href="#7.19.7.11">7.19.7.11</a>,                   gets function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.7">7.19.7.7</a>, <a href="#7.26.9">7.26.9</a>
24484        <a href="#7.19.9.2">7.19.9.2</a>, <a href="#7.19.9.4">7.19.9.4</a>, <a href="#7.19.9.5">7.19.9.5</a>, <a href="#7.24.3.10">7.24.3.10</a>                  getwc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3.6">7.24.3.6</a>, <a href="#7.24.3.7">7.24.3.7</a>
24485  fsetpos function, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.5.3">7.19.5.3</a>, <a href="#7.19.7.11">7.19.7.11</a>,                 getwchar function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3.7">7.24.3.7</a>
24486        <a href="#7.19.9.1">7.19.9.1</a>, <a href="#7.19.9.3">7.19.9.3</a>, <a href="#7.24.3.10">7.24.3.10</a>                            gmtime function, <a href="#7.23.3.3">7.23.3.3</a>
24487  ftell function, <a href="#7.19.9.2">7.19.9.2</a>, <a href="#7.19.9.4">7.19.9.4</a>                             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>
24488  full declarator, <a href="#6.7.5">6.7.5</a>                                         graphic characters, <a href="#5.2.1">5.2.1</a>
24489  full expression, <a href="#6.8">6.8</a>                                           greater-than operator (&gt;), <a href="#6.5.8">6.5.8</a>
24490  fully buffered stream, <a href="#7.19.3">7.19.3</a>                                  greater-than-or-equal-to operator (&gt;=), <a href="#6.5.8">6.5.8</a>
24491  function
24492     argument, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>                                    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
24493     body, <a href="#6.9.1">6.9.1</a>                                                 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>
24494     call, <a href="#6.5.2.2">6.5.2.2</a>                                               hexadecimal constant, <a href="#6.4.4.1">6.4.4.1</a>
24495        library, <a href="#7.1.4">7.1.4</a>                                           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>
24496     declarator, <a href="#6.7.5.3">6.7.5.3</a>, <a href="#6.11.6">6.11.6</a>                                 hexadecimal prefix, <a href="#6.4.4.1">6.4.4.1</a>
24497     definition, <a href="#6.7.5.3">6.7.5.3</a>, <a href="#6.9.1">6.9.1</a>, <a href="#6.11.7">6.11.7</a>                           hexadecimal-character escape sequence
24498     designator, <a href="#6.3.2.1">6.3.2.1</a>                                              (\x hexadecimal digits), <a href="#6.4.4.4">6.4.4.4</a>
24499     image, <a href="#5.2.3">5.2.3</a>                                                high-order bit, <a href="#3.6">3.6</a>
24500     library, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7.1.4">7.1.4</a>                                     horizontal-tab character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>
24501     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>                       horizontal-tab escape sequence (\r), <a href="#7.25.2.1.3">7.25.2.1.3</a>
24502     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>                   horizontal-tab escape sequence (\t), <a href="#5.2.2">5.2.2</a>,
24503     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>,                <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>
24504           <a href="#6.7.5.3">6.7.5.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>           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>
24505     prototype scope, <a href="#6.2.1">6.2.1</a>, <a href="#6.7.5.2">6.7.5.2</a>                             HUGE_VAL macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.20.1.3">7.20.1.3</a>,
24506     recursive call, <a href="#6.5.2.2">6.5.2.2</a>                                          <a href="#7.24.4.1.1">7.24.4.1.1</a>, <a href="#F.9">F.9</a>
24507     return, <a href="#6.8.6.4">6.8.6.4</a>                                             HUGE_VALF macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.20.1.3">7.20.1.3</a>,
24508     scope, <a href="#6.2.1">6.2.1</a>                                                     <a href="#7.24.4.1.1">7.24.4.1.1</a>, <a href="#F.9">F.9</a>
24509     type, <a href="#6.2.5">6.2.5</a>                                                 HUGE_VALL macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.20.1.3">7.20.1.3</a>,
24510     type conversion, <a href="#6.3.2.1">6.3.2.1</a>                                         <a href="#7.24.4.1.1">7.24.4.1.1</a>, <a href="#F.9">F.9</a>
24511  function specifiers, <a href="#6.7.4">6.7.4</a>                                      hyperbolic functions
24512  function type, <a href="#6.2.5">6.2.5</a>                                             complex, <a href="#7.3.6">7.3.6</a>, <a href="#G.6.2">G.6.2</a>
24513  function-call operator (( )), <a href="#6.5.2.2">6.5.2.2</a>                            real, <a href="#7.12.5">7.12.5</a>, <a href="#F.9.2">F.9.2</a>
24514  function-like macro, <a href="#6.10.3">6.10.3</a>                                    hypot functions, <a href="#7.12.7.3">7.12.7.3</a>, <a href="#F.9.4.3">F.9.4.3</a>
24515  future directions                                              hypot type-generic macro, <a href="#7.22">7.22</a>
24516 <!--page 541 indent 0-->
24517  <a href="#I">I</a> macro, <a href="#7.3.1">7.3.1</a>, <a href="#7.3.9.4">7.3.9.4</a>, <a href="#G.6">G.6</a>                                    initial position, <a href="#5.2.2">5.2.2</a>
24518  identifier, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.5.1">6.5.1</a>                                       initial shift state, <a href="#5.2.1.2">5.2.1.2</a>
24519     linkage, see linkage                                         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.8">6.7.8</a>,
24520    maximum length, <a href="#6.4.2.1">6.4.2.1</a>                                             <a href="#F.7.5">F.7.5</a>
24521     name spaces, <a href="#6.2.3">6.2.3</a>                                              in blocks, <a href="#6.8">6.8</a>
24522     reserved, <a href="#6.4.1">6.4.1</a>, <a href="#7.1.3">7.1.3</a>                                       initializer, <a href="#6.7.8">6.7.8</a>
24523    scope, <a href="#6.2.1">6.2.1</a>                                                     permitted form, <a href="#6.6">6.6</a>
24524     type, <a href="#6.2.5">6.2.5</a>                                                     string literal, <a href="#6.3.2.1">6.3.2.1</a>
24525  identifier list, <a href="#6.7.5">6.7.5</a>                                           inline, <a href="#6.7.4">6.7.4</a>
24526  identifier nondigit, <a href="#6.4.2.1">6.4.2.1</a>                                     inner scope, <a href="#6.2.1">6.2.1</a>
24527  IEC 559, <a href="#F.1">F.1</a>                                                    input failure, <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.2.8">7.24.2.8</a>, <a href="#7.24.2.10">7.24.2.10</a>
24528  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">6.10.8</a>, <a href="#7.3.3">7.3.3</a>, <a href="#7.6">7.6</a>,           input/output functions
24529        <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>, <a href="#H.1">H.1</a>               character, <a href="#7.19.7">7.19.7</a>
24530  IEEE 754, <a href="#F.1">F.1</a>                                                      direct, <a href="#7.19.8">7.19.8</a>
24531  IEEE 854, <a href="#F.1">F.1</a>                                                      formatted, <a href="#7.19.6">7.19.6</a>
24532  IEEE floating-point arithmetic standard, see                           wide character, <a href="#7.24.2">7.24.2</a>
24533        IEC 60559, ANSI/IEEE 754,                                    wide character, <a href="#7.24.3">7.24.3</a>
24534        ANSI/IEEE 854                                                   formatted, <a href="#7.24.2">7.24.2</a>
24535  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>,               input/output header, <a href="#7.19">7.19</a>
24536        <a href="#6.10.1">6.10.1</a>, <a href="#7.1.4">7.1.4</a>                                             input/output, device, <a href="#5.1.2.3">5.1.2.3</a>
24537  if statement, <a href="#6.8.4.1">6.8.4.1</a>                                           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>
24538  ifdef preprocessing directive, <a href="#6.10.1">6.10.1</a>                           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>,
24539  ifndef preprocessing directive, <a href="#6.10.1">6.10.1</a>                                <a href="#6.3.1.8">6.3.1.8</a>
24540  ilogb functions, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>, <a href="#F.9.3.5">F.9.3.5</a>                        INT_FASTN_MAX macros, <a href="#7.18.2.3">7.18.2.3</a>
24541  ilogb type-generic macro, <a href="#7.22">7.22</a>                                  INT_FASTN_MIN macros, <a href="#7.18.2.3">7.18.2.3</a>
24542  imaginary macro, <a href="#7.3.1">7.3.1</a>, <a href="#G.6">G.6</a>                                     int_fastN_t types, <a href="#7.18.1.3">7.18.1.3</a>
24543  imaginary numbers, <a href="#G">G</a>                                            INT_LEASTN_MAX macros, <a href="#7.18.2.2">7.18.2.2</a>
24544  imaginary type domain, <a href="#G.2">G.2</a>                                      INT_LEASTN_MIN macros, <a href="#7.18.2.2">7.18.2.2</a>
24545  imaginary types, <a href="#G">G</a>                                              int_leastN_t types, <a href="#7.18.1.2">7.18.1.2</a>
24546  imaxabs function, <a href="#7.8.2.1">7.8.2.1</a>                                       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>
24547  imaxdiv function, <a href="#7.8">7.8</a>, <a href="#7.8.2.2">7.8.2.2</a>                                  INT_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.12">7.12</a>
24548  imaxdiv_t type, <a href="#7.8">7.8</a>                                             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>,
24549  implementation, <a href="#3.12">3.12</a>                                                  <a href="#7.20.6">7.20.6</a>
24550  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>,                integer character constant, <a href="#6.4.4.4">6.4.4.4</a>
24551        <a href="#6.7.5">6.7.5</a>, <a href="#6.8.4.2">6.8.4.2</a>, <a href="#E">E</a>, see also environmental                 integer constant, <a href="#6.4.4.1">6.4.4.1</a>
24552        limits                                                    integer constant expression, <a href="#6.6">6.6</a>
24553  implementation-defined behavior, <a href="#3.4.1">3.4.1</a>, <a href="#4">4</a>, <a href="#J.3">J.3</a>                   integer conversion rank, <a href="#6.3.1.1">6.3.1.1</a>
24554  implementation-defined value, <a href="#3.17.1">3.17.1</a>                             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>,
24555  implicit conversion, <a href="#6.3">6.3</a>                                              <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.18.2">7.18.2</a>, <a href="#7.18.3">7.18.3</a>,
24556  implicit initialization, <a href="#6.7.8">6.7.8</a>                                        <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>
24557  include preprocessing directive, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.2">6.10.2</a>                integer suffix, <a href="#6.4.4.1">6.4.4.1</a>
24558  inclusive OR operators                                          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>,
24559     bitwise (|), <a href="#6.5.12">6.5.12</a>                                                <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>
24560     bitwise assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>                            integer types, <a href="#6.2.5">6.2.5</a>, <a href="#7.18">7.18</a>
24561  incomplete type, <a href="#6.2.5">6.2.5</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.18">7.18</a>
24562  increment operators, see arithmetic operators,                  interactive device, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.5.3">7.19.5.3</a>
24563        increment and decrement                                   internal linkage, <a href="#6.2.2">6.2.2</a>
24564  indeterminate value, <a href="#3.17.2">3.17.2</a>                                     internal name, <a href="#6.4.2.1">6.4.2.1</a>
24565  indirection operator (*), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                      interrupt, <a href="#5.2.3">5.2.3</a>
24566  inequality operator (!=), <a href="#6.5.9">6.5.9</a>                                 INTMAX_C macro, <a href="#7.18.4.2">7.18.4.2</a>
24567  INFINITY macro, <a href="#7.3.9.4">7.3.9.4</a>, <a href="#7.12">7.12</a>, <a href="#F.2.1">F.2.1</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.18.2.5">7.18.2.5</a>
24568 <!--page 542 indent 0-->
24569  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.18.2.5">7.18.2.5</a>            iswalpha function, <a href="#7.25.2.1.1">7.25.2.1.1</a>, <a href="#7.25.2.1.2">7.25.2.1.2</a>,
24570  intmax_t type, <a href="#7.18.1.5">7.18.1.5</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>,                  <a href="#7.25.2.2.1">7.25.2.2.1</a>
24571      <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>                                  iswblank function, <a href="#7.25.2.1.3">7.25.2.1.3</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>
24572  INTN_C macros, <a href="#7.18.4.1">7.18.4.1</a>                                 iswcntrl function, <a href="#7.25.2.1.2">7.25.2.1.2</a>, <a href="#7.25.2.1.4">7.25.2.1.4</a>,
24573  INTN_MAX macros, <a href="#7.18.2.1">7.18.2.1</a>                                     <a href="#7.25.2.1.7">7.25.2.1.7</a>, <a href="#7.25.2.1.11">7.25.2.1.11</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>
24574  INTN_MIN macros, <a href="#7.18.2.1">7.18.2.1</a>                               iswctype function, <a href="#7.25.2.2.1">7.25.2.2.1</a>, <a href="#7.25.2.2.2">7.25.2.2.2</a>
24575  intN_t types, <a href="#7.18.1.1">7.18.1.1</a>                                  iswdigit function, <a href="#7.25.2.1.1">7.25.2.1.1</a>, <a href="#7.25.2.1.2">7.25.2.1.2</a>,
24576  INTPTR_MAX macro, <a href="#7.18.2.4">7.18.2.4</a>                                    <a href="#7.25.2.1.5">7.25.2.1.5</a>, <a href="#7.25.2.1.7">7.25.2.1.7</a>, <a href="#7.25.2.1.11">7.25.2.1.11</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>
24577  INTPTR_MIN macro, <a href="#7.18.2.4">7.18.2.4</a>                              iswgraph function, <a href="#7.25.2.1">7.25.2.1</a>, <a href="#7.25.2.1.6">7.25.2.1.6</a>,
24578  intptr_t type, <a href="#7.18.1.4">7.18.1.4</a>                                       <a href="#7.25.2.1.10">7.25.2.1.10</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>
24579  inttypes.h header, <a href="#7.8">7.8</a>, <a href="#7.26.4">7.26.4</a>                          iswlower function, <a href="#7.25.2.1.2">7.25.2.1.2</a>, <a href="#7.25.2.1.7">7.25.2.1.7</a>,
24580  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>                  <a href="#7.25.2.2.1">7.25.2.2.1</a>, <a href="#7.25.3.1.1">7.25.3.1.1</a>, <a href="#7.25.3.1.2">7.25.3.1.2</a>
24581  isalpha function, <a href="#7.4.1.1">7.4.1.1</a>, <a href="#7.4.1.2">7.4.1.2</a>                      iswprint function, <a href="#7.25.2.1.6">7.25.2.1.6</a>, <a href="#7.25.2.1.8">7.25.2.1.8</a>,
24582  isblank function, <a href="#7.4.1.3">7.4.1.3</a>                                     <a href="#7.25.2.2.1">7.25.2.2.1</a>
24583  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>,            iswpunct function, <a href="#7.25.2.1">7.25.2.1</a>, <a href="#7.25.2.1.2">7.25.2.1.2</a>,
24584      <a href="#7.4.1.11">7.4.1.11</a>                                                  <a href="#7.25.2.1.7">7.25.2.1.7</a>, <a href="#7.25.2.1.9">7.25.2.1.9</a>, <a href="#7.25.2.1.10">7.25.2.1.10</a>,
24585  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>,                  <a href="#7.25.2.1.11">7.25.2.1.11</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>
24586      <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>                         iswspace function, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>,
24587  isfinite macro, <a href="#7.12.3.2">7.12.3.2</a>, <a href="#F.3">F.3</a>                                 <a href="#7.24.4.1.1">7.24.4.1.1</a>, <a href="#7.24.4.1.2">7.24.4.1.2</a>, <a href="#7.25.2.1.2">7.25.2.1.2</a>, <a href="#7.25.2.1.6">7.25.2.1.6</a>,
24588  isgraph function, <a href="#7.4.1.6">7.4.1.6</a>                                     <a href="#7.25.2.1.7">7.25.2.1.7</a>, <a href="#7.25.2.1.9">7.25.2.1.9</a>, <a href="#7.25.2.1.10">7.25.2.1.10</a>,
24589  isgreater macro, <a href="#7.12.14.1">7.12.14.1</a>, <a href="#F.3">F.3</a>                               <a href="#7.25.2.1.11">7.25.2.1.11</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>
24590  isgreaterequal macro, <a href="#7.12.14.2">7.12.14.2</a>, <a href="#F.3">F.3</a>                    iswupper function, <a href="#7.25.2.1.2">7.25.2.1.2</a>, <a href="#7.25.2.1.11">7.25.2.1.11</a>,
24591  isinf macro, <a href="#7.12.3.3">7.12.3.3</a>                                         <a href="#7.25.2.2.1">7.25.2.2.1</a>, <a href="#7.25.3.1.1">7.25.3.1.1</a>, <a href="#7.25.3.1.2">7.25.3.1.2</a>
24592  isless macro, <a href="#7.12.14.3">7.12.14.3</a>, <a href="#F.3">F.3</a>                            iswxdigit function, <a href="#7.25.2.1.12">7.25.2.1.12</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>
24593  islessequal macro, <a href="#7.12.14.4">7.12.14.4</a>, <a href="#F.3">F.3</a>                       isxdigit function, <a href="#7.4.1.12">7.4.1.12</a>, <a href="#7.11.1.1">7.11.1.1</a>
24594  islessgreater macro, <a href="#7.12.14.5">7.12.14.5</a>, <a href="#F.3">F.3</a>                     italic type convention, <a href="#3">3</a>, <a href="#6.1">6.1</a>
24595  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>,            iteration statements, <a href="#6.8.5">6.8.5</a>
24596      <a href="#7.4.2.2">7.4.2.2</a>
24597  isnan macro, <a href="#7.12.3.4">7.12.3.4</a>, <a href="#F.3">F.3</a>                              jmp_buf type, <a href="#7.13">7.13</a>
24598  isnormal macro, <a href="#7.12.3.5">7.12.3.5</a>                                jump statements, <a href="#6.8.6">6.8.6</a>
24599  ISO 31-11, <a href="#2">2</a>, <a href="#3">3</a>
24600  ISO 4217, <a href="#2">2</a>, <a href="#7.11.2.1">7.11.2.1</a>                                   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>
24601  ISO 8601, <a href="#2">2</a>, <a href="#7.23.3.5">7.23.3.5</a>                                   known constant size, <a href="#6.2.5">6.2.5</a>
24602  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">6.10.8</a>
24603  ISO/IEC 10976-1, <a href="#H.1">H.1</a>                                    L_tmpnam macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.4.4">7.19.4.4</a>
24604  ISO/IEC 2382-1, <a href="#2">2</a>, <a href="#3">3</a>                                    label name, <a href="#6.2.1">6.2.1</a>, <a href="#6.2.3">6.2.3</a>
24605  ISO/IEC 646, <a href="#2">2</a>, <a href="#5.2.1.1">5.2.1.1</a>                                 labeled statement, <a href="#6.8.1">6.8.1</a>
24606  ISO/IEC 9945-2, <a href="#7.11">7.11</a>                                    labs function, <a href="#7.20.6.1">7.20.6.1</a>
24607  ISO/IEC TR 10176, <a href="#D">D</a>                                     language, <a href="#6">6</a>
24608  iso646.h header, <a href="#4">4</a>, <a href="#7.9">7.9</a>                                    future directions, <a href="#6.11">6.11</a>
24609  isprint function, <a href="#5.2.2">5.2.2</a>, <a href="#7.4.1.8">7.4.1.8</a>                           syntax summary, <a href="#A">A</a>
24610  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>,            Latin alphabet, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.2.1">6.4.2.1</a>
24611      <a href="#7.4.1.11">7.4.1.11</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>
24612  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>,            LC_COLLATE macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.21.4.3">7.21.4.3</a>,
24613      <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.19.6.2">7.19.6.2</a>, <a href="#7.20.1.3">7.20.1.3</a>,                   <a href="#7.24.4.4.2">7.24.4.4.2</a>
24614      <a href="#7.20.1.4">7.20.1.4</a>, <a href="#7.24.2.2">7.24.2.2</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.20">7.20</a>, <a href="#7.20.7">7.20.7</a>,
24615  isunordered macro, <a href="#7.12.14.6">7.12.14.6</a>, <a href="#F.3">F.3</a>                             <a href="#7.20.8">7.20.8</a>, <a href="#7.24.6">7.24.6</a>, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.2.2.1">7.25.2.2.1</a>, <a href="#7.25.2.2.2">7.25.2.2.2</a>,
24616  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>,                 <a href="#7.25.3.2.1">7.25.3.2.1</a>, <a href="#7.25.3.2.2">7.25.3.2.2</a>
24617      <a href="#7.4.2.2">7.4.2.2</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>
24618  iswalnum function, <a href="#7.25.2.1.1">7.25.2.1.1</a>, <a href="#7.25.2.1.9">7.25.2.1.9</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>
24619      <a href="#7.25.2.1.10">7.25.2.1.10</a>, <a href="#7.25.2.2.1">7.25.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.23.3.5">7.23.3.5</a>
24620 <!--page 543 indent 0-->
24621  lconv structure type, <a href="#7.11">7.11</a>                                 llabs function, <a href="#7.20.6.1">7.20.6.1</a>
24622  LDBL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                                  lldiv function, <a href="#7.20.6.2">7.20.6.2</a>
24623  LDBL_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                              lldiv_t type, <a href="#7.20">7.20</a>
24624  LDBL_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                             LLONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.20.1.4">7.20.1.4</a>,
24625  LDBL_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                                       <a href="#7.24.4.1.2">7.24.4.1.2</a>
24626  LDBL_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                           LLONG_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.20.1.4">7.20.1.4</a>,
24627  LDBL_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                                   <a href="#7.24.4.1.2">7.24.4.1.2</a>
24628  LDBL_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                                  llrint functions, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#F.3">F.3</a>, <a href="#F.9.6.5">F.9.6.5</a>
24629  LDBL_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                           llrint type-generic macro, <a href="#7.22">7.22</a>
24630  LDBL_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>                              llround functions, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.9.6.7">F.9.6.7</a>
24631  ldexp functions, <a href="#7.12.6.6">7.12.6.6</a>, <a href="#F.9.3.6">F.9.3.6</a>                         llround type-generic macro, <a href="#7.22">7.22</a>
24632  ldexp type-generic macro, <a href="#7.22">7.22</a>                             local time, <a href="#7.23.1">7.23.1</a>
24633  ldiv function, <a href="#7.20.6.2">7.20.6.2</a>                                    locale, <a href="#3.4.2">3.4.2</a>
24634  ldiv_t type, <a href="#7.20">7.20</a>                                          locale-specific behavior, <a href="#3.4.2">3.4.2</a>, <a href="#J.4">J.4</a>
24635  leading underscore in identifiers, <a href="#7.1.3">7.1.3</a>                    locale.h header, <a href="#7.11">7.11</a>, <a href="#7.26.5">7.26.5</a>
24636  left-shift assignment operator (&lt;&lt;=), <a href="#6.5.16.2">6.5.16.2</a>             localeconv function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
24637  left-shift operator (&lt;&lt;), <a href="#6.5.7">6.5.7</a>                            localization, <a href="#7.11">7.11</a>
24638  length                                                     localtime function, <a href="#7.23.3.4">7.23.3.4</a>
24639     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>                 log functions, <a href="#7.12.6.7">7.12.6.7</a>, <a href="#F.9.3.7">F.9.3.7</a>
24640     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>                 log type-generic macro, <a href="#7.22">7.22</a>
24641     identifier, <a href="#6.4.2.1">6.4.2.1</a>                                      log10 functions, <a href="#7.12.6.8">7.12.6.8</a>, <a href="#F.9.3.8">F.9.3.8</a>
24642     internal name, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>                         log10 type-generic macro, <a href="#7.22">7.22</a>
24643  length function, <a href="#7.20.7.1">7.20.7.1</a>, <a href="#7.21.6.3">7.21.6.3</a>, <a href="#7.24.4.6.1">7.24.4.6.1</a>,           log1p functions, <a href="#7.12.6.9">7.12.6.9</a>, <a href="#F.9.3.9">F.9.3.9</a>
24644        <a href="#7.24.6.3.1">7.24.6.3.1</a>                                           log1p type-generic macro, <a href="#7.22">7.22</a>
24645  length modifier, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>,              log2 functions, <a href="#7.12.6.10">7.12.6.10</a>, <a href="#F.9.3.10">F.9.3.10</a>
24646        <a href="#7.24.2.2">7.24.2.2</a>                                             log2 type-generic macro, <a href="#7.22">7.22</a>
24647  less-than operator (&lt;), <a href="#6.5.8">6.5.8</a>                              logarithmic functions
24648  less-than-or-equal-to operator (&lt;=), <a href="#6.5.8">6.5.8</a>                   complex, <a href="#7.3.7">7.3.7</a>, <a href="#G.6.3">G.6.3</a>
24649  letter, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>                                           real, <a href="#7.12.6">7.12.6</a>, <a href="#F.9.3">F.9.3</a>
24650  lexical elements, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>                             logb functions, <a href="#7.12.6.11">7.12.6.11</a>, <a href="#F.3">F.3</a>, <a href="#F.9.3.11">F.9.3.11</a>
24651  lgamma functions, <a href="#7.12.8.3">7.12.8.3</a>, <a href="#F.9.5.3">F.9.5.3</a>                        logb type-generic macro, <a href="#7.22">7.22</a>
24652  lgamma type-generic macro, <a href="#7.22">7.22</a>                            logical operators
24653  library, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7">7</a>                                          AND (&amp;&amp;), <a href="#6.5.13">6.5.13</a>
24654     future directions, <a href="#7.26">7.26</a>                                   negation (!), <a href="#6.5.3.3">6.5.3.3</a>
24655     summary, <a href="#B">B</a>                                                OR (||), <a href="#6.5.14">6.5.14</a>
24656     terms, <a href="#7.1.1">7.1.1</a>                                            logical source lines, <a href="#5.1.1.2">5.1.1.2</a>
24657     use of functions, <a href="#7.1.4">7.1.4</a>                                 long double _Complex type, <a href="#6.2.5">6.2.5</a>
24658  lifetime, <a href="#6.2.4">6.2.4</a>                                            long double _Complex type conversion,
24659  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>
24660     environmental, see environmental limits                 long double _Imaginary type, <a href="#G.2">G.2</a>
24661     implementation, see implementation limits               long double suffix, l or <a href="#L">L</a>, <a href="#6.4.4.2">6.4.4.2</a>
24662     numerical, see numerical 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>,
24663     translation, see translation limits                          <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>, <a href="#F.2">F.2</a>
24664  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>                 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>,
24665  line buffered stream, <a href="#7.19.3">7.19.3</a>                                    <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>
24666  line number, <a href="#6.10.4">6.10.4</a>, <a href="#6.10.8">6.10.8</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.19.6.1">7.19.6.1</a>,
24667  line preprocessing directive, <a href="#6.10.4">6.10.4</a>                            <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>
24668  lines, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#7.19.2">7.19.2</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>,
24669     preprocessing directive, <a href="#6.10">6.10</a>                                <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
24670  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.5.2">6.7.5.2</a>, <a href="#6.9">6.9</a>, <a href="#6.9.2">6.9.2</a>,           long integer suffix, l or <a href="#L">L</a>, <a href="#6.4.4.1">6.4.4.1</a>
24671        <a href="#6.11.2">6.11.2</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>,
24672 <!--page 544 indent 0-->
24673       <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>                    mbsinit function, <a href="#7.24.6.2.1">7.24.6.2.1</a>
24674  long long int type conversion, <a href="#6.3.1.1">6.3.1.1</a>,                        mbsrtowcs function, <a href="#7.24.6.4.1">7.24.6.4.1</a>
24675       <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>                                 mbstate_t type, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.6.1">7.19.6.1</a>,
24676  long long integer suffix, ll or LL, <a href="#6.4.4.1">6.4.4.1</a>                          <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.1">7.24.1</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>, <a href="#7.24.6">7.24.6</a>,
24677  LONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.20.1.4">7.20.1.4</a>, <a href="#7.24.4.1.2">7.24.4.1.2</a>                     <a href="#7.24.6.2.1">7.24.6.2.1</a>, <a href="#7.24.6.3">7.24.6.3</a>, <a href="#7.24.6.3.1">7.24.6.3.1</a>, <a href="#7.24.6.4">7.24.6.4</a>
24678  LONG_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.20.1.4">7.20.1.4</a>, <a href="#7.24.4.1.2">7.24.4.1.2</a>                mbstowcs function, <a href="#6.4.5">6.4.5</a>, <a href="#7.20.8.1">7.20.8.1</a>, <a href="#7.24.6.4">7.24.6.4</a>
24679  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.20.4.3">7.20.4.3</a>                 mbtowc function, <a href="#7.20.7.1">7.20.7.1</a>, <a href="#7.20.7.2">7.20.7.2</a>, <a href="#7.20.8.1">7.20.8.1</a>,
24680  loop body, <a href="#6.8.5">6.8.5</a>                                                    <a href="#7.24.6.3">7.24.6.3</a>
24681  low-order bit, <a href="#3.6">3.6</a>                                             member access operators (. and -&gt;), <a href="#6.5.2.3">6.5.2.3</a>
24682  lowercase letter, <a href="#5.2.1">5.2.1</a>                                        member alignment, <a href="#6.7.2.1">6.7.2.1</a>
24683  lrint functions, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#F.3">F.3</a>, <a href="#F.9.6.5">F.9.6.5</a>                        memchr function, <a href="#7.21.5.1">7.21.5.1</a>
24684  lrint type-generic macro, <a href="#7.22">7.22</a>                                 memcmp function, <a href="#7.21.4">7.21.4</a>, <a href="#7.21.4.1">7.21.4.1</a>
24685  lround functions, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.9.6.7">F.9.6.7</a>                            memcpy function, <a href="#7.21.2.1">7.21.2.1</a>
24686  lround type-generic macro, <a href="#7.22">7.22</a>                                memmove function, <a href="#7.21.2.2">7.21.2.2</a>
24687  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>               memory management functions, <a href="#7.20.3">7.20.3</a>
24688                                                                 memset function, <a href="#7.21.6.1">7.21.6.1</a>
24689  macro argument substitution, <a href="#6.10.3.1">6.10.3.1</a>                          minimum functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.9.9">F.9.9</a>
24690  macro definition                                                minus operator, unary, <a href="#6.5.3.3">6.5.3.3</a>
24691    library function, <a href="#7.1.4">7.1.4</a>                                      miscellaneous functions
24692  macro invocation, <a href="#6.10.3">6.10.3</a>                                         string, <a href="#7.21.6">7.21.6</a>
24693  macro name, <a href="#6.10.3">6.10.3</a>                                               wide string, <a href="#7.24.4.6">7.24.4.6</a>
24694    length, <a href="#5.2.4.1">5.2.4.1</a>                                              mktime function, <a href="#7.23.2.3">7.23.2.3</a>
24695    predefined, <a href="#6.10.8">6.10.8</a>, <a href="#6.11.9">6.11.9</a>                                    modf functions, <a href="#7.12.6.12">7.12.6.12</a>, <a href="#F.9.3.12">F.9.3.12</a>
24696    redefinition, <a href="#6.10.3">6.10.3</a>                                          modifiable lvalue, <a href="#6.3.2.1">6.3.2.1</a>
24697    scope, <a href="#6.10.3.5">6.10.3.5</a>                                              modulus functions, <a href="#7.12.6.12">7.12.6.12</a>
24698  macro parameter, <a href="#6.10.3">6.10.3</a>                                        modulus, complex, <a href="#7.3.8.1">7.3.8.1</a>
24699  macro preprocessor, <a href="#6.10">6.10</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>
24700  macro replacement, <a href="#6.10.3">6.10.3</a>                                      multibyte conversion functions
24701  magnitude, complex, <a href="#7.3.8.1">7.3.8.1</a>                                      wide character, <a href="#7.20.7">7.20.7</a>
24702  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>,                extended, <a href="#7.24.6">7.24.6</a>
24703       <a href="#7.19.3">7.19.3</a>                                                         restartable, <a href="#7.24.6.3">7.24.6.3</a>
24704  malloc function, <a href="#7.20.3">7.20.3</a>, <a href="#7.20.3.2">7.20.3.2</a>, <a href="#7.20.3.3">7.20.3.3</a>,                     wide string, <a href="#7.20.8">7.20.8</a>
24705       <a href="#7.20.3.4">7.20.3.4</a>                                                       restartable, <a href="#7.24.6.4">7.24.6.4</a>
24706  manipulation functions                                         multibyte string, <a href="#7.1.1">7.1.1</a>
24707    complex, <a href="#7.3.9">7.3.9</a>                                               multibyte/wide character conversion functions,
24708    real, <a href="#7.12.11">7.12.11</a>, <a href="#F.9.8">F.9.8</a>                                              <a href="#7.20.7">7.20.7</a>
24709  matching failure, <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.2.8">7.24.2.8</a>, <a href="#7.24.2.10">7.24.2.10</a>                  extended, <a href="#7.24.6">7.24.6</a>
24710  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.22">7.22</a>, <a href="#F">F</a>, <a href="#F.9">F.9</a>,               restartable, <a href="#7.24.6.3">7.24.6.3</a>
24711       <a href="#J.5.17">J.5.17</a>                                                    multibyte/wide string conversion functions, <a href="#7.20.8">7.20.8</a>
24712  MATH_ERREXCEPT macro, <a href="#7.12">7.12</a>, <a href="#F.9">F.9</a>                                  restartable, <a href="#7.24.6.4">7.24.6.4</a>
24713  math_errhandling macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.12">7.12</a>, <a href="#F.9">F.9</a>                       multidimensional array, <a href="#6.5.2.1">6.5.2.1</a>
24714  MATH_ERRNO macro, <a href="#7.12">7.12</a>                                         multiplication assignment operator (*=), <a href="#6.5.16.2">6.5.16.2</a>
24715  maximum functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.9.9">F.9.9</a>                              multiplication operator (*), <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>
24716  MB_CUR_MAX macro, <a href="#7.1.1">7.1.1</a>, <a href="#7.20">7.20</a>, <a href="#7.20.7.2">7.20.7.2</a>,                       multiplicative expressions, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
24717       <a href="#7.20.7.3">7.20.7.3</a>, <a href="#7.24.6.3.3">7.24.6.3.3</a>
24718  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.20">7.20</a>                       n-char sequence, <a href="#7.20.1.3">7.20.1.3</a>
24719  mblen function, <a href="#7.20.7.1">7.20.7.1</a>, <a href="#7.24.6.3">7.24.6.3</a>                             n-wchar sequence, <a href="#7.24.4.1.1">7.24.4.1.1</a>
24720  mbrlen function, <a href="#7.24.6.3.1">7.24.6.3.1</a>                                    name
24721  mbrtowc function, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</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>
24722       <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>, <a href="#7.24.6.3.1">7.24.6.3.1</a>, <a href="#7.24.6.3.2">7.24.6.3.2</a>,                 file, <a href="#7.19.3">7.19.3</a>
24723       <a href="#7.24.6.4.1">7.24.6.4.1</a>                                                  internal, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>
24724 <!--page 545 indent 0-->
24725    label, <a href="#6.2.3">6.2.3</a>                                                  octal-character escape sequence (\octal digits),
24726    structure/union member, <a href="#6.2.3">6.2.3</a>                                       <a href="#6.4.4.4">6.4.4.4</a>
24727  name spaces, <a href="#6.2.3">6.2.3</a>                                              offsetof macro, <a href="#7.17">7.17</a>
24728  named label, <a href="#6.8.1">6.8.1</a>                                              on-off switch, <a href="#6.10.6">6.10.6</a>
24729  NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>                                                  ones' complement, <a href="#6.2.6.2">6.2.6.2</a>
24730  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.9.8.2">F.9.8.2</a>                        operand, <a href="#6.4.6">6.4.6</a>, <a href="#6.5">6.5</a>
24731  NAN macro, <a href="#7.12">7.12</a>, <a href="#F.2.1">F.2.1</a>                                          operating system, <a href="#5.1.2.1">5.1.2.1</a>, <a href="#7.20.4.6">7.20.4.6</a>
24732  NDEBUG macro, <a href="#7.2">7.2</a>                                               operations on files, <a href="#7.19.4">7.19.4</a>
24733  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>,                   operator, <a href="#6.4.6">6.4.6</a>
24734       <a href="#F.9.6.3">F.9.6.3</a>                                                    operators, <a href="#6.5">6.5</a>
24735  nearbyint type-generic macro, <a href="#7.22">7.22</a>                                 assignment, <a href="#6.5.16">6.5.16</a>
24736  nearest integer functions, <a href="#7.12.9">7.12.9</a>, <a href="#F.9.6">F.9.6</a>                           associativity, <a href="#6.5">6.5</a>
24737  negation operator (!), <a href="#6.5.3.3">6.5.3.3</a>                                     equality, <a href="#6.5.9">6.5.9</a>
24738  negative zero, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.12.11.1">7.12.11.1</a>                                  multiplicative, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
24739  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>              postfix, <a href="#6.5.2">6.5.2</a>
24740  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>,                     precedence, <a href="#6.5">6.5</a>
24741       <a href="#7.4.1.10">7.4.1.10</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>
24742  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>,                    relational, <a href="#6.5.8">6.5.8</a>
24743       <a href="#F.9.8.3">F.9.8.3</a>                                                       shift, <a href="#6.5.7">6.5.7</a>
24744  nextafter type-generic macro, <a href="#7.22">7.22</a>                                 unary, <a href="#6.5.3">6.5.3</a>
24745  nexttoward functions, <a href="#7.12.11.4">7.12.11.4</a>, <a href="#F.3">F.3</a>, <a href="#F.9.8.4">F.9.8.4</a>                      unary arithmetic, <a href="#6.5.3.3">6.5.3.3</a>
24746  nexttoward type-generic macro, <a href="#7.22">7.22</a>                             or macro, <a href="#7.9">7.9</a>
24747  no linkage, <a href="#6.2.2">6.2.2</a>                                               OR operators
24748  non-stop floating-point control mode, <a href="#7.6.4.2">7.6.4.2</a>                       bitwise exclusive (^), <a href="#6.5.11">6.5.11</a>
24749  nongraphic characters, <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                              bitwise exclusive assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>
24750  nonlocal jumps header, <a href="#7.13">7.13</a>                                        bitwise inclusive (|), <a href="#6.5.12">6.5.12</a>
24751  norm, complex, <a href="#7.3.8.1">7.3.8.1</a>                                             bitwise inclusive assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>
24752  not macro, <a href="#7.9">7.9</a>                                                     logical (||), <a href="#6.5.14">6.5.14</a>
24753  not-equal-to operator, see inequality operator                  or_eq macro, <a href="#7.9">7.9</a>
24754  not_eq macro, <a href="#7.9">7.9</a>                                               order of allocated storage, <a href="#7.20.3">7.20.3</a>
24755  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>                      order of evaluation, <a href="#6.5">6.5</a>
24756    padding of binary stream, <a href="#7.19.2">7.19.2</a>                              ordinary identifier name space, <a href="#6.2.3">6.2.3</a>
24757  NULL macro, <a href="#7.11">7.11</a>, <a href="#7.17">7.17</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.20">7.20</a>, <a href="#7.21.1">7.21.1</a>,                   orientation of stream, <a href="#7.19.2">7.19.2</a>, <a href="#7.24.3.5">7.24.3.5</a>
24758       <a href="#7.23.1">7.23.1</a>, <a href="#7.24.1">7.24.1</a>                                             outer scope, <a href="#6.2.1">6.2.1</a>
24759  null pointer, <a href="#6.3.2.3">6.3.2.3</a>
24760  null pointer constant, <a href="#6.3.2.3">6.3.2.3</a>                                  padding
24761  null preprocessing directive, <a href="#6.10.7">6.10.7</a>                              binary stream, <a href="#7.19.2">7.19.2</a>
24762  null statement, <a href="#6.8.3">6.8.3</a>                                             bits, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.18.1.1">7.18.1.1</a>
24763  null wide character, <a href="#7.1.1">7.1.1</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>
24764  number classification macros, <a href="#7.12">7.12</a>, <a href="#7.12.3.1">7.12.3.1</a>                     parameter, <a href="#3.15">3.15</a>
24765  numeric conversion functions, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.20.1">7.20.1</a>                     array, <a href="#6.9.1">6.9.1</a>
24766    wide string, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.24.4.1">7.24.4.1</a>                                  ellipsis, <a href="#6.7.5.3">6.7.5.3</a>, <a href="#6.10.3">6.10.3</a>
24767  numerical limits, <a href="#5.2.4.2">5.2.4.2</a>                                         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>
24768                                                                    macro, <a href="#6.10.3">6.10.3</a>
24769  object, <a href="#3.14">3.14</a>                                                      main function, <a href="#5.1.2.2.1">5.1.2.2.1</a>
24770  object representation, <a href="#6.2.6.1">6.2.6.1</a>                                    program, <a href="#5.1.2.2.1">5.1.2.2.1</a>
24771  object type, <a href="#6.2.5">6.2.5</a>                                              parameter type list, <a href="#6.7.5.3">6.7.5.3</a>
24772  object-like macro, <a href="#6.10.3">6.10.3</a>                                       parentheses punctuator (( )), <a href="#6.7.5.3">6.7.5.3</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.5</a>
24773  obsolescence, <a href="#6.11">6.11</a>, <a href="#7.26">7.26</a>                                        parenthesized expression, <a href="#6.5.1">6.5.1</a>
24774  octal constant, <a href="#6.4.4.1">6.4.4.1</a>                                         parse state, <a href="#7.19.2">7.19.2</a>
24775  octal digit, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#6.4.4.4">6.4.4.4</a>                                   permitted form of initializer, <a href="#6.6">6.6</a>
24776 <!--page 546 indent 0-->
24777  perror function, <a href="#7.19.10.4">7.19.10.4</a>                                    PRIcPTR macros, <a href="#7.8.1">7.8.1</a>
24778  phase angle, complex, <a href="#7.3.9.1">7.3.9.1</a>                                 primary expression, <a href="#6.5.1">6.5.1</a>
24779  physical source lines, <a href="#5.1.1.2">5.1.1.2</a>                                printf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.3">7.19.6.3</a>, <a href="#7.19.6.10">7.19.6.10</a>
24780  placemarker, <a href="#6.10.3.3">6.10.3.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>
24781  plus operator, unary, <a href="#6.5.3.3">6.5.3.3</a>                                 printing wide character, <a href="#7.25.2">7.25.2</a>
24782  pointer arithmetic, <a href="#6.5.6">6.5.6</a>                                     program diagnostics, <a href="#7.2.1">7.2.1</a>
24783  pointer comparison, <a href="#6.5.8">6.5.8</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>
24784  pointer declarator, <a href="#6.7.5.1">6.7.5.1</a>                                   program file, <a href="#5.1.1.1">5.1.1.1</a>
24785  pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                                program image, <a href="#5.1.1.2">5.1.1.2</a>
24786  pointer to function, <a href="#6.5.2.2">6.5.2.2</a>                                  program name (argv[0]), <a href="#5.1.2.2.1">5.1.2.2.1</a>
24787  pointer type, <a href="#6.2.5">6.2.5</a>                                           program parameters, <a href="#5.1.2.2.1">5.1.2.2.1</a>
24788  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 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>
24789  pointer, null, <a href="#6.3.2.3">6.3.2.3</a>                                        program structure, <a href="#5.1.1.1">5.1.1.1</a>
24790  portability, <a href="#4">4</a>, <a href="#J">J</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>,
24791  position indicator, file, see file position indicator                 <a href="#5.1.2.3">5.1.2.3</a>
24792  positive difference, <a href="#7.12.12.1">7.12.12.1</a>                                program, conforming, <a href="#4">4</a>
24793  positive difference functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.9.9">F.9.9</a>                 program, strictly conforming, <a href="#4">4</a>
24794  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>              promotions
24795  postfix expressions, <a href="#6.5.2">6.5.2</a>                                        default argument, <a href="#6.5.2.2">6.5.2.2</a>
24796  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>                 integer, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.3.1.1">6.3.1.1</a>
24797  pow functions, <a href="#7.12.7.4">7.12.7.4</a>, <a href="#F.9.4.4">F.9.4.4</a>                              prototype, see function prototype
24798  pow type-generic macro, <a href="#7.22">7.22</a>                                  pseudo-random sequence functions, <a href="#7.20.2">7.20.2</a>
24799  power functions                                               PTRDIFF_MAX macro, <a href="#7.18.3">7.18.3</a>
24800    complex, <a href="#7.3.8">7.3.8</a>, <a href="#G.6.4">G.6.4</a>                                       PTRDIFF_MIN macro, <a href="#7.18.3">7.18.3</a>
24801    real, <a href="#7.12.7">7.12.7</a>, <a href="#F.9.4">F.9.4</a>                                         ptrdiff_t type, <a href="#7.17">7.17</a>, <a href="#7.18.3">7.18.3</a>, <a href="#7.19.6.1">7.19.6.1</a>,
24802  pp-number, <a href="#6.4.8">6.4.8</a>                                                    <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>
24803  pragma operator, <a href="#6.10.9">6.10.9</a>                                       punctuators, <a href="#6.4.6">6.4.6</a>
24804  pragma preprocessing directive, <a href="#6.10.6">6.10.6</a>, <a href="#6.11.8">6.11.8</a>                putc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.8">7.19.7.8</a>, <a href="#7.19.7.9">7.19.7.9</a>
24805  precedence of operators, <a href="#6.5">6.5</a>                                  putchar function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.9">7.19.7.9</a>
24806  precedence of syntax rules, <a href="#5.1.1.2">5.1.1.2</a>                           puts function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.10">7.19.7.10</a>
24807  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.19.6.1">7.19.6.1</a>, <a href="#7.24.2.1">7.24.2.1</a>               putwc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3.8">7.24.3.8</a>, <a href="#7.24.3.9">7.24.3.9</a>
24808     excess, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>               putwchar function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3.9">7.24.3.9</a>
24809  predefined macro names, <a href="#6.10.8">6.10.8</a>, <a href="#6.11.9">6.11.9</a>
24810  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>               qsort function, <a href="#7.20.5">7.20.5</a>, <a href="#7.20.5.2">7.20.5.2</a>
24811  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>               qualified types, <a href="#6.2.5">6.2.5</a>
24812  preprocessing concatenation, <a href="#6.10.3.3">6.10.3.3</a>                         qualified version of type, <a href="#6.2.5">6.2.5</a>
24813  preprocessing directives, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10">6.10</a>                       question-mark escape sequence (\?), <a href="#6.4.4.4">6.4.4.4</a>
24814  preprocessing file, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#6.10">6.10</a>                              quiet NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>
24815  preprocessing numbers, <a href="#6.4">6.4</a>, <a href="#6.4.8">6.4.8</a>
24816  preprocessing operators                                       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.20.4.1">7.20.4.1</a>
24817     #, <a href="#6.10.3.2">6.10.3.2</a>                                                rand function, <a href="#7.20">7.20</a>, <a href="#7.20.2.1">7.20.2.1</a>, <a href="#7.20.2.2">7.20.2.2</a>
24818     ##, <a href="#6.10.3.3">6.10.3.3</a>                                               RAND_MAX macro, <a href="#7.20">7.20</a>, <a href="#7.20.2.1">7.20.2.1</a>
24819     _Pragma, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.9">6.10.9</a>                                   range
24820     defined, <a href="#6.10.1">6.10.1</a>                                              excess, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.8.6.4">6.8.6.4</a>
24821  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>                      range 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.5.4">7.12.5.4</a>, <a href="#7.12.5.5">7.12.5.5</a>,
24822  preprocessing translation unit, <a href="#5.1.1.1">5.1.1.1</a>                            <a href="#7.12.6.1">7.12.6.1</a>, <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>,
24823  preprocessor, <a href="#6.10">6.10</a>                                                 <a href="#7.12.6.6">7.12.6.6</a>, <a href="#7.12.6.7">7.12.6.7</a>, <a href="#7.12.6.8">7.12.6.8</a>, <a href="#7.12.6.9">7.12.6.9</a>,
24824  PRIcFASTN macros, <a href="#7.8.1">7.8.1</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.6.13">7.12.6.13</a>, <a href="#7.12.7.3">7.12.7.3</a>,
24825  PRIcLEASTN macros, <a href="#7.8.1">7.8.1</a>                                           <a href="#7.12.7.4">7.12.7.4</a>, <a href="#7.12.8.2">7.12.8.2</a>, <a href="#7.12.8.3">7.12.8.3</a>, <a href="#7.12.8.4">7.12.8.4</a>,
24826  PRIcMAX macros, <a href="#7.8.1">7.8.1</a>                                              <a href="#7.12.9.5">7.12.9.5</a>, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#7.12.11.3">7.12.11.3</a>, <a href="#7.12.12.1">7.12.12.1</a>,
24827  PRIcN macros, <a href="#7.8.1">7.8.1</a>                                                <a href="#7.12.13.1">7.12.13.1</a>
24828 <!--page 547 indent 0-->
24829  rank, see integer conversion rank                         same scope, <a href="#6.2.1">6.2.1</a>
24830  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>,           save calling environment function, <a href="#7.13.1">7.13.1</a>
24831        <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>                                   scalar types, <a href="#6.2.5">6.2.5</a>
24832  real floating types, <a href="#6.2.5">6.2.5</a>                                 scalbln function, <a href="#7.12.6.13">7.12.6.13</a>, <a href="#F.3">F.3</a>, <a href="#F.9.3.13">F.9.3.13</a>
24833  real type domain, <a href="#6.2.5">6.2.5</a>                                   scalbln type-generic macro, <a href="#7.22">7.22</a>
24834  real types, <a href="#6.2.5">6.2.5</a>                                         scalbn function, <a href="#7.12.6.13">7.12.6.13</a>, <a href="#F.3">F.3</a>, <a href="#F.9.3.13">F.9.3.13</a>
24835  real-floating, <a href="#7.12.3">7.12.3</a>                                      scalbn type-generic macro, <a href="#7.22">7.22</a>
24836  realloc function, <a href="#7.20.3">7.20.3</a>, <a href="#7.20.3.2">7.20.3.2</a>, <a href="#7.20.3.4">7.20.3.4</a>              scanf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.4">7.19.6.4</a>, <a href="#7.19.6.11">7.19.6.11</a>
24837  recommended practice, <a href="#3.16">3.16</a>                                scanlist, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>
24838  recursion, <a href="#6.5.2.2">6.5.2.2</a>                                        scanset, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>
24839  recursive function call, <a href="#6.5.2.2">6.5.2.2</a>                          SCHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
24840  redefinition of macro, <a href="#6.10.3">6.10.3</a>                              SCHAR_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
24841  reentrancy, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.3">5.2.3</a>                                SCNcFASTN macros, <a href="#7.8.1">7.8.1</a>
24842     library functions, <a href="#7.1.4">7.1.4</a>                               SCNcLEASTN macros, <a href="#7.8.1">7.8.1</a>
24843  referenced type, <a href="#6.2.5">6.2.5</a>                                    SCNcMAX macros, <a href="#7.8.1">7.8.1</a>
24844  register storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.9">6.9</a>               SCNcN macros, <a href="#7.8.1">7.8.1</a>
24845  relational expressions, <a href="#6.5.8">6.5.8</a>                             SCNcPTR macros, <a href="#7.8.1">7.8.1</a>
24846  reliability of data, interrupted, <a href="#5.1.2.3">5.1.2.3</a>                 scope of identifier, <a href="#6.2.1">6.2.1</a>, <a href="#6.9.2">6.9.2</a>
24847  remainder assignment operator (%=), <a href="#6.5.16.2">6.5.16.2</a>              search functions
24848  remainder functions, <a href="#7.12.10">7.12.10</a>, <a href="#F.9.7">F.9.7</a>                          string, <a href="#7.21.5">7.21.5</a>
24849  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>,              utility, <a href="#7.20.5">7.20.5</a>
24850        <a href="#F.9.7.2">F.9.7.2</a>                                                wide string, <a href="#7.24.4.5">7.24.4.5</a>
24851  remainder operator (%), <a href="#6.5.5">6.5.5</a>                             SEEK_CUR macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.9.2">7.19.9.2</a>
24852  remainder type-generic macro, <a href="#7.22">7.22</a>                        SEEK_END macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.9.2">7.19.9.2</a>
24853  remove function, <a href="#7.19.4.1">7.19.4.1</a>, <a href="#7.19.4.4">7.19.4.4</a>                       SEEK_SET macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.9.2">7.19.9.2</a>
24854  remquo functions, <a href="#7.12.10.3">7.12.10.3</a>, <a href="#F.3">F.3</a>, <a href="#F.9.7.3">F.9.7.3</a>                 selection statements, <a href="#6.8.4">6.8.4</a>
24855  remquo type-generic macro, <a href="#7.22">7.22</a>                           self-referential structure, <a href="#6.7.2.3">6.7.2.3</a>
24856  rename function, <a href="#7.19.4.2">7.19.4.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>,
24857  representations of types, <a href="#6.2.6">6.2.6</a>                                 <a href="#6.8.5">6.8.5</a>, <a href="#6.8.6">6.8.6</a>
24858     pointer, <a href="#6.2.5">6.2.5</a>                                         separate compilation, <a href="#5.1.1.1">5.1.1.1</a>
24859  rescanning and replacement, <a href="#6.10.3.4">6.10.3.4</a>                      separate translation, <a href="#5.1.1.1">5.1.1.1</a>
24860  reserved identifiers, <a href="#6.4.1">6.4.1</a>, <a href="#7.1.3">7.1.3</a>                         sequence points, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5">6.5</a>, <a href="#6.8">6.8</a>, <a href="#7.1.4">7.1.4</a>, <a href="#7.19.6">7.19.6</a>,
24861  restartable multibyte/wide character conversion                 <a href="#7.20.5">7.20.5</a>, <a href="#7.24.2">7.24.2</a>, <a href="#C">C</a>
24862        functions, <a href="#7.24.6.3">7.24.6.3</a>                                 sequencing of statements, <a href="#6.8">6.8</a>
24863  restartable multibyte/wide string conversion              setbuf function, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.5.1">7.19.5.1</a>, <a href="#7.19.5.5">7.19.5.5</a>
24864        functions, <a href="#7.24.6.4">7.24.6.4</a>                                 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>
24865  restore calling environment function, <a href="#7.13.2">7.13.2</a>              setjmp.h header, <a href="#7.13">7.13</a>
24866  restrict type qualifier, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.3.1">6.7.3.1</a>                    setlocale function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
24867  restrict-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.3">6.7.3</a>                      setvbuf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.5.1">7.19.5.1</a>,
24868  return statement, <a href="#6.8.6.4">6.8.6.4</a>                                       <a href="#7.19.5.5">7.19.5.5</a>, <a href="#7.19.5.6">7.19.5.6</a>
24869  rewind function, <a href="#7.19.5.3">7.19.5.3</a>, <a href="#7.19.7.11">7.19.7.11</a>, <a href="#7.19.9.5">7.19.9.5</a>,           shall, <a href="#4">4</a>
24870        <a href="#7.24.3.10">7.24.3.10</a>                                           shift expressions, <a href="#6.5.7">6.5.7</a>
24871  right-shift assignment operator (&gt;&gt;=), <a href="#6.5.16.2">6.5.16.2</a>           shift sequence, <a href="#7.1.1">7.1.1</a>
24872  right-shift operator (&gt;&gt;), <a href="#6.5.7">6.5.7</a>                          shift states, <a href="#5.2.1.2">5.2.1.2</a>
24873  rint functions, <a href="#7.12.9.4">7.12.9.4</a>, <a href="#F.3">F.3</a>, <a href="#F.9.6.4">F.9.6.4</a>                    short identifier, character, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.3">6.4.3</a>
24874  rint type-generic macro, <a href="#7.22">7.22</a>                             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.19.6.1">7.19.6.1</a>,
24875  round functions, <a href="#7.12.9.6">7.12.9.6</a>, <a href="#F.9.6.6">F.9.6.6</a>                              <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>
24876  round type-generic macro, <a href="#7.22">7.22</a>                            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>,
24877  rounding mode, floating point, <a href="#5.2.4.2.2">5.2.4.2.2</a>                         <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
24878  rvalue, <a href="#6.3.2.1">6.3.2.1</a>                                           SHRT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
24879                                                            SHRT_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
24880 <!--page 548 indent 0-->
24881  side effects, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5">6.5</a>                                   source lines, <a href="#5.1.1.2">5.1.1.2</a>
24882  SIG_ATOMIC_MAX macro, <a href="#7.18.3">7.18.3</a>                                 source text, <a href="#5.1.1.2">5.1.1.2</a>
24883  SIG_ATOMIC_MIN macro, <a href="#7.18.3">7.18.3</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>,
24884  sig_atomic_t type, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.18.3">7.18.3</a>                         <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.25.2.1.3">7.25.2.1.3</a>
24885  SIG_DFL macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                sprintf function, <a href="#7.19.6.6">7.19.6.6</a>, <a href="#7.19.6.13">7.19.6.13</a>
24886  SIG_ERR macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                sqrt functions, <a href="#7.12.7.5">7.12.7.5</a>, <a href="#F.3">F.3</a>, <a href="#F.9.4.5">F.9.4.5</a>
24887  SIG_IGN macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                sqrt type-generic macro, <a href="#7.22">7.22</a>
24888  SIGABRT macro, <a href="#7.14">7.14</a>, <a href="#7.20.4.1">7.20.4.1</a>                                srand function, <a href="#7.20.2.2">7.20.2.2</a>
24889  SIGFPE macro, <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>                         sscanf function, <a href="#7.19.6.7">7.19.6.7</a>, <a href="#7.19.6.14">7.19.6.14</a>
24890  SIGILL macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                 standard error stream, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.10.4">7.19.10.4</a>
24891  SIGINT macro, <a href="#7.14">7.14</a>                                           standard headers, <a href="#4">4</a>, <a href="#7.1.2">7.1.2</a>
24892  sign and magnitude, <a href="#6.2.6.2">6.2.6.2</a>                                     <a href="#7.2">&lt;assert.h&gt;</a>, <a href="#7.2">7.2</a>, <a href="#B.1">B.1</a>
24893  sign bit, <a href="#6.2.6.2">6.2.6.2</a>                                               <a href="#7.3">&lt;complex.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.3">7.3</a>, <a href="#7.22">7.22</a>, <a href="#7.26.1">7.26.1</a>,
24894  signal function, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.20.4.4">7.20.4.4</a>                                  <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>
24895  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>              <a href="#7.4">&lt;ctype.h&gt;</a>, <a href="#7.4">7.4</a>, <a href="#7.26.2">7.26.2</a>
24896  signal handling functions, <a href="#7.14.1">7.14.1</a>                               <a href="#7.5">&lt;errno.h&gt;</a>, <a href="#7.5">7.5</a>, <a href="#7.26.3">7.26.3</a>
24897  signal.h header, <a href="#7.14">7.14</a>, <a href="#7.26.6">7.26.6</a>                                   <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>
24898  signaling NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#F.2.1">F.2.1</a>                                 <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.20.1.3">7.20.1.3</a>,
24899  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>                                      <a href="#7.24.4.1.1">7.24.4.1.1</a>
24900  signbit macro, <a href="#7.12.3.6">7.12.3.6</a>, <a href="#F.3">F.3</a>                                    <a href="#7.8">&lt;inttypes.h&gt;</a>, <a href="#7.8">7.8</a>, <a href="#7.26.4">7.26.4</a>
24901  signed char type, <a href="#6.2.5">6.2.5</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>,                    <a href="#7.9">&lt;iso646.h&gt;</a>, <a href="#4">4</a>, <a href="#7.9">7.9</a>
24902       <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>                                         <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>
24903  signed character, <a href="#6.3.1.1">6.3.1.1</a>                                       <a href="#7.11">&lt;locale.h&gt;</a>, <a href="#7.11">7.11</a>, <a href="#7.26.5">7.26.5</a>
24904  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>                   <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.22">7.22</a>, <a href="#F">F</a>, <a href="#F.9">F.9</a>,
24905  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>,                   <a href="#J.5.17">J.5.17</a>
24906       <a href="#6.3.1.8">6.3.1.8</a>                                                    <a href="#7.13">&lt;setjmp.h&gt;</a>, <a href="#7.13">7.13</a>
24907  signed types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>                                      <a href="#7.14">&lt;signal.h&gt;</a>, <a href="#7.14">7.14</a>, <a href="#7.26.6">7.26.6</a>
24908  significand part, <a href="#6.4.4.2">6.4.4.2</a>                                        <a href="#7.15">&lt;stdarg.h&gt;</a>, <a href="#4">4</a>, <a href="#6.7.5.3">6.7.5.3</a>, <a href="#7.15">7.15</a>
24909  SIGSEGV macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                   <a href="#7.16">&lt;stdbool.h&gt;</a>, <a href="#4">4</a>, <a href="#7.16">7.16</a>, <a href="#7.26.7">7.26.7</a>, <a href="#H">H</a>
24910  SIGTERM macro, <a href="#7.14">7.14</a>                                             <a href="#7.17">&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>,
24911  simple assignment operator (=), <a href="#6.5.16.1">6.5.16.1</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.17">7.17</a>
24912  sin functions, <a href="#7.12.4.6">7.12.4.6</a>, <a href="#F.9.1.6">F.9.1.6</a>                                <a href="#7.18">&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.18">7.18</a>,
24913  sin type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                                    <a href="#7.26.8">7.26.8</a>
24914  single-byte character, <a href="#3.7.1">3.7.1</a>, <a href="#5.2.1.2">5.2.1.2</a>                           <a href="#7.19">&lt;stdio.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19">7.19</a>, <a href="#7.26.9">7.26.9</a>, <a href="#F">F</a>
24915  single-byte/wide character conversion functions,                <a href="#7.20">&lt;stdlib.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.20">7.20</a>, <a href="#7.26.10">7.26.10</a>, <a href="#F">F</a>
24916       <a href="#7.24.6.1">7.24.6.1</a>                                                   <a href="#7.21">&lt;string.h&gt;</a>, <a href="#7.21">7.21</a>, <a href="#7.26.11">7.26.11</a>
24917  single-precision arithmetic, <a href="#5.1.2.3">5.1.2.3</a>                            <a href="#7.22">&lt;tgmath.h&gt;</a>, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
24918  single-quote escape sequence (\'), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>               <a href="#7.23">&lt;time.h&gt;</a>, <a href="#7.23">7.23</a>
24919  sinh functions, <a href="#7.12.5.5">7.12.5.5</a>, <a href="#F.9.2.5">F.9.2.5</a>                               <a href="#7.24">&lt;wchar.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.24">7.24</a>, <a href="#7.26.12">7.26.12</a>,
24920  sinh type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                                   <a href="#F">F</a>
24921  SIZE_MAX macro, <a href="#7.18.3">7.18.3</a>                                          <a href="#7.25">&lt;wctype.h&gt;</a>, <a href="#7.25">7.25</a>, <a href="#7.26.13">7.26.13</a>
24922  size_t type, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#7.17">7.17</a>, <a href="#7.18.3">7.18.3</a>, <a href="#7.19.1">7.19.1</a>,                  standard input stream, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>
24923       <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.20">7.20</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.23.1">7.23.1</a>,               standard integer types, <a href="#6.2.5">6.2.5</a>
24924       <a href="#7.24.1">7.24.1</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>                              standard output stream, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>
24925  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>                     standard signed integer types, <a href="#6.2.5">6.2.5</a>
24926  snprintf function, <a href="#7.19.6.5">7.19.6.5</a>, <a href="#7.19.6.12">7.19.6.12</a>                       state-dependent encoding, <a href="#5.2.1.2">5.2.1.2</a>, <a href="#7.20.7">7.20.7</a>
24927  sorting utility functions, <a href="#7.20.5">7.20.5</a>                            statements, <a href="#6.8">6.8</a>
24928  source character set, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>                            break, <a href="#6.8.6.3">6.8.6.3</a>
24929  source file, <a href="#5.1.1.1">5.1.1.1</a>                                             compound, <a href="#6.8.2">6.8.2</a>
24930     name, <a href="#6.10.4">6.10.4</a>, <a href="#6.10.8">6.10.8</a>                                         continue, <a href="#6.8.6.2">6.8.6.2</a>
24931  source file inclusion, <a href="#6.10.2">6.10.2</a>                                    do, <a href="#6.8.5.2">6.8.5.2</a>
24932 <!--page 549 indent 0-->
24933     else, <a href="#6.8.4.1">6.8.4.1</a>                                             strictly conforming program, <a href="#4">4</a>
24934     expression, <a href="#6.8.3">6.8.3</a>                                         string, <a href="#7.1.1">7.1.1</a>
24935     for, <a href="#6.8.5.3">6.8.5.3</a>                                                 comparison functions, <a href="#7.21.4">7.21.4</a>
24936     goto, <a href="#6.8.6.1">6.8.6.1</a>                                                concatenation functions, <a href="#7.21.3">7.21.3</a>
24937     if, <a href="#6.8.4.1">6.8.4.1</a>                                                  conversion functions, <a href="#7.11.1.1">7.11.1.1</a>
24938     iteration, <a href="#6.8.5">6.8.5</a>                                             copying functions, <a href="#7.21.2">7.21.2</a>
24939     jump, <a href="#6.8.6">6.8.6</a>                                                  library function conventions, <a href="#7.21.1">7.21.1</a>
24940     labeled, <a href="#6.8.1">6.8.1</a>                                               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.8">6.7.8</a>
24941     null, <a href="#6.8.3">6.8.3</a>                                                  miscellaneous functions, <a href="#7.21.6">7.21.6</a>
24942     return, <a href="#6.8.6.4">6.8.6.4</a>                                              numeric conversion functions, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.20.1">7.20.1</a>
24943     selection, <a href="#6.8.4">6.8.4</a>                                             search functions, <a href="#7.21.5">7.21.5</a>
24944     sequencing, <a href="#6.8">6.8</a>                                           string handling header, <a href="#7.21">7.21</a>
24945     switch, <a href="#6.8.4.2">6.8.4.2</a>                                           string.h header, <a href="#7.21">7.21</a>, <a href="#7.26.11">7.26.11</a>
24946     while, <a href="#6.8.5.1">6.8.5.1</a>                                            stringizing, <a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.9">6.10.9</a>
24947  static storage duration, <a href="#6.2.4">6.2.4</a>                               strlen function, <a href="#7.21.6.3">7.21.6.3</a>
24948  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>           strncat function, <a href="#7.21.3.2">7.21.3.2</a>
24949  static, in array declarators, <a href="#6.7.5.2">6.7.5.2</a>, <a href="#6.7.5.3">6.7.5.3</a>               strncmp function, <a href="#7.21.4">7.21.4</a>, <a href="#7.21.4.4">7.21.4.4</a>
24950  stdarg.h header, <a href="#4">4</a>, <a href="#6.7.5.3">6.7.5.3</a>, <a href="#7.15">7.15</a>                            strncpy function, <a href="#7.21.2.4">7.21.2.4</a>
24951  stdbool.h header, <a href="#4">4</a>, <a href="#7.16">7.16</a>, <a href="#7.26.7">7.26.7</a>, <a href="#H">H</a>                         strpbrk function, <a href="#7.21.5.4">7.21.5.4</a>
24952  STDC, <a href="#6.10.6">6.10.6</a>, <a href="#6.11.8">6.11.8</a>                                         strrchr function, <a href="#7.21.5.5">7.21.5.5</a>
24953  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>,               strspn function, <a href="#7.21.5.6">7.21.5.6</a>
24954        <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.17">7.17</a>                            strstr function, <a href="#7.21.5.7">7.21.5.7</a>
24955  stderr macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.3">7.19.3</a>                         strtod function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.20.1.3">7.20.1.3</a>,
24956  stdin macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.6.4">7.19.6.4</a>,                     <a href="#7.24.2.2">7.24.2.2</a>, <a href="#F.3">F.3</a>
24957        <a href="#7.19.7.6">7.19.7.6</a>, <a href="#7.19.7.7">7.19.7.7</a>, <a href="#7.24.2.12">7.24.2.12</a>, <a href="#7.24.3.7">7.24.3.7</a>                strtof function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.20.1.3">7.20.1.3</a>, <a href="#F.3">F.3</a>
24958  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.18">7.18</a>,              strtoimax function, <a href="#7.8.2.3">7.8.2.3</a>
24959        <a href="#7.26.8">7.26.8</a>                                                 strtok function, <a href="#7.21.5.8">7.21.5.8</a>
24960  stdio.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19">7.19</a>, <a href="#7.26.9">7.26.9</a>, <a href="#F">F</a>                   strtol function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.20.1.2">7.20.1.2</a>,
24961  stdlib.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.20">7.20</a>, <a href="#7.26.10">7.26.10</a>, <a href="#F">F</a>                       <a href="#7.20.1.4">7.20.1.4</a>, <a href="#7.24.2.2">7.24.2.2</a>
24962  stdout macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.6.3">7.19.6.3</a>,              strtold function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.20.1.3">7.20.1.3</a>, <a href="#F.3">F.3</a>
24963        <a href="#7.19.7.9">7.19.7.9</a>, <a href="#7.19.7.10">7.19.7.10</a>, <a href="#7.24.2.11">7.24.2.11</a>, <a href="#7.24.3.9">7.24.3.9</a>               strtoll function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.20.1.2">7.20.1.2</a>, <a href="#7.20.1.4">7.20.1.4</a>
24964  storage duration, <a href="#6.2.4">6.2.4</a>                                      strtoul function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.20.1.2">7.20.1.2</a>,
24965  storage order of array, <a href="#6.5.2.1">6.5.2.1</a>                                    <a href="#7.20.1.4">7.20.1.4</a>, <a href="#7.24.2.2">7.24.2.2</a>
24966  storage-class specifiers, <a href="#6.7.1">6.7.1</a>, <a href="#6.11.5">6.11.5</a>                       strtoull function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.20.1.2">7.20.1.2</a>, <a href="#7.20.1.4">7.20.1.4</a>
24967  strcat function, <a href="#7.21.3.1">7.21.3.1</a>                                    strtoumax function, <a href="#7.8.2.3">7.8.2.3</a>
24968  strchr function, <a href="#7.21.5.2">7.21.5.2</a>                                    struct hack, see flexible array member
24969  strcmp function, <a href="#7.21.4">7.21.4</a>, <a href="#7.21.4.2">7.21.4.2</a>                            structure
24970  strcoll function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.21.4.5">7.21.4.5</a>                  arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
24971  strcpy function, <a href="#7.21.2.3">7.21.2.3</a>                                       content, <a href="#6.7.2.3">6.7.2.3</a>
24972  strcspn function, <a href="#7.21.5.3">7.21.5.3</a>                                      dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>
24973  streams, <a href="#7.19.2">7.19.2</a>, <a href="#7.20.4.3">7.20.4.3</a>                                       initialization, <a href="#6.7.8">6.7.8</a>
24974     fully buffered, <a href="#7.19.3">7.19.3</a>                                       member alignment, <a href="#6.7.2.1">6.7.2.1</a>
24975     line buffered, <a href="#7.19.3">7.19.3</a>                                        member name space, <a href="#6.2.3">6.2.3</a>
24976     orientation, <a href="#7.19.2">7.19.2</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>
24977     standard error, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>                               pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
24978     standard input, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>                               specifier, <a href="#6.7.2.1">6.7.2.1</a>
24979     standard output, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.3">7.19.3</a>                              tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>
24980     unbuffered, <a href="#7.19.3">7.19.3</a>                                           type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.1">6.7.2.1</a>
24981  strerror function, <a href="#7.19.10.4">7.19.10.4</a>, <a href="#7.21.6.2">7.21.6.2</a>                       strxfrm function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.21.4.5">7.21.4.5</a>
24982  strftime function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.23.3">7.23.3</a>, <a href="#7.23.3.5">7.23.3.5</a>,               subscripting, <a href="#6.5.2.1">6.5.2.1</a>
24983        <a href="#7.24.5.1">7.24.5.1</a>                                               subtraction assignment operator (-=), <a href="#6.5.16.2">6.5.16.2</a>
24984 <!--page 550 indent 0-->
24985  subtraction operator (-), <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>                   tolower function, <a href="#7.4.2.1">7.4.2.1</a>
24986  suffix                                                         toupper function, <a href="#7.4.2.2">7.4.2.2</a>
24987    floating constant, <a href="#6.4.4.2">6.4.4.2</a>                                   towctrans function, <a href="#7.25.3.2.1">7.25.3.2.1</a>, <a href="#7.25.3.2.2">7.25.3.2.2</a>
24988    integer constant, <a href="#6.4.4.1">6.4.4.1</a>                                   towlower function, <a href="#7.25.3.1.1">7.25.3.1.1</a>, <a href="#7.25.3.2.1">7.25.3.2.1</a>
24989  switch body, <a href="#6.8.4.2">6.8.4.2</a>                                          towupper function, <a href="#7.25.3.1.2">7.25.3.1.2</a>, <a href="#7.25.3.2.1">7.25.3.2.1</a>
24990  switch case label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>                             translation environment, <a href="#5">5</a>, <a href="#5.1.1">5.1.1</a>
24991  switch default label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>                          translation limits, <a href="#5.2.4.1">5.2.4.1</a>
24992  switch statement, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>                              translation phases, <a href="#5.1.1.2">5.1.1.2</a>
24993  swprintf function, <a href="#7.24.2.3">7.24.2.3</a>, <a href="#7.24.2.7">7.24.2.7</a>                         translation unit, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#6.9">6.9</a>
24994  swscanf function, <a href="#7.24.2.4">7.24.2.4</a>, <a href="#7.24.2.8">7.24.2.8</a>                          trap representation, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.3.2.3">6.3.2.3</a>,
24995  symbols, <a href="#3">3</a>                                                          <a href="#6.5.2.3">6.5.2.3</a>
24996  syntactic categories, <a href="#6.1">6.1</a>                                     trigonometric functions
24997  syntax notation, <a href="#6.1">6.1</a>                                             complex, <a href="#7.3.5">7.3.5</a>, <a href="#G.6.1">G.6.1</a>
24998  syntax rule precedence, <a href="#5.1.1.2">5.1.1.2</a>                                  real, <a href="#7.12.4">7.12.4</a>, <a href="#F.9.1">F.9.1</a>
24999  syntax summary, language, <a href="#A">A</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>
25000  system function, <a href="#7.20.4.6">7.20.4.6</a>                                     true macro, <a href="#7.16">7.16</a>
25001                                                                trunc functions, <a href="#7.12.9.8">7.12.9.8</a>, <a href="#F.9.6.8">F.9.6.8</a>
25002  tab characters, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>                                    trunc type-generic macro, <a href="#7.22">7.22</a>
25003  tag compatibility, <a href="#6.2.7">6.2.7</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.19.3">7.19.3</a>, <a href="#7.19.5.3">7.19.5.3</a>
25004  tag name space, <a href="#6.2.3">6.2.3</a>                                         truncation toward zero, <a href="#6.5.5">6.5.5</a>
25005  tags, <a href="#6.7.2.3">6.7.2.3</a>                                                 two's complement, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.18.1.1">7.18.1.1</a>
25006  tan functions, <a href="#7.12.4.7">7.12.4.7</a>, <a href="#F.9.1.7">F.9.1.7</a>                              type category, <a href="#6.2.5">6.2.5</a>
25007  tan type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                             type conversion, <a href="#6.3">6.3</a>
25008  tanh functions, <a href="#7.12.5.6">7.12.5.6</a>, <a href="#F.9.2.6">F.9.2.6</a>                             type definitions, <a href="#6.7.7">6.7.7</a>
25009  tanh type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                            type domain, <a href="#6.2.5">6.2.5</a>, <a href="#G.2">G.2</a>
25010  tentative definition, <a href="#6.9.2">6.9.2</a>                                    type names, <a href="#6.7.6">6.7.6</a>
25011  terms, <a href="#3">3</a>                                                      type punning, <a href="#6.5.2.3">6.5.2.3</a>
25012  text streams, <a href="#7.19.2">7.19.2</a>, <a href="#7.19.7.11">7.19.7.11</a>, <a href="#7.19.9.2">7.19.9.2</a>, <a href="#7.19.9.4">7.19.9.4</a>           type qualifiers, <a href="#6.7.3">6.7.3</a>
25013  tgamma functions, <a href="#7.12.8.4">7.12.8.4</a>, <a href="#F.9.5.4">F.9.5.4</a>                           type specifiers, <a href="#6.7.2">6.7.2</a>
25014  tgamma type-generic macro, <a href="#7.22">7.22</a>                               type-generic macro, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>
25015  tgmath.h header, <a href="#7.22">7.22</a>, <a href="#G.7">G.7</a>                                    typedef declaration, <a href="#6.7.7">6.7.7</a>
25016  time                                                          typedef storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.7.7">6.7.7</a>
25017     broken down, <a href="#7.23.1">7.23.1</a>, <a href="#7.23.2.3">7.23.2.3</a>, <a href="#7.23.3">7.23.3</a>, <a href="#7.23.3.1">7.23.3.1</a>,           types, <a href="#6.2.5">6.2.5</a>
25018           <a href="#7.23.3.3">7.23.3.3</a>, <a href="#7.23.3.4">7.23.3.4</a>, <a href="#7.23.3.5">7.23.3.5</a>                            character, <a href="#6.7.8">6.7.8</a>
25019     calendar, <a href="#7.23.1">7.23.1</a>, <a href="#7.23.2.2">7.23.2.2</a>, <a href="#7.23.2.3">7.23.2.3</a>, <a href="#7.23.2.4">7.23.2.4</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.5">6.7.5</a>
25020           <a href="#7.23.3.2">7.23.3.2</a>, <a href="#7.23.3.3">7.23.3.3</a>, <a href="#7.23.3.4">7.23.3.4</a>                            complex, <a href="#6.2.5">6.2.5</a>, <a href="#G">G</a>
25021     components, <a href="#7.23.1">7.23.1</a>                                            composite, <a href="#6.2.7">6.2.7</a>
25022     conversion functions, <a href="#7.23.3">7.23.3</a>                                  const qualified, <a href="#6.7.3">6.7.3</a>
25023        wide character, <a href="#7.24.5">7.24.5</a>                                     conversions, <a href="#6.3">6.3</a>
25024     local, <a href="#7.23.1">7.23.1</a>                                                 imaginary, <a href="#G">G</a>
25025     manipulation functions, <a href="#7.23.2">7.23.2</a>                                restrict qualified, <a href="#6.7.3">6.7.3</a>
25026  time function, <a href="#7.23.2.4">7.23.2.4</a>                                          volatile qualified, <a href="#6.7.3">6.7.3</a>
25027  time.h header, <a href="#7.23">7.23</a>
25028  time_t type, <a href="#7.23.1">7.23.1</a>                                           UCHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
25029  tm structure type, <a href="#7.23.1">7.23.1</a>, <a href="#7.24.1">7.24.1</a>                             UINT_FASTN_MAX macros, <a href="#7.18.2.3">7.18.2.3</a>
25030  TMP_MAX macro, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.4.3">7.19.4.3</a>, <a href="#7.19.4.4">7.19.4.4</a>                     uint_fastN_t types, <a href="#7.18.1.3">7.18.1.3</a>
25031  tmpfile function, <a href="#7.19.4.3">7.19.4.3</a>, <a href="#7.20.4.3">7.20.4.3</a>                          UINT_LEASTN_MAX macros, <a href="#7.18.2.2">7.18.2.2</a>
25032  tmpnam function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.4.3">7.19.4.3</a>, <a href="#7.19.4.4">7.19.4.4</a>                   uint_leastN_t types, <a href="#7.18.1.2">7.18.1.2</a>
25033  token, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, see also preprocessing tokens            UINT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
25034  token concatenation, <a href="#6.10.3.3">6.10.3.3</a>                                 UINTMAX_C macro, <a href="#7.18.4.2">7.18.4.2</a>
25035  token pasting, <a href="#6.10.3.3">6.10.3.3</a>                                       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.18.2.5">7.18.2.5</a>
25036 <!--page 551 indent 0-->
25037  uintmax_t type, <a href="#7.18.1.5">7.18.1.5</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>,               USHRT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
25038       <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.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>,
25039  UINTN_C macros, <a href="#7.18.4.1">7.18.4.1</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>
25040  UINTN_MAX macros, <a href="#7.18.2.1">7.18.2.1</a>                                  utilities, general, <a href="#7.20">7.20</a>
25041  uintN_t types, <a href="#7.18.1.1">7.18.1.1</a>                                        wide string, <a href="#7.24.4">7.24.4</a>
25042  UINTPTR_MAX macro, <a href="#7.18.2.4">7.18.2.4</a>
25043  uintptr_t type, <a href="#7.18.1.4">7.18.1.4</a>                                    va_arg macro, <a href="#7.15">7.15</a>, <a href="#7.15.1">7.15.1</a>, <a href="#7.15.1.1">7.15.1.1</a>, <a href="#7.15.1.2">7.15.1.2</a>,
25044  ULLONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.20.1.4">7.20.1.4</a>,                           <a href="#7.15.1.4">7.15.1.4</a>, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.9">7.19.6.9</a>, <a href="#7.19.6.10">7.19.6.10</a>,
25045       <a href="#7.24.4.1.2">7.24.4.1.2</a>                                                  <a href="#7.19.6.11">7.19.6.11</a>, <a href="#7.19.6.12">7.19.6.12</a>, <a href="#7.19.6.13">7.19.6.13</a>, <a href="#7.19.6.14">7.19.6.14</a>,
25046  ULONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.20.1.4">7.20.1.4</a>,                            <a href="#7.24.2.5">7.24.2.5</a>, <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.2.7">7.24.2.7</a>, <a href="#7.24.2.8">7.24.2.8</a>,
25047       <a href="#7.24.4.1.2">7.24.4.1.2</a>                                                  <a href="#7.24.2.9">7.24.2.9</a>, <a href="#7.24.2.10">7.24.2.10</a>
25048  unary arithmetic operators, <a href="#6.5.3.3">6.5.3.3</a>                         va_copy macro, <a href="#7.15">7.15</a>, <a href="#7.15.1">7.15.1</a>, <a href="#7.15.1.1">7.15.1.1</a>, <a href="#7.15.1.2">7.15.1.2</a>,
25049  unary expression, <a href="#6.5.3">6.5.3</a>                                          <a href="#7.15.1.3">7.15.1.3</a>
25050  unary minus operator (-), <a href="#6.5.3.3">6.5.3.3</a>, <a href="#F.3">F.3</a>                      va_end macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.15">7.15</a>, <a href="#7.15.1">7.15.1</a>, <a href="#7.15.1.3">7.15.1.3</a>,
25051  unary operators, <a href="#6.5.3">6.5.3</a>                                           <a href="#7.15.1.4">7.15.1.4</a>, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.9">7.19.6.9</a>, <a href="#7.19.6.10">7.19.6.10</a>,
25052  unary plus operator (+), <a href="#6.5.3.3">6.5.3.3</a>                                 <a href="#7.19.6.11">7.19.6.11</a>, <a href="#7.19.6.12">7.19.6.12</a>, <a href="#7.19.6.13">7.19.6.13</a>, <a href="#7.19.6.14">7.19.6.14</a>,
25053  unbuffered stream, <a href="#7.19.3">7.19.3</a>                                        <a href="#7.24.2.5">7.24.2.5</a>, <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.2.7">7.24.2.7</a>, <a href="#7.24.2.8">7.24.2.8</a>,
25054  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.24.2.9">7.24.2.9</a>, <a href="#7.24.2.10">7.24.2.10</a>
25055       <a href="#7.1.4">7.1.4</a>                                                  va_list type, <a href="#7.15">7.15</a>, <a href="#7.15.1.3">7.15.1.3</a>
25056  undefined behavior, <a href="#3.4.3">3.4.3</a>, <a href="#4">4</a>, <a href="#J.2">J.2</a>                            va_start macro, <a href="#7.15">7.15</a>, <a href="#7.15.1">7.15.1</a>, <a href="#7.15.1.1">7.15.1.1</a>,
25057  underscore character, <a href="#6.4.2.1">6.4.2.1</a>                                    <a href="#7.15.1.2">7.15.1.2</a>, <a href="#7.15.1.3">7.15.1.3</a>, <a href="#7.15.1.4">7.15.1.4</a>, <a href="#7.19.6.8">7.19.6.8</a>,
25058  underscore, leading, in identifier, <a href="#7.1.3">7.1.3</a>                         <a href="#7.19.6.9">7.19.6.9</a>, <a href="#7.19.6.10">7.19.6.10</a>, <a href="#7.19.6.11">7.19.6.11</a>, <a href="#7.19.6.12">7.19.6.12</a>,
25059  ungetc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.7.11">7.19.7.11</a>, <a href="#7.19.9.2">7.19.9.2</a>,                    <a href="#7.19.6.13">7.19.6.13</a>, <a href="#7.19.6.14">7.19.6.14</a>, <a href="#7.24.2.5">7.24.2.5</a>, <a href="#7.24.2.6">7.24.2.6</a>,
25060       <a href="#7.19.9.3">7.19.9.3</a>                                                    <a href="#7.24.2.7">7.24.2.7</a>, <a href="#7.24.2.8">7.24.2.8</a>, <a href="#7.24.2.9">7.24.2.9</a>, <a href="#7.24.2.10">7.24.2.10</a>
25061  ungetwc function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3.10">7.24.3.10</a>                         value, <a href="#3.17">3.17</a>
25062  Unicode required set, <a href="#6.10.8">6.10.8</a>                                value bits, <a href="#6.2.6.2">6.2.6.2</a>
25063  union                                                       variable arguments, <a href="#6.10.3">6.10.3</a>, <a href="#7.15">7.15</a>
25064    arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                              variable arguments header, <a href="#7.15">7.15</a>
25065    content, <a href="#6.7.2.3">6.7.2.3</a>                                          variable length array, <a href="#6.7.5">6.7.5</a>, <a href="#6.7.5.2">6.7.5.2</a>
25066    dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>                                 variably modified type, <a href="#6.7.5">6.7.5</a>, <a href="#6.7.5.2">6.7.5.2</a>
25067    initialization, <a href="#6.7.8">6.7.8</a>                                     vertical-tab character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>
25068    member alignment, <a href="#6.7.2.1">6.7.2.1</a>                                 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>,
25069    member name space, <a href="#6.2.3">6.2.3</a>                                       <a href="#7.4.1.10">7.4.1.10</a>
25070    member operator (.), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.3">6.5.2.3</a>                     vfprintf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.8">7.19.6.8</a>
25071    pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                            vfscanf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.9">7.19.6.9</a>
25072    specifier, <a href="#6.7.2.1">6.7.2.1</a>                                         vfwprintf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.2.5">7.24.2.5</a>
25073    tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>                                       vfwscanf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.2.6">7.24.2.6</a>, <a href="#7.24.3.10">7.24.3.10</a>
25074    type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.1">6.7.2.1</a>                                      visibility of identifier, <a href="#6.2.1">6.2.1</a>
25075  universal character name, <a href="#6.4.3">6.4.3</a>                             VLA, see variable length array
25076  unqualified type, <a href="#6.2.5">6.2.5</a>                                      void expression, <a href="#6.3.2.2">6.3.2.2</a>
25077  unqualified version of type, <a href="#6.2.5">6.2.5</a>                           void function parameter, <a href="#6.7.5.3">6.7.5.3</a>
25078  unsigned integer suffix, u or <a href="#U">U</a>, <a href="#6.4.4.1">6.4.4.1</a>                     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>
25079  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>             void type conversion, <a href="#6.3.2.2">6.3.2.2</a>
25080  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>,                 volatile storage, <a href="#5.1.2.3">5.1.2.3</a>
25081       <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>                                       volatile type qualifier, <a href="#6.7.3">6.7.3</a>
25082  unsigned types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>,           volatile-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.3">6.7.3</a>
25083       <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>                                     vprintf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.10">7.19.6.10</a>
25084  unspecified behavior, <a href="#3.4.4">3.4.4</a>, <a href="#4">4</a>, <a href="#J.1">J.1</a>                          vscanf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.11">7.19.6.11</a>
25085  unspecified value, <a href="#3.17.3">3.17.3</a>                                    vsnprintf function, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.12">7.19.6.12</a>
25086  uppercase letter, <a href="#5.2.1">5.2.1</a>                                     vsprintf function, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.13">7.19.6.13</a>
25087  use of library functions, <a href="#7.1.4">7.1.4</a>                             vsscanf function, <a href="#7.19.6.8">7.19.6.8</a>, <a href="#7.19.6.14">7.19.6.14</a>
25088 <!--page 552 indent 0-->
25089  vswprintf function, <a href="#7.24.2.7">7.24.2.7</a>                                  wctype.h header, <a href="#7.25">7.25</a>, <a href="#7.26.13">7.26.13</a>
25090  vswscanf function, <a href="#7.24.2.8">7.24.2.8</a>                                   wctype_t type, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.2.2.2">7.25.2.2.2</a>
25091  vwprintf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.2.9">7.24.2.9</a>                           WEOF macro, <a href="#7.24.1">7.24.1</a>, <a href="#7.24.3.1">7.24.3.1</a>, <a href="#7.24.3.3">7.24.3.3</a>, <a href="#7.24.3.6">7.24.3.6</a>,
25092  vwscanf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.2.10">7.24.2.10</a>, <a href="#7.24.3.10">7.24.3.10</a>                     <a href="#7.24.3.7">7.24.3.7</a>, <a href="#7.24.3.8">7.24.3.8</a>, <a href="#7.24.3.9">7.24.3.9</a>, <a href="#7.24.3.10">7.24.3.10</a>,
25093                                                                     <a href="#7.24.6.1.1">7.24.6.1.1</a>, <a href="#7.25.1">7.25.1</a>
25094  warnings, <a href="#I">I</a>                                                   while statement, <a href="#6.8.5.1">6.8.5.1</a>
25095  wchar.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.19.1">7.19.1</a>, <a href="#7.24">7.24</a>, <a href="#7.26.12">7.26.12</a>,             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>,
25096      <a href="#F">F</a>                                                              <a href="#7.25.2.1.10">7.25.2.1.10</a>
25097  WCHAR_MAX macro, <a href="#7.18.3">7.18.3</a>, <a href="#7.24.1">7.24.1</a>                               white-space characters, <a href="#6.4">6.4</a>
25098  WCHAR_MIN macro, <a href="#7.18.3">7.18.3</a>, <a href="#7.24.1">7.24.1</a>                               wide character, <a href="#3.7.3">3.7.3</a>
25099  wchar_t type, <a href="#3.7.3">3.7.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.7.8">6.7.8</a>,                     case mapping functions, <a href="#7.25.3.1">7.25.3.1</a>
25100      <a href="#6.10.8">6.10.8</a>, <a href="#7.17">7.17</a>, <a href="#7.18.3">7.18.3</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.20">7.20</a>,                extensible, <a href="#7.25.3.2">7.25.3.2</a>
25101      <a href="#7.24.1">7.24.1</a>, <a href="#7.24.2.1">7.24.2.1</a>, <a href="#7.24.2.2">7.24.2.2</a>                                  classification functions, <a href="#7.25.2.1">7.25.2.1</a>
25102  wcrtomb function, <a href="#7.19.3">7.19.3</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>,                      extensible, <a href="#7.25.2.2">7.25.2.2</a>
25103      <a href="#7.24.6.3.3">7.24.6.3.3</a>, <a href="#7.24.6.4.2">7.24.6.4.2</a>                                      constant, <a href="#6.4.4.4">6.4.4.4</a>
25104  wcscat function, <a href="#7.24.4.3.1">7.24.4.3.1</a>                                     formatted input/output functions, <a href="#7.24.2">7.24.2</a>
25105  wcschr function, <a href="#7.24.4.5.1">7.24.4.5.1</a>                                     input functions, <a href="#7.19.1">7.19.1</a>
25106  wcscmp function, <a href="#7.24.4.4.1">7.24.4.4.1</a>, <a href="#7.24.4.4.4">7.24.4.4.4</a>                         input/output functions, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.3">7.24.3</a>
25107  wcscoll function, <a href="#7.24.4.4.2">7.24.4.4.2</a>, <a href="#7.24.4.4.4">7.24.4.4.4</a>                        output functions, <a href="#7.19.1">7.19.1</a>
25108  wcscpy function, <a href="#7.24.4.2.1">7.24.4.2.1</a>                                     single-byte conversion functions, <a href="#7.24.6.1">7.24.6.1</a>
25109  wcscspn function, <a href="#7.24.4.5.2">7.24.4.5.2</a>                                  wide string, <a href="#7.1.1">7.1.1</a>
25110  wcsftime function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.24.5.1">7.24.5.1</a>                         wide string comparison functions, <a href="#7.24.4.4">7.24.4.4</a>
25111  wcslen function, <a href="#7.24.4.6.1">7.24.4.6.1</a>                                   wide string concatenation functions, <a href="#7.24.4.3">7.24.4.3</a>
25112  wcsncat function, <a href="#7.24.4.3.2">7.24.4.3.2</a>                                  wide string copying functions, <a href="#7.24.4.2">7.24.4.2</a>
25113  wcsncmp function, <a href="#7.24.4.4.3">7.24.4.4.3</a>                                  wide string literal, see string literal
25114  wcsncpy function, <a href="#7.24.4.2.2">7.24.4.2.2</a>                                  wide string miscellaneous functions, <a href="#7.24.4.6">7.24.4.6</a>
25115  wcspbrk function, <a href="#7.24.4.5.3">7.24.4.5.3</a>                                  wide string numeric conversion functions, <a href="#7.8.2.4">7.8.2.4</a>,
25116  wcsrchr function, <a href="#7.24.4.5.4">7.24.4.5.4</a>                                       <a href="#7.24.4.1">7.24.4.1</a>
25117  wcsrtombs function, <a href="#7.24.6.4.2">7.24.6.4.2</a>                                wide string search functions, <a href="#7.24.4.5">7.24.4.5</a>
25118  wcsspn function, <a href="#7.24.4.5.5">7.24.4.5.5</a>                                   wide-oriented stream, <a href="#7.19.2">7.19.2</a>
25119  wcsstr function, <a href="#7.24.4.5.6">7.24.4.5.6</a>                                   width, <a href="#6.2.6.2">6.2.6.2</a>
25120  wcstod function, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>                           WINT_MAX macro, <a href="#7.18.3">7.18.3</a>
25121  wcstod function, <a href="#7.24.4.1.1">7.24.4.1.1</a>                                   WINT_MIN macro, <a href="#7.18.3">7.18.3</a>
25122  wcstof function, <a href="#7.24.4.1.1">7.24.4.1.1</a>                                   wint_t type, <a href="#7.18.3">7.18.3</a>, <a href="#7.19.6.1">7.19.6.1</a>, <a href="#7.24.1">7.24.1</a>, <a href="#7.24.2.1">7.24.2.1</a>,
25123  wcstoimax function, <a href="#7.8.2.4">7.8.2.4</a>                                        <a href="#7.25.1">7.25.1</a>
25124  wcstok function, <a href="#7.24.4.5.7">7.24.4.5.7</a>                                   wmemchr function, <a href="#7.24.4.5.8">7.24.4.5.8</a>
25125  wcstol function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>,                 wmemcmp function, <a href="#7.24.4.4.5">7.24.4.4.5</a>
25126      <a href="#7.24.4.1.2">7.24.4.1.2</a>                                                wmemcpy function, <a href="#7.24.4.2.3">7.24.4.2.3</a>
25127  wcstold function, <a href="#7.24.4.1.1">7.24.4.1.1</a>                                  wmemmove function, <a href="#7.24.4.2.4">7.24.4.2.4</a>
25128  wcstoll function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.24.4.1.2">7.24.4.1.2</a>                         wmemset function, <a href="#7.24.4.6.2">7.24.4.6.2</a>
25129  wcstombs function, <a href="#7.20.8.2">7.20.8.2</a>, <a href="#7.24.6.4">7.24.6.4</a>                         wprintf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.2.9">7.24.2.9</a>, <a href="#7.24.2.11">7.24.2.11</a>
25130  wcstoul function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.19.6.2">7.19.6.2</a>, <a href="#7.24.2.2">7.24.2.2</a>,                wscanf function, <a href="#7.19.1">7.19.1</a>, <a href="#7.24.2.10">7.24.2.10</a>, <a href="#7.24.2.12">7.24.2.12</a>,
25131      <a href="#7.24.4.1.2">7.24.4.1.2</a>                                                     <a href="#7.24.3.10">7.24.3.10</a>
25132  wcstoull function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.24.4.1.2">7.24.4.1.2</a>
25133  wcstoumax function, <a href="#7.8.2.4">7.8.2.4</a>                                   xor macro, <a href="#7.9">7.9</a>
25134  wcsxfrm function, <a href="#7.24.4.4.4">7.24.4.4.4</a>                                  xor_eq macro, <a href="#7.9">7.9</a>
25135  wctob function, <a href="#7.24.6.1.2">7.24.6.1.2</a>, <a href="#7.25.2.1">7.25.2.1</a>
25136  wctomb function, <a href="#7.20.7.3">7.20.7.3</a>, <a href="#7.20.8.2">7.20.8.2</a>, <a href="#7.24.6.3">7.24.6.3</a>
25137  wctrans function, <a href="#7.25.3.2.1">7.25.3.2.1</a>, <a href="#7.25.3.2.2">7.25.3.2.2</a>
25138  wctrans_t type, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.3.2.2">7.25.3.2.2</a>
25139  wctype function, <a href="#7.25.2.2.1">7.25.2.2.1</a>, <a href="#7.25.2.2.2">7.25.2.2.2</a>
25140 </pre>
25141 </body></html>