newer c1x draft
[c-standard] / n1516.html
1 <html><head><title>N1516                     Committee Draft -- October 4, 2010          ISO/IEC 9899:201x</title></head><body><pre>
2 N1516                     Committee Draft -- October 4, 2010          ISO/IEC 9899:201x
3
4
5
6
7 INTERNATIONAL STANDARD                         (C)ISO/IEC              ISO/IEC 9899:201x
8
9
10
11
12 Programming languages -- C
13
14
15                                        ABSTRACT
16
17
18
19                      (Cover sheet to be provided by ISO Secretariat.)
20
21 This International Standard specifies the form and establishes the interpretation of
22 programs expressed in the programming language C. Its purpose is to promote
23 portability, reliability, maintainability, and efficient execution of C language programs on
24 a variety of computing systems.
25
26 Clauses are included that detail the C language itself and the contents of the C language
27 execution library. Annexes summarize aspects of both of them, and enumerate factors
28 that influence the portability of C programs.
29
30 Although this International Standard is intended to guide knowledgeable C language
31 programmers as well as implementors of C language translation systems, the document
32 itself is not designed to serve as a tutorial.
33
34 Recipients of this draft are invited to submit, with their comments, notification of any
35 relevant patent rights of which they are aware and to provide supporting documentation.
36
37 Changes from the previous draft (N1494) are indicated by ''diff marks'' in the right
38 margin: deleted text is marked with ''*'', new or changed text with '' ''.
39
40
41
42
43 [page i]
44
45
46
47 [page ii]
48
49 <a name="Contents" href="#Contents">Contents</a>
50 <a href="#Foreword">Foreword       . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                 xiii</a>
51 <a href="#Introduction">Introduction    . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii</a>
52 <a href="#1">1. Scope       . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                   1</a>
53 <a href="#2">2. Normative references    . . . . . . . . . . . . . . . . . . . . . . .                                   2</a>
54 <a href="#3">3. Terms, definitions, and symbols   . . . . . . . . . . . . . . . . . . .                                  3</a>
55 <a href="#4">4. Conformance       . . . . . . . . . . . . . . . . . . . . . . . . . .                                   8</a>
56 <a href="#5">5. Environment    . . . . . . . . . . .       . .   .   .   .   .   .   .   .    .   .   .   .   .   .    10</a>
57 <a href="#5.1">   5.1 Conceptual models       . . . . . .    . .   .   .   .   .   .   .   .    .   .   .   .   .   .    10</a>
58 <a href="#5.1.1">        5.1.1  Translation environment .      . .   .   .   .   .   .   .   .    .   .   .   .   .   .    10</a>
59 <a href="#5.1.2">        5.1.2  Execution environments     .   . .   .   .   .   .   .   .   .    .   .   .   .   .   .    12</a>
60 <a href="#5.2">   5.2 Environmental considerations    . .    . .   .   .   .   .   .   .   .    .   .   .   .   .   .    22</a>
61 <a href="#5.2.1">        5.2.1  Character sets    . . . . .    . .   .   .   .   .   .   .   .    .   .   .   .   .   .    22</a>
62 <a href="#5.2.2">        5.2.2  Character display semantics      .   .   .   .   .   .   .   .    .   .   .   .   .   .    24</a>
63 <a href="#5.2.3">        5.2.3  Signals and interrupts . .     . .   .   .   .   .   .   .   .    .   .   .   .   .   .    25</a>
64 <a href="#5.2.4">        5.2.4  Environmental limits    . .    . .   .   .   .   .   .   .   .    .   .   .   .   .   .    25</a>
65 <a href="#6">6. Language . . . . . . . . . . . . . . . .             .   .   .   .   .   .    .   .   .   .   .   .    35</a>
66 <a href="#6.1">   6.1 Notation . . . . . . . . . . . . . .             .   .   .   .   .   .    .   .   .   .   .   .    35</a>
67 <a href="#6.2">   6.2 Concepts       . . . . . . . . . . . . .         .   .   .   .   .   .    .   .   .   .   .   .    35</a>
68 <a href="#6.2.1">        6.2.1   Scopes of identifiers     . . . . .      .   .   .   .   .   .    .   .   .   .   .   .    35</a>
69 <a href="#6.2.2">        6.2.2   Linkages of identifiers . . . . .        .   .   .   .   .   .    .   .   .   .   .   .    36</a>
70 <a href="#6.2.3">        6.2.3   Name spaces of identifiers      . . .    .   .   .   .   .   .    .   .   .   .   .   .    37</a>
71 <a href="#6.2.4">        6.2.4   Storage durations of objects     . .    .   .   .   .   .   .    .   .   .   .   .   .    38</a>
72 <a href="#6.2.5">        6.2.5   Types       . . . . . . . . . . .       .   .   .   .   .   .    .   .   .   .   .   .    39</a>
73 <a href="#6.2.6">        6.2.6   Representations of types . . . .        .   .   .   .   .   .    .   .   .   .   .   .    44</a>
74 <a href="#6.2.7">        6.2.7   Compatible type and composite type          .   .   .   .   .    .   .   .   .   .   .    47</a>
75 <a href="#6.2.8">        6.2.8   Alignment of objects     . . . . .      .   .   .   .   .   .    .   .   .   .   .   .    48</a>
76 <a href="#6.3">   6.3 Conversions       . . . . . . . . . . . .        .   .   .   .   .   .    .   .   .   .   .   .    50</a>
77 <a href="#6.3.1">        6.3.1   Arithmetic operands      . . . . .      .   .   .   .   .   .    .   .   .   .   .   .    50</a>
78 <a href="#6.3.2">        6.3.2   Other operands       . . . . . . .      .   .   .   .   .   .    .   .   .   .   .   .    54</a>
79 <a href="#6.4">   6.4 Lexical elements       . . . . . . . . . .       .   .   .   .   .   .    .   .   .   .   .   .    57</a>
80 <a href="#6.4.1">        6.4.1   Keywords . . . . . . . . . .            .   .   .   .   .   .    .   .   .   .   .   .    58</a>
81 <a href="#6.4.2">        6.4.2   Identifiers . . . . . . . . . .          .   .   .   .   .   .    .   .   .   .   .   .    59</a>
82 <a href="#6.4.3">        6.4.3   Universal character names      . . .    .   .   .   .   .   .    .   .   .   .   .   .    61</a>
83 <a href="#6.4.4">        6.4.4   Constants . . . . . . . . . .           .   .   .   .   .   .    .   .   .   .   .   .    62</a>
84 <a href="#6.4.5">        6.4.5   String literals   . . . . . . . .       .   .   .   .   .   .    .   .   .   .   .   .    70</a>
85 <a href="#6.4.6">        6.4.6   Punctuators . . . . . . . . .           .   .   .   .   .   .    .   .   .   .   .   .    72</a>
86 <a href="#6.4.7">        6.4.7   Header names      . . . . . . . .       .   .   .   .   .   .    .   .   .   .   .   .    73</a>
87 <a href="#6.4.8">        6.4.8   Preprocessing numbers        . . . .    .   .   .   .   .   .    .   .   .   .   .   .    74</a>
88 <a href="#6.4.9">        6.4.9   Comments        . . . . . . . . .       .   .   .   .   .   .    .   .   .   .   .   .    75</a>
89
90
91 [page iii]
92
93 <a href="#6.5">     6.5  Expressions      . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .    76</a>
94 <a href="#6.5.1">          6.5.1   Primary expressions      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    78</a>
95 <a href="#6.5.2">          6.5.2   Postfix operators . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .    79</a>
96 <a href="#6.5.3">          6.5.3   Unary operators      . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    88</a>
97 <a href="#6.5.4">          6.5.4   Cast operators . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .    91</a>
98 <a href="#6.5.5">          6.5.5   Multiplicative operators   . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    92</a>
99 <a href="#6.5.6">          6.5.6   Additive operators     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    92</a>
100 <a href="#6.5.7">          6.5.7   Bitwise shift operators . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .    94</a>
101 <a href="#6.5.8">          6.5.8   Relational operators . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .    95</a>
102 <a href="#6.5.9">          6.5.9   Equality operators     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    96</a>
103 <a href="#6.5.10">          6.5.10 Bitwise AND operator . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .    97</a>
104 <a href="#6.5.11">          6.5.11 Bitwise exclusive OR operator         .   .   .   .   .   .   .   .   .   .   .   .   .    98</a>
105 <a href="#6.5.12">          6.5.12 Bitwise inclusive OR operator     .   .   .   .   .   .   .   .   .   .   .   .   .   .    98</a>
106 <a href="#6.5.13">          6.5.13 Logical AND operator . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .    99</a>
107 <a href="#6.5.14">          6.5.14 Logical OR operator       . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    99</a>
108 <a href="#6.5.15">          6.5.15 Conditional operator      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   100</a>
109 <a href="#6.5.16">          6.5.16 Assignment operators . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   101</a>
110 <a href="#6.5.17">          6.5.17 Comma operator . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   104</a>
111 <a href="#6.6">     6.6 Constant expressions . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   105</a>
112 <a href="#6.7">     6.7 Declarations      . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   107</a>
113 <a href="#6.7.1">          6.7.1   Storage-class specifiers    . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   108</a>
114 <a href="#6.7.2">          6.7.2   Type specifiers . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   109</a>
115 <a href="#6.7.3">          6.7.3   Type qualifiers . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   119</a>
116 <a href="#6.7.4">          6.7.4   Function specifiers     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   123</a>
117 <a href="#6.7.5">          6.7.5   Alignment specifier . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   125</a>
118 <a href="#6.7.6">          6.7.6   Declarators     . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   126</a>
119 <a href="#6.7.7">          6.7.7   Type names . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   134</a>
120 <a href="#6.7.8">          6.7.8   Type definitions      . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   135</a>
121 <a href="#6.7.9">          6.7.9   Initialization    . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   137</a>
122 <a href="#6.7.10">          6.7.10 Static assertions     . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   143</a>
123 <a href="#6.8">     6.8 Statements and blocks      . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   144</a>
124 <a href="#6.8.1">          6.8.1   Labeled statements     . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   144</a>
125 <a href="#6.8.2">          6.8.2   Compound statement       . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145</a>
126 <a href="#6.8.3">          6.8.3   Expression and null statements       .   .   .   .   .   .   .   .   .   .   .   .   .   145</a>
127 <a href="#6.8.4">          6.8.4   Selection statements     . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   146</a>
128 <a href="#6.8.5">          6.8.5   Iteration statements . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   148</a>
129 <a href="#6.8.6">          6.8.6   Jump statements      . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   149</a>
130 <a href="#6.9">     6.9 External definitions      . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   153</a>
131 <a href="#6.9.1">          6.9.1   Function definitions . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   154</a>
132 <a href="#6.9.2">          6.9.2   External object definitions   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   156</a>
133 <a href="#6.10">     6.10 Preprocessing directives     . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   158</a>
134 <a href="#6.10.1">          6.10.1 Conditional inclusion     . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   160</a>
135 <a href="#6.10.2">          6.10.2 Source file inclusion      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   162</a>
136 <a href="#6.10.3">          6.10.3 Macro replacement . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   164</a>
137
138
139 [page iv]
140
141 <a href="#6.10.4">       6.10.4 Line control . . . . . .        .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   171</a>
142 <a href="#6.10.5">       6.10.5 Error directive . . . . .       .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   172</a>
143 <a href="#6.10.6">       6.10.6 Pragma directive . . . .        .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   172</a>
144 <a href="#6.10.7">       6.10.7 Null directive      . . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   173</a>
145 <a href="#6.10.8">       6.10.8 Predefined macro names .         .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   173</a>
146 <a href="#6.10.9">       6.10.9 Pragma operator       . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   175</a>
147 <a href="#6.11">  6.11 Future language directions     . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
148 <a href="#6.11.1">       6.11.1 Floating types      . . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
149 <a href="#6.11.2">       6.11.2 Linkages of identifiers . .      .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
150 <a href="#6.11.3">       6.11.3 External names        . . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
151 <a href="#6.11.4">       6.11.4 Character escape sequences          .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
152 <a href="#6.11.5">       6.11.5 Storage-class specifiers     .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
153 <a href="#6.11.6">       6.11.6 Function declarators      . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
154 <a href="#6.11.7">       6.11.7 Function definitions . . .       .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
155 <a href="#6.11.8">       6.11.8 Pragma directives       . . .   .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
156 <a href="#6.11.9">       6.11.9 Predefined macro names .         .   .   .   .   .   .   .   .   .    .   .   .   .   .   .   177</a>
157 <a href="#7">7. Library . . . . . . . . . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   178</a>
158 <a href="#7.1">   7.1 Introduction     . . . . . . . . . . . . .             .   .   .   .   .    .   .   .   .   .   .   178</a>
159 <a href="#7.1.1">         7.1.1 Definitions of terms . . . . . . .              .   .   .   .   .    .   .   .   .   .   .   178</a>
160 <a href="#7.1.2">         7.1.2 Standard headers . . . . . . . .               .   .   .   .   .    .   .   .   .   .   .   179</a>
161 <a href="#7.1.3">         7.1.3 Reserved identifiers . . . . . . .              .   .   .   .   .    .   .   .   .   .   .   180</a>
162 <a href="#7.1.4">         7.1.4 Use of library functions    . . . . .          .   .   .   .   .    .   .   .   .   .   .   181</a>
163 <a href="#7.2">   7.2 Diagnostics &lt;assert.h&gt;          . . . . . . .          .   .   .   .   .    .   .   .   .   .   .   184</a>
164 <a href="#7.2.1">         7.2.1 Program diagnostics       . . . . . .          .   .   .   .   .    .   .   .   .   .   .   184</a>
165 <a href="#7.3">   7.3 Complex arithmetic &lt;complex.h&gt;           . . .         .   .   .   .   .    .   .   .   .   .   .   186</a>
166 <a href="#7.3.1">         7.3.1 Introduction . . . . . . . . . .               .   .   .   .   .    .   .   .   .   .   .   186</a>
167 <a href="#7.3.2">         7.3.2 Conventions . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   187</a>
168 <a href="#7.3.3">         7.3.3 Branch cuts . . . . . . . . . .                .   .   .   .   .    .   .   .   .   .   .   187</a>
169 <a href="#7.3.4">         7.3.4 The CX_LIMITED_RANGE pragma                    .   .   .   .   .    .   .   .   .   .   .   187</a>
170 <a href="#7.3.5">         7.3.5 Trigonometric functions . . . . .              .   .   .   .   .    .   .   .   .   .   .   188</a>
171 <a href="#7.3.6">         7.3.6 Hyperbolic functions      . . . . . .          .   .   .   .   .    .   .   .   .   .   .   190</a>
172 <a href="#7.3.7">         7.3.7 Exponential and logarithmic functions              .   .   .   .    .   .   .   .   .   .   192</a>
173 <a href="#7.3.8">         7.3.8 Power and absolute-value functions             .   .   .   .   .    .   .   .   .   .   .   193</a>
174 <a href="#7.3.9">         7.3.9 Manipulation functions      . . . . .          .   .   .   .   .    .   .   .   .   .   .   194</a>
175 <a href="#7.4">   7.4 Character handling &lt;ctype.h&gt; . . . . .                 .   .   .   .   .    .   .   .   .   .   .   198</a>
176 <a href="#7.4.1">         7.4.1 Character classification functions    .         .   .   .   .   .    .   .   .   .   .   .   198</a>
177 <a href="#7.4.2">         7.4.2 Character case mapping functions     .         .   .   .   .   .    .   .   .   .   .   .   201</a>
178 <a href="#7.5">   7.5 Errors &lt;errno.h&gt;         . . . . . . . . . .           .   .   .   .   .    .   .   .   .   .   .   203</a>
179 <a href="#7.6">   7.6 Floating-point environment &lt;fenv.h&gt;        . .         .   .   .   .   .    .   .   .   .   .   .   204</a>
180 <a href="#7.6.1">         7.6.1 The FENV_ACCESS pragma           . . .         .   .   .   .   .    .   .   .   .   .   .   206</a>
181 <a href="#7.6.2">         7.6.2 Floating-point exceptions      . . . .         .   .   .   .   .    .   .   .   .   .   .   207</a>
182 <a href="#7.6.3">         7.6.3 Rounding . . . . . . . . . . .                 .   .   .   .   .    .   .   .   .   .   .   210</a>
183 <a href="#7.6.4">         7.6.4 Environment        . . . . . . . . .           .   .   .   .   .    .   .   .   .   .   .   211</a>
184 <a href="#7.7">   7.7 Characteristics of floating types &lt;float.h&gt;             .   .   .   .   .    .   .   .   .   .   .   214</a>
185
186 [page v]
187
188 <a href="#7.8">     7.8    Format conversion of integer types &lt;inttypes.h&gt; . . . .           .   .   .   .   215</a>
189 <a href="#7.8.1">            7.8.1    Macros for format specifiers      . . . . . . . . . .     .   .   .   .   215</a>
190 <a href="#7.8.2">            7.8.2    Functions for greatest-width integer types   . . . . .   .   .   .   .   216</a>
191 <a href="#7.9">     7.9    Alternative spellings &lt;iso646.h&gt; . . . . . . . . . . .            .   .   .   .   219</a>
192 <a href="#7.10">     7.10   Sizes of integer types &lt;limits.h&gt;         . . . . . . . . . .     .   .   .   .   220</a>
193 <a href="#7.11">     7.11   Localization &lt;locale.h&gt; . . . . . . . . . . . . . .               .   .   .   .   221</a>
194 <a href="#7.11.1">            7.11.1 Locale control . . . . . . . . . . . . . . . .             .   .   .   .   222</a>
195 <a href="#7.11.2">            7.11.2 Numeric formatting convention inquiry . . . . . .          .   .   .   .   223</a>
196 <a href="#7.12">     7.12   Mathematics &lt;math.h&gt; . . . . . . . . . . . . . . .                .   .   .   .   229</a>
197 <a href="#7.12.1">            7.12.1 Treatment of error conditions . . . . . . . . . .          .   .   .   .   231</a>
198 <a href="#7.12.2">            7.12.2 The FP_CONTRACT pragma             . . . . . . . . . .     .   .   .   .   233</a>
199 <a href="#7.12.3">            7.12.3 Classification macros       . . . . . . . . . . . . .       .   .   .   .   233</a>
200 <a href="#7.12.4">            7.12.4 Trigonometric functions . . . . . . . . . . . .            .   .   .   .   236</a>
201 <a href="#7.12.5">            7.12.5 Hyperbolic functions       . . . . . . . . . . . . .       .   .   .   .   238</a>
202 <a href="#7.12.6">            7.12.6 Exponential and logarithmic functions        . . . . . .   .   .   .   .   240</a>
203 <a href="#7.12.7">            7.12.7 Power and absolute-value functions         . . . . . . .   .   .   .   .   245</a>
204 <a href="#7.12.8">            7.12.8 Error and gamma functions . . . . . . . . . . .            .   .   .   .   247</a>
205 <a href="#7.12.9">            7.12.9 Nearest integer functions . . . . . . . . . . . .          .   .   .   .   249</a>
206 <a href="#7.12.10">            7.12.10 Remainder functions       . . . . . . . . . . . . .       .   .   .   .   252</a>
207 <a href="#7.12.11">            7.12.11 Manipulation functions       . . . . . . . . . . . .      .   .   .   .   253</a>
208 <a href="#7.12.12">            7.12.12 Maximum, minimum, and positive difference functions           .   .   .   255</a>
209 <a href="#7.12.13">            7.12.13 Floating multiply-add . . . . . . . . . . . . .           .   .   .   .   256</a>
210 <a href="#7.12.14">            7.12.14 Comparison macros . . . . . . . . . . . . . .             .   .   .   .   257</a>
211 <a href="#7.13">     7.13   Nonlocal jumps &lt;setjmp.h&gt;            . . . . . . . . . . . .      .   .   .   .   260</a>
212 <a href="#7.13.1">            7.13.1 Save calling environment         . . . . . . . . . . .     .   .   .   .   260</a>
213 <a href="#7.13.2">            7.13.2 Restore calling environment        . . . . . . . . . .     .   .   .   .   261</a>
214 <a href="#7.14">     7.14   Signal handling &lt;signal.h&gt; . . . . . . . . . . . . .              .   .   .   .   263</a>
215 <a href="#7.14.1">            7.14.1 Specify signal handling       . . . . . . . . . . . .      .   .   .   .   264</a>
216 <a href="#7.14.2">            7.14.2 Send signal      . . . . . . . . . . . . . . . . .         .   .   .   .   265</a>
217 <a href="#7.15">     7.15   Alignment &lt;stdalign.h&gt;            . . . . . . . . . . . . .       .   .   .   .   266</a>
218 <a href="#7.16">     7.16   Variable arguments &lt;stdarg.h&gt;           . . . . . . . . . . .     .   .   .   .   267</a>
219 <a href="#7.16.1">            7.16.1 Variable argument list access macros . . . . . . .         .   .   .   .   267</a>
220 <a href="#7.17">     7.17   Atomics &lt;stdatomic.h&gt; . . . . . . . . . . . . . .                 .   .   .   .   271</a>
221 <a href="#7.17.1">            7.17.1 Introduction . . . . . . . . . . . . . . . . .             .   .   .   .   271</a>
222 <a href="#7.17.2">            7.17.2 Initialization      . . . . . . . . . . . . . . . .        .   .   .   .   272</a>
223 <a href="#7.17.3">            7.17.3 Order and consistency . . . . . . . . . . . . .            .   .   .   .   273</a>
224 <a href="#7.17.4">            7.17.4 Fences . . . . . . . . . . . . . . . . . . .               .   .   .   .   276</a>
225 <a href="#7.17.5">            7.17.5 Lock-free property       . . . . . . . . . . . . . .       .   .   .   .   277</a>
226 <a href="#7.17.6">            7.17.6 Atomic integer and address types         . . . . . . . .   .   .   .   .   278</a>
227 <a href="#7.17.7">            7.17.7 Operations on atomic types . . . . . . . . . . .           .   .   .   .   280</a>
228 <a href="#7.17.8">            7.17.8 Atomic flag type and operations . . . . . . . . .           .   .   .   .   283</a>
229 <a href="#7.18">     7.18   Boolean type and values &lt;stdbool.h&gt;             . . . . . . . .   .   .   .   .   285</a>
230 <a href="#7.19">     7.19   Common definitions &lt;stddef.h&gt; . . . . . . . . . . .                .   .   .   .   286</a>
231 <a href="#7.20">     7.20   Integer types &lt;stdint.h&gt; . . . . . . . . . . . . . .              .   .   .   .   288</a>
232
233
234 [page vi]
235
236 <a href="#7.20.1">         7.20.1 Integer types      . . . . . . . . . . . .      .   .    .   .   .   .   .   .   288</a>
237 <a href="#7.20.2">         7.20.2 Limits of specified-width integer types    . .   .   .    .   .   .   .   .   .   290</a>
238 <a href="#7.20.3">         7.20.3 Limits of other integer types    . . . . . .    .   .    .   .   .   .   .   .   292</a>
239 <a href="#7.20.4">         7.20.4 Macros for integer constants     . . . . . .    .   .    .   .   .   .   .   .   293</a>
240 <a href="#7.21">  7.21   Input/output &lt;stdio.h&gt;         . . . . . . . . . .     .   .    .   .   .   .   .   .   295</a>
241 <a href="#7.21.1">         7.21.1 Introduction . . . . . . . . . . . . .          .   .    .   .   .   .   .   .   295</a>
242 <a href="#7.21.2">         7.21.2 Streams       . . . . . . . . . . . . . .       .   .    .   .   .   .   .   .   297</a>
243 <a href="#7.21.3">         7.21.3 Files . . . . . . . . . . . . . . . .           .   .    .   .   .   .   .   .   299</a>
244 <a href="#7.21.4">         7.21.4 Operations on files      . . . . . . . . . .     .   .    .   .   .   .   .   .   301</a>
245 <a href="#7.21.5">         7.21.5 File access functions     . . . . . . . . .     .   .    .   .   .   .   .   .   303</a>
246 <a href="#7.21.6">         7.21.6 Formatted input/output functions     . . . .    .   .    .   .   .   .   .   .   308</a>
247 <a href="#7.21.7">         7.21.7 Character input/output functions . . . . .      .   .    .   .   .   .   .   .   329</a>
248 <a href="#7.21.8">         7.21.8 Direct input/output functions    . . . . . .    .   .    .   .   .   .   .   .   333</a>
249 <a href="#7.21.9">         7.21.9 File positioning functions     . . . . . . .    .   .    .   .   .   .   .   .   334</a>
250 <a href="#7.21.10">         7.21.10 Error-handling functions . . . . . . . .       .   .    .   .   .   .   .   .   337</a>
251 <a href="#7.22">  7.22   General utilities &lt;stdlib.h&gt;        . . . . . . . .    .   .    .   .   .   .   .   .   339</a>
252 <a href="#7.22.1">         7.22.1 Numeric conversion functions . . . . . .        .   .    .   .   .   .   .   .   340</a>
253 <a href="#7.22.2">         7.22.2 Pseudo-random sequence generation functions         .    .   .   .   .   .   .   345</a>
254 <a href="#7.22.3">         7.22.3 Memory management functions . . . . .           .   .    .   .   .   .   .   .   346</a>
255 <a href="#7.22.4">         7.22.4 Communication with the environment        . .   .   .    .   .   .   .   .   .   348</a>
256 <a href="#7.22.5">         7.22.5 Searching and sorting utilities . . . . . .     .   .    .   .   .   .   .   .   352</a>
257 <a href="#7.22.6">         7.22.6 Integer arithmetic functions     . . . . . .    .   .    .   .   .   .   .   .   354</a>
258 <a href="#7.22.7">         7.22.7 Multibyte/wide character conversion functions       .    .   .   .   .   .   .   355</a>
259 <a href="#7.22.8">         7.22.8 Multibyte/wide string conversion functions      .   .    .   .   .   .   .   .   357</a>
260 <a href="#7.23">  7.23   String handling &lt;string.h&gt; . . . . . . . . .           .   .    .   .   .   .   .   .   359</a>
261 <a href="#7.23.1">         7.23.1 String function conventions . . . . . . .       .   .    .   .   .   .   .   .   359</a>
262 <a href="#7.23.2">         7.23.2 Copying functions       . . . . . . . . . .     .   .    .   .   .   .   .   .   359</a>
263 <a href="#7.23.3">         7.23.3 Concatenation functions . . . . . . . .         .   .    .   .   .   .   .   .   361</a>
264 <a href="#7.23.4">         7.23.4 Comparison functions . . . . . . . . .          .   .    .   .   .   .   .   .   362</a>
265 <a href="#7.23.5">         7.23.5 Search functions      . . . . . . . . . . .     .   .    .   .   .   .   .   .   364</a>
266 <a href="#7.23.6">         7.23.6 Miscellaneous functions . . . . . . . .         .   .    .   .   .   .   .   .   367</a>
267 <a href="#7.24">  7.24   Type-generic math &lt;tgmath.h&gt;          . . . . . . .    .   .    .   .   .   .   .   .   369</a>
268 <a href="#7.25">  7.25   Threads &lt;threads.h&gt;          . . . . . . . . . . .     .   .    .   .   .   .   .   .   372</a>
269 <a href="#7.25.1">         7.25.1 Introduction . . . . . . . . . . . . .          .   .    .   .   .   .   .   .   372</a>
270 <a href="#7.25.2">         7.25.2 Initialization functions . . . . . . . . .      .   .    .   .   .   .   .   .   374</a>
271 <a href="#7.25.3">         7.25.3 Condition variable functions     . . . . . .    .   .    .   .   .   .   .   .   374</a>
272 <a href="#7.25.4">         7.25.4 Mutex functions       . . . . . . . . . . .     .   .    .   .   .   .   .   .   376</a>
273 <a href="#7.25.5">         7.25.5 Thread functions . . . . . . . . . . .          .   .    .   .   .   .   .   .   379</a>
274 <a href="#7.25.6">         7.25.6 Thread-specific storage functions     . . . .    .   .    .   .   .   .   .   .   381</a>
275 <a href="#7.25.7">         7.25.7 Time functions . . . . . . . . . . . .          .   .    .   .   .   .   .   .   383</a>
276 <a href="#7.26">  7.26   Date and time &lt;time.h&gt;         . . . . . . . . . .     .   .    .   .   .   .   .   .   384</a>
277 <a href="#7.26.1">         7.26.1 Components of time        . . . . . . . . .     .   .    .   .   .   .   .   .   384</a>
278 <a href="#7.26.2">         7.26.2 Time manipulation functions      . . . . . .    .   .    .   .   .   .   .   .   385</a>
279 <a href="#7.26.3">         7.26.3 Time conversion functions      . . . . . . .    .   .    .   .   .   .   .   .   387</a>
280
281
282 [page vii]
283
284 <a href="#7.27">   7.27 Unicode utilities &lt;uchar.h&gt; . . . . . . . . . . . . . .               . .     .   394</a>
285 <a href="#7.27.1">        7.27.1 Restartable multibyte/wide character conversion functions        .     .   394</a>
286 <a href="#7.28">   7.28 Extended multibyte and wide character utilities &lt;wchar.h&gt; . .         . .     .   398</a>
287 <a href="#7.28.1">        7.28.1 Introduction . . . . . . . . . . . . . . . . . .               . .     .   398</a>
288 <a href="#7.28.2">        7.28.2 Formatted wide character input/output functions       . . .    . .     .   399</a>
289 <a href="#7.28.3">        7.28.3 Wide character input/output functions        . . . . . . .     . .     .   417</a>
290 <a href="#7.28.4">        7.28.4 General wide string utilities     . . . . . . . . . . .        . .     .   421</a>
291 <a href="#7.28.4.1">                 7.28.4.1 Wide string numeric conversion functions     . .    . .     .   422</a>
292 <a href="#7.28.4.2">                 7.28.4.2 Wide string copying functions . . . . . . .         . .     .   426</a>
293 <a href="#7.28.4.3">                 7.28.4.3 Wide string concatenation functions      . . . .    . .     .   428</a>
294 <a href="#7.28.4.4">                 7.28.4.4 Wide string comparison functions      . . . . .     . .     .   429</a>
295 <a href="#7.28.4.5">                 7.28.4.5 Wide string search functions      . . . . . . .     . .     .   431</a>
296 <a href="#7.28.4.6">                 7.28.4.6 Miscellaneous functions      . . . . . . . . .      . .     .   435</a>
297 <a href="#7.28.5">        7.28.5 Wide character time conversion functions       . . . . . .     . .     .   435</a>
298 <a href="#7.28.6">        7.28.6 Extended multibyte/wide character conversion utilities .       . .     .   436</a>
299 <a href="#7.28.6.1">                 7.28.6.1 Single-byte/wide character conversion functions     . .     .   437</a>
300 <a href="#7.28.6.2">                 7.28.6.2 Conversion state functions     . . . . . . . .      . .     .   437</a>
301 <a href="#7.28.6.3">                 7.28.6.3 Restartable multibyte/wide character conversion
302                            functions   . . . . . . . . . . . . . . .          . . . 438</a>
303 <a href="#7.28.6.4">                 7.28.6.4 Restartable multibyte/wide string conversion
304                            functions   . . . . . . . . . . . . . . .          .   .   .   440</a>
305 <a href="#7.29">   7.29 Wide character classification and mapping utilities &lt;wctype.h&gt;         .   .   .   443</a>
306 <a href="#7.29.1">        7.29.1 Introduction . . . . . . . . . . . . . . . . . .               .   .   .   443</a>
307 <a href="#7.29.2">        7.29.2 Wide character classification utilities . . . . . . . .         .   .   .   444</a>
308 <a href="#7.29.2.1">                 7.29.2.1 Wide character classification functions     . . .    .   .   .   444</a>
309 <a href="#7.29.2.2">                 7.29.2.2 Extensible wide character classification
310                            functions   . . . . . . . . . . . . . . .          . . . 447</a>
311 <a href="#7.29.3">        7.29.3 Wide character case mapping utilities . . . . . . . .          . . . 449</a>
312 <a href="#7.29.3.1">                 7.29.3.1 Wide character case mapping functions      . . .    . . . 449</a>
313 <a href="#7.29.3.2">                 7.29.3.2 Extensible wide character case mapping
314                            functions   . . . . . . . . . . . . . . .          .   .   .   449</a>
315 <a href="#7.30">   7.30 Future library directions    . . . . . . . . . . . . . . . .          .   .   .   451</a>
316 <a href="#7.30.1">        7.30.1 Complex arithmetic &lt;complex.h&gt; . . . . . . . .                 .   .   .   451</a>
317 <a href="#7.30.2">        7.30.2 Character handling &lt;ctype.h&gt;            . . . . . . . . .      .   .   .   451</a>
318 <a href="#7.30.3">        7.30.3 Errors &lt;errno.h&gt;           . . . . . . . . . . . . . .         .   .   .   451</a>
319 <a href="#7.30.4">        7.30.4 Format conversion of integer types &lt;inttypes.h&gt;            .   .   .   .   451</a>
320 <a href="#7.30.5">        7.30.5 Localization &lt;locale.h&gt;           . . . . . . . . . . .        .   .   .   451</a>
321 <a href="#7.30.6">        7.30.6 Signal handling &lt;signal.h&gt;           . . . . . . . . . .       .   .   .   451</a>
322 <a href="#7.30.7">        7.30.7 Boolean type and values &lt;stdbool.h&gt;            . . . . . .     .   .   .   451</a>
323 <a href="#7.30.8">        7.30.8 Integer types &lt;stdint.h&gt;          . . . . . . . . . . .        .   .   .   451</a>
324 <a href="#7.30.9">        7.30.9 Input/output &lt;stdio.h&gt;          . . . . . . . . . . . .        .   .   .   452</a>
325 <a href="#7.30.10">        7.30.10 General utilities &lt;stdlib.h&gt;        . . . . . . . . . .       .   .   .   452</a>
326 <a href="#7.30.11">        7.30.11 String handling &lt;string.h&gt;          . . . . . . . . . .       .   .   .   452</a>
327
328
329
330 [page viii]
331
332 <a href="#7.30.12">        7.30.12 Extended multibyte and wide character utilities
333                 &lt;wchar.h&gt;        . . . . . . . . . . . . . . . . . . . . 452</a>
334 <a href="#7.30.13">        7.30.13 Wide character classification and mapping utilities
335                 &lt;wctype.h&gt; . . . . . . . . . . . . . . . . . . . . 452</a>
336 <a href="#A">Annex A (informative) Language syntax summary   . .       .    .   .   .    .   .   .   .   .   .   453</a>
337 <a href="#A.1">  A.1 Lexical grammar       . . . . . . . . . . . .       .    .   .   .    .   .   .   .   .   .   453</a>
338 <a href="#A.2">  A.2 Phrase structure grammar . . . . . . . . .          .    .   .   .    .   .   .   .   .   .   460</a>
339 <a href="#A.3">  A.3 Preprocessing directives    . . . . . . . . .       .    .   .   .    .   .   .   .   .   .   468</a>
340 <a href="#B">Annex B (informative) Library summary     . . . . . . . . . . . . .                     .   .   .   470</a>
341 <a href="#B.1">  B.1 Diagnostics &lt;assert.h&gt;          . . . . . . . . . . . . . . .                     .   .   .   470</a>
342 <a href="#B.2">  B.2 Complex &lt;complex.h&gt; . . . . . . . . . . . . . . . .                               .   .   .   470</a>
343 <a href="#B.3">  B.3 Character handling &lt;ctype.h&gt; . . . . . . . . . . . . .                            .   .   .   472</a>
344 <a href="#B.4">  B.4 Errors &lt;errno.h&gt;         . . . . . . . . . . . . . . . . . .                      .   .   .   472</a>
345 <a href="#B.5">  B.5 Floating-point environment &lt;fenv.h&gt;          . . . . . . . . . .                  .   .   .   472</a>
346 <a href="#B.6">  B.6 Characteristics of floating types &lt;float.h&gt; . . . . . . . .                        .   .   .   473</a>
347 <a href="#B.7">  B.7 Format conversion of integer types &lt;inttypes.h&gt; . . . . .                         .   .   .   473</a>
348 <a href="#B.8">  B.8 Alternative spellings &lt;iso646.h&gt; . . . . . . . . . . . .                          .   .   .   474</a>
349 <a href="#B.9">  B.9 Sizes of integer types &lt;limits.h&gt;          . . . . . . . . . . .                  .   .   .   474</a>
350 <a href="#B.10">  B.10 Localization &lt;locale.h&gt; . . . . . . . . . . . . . . .                            .   .   .   474</a>
351 <a href="#B.11">  B.11 Mathematics &lt;math.h&gt; . . . . . . . . . . . . . . . .                             .   .   .   474</a>
352 <a href="#B.12">  B.12 Nonlocal jumps &lt;setjmp.h&gt;          . . . . . . . . . . . . .                     .   .   .   479</a>
353 <a href="#B.13">  B.13 Signal handling &lt;signal.h&gt; . . . . . . . . . . . . . .                           .   .   .   479</a>
354 <a href="#B.14">  B.14 Alignment &lt;stdalign.h&gt;           . . . . . . . . . . . . . .                     .   .   .   480</a>
355 <a href="#B.15">  B.15 Variable arguments &lt;stdarg.h&gt;         . . . . . . . . . . . .                    .   .   .   480</a>
356 <a href="#B.16">  B.16 Atomics &lt;stdatomic.h&gt; . . . . . . . . . . . . . . .                              .   .   .   480</a>
357 <a href="#B.17">  B.17 Boolean type and values &lt;stdbool.h&gt;           . . . . . . . . .                  .   .   .   482</a>
358 <a href="#B.18">  B.18 Common definitions &lt;stddef.h&gt; . . . . . . . . . . . .                             .   .   .   482</a>
359 <a href="#B.19">  B.19 Integer types &lt;stdint.h&gt; . . . . . . . . . . . . . . .                           .   .   .   482</a>
360 <a href="#B.20">  B.20 Input/output &lt;stdio.h&gt;         . . . . . . . . . . . . . . .                     .   .   .   483</a>
361 <a href="#B.21">  B.21 General utilities &lt;stdlib.h&gt;       . . . . . . . . . . . . .                     .   .   .   486</a>
362 <a href="#B.22">  B.22 String handling &lt;string.h&gt; . . . . . . . . . . . . . .                           .   .   .   488</a>
363 <a href="#B.23">  B.23 Type-generic math &lt;tgmath.h&gt;          . . . . . . . . . . . .                    .   .   .   490</a>
364 <a href="#B.24">  B.24 Threads &lt;threads.h&gt;          . . . . . . . . . . . . . . . .                     .   .   .   490</a>
365 <a href="#B.25">  B.25 Date and time &lt;time.h&gt;         . . . . . . . . . . . . . . .                     .   .   .   491</a>
366 <a href="#B.26">  B.26 Unicode utilities &lt;uchar.h&gt; . . . . . . . . . . . . . .                          .   .   .   492</a>
367 <a href="#B.27">  B.27 Extended multibyte/wide character utilities &lt;wchar.h&gt;     . . .                  .   .   .   492</a>
368 <a href="#B.28">  B.28 Wide character classification and mapping utilities &lt;wctype.h&gt;                    .   .   .   497</a>
369 <a href="#C">Annex C (informative) Sequence points     . . . . . . . . . . . . . . . . . 498</a>
370 <a href="#D">Annex D (normative) Universal character names for identifiers           . . . . . . . 499</a>
371 <a href="#E">Annex E (informative) Implementation limits        . . . . . . . . . . . . . . 501</a>
372 <a href="#F">Annex F (normative) IEC 60559 floating-point arithmetic . . . . . . . . . . 503</a>
373 <a href="#F.1">  F.1 Introduction     . . . . . . . . . . . . . . . . . . . . . . . . 503</a>
374
375 [page ix]
376
377 <a href="#F.2">    F.2    Types . . . . . . . . . . . . . . . . . . . . . . .                . .     .   .   503</a>
378 <a href="#F.3">    F.3    Operators and functions       . . . . . . . . . . . . . . .        . .     .   .   504</a>
379 <a href="#F.4">    F.4    Floating to integer conversion    . . . . . . . . . . . . .        . .     .   .   506</a>
380 <a href="#F.5">    F.5    Binary-decimal conversion       . . . . . . . . . . . . . .        . .     .   .   506</a>
381 <a href="#F.6">    F.6    The return statement . . . . . . . . . . . . . . . .               . .     .   .   507</a>
382 <a href="#F.7">    F.7    Contracted expressions . . . . . . . . . . . . . . . .             . .     .   .   507</a>
383 <a href="#F.8">    F.8    Floating-point environment      . . . . . . . . . . . . . .        . .     .   .   507</a>
384 <a href="#F.9">    F.9    Optimization . . . . . . . . . . . . . . . . . . . .               . .     .   .   510</a>
385 <a href="#F.10">    F.10   Mathematics &lt;math.h&gt; . . . . . . . . . . . . . . .                 . .     .   .   513</a>
386 <a href="#F.10.1">           F.10.1 Trigonometric functions . . . . . . . . . . . .             . .     .   .   514</a>
387 <a href="#F.10.2">           F.10.2 Hyperbolic functions       . . . . . . . . . . . . .        . .     .   .   516</a>
388 <a href="#F.10.3">           F.10.3 Exponential and logarithmic functions    . . . . . .        . .     .   .   516</a>
389 <a href="#F.10.4">           F.10.4 Power and absolute value functions     . . . . . . .        . .     .   .   519</a>
390 <a href="#F.10.5">           F.10.5 Error and gamma functions . . . . . . . . . . .             . .     .   .   521</a>
391 <a href="#F.10.6">           F.10.6 Nearest integer functions . . . . . . . . . . . .           . .     .   .   521</a>
392 <a href="#F.10.7">           F.10.7 Remainder functions        . . . . . . . . . . . . .        . .     .   .   524</a>
393 <a href="#F.10.8">           F.10.8 Manipulation functions       . . . . . . . . . . . .        . .     .   .   525</a>
394 <a href="#F.10.9">           F.10.9 Maximum, minimum, and positive difference functions           .     .   .   525</a>
395 <a href="#F.10.10">           F.10.10 Floating multiply-add . . . . . . . . . . . . .            . .     .   .   526</a>
396 <a href="#F.10.11">           F.10.11 Comparison macros . . . . . . . . . . . . . .              . .     .   .   526</a>
397 <a href="#G">Annex G (informative) IEC 60559-compatible complex arithmetic         .   .   .   .   .   .   527</a>
398 <a href="#G.1">  G.1 Introduction      . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   527</a>
399 <a href="#G.2">  G.2 Types . . . . . . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   527</a>
400 <a href="#G.3">  G.3 Conventions       . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   527</a>
401 <a href="#G.4">  G.4 Conversions       . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   528</a>
402 <a href="#G.4.1">       G.4.1 Imaginary types      . . . . . . . . . . . .         .   .   .   .   .   .   .   528</a>
403 <a href="#G.4.2">       G.4.2 Real and imaginary . . . . . . . . . . .             .   .   .   .   .   .   .   528</a>
404 <a href="#G.4.3">       G.4.3 Imaginary and complex       . . . . . . . . .        .   .   .   .   .   .   .   528</a>
405 <a href="#G.5">  G.5 Binary operators      . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   528</a>
406 <a href="#G.5.1">       G.5.1 Multiplicative operators    . . . . . . . . .        .   .   .   .   .   .   .   529</a>
407 <a href="#G.5.2">       G.5.2 Additive operators     . . . . . . . . . . .         .   .   .   .   .   .   .   532</a>
408 <a href="#G.6">  G.6 Complex arithmetic &lt;complex.h&gt;          . . . . . . .       .   .   .   .   .   .   .   532</a>
409 <a href="#G.6.1">       G.6.1 Trigonometric functions . . . . . . . . .            .   .   .   .   .   .   .   534</a>
410 <a href="#G.6.2">       G.6.2 Hyperbolic functions     . . . . . . . . . .         .   .   .   .   .   .   .   534</a>
411 <a href="#G.6.3">       G.6.3 Exponential and logarithmic functions      . . .     .   .   .   .   .   .   .   538</a>
412 <a href="#G.6.4">       G.6.4 Power and absolute-value functions      . . . .      .   .   .   .   .   .   .   539</a>
413 <a href="#G.7">  G.7 Type-generic math &lt;tgmath.h&gt;          . . . . . . . .       .   .   .   .   .   .   .   540</a>
414 <a href="#H">Annex H (informative) Language independent arithmetic . .     .   .   .   .   .   .   .   .   541</a>
415 <a href="#H.1">  H.1 Introduction     . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   541</a>
416 <a href="#H.2">  H.2 Types . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   541</a>
417 <a href="#H.3">  H.3 Notification      . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   545</a>
418 <a href="#I">Annex I (informative) Common warnings       . . . . . . . . . . . . . . . . 547</a>
419
420
421 [page x]
422
423 <a href="#J">Annex J (informative) Portability issues    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   549</a>
424 <a href="#J.1">  J.1 Unspecified behavior . . . .           . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   549</a>
425 <a href="#J.2">  J.2 Undefined behavior          . . . .    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   552</a>
426 <a href="#J.3">  J.3 Implementation-defined behavior          . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   566</a>
427 <a href="#J.4">  J.4 Locale-specific behavior         . .   . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   573</a>
428 <a href="#J.5">  J.5 Common extensions          . . . .    . . . .   .   .   .   .   .   .   .    .   .   .   .   .   .   574</a>
429 <a href="#K">Annex K (normative) Bounds-checking interfaces . . . . . . . . . .                             .   .   .   577</a>
430 <a href="#K.1">  K.1 Background       . . . . . . . . . . . . . . . . . . . . .                               .   .   .   577</a>
431 <a href="#K.2">  K.2 Scope . . . . . . . . . . . . . . . . . . . . . . . .                                    .   .   .   578</a>
432 <a href="#K.3">  K.3 Library     . . . . . . . . . . . . . . . . . . . . . . .                                .   .   .   578</a>
433 <a href="#K.3.1">       K.3.1 Introduction . . . . . . . . . . . . . . . . . .                                  .   .   .   578</a>
434 <a href="#K.3.1.1">                K.3.1.1 Standard headers     . . . . . . . . . . . .                           .   .   .   578</a>
435 <a href="#K.3.1.2">                K.3.1.2 Reserved identifiers     . . . . . . . . . . .                          .   .   .   579</a>
436 <a href="#K.3.1.3">                K.3.1.3 Use of errno . . . . . . . . . . . . . .                               .   .   .   579</a>
437 <a href="#K.3.1.4">                K.3.1.4 Runtime-constraint violations     . . . . . . .                        .   .   .   579</a>
438 <a href="#K.3.2">       K.3.2 Errors &lt;errno.h&gt;           . . . . . . . . . . . . . .                            .   .   .   580</a>
439 <a href="#K.3.3">       K.3.3 Common definitions &lt;stddef.h&gt;               . . . . . . . .                        .   .   .   580</a>
440 <a href="#K.3.4">       K.3.4 Integer types &lt;stdint.h&gt;           . . . . . . . . . . .                          .   .   .   580</a>
441 <a href="#K.3.5">       K.3.5 Input/output &lt;stdio.h&gt;          . . . . . . . . . . . .                           .   .   .   581</a>
442 <a href="#K.3.5.1">                K.3.5.1 Operations on files      . . . . . . . . . . .                          .   .   .   581</a>
443 <a href="#K.3.5.2">                K.3.5.2 File access functions . . . . . . . . . . .                            .   .   .   583</a>
444 <a href="#K.3.5.3">                K.3.5.3 Formatted input/output functions . . . . . .                           .   .   .   586</a>
445 <a href="#K.3.5.4">                K.3.5.4 Character input/output functions . . . . . .                           .   .   .   597</a>
446 <a href="#K.3.6">       K.3.6 General utilities &lt;stdlib.h&gt;          . . . . . . . . . .                         .   .   .   599</a>
447 <a href="#K.3.6.1">                K.3.6.1 Runtime-constraint handling       . . . . . . .                        .   .   .   599</a>
448 <a href="#K.3.6.2">                K.3.6.2 Communication with the environment . . . .                             .   .   .   601</a>
449 <a href="#K.3.6.3">                K.3.6.3 Searching and sorting utilities . . . . . . .                          .   .   .   602</a>
450 <a href="#K.3.6.4">                K.3.6.4 Multibyte/wide character conversion functions                          .   .   .   605</a>
451 <a href="#K.3.6.5">                K.3.6.5 Multibyte/wide string conversion functions . .                         .   .   .   606</a>
452 <a href="#K.3.7">       K.3.7 String handling &lt;string.h&gt;            . . . . . . . . . .                         .   .   .   609</a>
453 <a href="#K.3.7.1">                K.3.7.1 Copying functions       . . . . . . . . . . .                          .   .   .   609</a>
454 <a href="#K.3.7.2">                K.3.7.2 Concatenation functions       . . . . . . . . .                        .   .   .   612</a>
455 <a href="#K.3.7.3">                K.3.7.3 Search functions     . . . . . . . . . . . .                           .   .   .   615</a>
456 <a href="#K.3.7.4">                K.3.7.4 Miscellaneous functions       . . . . . . . . .                        .   .   .   616</a>
457 <a href="#K.3.8">       K.3.8 Date and time &lt;time.h&gt;          . . . . . . . . . . . .                           .   .   .   619</a>
458 <a href="#K.3.8.1">                K.3.8.1 Components of time . . . . . . . . . . .                               .   .   .   619</a>
459 <a href="#K.3.8.2">                K.3.8.2 Time conversion functions       . . . . . . . .                        .   .   .   619</a>
460 <a href="#K.3.9">       K.3.9 Extended multibyte and wide character utilities
461                 &lt;wchar.h&gt;        . . . . . . . . . . . . . . . . .                             . . . 622</a>
462 <a href="#K.3.9.1">                K.3.9.1 Formatted wide character input/output functions                        . . . 623</a>
463 <a href="#K.3.9.2">                K.3.9.2 General wide string utilities . . . . . . . .                          . . . 634</a>
464 <a href="#K.3.9.3">                K.3.9.3 Extended multibyte/wide character conversion
465                         utilities . . . . . . . . . . . . . . . .                              . . . 642</a>
466
467
468 [page xi]
469
470 <a href="#L">Annex L (normative) Analyzability . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   647</a>
471 <a href="#L.1">  L.1 Scope . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   647</a>
472 <a href="#L.2">  L.2 Definitions . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   647</a>
473 <a href="#L.3">  L.3 Requirements . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   648</a>
474 <a href="#Bibliography">Bibliography   . . . . . . . . . . . . . . . . . . . . . . . . . . . 649</a>
475 <a href="#Index">Index    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653</a>
476
477
478
479
480 [<a name="#pxii" href="pxii">page xii</a>] (<a href="#Contents">Contents</a>)
481
482 <a name="Foreword" href="#Foreword"><b>    Foreword</b></a>
483 1   ISO (the International Organization for Standardization) and IEC (the International
484     Electrotechnical Commission) form the specialized system for worldwide
485     standardization. National bodies that are member of ISO or IEC participate in the
486     development of International Standards through technical committees established by the
487     respective organization to deal with particular fields of technical activity. ISO and IEC
488     technical committees collaborate in fields of mutual interest. Other international
489     organizations, governmental and non-governmental, in liaison with ISO and IEC, also
490     take part in the work.
491 2   International Standards are drafted in accordance with the rules given in the ISO/IEC
492     Directives, Part 2. This International Standard was drafted in accordance with the fifth
493     edition (2004).
494 3   In the field of information technology, ISO and IEC have established a joint technical
495     committee, ISO/IEC JTC 1. Draft International Standards adopted by the joint technical
496     committee are circulated to national bodies for voting. Publication as an International
497     Standard requires approval by at least 75% of the national bodies casting a vote.
498 4   Attention is drawn to the possibility that some of the elements of this document may be
499     the subject of patent rights. ISO and IEC shall not be held responsible for identifying any
500     or all such patent rights.
501 5   This International Standard was prepared by Joint Technical Committee ISO/IEC JTC 1,
502     Information technology, Subcommittee SC 22, Programming languages, their
503     environments and system software interfaces. The Working Group responsible for this
504     standard (WG 14) maintains a site on the World Wide Web at http://www.open-
505     std.org/JTC1/SC22/WG14/ containing additional information relevant to this
506     standard such as a Rationale for many of the decisions made during its preparation and a
507     log of Defect Reports and Responses.
508 6   This third edition cancels and replaces the second edition, ISO/IEC 9899:1999, as
509     corrected by ISO/IEC 9899:1999/Cor 1:2001, ISO/IEC 9899:1999/Cor 2:2004, and
510     ISO/IEC 9899:1999/Cor 3:2007. Major changes from the previous edition include:
511     -- conditional (optional) features (including some that were previously mandatory)
512     -- support for multiple threads of execution including an improved memory sequencing
513       model, atomic objects, and thread-local storage (<a href="#7.17">&lt;stdatomic.h&gt;</a> and
514       <a href="#7.25">&lt;threads.h&gt;</a>)
515     -- additional floating-point characteristic macros (<a href="#7.7">&lt;float.h&gt;</a>)
516     -- querying and specifying alignment of objects (<a href="#7.15">&lt;stdalign.h&gt;</a>, <a href="#7.22">&lt;stdlib.h&gt;</a>)
517     -- Unicode characters and           strings   (<a href="#7.27">&lt;uchar.h&gt;</a>)       (originally   specified    in
518       ISO/IEC TR 19769:2004)
519     -- type-generic expressions
520
521
522 [<a name="#pxiii" href="pxiii">page xiii</a>] (<a href="#Contents">Contents</a>)
523
524     -- static assertions
525     -- anonymous structures and unions
526     -- no-return functions
527     -- macros to create complex numbers (<a href="#7.3">&lt;complex.h&gt;</a>)
528     -- support for opening files for exclusive access
529     -- removed the gets function (<a href="#7.21">&lt;stdio.h&gt;</a>)
530     -- added the aligned_alloc, at_quick_exit, and quick_exit functions
531       (<a href="#7.22">&lt;stdlib.h&gt;</a>)
532     -- (conditional) support for bounds-checking interfaces (originally specified in
533       ISO/IEC TR 24731-1:2007)
534     -- (conditional) support for analyzability
535 7   Major changes in the second edition included:
536     -- restricted character set support via digraphs and <a href="#7.9">&lt;iso646.h&gt;</a> (originally specified
537       in AMD1)
538     -- wide character library support in <a href="#7.28">&lt;wchar.h&gt;</a> and <a href="#7.29">&lt;wctype.h&gt;</a> (originally
539       specified in AMD1)
540     -- more precise aliasing rules via effective type
541     -- restricted pointers
542     -- variable length arrays
543     -- flexible array members
544     -- static and type qualifiers in parameter array declarators
545     -- complex (and imaginary) support in <a href="#7.3">&lt;complex.h&gt;</a>
546     -- type-generic math macros in <a href="#7.24">&lt;tgmath.h&gt;</a>
547     -- the long long int type and library functions
548     -- increased minimum translation limits
549     -- additional floating-point characteristics in <a href="#7.7">&lt;float.h&gt;</a>
550     -- remove implicit int
551     -- reliable integer division
552     -- universal character names (\u and \U)
553     -- extended identifiers
554     -- hexadecimal floating-point constants and %a and %A printf/scanf conversion
555       specifiers
556
557
558
559 [<a name="#pxiv" href="pxiv">page xiv</a>] (<a href="#Contents">Contents</a>)
560
561 -- compound literals
562 -- designated initializers
563 -- // comments
564 -- extended integer types and library functions in <a href="#7.8">&lt;inttypes.h&gt;</a> and <a href="#7.20">&lt;stdint.h&gt;</a>
565 -- remove implicit function declaration
566 -- preprocessor arithmetic done in intmax_t/uintmax_t
567 -- mixed declarations and code
568 -- new block scopes for selection and iteration statements
569 -- integer constant type rules
570 -- integer promotion rules
571 -- macros with a variable number of arguments
572 -- the vscanf family of functions in <a href="#7.21">&lt;stdio.h&gt;</a> and <a href="#7.28">&lt;wchar.h&gt;</a>
573 -- additional math library functions in <a href="#7.12">&lt;math.h&gt;</a>
574 -- treatment of error conditions by math library functions (math_errhandling)
575 -- floating-point environment access in <a href="#7.6">&lt;fenv.h&gt;</a>
576 -- IEC 60559 (also known as IEC 559 or IEEE arithmetic) support
577 -- trailing comma allowed in enum declaration
578 -- %lf conversion specifier allowed in printf
579 -- inline functions
580 -- the snprintf family of functions in <a href="#7.21">&lt;stdio.h&gt;</a>
581 -- boolean type in <a href="#7.18">&lt;stdbool.h&gt;</a>
582 -- idempotent type qualifiers
583 -- empty macro arguments
584 -- new structure type compatibility rules (tag compatibility)
585 -- additional predefined macro names
586 -- _Pragma preprocessing operator
587 -- standard pragmas
588 -- __func__ predefined identifier
589 -- va_copy macro
590 -- additional strftime conversion specifiers
591 -- LIA compatibility annex
592
593
594 [<a name="#pxv" href="pxv">page xv</a>] (<a href="#Contents">Contents</a>)
595
596     -- deprecate ungetc at the beginning of a binary file
597     -- remove deprecation of aliased array parameters
598     -- conversion of array to pointer not limited to lvalues
599     -- relaxed constraints on aggregate and union initialization
600     -- relaxed restrictions on portable header names
601     -- return without expression not permitted in function that returns a value (and vice
602       versa)
603 8   Annexes D, F, K, and L form a normative part of this standard; annexes A, B, C, E, G, H,
604     I, J, the bibliography, and the index are for information only. In accordance with Part 2 of
605     the ISO/IEC Directives, this foreword, the introduction, notes, footnotes, and examples
606     are also for information only.
607
608
609
610
611 [<a name="#pxvi" href="pxvi">page xvi</a>] (<a href="#Contents">Contents</a>)
612
613 <a name="Introduction" href="#Introduction"><b>    Introduction</b></a>
614 1   With the introduction of new devices and extended character sets, new features may be
615     added to this International Standard. Subclauses in the language and library clauses warn
616     implementors and programmers of usages which, though valid in themselves, may
617     conflict with future additions.
618 2   Certain features are obsolescent, which means that they may be considered for
619     withdrawal in future revisions of this International Standard. They are retained because
620     of their widespread use, but their use in new implementations (for implementation
621     features) or new programs (for language [6.11] or library features [7.30]) is discouraged.
622 3   This International Standard is divided into four major subdivisions:
623     -- preliminary elements (clauses 1-4);
624     -- the characteristics of environments that translate and execute C programs (clause 5);
625     -- the language syntax, constraints, and semantics (clause 6);
626     -- the library facilities (clause 7).
627 4   Examples are provided to illustrate possible forms of the constructions described.
628     Footnotes are provided to emphasize consequences of the rules described in that
629     subclause or elsewhere in this International Standard. References are used to refer to
630     other related subclauses. Recommendations are provided to give advice or guidance to
631     implementors. Annexes provide additional information and summarize the information
632     contained in this International Standard. A bibliography lists documents that were
633     referred to during the preparation of the standard.
634 5   The language clause (clause 6) is derived from ''The C Reference Manual''.
635 6   The library clause (clause 7) is based on the 1984 /usr/group Standard.
636
637
638
639
640 [<a name="#pxvii" href="pxvii">page xvii</a>] (<a href="#Contents">Contents</a>)
641
642
643
644 [<a name="#pxviii" href="pxviii">page xviii</a>] (<a href="#Contents">Contents</a>)
645
646
647
648     Programming languages -- C
649
650
651
652 <a name="1" href="#1"><b>    1. Scope</b></a>
653 1   This International Standard specifies the form and establishes the interpretation of
654     programs written in the C programming language.1) It specifies
655     -- the representation of C programs;
656     -- the syntax and constraints of the C language;
657     -- the semantic rules for interpreting C programs;
658     -- the representation of input data to be processed by C programs;
659     -- the representation of output data produced by C programs;
660     -- the restrictions and limits imposed by a conforming implementation of C.
661 2   This International Standard does not specify
662     -- the mechanism by which C programs are transformed for use by a data-processing
663       system;
664     -- the mechanism by which C programs are invoked for use by a data-processing
665       system;
666     -- the mechanism by which input data are transformed for use by a C program;
667     -- the mechanism by which output data are transformed after being produced by a C
668       program;
669     -- the size or complexity of a program and its data that will exceed the capacity of any
670       specific data-processing system or the capacity of a particular processor;
671     -- all minimal requirements of a data-processing system that is capable of supporting a
672       conforming implementation.
673
674
675     1)   This International Standard is designed to promote the portability of C programs among a variety of
676          data-processing systems. It is intended for use by implementors and programmers.
677
678 [<a name="#p1" href="p1">page 1</a>] (<a href="#Contents">Contents</a>)
679
680
681 <a name="2" href="#2"><b>    2. Normative references</b></a>
682 1   The following referenced documents are indispensable for the application of this
683     document. For dated references, only the edition cited applies. For undated references,
684     the latest edition of the referenced document (including any amendments) applies.
685 2   ISO 31-11:1992, Quantities and units -- Part 11: Mathematical signs and symbols for
686     use in the physical sciences and technology.
687 3   ISO/IEC 646, Information technology -- ISO 7-bit coded character set for information
688     interchange.
689 4   ISO/IEC 2382-1:1993, Information technology -- Vocabulary -- Part 1: Fundamental
690     terms.
691 5   ISO 4217, Codes for the representation of currencies and funds.
692 6   ISO 8601, Data elements and interchange formats -- Information interchange --
693     Representation of dates and times.
694 7   ISO/IEC 10646 (all parts), Information technology -- Universal Multiple-Octet Coded
695     Character Set (UCS).
696 8   IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems (previously
697     designated IEC 559:1989).
698
699
700
701
702 [<a name="#p2" href="p2">page 2</a>] (<a href="#Contents">Contents</a>)
703
704
705 <a name="3" href="#3"><b>    3. Terms, definitions, and symbols</b></a>
706 1   For the purposes of this International Standard, the following definitions apply. Other
707     terms are defined where they appear in italic type or on the left side of a syntax rule.
708     Terms explicitly defined in this International Standard are not to be presumed to refer
709     implicitly to similar terms defined elsewhere. Terms not defined in this International
710     Standard are to be interpreted according to ISO/IEC 2382-1. Mathematical symbols not
711     defined in this International Standard are to be interpreted according to ISO 31-11.
712 <a name="3.1" href="#3.1"><b>    3.1</b></a>
713 1   access
714     &lt;execution-time action&gt; to read or modify the value of an object
715 2   NOTE 1   Where only one of these two actions is meant, ''read'' or ''modify'' is used.
716
717 3   NOTE 2   ''Modify'' includes the case where the new value being stored is the same as the previous value.
718
719 4   NOTE 3   Expressions that are not evaluated do not access objects.
720
721 <a name="3.2" href="#3.2"><b>    3.2</b></a>
722 1   alignment
723     requirement that objects of a particular type be located on storage boundaries with
724     addresses that are particular multiples of a byte address
725 <a name="3.3" href="#3.3"><b>    3.3</b></a>
726 1   argument
727     actual argument
728     actual parameter (deprecated)
729     expression in the comma-separated list bounded by the parentheses in a function call
730     expression, or a sequence of preprocessing tokens in the comma-separated list bounded
731     by the parentheses in a function-like macro invocation
732 <a name="3.4" href="#3.4"><b>    3.4</b></a>
733 1   behavior
734     external appearance or action
735 <a name="3.4.1" href="#3.4.1"><b>    3.4.1</b></a>
736 1   implementation-defined behavior
737     unspecified behavior where each implementation documents how the choice is made
738 2   EXAMPLE An example of implementation-defined behavior is the propagation of the high-order bit
739     when a signed integer is shifted right.
740
741 <a name="3.4.2" href="#3.4.2"><b>    3.4.2</b></a>
742 1   locale-specific behavior
743     behavior that depends on local conventions of nationality, culture, and language that each
744     implementation documents
745
746
747 [<a name="#p3" href="p3">page 3</a>] (<a href="#Contents">Contents</a>)
748
749 2   EXAMPLE An example of locale-specific behavior is whether the islower function returns true for
750     characters other than the 26 lowercase Latin letters.
751
752 <a name="3.4.3" href="#3.4.3"><b>    3.4.3</b></a>
753 1   undefined behavior
754     behavior, upon use of a nonportable or erroneous program construct or of erroneous data,
755     for which this International Standard imposes no requirements
756 2   NOTE Possible undefined behavior ranges from ignoring the situation completely with unpredictable
757     results, to behaving during translation or program execution in a documented manner characteristic of the
758     environment (with or without the issuance of a diagnostic message), to terminating a translation or
759     execution (with the issuance of a diagnostic message).
760
761 3   EXAMPLE        An example of undefined behavior is the behavior on integer overflow.
762
763 <a name="3.4.4" href="#3.4.4"><b>    3.4.4</b></a>
764 1   unspecified behavior
765     use of an unspecified value, or other behavior where this International Standard provides
766     two or more possibilities and imposes no further requirements on which is chosen in any
767     instance
768 2   EXAMPLE        An example of unspecified behavior is the order in which the arguments to a function are
769     evaluated.
770
771 <a name="3.5" href="#3.5"><b>    3.5</b></a>
772 1   bit
773     unit of data storage in the execution environment large enough to hold an object that may
774     have one of two values
775 2   NOTE     It need not be possible to express the address of each individual bit of an object.
776
777 <a name="3.6" href="#3.6"><b>    3.6</b></a>
778 1   byte
779     addressable unit of data storage large enough to hold any member of the basic character
780     set of the execution environment
781 2   NOTE 1     It is possible to express the address of each individual byte of an object uniquely.
782
783 3   NOTE 2 A byte is composed of a contiguous sequence of bits, the number of which is implementation-
784     defined. The least significant bit is called the low-order bit; the most significant bit is called the high-order
785     bit.
786
787 <a name="3.7" href="#3.7"><b>    3.7</b></a>
788 1   character
789     &lt;abstract&gt; member of a set of elements used for the organization, control, or
790     representation of data
791 <a name="3.7.1" href="#3.7.1"><b>    3.7.1</b></a>
792 1   character
793     single-byte character
794     &lt;C&gt; bit representation that fits in a byte
795 [<a name="#p4" href="p4">page 4</a>] (<a href="#Contents">Contents</a>)
796
797 <a name="3.7.2" href="#3.7.2"><b>    3.7.2</b></a>
798 1   multibyte character
799     sequence of one or more bytes representing a member of the extended character set of
800     either the source or the execution environment
801 2   NOTE    The extended character set is a superset of the basic character set.
802
803 <a name="3.7.3" href="#3.7.3"><b>    3.7.3</b></a>
804 1   wide character
805     bit representation that fits in an object of type wchar_t, capable of representing any
806     character in the current locale
807 <a name="3.8" href="#3.8"><b>    3.8</b></a>
808 1   constraint
809     restriction, either syntactic or semantic, by which the exposition of language elements is
810     to be interpreted
811 <a name="3.9" href="#3.9"><b>    3.9</b></a>
812 1   correctly rounded result
813     representation in the result format that is nearest in value, subject to the current rounding
814     mode, to what the result would be given unlimited range and precision
815 <a name="3.10" href="#3.10"><b>    3.10</b></a>
816 1   diagnostic message
817     message belonging to an implementation-defined subset of the implementation's message
818     output
819 <a name="3.11" href="#3.11"><b>    3.11</b></a>
820 1   forward reference
821     reference to a later subclause of this International Standard that contains additional
822     information relevant to this subclause
823 <a name="3.12" href="#3.12"><b>    3.12</b></a>
824 1   implementation
825     particular set of software, running in a particular translation environment under particular
826     control options, that performs translation of programs for, and supports execution of
827     functions in, a particular execution environment
828 <a name="3.13" href="#3.13"><b>    3.13</b></a>
829 1   implementation limit
830     restriction imposed upon programs by the implementation
831 <a name="3.14" href="#3.14"><b>    3.14</b></a>
832 1   memory location
833     either an object of scalar type, or a maximal sequence of adjacent bit-fields all having
834     nonzero width
835
836 [<a name="#p5" href="p5">page 5</a>] (<a href="#Contents">Contents</a>)
837
838 2   NOTE 1 Two threads of execution can update and access separate memory locations without interfering
839     with each other.
840
841 3   NOTE 2 A bit-field and an adjacent non-bit-field member are in separate memory locations. The same
842     applies to two bit-fields, if one is declared inside a nested structure declaration and the other is not, or if the
843     two are separated by a zero-length bit-field declaration, or if they are separated by a non-bit-field member
844     declaration. It is not safe to concurrently update two non-atomic bit-fields in the same structure if all
845     members declared between them are also (non-zero-length) bit-fields, no matter what the sizes of those
846     intervening bit-fields happen to be.
847
848 4   EXAMPLE        A structure declared as
849              struct {
850                    char a;
851                    int b:5, c:11, :0, d:8;
852                    struct { int ee:8; } e;
853              }
854     contains four separate memory locations: The member a, and bit-fields d and e.ee are each separate
855     memory locations, and can be modified concurrently without interfering with each other. The bit-fields b
856     and c together constitute the fourth memory location. The bit-fields b and c cannot be concurrently
857     modified, but b and a, for example, can be.
858
859 <a name="3.15" href="#3.15"><b>    3.15</b></a>
860 1   object
861     region of data storage in the execution environment, the contents of which can represent
862     values
863 2   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>.
864
865 <a name="3.16" href="#3.16"><b>    3.16</b></a>
866 1   parameter
867     formal parameter
868     formal argument (deprecated)
869     object declared as part of a function declaration or definition that acquires a value on
870     entry to the function, or an identifier from the comma-separated list bounded by the
871     parentheses immediately following the macro name in a function-like macro definition
872 <a name="3.17" href="#3.17"><b>    3.17</b></a>
873 1   recommended practice
874     specification that is strongly recommended as being in keeping with the intent of the
875     standard, but that may be impractical for some implementations
876 <a name="3.18" href="#3.18"><b>    3.18</b></a>
877 1   runtime-constraint
878     requirement on a program when calling a library function
879 2   NOTE 1 Despite the similar terms, a runtime-constraint is not a kind of constraint as defined by <a href="#3.8">3.8</a>, and
880     need not be diagnosed at translation time.
881
882 3   NOTE 2 Implementations that support the extensions in <a href="#K">annex K</a> are required to verify that the runtime-
883     constraints for a library function are not violated by the program; see <a href="#K.3.1.4">K.3.1.4</a>.
884
885 [<a name="#p6" href="p6">page 6</a>] (<a href="#Contents">Contents</a>)
886
887 <a name="3.19" href="#3.19"><b>    3.19</b></a>
888 1   value
889     precise meaning of the contents of an object when interpreted as having a specific type
890 <a name="3.19.1" href="#3.19.1"><b>    3.19.1</b></a>
891 1   implementation-defined value
892     unspecified value where each implementation documents how the choice is made
893 <a name="3.19.2" href="#3.19.2"><b>    3.19.2</b></a>
894 1   indeterminate value
895     either an unspecified value or a trap representation
896 <a name="3.19.3" href="#3.19.3"><b>    3.19.3</b></a>
897 1   unspecified value
898     valid value of the relevant type where this International Standard imposes no
899     requirements on which value is chosen in any instance
900 2   NOTE     An unspecified value cannot be a trap representation.
901
902 <a name="3.19.4" href="#3.19.4"><b>    3.19.4</b></a>
903 1   trap representation
904     an object representation that need not represent a value of the object type
905 <a name="3.19.5" href="#3.19.5"><b>    3.19.5</b></a>
906 1   perform a trap
907     interrupt execution of the program such that no further operations are performed
908 2   NOTE In this International Standard, when the word ''trap'' is not immediately followed by
909     ''representation'', this is the intended usage.2)
910
911 <a name="3.20" href="#3.20"><b>    3.20</b></a>
912 1   [^ x^]
913     ceiling of x: the least integer greater than or equal to x
914 2   EXAMPLE       [^2.4^] is 3, [^-2.4^] is -2.
915
916 <a name="3.21" href="#3.21"><b>    3.21</b></a>
917 1   [_ x_]
918     floor of x: the greatest integer less than or equal to x
919 2   EXAMPLE       [_2.4_] is 2, [_-2.4_] is -3.
920
921
922
923
924     2)   For example, ''Trapping or stopping (if supported) is disabled...'' (<a href="#F.8.2">F.8.2</a>). Note that fetching a trap
925          representation might perform a trap but is not required to (see <a href="#6.2.6.1">6.2.6.1</a>).
926
927 [<a name="#p7" href="p7">page 7</a>] (<a href="#Contents">Contents</a>)
928
929
930 <a name="4" href="#4"><b>    4. Conformance</b></a>
931 1   In this International Standard, ''shall'' is to be interpreted as a requirement on an
932     implementation or on a program; conversely, ''shall not'' is to be interpreted as a
933     prohibition.
934 2   If a ''shall'' or ''shall not'' requirement that appears outside of a constraint or runtime-
935     constraint is violated, the behavior is undefined. Undefined behavior is otherwise
936     indicated in this International Standard by the words ''undefined behavior'' or by the
937     omission of any explicit definition of behavior. There is no difference in emphasis among
938     these three; they all describe ''behavior that is undefined''.
939 3   A program that is correct in all other aspects, operating on correct data, containing
940     unspecified behavior shall be a correct program and act in accordance with <a href="#5.1.2.3">5.1.2.3</a>.
941 4   The implementation shall not successfully translate a preprocessing translation unit
942     containing a #error preprocessing directive unless it is part of a group skipped by
943     conditional inclusion.
944 5   A strictly conforming program shall use only those features of the language and library
945     specified in this International Standard.3) It shall not produce output dependent on any
946     unspecified, undefined, or implementation-defined behavior, and shall not exceed any
947     minimum implementation limit.
948 6   The two forms of conforming implementation are hosted and freestanding. A conforming
949     hosted implementation shall accept any strictly conforming program. A conforming
950     freestanding implementation shall accept any strictly conforming program that does not
951     use complex types and in which the use of the features specified in the library clause
952     (clause 7) is confined to the contents of the standard headers <a href="#7.7">&lt;float.h&gt;</a>,
953     <a href="#7.9">&lt;iso646.h&gt;</a>, <a href="#7.10">&lt;limits.h&gt;</a>, <a href="#7.15">&lt;stdalign.h&gt;</a>, <a href="#7.16">&lt;stdarg.h&gt;</a>, <a href="#7.18">&lt;stdbool.h&gt;</a>,
954     <a href="#7.19">&lt;stddef.h&gt;</a>, and <a href="#7.20">&lt;stdint.h&gt;</a>. A conforming implementation may have extensions
955     (including additional library functions), provided they do not alter the behavior of any
956     strictly conforming program.4)
957
958
959
960     3)   A strictly conforming program can use conditional features (see <a href="#6.10.8.3">6.10.8.3</a>) provided the use is guarded
961          by an appropriate conditional inclusion preprocessing directive using the related macro. For example:
962                  #ifdef __STDC_IEC_559__ /* FE_UPWARD defined */
963                     /* ... */
964                     fesetround(FE_UPWARD);
965                     /* ... */
966                  #endif
967
968     4)   This implies that a conforming implementation reserves no identifiers other than those explicitly
969          reserved in this International Standard.
970
971 [<a name="#p8" href="p8">page 8</a>] (<a href="#Contents">Contents</a>)
972
973 7   A conforming program is one that is acceptable to a conforming implementation.5)
974 8   An implementation shall be accompanied by a document that defines all implementation-
975     defined and locale-specific characteristics and all extensions.
976     Forward references: conditional inclusion (<a href="#6.10.1">6.10.1</a>), error directive (<a href="#6.10.5">6.10.5</a>),
977     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>
978     (<a href="#7.9">7.9</a>), sizes of integer types <a href="#7.10">&lt;limits.h&gt;</a> (<a href="#7.10">7.10</a>), alignment <a href="#7.15">&lt;stdalign.h&gt;</a> (<a href="#7.15">7.15</a>),
979     variable arguments <a href="#7.16">&lt;stdarg.h&gt;</a> (<a href="#7.16">7.16</a>), boolean type and values <a href="#7.18">&lt;stdbool.h&gt;</a>
980     (<a href="#7.18">7.18</a>), common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), integer types <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#7.20">7.20</a>).
981
982
983
984
985     5)   Strictly conforming programs are intended to be maximally portable among conforming
986          implementations. Conforming programs may depend upon nonportable features of a conforming
987          implementation.
988
989 [<a name="#p9" href="p9">page 9</a>] (<a href="#Contents">Contents</a>)
990
991
992 <a name="5" href="#5"><b>    5. Environment</b></a>
993 1   An implementation translates C source files and executes C programs in two data-
994     processing-system environments, which will be called the translation environment and
995     the execution environment in this International Standard. Their characteristics define and
996     constrain the results of executing conforming C programs constructed according to the
997     syntactic and semantic rules for conforming implementations.
998     Forward references: In this clause, only a few of many possible forward references
999     have been noted.
1000 <a name="5.1" href="#5.1"><b>    5.1 Conceptual models</b></a>
1001 <a name="5.1.1" href="#5.1.1"><b>    5.1.1 Translation environment</b></a>
1002 <a name="5.1.1.1" href="#5.1.1.1"><b>    5.1.1.1 Program structure</b></a>
1003 1   A C program need not all be translated at the same time. The text of the program is kept
1004     in units called source files, (or preprocessing files) in this International Standard. A
1005     source file together with all the headers and source files included via the preprocessing
1006     directive #include is known as a preprocessing translation unit. After preprocessing, a
1007     preprocessing translation unit is called a translation unit. Previously translated translation
1008     units may be preserved individually or in libraries. The separate translation units of a
1009     program communicate by (for example) calls to functions whose identifiers have external
1010     linkage, manipulation of objects whose identifiers have external linkage, or manipulation
1011     of data files. Translation units may be separately translated and then later linked to
1012     produce an executable program.
1013     Forward references: linkages of identifiers (<a href="#6.2.2">6.2.2</a>), external definitions (<a href="#6.9">6.9</a>),
1014     preprocessing directives (<a href="#6.10">6.10</a>).
1015 <a name="5.1.1.2" href="#5.1.1.2"><b>    5.1.1.2 Translation phases</b></a>
1016 1   The precedence among the syntax rules of translation is specified by the following
1017     phases.6)
1018          1.   Physical source file multibyte characters are mapped, in an implementation-
1019               defined manner, to the source character set (introducing new-line characters for
1020               end-of-line indicators) if necessary. Trigraph sequences are replaced by
1021               corresponding single-character internal representations.
1022
1023
1024
1025     6)    Implementations shall behave as if these separate phases occur, even though many are typically folded
1026           together in practice. Source files, translation units, and translated translation units need not
1027           necessarily be stored as files, nor need there be any one-to-one correspondence between these entities
1028           and any external representation. The description is conceptual only, and does not specify any
1029           particular implementation.
1030
1031 [<a name="#p10" href="p10">page 10</a>] (<a href="#Contents">Contents</a>)
1032
1033      2.   Each instance of a backslash character (\) immediately followed by a new-line
1034           character is deleted, splicing physical source lines to form logical source lines.
1035           Only the last backslash on any physical source line shall be eligible for being part
1036           of such a splice. A source file that is not empty shall end in a new-line character,
1037           which shall not be immediately preceded by a backslash character before any such
1038           splicing takes place.
1039      3.   The source file is decomposed into preprocessing tokens7) and sequences of
1040           white-space characters (including comments). A source file shall not end in a
1041           partial preprocessing token or in a partial comment. Each comment is replaced by
1042           one space character. New-line characters are retained. Whether each nonempty
1043           sequence of white-space characters other than new-line is retained or replaced by
1044           one space character is implementation-defined.
1045      4. Preprocessing directives are executed, macro invocations are expanded, and
1046         _Pragma unary operator expressions are executed. If a character sequence that
1047         matches the syntax of a universal character name is produced by token
1048         concatenation (<a href="#6.10.3.3">6.10.3.3</a>), the behavior is undefined. A #include preprocessing
1049         directive causes the named header or source file to be processed from phase 1
1050         through phase 4, recursively. All preprocessing directives are then deleted.
1051      5. Each source character set member and escape sequence in character constants and
1052         string literals is converted to the corresponding member of the execution character
1053         set; if there is no corresponding member, it is converted to an implementation-
1054         defined member other than the null (wide) character.8)
1055      6.   Adjacent string literal tokens are concatenated.
1056      7. White-space characters separating tokens are no longer significant. Each
1057         preprocessing token is converted into a token. The resulting tokens are
1058         syntactically and semantically analyzed and translated as a translation unit.
1059      8.   All external object and function references are resolved. Library components are
1060           linked to satisfy external references to functions and objects not defined in the
1061           current translation. All such translator output is collected into a program image
1062           which contains information needed for execution in its execution environment.
1063 Forward references: universal character names (<a href="#6.4.3">6.4.3</a>), lexical elements (<a href="#6.4">6.4</a>),
1064 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>).
1065
1066
1067
1068 7)    As described in <a href="#6.4">6.4</a>, the process of dividing a source file's characters into preprocessing tokens is
1069       context-dependent. For example, see the handling of &lt; within a #include preprocessing directive.
1070 8)    An implementation need not convert all non-corresponding source characters to the same execution
1071       character.
1072
1073 [<a name="#p11" href="p11">page 11</a>] (<a href="#Contents">Contents</a>)
1074
1075 <a name="5.1.1.3" href="#5.1.1.3"><b>    5.1.1.3 Diagnostics</b></a>
1076 1   A conforming implementation shall produce at least one diagnostic message (identified in
1077     an implementation-defined manner) if a preprocessing translation unit or translation unit
1078     contains a violation of any syntax rule or constraint, even if the behavior is also explicitly
1079     specified as undefined or implementation-defined. Diagnostic messages need not be
1080     produced in other circumstances.9)
1081 2   EXAMPLE        An implementation shall issue a diagnostic for the translation unit:
1082              char i;
1083              int i;
1084     because in those cases where wording in this International Standard describes the behavior for a construct
1085     as being both a constraint error and resulting in undefined behavior, the constraint error shall be diagnosed.
1086
1087 <a name="5.1.2" href="#5.1.2"><b>    5.1.2 Execution environments</b></a>
1088 1   Two execution environments are defined: freestanding and hosted. In both cases,
1089     program startup occurs when a designated C function is called by the execution
1090     environment. All objects with static storage duration shall be initialized (set to their
1091     initial values) before program startup. The manner and timing of such initialization are
1092     otherwise unspecified. Program termination returns control to the execution
1093     environment.
1094     Forward references: storage durations of objects (<a href="#6.2.4">6.2.4</a>), initialization (<a href="#6.7.9">6.7.9</a>).
1095 <a name="5.1.2.1" href="#5.1.2.1"><b>    5.1.2.1 Freestanding environment</b></a>
1096 1   In a freestanding environment (in which C program execution may take place without any
1097     benefit of an operating system), the name and type of the function called at program
1098     startup are implementation-defined. Any library facilities available to a freestanding
1099     program, other than the minimal set required by clause 4, are implementation-defined.
1100 2   The effect of program termination in a freestanding environment is implementation-
1101     defined.
1102 <a name="5.1.2.2" href="#5.1.2.2"><b>    5.1.2.2 Hosted environment</b></a>
1103 1   A hosted environment need not be provided, but shall conform to the following
1104     specifications if present.
1105
1106
1107
1108
1109     9)   The intent is that an implementation should identify the nature of, and where possible localize, each
1110          violation. Of course, an implementation is free to produce any number of diagnostics as long as a
1111          valid program is still correctly translated. It may also successfully translate an invalid program.
1112
1113 [<a name="#p12" href="p12">page 12</a>] (<a href="#Contents">Contents</a>)
1114
1115 <a name="5.1.2.2.1" href="#5.1.2.2.1"><b>    5.1.2.2.1 Program startup</b></a>
1116 1   The function called at program startup is named main. The implementation declares no
1117     prototype for this function. It shall be defined with a return type of int and with no
1118     parameters:
1119             int main(void) { /* ... */ }
1120     or with two parameters (referred to here as argc and argv, though any names may be
1121     used, as they are local to the function in which they are declared):
1122             int main(int argc, char *argv[]) { /* ... */ }
1123     or equivalent;10) or in some other implementation-defined manner.
1124 2   If they are declared, the parameters to the main function shall obey the following
1125     constraints:
1126     -- The value of argc shall be nonnegative.
1127     -- argv[argc] shall be a null pointer.
1128     -- If the value of argc is greater than zero, the array members argv[0] through
1129       argv[argc-1] inclusive shall contain pointers to strings, which are given
1130       implementation-defined values by the host environment prior to program startup. The
1131       intent is to supply to the program information determined prior to program startup
1132       from elsewhere in the hosted environment. If the host environment is not capable of
1133       supplying strings with letters in both uppercase and lowercase, the implementation
1134       shall ensure that the strings are received in lowercase.
1135     -- If the value of argc is greater than zero, the string pointed to by argv[0]
1136       represents the program name; argv[0][0] shall be the null character if the
1137       program name is not available from the host environment. If the value of argc is
1138       greater than one, the strings pointed to by argv[1] through argv[argc-1]
1139       represent the program parameters.
1140     -- The parameters argc and argv and the strings pointed to by the argv array shall
1141       be modifiable by the program, and retain their last-stored values between program
1142       startup and program termination.
1143 <a name="5.1.2.2.2" href="#5.1.2.2.2"><b>    5.1.2.2.2 Program execution</b></a>
1144 1   In a hosted environment, a program may use all the functions, macros, type definitions,
1145     and objects described in the library clause (clause 7).
1146
1147
1148
1149
1150     10) Thus, int can be replaced by a typedef name defined as int, or the type of argv can be written as
1151         char ** argv, and so on.
1152
1153 [<a name="#p13" href="p13">page 13</a>] (<a href="#Contents">Contents</a>)
1154
1155 <a name="5.1.2.2.3" href="#5.1.2.2.3"><b>    5.1.2.2.3 Program termination</b></a>
1156 1   If the return type of the main function is a type compatible with int, a return from the
1157     initial call to the main function is equivalent to calling the exit function with the value
1158     returned by the main function as its argument;11) reaching the } that terminates the
1159     main function returns a value of 0. If the return type is not compatible with int, the
1160     termination status returned to the host environment is unspecified.
1161     Forward references: definition of terms (<a href="#7.1.1">7.1.1</a>), the exit function (<a href="#7.22.4.4">7.22.4.4</a>).
1162 <a name="5.1.2.3" href="#5.1.2.3"><b>    5.1.2.3 Program execution</b></a>
1163 1   The semantic descriptions in this International Standard describe the behavior of an
1164     abstract machine in which issues of optimization are irrelevant.
1165 2   Accessing a volatile object, modifying an object, modifying a file, or calling a function
1166     that does any of those operations are all side effects,12) which are changes in the state of
1167     the execution environment. Evaluation of an expression in general includes both value
1168     computations and initiation of side effects. Value computation for an lvalue expression
1169     includes determining the identity of the designated object.
1170 3   Sequenced before is an asymmetric, transitive, pair-wise relation between evaluations
1171     executed by a single thread, which induces a partial order among those evaluations.
1172     Given any two evaluations A and B, if A is sequenced before B, then the execution of A
1173     shall precede the execution of B. (Conversely, if A is sequenced before B, then B is
1174     sequenced after A.) If A is not sequenced before or after B, then A and B are
1175     unsequenced. Evaluations A and B are indeterminately sequenced when A is sequenced
1176     either before or after B, but it is unspecified which.13) The presence of a sequence point
1177     between the evaluation of expressions A and B implies that every value computation and
1178     side effect associated with A is sequenced before every value computation and side effect
1179     associated with B. (A summary of the sequence points is given in <a href="#C">annex C</a>.)
1180 4   In the abstract machine, all expressions are evaluated as specified by the semantics. An
1181     actual implementation need not evaluate part of an expression if it can deduce that its
1182     value is not used and that no needed side effects are produced (including any caused by
1183
1184     11) In accordance with <a href="#6.2.4">6.2.4</a>, the lifetimes of objects with automatic storage duration declared in main
1185         will have ended in the former case, even where they would not have in the latter.
1186     12) The IEC 60559 standard for binary floating-point arithmetic requires certain user-accessible status
1187         flags and control modes. Floating-point operations implicitly set the status flags; modes affect result
1188         values of floating-point operations. Implementations that support such floating-point state are
1189         required to regard changes to it as side effects -- see <a href="#F">annex F</a> for details. The floating-point
1190         environment library <a href="#7.6">&lt;fenv.h&gt;</a> provides a programming facility for indicating when these side
1191         effects matter, freeing the implementations in other cases.
1192     13) The executions of unsequenced evaluations can interleave. Indeterminately sequenced evaluations
1193         cannot interleave, but can be executed in any order.
1194
1195 [<a name="#p14" href="p14">page 14</a>] (<a href="#Contents">Contents</a>)
1196
1197      calling a function or accessing a volatile object).
1198 5    When the processing of the abstract machine is interrupted by receipt of a signal, the
1199      values of objects that are neither lock-free atomic objects nor of type volatile
1200      sig_atomic_t are unspecified, and the value of any object that is modified by the
1201      handler that is neither a lock-free atomic object nor of type volatile
1202      sig_atomic_t becomes undefined.
1203 6    The least requirements on a conforming implementation are:
1204      -- Accesses to volatile objects are evaluated strictly according to the rules of the abstract
1205        machine.
1206      -- At program termination, all data written into files shall be identical to the result that
1207        execution of the program according to the abstract semantics would have produced.
1208      -- The input and output dynamics of interactive devices shall take place as specified in
1209 <a name="7.21.3" href="#7.21.3"><b>       7.21.3. The intent of these requirements is that unbuffered or line-buffered output</b></a>
1210        appear as soon as possible, to ensure that prompting messages actually appear prior to
1211        a program waiting for input.
1212      This is the observable behavior of the program.
1213 7    What constitutes an interactive device is implementation-defined.
1214 8    More stringent correspondences between abstract and actual semantics may be defined by
1215      each implementation.
1216 9    EXAMPLE 1 An implementation might define a one-to-one correspondence between abstract and actual
1217      semantics: at every sequence point, the values of the actual objects would agree with those specified by the
1218      abstract semantics. The keyword volatile would then be redundant.
1219 10   Alternatively, an implementation might perform various optimizations within each translation unit, such
1220      that the actual semantics would agree with the abstract semantics only when making function calls across
1221      translation unit boundaries. In such an implementation, at the time of each function entry and function
1222      return where the calling function and the called function are in different translation units, the values of all
1223      externally linked objects and of all objects accessible via pointers therein would agree with the abstract
1224      semantics. Furthermore, at the time of each such function entry the values of the parameters of the called
1225      function and of all objects accessible via pointers therein would agree with the abstract semantics. In this
1226      type of implementation, objects referred to by interrupt service routines activated by the signal function
1227      would require explicit specification of volatile storage, as well as other implementation-defined
1228      restrictions.
1229
1230 11   EXAMPLE 2       In executing the fragment
1231               char c1, c2;
1232               /* ... */
1233               c1 = c1 + c2;
1234      the ''integer promotions'' require that the abstract machine promote the value of each variable to int size
1235      and then add the two ints and truncate the sum. Provided the addition of two chars can be done without
1236      overflow, or with overflow wrapping silently to produce the correct result, the actual execution need only
1237      produce the same result, possibly omitting the promotions.
1238
1239 [<a name="#p15" href="p15">page 15</a>] (<a href="#Contents">Contents</a>)
1240
1241 12   EXAMPLE 3       Similarly, in the fragment
1242               float f1, f2;
1243               double d;
1244               /* ... */
1245               f1 = f2 * d;
1246      the multiplication may be executed using single-precision arithmetic if the implementation can ascertain
1247      that the result would be the same as if it were executed using double-precision arithmetic (for example, if d
1248      were replaced by the constant <a href="#2.0">2.0</a>, which has type double).
1249
1250 13   EXAMPLE 4 Implementations employing wide registers have to take care to honor appropriate
1251      semantics. Values are independent of whether they are represented in a register or in memory. For
1252      example, an implicit spilling of a register is not permitted to alter the value. Also, an explicit store and load
1253      is required to round to the precision of the storage type. In particular, casts and assignments are required to
1254      perform their specified conversion. For the fragment
1255               double d1, d2;
1256               float f;
1257               d1 = f = expression;
1258               d2 = (float) expression;
1259      the values assigned to d1 and d2 are required to have been converted to float.
1260
1261 14   EXAMPLE 5 Rearrangement for floating-point expressions is often restricted because of limitations in
1262      precision as well as range. The implementation cannot generally apply the mathematical associative rules
1263      for addition or multiplication, nor the distributive rule, because of roundoff error, even in the absence of
1264      overflow and underflow. Likewise, implementations cannot generally replace decimal constants in order to
1265      rearrange expressions. In the following fragment, rearrangements suggested by mathematical rules for real
1266      numbers are often not valid (see <a href="#F.9">F.9</a>).
1267               double x, y, z;
1268               /* ... */
1269               x = (x * y) * z;            //   not equivalent to x   *= y * z;
1270               z = (x - y) + y ;           //   not equivalent to z   = x;
1271               z = x + x * y;              //   not equivalent to z   = x * (<a href="#1.0">1.0</a> + y);
1272               y = x / <a href="#5.0">5.0</a>;                //   not equivalent to y   = x * 0.2;
1273
1274 15   EXAMPLE 6       To illustrate the grouping behavior of expressions, in the following fragment
1275               int a, b;
1276               /* ... */
1277               a = a + 32760 + b + 5;
1278      the expression statement behaves exactly the same as
1279               a = (((a + 32760) + b) + 5);
1280      due to the associativity and precedence of these operators. Thus, the result of the sum (a + 32760) is
1281      next added to b, and that result is then added to 5 which results in the value assigned to a. On a machine in
1282      which overflows produce an explicit trap and in which the range of values representable by an int is
1283      [-32768, +32767], the implementation cannot rewrite this expression as
1284               a = ((a + b) + 32765);
1285      since if the values for a and b were, respectively, -32754 and -15, the sum a + b would produce a trap
1286      while the original expression would not; nor can the expression be rewritten either as
1287
1288
1289 [<a name="#p16" href="p16">page 16</a>] (<a href="#Contents">Contents</a>)
1290
1291               a = ((a + 32765) + b);
1292      or
1293               a = (a + (b + 32765));
1294      since the values for a and b might have been, respectively, 4 and -8 or -17 and 12. However, on a machine
1295      in which overflow silently generates some value and where positive and negative overflows cancel, the
1296      above expression statement can be rewritten by the implementation in any of the above ways because the
1297      same result will occur.
1298
1299 16   EXAMPLE 7 The grouping of an expression does not completely determine its evaluation. In the
1300      following fragment
1301               #include <a href="#7.21">&lt;stdio.h&gt;</a>
1302               int sum;
1303               char *p;
1304               /* ... */
1305               sum = sum * 10 - '0' + (*p++ = getchar());
1306      the expression statement is grouped as if it were written as
1307               sum = (((sum * 10) - '0') + ((*(p++)) = (getchar())));
1308      but the actual increment of p can occur at any time between the previous sequence point and the next
1309      sequence point (the ;), and the call to getchar can occur at any point prior to the need of its returned
1310      value.
1311
1312      Forward references: 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
1313      signal function (<a href="#7.14">7.14</a>), files (<a href="#7.21.3">7.21.3</a>).
1314 <a name="5.1.2.4" href="#5.1.2.4"><b>     5.1.2.4 Multi-threaded executions and data races</b></a>
1315 1    Under a hosted implementation, a program can have more than one thread of execution
1316      (or thread) running concurrently. The execution of each thread proceeds as defined by
1317      the remainder of this standard. The execution of the entire program consists of an
1318      execution of all of its threads.14) Under a freestanding implementation, it is
1319      implementation-defined whether a program can have more than one thread of execution.
1320 2    The value of an object visible to a thread T at a particular point is the initial value of the
1321      object, a value stored in the object by T , or a value stored in the object by another thread,
1322      according to the rules below.
1323 3    NOTE 1 In some cases, there may instead be undefined behavior. Much of this section is motivated by
1324      the desire to support atomic operations with explicit and detailed visibility constraints. However, it also
1325      implicitly supports a simpler view for more restricted programs.
1326
1327 4    Two expression evaluations conflict if one of them modifies a memory location and the
1328      other one accesses or modifies the same memory location.
1329
1330
1331
1332
1333      14) The execution can usually be viewed as an interleaving of all of the threads. However, some kinds of
1334          atomic operations, for example, allow executions inconsistent with a simple interleaving as described
1335          below.
1336
1337 [<a name="#p17" href="p17">page 17</a>] (<a href="#Contents">Contents</a>)
1338
1339 5    The library defines a number of atomic operations (<a href="#7.17">7.17</a>) and operations on mutexes
1340      (<a href="#7.25.4">7.25.4</a>) that are specially identified as synchronization operations. These operations play
1341      a special role in making assignments in one thread visible to another. A synchronization
1342      operation on one or more memory locations is either an acquire operation, a release
1343      operation, both an acquire and release operation, or a consume operation. A
1344      synchronization operation without an associated memory location is a fence and can be
1345      either an acquire fence, a release fence, or both an acquire and release fence. In addition,
1346      there are relaxed atomic operations, which are not synchronization operations, and
1347      atomic read-modify-write operations, which have special characteristics.
1348 6    NOTE 2 For example, a call that acquires a mutex will perform an acquire operation on the locations
1349      composing the mutex. Correspondingly, a call that releases the same mutex will perform a release
1350      operation on those same locations. Informally, performing a release operation on A forces prior side effects
1351      on other memory locations to become visible to other threads that later perform an acquire or consume
1352      operation on A. We do not include relaxed atomic operations as synchronization operations although, like
1353      synchronization operations, they cannot contribute to data races.
1354
1355 7    All modifications to a particular atomic object M occur in some particular total order,
1356      called the modification order of M. If A and B are modifications of an atomic object M,
1357      and A happens before B, then A shall precede B in the modification order of M, which is
1358      defined below.
1359 8    NOTE 3     This states that the modification orders must respect the ''happens before'' relation.
1360
1361 9    NOTE 4 There is a separate order for each atomic object. There is no requirement that these can be
1362      combined into a single total order for all objects. In general this will be impossible since different threads
1363      may observe modifications to different variables in inconsistent orders.
1364
1365 10   A release sequence on an atomic object M is a maximal contiguous sub-sequence of side
1366      effects in the modification order of M, where the first operation is a release and every
1367      subsequent operation either is performed by the same thread that performed the release or
1368      is an atomic read-modify-write operation.
1369 11   Certain library calls synchronize with other library calls performed by another thread. In
1370      particular, an atomic operation A that performs a release operation on an object M
1371      synchronizes with an atomic operation B that performs an acquire operation on M and
1372      reads a value written by any side effect in the release sequence headed by A.
1373 12   NOTE 5 Except in the specified cases, reading a later value does not necessarily ensure visibility as
1374      described below. Such a requirement would sometimes interfere with efficient implementation.
1375
1376 13   NOTE 6 The specifications of the synchronization operations define when one reads the value written by
1377      another. For atomic variables, the definition is clear. All operations on a given mutex occur in a single total
1378      order. Each mutex acquisition ''reads the value written'' by the last mutex release.
1379
1380 14   An evaluation A carries a dependency 15) to an evaluation B if:
1381
1382
1383      15) The ''carries a dependency'' relation is a subset of the ''sequenced before'' relation, and is similarly
1384          strictly intra-thread.
1385
1386 [<a name="#p18" href="p18">page 18</a>] (<a href="#Contents">Contents</a>)
1387
1388      -- the value of A is used as an operand of B, unless:
1389            o B is an invocation of the kill_dependency macro,
1390
1391            o A is the left operand of a &amp;&amp; or || operator,
1392
1393            o A is the left operand of a ? : operator, or
1394
1395            o A is the left operand of a , operator;
1396          or
1397      -- A writes a scalar object or bit-field M, B reads from M the value written by A, and A
1398        is sequenced before B, or
1399      -- for some evaluation X, A carries a dependency to X and X carries a dependency to B.
1400 15   An evaluation A is dependency-ordered before16) an evaluation B if:
1401      -- A performs a release operation on an atomic object M, and B performs a consume
1402        operation on M and reads a value written by any side effect in the release sequence
1403        headed by A, or
1404      -- for some evaluation X, A is dependency-ordered before X and X carries a
1405        dependency to B.
1406 16   An evaluation A inter-thread happens before an evaluation B if A synchronizes with B, A
1407      is dependency-ordered before B, or, for some evaluation X:
1408      -- A synchronizes with X and X is sequenced before B,
1409      -- A is sequenced before X and X inter-thread happens before B, or
1410      -- A inter-thread happens before X and X inter-thread happens before B.
1411 17   NOTE 7 The ''inter-thread happens before'' relation describes arbitrary concatenations of ''sequenced
1412      before'', ''synchronizes with'', and ''dependency-ordered before'' relationships, with two exceptions. The
1413      first exception is that a concatenation is not permitted to end with ''dependency-ordered before'' followed
1414      by ''sequenced before''. The reason for this limitation is that a consume operation participating in a
1415      ''dependency-ordered before'' relationship provides ordering only with respect to operations to which this
1416      consume operation actually carries a dependency. The reason that this limitation applies only to the end of
1417      such a concatenation is that any subsequent release operation will provide the required ordering for a prior
1418      consume operation. The second exception is that a concatenation is not permitted to consist entirely of
1419      ''sequenced before''. The reasons for this limitation are (1) to permit ''inter-thread happens before'' to be
1420      transitively closed and (2) the ''happens before'' relation, defined below, provides for relationships
1421      consisting entirely of ''sequenced before''.
1422
1423 18   An evaluation A happens before an evaluation B if A is sequenced before B or A inter-
1424      thread happens before B.
1425
1426
1427
1428      16) The ''dependency-ordered before'' relation is analogous to the ''synchronizes with'' relation, but uses
1429          release/consume in place of release/acquire.
1430
1431 [<a name="#p19" href="p19">page 19</a>] (<a href="#Contents">Contents</a>)
1432
1433 19   A visible side effect A on an object M with respect to a value computation B of M
1434      satisfies the conditions:
1435      -- A happens before B, and
1436      -- there is no other side effect X to M such that A happens before X and X happens
1437          before B.
1438      The value of a non-atomic scalar object M, as determined by evaluation B, shall be the
1439      value stored by the visible side effect A.
1440 20   NOTE 8 If there is ambiguity about which side effect to a non-atomic object is visible, then there is a data
1441      race and the behavior is undefined.
1442
1443 21   NOTE 9 This states that operations on ordinary variables are not visibly reordered. This is not actually
1444      detectable without data races, but it is necessary to ensure that data races, as defined here, and with suitable
1445      restrictions on the use of atomics, correspond to data races in a simple interleaved (sequentially consistent)
1446      execution.
1447
1448 22   The visible sequence of side effects on an atomic object M, with respect to a value
1449      computation B of M, is a maximal contiguous sub-sequence of side effects in the
1450      modification order of M, where the first side effect is visible with respect to B, and for
1451      every subsequent side effect, it is not the case that B happens before it. The value of an
1452      atomic object M, as determined by evaluation B, shall be the value stored by some
1453      operation in the visible sequence of M with respect to B. Furthermore, if a value
1454      computation A of an atomic object M happens before a value computation B of M, and
1455      the value computed by A corresponds to the value stored by side effect X, then the value
1456      computed by B shall either equal the value computed by A, or be the value stored by side
1457      effect Y , where Y follows X in the modification order of M.
1458 23   NOTE 10 This effectively disallows compiler reordering of atomic operations to a single object, even if
1459      both operations are ''relaxed'' loads. By doing so, we effectively make the ''cache coherence'' guarantee
1460      provided by most hardware available to C atomic operations.
1461
1462 24   NOTE 11 The visible sequence depends on the ''happens before'' relation, which in turn depends on the
1463      values observed by loads of atomics, which we are restricting here. The intended reading is that there must
1464      exist an association of atomic loads with modifications they observe that, together with suitably chosen
1465      modification orders and the ''happens before'' relation derived as described above, satisfy the resulting
1466      constraints as imposed here.
1467
1468 25   The execution of a program contains a data race if it contains two conflicting actions in
1469      different threads, at least one of which is not atomic, and neither happens before the
1470      other. Any such data race results in undefined behavior.
1471 26   NOTE 12 It can be shown that programs that correctly use simple mutexes and
1472      memory_order_seq_cst operations to prevent all data races, and use no other synchronization
1473      operations, behave as though the operations executed by their constituent threads were simply interleaved,
1474      with each value computation of an object being the last value stored in that interleaving. This is normally
1475      referred to as ''sequential consistency''. However, this applies only to data-race-free programs, and data-
1476      race-free programs cannot observe most program transformations that do not change single-threaded
1477      program semantics. In fact, most single-threaded program transformations continue to be allowed, since
1478      any program that behaves differently as a result must contain undefined behavior.
1479
1480 [<a name="#p20" href="p20">page 20</a>] (<a href="#Contents">Contents</a>)
1481
1482 27   NOTE 13 Compiler transformations that introduce assignments to a potentially shared memory location
1483      that would not be modified by the abstract machine are generally precluded by this standard, since such an
1484      assignment might overwrite another assignment by a different thread in cases in which an abstract machine
1485      execution would not have encountered a data race. This includes implementations of data member
1486      assignment that overwrite adjacent members in separate memory locations. We also generally preclude
1487      reordering of atomic loads in cases in which the atomics in question may alias, since this may violate the
1488      "visible sequence" rules.
1489
1490 28   NOTE 14 Transformations that introduce a speculative read of a potentially shared memory location may
1491      not preserve the semantics of the program as defined in this standard, since they potentially introduce a data
1492      race. However, they are typically valid in the context of an optimizing compiler that targets a specific
1493      machine with well-defined semantics for data races. They would be invalid for a hypothetical machine that
1494      is not tolerant of races or provides hardware race detection.
1495
1496
1497
1498
1499 [<a name="#p21" href="p21">page 21</a>] (<a href="#Contents">Contents</a>)
1500
1501 <a name="5.2" href="#5.2"><b>    5.2 Environmental considerations</b></a>
1502 <a name="5.2.1" href="#5.2.1"><b>    5.2.1 Character sets</b></a>
1503 1   Two sets of characters and their associated collating sequences shall be defined: the set in
1504     which source files are written (the source character set), and the set interpreted in the
1505     execution environment (the execution character set). Each set is further divided into a
1506     basic character set, whose contents are given by this subclause, and a set of zero or more
1507     locale-specific members (which are not members of the basic character set) called
1508     extended characters. The combined set is also called the extended character set. The
1509     values of the members of the execution character set are implementation-defined.
1510 2   In a character constant or string literal, members of the execution character set shall be
1511     represented by corresponding members of the source character set or by escape
1512     sequences consisting of the backslash \ followed by one or more characters. A byte with
1513     all bits set to 0, called the null character, shall exist in the basic execution character set; it
1514     is used to terminate a character string.
1515 3   Both the basic source and basic execution character sets shall have the following
1516     members: the 26 uppercase letters of the Latin alphabet
1517             A    B   C      D   E   F    G    H    I    J    K    L   M
1518             N    O   P      Q   R   S    T    U    V    W    X    Y   Z
1519     the 26 lowercase letters of the Latin alphabet
1520             a    b   c      d   e   f    g    h    i    j    k    l   m
1521             n    o   p      q   r   s    t    u    v    w    x    y   z
1522     the 10 decimal digits
1523             0    1   2      3   4   5    6    7    8    9
1524     the following 29 graphic characters
1525             !    "   #      %   &amp;   '    (    )    *    +    ,    -   .    /    :
1526             ;    &lt;   =      &gt;   ?   [    \    ]    ^    _    {    |   }    ~
1527     the space character, and control characters representing horizontal tab, vertical tab, and
1528     form feed. The representation of each member of the source and execution basic
1529     character sets shall fit in a byte. In both the source and execution basic character sets, the
1530     value of each character after 0 in the above list of decimal digits shall be one greater than
1531     the value of the previous. In source files, there shall be some way of indicating the end of
1532     each line of text; this International Standard treats such an end-of-line indicator as if it
1533     were a single new-line character. In the basic execution character set, there shall be
1534     control characters representing alert, backspace, carriage return, and new line. If any
1535     other characters are encountered in a source file (except in an identifier, a character
1536     constant, a string literal, a header name, a comment, or a preprocessing token that is never
1537
1538 [<a name="#p22" href="p22">page 22</a>] (<a href="#Contents">Contents</a>)
1539
1540     converted to a token), the behavior is undefined.
1541 4   A letter is an uppercase letter or a lowercase letter as defined above; in this International
1542     Standard the term does not include other characters that are letters in other alphabets.
1543 5   The universal character name construct provides a way to name other characters.
1544     Forward references: 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>),
1545     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>).
1546 <a name="5.2.1.1" href="#5.2.1.1"><b>    5.2.1.1 Trigraph sequences</b></a>
1547 1   Before any other processing takes place, each occurrence of one of the following
1548     sequences of three characters (called trigraph sequences17)) is replaced with the
1549     corresponding single character.
1550            ??=      #                       ??)      ]                       ??!     |
1551            ??(      [                       ??'      ^                       ??&gt;     }
1552            ??/      \                       ??&lt;      {                       ??-     ~
1553     No other trigraph sequences exist. Each ? that does not begin one of the trigraphs listed
1554     above is not changed.
1555 2   EXAMPLE 1
1556               ??=define arraycheck(a, b) a??(b??) ??!??! b??(a??)
1557     becomes
1558               #define arraycheck(a, b) a[b] || b[a]
1559
1560 3   EXAMPLE 2      The following source line
1561               printf("Eh???/n");
1562     becomes (after replacement of the trigraph sequence ??/)
1563               printf("Eh?\n");
1564
1565 <a name="5.2.1.2" href="#5.2.1.2"><b>    5.2.1.2 Multibyte characters</b></a>
1566 1   The source character set may contain multibyte characters, used to represent members of
1567     the extended character set. The execution character set may also contain multibyte
1568     characters, which need not have the same encoding as for the source character set. For
1569     both character sets, the following shall hold:
1570     -- The basic character set shall be present and each character shall be encoded as a
1571       single byte.
1572     -- The presence, meaning, and representation of any additional members is locale-
1573       specific.
1574
1575     17) The trigraph sequences enable the input of characters that are not defined in the Invariant Code Set as
1576         described in ISO/IEC 646, which is a subset of the seven-bit US ASCII code set.
1577
1578 [<a name="#p23" href="p23">page 23</a>] (<a href="#Contents">Contents</a>)
1579
1580     -- A multibyte character set may have a state-dependent encoding, wherein each
1581       sequence of multibyte characters begins in an initial shift state and enters other
1582       locale-specific shift states when specific multibyte characters are encountered in the
1583       sequence. While in the initial shift state, all single-byte characters retain their usual
1584       interpretation and do not alter the shift state. The interpretation for subsequent bytes
1585       in the sequence is a function of the current shift state.
1586     -- A byte with all bits zero shall be interpreted as a null character independent of shift
1587       state. Such a byte shall not occur as part of any other multibyte character.
1588 2   For source files, the following shall hold:
1589     -- An identifier, comment, string literal, character constant, or header name shall begin
1590       and end in the initial shift state.
1591     -- An identifier, comment, string literal, character constant, or header name shall consist
1592       of a sequence of valid multibyte characters.
1593 <a name="5.2.2" href="#5.2.2"><b>    5.2.2 Character display semantics</b></a>
1594 1   The active position is that location on a display device where the next character output by
1595     the fputc function would appear. The intent of writing a printing character (as defined
1596     by the isprint function) to a display device is to display a graphic representation of
1597     that character at the active position and then advance the active position to the next
1598     position on the current line. The direction of writing is locale-specific. If the active
1599     position is at the final position of a line (if there is one), the behavior of the display device
1600     is unspecified.
1601 2   Alphabetic escape sequences representing nongraphic characters in the execution
1602     character set are intended to produce actions on display devices as follows:
1603     \a (alert) Produces an audible or visible alert without changing the active position.
1604     \b (backspace) Moves the active position to the previous position on the current line. If
1605        the active position is at the initial position of a line, the behavior of the display
1606        device is unspecified.
1607     \f ( form feed) Moves the active position to the initial position at the start of the next
1608        logical page.
1609     \n (new line) Moves the active position to the initial position of the next line.
1610     \r (carriage return) Moves the active position to the initial position of the current line.
1611     \t (horizontal tab) Moves the active position to the next horizontal tabulation position
1612        on the current line. If the active position is at or past the last defined horizontal
1613        tabulation position, the behavior of the display device is unspecified.
1614     \v (vertical tab) Moves the active position to the initial position of the next vertical
1615        tabulation position. If the active position is at or past the last defined vertical
1616 [<a name="#p24" href="p24">page 24</a>] (<a href="#Contents">Contents</a>)
1617
1618          tabulation position, the behavior of the display device is unspecified.
1619 3   Each of these escape sequences shall produce a unique implementation-defined value
1620     which can be stored in a single char object. The external representations in a text file
1621     need not be identical to the internal representations, and are outside the scope of this
1622     International Standard.
1623     Forward references: the isprint function (<a href="#7.4.1.8">7.4.1.8</a>), the fputc function (<a href="#7.21.7.3">7.21.7.3</a>).
1624 <a name="5.2.3" href="#5.2.3"><b>    5.2.3 Signals and interrupts</b></a>
1625 1   Functions shall be implemented such that they may be interrupted at any time by a signal,
1626     or may be called by a signal handler, or both, with no alteration to earlier, but still active,
1627     invocations' control flow (after the interruption), function return values, or objects with
1628     automatic storage duration. All such objects shall be maintained outside the function
1629     image (the instructions that compose the executable representation of a function) on a
1630     per-invocation basis.
1631 <a name="5.2.4" href="#5.2.4"><b>    5.2.4 Environmental limits</b></a>
1632 1   Both the translation and execution environments constrain the implementation of
1633     language translators and libraries. The following summarizes the language-related
1634     environmental limits on a conforming implementation; the library-related limits are
1635     discussed in clause 7.
1636 <a name="5.2.4.1" href="#5.2.4.1"><b>    5.2.4.1 Translation limits</b></a>
1637 1   The implementation shall be able to translate and execute at least one program that
1638     contains at least one instance of every one of the following limits:18)
1639     -- 127 nesting levels of blocks
1640     -- 63 nesting levels of conditional inclusion
1641     -- 12 pointer, array, and function declarators (in any combinations) modifying an
1642       arithmetic, structure, union, or void type in a declaration
1643     -- 63 nesting levels of parenthesized declarators within a full declarator
1644     -- 63 nesting levels of parenthesized expressions within a full expression
1645     -- 63 significant initial characters in an internal identifier or a macro name (each
1646       universal character name or extended source character is considered a single
1647       character)
1648     -- 31 significant initial characters in an external identifier (each universal character name
1649       specifying a short identifier of 0000FFFF or less is considered 6 characters, each
1650
1651
1652     18) Implementations should avoid imposing fixed translation limits whenever possible.
1653
1654 [<a name="#p25" href="p25">page 25</a>] (<a href="#Contents">Contents</a>)
1655
1656          universal character name specifying a short identifier of 00010000 or more is
1657          considered 10 characters, and each extended source character is considered the same
1658          number of characters as the corresponding universal character name, if any)19)
1659     -- 4095 external identifiers in one translation unit
1660     -- 511 identifiers with block scope declared in one block
1661     -- 4095 macro identifiers simultaneously defined in one preprocessing translation unit
1662     -- 127 parameters in one function definition
1663     -- 127 arguments in one function call
1664     -- 127 parameters in one macro definition
1665     -- 127 arguments in one macro invocation
1666     -- 4095 characters in a logical source line
1667     -- 4095 characters in a string literal (after concatenation)
1668     -- 65535 bytes in an object (in a hosted environment only)
1669     -- 15 nesting levels for #included files
1670     -- 1023 case labels for a switch statement (excluding those for any nested switch
1671       statements)
1672     -- 1023 members in a single structure or union
1673     -- 1023 enumeration constants in a single enumeration
1674     -- 63 levels of nested structure or union definitions in a single struct-declaration-list
1675 <a name="5.2.4.2" href="#5.2.4.2"><b>    5.2.4.2 Numerical limits</b></a>
1676 1   An implementation is required to document all the limits specified in this subclause,
1677     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
1678     specified in <a href="#7.20">&lt;stdint.h&gt;</a>.
1679     Forward references: integer types <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#7.20">7.20</a>).
1680 <a name="5.2.4.2.1" href="#5.2.4.2.1"><b>    5.2.4.2.1 Sizes of integer types &lt;limits.h&gt;</b></a>
1681 1   The values given below shall be replaced by constant expressions suitable for use in #if
1682     preprocessing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the
1683     following shall be replaced by expressions that have the same type as would an
1684     expression that is an object of the corresponding type converted according to the integer
1685     promotions. Their implementation-defined values shall be equal or greater in magnitude
1686
1687
1688     19) See ''future language directions'' (<a href="#6.11.3">6.11.3</a>).
1689
1690 [<a name="#p26" href="p26">page 26</a>] (<a href="#Contents">Contents</a>)
1691
1692 (absolute value) to those shown, with the same sign.
1693 -- number of bits for smallest object that is not a bit-field (byte)
1694   CHAR_BIT                                            8
1695 -- minimum value for an object of type signed char
1696   SCHAR_MIN                                -127 // -(27 - 1)
1697 -- maximum value for an object of type signed char
1698   SCHAR_MAX                                +127 // 27 - 1
1699 -- maximum value for an object of type unsigned char
1700   UCHAR_MAX                                 255 // 28 - 1
1701 -- minimum value for an object of type char
1702   CHAR_MIN                               see below
1703 -- maximum value for an object of type char
1704   CHAR_MAX                              see below
1705 -- maximum number of bytes in a multibyte character, for any supported locale
1706   MB_LEN_MAX                                    1
1707 -- minimum value for an object of type short int
1708   SHRT_MIN                               -32767 // -(215 - 1)
1709 -- maximum value for an object of type short int
1710   SHRT_MAX                               +32767 // 215 - 1
1711 -- maximum value for an object of type unsigned short int
1712   USHRT_MAX                               65535 // 216 - 1
1713 -- minimum value for an object of type int
1714   INT_MIN                                 -32767 // -(215 - 1)
1715 -- maximum value for an object of type int
1716   INT_MAX                                +32767 // 215 - 1
1717 -- maximum value for an object of type unsigned int
1718   UINT_MAX                                65535 // 216 - 1
1719 -- minimum value for an object of type long int
1720   LONG_MIN                         -2147483647 // -(231 - 1)
1721 -- maximum value for an object of type long int
1722   LONG_MAX                         +2147483647 // 231 - 1
1723 -- maximum value for an object of type unsigned long int
1724   ULONG_MAX                         4294967295 // 232 - 1
1725
1726
1727 [<a name="#p27" href="p27">page 27</a>] (<a href="#Contents">Contents</a>)
1728
1729     -- minimum value for an object of type long long int
1730       LLONG_MIN          -9223372036854775807 // -(263 - 1)
1731     -- maximum value for an object of type long long int
1732       LLONG_MAX          +9223372036854775807 // 263 - 1
1733     -- maximum value for an object of type unsigned long long int
1734       ULLONG_MAX         18446744073709551615 // 264 - 1
1735 2   If the value of an object of type char is treated as a signed integer when used in an
1736     expression, the value of CHAR_MIN shall be the same as that of SCHAR_MIN and the
1737     value of CHAR_MAX shall be the same as that of SCHAR_MAX. Otherwise, the value of
1738     CHAR_MIN shall be 0 and the value of CHAR_MAX shall be the same as that of
1739     UCHAR_MAX.20) The value UCHAR_MAX shall equal 2CHAR_BIT - 1.
1740     Forward references: representations of types (<a href="#6.2.6">6.2.6</a>), conditional inclusion (<a href="#6.10.1">6.10.1</a>).
1741 <a name="5.2.4.2.2" href="#5.2.4.2.2"><b>    5.2.4.2.2 Characteristics of floating types &lt;float.h&gt;</b></a>
1742 1   The characteristics of floating types are defined in terms of a model that describes a
1743     representation of floating-point numbers and values that provide information about an
1744     implementation's floating-point arithmetic.21) The following parameters are used to
1745     define the model for each floating-point type:
1746            s          sign ((+-)1)
1747            b          base or radix of exponent representation (an integer &gt; 1)
1748            e          exponent (an integer between a minimum emin and a maximum emax )
1749            p          precision (the number of base-b digits in the significand)
1750             fk        nonnegative integers less than b (the significand digits)
1751 2   A floating-point number (x) is defined by the following model:
1752                        p
1753            x = sb e   (Sum) f k b-k ,
1754                       k=1
1755                                     emin &lt;= e &lt;= emax
1756
1757 3   In addition to normalized floating-point numbers ( f 1 &gt; 0 if x != 0), floating types may be
1758     able to contain other kinds of floating-point numbers, such as subnormal floating-point
1759     numbers (x != 0, e = emin , f 1 = 0) and unnormalized floating-point numbers (x != 0,
1760     e &gt; emin , f 1 = 0), and values that are not floating-point numbers, such as infinities and
1761     NaNs. A NaN is an encoding signifying Not-a-Number. A quiet NaN propagates
1762     through almost every arithmetic operation without raising a floating-point exception; a
1763     signaling NaN generally raises a floating-point exception when occurring as an
1764
1765
1766     20) See <a href="#6.2.5">6.2.5</a>.
1767     21) The floating-point model is intended to clarify the description of each floating-point characteristic and
1768         does not require the floating-point arithmetic of the implementation to be identical.
1769
1770 [<a name="#p28" href="p28">page 28</a>] (<a href="#Contents">Contents</a>)
1771
1772     arithmetic operand.22)
1773 4   An implementation may give zero and non-numeric values (such as infinities and NaNs) a
1774     sign or may leave them unsigned. Wherever such values are unsigned, any requirement
1775     in this International Standard to retrieve the sign shall produce an unspecified sign, and
1776     any requirement to set the sign shall be ignored.
1777 5   The minimum range of representable values for a floating type is the most negative finite
1778     floating-point number representable in that type through the most positive finite floating-
1779     point number representable in that type. In addition, if negative infinity is representable
1780     in a type, the range of that type is extended to all negative real numbers; likewise, if
1781     positive infinity is representable in a type, the range of that type is extended to all positive
1782     real numbers.
1783 6   The accuracy of the floating-point operations (+, -, *, /) and of the library functions in
1784     <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-
1785     defined, as is the accuracy of the conversion between floating-point internal
1786     representations and string representations performed by the library functions in
1787     <a href="#7.21">&lt;stdio.h&gt;</a>, <a href="#7.22">&lt;stdlib.h&gt;</a>, and <a href="#7.28">&lt;wchar.h&gt;</a>. The implementation may state that the
1788     accuracy is unknown.
1789 7   All integer values in the <a href="#7.7">&lt;float.h&gt;</a> header, except FLT_ROUNDS, shall be constant
1790     expressions suitable for use in #if preprocessing directives; all floating values shall be
1791     constant expressions. All except DECIMAL_DIG, FLT_EVAL_METHOD, FLT_RADIX,
1792     and FLT_ROUNDS have separate names for all three floating-point types. The floating-
1793     point model representation is provided for all values except FLT_EVAL_METHOD and
1794     FLT_ROUNDS.
1795 8   The rounding mode for floating-point addition is characterized by the implementation-
1796     defined value of FLT_ROUNDS:23)
1797           -1      indeterminable
1798            0      toward zero
1799            1      to nearest
1800            2      toward positive infinity
1801            3      toward negative infinity
1802     All other values for FLT_ROUNDS characterize implementation-defined rounding
1803     behavior.
1804
1805
1806     22) IEC 60559:1989 specifies quiet and signaling NaNs. For implementations that do not support
1807         IEC 60559:1989, the terms quiet NaN and signaling NaN are intended to apply to encodings with
1808         similar behavior.
1809     23) Evaluation of FLT_ROUNDS correctly reflects any execution-time change of rounding mode through
1810         the function fesetround in <a href="#7.6">&lt;fenv.h&gt;</a>.
1811
1812 [<a name="#p29" href="p29">page 29</a>] (<a href="#Contents">Contents</a>)
1813
1814 9    Except for assignment and cast (which remove all extra range and precision), the values
1815      yielded by operators with floating operands and values subject to the usual arithmetic
1816      conversions and of floating constants are evaluated to a format whose range and precision
1817      may be greater than required by the type. The use of evaluation formats is characterized
1818      by the implementation-defined value of FLT_EVAL_METHOD:24)
1819             -1         indeterminable;
1820               0        evaluate all operations and constants just to the range and precision of the
1821                        type;
1822               1        evaluate operations and constants of type float and double to the
1823                        range and precision of the double type, evaluate long double
1824                        operations and constants to the range and precision of the long double
1825                        type;
1826               2        evaluate all operations and constants to the range and precision of the
1827                        long double type.
1828      All other negative values for FLT_EVAL_METHOD characterize implementation-defined
1829      behavior.
1830 10   The presence or absence of subnormal numbers is characterized by the implementation-
1831      defined     values     of    FLT_HAS_SUBNORM,          DBL_HAS_SUBNORM,           and
1832      LDBL_HAS_SUBNORM:
1833             -1       indeterminable25)
1834              0       absent26) (type does not support subnormal numbers)
1835              1       present (type does support subnormal numbers)
1836 11   The values given in the following list shall be replaced by constant expressions with
1837      implementation-defined values that are greater or equal in magnitude (absolute value) to
1838      those shown, with the same sign:
1839      -- radix of exponent representation, b
1840        FLT_RADIX                                                    2
1841
1842
1843
1844
1845      24) The evaluation method determines evaluation formats of expressions involving all floating types, not
1846          just real types. For example, if FLT_EVAL_METHOD is 1, then the product of two float
1847          _Complex operands is represented in the double _Complex format, and its parts are evaluated to
1848          double.
1849      25) Characterization as indeterminable is intended if floating-point operations do not consistently interpret
1850          subnormal representations as zero, nor as nonzero.
1851      26) Characterization as absent is intended if no floating-point operations produce subnormal results from
1852          non-subnormal inputs, even if the type format includes representations of subnormal numbers.
1853
1854 [<a name="#p30" href="p30">page 30</a>] (<a href="#Contents">Contents</a>)
1855
1856 -- number of base-FLT_RADIX digits in the floating-point significand, p
1857    FLT_MANT_DIG
1858    DBL_MANT_DIG
1859    LDBL_MANT_DIG
1860 -- number of decimal digits, n, such that any floating-point number with p radix b digits
1861   can be rounded to a floating-point number with n decimal digits and back again
1862   without change to the value,
1863        { p log10 b        if b is a power of 10
1864        {
1865        { [^1 + p log10 b^] otherwise
1866    FLT_DECIMAL_DIG                                   6
1867    DBL_DECIMAL_DIG                                  10
1868    LDBL_DECIMAL_DIG                                 10
1869 -- number of decimal digits, n, such that any floating-point number in the widest
1870   supported floating type with pmax radix b digits can be rounded to a floating-point
1871   number with n decimal digits and back again without change to the value,
1872        { pmax log10 b       if b is a power of 10
1873        {
1874        { [^1 + pmax log10 b^] otherwise
1875    DECIMAL_DIG                                     10
1876 -- number of decimal digits, q, such that any floating-point number with q decimal digits
1877   can be rounded into a floating-point number with p radix b digits and back again
1878   without change to the q decimal digits,
1879        { p log10 b          if b is a power of 10
1880        {
1881        { [_( p - 1) log10 b_] otherwise
1882    FLT_DIG                                          6
1883    DBL_DIG                                         10
1884    LDBL_DIG                                        10
1885 -- minimum negative integer such that FLT_RADIX raised to one less than that power is
1886   a normalized floating-point number, emin
1887    FLT_MIN_EXP
1888    DBL_MIN_EXP
1889    LDBL_MIN_EXP
1890
1891
1892
1893
1894 [<a name="#p31" href="p31">page 31</a>] (<a href="#Contents">Contents</a>)
1895
1896      -- minimum negative integer such that 10 raised to that power is in the range of
1897        normalized floating-point numbers, [^log10 b emin -1 ^]
1898                                          [                  ]
1899        FLT_MIN_10_EXP                                 -37
1900        DBL_MIN_10_EXP                                 -37
1901        LDBL_MIN_10_EXP                                -37
1902      -- maximum integer such that FLT_RADIX raised to one less than that power is a
1903        representable finite floating-point number, emax
1904           FLT_MAX_EXP
1905           DBL_MAX_EXP
1906           LDBL_MAX_EXP
1907      -- maximum integer such that 10 raised to that power is in the range of representable
1908        finite floating-point numbers, [_log10 ((1 - b- p )b emax )_]
1909           FLT_MAX_10_EXP                               +37
1910           DBL_MAX_10_EXP                               +37
1911           LDBL_MAX_10_EXP                              +37
1912 12   The values given in the following list shall be replaced by constant expressions with
1913      implementation-defined values that are greater than or equal to those shown:
1914      -- maximum representable finite floating-point number, (1 - b- p )b emax
1915           FLT_MAX                                   1E+37
1916           DBL_MAX                                   1E+37
1917           LDBL_MAX                                  1E+37
1918 13   The values given in the following list shall be replaced by constant expressions with
1919      implementation-defined (positive) values that are less than or equal to those shown:
1920      -- the difference between 1 and the least value greater than 1 that is representable in the
1921        given floating point type, b1- p
1922           FLT_EPSILON                                1E-5
1923           DBL_EPSILON                                1E-9
1924           LDBL_EPSILON                               1E-9
1925      -- minimum normalized positive floating-point number, b emin -1
1926           FLT_MIN                                   1E-37
1927           DBL_MIN                                   1E-37
1928           LDBL_MIN                                  1E-37
1929
1930
1931
1932
1933 [<a name="#p32" href="p32">page 32</a>] (<a href="#Contents">Contents</a>)
1934
1935      -- minimum positive floating-point number27)
1936          FLT_TRUE_MIN                                       1E-37
1937          DBL_TRUE_MIN                                       1E-37
1938          LDBL_TRUE_MIN                                      1E-37
1939      Recommended practice
1940 14   Conversion from (at least) double to decimal with DECIMAL_DIG digits and back
1941      should be the identity function.
1942 15   EXAMPLE 1 The following describes an artificial floating-point representation that meets the minimum
1943      requirements of this International Standard, and the appropriate values in a <a href="#7.7">&lt;float.h&gt;</a> header for type
1944      float:
1945                         6
1946            x = s16e    (Sum) f k 16-k ,
1947                        k=1
1948                                        -31 &lt;= e &lt;= +32
1949
1950              FLT_RADIX                                    16
1951              FLT_MANT_DIG                                  6
1952              FLT_EPSILON                     9.53674316E-07F
1953              FLT_DECIMAL_DIG                               9
1954              FLT_DIG                                       6
1955              FLT_MIN_EXP                                 -31
1956              FLT_MIN                         2.93873588E-39F
1957              FLT_MIN_10_EXP                              -38
1958              FLT_MAX_EXP                                 +32
1959              FLT_MAX                         3.40282347E+38F
1960              FLT_MAX_10_EXP                              +38
1961
1962 16   EXAMPLE 2 The following describes floating-point representations that also meet the requirements for
1963      single-precision and double-precision numbers in IEC 60559,28) and the appropriate values in a
1964      <a href="#7.7">&lt;float.h&gt;</a> header for types float and double:
1965                        24
1966            x f = s2e   (Sum) f k 2-k ,
1967                        k=1
1968                                       -125 &lt;= e &lt;= +128
1969
1970                        53
1971            x d = s2e   (Sum) f k 2-k ,
1972                        k=1
1973                                       -1021 &lt;= e &lt;= +1024
1974
1975              FLT_RADIX                                     2
1976              DECIMAL_DIG                                  17
1977              FLT_MANT_DIG                                 24
1978              FLT_EPSILON                     1.19209290E-07F // decimal constant
1979              FLT_EPSILON                            0X1P-23F // hex constant
1980              FLT_DECIMAL_DIG                               9
1981
1982
1983      27) If the presence or absence of subnormal numbers is indeterminable, then the value is intended to be a
1984          positive number no greater than the minimum normalized positive number for the type.
1985      28) The floating-point model in that standard sums powers of b from zero, so the values of the exponent
1986          limits are one less than shown here.
1987
1988 [<a name="#p33" href="p33">page 33</a>] (<a href="#Contents">Contents</a>)
1989
1990         FLT_DIG                             6
1991         FLT_MIN_EXP                      -125
1992         FLT_MIN               1.17549435E-38F               //   decimal constant
1993         FLT_MIN                     0X1P-126F               //   hex constant
1994         FLT_TRUE_MIN          1.40129846E-45F               //   decimal constant
1995         FLT_TRUE_MIN                0X1P-149F               //   hex constant
1996         FLT_HAS_SUBNORM                     1
1997         FLT_MIN_10_EXP                    -37
1998         FLT_MAX_EXP                      +128
1999         FLT_MAX               3.40282347E+38F               // decimal constant
2000         FLT_MAX               0X1.fffffeP127F               // hex constant
2001         FLT_MAX_10_EXP                    +38
2002         DBL_MANT_DIG                       53
2003         DBL_EPSILON    2.2204460492503131E-16               // decimal constant
2004         DBL_EPSILON                   0X1P-52               // hex constant
2005         DBL_DECIMAL_DIG                    17
2006         DBL_DIG                            15
2007         DBL_MIN_EXP                     -1021
2008         DBL_MIN      2.2250738585072014E-308                //   decimal constant
2009         DBL_MIN                     0X1P-1022               //   hex constant
2010         DBL_TRUE_MIN 4.9406564584124654E-324                //   decimal constant
2011         DBL_TRUE_MIN                0X1P-1074               //   hex constant
2012         DBL_HAS_SUBNORM                     1
2013         DBL_MIN_10_EXP                   -307
2014         DBL_MAX_EXP                     +1024
2015         DBL_MAX      1.7976931348623157E+308                // decimal constant
2016         DBL_MAX        0X1.fffffffffffffP1023               // hex constant
2017         DBL_MAX_10_EXP                   +308
2018 If a type wider than double were supported, then DECIMAL_DIG would be greater than 17. For
2019 example, if the widest type were to use the minimal-width IEC 60559 double-extended format (64 bits of
2020 precision), then DECIMAL_DIG would be 21.
2021
2022 Forward references:        conditional inclusion (<a href="#6.10.1">6.10.1</a>), complex arithmetic
2023 <a href="#7.3">&lt;complex.h&gt;</a> (<a href="#7.3">7.3</a>), extended multibyte and wide character utilities <a href="#7.28">&lt;wchar.h&gt;</a>
2024 (<a href="#7.28">7.28</a>), floating-point environment <a href="#7.6">&lt;fenv.h&gt;</a> (<a href="#7.6">7.6</a>), general utilities <a href="#7.22">&lt;stdlib.h&gt;</a>
2025 (<a href="#7.22">7.22</a>), input/output <a href="#7.21">&lt;stdio.h&gt;</a> (<a href="#7.21">7.21</a>), mathematics <a href="#7.12">&lt;math.h&gt;</a> (<a href="#7.12">7.12</a>).
2026
2027
2028
2029
2030 [<a name="#p34" href="p34">page 34</a>] (<a href="#Contents">Contents</a>)
2031
2032
2033 <a name="6" href="#6"><b>    6. Language</b></a>
2034 <a name="6.1" href="#6.1"><b>    6.1 Notation</b></a>
2035 1   In the syntax notation used in this clause, syntactic categories (nonterminals) are
2036     indicated by italic type, and literal words and character set members (terminals) by bold
2037     type. A colon (:) following a nonterminal introduces its definition. Alternative
2038     definitions are listed on separate lines, except when prefaced by the words ''one of''. An
2039     optional symbol is indicated by the subscript ''opt'', so that
2040              { expressionopt }
2041     indicates an optional expression enclosed in braces.
2042 2   When syntactic categories are referred to in the main text, they are not italicized and
2043     words are separated by spaces instead of hyphens.
2044 3   A summary of the language syntax is given in <a href="#A">annex A</a>.
2045 <a name="6.2" href="#6.2"><b>    6.2 Concepts</b></a>
2046 <a name="6.2.1" href="#6.2.1"><b>    6.2.1 Scopes of identifiers</b></a>
2047 1   An identifier can denote an object; a function; a tag or a member of a structure, union, or
2048     enumeration; a typedef name; a label name; a macro name; or a macro parameter. The
2049     same identifier can denote different entities at different points in the program. A member
2050     of an enumeration is called an enumeration constant. Macro names and macro
2051     parameters are not considered further here, because prior to the semantic phase of
2052     program translation any occurrences of macro names in the source file are replaced by the
2053     preprocessing token sequences that constitute their macro definitions.
2054 2   For each different entity that an identifier designates, the identifier is visible (i.e., can be
2055     used) only within a region of program text called its scope. Different entities designated
2056     by the same identifier either have different scopes, or are in different name spaces. There
2057     are four kinds of scopes: function, file, block, and function prototype. (A function
2058     prototype is a declaration of a function that declares the types of its parameters.)
2059 3   A label name is the only kind of identifier that has function scope. It can be used (in a
2060     goto statement) anywhere in the function in which it appears, and is declared implicitly
2061     by its syntactic appearance (followed by a : and a statement).
2062 4   Every other identifier has scope determined by the placement of its declaration (in a
2063     declarator or type specifier). If the declarator or type specifier that declares the identifier
2064     appears outside of any block or list of parameters, the identifier has file scope, which
2065     terminates at the end of the translation unit. If the declarator or type specifier that
2066     declares the identifier appears inside a block or within the list of parameter declarations in
2067     a function definition, the identifier has block scope, which terminates at the end of the
2068     associated block. If the declarator or type specifier that declares the identifier appears
2069
2070 [<a name="#p35" href="p35">page 35</a>] (<a href="#Contents">Contents</a>)
2071
2072     within the list of parameter declarations in a function prototype (not part of a function
2073     definition), the identifier has function prototype scope, which terminates at the end of the
2074     function declarator. If an identifier designates two different entities in the same name
2075     space, the scopes might overlap. If so, the scope of one entity (the inner scope) will end
2076     strictly before the scope of the other entity (the outer scope). Within the inner scope, the
2077     identifier designates the entity declared in the inner scope; the entity declared in the outer
2078     scope is hidden (and not visible) within the inner scope.
2079 5   Unless explicitly stated otherwise, where this International Standard uses the term
2080     ''identifier'' to refer to some entity (as opposed to the syntactic construct), it refers to the
2081     entity in the relevant name space whose declaration is visible at the point the identifier
2082     occurs.
2083 6   Two identifiers have the same scope if and only if their scopes terminate at the same
2084     point.
2085 7   Structure, union, and enumeration tags have scope that begins just after the appearance of
2086     the tag in a type specifier that declares the tag. Each enumeration constant has scope that
2087     begins just after the appearance of its defining enumerator in an enumerator list. Any
2088     other identifier has scope that begins just after the completion of its declarator.
2089 8   As a special case, a type name (which is not a declaration of an identifier) is considered to
2090     have a scope that begins just after the place within the type name where the omitted
2091     identifier would appear were it not omitted.
2092     Forward references: declarations (<a href="#6.7">6.7</a>), function calls (<a href="#6.5.2.2">6.5.2.2</a>), function definitions
2093     (<a href="#6.9.1">6.9.1</a>), identifiers (<a href="#6.4.2">6.4.2</a>), macro replacement (<a href="#6.10.3">6.10.3</a>), name spaces of identifiers (<a href="#6.2.3">6.2.3</a>),
2094     source file inclusion (<a href="#6.10.2">6.10.2</a>), statements (<a href="#6.8">6.8</a>).
2095 <a name="6.2.2" href="#6.2.2"><b>    6.2.2 Linkages of identifiers</b></a>
2096 1   An identifier declared in different scopes or in the same scope more than once can be
2097     made to refer to the same object or function by a process called linkage.29) There are
2098     three kinds of linkage: external, internal, and none.
2099 2   In the set of translation units and libraries that constitutes an entire program, each
2100     declaration of a particular identifier with external linkage denotes the same object or
2101     function. Within one translation unit, each declaration of an identifier with internal
2102     linkage denotes the same object or function. Each declaration of an identifier with no
2103     linkage denotes a unique entity.
2104 3   If the declaration of a file scope identifier for an object or a function contains the storage-
2105     class specifier static, the identifier has internal linkage.30)
2106
2107
2108
2109     29) There is no linkage between different identifiers.
2110
2111 [<a name="#p36" href="p36">page 36</a>] (<a href="#Contents">Contents</a>)
2112
2113 4   For an identifier declared with the storage-class specifier extern in a scope in which a
2114     prior declaration of that identifier is visible,31) if the prior declaration specifies internal or
2115     external linkage, the linkage of the identifier at the later declaration is the same as the
2116     linkage specified at the prior declaration. If no prior declaration is visible, or if the prior
2117     declaration specifies no linkage, then the identifier has external linkage.
2118 5   If the declaration of an identifier for a function has no storage-class specifier, its linkage
2119     is determined exactly as if it were declared with the storage-class specifier extern. If
2120     the declaration of an identifier for an object has file scope and no storage-class specifier,
2121     its linkage is external.
2122 6   The following identifiers have no linkage: an identifier declared to be anything other than
2123     an object or a function; an identifier declared to be a function parameter; a block scope
2124     identifier for an object declared without the storage-class specifier extern.
2125 7   If, within a translation unit, the same identifier appears with both internal and external
2126     linkage, the behavior is undefined.
2127     Forward references: 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>),
2128     statements (<a href="#6.8">6.8</a>).
2129 <a name="6.2.3" href="#6.2.3"><b>    6.2.3 Name spaces of identifiers</b></a>
2130 1   If more than one declaration of a particular identifier is visible at any point in a
2131     translation unit, the syntactic context disambiguates uses that refer to different entities.
2132     Thus, there are separate name spaces for various categories of identifiers, as follows:
2133     -- label names (disambiguated by the syntax of the label declaration and use);
2134     -- the tags of structures, unions, and enumerations (disambiguated by following any32)
2135       of the keywords struct, union, or enum);
2136     -- the members of structures or unions; each structure or union has a separate name
2137       space for its members (disambiguated by the type of the expression used to access the
2138       member via the . or -&gt; operator);
2139     -- all other identifiers, called ordinary identifiers (declared in ordinary declarators or as
2140       enumeration constants).
2141     Forward references: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), labeled statements (<a href="#6.8.1">6.8.1</a>),
2142     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
2143     (<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>).
2144
2145     30) A function declaration can contain the storage-class specifier static only if it is at file scope; see
2146 <a name="6.7.1" href="#6.7.1"><b>        6.7.1.</b></a>
2147     31) As specified in <a href="#6.2.1">6.2.1</a>, the later declaration might hide the prior declaration.
2148     32) There is only one name space for tags even though three are possible.
2149
2150 [<a name="#p37" href="p37">page 37</a>] (<a href="#Contents">Contents</a>)
2151
2152 <a name="6.2.4" href="#6.2.4"><b>    6.2.4 Storage durations of objects</b></a>
2153 1   An object has a storage duration that determines its lifetime. There are four storage
2154     durations: static, thread, automatic, and allocated. Allocated storage is described in
2155 <a name="7.22.3" href="#7.22.3"><b>    7.22.3.</b></a>
2156 2   The lifetime of an object is the portion of program execution during which storage is
2157     guaranteed to be reserved for it. An object exists, has a constant address,33) and retains
2158     its last-stored value throughout its lifetime.34) If an object is referred to outside of its
2159     lifetime, the behavior is undefined. The value of a pointer becomes indeterminate when
2160     the object it points to (or just past) reaches the end of its lifetime.
2161 3   An object whose identifier is declared without the storage-class specifier
2162     _Thread_local, and either with external or internal linkage or with the storage-class
2163     specifier static, has static storage duration. Its lifetime is the entire execution of the
2164     program and its stored value is initialized only once, prior to program startup.
2165 4   An object whose identifier is declared with the storage-class specifier _Thread_local
2166     has thread storage duration. Its lifetime is the entire execution of the thread for which it
2167     is created, and its stored value is initialized when the thread is started. There is a distinct
2168     object per thread, and use of the declared name in an expression refers to the object
2169     associated with the thread evaluating the expression. The result of attempting to
2170     indirectly access an object with thread storage duration from a thread other than the one
2171     with which the object is associated is implementation-defined.
2172 5   An object whose identifier is declared with no linkage and without the storage-class
2173     specifier static has automatic storage duration, as do some compound literals. The
2174     result of attempting to indirectly access an object with automatic storage duration from a
2175     thread other than the one with which the object is associated is implementation-defined.
2176 6   For such an object that does not have a variable length array type, its lifetime extends
2177     from entry into the block with which it is associated until execution of that block ends in
2178     any way. (Entering an enclosed block or calling a function suspends, but does not end,
2179     execution of the current block.) If the block is entered recursively, a new instance of the
2180     object is created each time. The initial value of the object is indeterminate. If an
2181     initialization is specified for the object, it is performed each time the declaration or
2182     compound literal is reached in the execution of the block; otherwise, the value becomes
2183     indeterminate each time the declaration is reached.
2184
2185
2186
2187     33) The term ''constant address'' means that two pointers to the object constructed at possibly different
2188         times will compare equal. The address may be different during two different executions of the same
2189         program.
2190     34) In the case of a volatile object, the last store need not be explicit in the program.
2191
2192 [<a name="#p38" href="p38">page 38</a>] (<a href="#Contents">Contents</a>)
2193
2194 7   For such an object that does have a variable length array type, its lifetime extends from
2195     the declaration of the object until execution of the program leaves the scope of the
2196     declaration.35) If the scope is entered recursively, a new instance of the object is created
2197     each time. The initial value of the object is indeterminate.
2198 8   A non-lvalue expression with structure or union type, where the structure or union
2199     contains a member with array type (including, recursively, members of all contained
2200     structures and unions) refers to an object with automatic storage duration and temporary
2201     lifetime.36) Its lifetime begins when the expression is evaluated and its initial value is the
2202     value of the expression. Its lifetime ends when the evaluation of the containing full
2203     expression or full declarator ends. Any attempt to modify an object with temporary
2204     lifetime results in undefined behavior.
2205     Forward references: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), compound literals (<a href="#6.5.2.5">6.5.2.5</a>), declarators
2206     (<a href="#6.7.6">6.7.6</a>), function calls (<a href="#6.5.2.2">6.5.2.2</a>), initialization (<a href="#6.7.9">6.7.9</a>), statements (<a href="#6.8">6.8</a>).
2207 <a name="6.2.5" href="#6.2.5"><b>    6.2.5 Types</b></a>
2208 1   The meaning of a value stored in an object or returned by a function is determined by the
2209     type of the expression used to access it. (An identifier declared to be an object is the
2210     simplest such expression; the type is specified in the declaration of the identifier.) Types
2211     are partitioned into object types (types that describe objects) and function types (types
2212     that describe functions). At various points within a translation unit an object type may be
2213     incomplete (lacking sufficient information to determine the size of objects of that type) or
2214     complete (having sufficient information).37)
2215 2   An object declared as type _Bool is large enough to store the values 0 and 1.
2216 3   An object declared as type char is large enough to store any member of the basic
2217     execution character set. If a member of the basic execution character set is stored in a
2218     char object, its value is guaranteed to be nonnegative. If any other character is stored in
2219     a char object, the resulting value is implementation-defined but shall be within the range
2220     of values that can be represented in that type.
2221 4   There are five standard signed integer types, designated as signed char, short
2222     int, int, long int, and long long int. (These and other types may be
2223     designated in several additional ways, as described in <a href="#6.7.2">6.7.2</a>.) There may also be
2224     implementation-defined extended signed integer types.38) The standard and extended
2225     signed integer types are collectively called signed integer types.39)
2226
2227     35) Leaving the innermost block containing the declaration, or jumping to a point in that block or an
2228         embedded block prior to the declaration, leaves the scope of the declaration.
2229     36) The address of such an object is taken implicitly when an array member is accessed.
2230     37) A type may be incomplete or complete throughout an entire translation unit, or it may change states at
2231         different points within a translation unit.
2232
2233 [<a name="#p39" href="p39">page 39</a>] (<a href="#Contents">Contents</a>)
2234
2235 5    An object declared as type signed char occupies the same amount of storage as a
2236      ''plain'' char object. A ''plain'' int object has the natural size suggested by the
2237      architecture of the execution environment (large enough to contain any value in the range
2238      INT_MIN to INT_MAX as defined in the header <a href="#7.10">&lt;limits.h&gt;</a>).
2239 6    For each of the signed integer types, there is a corresponding (but different) unsigned
2240      integer type (designated with the keyword unsigned) that uses the same amount of
2241      storage (including sign information) and has the same alignment requirements. The type
2242      _Bool and the unsigned integer types that correspond to the standard signed integer
2243      types are the standard unsigned integer types. The unsigned integer types that
2244      correspond to the extended signed integer types are the extended unsigned integer types.
2245      The standard and extended unsigned integer types are collectively called unsigned integer
2246      types.40)
2247 7    The standard signed integer types and standard unsigned integer types are collectively
2248      called the standard integer types, the extended signed integer types and extended
2249      unsigned integer types are collectively called the extended integer types.
2250 8    For any two integer types with the same signedness and different integer conversion rank
2251      (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
2252      subrange of the values of the other type.
2253 9    The range of nonnegative values of a signed integer type is a subrange of the
2254      corresponding unsigned integer type, and the representation of the same value in each
2255      type is the same.41) A computation involving unsigned operands can never overflow,
2256      because a result that cannot be represented by the resulting unsigned integer type is
2257      reduced modulo the number that is one greater than the largest value that can be
2258      represented by the resulting type.
2259 10   There are three real floating types, designated as float, double, and long
2260      double.42) The set of values of the type float is a subset of the set of values of the
2261      type double; the set of values of the type double is a subset of the set of values of the
2262      type long double.
2263
2264
2265      38) Implementation-defined keywords shall have the form of an identifier reserved for any use as
2266          described in <a href="#7.1.3">7.1.3</a>.
2267      39) Therefore, any statement in this Standard about signed integer types also applies to the extended
2268          signed integer types.
2269      40) Therefore, any statement in this Standard about unsigned integer types also applies to the extended
2270          unsigned integer types.
2271      41) The same representation and alignment requirements are meant to imply interchangeability as
2272          arguments to functions, return values from functions, and members of unions.
2273      42) See ''future language directions'' (<a href="#6.11.1">6.11.1</a>).
2274
2275 [<a name="#p40" href="p40">page 40</a>] (<a href="#Contents">Contents</a>)
2276
2277 11   There are three complex types, designated as float _Complex, double
2278      _Complex, and long double _Complex.43) (Complex types are a conditional
2279      feature that implementations need not support; see <a href="#6.10.8.3">6.10.8.3</a>.) The real floating and
2280      complex types are collectively called the floating types.
2281 12   For each floating type there is a corresponding real type, which is always a real floating
2282      type. For real floating types, it is the same type. For complex types, it is the type given
2283      by deleting the keyword _Complex from the type name.
2284 13   Each complex type has the same representation and alignment requirements as an array
2285      type containing exactly two elements of the corresponding real type; the first element is
2286      equal to the real part, and the second element to the imaginary part, of the complex
2287      number.
2288 14   The type char, the signed and unsigned integer types, and the floating types are
2289      collectively called the basic types. The basic types are complete object types. Even if the
2290      implementation defines two or more basic types to have the same representation, they are
2291      nevertheless different types.44)
2292 15   The three types char, signed char, and unsigned char are collectively called
2293      the character types. The implementation shall define char to have the same range,
2294      representation, and behavior as either signed char or unsigned char.45)
2295 16   An enumeration comprises a set of named integer constant values. Each distinct
2296      enumeration constitutes a different enumerated type.
2297 17   The type char, the signed and unsigned integer types, and the enumerated types are
2298      collectively called integer types. The integer and real floating types are collectively called
2299      real types.
2300 18   Integer and floating types are collectively called arithmetic types. Each arithmetic type
2301      belongs to one type domain: the real type domain comprises the real types, the complex
2302      type domain comprises the complex types.
2303 19   The void type comprises an empty set of values; it is an incomplete object type that
2304      cannot be completed.
2305
2306
2307
2308      43) A specification for imaginary types is in informative <a href="#G">annex G</a>.
2309      44) An implementation may define new keywords that provide alternative ways to designate a basic (or
2310          any other) type; this does not violate the requirement that all basic types be different.
2311          Implementation-defined keywords shall have the form of an identifier reserved for any use as
2312          described in <a href="#7.1.3">7.1.3</a>.
2313      45) 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
2314          used to distinguish the two options. Irrespective of the choice made, char is a separate type from the
2315          other two and is not compatible with either.
2316
2317 [<a name="#p41" href="p41">page 41</a>] (<a href="#Contents">Contents</a>)
2318
2319 20   Any number of derived types can be constructed from the object and function types, as
2320      follows:
2321      -- An array type describes a contiguously allocated nonempty set of objects with a
2322        particular member object type, called the element type. The element type shall be
2323        complete whenever the array type is specified. Array types are characterized by their
2324        element type and by the number of elements in the array. An array type is said to be
2325        derived from its element type, and if its element type is T , the array type is sometimes
2326        called ''array of T ''. The construction of an array type from an element type is called
2327        ''array type derivation''.
2328      -- A structure type describes a sequentially allocated nonempty set of member objects
2329        (and, in certain circumstances, an incomplete array), each of which has an optionally
2330        specified name and possibly distinct type.
2331      -- A union type describes an overlapping nonempty set of member objects, each of
2332        which has an optionally specified name and possibly distinct type.
2333      -- A function type describes a function with specified return type. A function type is
2334        characterized by its return type and the number and types of its parameters. A
2335        function type is said to be derived from its return type, and if its return type is T , the
2336        function type is sometimes called ''function returning T ''. The construction of a
2337        function type from a return type is called ''function type derivation''.
2338      -- A pointer type may be derived from a function type or an object type, called the
2339        referenced type. A pointer type describes an object whose value provides a reference
2340        to an entity of the referenced type. A pointer type derived from the referenced type T
2341        is sometimes called ''pointer to T ''. The construction of a pointer type from a
2342        referenced type is called ''pointer type derivation''. A pointer type is a complete
2343        object type.
2344      These methods of constructing derived types can be applied recursively.
2345 21   Arithmetic types and pointer types are collectively called scalar types. Array and
2346      structure types are collectively called aggregate types.46)
2347 22   An array type of unknown size is an incomplete type. It is completed, for an identifier of
2348      that type, by specifying the size in a later declaration (with internal or external linkage).
2349      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
2350      type. It is completed, for all declarations of that type, by declaring the same structure or
2351      union tag with its defining content later in the same scope.
2352
2353
2354
2355
2356      46) Note that aggregate type does not include union type because an object with union type can only
2357          contain one member at a time.
2358
2359 [<a name="#p42" href="p42">page 42</a>] (<a href="#Contents">Contents</a>)
2360
2361 23   A type has known constant size if the type is not incomplete and is not a variable length
2362      array type.
2363 24   Array, function, and pointer types are collectively called derived declarator types. A
2364      declarator type derivation from a type T is the construction of a derived declarator type
2365      from T by the application of an array-type, a function-type, or a pointer-type derivation to
2366      T.
2367 25   A type is characterized by its type category, which is either the outermost derivation of a
2368      derived type (as noted above in the construction of derived types), or the type itself if the
2369      type consists of no derived types.
2370 26   Any type so far mentioned is an unqualified type. Each unqualified type has several
2371      qualified versions of its type,47) corresponding to the combinations of one, two, or all
2372      three of the const, volatile, and restrict qualifiers. The qualified or unqualified
2373      versions of a type are distinct types that belong to the same type category and have the
2374      same representation and alignment requirements.48) A derived type is not qualified by the
2375      qualifiers (if any) of the type from which it is derived.
2376 27   Further, there is the _Atomic qualifier, which may combine with volatile and
2377      restrict. The size, representation, and alignment of an _Atomic-qualified type need
2378      not be the same as those of the corresponding unqualified type. (Atomic types are a
2379      conditional feature that implementations need not support; see <a href="#6.10.8.3">6.10.8.3</a>.)
2380 28   A pointer to void shall have the same representation and alignment requirements as a
2381      pointer to a character type.48) Similarly, pointers to qualified or unqualified versions of
2382      compatible types shall have the same representation and alignment requirements. All
2383      pointers to structure types shall have the same representation and alignment requirements
2384      as each other. All pointers to union types shall have the same representation and
2385      alignment requirements as each other. Pointers to other types need not have the same
2386      representation or alignment requirements.
2387 29   EXAMPLE 1 The type designated as ''float *'' has type ''pointer to float''. Its type category is
2388      pointer, not a floating type. The const-qualified version of this type is designated as ''float * const''
2389      whereas the type designated as ''const float *'' is not a qualified type -- its type is ''pointer to const-
2390      qualified float'' and is a pointer to a qualified type.
2391
2392 30   EXAMPLE 2 The type designated as ''struct tag (*[5])(float)'' has type ''array of pointer to
2393      function returning struct tag''. The array has length five and the function has a single parameter of type
2394      float. Its type category is array.
2395
2396      Forward references: compatible type and composite type (<a href="#6.2.7">6.2.7</a>), declarations (<a href="#6.7">6.7</a>).
2397
2398
2399
2400      47) See <a href="#6.7.3">6.7.3</a> regarding qualified array and function types.
2401      48) The same representation and alignment requirements are meant to imply interchangeability as
2402          arguments to functions, return values from functions, and members of unions.
2403
2404 [<a name="#p43" href="p43">page 43</a>] (<a href="#Contents">Contents</a>)
2405
2406 <a name="6.2.6" href="#6.2.6"><b>    6.2.6 Representations of types</b></a>
2407 <a name="6.2.6.1" href="#6.2.6.1"><b>    6.2.6.1 General</b></a>
2408 1   The representations of all types are unspecified except as stated in this subclause.
2409 2   Except for bit-fields, objects are composed of contiguous sequences of one or more bytes,
2410     the number, order, and encoding of which are either explicitly specified or
2411     implementation-defined.
2412 3   Values stored in unsigned bit-fields and objects of type unsigned char shall be
2413     represented using a pure binary notation.49)
2414 4   Values stored in non-bit-field objects of any other object type consist of n x CHAR_BIT
2415     bits, where n is the size of an object of that type, in bytes. The value may be copied into
2416     an object of type unsigned char [n] (e.g., by memcpy); the resulting set of bytes is
2417     called the object representation of the value. Values stored in bit-fields consist of m bits,
2418     where m is the size specified for the bit-field. The object representation is the set of m
2419     bits the bit-field comprises in the addressable storage unit holding it. Two values (other
2420     than NaNs) with the same object representation compare equal, but values that compare
2421     equal may have different object representations.
2422 5   Certain object representations need not represent a value of the object type. If the stored
2423     value of an object has such a representation and is read by an lvalue expression that does
2424     not have character type, the behavior is undefined. If such a representation is produced
2425     by a side effect that modifies all or any part of the object by an lvalue expression that
2426     does not have character type, the behavior is undefined.50) Such a representation is called
2427     a trap representation.
2428 6   When a value is stored in an object of structure or union type, including in a member
2429     object, the bytes of the object representation that correspond to any padding bytes take
2430     unspecified values.51) The value of a structure or union object is never a trap
2431     representation, even though the value of a member of the structure or union object may be
2432     a trap representation.
2433 7   When a value is stored in a member of an object of union type, the bytes of the object
2434     representation that do not correspond to that member but do correspond to other members
2435
2436     49) A positional representation for integers that uses the binary digits 0 and 1, in which the values
2437         represented by successive bits are additive, begin with 1, and are multiplied by successive integral
2438         powers of 2, except perhaps the bit with the highest position. (Adapted from the American National
2439         Dictionary for Information Processing Systems.) A byte contains CHAR_BIT bits, and the values of
2440         type unsigned char range from 0 to 2
2441                                                   CHAR_BIT
2442                                                             - 1.
2443     50) Thus, an automatic variable can be initialized to a trap representation without causing undefined
2444         behavior, but the value of the variable cannot be used until a proper value is stored in it.
2445     51) Thus, for example, structure assignment need not copy any padding bits.
2446
2447 [<a name="#p44" href="p44">page 44</a>] (<a href="#Contents">Contents</a>)
2448
2449     take unspecified values.
2450 8   Where an operator is applied to a value that has more than one object representation,
2451     which object representation is used shall not affect the value of the result.52) Where a
2452     value is stored in an object using a type that has more than one object representation for
2453     that value, it is unspecified which representation is used, but a trap representation shall
2454     not be generated.
2455 9   Loads and stores of objects with _Atomic-qualified types are done with
2456     memory_order_seq_cst semantics.
2457     Forward references: declarations (<a href="#6.7">6.7</a>), expressions (<a href="#6.5">6.5</a>), lvalues, arrays, and function
2458     designators (<a href="#6.3.2.1">6.3.2.1</a>), order and consistency (<a href="#7.17.3">7.17.3</a>).
2459 <a name="6.2.6.2" href="#6.2.6.2"><b>    6.2.6.2 Integer types</b></a>
2460 1   For unsigned integer types other than unsigned char, the bits of the object
2461     representation shall be divided into two groups: value bits and padding bits (there need
2462     not be any of the latter). If there are N value bits, each bit shall represent a different
2463     power of 2 between 1 and 2 N -1 , so that objects of that type shall be capable of
2464     representing values from 0 to 2 N - 1 using a pure binary representation; this shall be
2465     known as the value representation. The values of any padding bits are unspecified.53)
2466 2   For signed integer types, the bits of the object representation shall be divided into three
2467     groups: value bits, padding bits, and the sign bit. There need not be any padding bits;
2468     signed char shall not have any padding bits. There shall be exactly one sign bit.
2469     Each bit that is a value bit shall have the same value as the same bit in the object
2470     representation of the corresponding unsigned type (if there are M value bits in the signed
2471     type and N in the unsigned type, then M &lt;= N ). If the sign bit is zero, it shall not affect
2472     the resulting value. If the sign bit is one, the value shall be modified in one of the
2473     following ways:
2474     -- the corresponding value with sign bit 0 is negated (sign and magnitude);
2475     -- the sign bit has the value -(2 M ) (two's complement);
2476
2477
2478     52) It is possible for objects x and y with the same effective type T to have the same value when they are
2479         accessed as objects of type T, but to have different values in other contexts. In particular, if == is
2480         defined for type T, then x == y does not imply that memcmp(&amp;x, &amp;y, sizeof (T)) == 0.
2481         Furthermore, x == y does not necessarily imply that x and y have the same value; other operations
2482         on values of type T may distinguish between them.
2483     53) Some combinations of padding bits might generate trap representations, for example, if one padding
2484         bit is a parity bit. Regardless, no arithmetic operation on valid values can generate a trap
2485         representation other than as part of an exceptional condition such as an overflow, and this cannot occur
2486         with unsigned types. All other combinations of padding bits are alternative object representations of
2487         the value specified by the value bits.
2488
2489 [<a name="#p45" href="p45">page 45</a>] (<a href="#Contents">Contents</a>)
2490
2491     -- the sign bit has the value -(2 M - 1) (ones' complement).
2492     Which of these applies is implementation-defined, as is whether the value with sign bit 1
2493     and all value bits zero (for the first two), or with sign bit and all value bits 1 (for ones'
2494     complement), is a trap representation or a normal value. In the case of sign and
2495     magnitude and ones' complement, if this representation is a normal value it is called a
2496     negative zero.
2497 3   If the implementation supports negative zeros, they shall be generated only by:
2498     -- the &amp;, |, ^, ~, &lt;&lt;, and &gt;&gt; operators with operands that produce such a value;
2499     -- the +, -, *, /, and % operators where one operand is a negative zero and the result is
2500       zero;
2501     -- compound assignment operators based on the above cases.
2502     It is unspecified whether these cases actually generate a negative zero or a normal zero,
2503     and whether a negative zero becomes a normal zero when stored in an object.
2504 4   If the implementation does not support negative zeros, the behavior of the &amp;, |, ^, ~, &lt;&lt;,
2505     and &gt;&gt; operators with operands that would produce such a value is undefined.
2506 5   The values of any padding bits are unspecified.54) A valid (non-trap) object representation
2507     of a signed integer type where the sign bit is zero is a valid object representation of the
2508     corresponding unsigned type, and shall represent the same value. For any integer type,
2509     the object representation where all the bits are zero shall be a representation of the value
2510     zero in that type.
2511 6   The precision of an integer type is the number of bits it uses to represent values,
2512     excluding any sign and padding bits. The width of an integer type is the same but
2513     including any sign bit; thus for unsigned integer types the two values are the same, while
2514     for signed integer types the width is one greater than the precision.
2515
2516
2517
2518
2519     54) Some combinations of padding bits might generate trap representations, for example, if one padding
2520         bit is a parity bit. Regardless, no arithmetic operation on valid values can generate a trap
2521         representation other than as part of an exceptional condition such as an overflow. All other
2522         combinations of padding bits are alternative object representations of the value specified by the value
2523         bits.
2524
2525 [<a name="#p46" href="p46">page 46</a>] (<a href="#Contents">Contents</a>)
2526
2527 <a name="6.2.7" href="#6.2.7"><b>    6.2.7 Compatible type and composite type</b></a>
2528 1   Two types have compatible type if their types are the same. Additional rules for
2529     determining whether two types are compatible are described in <a href="#6.7.2">6.7.2</a> for type specifiers,
2530     in <a href="#6.7.3">6.7.3</a> for type qualifiers, and in <a href="#6.7.6">6.7.6</a> for declarators.55) Moreover, two structure,
2531     union, or enumerated types declared in separate translation units are compatible if their
2532     tags and members satisfy the following requirements: If one is declared with a tag, the
2533     other shall be declared with the same tag. If both are completed anywhere within their
2534     respective translation units, then the following additional requirements apply: there shall
2535     be a one-to-one correspondence between their members such that each pair of
2536     corresponding members are declared with compatible types, and such that if one member
2537     of a corresponding pair is declared with a name, the other member is declared with the
2538     same name. For two structures, corresponding members shall be declared in the same
2539     order. For two structures or unions, corresponding bit-fields shall have the same widths.
2540     For two enumerations, corresponding members shall have the same values.
2541 2   All declarations that refer to the same object or function shall have compatible type;
2542     otherwise, the behavior is undefined.
2543 3   A composite type can be constructed from two types that are compatible; it is a type that
2544     is compatible with both of the two types and satisfies the following conditions:
2545     -- If both types are array types, the following rules are applied:
2546           o If one type is an array of known constant size, the composite type is an array of
2547              that size.
2548           o Otherwise, if one type is a variable length array whose size is specified by an
2549              expression that is not evaluated, the behavior is undefined.
2550           o Otherwise, if one type is a variable length array whose size is specified, the
2551              composite type is a variable length array of that size.
2552           o Otherwise, if one type is a variable length array of unspecified size, the composite
2553              type is a variable length array of unspecified size.
2554           o Otherwise, both types are arrays of unknown size and the composite type is an
2555              array of unknown size.
2556         The element type of the composite type is the composite type of the two element
2557         types.
2558     -- If only one type is a function type with a parameter type list (a function prototype),
2559       the composite type is a function prototype with the parameter type list.
2560
2561
2562
2563     55) Two types need not be identical to be compatible.
2564
2565 [<a name="#p47" href="p47">page 47</a>] (<a href="#Contents">Contents</a>)
2566
2567     -- If both types are function types with parameter type lists, the type of each parameter
2568       in the composite parameter type list is the composite type of the corresponding
2569       parameters.
2570     These rules apply recursively to the types from which the two types are derived.
2571 4   For an identifier with internal or external linkage declared in a scope in which a prior
2572     declaration of that identifier is visible,56) if the prior declaration specifies internal or
2573     external linkage, the type of the identifier at the later declaration becomes the composite
2574     type.
2575     Forward references: array declarators (<a href="#6.7.6.2">6.7.6.2</a>).
2576 5   EXAMPLE        Given the following two file scope declarations:
2577              int f(int (*)(), double (*)[3]);
2578              int f(int (*)(char *), double (*)[]);
2579     The resulting composite type for the function is:
2580              int f(int (*)(char *), double (*)[3]);
2581
2582 <a name="6.2.8" href="#6.2.8"><b>    6.2.8 Alignment of objects</b></a>
2583 1   Complete object types have alignment requirements which place restrictions on the
2584     addresses at which objects of that type may be allocated. An alignment is an
2585     implementation-defined integer value representing the number of bytes between
2586     successive addresses at which a given object can be allocated. An object type imposes an
2587     alignment requirement on every object of that type: stricter alignment can be requested
2588     using the _Alignas keyword.
2589 2   A fundamental alignment is represented by an alignment less than or equal to the greatest
2590     alignment supported by the implementation in all contexts, which is equal to
2591     alignof(max_align_t).
2592 3   An extended alignment is represented by an alignment greater than
2593     alignof(max_align_t). It is implementation-defined whether any extended
2594     alignments are supported and the contexts in which they are supported. A type having an
2595     extended alignment requirement is an over-aligned type.57)
2596 4   Alignments are represented as values of the type size_t. Valid alignments include only
2597     those values returned by an alignof expression for fundamental types, plus an
2598     additional implementation-defined set of values, which may be empty. Every valid
2599     alignment value shall be an integral power of two.
2600
2601
2602     56) As specified in <a href="#6.2.1">6.2.1</a>, the later declaration might hide the prior declaration.
2603     57) Every over-aligned type is, or contains, a structure or union type with a member to which an extended
2604         alignment has been applied.
2605
2606 [<a name="#p48" href="p48">page 48</a>] (<a href="#Contents">Contents</a>)
2607
2608 5   Alignments have an order from weaker to stronger or stricter alignments. Stricter
2609     alignments have larger alignment values. An address that satisfies an alignment
2610     requirement also satisfies any weaker valid alignment requirement.
2611 6   The alignment requirement of a complete type can be queried using an alignof
2612     expression. The types char, signed char, and unsigned char shall have the
2613     weakest alignment requirement.
2614 7   Comparing alignments is meaningful and provides the obvious results:
2615     -- Two alignments are equal when their numeric values are equal.
2616     -- Two alignments are different when their numeric values are not equal.
2617     -- When an alignment is larger than another it represents a stricter alignment.
2618
2619
2620
2621
2622 [<a name="#p49" href="p49">page 49</a>] (<a href="#Contents">Contents</a>)
2623
2624 <a name="6.3" href="#6.3"><b>    6.3 Conversions</b></a>
2625 1   Several operators convert operand values from one type to another automatically. This
2626     subclause specifies the result required from such an implicit conversion, as well as those
2627     that result from a cast operation (an explicit conversion). The list in <a href="#6.3.1.8">6.3.1.8</a> summarizes
2628     the conversions performed by most ordinary operators; it is supplemented as required by
2629     the discussion of each operator in <a href="#6.5">6.5</a>.
2630 2   Conversion of an operand value to a compatible type causes no change to the value or the
2631     representation.
2632     Forward references: cast operators (<a href="#6.5.4">6.5.4</a>).
2633 <a name="6.3.1" href="#6.3.1"><b>    6.3.1 Arithmetic operands</b></a>
2634 <a name="6.3.1.1" href="#6.3.1.1"><b>    6.3.1.1 Boolean, characters, and integers</b></a>
2635 1   Every integer type has an integer conversion rank defined as follows:
2636     -- No two signed integer types shall have the same rank, even if they have the same
2637       representation.
2638     -- The rank of a signed integer type shall be greater than the rank of any signed integer
2639       type with less precision.
2640     -- The rank of long long int shall be greater than the rank of long int, which
2641       shall be greater than the rank of int, which shall be greater than the rank of short
2642       int, which shall be greater than the rank of signed char.
2643     -- The rank of any unsigned integer type shall equal the rank of the corresponding
2644       signed integer type, if any.
2645     -- The rank of any standard integer type shall be greater than the rank of any extended
2646       integer type with the same width.
2647     -- The rank of char shall equal the rank of signed char and unsigned char.
2648     -- The rank of _Bool shall be less than the rank of all other standard integer types.
2649     -- The rank of any enumerated type shall equal the rank of the compatible integer type
2650       (see <a href="#6.7.2.2">6.7.2.2</a>).
2651     -- The rank of any extended signed integer type relative to another extended signed
2652       integer type with the same precision is implementation-defined, but still subject to the
2653       other rules for determining the integer conversion rank.
2654     -- For all integer types T1, T2, and T3, if T1 has greater rank than T2 and T2 has
2655       greater rank than T3, then T1 has greater rank than T3.
2656 2   The following may be used in an expression wherever an int or unsigned int may
2657     be used:
2658
2659 [<a name="#p50" href="p50">page 50</a>] (<a href="#Contents">Contents</a>)
2660
2661     -- An object or expression with an integer type (other than int or unsigned int)
2662       whose integer conversion rank is less than or equal to the rank of int and
2663       unsigned int.
2664     -- A bit-field of type _Bool, int, signed int, or unsigned int.
2665     If an int can represent all values of the original type (as restricted by the width, for a
2666     bit-field), the value is converted to an int; otherwise, it is converted to an unsigned
2667     int. These are called the integer promotions.58) All other types are unchanged by the
2668     integer promotions.
2669 3   The integer promotions preserve value including sign. As discussed earlier, whether a
2670     ''plain'' char is treated as signed is implementation-defined.
2671     Forward references: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), structure and union specifiers
2672     (<a href="#6.7.2.1">6.7.2.1</a>).
2673 <a name="6.3.1.2" href="#6.3.1.2"><b>    6.3.1.2 Boolean type</b></a>
2674 1   When any scalar value is converted to _Bool, the result is 0 if the value compares equal
2675     to 0; otherwise, the result is 1.59)
2676 <a name="6.3.1.3" href="#6.3.1.3"><b>    6.3.1.3 Signed and unsigned integers</b></a>
2677 1   When a value with integer type is converted to another integer type other than _Bool, if
2678     the value can be represented by the new type, it is unchanged.
2679 2   Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
2680     subtracting one more than the maximum value that can be represented in the new type
2681     until the value is in the range of the new type.60)
2682 3   Otherwise, the new type is signed and the value cannot be represented in it; either the
2683     result is implementation-defined or an implementation-defined signal is raised.
2684 <a name="6.3.1.4" href="#6.3.1.4"><b>    6.3.1.4 Real floating and integer</b></a>
2685 1   When a finite value of real floating type is converted to an integer type other than _Bool,
2686     the fractional part is discarded (i.e., the value is truncated toward zero). If the value of
2687     the integral part cannot be represented by the integer type, the behavior is undefined.61)
2688
2689
2690     58) The integer promotions are applied only: as part of the usual arithmetic conversions, to certain
2691         argument expressions, to the operands of the unary +, -, and ~ operators, and to both operands of the
2692         shift operators, as specified by their respective subclauses.
2693     59) NaNs do not compare equal to 0 and thus convert to 1.
2694     60) The rules describe arithmetic on the mathematical value, not the value of a given type of expression.
2695     61) The remaindering operation performed when a value of integer type is converted to unsigned type
2696         need not be performed when a value of real floating type is converted to unsigned type. Thus, the
2697         range of portable real floating values is (-1, Utype_MAX+1).
2698
2699 [<a name="#p51" href="p51">page 51</a>] (<a href="#Contents">Contents</a>)
2700
2701 2   When a value of integer type is converted to a real floating type, if the value being
2702     converted can be represented exactly in the new type, it is unchanged. If the value being
2703     converted is in the range of values that can be represented but cannot be represented
2704     exactly, the result is either the nearest higher or nearest lower representable value, chosen
2705     in an implementation-defined manner. If the value being converted is outside the range of
2706     values that can be represented, the behavior is undefined.
2707 <a name="6.3.1.5" href="#6.3.1.5"><b>    6.3.1.5 Real floating types</b></a>
2708 1   When a float is promoted to double or long double, or a double is promoted
2709     to long double, its value is unchanged (if the source value is represented in the
2710     precision and range of its type).
2711 2   When a double is demoted to float, a long double is demoted to double or
2712     float, or a value being represented in greater precision and range than required by its
2713     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
2714     being converted can be represented exactly in the new type, it is unchanged. If the value
2715     being converted is in the range of values that can be represented but cannot be
2716     represented exactly, the result is either the nearest higher or nearest lower representable
2717     value, chosen in an implementation-defined manner. If the value being converted is
2718     outside the range of values that can be represented, the behavior is undefined.
2719 <a name="6.3.1.6" href="#6.3.1.6"><b>    6.3.1.6 Complex types</b></a>
2720 1   When a value of complex type is converted to another complex type, both the real and
2721     imaginary parts follow the conversion rules for the corresponding real types.
2722 <a name="6.3.1.7" href="#6.3.1.7"><b>    6.3.1.7 Real and complex</b></a>
2723 1   When a value of real type is converted to a complex type, the real part of the complex
2724     result value is determined by the rules of conversion to the corresponding real type and
2725     the imaginary part of the complex result value is a positive zero or an unsigned zero.
2726 2   When a value of complex type is converted to a real type, the imaginary part of the
2727     complex value is discarded and the value of the real part is converted according to the
2728     conversion rules for the corresponding real type.
2729 <a name="6.3.1.8" href="#6.3.1.8"><b>    6.3.1.8 Usual arithmetic conversions</b></a>
2730 1   Many operators that expect operands of arithmetic type cause conversions and yield result
2731     types in a similar way. The purpose is to determine a common real type for the operands
2732     and result. For the specified operands, each operand is converted, without change of type
2733     domain, to a type whose corresponding real type is the common real type. Unless
2734     explicitly stated otherwise, the common real type is also the corresponding real type of
2735     the result, whose type domain is the type domain of the operands if they are the same,
2736     and complex otherwise. This pattern is called the usual arithmetic conversions:
2737
2738
2739 [<a name="#p52" href="p52">page 52</a>] (<a href="#Contents">Contents</a>)
2740
2741           First, if the corresponding real type of either operand is long double, the other
2742           operand is converted, without change of type domain, to a type whose
2743           corresponding real type is long double.
2744           Otherwise, if the corresponding real type of either operand is double, the other
2745           operand is converted, without change of type domain, to a type whose
2746           corresponding real type is double.
2747           Otherwise, if the corresponding real type of either operand is float, the other
2748           operand is converted, without change of type domain, to a type whose
2749           corresponding real type is float.62)
2750           Otherwise, the integer promotions are performed on both operands. Then the
2751           following rules are applied to the promoted operands:
2752                  If both operands have the same type, then no further conversion is needed.
2753                  Otherwise, if both operands have signed integer types or both have unsigned
2754                  integer types, the operand with the type of lesser integer conversion rank is
2755                  converted to the type of the operand with greater rank.
2756                  Otherwise, if the operand that has unsigned integer type has rank greater or
2757                  equal to the rank of the type of the other operand, then the operand with
2758                  signed integer type is converted to the type of the operand with unsigned
2759                  integer type.
2760                  Otherwise, if the type of the operand with signed integer type can represent
2761                  all of the values of the type of the operand with unsigned integer type, then
2762                  the operand with unsigned integer type is converted to the type of the
2763                  operand with signed integer type.
2764                  Otherwise, both operands are converted to the unsigned integer type
2765                  corresponding to the type of the operand with signed integer type.
2766 2   The values of floating operands and of the results of floating expressions may be
2767     represented in greater precision and range than that required by the type; the types are not
2768     changed thereby.63)
2769
2770
2771
2772
2773     62) For example, addition of a double _Complex and a float entails just the conversion of the
2774         float operand to double (and yields a double _Complex result).
2775     63) The cast and assignment operators are still required to perform their specified conversions as
2776         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>.
2777
2778 [<a name="#p53" href="p53">page 53</a>] (<a href="#Contents">Contents</a>)
2779
2780 <a name="6.3.2" href="#6.3.2"><b>    6.3.2 Other operands</b></a>
2781 <a name="6.3.2.1" href="#6.3.2.1"><b>    6.3.2.1 Lvalues, arrays, and function designators</b></a>
2782 1   An lvalue is an expression (with an object type other than void) that potentially
2783     designates an object;64) if an lvalue does not designate an object when it is evaluated, the
2784     behavior is undefined. When an object is said to have a particular type, the type is
2785     specified by the lvalue used to designate the object. A modifiable lvalue is an lvalue that
2786     does not have array type, does not have an incomplete type, does not have a const-
2787     qualified type, and if it is a structure or union, does not have any member (including,
2788     recursively, any member or element of all contained aggregates or unions) with a const-
2789     qualified type.
2790 2   Except when it is the operand of the sizeof operator, the unary &amp; operator, the ++
2791     operator, the -- operator, or the left operand of the . operator or an assignment operator,
2792     an lvalue that does not have array type is converted to the value stored in the designated
2793     object (and is no longer an lvalue). If the lvalue has qualified type, the value has the
2794     unqualified version of the type of the lvalue; otherwise, the value has the type of the
2795     lvalue. If the lvalue has an incomplete type and does not have array type, the behavior is
2796     undefined. If the lvalue designates an object of automatic storage duration that could
2797     have been declared with the register storage class (never had its address taken), and
2798     that object is uninitialized (not declared with an initializer and no assignment to it has
2799     been performed prior to use), the behavior is undefined.
2800 3   Except when it is the operand of the sizeof operator or the unary &amp; operator, or is a
2801     string literal used to initialize an array, an expression that has type ''array of type'' is
2802     converted to an expression with type ''pointer to type'' that points to the initial element of
2803     the array object and is not an lvalue. If the array object has register storage class, the
2804     behavior is undefined.
2805 4   A function designator is an expression that has function type. Except when it is the
2806     operand of the sizeof operator65) or the unary &amp; operator, a function designator with
2807     type ''function returning type'' is converted to an expression that has type ''pointer to
2808     function returning type''.
2809     Forward references: address and indirection operators (<a href="#6.5.3.2">6.5.3.2</a>), assignment operators
2810
2811     64) The name ''lvalue'' comes originally from the assignment expression E1 = E2, in which the left
2812         operand E1 is required to be a (modifiable) lvalue. It is perhaps better considered as representing an
2813         object ''locator value''. What is sometimes called ''rvalue'' is in this International Standard described
2814         as the ''value of an expression''.
2815          An obvious example of an lvalue is an identifier of an object. As a further example, if E is a unary
2816          expression that is a pointer to an object, *E is an lvalue that designates the object to which E points.
2817     65) Because this conversion does not occur, the operand of the sizeof operator remains a function
2818         designator and violates the constraint in <a href="#6.5.3.4">6.5.3.4</a>.
2819
2820 [<a name="#p54" href="p54">page 54</a>] (<a href="#Contents">Contents</a>)
2821
2822     (<a href="#6.5.16">6.5.16</a>), common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), initialization (<a href="#6.7.9">6.7.9</a>), postfix
2823     increment and decrement operators (<a href="#6.5.2.4">6.5.2.4</a>), prefix increment and decrement operators
2824     (<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>).
2825     <a href="#6.3.2.2">6.3.2.2</a> void
2826 1   The (nonexistent) value of a void expression (an expression that has type void) shall not
2827     be used in any way, and implicit or explicit conversions (except to void) shall not be
2828     applied to such an expression. If an expression of any other type is evaluated as a void
2829     expression, its value or designator is discarded. (A void expression is evaluated for its
2830     side effects.)
2831 <a name="6.3.2.3" href="#6.3.2.3"><b>    6.3.2.3 Pointers</b></a>
2832 1   A pointer to void may be converted to or from a pointer to any object type. A pointer to
2833     any object type may be converted to a pointer to void and back again; the result shall
2834     compare equal to the original pointer.
2835 2   For any qualifier q, a pointer to a non-q-qualified type may be converted to a pointer to
2836     the q-qualified version of the type; the values stored in the original and converted pointers
2837     shall compare equal.
2838 3   An integer constant expression with the value 0, or such an expression cast to type
2839     void *, is called a null pointer constant.66) If a null pointer constant is converted to a
2840     pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal
2841     to a pointer to any object or function.
2842 4   Conversion of a null pointer to another pointer type yields a null pointer of that type.
2843     Any two null pointers shall compare equal.
2844 5   An integer may be converted to any pointer type. Except as previously specified, the
2845     result is implementation-defined, might not be correctly aligned, might not point to an
2846     entity of the referenced type, and might be a trap representation.67)
2847 6   Any pointer type may be converted to an integer type. Except as previously specified, the
2848     result is implementation-defined. If the result cannot be represented in the integer type,
2849     the behavior is undefined. The result need not be in the range of values of any integer
2850     type.
2851 7   A pointer to an object type may be converted to a pointer to a different object type. If the
2852     resulting pointer is not correctly aligned68) for the referenced type, the behavior is
2853     undefined. Otherwise, when converted back again, the result shall compare equal to the
2854
2855
2856     66) The macro NULL is defined in <a href="#7.19">&lt;stddef.h&gt;</a> (and other headers) as a null pointer constant; see <a href="#7.19">7.19</a>.
2857     67) The mapping functions for converting a pointer to an integer or an integer to a pointer are intended to
2858         be consistent with the addressing structure of the execution environment.
2859
2860 [<a name="#p55" href="p55">page 55</a>] (<a href="#Contents">Contents</a>)
2861
2862     original pointer. When a pointer to an object is converted to a pointer to a character type,
2863     the result points to the lowest addressed byte of the object. Successive increments of the
2864     result, up to the size of the object, yield pointers to the remaining bytes of the object.
2865 8   A pointer to a function of one type may be converted to a pointer to a function of another
2866     type and back again; the result shall compare equal to the original pointer. If a converted
2867     pointer is used to call a function whose type is not compatible with the referenced type,
2868     the behavior is undefined.
2869     Forward references: cast operators (<a href="#6.5.4">6.5.4</a>), equality operators (<a href="#6.5.9">6.5.9</a>), integer types
2870     capable of holding object pointers (<a href="#7.20.1.4">7.20.1.4</a>), simple assignment (<a href="#6.5.16.1">6.5.16.1</a>).
2871
2872
2873
2874
2875     68) In general, the concept ''correctly aligned'' is transitive: if a pointer to type A is correctly aligned for a
2876         pointer to type B, which in turn is correctly aligned for a pointer to type C, then a pointer to type A is
2877         correctly aligned for a pointer to type C.
2878
2879 [<a name="#p56" href="p56">page 56</a>] (<a href="#Contents">Contents</a>)
2880
2881 <a name="6.4" href="#6.4"><b>    6.4 Lexical elements</b></a>
2882     Syntax
2883 1            token:
2884                       keyword
2885                       identifier
2886                       constant
2887                       string-literal
2888                       punctuator
2889              preprocessing-token:
2890                     header-name
2891                     identifier
2892                     pp-number
2893                     character-constant
2894                     string-literal
2895                     punctuator
2896                     each non-white-space character that cannot be one of the above
2897     Constraints
2898 2   Each preprocessing token that is converted to a token shall have the lexical form of a
2899     keyword, an identifier, a constant, a string literal, or a punctuator.
2900     Semantics
2901 3   A token is the minimal lexical element of the language in translation phases 7 and 8. The
2902     categories of tokens are: keywords, identifiers, constants, string literals, and punctuators.
2903     A preprocessing token is the minimal lexical element of the language in translation
2904     phases 3 through 6. The categories of preprocessing tokens are: header names,
2905     identifiers, preprocessing numbers, character constants, string literals, punctuators, and
2906     single non-white-space characters that do not lexically match the other preprocessing
2907     token categories.69) If a ' or a " character matches the last category, the behavior is
2908     undefined. Preprocessing tokens can be separated by white space; this consists of
2909     comments (described later), or white-space characters (space, horizontal tab, new-line,
2910     vertical tab, and form-feed), or both. As described in <a href="#6.10">6.10</a>, in certain circumstances
2911     during translation phase 4, white space (or the absence thereof) serves as more than
2912     preprocessing token separation. White space may appear within a preprocessing token
2913     only as part of a header name or between the quotation characters in a character constant
2914     or string literal.
2915
2916
2917
2918     69) 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
2919         occur in source files.
2920
2921 [<a name="#p57" href="p57">page 57</a>] (<a href="#Contents">Contents</a>)
2922
2923 4   If the input stream has been parsed into preprocessing tokens up to a given character, the
2924     next preprocessing token is the longest sequence of characters that could constitute a
2925     preprocessing token. There is one exception to this rule: header name preprocessing
2926     tokens are recognized only within #include preprocessing directives and in
2927     implementation-defined locations within #pragma directives. In such contexts, a
2928     sequence of characters that could be either a header name or a string literal is recognized
2929     as the former.
2930 5   EXAMPLE 1 The program fragment 1Ex is parsed as a preprocessing number token (one that is not a
2931     valid floating or integer constant token), even though a parse as the pair of preprocessing tokens 1 and Ex
2932     might produce a valid expression (for example, if Ex were a macro defined as +1). Similarly, the program
2933     fragment 1E1 is parsed as a preprocessing number (one that is a valid floating constant token), whether or
2934     not E is a macro name.
2935
2936 6   EXAMPLE 2 The program fragment x+++++y is parsed as x ++ ++ + y, which violates a constraint on
2937     increment operators, even though the parse x ++ + ++ y might yield a correct expression.
2938
2939     Forward references: 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>),
2940     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
2941     increment and decrement operators (<a href="#6.5.2.4">6.5.2.4</a>), prefix increment and decrement operators
2942     (<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
2943     (<a href="#6.4.5">6.4.5</a>).
2944 <a name="6.4.1" href="#6.4.1"><b>    6.4.1 Keywords</b></a>
2945     Syntax
2946 1            keyword: one of
2947                    alignof                         goto                         union
2948                    auto                            if                           unsigned
2949                    break                           inline                       void
2950                    case                            int                          volatile
2951                    char                            long                         while
2952                    const                           register                     _Alignas
2953                    continue                        restrict                     _Atomic
2954                    default                         return                       _Bool
2955                    do                              short                        _Complex
2956                    double                          signed                       _Generic
2957                    else                            sizeof                       _Imaginary
2958                    enum                            static                       _Noreturn
2959                    extern                          struct                       _Static_assert
2960                    float                           switch                       _Thread_local
2961                    for                             typedef
2962     Semantics
2963 2   The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as
2964     keywords, and shall not be used otherwise. The keyword _Imaginary is reserved for
2965 [<a name="#p58" href="p58">page 58</a>] (<a href="#Contents">Contents</a>)
2966
2967     specifying imaginary types.70)
2968 <a name="6.4.2" href="#6.4.2"><b>    6.4.2 Identifiers</b></a>
2969 <a name="6.4.2.1" href="#6.4.2.1"><b>    6.4.2.1 General</b></a>
2970     Syntax
2971 1            identifier:
2972                     identifier-nondigit
2973                     identifier identifier-nondigit
2974                     identifier digit
2975              identifier-nondigit:
2976                     nondigit
2977                     universal-character-name
2978                     other implementation-defined characters
2979              nondigit: one of
2980                     _ a b            c    d    e    f     g    h    i    j     k    l    m
2981                         n o          p    q    r    s     t    u    v    w     x    y    z
2982                         A B          C    D    E    F     G    H    I    J     K    L    M
2983                         N O          P    Q    R    S     T    U    V    W     X    Y    Z
2984              digit: one of
2985                     0 1        2     3    4    5    6     7    8    9
2986     Semantics
2987 2   An identifier is a sequence of nondigit characters (including the underscore _, the
2988     lowercase and uppercase Latin letters, and other characters) and digits, which designates
2989     one or more entities as described in <a href="#6.2.1">6.2.1</a>. Lowercase and uppercase letters are distinct.
2990     There is no specific limit on the maximum length of an identifier.
2991 3   Each universal character name in an identifier shall designate a character whose encoding
2992     in ISO/IEC 10646 falls into one of the ranges specified in <a href="#D">annex D</a>.71) The initial
2993     character shall not be a universal character name designating a digit. An implementation
2994     may allow multibyte characters that are not part of the basic source character set to
2995     appear in identifiers; which characters and their correspondence to universal character
2996     names is implementation-defined.
2997
2998
2999
3000     70) One possible specification for imaginary types appears in <a href="#G">annex G</a>.
3001     71) On systems in which linkers cannot accept extended characters, an encoding of the universal character
3002         name may be used in forming valid external identifiers. For example, some otherwise unused
3003         character or sequence of characters may be used to encode the \u in a universal character name.
3004         Extended characters may produce a long external identifier.
3005
3006 [<a name="#p59" href="p59">page 59</a>] (<a href="#Contents">Contents</a>)
3007
3008 4   When preprocessing tokens are converted to tokens during translation phase 7, if a
3009     preprocessing token could be converted to either a keyword or an identifier, it is converted
3010     to a keyword.
3011     Implementation limits
3012 5   As discussed in <a href="#5.2.4.1">5.2.4.1</a>, an implementation may limit the number of significant initial
3013     characters in an identifier; the limit for an external name (an identifier that has external
3014     linkage) may be more restrictive than that for an internal name (a macro name or an
3015     identifier that does not have external linkage). The number of significant characters in an
3016     identifier is implementation-defined.
3017 6   Any identifiers that differ in a significant character are different identifiers. If two
3018     identifiers differ only in nonsignificant characters, the behavior is undefined.
3019     Forward references: universal character names (<a href="#6.4.3">6.4.3</a>), macro replacement (<a href="#6.10.3">6.10.3</a>).
3020 <a name="6.4.2.2" href="#6.4.2.2"><b>    6.4.2.2 Predefined identifiers</b></a>
3021     Semantics
3022 1   The identifier __func__ shall be implicitly declared by the translator as if,
3023     immediately following the opening brace of each function definition, the declaration
3024              static const char __func__[] = "function-name";
3025     appeared, where function-name is the name of the lexically-enclosing function.72)
3026 2   This name is encoded as if the implicit declaration had been written in the source
3027     character set and then translated into the execution character set as indicated in translation
3028     phase 5.
3029 3   EXAMPLE        Consider the code fragment:
3030              #include <a href="#7.21">&lt;stdio.h&gt;</a>
3031              void myfunc(void)
3032              {
3033                    printf("%s\n", __func__);
3034                    /* ... */
3035              }
3036     Each time the function is called, it will print to the standard output stream:
3037              myfunc
3038
3039     Forward references: function definitions (<a href="#6.9.1">6.9.1</a>).
3040
3041
3042
3043
3044     72) Since the name __func__ is reserved for any use by the implementation (<a href="#7.1.3">7.1.3</a>), if any other
3045         identifier is explicitly declared using the name __func__, the behavior is undefined.
3046
3047 [<a name="#p60" href="p60">page 60</a>] (<a href="#Contents">Contents</a>)
3048
3049 <a name="6.4.3" href="#6.4.3"><b>    6.4.3 Universal character names</b></a>
3050     Syntax
3051 1            universal-character-name:
3052                     \u hex-quad
3053                     \U hex-quad hex-quad
3054              hex-quad:
3055                     hexadecimal-digit hexadecimal-digit
3056                                  hexadecimal-digit hexadecimal-digit
3057     Constraints
3058 2   A universal character name shall not specify a character whose short identifier is less than
3059     00A0 other than 0024 ($), 0040 (@), or 0060 ('), nor one in the range D800 through
3060     DFFF inclusive.73)
3061     Description
3062 3   Universal character names may be used in identifiers, character constants, and string
3063     literals to designate characters that are not in the basic character set.
3064     Semantics
3065 4   The universal character name \Unnnnnnnn designates the character whose eight-digit
3066     short identifier (as specified by ISO/IEC 10646) is nnnnnnnn.74) Similarly, the universal
3067     character name \unnnn designates the character whose four-digit short identifier is nnnn
3068     (and whose eight-digit short identifier is 0000nnnn).
3069
3070
3071
3072
3073     73) The disallowed characters are the characters in the basic character set and the code positions reserved
3074         by ISO/IEC 10646 for control characters, the character DELETE, and the S-zone (reserved for use by
3075         UTF-16).
3076
3077     74) Short identifiers for characters were first specified in ISO/IEC 10646-1/AMD9:1997.
3078
3079 [<a name="#p61" href="p61">page 61</a>] (<a href="#Contents">Contents</a>)
3080
3081 <a name="6.4.4" href="#6.4.4"><b>    6.4.4 Constants</b></a>
3082     Syntax
3083 1            constant:
3084                     integer-constant
3085                     floating-constant
3086                     enumeration-constant
3087                     character-constant
3088     Constraints
3089 2   Each constant shall have a type and the value of a constant shall be in the range of
3090     representable values for its type.
3091     Semantics
3092 3   Each constant has a type, determined by its form and value, as detailed later.
3093 <a name="6.4.4.1" href="#6.4.4.1"><b>    6.4.4.1 Integer constants</b></a>
3094     Syntax
3095 1            integer-constant:
3096                      decimal-constant integer-suffixopt
3097                      octal-constant integer-suffixopt
3098                      hexadecimal-constant integer-suffixopt
3099              decimal-constant:
3100                    nonzero-digit
3101                    decimal-constant digit
3102              octal-constant:
3103                     0
3104                     octal-constant octal-digit
3105              hexadecimal-constant:
3106                    hexadecimal-prefix hexadecimal-digit
3107                    hexadecimal-constant hexadecimal-digit
3108              hexadecimal-prefix: one of
3109                    0x 0X
3110              nonzero-digit: one of
3111                     1 2 3 4          5     6     7   8    9
3112              octal-digit: one of
3113                      0 1 2 3         4     5     6   7
3114
3115
3116
3117
3118 [<a name="#p62" href="p62">page 62</a>] (<a href="#Contents">Contents</a>)
3119
3120             hexadecimal-digit:    one of
3121                   0 1 2            3 4     5    6   7     8   9
3122                   a b c            d e     f
3123                   A B C            D E     F
3124             integer-suffix:
3125                     unsigned-suffix long-suffixopt
3126                     unsigned-suffix long-long-suffix
3127                     long-suffix unsigned-suffixopt
3128                     long-long-suffix unsigned-suffixopt
3129             unsigned-suffix: one of
3130                    u U
3131             long-suffix: one of
3132                    l L
3133             long-long-suffix: one of
3134                    ll LL
3135     Description
3136 2   An integer constant begins with a digit, but has no period or exponent part. It may have a
3137     prefix that specifies its base and a suffix that specifies its type.
3138 3   A decimal constant begins with a nonzero digit and consists of a sequence of decimal
3139     digits. An octal constant consists of the prefix 0 optionally followed by a sequence of the
3140     digits 0 through 7 only. A hexadecimal constant consists of the prefix 0x or 0X followed
3141     by a sequence of the decimal digits and the letters a (or A) through f (or F) with values
3142     10 through 15 respectively.
3143     Semantics
3144 4   The value of a decimal constant is computed base 10; that of an octal constant, base 8;
3145     that of a hexadecimal constant, base 16. The lexically first digit is the most significant.
3146 5   The type of an integer constant is the first of the corresponding list in which its value can
3147     be represented.
3148
3149
3150
3151
3152 [<a name="#p63" href="p63">page 63</a>] (<a href="#Contents">Contents</a>)
3153
3154                                                                      Octal or Hexadecimal
3155     Suffix                       Decimal Constant                           Constant
3156
3157     none                int                                    int
3158                         long int                               unsigned int
3159                         long long int                          long int
3160                                                                unsigned long int
3161                                                                long long int
3162                                                                unsigned long long int
3163
3164     u or U              unsigned int                           unsigned int
3165                         unsigned long int                      unsigned long int
3166                         unsigned long long int                 unsigned long long int
3167
3168     l or L              long int                               long int
3169                         long long int                          unsigned long int
3170                                                                long long int
3171                                                                unsigned long long int
3172
3173     Both u or U         unsigned long int                      unsigned long int
3174     and l or L          unsigned long long int                 unsigned long long int
3175
3176     ll or LL            long long int                          long long int
3177                                                                unsigned long long int
3178
3179     Both u or U         unsigned long long int                 unsigned long long int
3180     and ll or LL
3181 6   If an integer constant cannot be represented by any type in its list, it may have an
3182     extended integer type, if the extended integer type can represent its value. If all of the
3183     types in the list for the constant are signed, the extended integer type shall be signed. If
3184     all of the types in the list for the constant are unsigned, the extended integer type shall be
3185     unsigned. If the list contains both signed and unsigned types, the extended integer type
3186     may be signed or unsigned. If an integer constant cannot be represented by any type in
3187     its list and has no extended integer type, then the integer constant has no type.
3188
3189
3190
3191
3192 [<a name="#p64" href="p64">page 64</a>] (<a href="#Contents">Contents</a>)
3193
3194 <a name="6.4.4.2" href="#6.4.4.2"><b>    6.4.4.2 Floating constants</b></a>
3195     Syntax
3196 1            floating-constant:
3197                     decimal-floating-constant
3198                     hexadecimal-floating-constant
3199              decimal-floating-constant:
3200                    fractional-constant exponent-partopt floating-suffixopt
3201                    digit-sequence exponent-part floating-suffixopt
3202              hexadecimal-floating-constant:
3203                    hexadecimal-prefix hexadecimal-fractional-constant
3204                                   binary-exponent-part floating-suffixopt
3205                    hexadecimal-prefix hexadecimal-digit-sequence
3206                                   binary-exponent-part floating-suffixopt
3207              fractional-constant:
3208                      digit-sequenceopt . digit-sequence
3209                      digit-sequence .
3210              exponent-part:
3211                    e signopt digit-sequence
3212                    E signopt digit-sequence
3213              sign: one of
3214                     + -
3215              digit-sequence:
3216                      digit
3217                      digit-sequence digit
3218              hexadecimal-fractional-constant:
3219                    hexadecimal-digit-sequenceopt .
3220                                   hexadecimal-digit-sequence
3221                    hexadecimal-digit-sequence .
3222              binary-exponent-part:
3223                     p signopt digit-sequence
3224                     P signopt digit-sequence
3225              hexadecimal-digit-sequence:
3226                    hexadecimal-digit
3227                    hexadecimal-digit-sequence hexadecimal-digit
3228              floating-suffix: one of
3229                     f l F L
3230
3231 [<a name="#p65" href="p65">page 65</a>] (<a href="#Contents">Contents</a>)
3232
3233     Description
3234 2   A floating constant has a significand part that may be followed by an exponent part and a
3235     suffix that specifies its type. The components of the significand part may include a digit
3236     sequence representing the whole-number part, followed by a period (.), followed by a
3237     digit sequence representing the fraction part. The components of the exponent part are an
3238     e, E, p, or P followed by an exponent consisting of an optionally signed digit sequence.
3239     Either the whole-number part or the fraction part has to be present; for decimal floating
3240     constants, either the period or the exponent part has to be present.
3241     Semantics
3242 3   The significand part is interpreted as a (decimal or hexadecimal) rational number; the
3243     digit sequence in the exponent part is interpreted as a decimal integer. For decimal
3244     floating constants, the exponent indicates the power of 10 by which the significand part is
3245     to be scaled. For hexadecimal floating constants, the exponent indicates the power of 2
3246     by which the significand part is to be scaled. For decimal floating constants, and also for
3247     hexadecimal floating constants when FLT_RADIX is not a power of 2, the result is either
3248     the nearest representable value, or the larger or smaller representable value immediately
3249     adjacent to the nearest representable value, chosen in an implementation-defined manner.
3250     For hexadecimal floating constants when FLT_RADIX is a power of 2, the result is
3251     correctly rounded.
3252 4   An unsuffixed floating constant has type double. If suffixed by the letter f or F, it has
3253     type float. If suffixed by the letter l or L, it has type long double.
3254 5   Floating constants are converted to internal format as if at translation-time. The
3255     conversion of a floating constant shall not raise an exceptional condition or a floating-
3256     point exception at execution time.
3257     Recommended practice
3258 6   The implementation should produce a diagnostic message if a hexadecimal constant
3259     cannot be represented exactly in its evaluation format; the implementation should then
3260     proceed with the translation of the program.
3261 7   The translation-time conversion of floating constants should match the execution-time
3262     conversion of character strings by library functions, such as strtod, given matching
3263     inputs suitable for both conversions, the same result format, and default execution-time
3264     rounding.75)
3265
3266
3267
3268
3269     75) The specification for the library functions recommends more accurate conversion than required for
3270         floating constants (see <a href="#7.22.1.3">7.22.1.3</a>).
3271
3272 [<a name="#p66" href="p66">page 66</a>] (<a href="#Contents">Contents</a>)
3273
3274 <a name="6.4.4.3" href="#6.4.4.3"><b>    6.4.4.3 Enumeration constants</b></a>
3275     Syntax
3276 1            enumeration-constant:
3277                    identifier
3278     Semantics
3279 2   An identifier declared as an enumeration constant has type int.
3280     Forward references: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>).
3281 <a name="6.4.4.4" href="#6.4.4.4"><b>    6.4.4.4 Character constants</b></a>
3282     Syntax
3283 1            character-constant:
3284                     ' c-char-sequence '
3285                     L' c-char-sequence '
3286                     u' c-char-sequence '
3287                     U' c-char-sequence '
3288              c-char-sequence:
3289                     c-char
3290                     c-char-sequence c-char
3291              c-char:
3292                        any member of the source character set except
3293                                     the single-quote ', backslash \, or new-line character
3294                        escape-sequence
3295              escape-sequence:
3296                     simple-escape-sequence
3297                     octal-escape-sequence
3298                     hexadecimal-escape-sequence
3299                     universal-character-name
3300              simple-escape-sequence: one of
3301                     \' \" \? \\
3302                     \a \b \f \n \r                  \t    \v
3303              octal-escape-sequence:
3304                      \ octal-digit
3305                      \ octal-digit octal-digit
3306                      \ octal-digit octal-digit octal-digit
3307
3308
3309
3310
3311 [<a name="#p67" href="p67">page 67</a>] (<a href="#Contents">Contents</a>)
3312
3313            hexadecimal-escape-sequence:
3314                  \x hexadecimal-digit
3315                  hexadecimal-escape-sequence hexadecimal-digit
3316     Description
3317 2   An integer character constant is a sequence of one or more multibyte characters enclosed
3318     in single-quotes, as in 'x'. A wide character constant is the same, except prefixed by the
3319     letter L, u, or U. With a few exceptions detailed later, the elements of the sequence are
3320     any members of the source character set; they are mapped in an implementation-defined
3321     manner to members of the execution character set.
3322 3   The single-quote ', the double-quote ", the question-mark ?, the backslash \, and
3323     arbitrary integer values are representable according to the following table of escape
3324     sequences:
3325           single quote '            \'
3326           double quote "            \"
3327           question mark ?           \?
3328           backslash \               \\
3329           octal character           \octal digits
3330           hexadecimal character     \x hexadecimal digits
3331 4   The double-quote " and question-mark ? are representable either by themselves or by the
3332     escape sequences \" and \?, respectively, but the single-quote ' and the backslash \
3333     shall be represented, respectively, by the escape sequences \' and \\.
3334 5   The octal digits that follow the backslash in an octal escape sequence are taken to be part
3335     of the construction of a single character for an integer character constant or of a single
3336     wide character for a wide character constant. The numerical value of the octal integer so
3337     formed specifies the value of the desired character or wide character.
3338 6   The hexadecimal digits that follow the backslash and the letter x in a hexadecimal escape
3339     sequence are taken to be part of the construction of a single character for an integer
3340     character constant or of a single wide character for a wide character constant. The
3341     numerical value of the hexadecimal integer so formed specifies the value of the desired
3342     character or wide character.
3343 7   Each octal or hexadecimal escape sequence is the longest sequence of characters that can
3344     constitute the escape sequence.
3345 8   In addition, characters not in the basic character set are representable by universal
3346     character names and certain nongraphic characters are representable by escape sequences
3347     consisting of the backslash \ followed by a lowercase letter: \a, \b, \f, \n, \r, \t,
3348     and \v.76)
3349
3350
3351
3352 [<a name="#p68" href="p68">page 68</a>] (<a href="#Contents">Contents</a>)
3353
3354      Constraints
3355 9    The value of an octal or hexadecimal escape sequence shall be in the range of
3356      representable values for the corresponding type:
3357             Prefix      Corresponding Type
3358             none       unsigned char
3359             L          the unsigned type corresponding to wchar_t
3360             u          char16_t
3361             U          char32_t
3362      Semantics
3363 10   An integer character constant has type int. The value of an integer character constant
3364      containing a single character that maps to a single-byte execution character is the
3365      numerical value of the representation of the mapped character interpreted as an integer.
3366      The value of an integer character constant containing more than one character (e.g.,
3367      'ab'), or containing a character or escape sequence that does not map to a single-byte
3368      execution character, is implementation-defined. If an integer character constant contains
3369      a single character or escape sequence, its value is the one that results when an object with
3370      type char whose value is that of the single character or escape sequence is converted to
3371      type int.
3372 11   A wide character constant prefixed by the letter L has type wchar_t, an integer type
3373      defined in the <a href="#7.19">&lt;stddef.h&gt;</a> header; a wide character constant prefixed by the letter u or
3374      U has type char16_t or char32_t, respectively, unsigned integer types defined in the
3375      <a href="#7.27">&lt;uchar.h&gt;</a> header. The value of a wide character constant containing a single
3376      multibyte character that maps to a single member of the extended execution character set
3377      is the wide character corresponding to that multibyte character, as defined by the
3378      mbtowc, mbrtoc16, or mbrtoc32 function as appropriate for its type, with an
3379      implementation-defined current locale. The value of a wide character constant containing
3380      more than one multibyte character or a single multibyte character that maps to multiple
3381      members of the extended execution character set, or containing a multibyte character or
3382      escape sequence not represented in the extended execution character set, is
3383      implementation-defined.
3384 12   EXAMPLE 1      The construction '\0' is commonly used to represent the null character.
3385
3386 13   EXAMPLE 2 Consider implementations that use two's-complement representation for integers and eight
3387      bits for objects that have type char. In an implementation in which type char has the same range of
3388      values as signed char, the integer character constant '\xFF' has the value -1; if type char has the
3389      same range of values as unsigned char, the character constant '\xFF' has the value +255.
3390
3391
3392
3393
3394      76) The semantics of these characters were discussed in <a href="#5.2.2">5.2.2</a>. If any other character follows a backslash,
3395          the result is not a token and a diagnostic is required. See ''future language directions'' (<a href="#6.11.4">6.11.4</a>).
3396
3397 [<a name="#p69" href="p69">page 69</a>] (<a href="#Contents">Contents</a>)
3398
3399 14   EXAMPLE 3 Even if eight bits are used for objects that have type char, the construction '\x123'
3400      specifies an integer character constant containing only one character, since a hexadecimal escape sequence
3401      is terminated only by a non-hexadecimal character. To specify an integer character constant containing the
3402      two characters whose values are '\x12' and '3', the construction '\0223' may be used, since an octal
3403      escape sequence is terminated after three octal digits. (The value of this two-character integer character
3404      constant is implementation-defined.)
3405
3406 15   EXAMPLE 4 Even if 12 or more bits are used for objects that have type wchar_t, the construction
3407      L'\1234' specifies the implementation-defined value that results from the combination of the values
3408      0123 and '4'.
3409
3410      Forward references: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), the mbtowc function
3411      (<a href="#7.22.7.2">7.22.7.2</a>), Unicode utilities <a href="#7.27">&lt;uchar.h&gt;</a> (<a href="#7.27">7.27</a>).
3412 <a name="6.4.5" href="#6.4.5"><b>     6.4.5 String literals</b></a>
3413      Syntax
3414 1             string-literal:
3415                       encoding-prefixopt " s-char-sequenceopt "
3416               encoding-prefix:
3417                      u8
3418                      u
3419                      U
3420                      L
3421               s-char-sequence:
3422                      s-char
3423                      s-char-sequence s-char
3424               s-char:
3425                         any member of the source character set except
3426                                      the double-quote ", backslash \, or new-line character
3427                         escape-sequence
3428      Constraints
3429 2    A sequence of adjacent string literal tokens shall not include both a wide string literal and
3430      a UTF-8 string literal.
3431      Description
3432 3    A character string literal is a sequence of zero or more multibyte characters enclosed in
3433      double-quotes, as in "xyz". A UTF-8 string literal is the same, except prefixed by u8.
3434      A wide string literal is the same, except prefixed by the letter L, u, or U.
3435 4    The same considerations apply to each element of the sequence in a string literal as if it
3436      were in an integer character constant (for a character or UTF-8 string literal) or a wide
3437      character constant (for a wide string literal), except that the single-quote ' is
3438      representable either by itself or by the escape sequence \', but the double-quote " shall
3439 [<a name="#p70" href="p70">page 70</a>] (<a href="#Contents">Contents</a>)
3440
3441     be represented by the escape sequence \".
3442     Semantics
3443 5   In translation phase 6, the multibyte character sequences specified by any sequence of
3444     adjacent character and identically-prefixed string literal tokens are concatenated into a
3445     single multibyte character sequence. If any of the tokens has an encoding prefix, the
3446     resulting multibyte character sequence is treated as having the same prefix; otherwise, it
3447     is treated as a character string literal. Whether differently-prefixed wide string literal
3448     tokens can be concatenated and, if so, the treatment of the resulting multibyte character
3449     sequence are implementation-defined.
3450 6   In translation phase 7, a byte or code of value zero is appended to each multibyte
3451     character sequence that results from a string literal or literals.77) The multibyte character
3452     sequence is then used to initialize an array of static storage duration and length just
3453     sufficient to contain the sequence. For character string literals, the array elements have
3454     type char, and are initialized with the individual bytes of the multibyte character
3455     sequence. For UTF-8 string literals, the array elements have type char, and are
3456     initialized with the characters of the multibyte character sequence, as encoded in UTF-8.
3457     For wide string literals prefixed by the letter L, the array elements have type wchar_t
3458     and are initialized with the sequence of wide characters corresponding to the multibyte
3459     character sequence, as defined by the mbstowcs function with an implementation-
3460     defined current locale. For wide string literals prefixed by the letter u or U, the array
3461     elements have type char16_t or char32_t, respectively, and are initialized with the
3462     sequence of wide characters corresponding to the multibyte character sequence, as
3463     defined by successive calls to the mbrtoc16, or mbrtoc32 function as appropriate for
3464     its type, with an implementation-defined current locale. The value of a string literal
3465     containing a multibyte character or escape sequence not represented in the execution
3466     character set is implementation-defined.
3467 7   It is unspecified whether these arrays are distinct provided their elements have the
3468     appropriate values. If the program attempts to modify such an array, the behavior is
3469     undefined.
3470 8   EXAMPLE 1      This pair of adjacent character string literals
3471              "\x12" "3"
3472     produces a single character string literal containing the two characters whose values are '\x12' and '3',
3473     because escape sequences are converted into single members of the execution character set just prior to
3474     adjacent string literal concatenation.
3475
3476 9   EXAMPLE 2      Each of the sequences of adjacent string literal tokens
3477
3478
3479
3480     77) A string literal need not be a string (see <a href="#7.1.1">7.1.1</a>), because a null character may be embedded in it by a
3481         \0 escape sequence.
3482
3483 [<a name="#p71" href="p71">page 71</a>] (<a href="#Contents">Contents</a>)
3484
3485              "a" "b" L"c"
3486              "a" L"b" "c"
3487              L"a" "b" L"c"
3488              L"a" L"b" L"c"
3489     is equivalent to the string literal
3490              L"abc"
3491     Likewise, each of the sequences
3492              "a" "b" u"c"
3493              "a" u"b" "c"
3494              u"a" "b" u"c"
3495              u"a" u"b" u"c"
3496     is equivalent to
3497              u"abc"
3498
3499     Forward references: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), the mbstowcs
3500     function (<a href="#7.22.8.1">7.22.8.1</a>), Unicode utilities <a href="#7.27">&lt;uchar.h&gt;</a> (<a href="#7.27">7.27</a>).
3501 <a name="6.4.6" href="#6.4.6"><b>    6.4.6 Punctuators</b></a>
3502     Syntax
3503 1            punctuator: one of
3504                     [ ] ( ) { } . -&gt;
3505                     ++ -- &amp; * + - ~ !
3506                     / % &lt;&lt; &gt;&gt; &lt; &gt; &lt;= &gt;=                              ==    !=      ^    |   &amp;&amp;   ||
3507                     ? : ; ...
3508                     = *= /= %= += -= &lt;&lt;=                             &gt;&gt;=      &amp;=       ^=   |=
3509                     , # ##
3510                     &lt;: :&gt; &lt;% %&gt; %: %:%:
3511     Semantics
3512 2   A punctuator is a symbol that has independent syntactic and semantic significance.
3513     Depending on context, it may specify an operation to be performed (which in turn may
3514     yield a value or a function designator, produce a side effect, or some combination thereof)
3515     in which case it is known as an operator (other forms of operator also exist in some
3516     contexts). An operand is an entity on which an operator acts.
3517
3518
3519
3520
3521 [<a name="#p72" href="p72">page 72</a>] (<a href="#Contents">Contents</a>)
3522
3523 3   In all aspects of the language, the six tokens78)
3524              &lt;:    :&gt;      &lt;%    %&gt;     %:     %:%:
3525     behave, respectively, the same as the six tokens
3526              [     ]       {     }      #      ##
3527     except for their spelling.79)
3528     Forward references: expressions (<a href="#6.5">6.5</a>), declarations (<a href="#6.7">6.7</a>), preprocessing directives
3529     (<a href="#6.10">6.10</a>), statements (<a href="#6.8">6.8</a>).
3530 <a name="6.4.7" href="#6.4.7"><b>    6.4.7 Header names</b></a>
3531     Syntax
3532 1            header-name:
3533                     &lt; h-char-sequence &gt;
3534                     " q-char-sequence "
3535              h-char-sequence:
3536                     h-char
3537                     h-char-sequence h-char
3538              h-char:
3539                        any member of the source character set except
3540                                     the new-line character and &gt;
3541              q-char-sequence:
3542                     q-char
3543                     q-char-sequence q-char
3544              q-char:
3545                        any member of the source character set except
3546                                     the new-line character and "
3547     Semantics
3548 2   The sequences in both forms of header names are mapped in an implementation-defined
3549     manner to headers or external source file names as specified in <a href="#6.10.2">6.10.2</a>.
3550 3   If the characters ', \, ", //, or /* occur in the sequence between the &lt; and &gt; delimiters,
3551     the behavior is undefined. Similarly, if the characters ', \, //, or /* occur in the
3552
3553
3554
3555
3556     78) These tokens are sometimes called ''digraphs''.
3557     79) Thus [ and &lt;: behave differently when ''stringized'' (see <a href="#6.10.3.2">6.10.3.2</a>), but can otherwise be freely
3558         interchanged.
3559
3560 [<a name="#p73" href="p73">page 73</a>] (<a href="#Contents">Contents</a>)
3561
3562     sequence between the " delimiters, the behavior is undefined.80) Header name
3563     preprocessing tokens are recognized only within #include preprocessing directives and
3564     in implementation-defined locations within #pragma directives.81)
3565 4   EXAMPLE       The following sequence of characters:
3566              0x3&lt;1/a.h&gt;1e2
3567              #include &lt;1/a.h&gt;
3568              #define const.member@$
3569     forms the following sequence of preprocessing tokens (with each individual preprocessing token delimited
3570     by a { on the left and a } on the right).
3571              {0x3}{&lt;}{1}{/}{a}{.}{h}{&gt;}{1e2}
3572              {#}{include} {&lt;1/a.h&gt;}
3573              {#}{define} {const}{.}{member}{@}{$}
3574
3575     Forward references: source file inclusion (<a href="#6.10.2">6.10.2</a>).
3576 <a name="6.4.8" href="#6.4.8"><b>    6.4.8 Preprocessing numbers</b></a>
3577     Syntax
3578 1            pp-number:
3579                    digit
3580                    . digit
3581                    pp-number       digit
3582                    pp-number       identifier-nondigit
3583                    pp-number       e sign
3584                    pp-number       E sign
3585                    pp-number       p sign
3586                    pp-number       P sign
3587                    pp-number       .
3588     Description
3589 2   A preprocessing number begins with a digit optionally preceded by a period (.) and may
3590     be followed by valid identifier characters and the character sequences e+, e-, E+, E-,
3591     p+, p-, P+, or P-.
3592 3   Preprocessing number tokens lexically include all floating and integer constant tokens.
3593     Semantics
3594 4   A preprocessing number does not have type or a value; it acquires both after a successful
3595     conversion (as part of translation phase 7) to a floating constant token or an integer
3596     constant token.
3597
3598
3599     80) Thus, sequences of characters that resemble escape sequences cause undefined behavior.
3600     81) For an example of a header name preprocessing token used in a #pragma directive, see <a href="#6.10.9">6.10.9</a>.
3601
3602 [<a name="#p74" href="p74">page 74</a>] (<a href="#Contents">Contents</a>)
3603
3604 <a name="6.4.9" href="#6.4.9"><b>    6.4.9 Comments</b></a>
3605 1   Except within a character constant, a string literal, or a comment, the characters /*
3606     introduce a comment. The contents of such a comment are examined only to identify
3607     multibyte characters and to find the characters */ that terminate it.82)
3608 2   Except within a character constant, a string literal, or a comment, the characters //
3609     introduce a comment that includes all multibyte characters up to, but not including, the
3610     next new-line character. The contents of such a comment are examined only to identify
3611     multibyte characters and to find the terminating new-line character.
3612 3   EXAMPLE
3613              "a//b"                             //   four-character string literal
3614              #include "//e"                     //   undefined behavior
3615              // */                              //   comment, not syntax error
3616              f = g/**//h;                       //   equivalent to f = g / h;
3617              //\
3618              i();                               // part of a two-line comment
3619              /\
3620              / j();                             // part of a two-line comment
3621              #define glue(x,y) x##y
3622              glue(/,/) k();                     // syntax error, not comment
3623              /*//*/ l();                        // equivalent to l();
3624              m = n//**/o
3625                 + p;                            // equivalent to m = n + p;
3626
3627
3628
3629
3630     82) Thus, /* ... */ comments do not nest.
3631
3632 [<a name="#p75" href="p75">page 75</a>] (<a href="#Contents">Contents</a>)
3633
3634 <a name="6.5" href="#6.5"><b>    6.5 Expressions</b></a>
3635 1   An expression is a sequence of operators and operands that specifies computation of a
3636     value, or that designates an object or a function, or that generates side effects, or that
3637     performs a combination thereof. The value computations of the operands of an operator
3638     are sequenced before the value computation of the result of the operator.
3639 2   If a side effect on a scalar object is unsequenced relative to either a different side effect
3640     on the same scalar object or a value computation using the value of the same scalar
3641     object, the behavior is undefined. If there are multiple allowable orderings of the
3642     subexpressions of an expression, the behavior is undefined if such an unsequenced side
3643     effect occurs in any of the orderings.83)
3644 3   The grouping of operators and operands is indicated by the syntax.84) Except as specified
3645     later, side effects and value computations of subexpressions are unsequenced.85)
3646 4   Some operators (the unary operator ~, and the binary operators &lt;&lt;, &gt;&gt;, &amp;, ^, and |,
3647     collectively described as bitwise operators) are required to have operands that have
3648     integer type. These operators yield values that depend on the internal representations of
3649     integers, and have implementation-defined and undefined aspects for signed types.
3650 5   If an exceptional condition occurs during the evaluation of an expression (that is, if the
3651     result is not mathematically defined or not in the range of representable values for its
3652     type), the behavior is undefined.
3653
3654
3655
3656     83) This paragraph renders undefined statement expressions such as
3657                   i = ++i + 1;
3658                   a[i++] = i;
3659          while allowing
3660                   i = i + 1;
3661                   a[i] = i;
3662
3663     84) The syntax specifies the precedence of operators in the evaluation of an expression, which is the same
3664         as the order of the major subclauses of this subclause, highest precedence first. Thus, for example, the
3665         expressions allowed as the operands of the binary + operator (<a href="#6.5.6">6.5.6</a>) are those expressions defined in
3666         <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
3667         (<a href="#6.5.3">6.5.3</a>), and an operand contained between any of the following pairs of operators: grouping
3668         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
3669         the conditional operator ? : (<a href="#6.5.15">6.5.15</a>).
3670          Within each major subclause, the operators have the same precedence. Left- or right-associativity is
3671          indicated in each subclause by the syntax for the expressions discussed therein.
3672     85) In an expression that is evaluated more than once during the execution of a program, unsequenced and
3673         indeterminately sequenced evaluations of its subexpressions need not be performed consistently in
3674         different evaluations.
3675
3676 [<a name="#p76" href="p76">page 76</a>] (<a href="#Contents">Contents</a>)
3677
3678 6   The effective type of an object for an access to its stored value is the declared type of the
3679     object, if any.86) If a value is stored into an object having no declared type through an
3680     lvalue having a type that is not a character type, then the type of the lvalue becomes the
3681     effective type of the object for that access and for subsequent accesses that do not modify
3682     the stored value. If a value is copied into an object having no declared type using
3683     memcpy or memmove, or is copied as an array of character type, then the effective type
3684     of the modified object for that access and for subsequent accesses that do not modify the
3685     value is the effective type of the object from which the value is copied, if it has one. For
3686     all other accesses to an object having no declared type, the effective type of the object is
3687     simply the type of the lvalue used for the access.
3688 7   An object shall have its stored value accessed only by an lvalue expression that has one of
3689     the following types:87)
3690     -- a type compatible with the effective type of the object,
3691     -- a qualified version of a type compatible with the effective type of the object,
3692     -- a type that is the signed or unsigned type corresponding to the effective type of the
3693       object,
3694     -- a type that is the signed or unsigned type corresponding to a qualified version of the
3695       effective type of the object,
3696     -- an aggregate or union type that includes one of the aforementioned types among its
3697       members (including, recursively, a member of a subaggregate or contained union), or
3698     -- a character type.
3699 8   A floating expression may be contracted, that is, evaluated as though it were a single
3700     operation, thereby omitting rounding errors implied by the source code and the
3701     expression evaluation method.88) The FP_CONTRACT pragma in <a href="#7.12">&lt;math.h&gt;</a> provides a
3702     way to disallow contracted expressions. Otherwise, whether and how expressions are
3703     contracted is implementation-defined.89)
3704     Forward references: the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>), copying functions (<a href="#7.23.2">7.23.2</a>).
3705
3706
3707     86) Allocated objects have no declared type.
3708     87) The intent of this list is to specify those circumstances in which an object may or may not be aliased.
3709     88) The intermediate operations in the contracted expression are evaluated as if to infinite precision and
3710         range, while the final operation is rounded to the format determined by the expression evaluation
3711         method. A contracted expression might also omit the raising of floating-point exceptions.
3712     89) This license is specifically intended to allow implementations to exploit fast machine instructions that
3713         combine multiple C operators. As contractions potentially undermine predictability, and can even
3714         decrease accuracy for containing expressions, their use needs to be well-defined and clearly
3715         documented.
3716
3717 [<a name="#p77" href="p77">page 77</a>] (<a href="#Contents">Contents</a>)
3718
3719 <a name="6.5.1" href="#6.5.1"><b>    6.5.1 Primary expressions</b></a>
3720     Syntax
3721 1            primary-expression:
3722                     identifier
3723                     constant
3724                     string-literal
3725                     ( expression )
3726                     generic-selection
3727     Semantics
3728 2   An identifier is a primary expression, provided it has been declared as designating an
3729     object (in which case it is an lvalue) or a function (in which case it is a function
3730     designator).90)
3731 3   A constant is a primary expression. Its type depends on its form and value, as detailed in
3732 <a name="6.4.4" href="#6.4.4"><b>    6.4.4.</b></a>
3733 4   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>.
3734 5   A parenthesized expression is a primary expression. Its type and value are identical to
3735     those of the unparenthesized expression. It is an lvalue, a function designator, or a void
3736     expression if the unparenthesized expression is, respectively, an lvalue, a function
3737     designator, or a void expression.
3738     Forward references: declarations (<a href="#6.7">6.7</a>).
3739 <a name="6.5.1.1" href="#6.5.1.1"><b>    6.5.1.1 Generic selection</b></a>
3740     Syntax
3741 1            generic-selection:
3742                     _Generic ( assignment-expression , generic-assoc-list )
3743              generic-assoc-list:
3744                     generic-association
3745                     generic-assoc-list , generic-association
3746              generic-association:
3747                     type-name : assignment-expression
3748                     default : assignment-expression
3749     Constraints
3750 2   A generic selection shall have no more than one default generic association. The type
3751     name in a generic association shall specify a complete object type other than a variably
3752
3753     90) Thus, an undeclared identifier is a violation of the syntax.
3754
3755 [<a name="#p78" href="p78">page 78</a>] (<a href="#Contents">Contents</a>)
3756
3757     modified type. No two generic associations in the same generic selection shall specify
3758     compatible types. The controlling expression of a generic selection shall have type
3759     compatible with at most one of the types named in its generic association list. If a
3760     generic selection has no default generic association, its controlling expression shall
3761     have type compatible with exactly one of the types named in its generic association list.
3762     Semantics
3763 3   The controlling expression of a generic selection is not evaluated. If a generic selection
3764     has a generic association with a type name that is compatible with the type of the
3765     controlling expression, then the result expression of the generic selection is the
3766     expression in that generic association. Otherwise, the result expression of the generic
3767     selection is the expression in the default generic association. None of the expressions
3768     from any other generic association of the generic selection is evaluated.
3769 4   The type and value of a generic selection are identical to those of its result expression. It
3770     is an lvalue, a function designator, or a void expression if its result expression is,
3771     respectively, an lvalue, a function designator, or a void expression.
3772 5   EXAMPLE      The cbrt type-generic macro could be implemented as follows:
3773              #define cbrt(X) _Generic((X),                                      \
3774                                      long double: cbrtl,                        \
3775                                      default: cbrt,                             \
3776                                      float: cbrtf                               \
3777                                      )(X)
3778
3779 <a name="6.5.2" href="#6.5.2"><b>    6.5.2 Postfix operators</b></a>
3780     Syntax
3781 1            postfix-expression:
3782                     primary-expression
3783                     postfix-expression [ expression ]
3784                     postfix-expression ( argument-expression-listopt )
3785                     postfix-expression . identifier
3786                     postfix-expression -&gt; identifier
3787                     postfix-expression ++
3788                     postfix-expression --
3789                     ( type-name ) { initializer-list }
3790                     ( type-name ) { initializer-list , }
3791              argument-expression-list:
3792                    assignment-expression
3793                    argument-expression-list , assignment-expression
3794
3795
3796
3797
3798 [<a name="#p79" href="p79">page 79</a>] (<a href="#Contents">Contents</a>)
3799
3800 <a name="6.5.2.1" href="#6.5.2.1"><b>    6.5.2.1 Array subscripting</b></a>
3801     Constraints
3802 1   One of the expressions shall have type ''pointer to complete object type'', the other
3803     expression shall have integer type, and the result has type ''type''.
3804     Semantics
3805 2   A postfix expression followed by an expression in square brackets [] is a subscripted
3806     designation of an element of an array object. The definition of the subscript operator []
3807     is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that
3808     apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the
3809     initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th
3810     element of E1 (counting from zero).
3811 3   Successive subscript operators designate an element of a multidimensional array object.
3812     If E is an n-dimensional array (n &gt;= 2) with dimensions i x j x . . . x k, then E (used as
3813     other than an lvalue) is converted to a pointer to an (n - 1)-dimensional array with
3814     dimensions j x . . . x k. If the unary * operator is applied to this pointer explicitly, or
3815     implicitly as a result of subscripting, the result is the referenced (n - 1)-dimensional
3816     array, which itself is converted into a pointer if used as other than an lvalue. It follows
3817     from this that arrays are stored in row-major order (last subscript varies fastest).
3818 4   EXAMPLE        Consider the array object defined by the declaration
3819              int x[3][5];
3820     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
3821     array of five ints. In the expression x[i], which is equivalent to (*((x)+(i))), x is first converted to
3822     a pointer to the initial array of five ints. Then i is adjusted according to the type of x, which conceptually
3823     entails multiplying i by the size of the object to which the pointer points, namely an array of five int
3824     objects. The results are added and indirection is applied to yield an array of five ints. When used in the
3825     expression x[i][j], that array is in turn converted to a pointer to the first of the ints, so x[i][j]
3826     yields an int.
3827
3828     Forward references: additive operators (<a href="#6.5.6">6.5.6</a>), address and indirection operators
3829     (<a href="#6.5.3.2">6.5.3.2</a>), array declarators (<a href="#6.7.6.2">6.7.6.2</a>).
3830 <a name="6.5.2.2" href="#6.5.2.2"><b>    6.5.2.2 Function calls</b></a>
3831     Constraints
3832 1   The expression that denotes the called function91) shall have type pointer to function
3833     returning void or returning a complete object type other than an array type.
3834 2   If the expression that denotes the called function has a type that includes a prototype, the
3835     number of arguments shall agree with the number of parameters. Each argument shall
3836
3837
3838     91) Most often, this is the result of converting an identifier that is a function designator.
3839
3840 [<a name="#p80" href="p80">page 80</a>] (<a href="#Contents">Contents</a>)
3841
3842     have a type such that its value may be assigned to an object with the unqualified version
3843     of the type of its corresponding parameter.
3844     Semantics
3845 3   A postfix expression followed by parentheses () containing a possibly empty, comma-
3846     separated list of expressions is a function call. The postfix expression denotes the called
3847     function. The list of expressions specifies the arguments to the function.
3848 4   An argument may be an expression of any complete object type. In preparing for the call
3849     to a function, the arguments are evaluated, and each parameter is assigned the value of the
3850     corresponding argument.92)
3851 5   If the expression that denotes the called function has type pointer to function returning an
3852     object type, the function call expression has the same type as that object type, and has the
3853     value determined as specified in <a href="#6.8.6.4">6.8.6.4</a>. Otherwise, the function call has type void.
3854 6   If the expression that denotes the called function has a type that does not include a
3855     prototype, the integer promotions are performed on each argument, and arguments that
3856     have type float are promoted to double. These are called the default argument
3857     promotions. If the number of arguments does not equal the number of parameters, the
3858     behavior is undefined. If the function is defined with a type that includes a prototype, and
3859     either the prototype ends with an ellipsis (, ...) or the types of the arguments after
3860     promotion are not compatible with the types of the parameters, the behavior is undefined.
3861     If the function is defined with a type that does not include a prototype, and the types of
3862     the arguments after promotion are not compatible with those of the parameters after
3863     promotion, the behavior is undefined, except for the following cases:
3864     -- one promoted type is a signed integer type, the other promoted type is the
3865       corresponding unsigned integer type, and the value is representable in both types;
3866     -- both types are pointers to qualified or unqualified versions of a character type or
3867       void.
3868 7   If the expression that denotes the called function has a type that does include a prototype,
3869     the arguments are implicitly converted, as if by assignment, to the types of the
3870     corresponding parameters, taking the type of each parameter to be the unqualified version
3871     of its declared type. The ellipsis notation in a function prototype declarator causes
3872     argument type conversion to stop after the last declared parameter. The default argument
3873     promotions are performed on trailing arguments.
3874
3875
3876
3877     92) A function may change the values of its parameters, but these changes cannot affect the values of the
3878         arguments. On the other hand, it is possible to pass a pointer to an object, and the function may
3879         change the value of the object pointed to. A parameter declared to have array or function type is
3880         adjusted to have a pointer type as described in <a href="#6.9.1">6.9.1</a>.
3881
3882 [<a name="#p81" href="p81">page 81</a>] (<a href="#Contents">Contents</a>)
3883
3884 8    No other conversions are performed implicitly; in particular, the number and types of
3885      arguments are not compared with those of the parameters in a function definition that
3886      does not include a function prototype declarator.
3887 9    If the function is defined with a type that is not compatible with the type (of the
3888      expression) pointed to by the expression that denotes the called function, the behavior is
3889      undefined.
3890 10   There is a sequence point after the evaluations of the function designator and the actual
3891      arguments but before the actual call. Every evaluation in the calling function (including
3892      other function calls) that is not otherwise specifically sequenced before or after the
3893      execution of the body of the called function is indeterminately sequenced with respect to
3894      the execution of the called function.93)
3895 11   Recursive function calls shall be permitted, both directly and indirectly through any chain
3896      of other functions.
3897 12   EXAMPLE        In the function call
3898               (*pf[f1()]) (f2(), f3() + f4())
3899      the functions f1, f2, f3, and f4 may be called in any order. All side effects have to be completed before
3900      the function pointed to by pf[f1()] is called.
3901
3902      Forward references: function declarators (including prototypes) (<a href="#6.7.6.3">6.7.6.3</a>), function
3903      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>).
3904 <a name="6.5.2.3" href="#6.5.2.3"><b>     6.5.2.3 Structure and union members</b></a>
3905      Constraints
3906 1    The first operand of the . operator shall have a qualified or unqualified structure or union
3907      type, and the second operand shall name a member of that type.
3908 2    The first operand of the -&gt; operator shall have type ''pointer to qualified or unqualified
3909      structure'' or ''pointer to qualified or unqualified union'', and the second operand shall
3910      name a member of the type pointed to.
3911      Semantics
3912 3    A postfix expression followed by the . operator and an identifier designates a member of
3913      a structure or union object. The value is that of the named member,94) and is an lvalue if
3914      the first expression is an lvalue. If the first expression has qualified type, the result has
3915      the so-qualified version of the type of the designated member.
3916
3917      93) In other words, function executions do not ''interleave'' with each other.
3918      94) If the member used to access the contents of a union object is not the same as the member last used to
3919          store a value in the object, the appropriate part of the object representation of the value is reinterpreted
3920          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
3921          punning''). This might be a trap representation.
3922
3923 [<a name="#p82" href="p82">page 82</a>] (<a href="#Contents">Contents</a>)
3924
3925 4   A postfix expression followed by the -&gt; operator and an identifier designates a member
3926     of a structure or union object. The value is that of the named member of the object to
3927     which the first expression points, and is an lvalue.95) If the first expression is a pointer to
3928     a qualified type, the result has the so-qualified version of the type of the designated
3929     member.
3930 5   Accessing a member of an _Atomic-qualified structure or union object results in
3931     undefined behavior.96)
3932 6   One special guarantee is made in order to simplify the use of unions: if a union contains
3933     several structures that share a common initial sequence (see below), and if the union
3934     object currently contains one of these structures, it is permitted to inspect the common
3935     initial part of any of them anywhere that a declaration of the completed type of the union
3936     is visible. Two structures share a common initial sequence if corresponding members
3937     have compatible types (and, for bit-fields, the same widths) for a sequence of one or more
3938     initial members.
3939 7   EXAMPLE 1 If f is a function returning a structure or union, and x is a member of that structure or
3940     union, f().x is a valid postfix expression but is not an lvalue.
3941
3942 8   EXAMPLE 2       In:
3943              struct s { int i; const int ci; };
3944              struct s s;
3945              const struct s cs;
3946              volatile struct s vs;
3947     the various members have the types:
3948              s.i          int
3949              s.ci         const int
3950              cs.i         const int
3951              cs.ci        const int
3952              vs.i         volatile int
3953              vs.ci        volatile const int
3954
3955
3956
3957
3958     95) If &amp;E is a valid pointer expression (where &amp; is the ''address-of '' operator, which generates a pointer to
3959         its operand), the expression (&amp;E)-&gt;MOS is the same as E.MOS.
3960     96) A data race would occur if access to the entire structure or union in one thread conflicts with access to
3961         a member from another thread, where at least one access is a modification. Such a data race results in
3962         undefined behavior.
3963
3964 [<a name="#p83" href="p83">page 83</a>] (<a href="#Contents">Contents</a>)
3965
3966 9   EXAMPLE 3       The following is a valid fragment:
3967              union {
3968                      struct {
3969                            int      alltypes;
3970                      } n;
3971                      struct {
3972                            int      type;
3973                            int      intnode;
3974                      } ni;
3975                      struct {
3976                            int      type;
3977                            double doublenode;
3978                      } nf;
3979              } u;
3980              u.nf.type = 1;
3981              u.nf.doublenode = <a href="#3.14">3.14</a>;
3982              /* ... */
3983              if (u.n.alltypes == 1)
3984                      if (sin(u.nf.doublenode) == 0.0)
3985                            /* ... */
3986     The following is not a valid fragment (because the union type is not visible within function f):
3987              struct t1 { int m; };
3988              struct t2 { int m; };
3989              int f(struct t1 *p1, struct t2 *p2)
3990              {
3991                    if (p1-&gt;m &lt; 0)
3992                            p2-&gt;m = -p2-&gt;m;
3993                    return p1-&gt;m;
3994              }
3995              int g()
3996              {
3997                    union {
3998                            struct t1 s1;
3999                            struct t2 s2;
4000                    } u;
4001                    /* ... */
4002                    return f(&amp;u.s1, &amp;u.s2);
4003              }
4004
4005     Forward references: address and indirection operators (<a href="#6.5.3.2">6.5.3.2</a>), structure and union
4006     specifiers (<a href="#6.7.2.1">6.7.2.1</a>).
4007
4008
4009
4010
4011 [<a name="#p84" href="p84">page 84</a>] (<a href="#Contents">Contents</a>)
4012
4013 <a name="6.5.2.4" href="#6.5.2.4"><b>    6.5.2.4 Postfix increment and decrement operators</b></a>
4014     Constraints
4015 1   The operand of the postfix increment or decrement operator shall have qualified or
4016     unqualified real or pointer type and shall be a modifiable lvalue.
4017     Semantics
4018 2   The result of the postfix ++ operator is the value of the operand. As a side effect, the
4019     value of the operand object is incremented (that is, the value 1 of the appropriate type is
4020     added to it). See the discussions of additive operators and compound assignment for
4021     information on constraints, types, and conversions and the effects of operations on
4022     pointers. The value computation of the result is sequenced before the side effect of
4023     updating the stored value of the operand. With respect to an indeterminately-sequenced
4024     function call, the operation of postfix ++ is a single evaluation. Postfix ++ on an object
4025     with     _Atomic-qualified       type   is    a    read-modify-write      operation    with
4026                                                              97)
4027     memory_order_seq_cst memory order semantics.
4028 3   The postfix -- operator is analogous to the postfix ++ operator, except that the value of
4029     the operand is decremented (that is, the value 1 of the appropriate type is subtracted from
4030     it).
4031     Forward references: additive operators (<a href="#6.5.6">6.5.6</a>), compound assignment (<a href="#6.5.16.2">6.5.16.2</a>).
4032 <a name="6.5.2.5" href="#6.5.2.5"><b>    6.5.2.5 Compound literals</b></a>
4033     Constraints
4034 1   The type name shall specify a complete object type or an array of unknown size, but not a
4035     variable length array type.
4036 2   All the constraints for initializer lists in <a href="#6.7.9">6.7.9</a> also apply to compound literals.
4037     Semantics
4038 3   A postfix expression that consists of a parenthesized type name followed by a brace-
4039     enclosed list of initializers is a compound literal. It provides an unnamed object whose
4040     value is given by the initializer list.98)
4041
4042
4043     97) Where a pointer to an atomic object can be formed, this is equivalent to the following code sequence
4044         where T is the type of E:
4045                  T tmp;
4046                  T result = E;
4047                  do {
4048                         tmp = result + 1;
4049                  } while (!atomic_compare_exchange_strong(&amp;E, &amp;result, tmp));
4050          with result being the result of the operation.
4051
4052 [<a name="#p85" href="p85">page 85</a>] (<a href="#Contents">Contents</a>)
4053
4054 4    If the type name specifies an array of unknown size, the size is determined by the
4055      initializer list as specified in <a href="#6.7.9">6.7.9</a>, and the type of the compound literal is that of the
4056      completed array type. Otherwise (when the type name specifies an object type), the type
4057      of the compound literal is that specified by the type name. In either case, the result is an
4058      lvalue.
4059 5    The value of the compound literal is that of an unnamed object initialized by the
4060      initializer list. If the compound literal occurs outside the body of a function, the object
4061      has static storage duration; otherwise, it has automatic storage duration associated with
4062      the enclosing block.
4063 6    All the semantic rules for initializer lists in <a href="#6.7.9">6.7.9</a> also apply to compound literals.99)
4064 7    String literals, and compound literals with const-qualified types, need not designate
4065      distinct objects.100)
4066 8    EXAMPLE 1       The file scope definition
4067               int *p = (int []){2, 4};
4068      initializes p to point to the first element of an array of two ints, the first having the value two and the
4069      second, four. The expressions in this compound literal are required to be constant. The unnamed object
4070      has static storage duration.
4071
4072 9    EXAMPLE 2       In contrast, in
4073               void f(void)
4074               {
4075                     int *p;
4076                     /*...*/
4077                     p = (int [2]){*p};
4078                     /*...*/
4079               }
4080      p is assigned the address of the first element of an array of two ints, the first having the value previously
4081      pointed to by p and the second, zero. The expressions in this compound literal need not be constant. The
4082      unnamed object has automatic storage duration.
4083
4084 10   EXAMPLE 3 Initializers with designations can be combined with compound literals. Structure objects
4085      created using compound literals can be passed to functions without depending on member order:
4086               drawline((struct point){.x=1, .y=1},
4087                     (struct point){.x=3, .y=4});
4088      Or, if drawline instead expected pointers to struct point:
4089
4090
4091
4092      98) Note that this differs from a cast expression. For example, a cast specifies a conversion to scalar types
4093          or void only, and the result of a cast expression is not an lvalue.
4094      99) For example, subobjects without explicit initializers are initialized to zero.
4095      100) This allows implementations to share storage for string literals and constant compound literals with
4096           the same or overlapping representations.
4097
4098 [<a name="#p86" href="p86">page 86</a>] (<a href="#Contents">Contents</a>)
4099
4100               drawline(&amp;(struct point){.x=1, .y=1},
4101                     &amp;(struct point){.x=3, .y=4});
4102
4103 11   EXAMPLE 4        A read-only compound literal can be specified through constructions like:
4104               (const float []){1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6}
4105
4106 12   EXAMPLE 5        The following three expressions have different meanings:
4107               "/tmp/fileXXXXXX"
4108               (char []){"/tmp/fileXXXXXX"}
4109               (const char []){"/tmp/fileXXXXXX"}
4110      The first always has static storage duration and has type array of char, but need not be modifiable; the last
4111      two have automatic storage duration when they occur within the body of a function, and the first of these
4112      two is modifiable.
4113
4114 13   EXAMPLE 6 Like string literals, const-qualified compound literals can be placed into read-only memory
4115      and can even be shared. For example,
4116               (const char []){"abc"} == "abc"
4117      might yield 1 if the literals' storage is shared.
4118
4119 14   EXAMPLE 7 Since compound literals are unnamed, a single compound literal cannot specify a circularly
4120      linked object. For example, there is no way to write a self-referential compound literal that could be used
4121      as the function argument in place of the named object endless_zeros below:
4122               struct int_list { int car; struct int_list *cdr; };
4123               struct int_list endless_zeros = {0, &amp;endless_zeros};
4124               eval(endless_zeros);
4125
4126 15   EXAMPLE 8        Each compound literal creates only a single object in a given scope:
4127               struct s { int i; };
4128               int f (void)
4129               {
4130                     struct s *p = 0, *q;
4131                     int j = 0;
4132               again:
4133                         q = p, p = &amp;((struct s){ j++ });
4134                         if (j &lt; 2) goto again;
4135                         return p == q &amp;&amp; q-&gt;i == 1;
4136               }
4137      The function f() always returns the value 1.
4138 16   Note that if an iteration statement were used instead of an explicit goto and a labeled statement, the
4139      lifetime of the unnamed object would be the body of the loop only, and on entry next time around p would
4140      have an indeterminate value, which would result in undefined behavior.
4141
4142      Forward references: type names (<a href="#6.7.7">6.7.7</a>), initialization (<a href="#6.7.9">6.7.9</a>).
4143
4144
4145
4146
4147 [<a name="#p87" href="p87">page 87</a>] (<a href="#Contents">Contents</a>)
4148
4149 <a name="6.5.3" href="#6.5.3"><b>    6.5.3 Unary operators</b></a>
4150     Syntax
4151 1            unary-expression:
4152                     postfix-expression
4153                     ++ unary-expression
4154                     -- unary-expression
4155                     unary-operator cast-expression
4156                     sizeof unary-expression
4157                     sizeof ( type-name )
4158                     alignof ( type-name )
4159              unary-operator: one of
4160                     &amp; * + - ~             !
4161 <a name="6.5.3.1" href="#6.5.3.1"><b>    6.5.3.1 Prefix increment and decrement operators</b></a>
4162     Constraints
4163 1   The operand of the prefix increment or decrement operator shall have qualified or
4164     unqualified real or pointer type and shall be a modifiable lvalue.
4165     Semantics
4166 2   The value of the operand of the prefix ++ operator is incremented. The result is the new
4167     value of the operand after incrementation. The expression ++E is equivalent to (E+=1).
4168     See the discussions of additive operators and compound assignment for information on
4169     constraints, types, side effects, and conversions and the effects of operations on pointers.
4170 3   The prefix -- operator is analogous to the prefix ++ operator, except that the value of the
4171     operand is decremented.
4172     Forward references: additive operators (<a href="#6.5.6">6.5.6</a>), compound assignment (<a href="#6.5.16.2">6.5.16.2</a>).
4173 <a name="6.5.3.2" href="#6.5.3.2"><b>    6.5.3.2 Address and indirection operators</b></a>
4174     Constraints
4175 1   The operand of the unary &amp; operator shall be either a function designator, the result of a
4176     [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is
4177     not declared with the register storage-class specifier.
4178 2   The operand of the unary * operator shall have pointer type.
4179     Semantics
4180 3   The unary &amp; operator yields the address of its operand. If the operand has type ''type'',
4181     the result has type ''pointer to type''. If the operand is the result of a unary * operator,
4182     neither that operator nor the &amp; operator is evaluated and the result is as if both were
4183     omitted, except that the constraints on the operators still apply and the result is not an
4184
4185 [<a name="#p88" href="p88">page 88</a>] (<a href="#Contents">Contents</a>)
4186
4187     lvalue. Similarly, if the operand is the result of a [] operator, neither the &amp; operator nor
4188     the unary * that is implied by the [] is evaluated and the result is as if the &amp; operator
4189     were removed and the [] operator were changed to a + operator. Otherwise, the result is
4190     a pointer to the object or function designated by its operand.
4191 4   The unary * operator denotes indirection. If the operand points to a function, the result is
4192     a function designator; if it points to an object, the result is an lvalue designating the
4193     object. If the operand has type ''pointer to type'', the result has type ''type''. If an
4194     invalid value has been assigned to the pointer, the behavior of the unary * operator is
4195     undefined.101)
4196     Forward references: storage-class specifiers (<a href="#6.7.1">6.7.1</a>), structure and union specifiers
4197     (<a href="#6.7.2.1">6.7.2.1</a>).
4198 <a name="6.5.3.3" href="#6.5.3.3"><b>    6.5.3.3 Unary arithmetic operators</b></a>
4199     Constraints
4200 1   The operand of the unary + or - operator shall have arithmetic type; of the ~ operator,
4201     integer type; of the ! operator, scalar type.
4202     Semantics
4203 2   The result of the unary + operator is the value of its (promoted) operand. The integer
4204     promotions are performed on the operand, and the result has the promoted type.
4205 3   The result of the unary - operator is the negative of its (promoted) operand. The integer
4206     promotions are performed on the operand, and the result has the promoted type.
4207 4   The result of the ~ operator is the bitwise complement of its (promoted) operand (that is,
4208     each bit in the result is set if and only if the corresponding bit in the converted operand is
4209     not set). The integer promotions are performed on the operand, and the result has the
4210     promoted type. If the promoted type is an unsigned type, the expression ~E is equivalent
4211     to the maximum value representable in that type minus E.
4212 5   The result of the logical negation operator ! is 0 if the value of its operand compares
4213     unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.
4214     The expression !E is equivalent to (0==E).
4215
4216
4217
4218     101) Thus, &amp;*E is equivalent to E (even if E is a null pointer), and &amp;(E1[E2]) to ((E1)+(E2)). It is
4219          always true that if E is a function designator or an lvalue that is a valid operand of the unary &amp;
4220          operator, *&amp;E is a function designator or an lvalue equal to E. If *P is an lvalue and T is the name of
4221          an object pointer type, *(T)P is an lvalue that has a type compatible with that to which T points.
4222          Among the invalid values for dereferencing a pointer by the unary * operator are a null pointer, an
4223          address inappropriately aligned for the type of object pointed to, and the address of an object after the
4224          end of its lifetime.
4225
4226 [<a name="#p89" href="p89">page 89</a>] (<a href="#Contents">Contents</a>)
4227
4228 <a name="6.5.3.4" href="#6.5.3.4"><b>    6.5.3.4 The sizeof and alignof operators</b></a>
4229     Constraints
4230 1   The sizeof operator shall not be applied to an expression that has function type or an
4231     incomplete type, to the parenthesized name of such a type, or to an expression that
4232     designates a bit-field member. The alignof operator shall not be applied to a function
4233     type or an incomplete type.
4234     Semantics
4235 2   The sizeof operator yields the size (in bytes) of its operand, which may be an
4236     expression or the parenthesized name of a type. The size is determined from the type of
4237     the operand. The result is an integer. If the type of the operand is a variable length array
4238     type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an
4239     integer constant.
4240 3   The alignof operator yields the alignment requirement of its operand type. The result
4241     is an integer constant. When applied to an array type, the result is the alignment
4242     requirement of the element type.
4243 4   When sizeof is applied to an operand that has type char, unsigned char, or
4244     signed char, (or a qualified version thereof) the result is 1. When applied to an
4245     operand that has array type, the result is the total number of bytes in the array.102) When
4246     applied to an operand that has structure or union type, the result is the total number of
4247     bytes in such an object, including internal and trailing padding.
4248 5   The value of the result of both operators is implementation-defined, and its type (an
4249     unsigned integer type) is size_t, defined in <a href="#7.19">&lt;stddef.h&gt;</a> (and other headers).
4250 6   EXAMPLE 1 A principal use of the sizeof operator is in communication with routines such as storage
4251     allocators and I/O systems. A storage-allocation function might accept a size (in bytes) of an object to
4252     allocate and return a pointer to void. For example:
4253             extern void *alloc(size_t);
4254             double *dp = alloc(sizeof *dp);
4255     The implementation of the alloc function should ensure that its return value is aligned suitably for
4256     conversion to a pointer to double.
4257
4258 7   EXAMPLE 2      Another use of the sizeof operator is to compute the number of elements in an array:
4259             sizeof array / sizeof array[0]
4260
4261 8   EXAMPLE 3      In this example, the size of a variable length array is computed and returned from a
4262     function:
4263             #include <a href="#7.19">&lt;stddef.h&gt;</a>
4264
4265
4266
4267     102) When applied to a parameter declared to have array or function type, the sizeof operator yields the
4268          size of the adjusted (pointer) type (see <a href="#6.9.1">6.9.1</a>).
4269
4270 [<a name="#p90" href="p90">page 90</a>] (<a href="#Contents">Contents</a>)
4271
4272              size_t fsize3(int n)
4273              {
4274                    char b[n+3];                  // variable length array
4275                    return sizeof b;              // execution time sizeof
4276              }
4277              int main()
4278              {
4279                    size_t size;
4280                    size = fsize3(10); // fsize3 returns 13
4281                    return 0;
4282              }
4283
4284     Forward references: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>), declarations (<a href="#6.7">6.7</a>),
4285     structure and union specifiers (<a href="#6.7.2.1">6.7.2.1</a>), type names (<a href="#6.7.7">6.7.7</a>), array declarators (<a href="#6.7.6.2">6.7.6.2</a>).
4286 <a name="6.5.4" href="#6.5.4"><b>    6.5.4 Cast operators</b></a>
4287     Syntax
4288 1            cast-expression:
4289                     unary-expression
4290                     ( type-name ) cast-expression
4291     Constraints
4292 2   Unless the type name specifies a void type, the type name shall specify qualified or
4293     unqualified scalar type and the operand shall have scalar type.
4294 3   Conversions that involve pointers, other than where permitted by the constraints of
4295     <a href="#6.5.16.1">6.5.16.1</a>, shall be specified by means of an explicit cast.
4296 4   A pointer type shall not be converted to any floating type. A floating type shall not be
4297     converted to any pointer type.
4298     Semantics
4299 5   Preceding an expression by a parenthesized type name converts the value of the
4300     expression to the named type. This construction is called a cast.103) A cast that specifies
4301     no conversion has no effect on the type or value of an expression.
4302 6   If the value of the expression is represented with greater precision or range than required
4303     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
4304     type of the expression is the same as the named type.
4305     Forward references: equality operators (<a href="#6.5.9">6.5.9</a>), function declarators (including
4306     prototypes) (<a href="#6.7.6.3">6.7.6.3</a>), simple assignment (<a href="#6.5.16.1">6.5.16.1</a>), type names (<a href="#6.7.7">6.7.7</a>).
4307
4308
4309
4310     103) A cast does not yield an lvalue. Thus, a cast to a qualified type has the same effect as a cast to the
4311          unqualified version of the type.
4312
4313 [<a name="#p91" href="p91">page 91</a>] (<a href="#Contents">Contents</a>)
4314
4315 <a name="6.5.5" href="#6.5.5"><b>    6.5.5 Multiplicative operators</b></a>
4316     Syntax
4317 1            multiplicative-expression:
4318                      cast-expression
4319                      multiplicative-expression * cast-expression
4320                      multiplicative-expression / cast-expression
4321                      multiplicative-expression % cast-expression
4322     Constraints
4323 2   Each of the operands shall have arithmetic type. The operands of the % operator shall
4324     have integer type.
4325     Semantics
4326 3   The usual arithmetic conversions are performed on the operands.
4327 4   The result of the binary * operator is the product of the operands.
4328 5   The result of the / operator is the quotient from the division of the first operand by the
4329     second; the result of the % operator is the remainder. In both operations, if the value of
4330     the second operand is zero, the behavior is undefined.
4331 6   When integers are divided, the result of the / operator is the algebraic quotient with any
4332     fractional part discarded.104) If the quotient a/b is representable, the expression
4333     (a/b)*b + a%b shall equal a; otherwise, the behavior of both a/b and a%b is
4334     undefined.
4335 <a name="6.5.6" href="#6.5.6"><b>    6.5.6 Additive operators</b></a>
4336     Syntax
4337 1            additive-expression:
4338                     multiplicative-expression
4339                     additive-expression + multiplicative-expression
4340                     additive-expression - multiplicative-expression
4341     Constraints
4342 2   For addition, either both operands shall have arithmetic type, or one operand shall be a
4343     pointer to a complete object type and the other shall have integer type. (Incrementing is
4344     equivalent to adding 1.)
4345 3   For subtraction, one of the following shall hold:
4346
4347
4348
4349
4350     104) This is often called ''truncation toward zero''.
4351
4352 [<a name="#p92" href="p92">page 92</a>] (<a href="#Contents">Contents</a>)
4353
4354     -- both operands have arithmetic type;
4355     -- both operands are pointers to qualified or unqualified versions of compatible complete
4356       object types; or
4357     -- the left operand is a pointer to a complete object type and the right operand has
4358       integer type.
4359     (Decrementing is equivalent to subtracting 1.)
4360     Semantics
4361 4   If both operands have arithmetic type, the usual arithmetic conversions are performed on
4362     them.
4363 5   The result of the binary + operator is the sum of the operands.
4364 6   The result of the binary - operator is the difference resulting from the subtraction of the
4365     second operand from the first.
4366 7   For the purposes of these operators, a pointer to an object that is not an element of an
4367     array behaves the same as a pointer to the first element of an array of length one with the
4368     type of the object as its element type.
4369 8   When an expression that has integer type is added to or subtracted from a pointer, the
4370     result has the type of the pointer operand. If the pointer operand points to an element of
4371     an array object, and the array is large enough, the result points to an element offset from
4372     the original element such that the difference of the subscripts of the resulting and original
4373     array elements equals the integer expression. In other words, if the expression P points to
4374     the i-th element of an array object, the expressions (P)+N (equivalently, N+(P)) and
4375     (P)-N (where N has the value n) point to, respectively, the i+n-th and i-n-th elements of
4376     the array object, provided they exist. Moreover, if the expression P points to the last
4377     element of an array object, the expression (P)+1 points one past the last element of the
4378     array object, and if the expression Q points one past the last element of an array object,
4379     the expression (Q)-1 points to the last element of the array object. If both the pointer
4380     operand and the result point to elements of the same array object, or one past the last
4381     element of the array object, the evaluation shall not produce an overflow; otherwise, the
4382     behavior is undefined. If the result points one past the last element of the array object, it
4383     shall not be used as the operand of a unary * operator that is evaluated.
4384 9   When two pointers are subtracted, both shall point to elements of the same array object,
4385     or one past the last element of the array object; the result is the difference of the
4386     subscripts of the two array elements. The size of the result is implementation-defined,
4387     and its type (a signed integer type) is ptrdiff_t defined in the <a href="#7.19">&lt;stddef.h&gt;</a> header.
4388     If the result is not representable in an object of that type, the behavior is undefined. In
4389     other words, if the expressions P and Q point to, respectively, the i-th and j-th elements of
4390     an array object, the expression (P)-(Q) has the value i-j provided the value fits in an
4391
4392 [<a name="#p93" href="p93">page 93</a>] (<a href="#Contents">Contents</a>)
4393
4394      object of type ptrdiff_t. Moreover, if the expression P points either to an element of
4395      an array object or one past the last element of an array object, and the expression Q points
4396      to the last element of the same array object, the expression ((Q)+1)-(P) has the same
4397      value as ((Q)-(P))+1 and as -((P)-((Q)+1)), and has the value zero if the
4398      expression P points one past the last element of the array object, even though the
4399      expression (Q)+1 does not point to an element of the array object.105)
4400 10   EXAMPLE        Pointer arithmetic is well defined with pointers to variable length array types.
4401               {
4402                        int n = 4, m = 3;
4403                        int a[n][m];
4404                        int (*p)[m] = a;            //   p == &amp;a[0]
4405                        p += 1;                     //   p == &amp;a[1]
4406                        (*p)[2] = 99;               //   a[1][2] == 99
4407                        n = p - a;                  //   n == 1
4408               }
4409 11   If array a in the above example were declared to be an array of known constant size, and pointer p were
4410      declared to be a pointer to an array of the same known constant size (pointing to a), the results would be
4411      the same.
4412
4413      Forward references: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), common definitions <a href="#7.19">&lt;stddef.h&gt;</a>
4414      (<a href="#7.19">7.19</a>).
4415 <a name="6.5.7" href="#6.5.7"><b>     6.5.7 Bitwise shift operators</b></a>
4416      Syntax
4417 1             shift-expression:
4418                       additive-expression
4419                       shift-expression &lt;&lt; additive-expression
4420                       shift-expression &gt;&gt; additive-expression
4421      Constraints
4422 2    Each of the operands shall have integer type.
4423      Semantics
4424 3    The integer promotions are performed on each of the operands. The type of the result is
4425      that of the promoted left operand. If the value of the right operand is negative or is
4426
4427      105) Another way to approach pointer arithmetic is first to convert the pointer(s) to character pointer(s): In
4428           this scheme the integer expression added to or subtracted from the converted pointer is first multiplied
4429           by the size of the object originally pointed to, and the resulting pointer is converted back to the
4430           original type. For pointer subtraction, the result of the difference between the character pointers is
4431           similarly divided by the size of the object originally pointed to.
4432           When viewed in this way, an implementation need only provide one extra byte (which may overlap
4433           another object in the program) just after the end of the object in order to satisfy the ''one past the last
4434           element'' requirements.
4435
4436 [<a name="#p94" href="p94">page 94</a>] (<a href="#Contents">Contents</a>)
4437
4438     greater than or equal to the width of the promoted left operand, the behavior is undefined.
4439 4   The result of E1 &lt;&lt; E2 is E1 left-shifted E2 bit positions; vacated bits are filled with
4440     zeros. If E1 has an unsigned type, the value of the result is E1 x 2E2 , reduced modulo
4441     one more than the maximum value representable in the result type. If E1 has a signed
4442     type and nonnegative value, and E1 x 2E2 is representable in the result type, then that is
4443     the resulting value; otherwise, the behavior is undefined.
4444 5   The result of E1 &gt;&gt; E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type
4445     or if E1 has a signed type and a nonnegative value, the value of the result is the integral
4446     part of the quotient of E1 / 2E2 . If E1 has a signed type and a negative value, the
4447     resulting value is implementation-defined.
4448 <a name="6.5.8" href="#6.5.8"><b>    6.5.8 Relational operators</b></a>
4449     Syntax
4450 1            relational-expression:
4451                      shift-expression
4452                      relational-expression   &lt;    shift-expression
4453                      relational-expression   &gt;    shift-expression
4454                      relational-expression   &lt;=   shift-expression
4455                      relational-expression   &gt;=   shift-expression
4456     Constraints
4457 2   One of the following shall hold:
4458     -- both operands have real type; or
4459     -- both operands are pointers to qualified or unqualified versions of compatible object
4460       types.
4461     Semantics
4462 3   If both of the operands have arithmetic type, the usual arithmetic conversions are
4463     performed.
4464 4   For the purposes of these operators, a pointer to an object that is not an element of an
4465     array behaves the same as a pointer to the first element of an array of length one with the
4466     type of the object as its element type.
4467 5   When two pointers are compared, the result depends on the relative locations in the
4468     address space of the objects pointed to. If two pointers to object types both point to the
4469     same object, or both point one past the last element of the same array object, they
4470     compare equal. If the objects pointed to are members of the same aggregate object,
4471     pointers to structure members declared later compare greater than pointers to members
4472     declared earlier in the structure, and pointers to array elements with larger subscript
4473     values compare greater than pointers to elements of the same array with lower subscript
4474
4475 [<a name="#p95" href="p95">page 95</a>] (<a href="#Contents">Contents</a>)
4476
4477     values. All pointers to members of the same union object compare equal. If the
4478     expression P points to an element of an array object and the expression Q points to the
4479     last element of the same array object, the pointer expression Q+1 compares greater than
4480     P. In all other cases, the behavior is undefined.
4481 6   Each of the operators &lt; (less than), &gt; (greater than), &lt;= (less than or equal to), and &gt;=
4482     (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is
4483     false.106) The result has type int.
4484 <a name="6.5.9" href="#6.5.9"><b>    6.5.9 Equality operators</b></a>
4485     Syntax
4486 1            equality-expression:
4487                     relational-expression
4488                     equality-expression == relational-expression
4489                     equality-expression != relational-expression
4490     Constraints
4491 2   One of the following shall hold:
4492     -- both operands have arithmetic type;
4493     -- both operands are pointers to qualified or unqualified versions of compatible types;
4494     -- one operand is a pointer to an object type and the other is a pointer to a qualified or
4495       unqualified version of void; or
4496     -- one operand is a pointer and the other is a null pointer constant.
4497     Semantics
4498 3   The == (equal to) and != (not equal to) operators are analogous to the relational
4499     operators except for their lower precedence.107) Each of the operators yields 1 if the
4500     specified relation is true and 0 if it is false. The result has type int. For any pair of
4501     operands, exactly one of the relations is true.
4502 4   If both of the operands have arithmetic type, the usual arithmetic conversions are
4503     performed. Values of complex types are equal if and only if both their real parts are equal
4504     and also their imaginary parts are equal. Any two values of arithmetic types from
4505     different type domains are equal if and only if the results of their conversions to the
4506     (complex) result type determined by the usual arithmetic conversions are equal.
4507
4508
4509
4510     106) The expression a&lt;b&lt;c is not interpreted as in ordinary mathematics. As the syntax indicates, it
4511          means (a&lt;b)&lt;c; in other words, ''if a is less than b, compare 1 to c; otherwise, compare 0 to c''.
4512     107) 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.
4513
4514 [<a name="#p96" href="p96">page 96</a>] (<a href="#Contents">Contents</a>)
4515
4516 5   Otherwise, at least one operand is a pointer. If one operand is a pointer and the other is a
4517     null pointer constant, the null pointer constant is converted to the type of the pointer. If
4518     one operand is a pointer to an object type and the other is a pointer to a qualified or
4519     unqualified version of void, the former is converted to the type of the latter.
4520 6   Two pointers compare equal if and only if both are null pointers, both are pointers to the
4521     same object (including a pointer to an object and a subobject at its beginning) or function,
4522     both are pointers to one past the last element of the same array object, or one is a pointer
4523     to one past the end of one array object and the other is a pointer to the start of a different
4524     array object that happens to immediately follow the first array object in the address
4525     space.108)
4526 7   For the purposes of these operators, a pointer to an object that is not an element of an
4527     array behaves the same as a pointer to the first element of an array of length one with the
4528     type of the object as its element type.
4529 <a name="6.5.10" href="#6.5.10"><b>    6.5.10 Bitwise AND operator</b></a>
4530     Syntax
4531 1            AND-expression:
4532                    equality-expression
4533                    AND-expression &amp; equality-expression
4534     Constraints
4535 2   Each of the operands shall have integer type.
4536     Semantics
4537 3   The usual arithmetic conversions are performed on the operands.
4538 4   The result of the binary &amp; operator is the bitwise AND of the operands (that is, each bit in
4539     the result is set if and only if each of the corresponding bits in the converted operands is
4540     set).
4541
4542
4543
4544
4545     108) Two objects may be adjacent in memory because they are adjacent elements of a larger array or
4546          adjacent members of a structure with no padding between them, or because the implementation chose
4547          to place them so, even though they are unrelated. If prior invalid pointer operations (such as accesses
4548          outside array bounds) produced undefined behavior, subsequent comparisons also produce undefined
4549          behavior.
4550
4551 [<a name="#p97" href="p97">page 97</a>] (<a href="#Contents">Contents</a>)
4552
4553 <a name="6.5.11" href="#6.5.11"><b>    6.5.11 Bitwise exclusive OR operator</b></a>
4554     Syntax
4555 1            exclusive-OR-expression:
4556                      AND-expression
4557                      exclusive-OR-expression ^ AND-expression
4558     Constraints
4559 2   Each of the operands shall have integer type.
4560     Semantics
4561 3   The usual arithmetic conversions are performed on the operands.
4562 4   The result of the ^ operator is the bitwise exclusive OR of the operands (that is, each bit
4563     in the result is set if and only if exactly one of the corresponding bits in the converted
4564     operands is set).
4565 <a name="6.5.12" href="#6.5.12"><b>    6.5.12 Bitwise inclusive OR operator</b></a>
4566     Syntax
4567 1            inclusive-OR-expression:
4568                      exclusive-OR-expression
4569                      inclusive-OR-expression | exclusive-OR-expression
4570     Constraints
4571 2   Each of the operands shall have integer type.
4572     Semantics
4573 3   The usual arithmetic conversions are performed on the operands.
4574 4   The result of the | operator is the bitwise inclusive OR of the operands (that is, each bit in
4575     the result is set if and only if at least one of the corresponding bits in the converted
4576     operands is set).
4577
4578
4579
4580
4581 [<a name="#p98" href="p98">page 98</a>] (<a href="#Contents">Contents</a>)
4582
4583 <a name="6.5.13" href="#6.5.13"><b>    6.5.13 Logical AND operator</b></a>
4584     Syntax
4585 1             logical-AND-expression:
4586                       inclusive-OR-expression
4587                       logical-AND-expression &amp;&amp; inclusive-OR-expression
4588     Constraints
4589 2   Each of the operands shall have scalar type.
4590     Semantics
4591 3   The &amp;&amp; operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it
4592     yields 0. The result has type int.
4593 4   Unlike the bitwise binary &amp; operator, the &amp;&amp; operator guarantees left-to-right evaluation;
4594     if the second operand is evaluated, there is a sequence point between the evaluations of
4595     the first and second operands. If the first operand compares equal to 0, the second
4596     operand is not evaluated.
4597 <a name="6.5.14" href="#6.5.14"><b>    6.5.14 Logical OR operator</b></a>
4598     Syntax
4599 1             logical-OR-expression:
4600                       logical-AND-expression
4601                       logical-OR-expression || logical-AND-expression
4602     Constraints
4603 2   Each of the operands shall have scalar type.
4604     Semantics
4605 3   The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it
4606     yields 0. The result has type int.
4607 4   Unlike the bitwise | operator, the || operator guarantees left-to-right evaluation; if the
4608     second operand is evaluated, there is a sequence point between the evaluations of the first
4609     and second operands. If the first operand compares unequal to 0, the second operand is
4610     not evaluated.
4611
4612
4613
4614
4615 [<a name="#p99" href="p99">page 99</a>] (<a href="#Contents">Contents</a>)
4616
4617 <a name="6.5.15" href="#6.5.15"><b>    6.5.15 Conditional operator</b></a>
4618     Syntax
4619 1            conditional-expression:
4620                     logical-OR-expression
4621                     logical-OR-expression ? expression : conditional-expression
4622     Constraints
4623 2   The first operand shall have scalar type.
4624 3   One of the following shall hold for the second and third operands:
4625     -- both operands have arithmetic type;
4626     -- both operands have the same structure or union type;
4627     -- both operands have void type;
4628     -- both operands are pointers to qualified or unqualified versions of compatible types;
4629     -- one operand is a pointer and the other is a null pointer constant; or
4630     -- one operand is a pointer to an object type and the other is a pointer to a qualified or
4631       unqualified version of void.
4632     Semantics
4633 4   The first operand is evaluated; there is a sequence point between its evaluation and the
4634     evaluation of the second or third operand (whichever is evaluated). The second operand
4635     is evaluated only if the first compares unequal to 0; the third operand is evaluated only if
4636     the first compares equal to 0; the result is the value of the second or third operand
4637     (whichever is evaluated), converted to the type described below.109)
4638 5   If both the second and third operands have arithmetic type, the result type that would be
4639     determined by the usual arithmetic conversions, were they applied to those two operands,
4640     is the type of the result. If both the operands have structure or union type, the result has
4641     that type. If both operands have void type, the result has void type.
4642 6   If both the second and third operands are pointers or one is a null pointer constant and the
4643     other is a pointer, the result type is a pointer to a type qualified with all the type qualifiers
4644     of the types referenced by both operands. Furthermore, if both operands are pointers to
4645     compatible types or to differently qualified versions of compatible types, the result type is
4646     a pointer to an appropriately qualified version of the composite type; if one operand is a
4647     null pointer constant, the result has the type of the other operand; otherwise, one operand
4648     is a pointer to void or a qualified version of void, in which case the result type is a
4649     pointer to an appropriately qualified version of void.
4650
4651     109) A conditional expression does not yield an lvalue.
4652
4653 [<a name="#p100" href="p100">page 100</a>] (<a href="#Contents">Contents</a>)
4654
4655 7   EXAMPLE The common type that results when the second and third operands are pointers is determined
4656     in two independent stages. The appropriate qualifiers, for example, do not depend on whether the two
4657     pointers have compatible types.
4658 8   Given the declarations
4659               const void *c_vp;
4660               void *vp;
4661               const int *c_ip;
4662               volatile int *v_ip;
4663               int *ip;
4664               const char *c_cp;
4665     the third column in the following table is the common type that is the result of a conditional expression in
4666     which the first two columns are the second and third operands (in either order):
4667               c_vp    c_ip      const void *
4668               v_ip    0         volatile int *
4669               c_ip    v_ip      const volatile int *
4670               vp      c_cp      const void *
4671               ip      c_ip      const int *
4672               vp      ip        void *
4673
4674 <a name="6.5.16" href="#6.5.16"><b>    6.5.16 Assignment operators</b></a>
4675     Syntax
4676 1            assignment-expression:
4677                     conditional-expression
4678                     unary-expression assignment-operator assignment-expression
4679              assignment-operator: one of
4680                     = *= /= %= +=                       -=     &lt;&lt;=      &gt;&gt;=      &amp;=     ^=     |=
4681     Constraints
4682 2   An assignment operator shall have a modifiable lvalue as its left operand.
4683     Semantics
4684 3   An assignment operator stores a value in the object designated by the left operand. An
4685     assignment expression has the value of the left operand after the assignment,110) but is not
4686     an lvalue. The type of an assignment expression is the type of the left operand unless the
4687     left operand has qualified type, in which case it is the unqualified version of the type of
4688     the left operand. The side effect of updating the stored value of the left operand is
4689     sequenced after the value computations of the left and right operands. The evaluations of
4690     the operands are unsequenced.
4691
4692
4693
4694
4695     110) The implementation is permitted to read the object to determine the value but is not required to, even
4696          when the object has volatile-qualified type.
4697
4698 [<a name="#p101" href="p101">page 101</a>] (<a href="#Contents">Contents</a>)
4699
4700 <a name="6.5.16.1" href="#6.5.16.1"><b>    6.5.16.1 Simple assignment</b></a>
4701     Constraints
4702 1   One of the following shall hold:111)
4703     -- the left operand has qualified or unqualified arithmetic type and the right has
4704       arithmetic type;
4705     -- the left operand has a qualified or unqualified version of a structure or union type
4706       compatible with the type of the right;
4707     -- both operands are pointers to qualified or unqualified versions of compatible types,
4708       and the type pointed to by the left has all the qualifiers of the type pointed to by the
4709       right;
4710     -- one operand is a pointer to an object type and the other is a pointer to a qualified or
4711       unqualified version of void, and the type pointed to by the left has all the qualifiers
4712       of the type pointed to by the right;
4713     -- the left operand is a pointer and the right is a null pointer constant; or
4714     -- the left operand has type _Bool and the right is a pointer.
4715     Semantics
4716 2   In simple assignment (=), the value of the right operand is converted to the type of the
4717     assignment expression and replaces the value stored in the object designated by the left
4718     operand.
4719 3   If the value being stored in an object is read from another object that overlaps in any way
4720     the storage of the first object, then the overlap shall be exact and the two objects shall
4721     have qualified or unqualified versions of a compatible type; otherwise, the behavior is
4722     undefined.
4723 4   EXAMPLE 1       In the program fragment
4724             int f(void);
4725             char c;
4726             /* ... */
4727             if ((c = f()) == -1)
4728                     /* ... */
4729     the int value returned by the function may be truncated when stored in the char, and then converted back
4730     to int width prior to the comparison. In an implementation in which ''plain'' char has the same range of
4731     values as unsigned char (and char is narrower than int), the result of the conversion cannot be
4732
4733
4734
4735     111) The asymmetric appearance of these constraints with respect to type qualifiers is due to the conversion
4736          (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
4737          qualifiers that were applied to the type category of the expression (for example, it removes const but
4738          not volatile from the type int volatile * const).
4739
4740 [<a name="#p102" href="p102">page 102</a>] (<a href="#Contents">Contents</a>)
4741
4742     negative, so the operands of the comparison can never compare equal. Therefore, for full portability, the
4743     variable c should be declared as int.
4744
4745 5   EXAMPLE 2       In the fragment:
4746             char c;
4747             int i;
4748             long l;
4749             l = (c = i);
4750     the value of i is converted to the type of the assignment expression c = i, that is, char type. The value
4751     of the expression enclosed in parentheses is then converted to the type of the outer assignment expression,
4752     that is, long int type.
4753
4754 6   EXAMPLE 3       Consider the fragment:
4755             const char **cpp;
4756             char *p;
4757             const char c = 'A';
4758             cpp = &amp;p;                  // constraint violation
4759             *cpp = &amp;c;                 // valid
4760             *p = 0;                    // valid
4761     The first assignment is unsafe because it would allow the following valid code to attempt to change the
4762     value of the const object c.
4763
4764 <a name="6.5.16.2" href="#6.5.16.2"><b>    6.5.16.2 Compound assignment</b></a>
4765     Constraints
4766 1   For the operators += and -= only, either the left operand shall be a pointer to a complete
4767     object type and the right shall have integer type, or the left operand shall have qualified or
4768     unqualified arithmetic type and the right shall have arithmetic type.
4769 2   For the other operators, each operand shall have arithmetic type consistent with those
4770     allowed by the corresponding binary operator.
4771     Semantics
4772 3   A compound assignment of the form E1 op = E2 is equivalent to the simple assignment
4773     expression E1 = E1 op (E2), except that the lvalue E1 is evaluated only once, and with
4774     respect to an indeterminately-sequenced function call, the operation of a compound
4775     assignment is a single evaluation. If E1 has an _Atomic-qualified type, compound
4776     assignment is a read-modify-write operation with memory_order_seq_cst memory
4777     order semantics.112)
4778
4779
4780
4781
4782 [<a name="#p103" href="p103">page 103</a>] (<a href="#Contents">Contents</a>)
4783
4784 <a name="6.5.17" href="#6.5.17"><b>    6.5.17 Comma operator</b></a>
4785     Syntax
4786 1            expression:
4787                     assignment-expression
4788                     expression , assignment-expression
4789     Semantics
4790 2   The left operand of a comma operator is evaluated as a void expression; there is a
4791     sequence point between its evaluation and that of the right operand. Then the right
4792     operand is evaluated; the result has its type and value.113)
4793 3   EXAMPLE As indicated by the syntax, the comma operator (as described in this subclause) cannot
4794     appear in contexts where a comma is used to separate items in a list (such as arguments to functions or lists
4795     of initializers). On the other hand, it can be used within a parenthesized expression or within the second
4796     expression of a conditional operator in such contexts. In the function call
4797              f(a, (t=3, t+2), c)
4798     the function has three arguments, the second of which has the value 5.
4799
4800     Forward references: initialization (<a href="#6.7.9">6.7.9</a>).
4801
4802
4803
4804
4805     112) Where a pointer to an atomic object can be formed, this is equivalent to the following code sequence
4806          where T is the type of E1:
4807                   T tmp = E1;
4808                   T result;
4809                   do {
4810                         result = tmp op (E2);
4811                   } while (!atomic_compare_exchange_strong(&amp;E1, &amp;tmp, result));
4812           with result being the result of the operation.
4813     113) A comma operator does not yield an lvalue.
4814
4815 [<a name="#p104" href="p104">page 104</a>] (<a href="#Contents">Contents</a>)
4816
4817 <a name="6.6" href="#6.6"><b>    6.6 Constant expressions</b></a>
4818     Syntax
4819 1            constant-expression:
4820                     conditional-expression
4821     Description
4822 2   A constant expression can be evaluated during translation rather than runtime, and
4823     accordingly may be used in any place that a constant may be.
4824     Constraints
4825 3   Constant expressions shall not contain assignment, increment, decrement, function-call,
4826     or comma operators, except when they are contained within a subexpression that is not
4827     evaluated.114)
4828 4   Each constant expression shall evaluate to a constant that is in the range of representable
4829     values for its type.
4830     Semantics
4831 5   An expression that evaluates to a constant is required in several contexts. If a floating
4832     expression is evaluated in the translation environment, the arithmetic precision and range
4833     shall be at least as great as if the expression were being evaluated in the execution
4834     environment.115)
4835 6   An integer constant expression116) shall have integer type and shall only have operands
4836     that are integer constants, enumeration constants, character constants, sizeof
4837     expressions whose results are integer constants, and floating constants that are the
4838     immediate operands of casts. Cast operators in an integer constant expression shall only
4839     convert arithmetic types to integer types, except as part of an operand to the sizeof
4840     operator.
4841 7   More latitude is permitted for constant expressions in initializers. Such a constant
4842     expression shall be, or evaluate to, one of the following:
4843     -- an arithmetic constant expression,
4844
4845
4846
4847     114) The operand of a sizeof operator is usually not evaluated (<a href="#6.5.3.4">6.5.3.4</a>).
4848     115) The use of evaluation formats as characterized by FLT_EVAL_METHOD also applies to evaluation in
4849          the translation environment.
4850     116) An integer constant expression is required in a number of contexts such as the size of a bit-field
4851          member of a structure, the value of an enumeration constant, and the size of a non-variable length
4852          array. Further constraints that apply to the integer constant expressions used in conditional-inclusion
4853          preprocessing directives are discussed in <a href="#6.10.1">6.10.1</a>.
4854
4855 [<a name="#p105" href="p105">page 105</a>] (<a href="#Contents">Contents</a>)
4856
4857      -- a null pointer constant,
4858      -- an address constant, or
4859      -- an address constant for a complete object type plus or minus an integer constant
4860        expression.
4861 8    An arithmetic constant expression shall have arithmetic type and shall only have
4862      operands that are integer constants, floating constants, enumeration constants, character
4863      constants, and sizeof expressions. Cast operators in an arithmetic constant expression
4864      shall only convert arithmetic types to arithmetic types, except as part of an operand to a
4865      sizeof operator whose result is an integer constant.
4866 9    An address constant is a null pointer, a pointer to an lvalue designating an object of static
4867      storage duration, or a pointer to a function designator; it shall be created explicitly using
4868      the unary &amp; operator or an integer constant cast to pointer type, or implicitly by the use of
4869      an expression of array or function type. The array-subscript [] and member-access .
4870      and -&gt; operators, the address &amp; and indirection * unary operators, and pointer casts may
4871      be used in the creation of an address constant, but the value of an object shall not be
4872      accessed by use of these operators.
4873 10   An implementation may accept other forms of constant expressions.
4874 11   The semantic rules for the evaluation of a constant expression are the same as for
4875      nonconstant expressions.117)
4876      Forward references: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), initialization (<a href="#6.7.9">6.7.9</a>).
4877
4878
4879
4880
4881      117) Thus, in the following initialization,
4882                     static int i = 2 || 1 / 0;
4883            the expression is a valid integer constant expression with value one.
4884
4885 [<a name="#p106" href="p106">page 106</a>] (<a href="#Contents">Contents</a>)
4886
4887 <a name="6.7" href="#6.7"><b>    6.7 Declarations</b></a>
4888     Syntax
4889 1            declaration:
4890                     declaration-specifiers init-declarator-listopt ;
4891                     static_assert-declaration                                                      *
4892              declaration-specifiers:
4893                     storage-class-specifier declaration-specifiersopt
4894                     type-specifier declaration-specifiersopt
4895                     type-qualifier declaration-specifiersopt
4896                     function-specifier declaration-specifiersopt
4897                     alignment-specifier declaration-specifiersopt
4898              init-declarator-list:
4899                      init-declarator
4900                      init-declarator-list , init-declarator
4901              init-declarator:
4902                      declarator
4903                      declarator = initializer
4904     Constraints
4905 2   A declaration other than a static_assert declaration shall declare at least a declarator
4906     (other than the parameters of a function or the members of a structure or union), a tag, or
4907     the members of an enumeration.
4908 3   If an identifier has no linkage, there shall be no more than one declaration of the identifier
4909     (in a declarator or type specifier) with the same scope and in the same name space, except
4910     that a typedef name can be redefined to denote the same type as it currently does and tags
4911     may be redeclared as specified in <a href="#6.7.2.3">6.7.2.3</a>.
4912 4   All declarations in the same scope that refer to the same object or function shall specify
4913     compatible types.
4914     Semantics
4915 5   A declaration specifies the interpretation and attributes of a set of identifiers. A definition
4916     of an identifier is a declaration for that identifier that:
4917     -- for an object, causes storage to be reserved for that object;
4918     -- for a function, includes the function body;118)
4919
4920
4921
4922     118) Function definitions have a different syntax, described in <a href="#6.9.1">6.9.1</a>.
4923
4924 [<a name="#p107" href="p107">page 107</a>] (<a href="#Contents">Contents</a>)
4925
4926     -- for an enumeration constant or typedef name, is the (only) declaration of the
4927       identifier.
4928 6   The declaration specifiers consist of a sequence of specifiers that indicate the linkage,
4929     storage duration, and part of the type of the entities that the declarators denote. The init-
4930     declarator-list is a comma-separated sequence of declarators, each of which may have
4931     additional type information, or an initializer, or both. The declarators contain the
4932     identifiers (if any) being declared.
4933 7   If an identifier for an object is declared with no linkage, the type for the object shall be *
4934     complete by the end of its declarator, or by the end of its init-declarator if it has an
4935     initializer; in the case of function parameters (including in prototypes), it is the adjusted
4936     type (see <a href="#6.7.6.3">6.7.6.3</a>) that is required to be complete.
4937     Forward references: declarators (<a href="#6.7.6">6.7.6</a>), enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), initialization
4938     (<a href="#6.7.9">6.7.9</a>), type names (<a href="#6.7.7">6.7.7</a>), type qualifiers (<a href="#6.7.3">6.7.3</a>).
4939 <a name="6.7.1" href="#6.7.1"><b>    6.7.1 Storage-class specifiers</b></a>
4940     Syntax
4941 1            storage-class-specifier:
4942                     typedef
4943                     extern
4944                     static
4945                     _Thread_local
4946                     auto
4947                     register
4948     Constraints
4949 2   At most, one storage-class specifier may be given in the declaration specifiers in a
4950     declaration, except that _Thread_local may appear with static or extern.119)
4951 3   In the declaration of an object with block scope, if the declaration specifiers include
4952     _Thread_local, they shall also include either static or extern. If
4953     _Thread_local appears in any declaration of an object, it shall be present in every
4954     declaration of that object.
4955     Semantics
4956 4   The typedef specifier is called a ''storage-class specifier'' for syntactic convenience
4957     only; it is discussed in <a href="#6.7.8">6.7.8</a>. The meanings of the various linkages and storage durations
4958     were discussed in <a href="#6.2.2">6.2.2</a> and <a href="#6.2.4">6.2.4</a>.
4959
4960
4961
4962     119) See ''future language directions'' (<a href="#6.11.5">6.11.5</a>).
4963
4964 [<a name="#p108" href="p108">page 108</a>] (<a href="#Contents">Contents</a>)
4965
4966 5   A declaration of an identifier for an object with storage-class specifier register
4967     suggests that access to the object be as fast as possible. The extent to which such
4968     suggestions are effective is implementation-defined.120)
4969 6   The declaration of an identifier for a function that has block scope shall have no explicit
4970     storage-class specifier other than extern.
4971 7   If an aggregate or union object is declared with a storage-class specifier other than
4972     typedef, the properties resulting from the storage-class specifier, except with respect to
4973     linkage, also apply to the members of the object, and so on recursively for any aggregate
4974     or union member objects.
4975     Forward references: type definitions (<a href="#6.7.8">6.7.8</a>).
4976 <a name="6.7.2" href="#6.7.2"><b>    6.7.2 Type specifiers</b></a>
4977     Syntax
4978 1            type-specifier:
4979                     void
4980                     char
4981                     short
4982                     int
4983                     long
4984                     float
4985                     double
4986                     signed
4987                     unsigned
4988                     _Bool
4989                     _Complex
4990                     _Atomic ( type-name )
4991                     struct-or-union-specifier
4992                     enum-specifier
4993                     typedef-name
4994     Constraints
4995 2   At least one type specifier shall be given in the declaration specifiers in each declaration,
4996     and in the specifier-qualifier list in each struct declaration and type name. Each list of
4997
4998
4999     120) The implementation may treat any register declaration simply as an auto declaration. However,
5000          whether or not addressable storage is actually used, the address of any part of an object declared with
5001          storage-class specifier register cannot be computed, either explicitly (by use of the unary &amp;
5002          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
5003          <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
5004          register is sizeof.
5005
5006 [<a name="#p109" href="p109">page 109</a>] (<a href="#Contents">Contents</a>)
5007
5008     type specifiers shall be one of the following multisets (delimited by commas, when there
5009     is more than one multiset per item); the type specifiers may occur in any order, possibly
5010     intermixed with the other declaration specifiers.
5011     -- void
5012     -- char
5013     -- signed char
5014     -- unsigned char
5015     -- short, signed short, short int, or signed short int
5016     -- unsigned short, or unsigned short int
5017     -- int, signed, or signed int
5018     -- unsigned, or unsigned int
5019     -- long, signed long, long int, or signed long int
5020     -- unsigned long, or unsigned long int
5021     -- long long, signed long long, long long int, or
5022       signed long long int
5023     -- unsigned long long, or unsigned long long int
5024     -- float
5025     -- double
5026     -- long double
5027     -- _Bool
5028     -- float _Complex
5029     -- double _Complex
5030     -- long double _Complex
5031     -- _Atomic ( type-name )
5032     -- struct or union specifier
5033     -- enum specifier
5034     -- typedef name
5035 3   The type specifier _Complex shall not be used if the implementation does not support
5036     complex types; likewise, _Atomic shall not be used if the implementation does not
5037     support atomic types (see <a href="#6.10.8.3">6.10.8.3</a>).
5038
5039
5040
5041 [<a name="#p110" href="p110">page 110</a>] (<a href="#Contents">Contents</a>)
5042
5043     Semantics
5044 4   The _Atomic form of type specifier designates the _Atomic-qualified version of the
5045     named type.
5046 5   Specifiers for structures, unions, and enumerations are discussed in <a href="#6.7.2.1">6.7.2.1</a> through
5047 <a name="6.7.2.3" href="#6.7.2.3"><b>    6.7.2.3. Declarations of typedef names are discussed in 6.7.8. The characteristics of the</b></a>
5048     other types are discussed in <a href="#6.2.5">6.2.5</a>.
5049 6   Each of the comma-separated multisets designates the same type, except that for bit-
5050     fields, it is implementation-defined whether the specifier int designates the same type as
5051     signed int or the same type as unsigned int.
5052     Forward references: enumeration specifiers (<a href="#6.7.2.2">6.7.2.2</a>), structure and union specifiers
5053     (<a href="#6.7.2.1">6.7.2.1</a>), tags (<a href="#6.7.2.3">6.7.2.3</a>), type definitions (<a href="#6.7.8">6.7.8</a>).
5054 <a name="6.7.2.1" href="#6.7.2.1"><b>    6.7.2.1 Structure and union specifiers</b></a>
5055     Syntax
5056 1            struct-or-union-specifier:
5057                      struct-or-union identifieropt { struct-declaration-list }
5058                      struct-or-union identifier
5059              struct-or-union:
5060                      struct
5061                      union
5062              struct-declaration-list:
5063                      struct-declaration
5064                      struct-declaration-list struct-declaration
5065              struct-declaration:
5066                      specifier-qualifier-list struct-declarator-listopt ;
5067                      static_assert-declaration
5068              specifier-qualifier-list:
5069                     type-specifier specifier-qualifier-listopt
5070                     type-qualifier specifier-qualifier-listopt
5071              struct-declarator-list:
5072                      struct-declarator
5073                      struct-declarator-list , struct-declarator
5074              struct-declarator:
5075                      declarator
5076                      declaratoropt : constant-expression
5077
5078
5079
5080 [<a name="#p111" href="p111">page 111</a>] (<a href="#Contents">Contents</a>)
5081
5082     Constraints
5083 2   A struct-declaration that does not declare an anonymous structure or anonymous union
5084     shall contain a struct-declarator-list.
5085 3   A structure or union shall not contain a member with incomplete or function type (hence,
5086     a structure shall not contain an instance of itself, but may contain a pointer to an instance
5087     of itself), except that the last member of a structure with more than one named member
5088     may have incomplete array type; such a structure (and any union containing, possibly
5089     recursively, a member that is such a structure) shall not be a member of a structure or an
5090     element of an array.
5091 4   The expression that specifies the width of a bit-field shall be an integer constant
5092     expression with a nonnegative value that does not exceed the width of an object of the
5093     type that would be specified were the colon and expression omitted.121) If the value is
5094     zero, the declaration shall have no declarator.
5095 5   A bit-field shall have a type that is a qualified or unqualified version of _Bool, signed
5096     int, unsigned int, or some other implementation-defined type.
5097     Semantics
5098 6   As discussed in <a href="#6.2.5">6.2.5</a>, a structure is a type consisting of a sequence of members, whose
5099     storage is allocated in an ordered sequence, and a union is a type consisting of a sequence
5100     of members whose storage overlap.
5101 7   Structure and union specifiers have the same form. The keywords struct and union
5102     indicate that the type being specified is, respectively, a structure type or a union type.
5103 8   The presence of a struct-declaration-list in a struct-or-union-specifier declares a new type,
5104     within a translation unit. The struct-declaration-list is a sequence of declarations for the
5105     members of the structure or union. If the struct-declaration-list contains no named
5106     members, no anonymous structures, and no anonymous unions, the behavior is undefined.
5107     The type is incomplete until immediately after the } that terminates the list, and complete
5108     thereafter.
5109 9   A member of a structure or union may have any complete object type other than a
5110     variably modified type.122) In addition, a member may be declared to consist of a
5111     specified number of bits (including a sign bit, if any). Such a member is called a
5112     bit-field;123) its width is preceded by a colon.
5113
5114
5115
5116     121) While the number of bits in a _Bool object is at least CHAR_BIT, the width (number of sign and
5117          value bits) of a _Bool may be just 1 bit.
5118     122) A structure or union cannot contain a member with a variably modified type because member names
5119          are not ordinary identifiers as defined in <a href="#6.2.3">6.2.3</a>.
5120
5121 [<a name="#p112" href="p112">page 112</a>] (<a href="#Contents">Contents</a>)
5122
5123 10   A bit-field is interpreted as a signed or unsigned integer type consisting of the specified
5124      number of bits.124) If the value 0 or 1 is stored into a nonzero-width bit-field of type
5125      _Bool, the value of the bit-field shall compare equal to the value stored; a _Bool bit-
5126      field has the semantics of a _Bool.
5127 11   An implementation may allocate any addressable storage unit large enough to hold a bit-
5128      field. If enough space remains, a bit-field that immediately follows another bit-field in a
5129      structure shall be packed into adjacent bits of the same unit. If insufficient space remains,
5130      whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is
5131      implementation-defined. The order of allocation of bit-fields within a unit (high-order to
5132      low-order or low-order to high-order) is implementation-defined. The alignment of the
5133      addressable storage unit is unspecified.
5134 12   A bit-field declaration with no declarator, but only a colon and a width, indicates an
5135      unnamed bit-field.125) As a special case, a bit-field structure member with a width of 0
5136      indicates that no further bit-field is to be packed into the unit in which the previous bit-
5137      field, if any, was placed.
5138 13   An unnamed member of structure type with no tag is called an anonymous structure; an
5139      unnamed member of union type with no tag is called an anonymous union. The members
5140      of an anonymous structure or union are considered to be members of the containing
5141      structure or union. This applies recursively if the containing structure or union is also
5142      anonymous.
5143 14   Each non-bit-field member of a structure or union object is aligned in an implementation-
5144      defined manner appropriate to its type.
5145 15   Within a structure object, the non-bit-field members and the units in which bit-fields
5146      reside have addresses that increase in the order in which they are declared. A pointer to a
5147      structure object, suitably converted, points to its initial member (or if that member is a
5148      bit-field, then to the unit in which it resides), and vice versa. There may be unnamed
5149      padding within a structure object, but not at its beginning.
5150 16   The size of a union is sufficient to contain the largest of its members. The value of at
5151      most one of the members can be stored in a union object at any time. A pointer to a
5152      union object, suitably converted, points to each of its members (or if a member is a bit-
5153      field, then to the unit in which it resides), and vice versa.
5154
5155
5156      123) The unary &amp; (address-of) operator cannot be applied to a bit-field object; thus, there are no pointers to
5157           or arrays of bit-field objects.
5158      124) 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,
5159           then it is implementation-defined whether the bit-field is signed or unsigned.
5160      125) An unnamed bit-field structure member is useful for padding to conform to externally imposed
5161           layouts.
5162
5163 [<a name="#p113" href="p113">page 113</a>] (<a href="#Contents">Contents</a>)
5164
5165 17   There may be unnamed padding at the end of a structure or union.
5166 18   As a special case, the last element of a structure with more than one named member may
5167      have an incomplete array type; this is called a flexible array member. In most situations,
5168      the flexible array member is ignored. In particular, the size of the structure is as if the
5169      flexible array member were omitted except that it may have more trailing padding than
5170      the omission would imply. However, when a . (or -&gt;) operator has a left operand that is
5171      (a pointer to) a structure with a flexible array member and the right operand names that
5172      member, it behaves as if that member were replaced with the longest array (with the same
5173      element type) that would not make the structure larger than the object being accessed; the
5174      offset of the array shall remain that of the flexible array member, even if this would differ
5175      from that of the replacement array. If this array would have no elements, it behaves as if
5176      it had one element but the behavior is undefined if any attempt is made to access that
5177      element or to generate a pointer one past it.
5178 19   EXAMPLE 1       The following illustrates anonymous structures and unions:
5179               struct v {
5180                     union {      // anonymous union
5181                            struct { int i, j; };    // anonymous structure
5182                            struct { long k, l; } w;
5183                     };
5184                     int m;
5185               } v1;
5186               v1.i = 2;   // valid
5187               v1.k = 3;   // invalid: inner structure is not anonymous
5188               v1.w.k = 5; // valid
5189
5190 20   EXAMPLE 2       After the declaration:
5191               struct s { int n; double d[]; };
5192      the structure struct s has a flexible array member d. A typical way to use this is:
5193               int m = /* some value */;
5194               struct s *p = malloc(sizeof (struct s) + sizeof (double [m]));
5195      and assuming that the call to malloc succeeds, the object pointed to by p behaves, for most purposes, as if
5196      p had been declared as:
5197               struct { int n; double d[m]; } *p;
5198      (there are circumstances in which this equivalence is broken; in particular, the offsets of member d might
5199      not be the same).
5200 21   Following the above declaration:
5201               struct s t1 = { 0 };                         //   valid
5202               struct s t2 = { 1, { <a href="#4.2">4.2</a> }};                 //   invalid
5203               t1.n = 4;                                    //   valid
5204               t1.d[0] = <a href="#4.2">4.2</a>;                               //   might be undefined behavior
5205      The initialization of t2 is invalid (and violates a constraint) because struct s is treated as if it did not
5206      contain member d. The assignment to t1.d[0] is probably undefined behavior, but it is possible that
5207
5208 [<a name="#p114" href="p114">page 114</a>] (<a href="#Contents">Contents</a>)
5209
5210               sizeof (struct s) &gt;= offsetof(struct s, d) + sizeof (double)
5211      in which case the assignment would be legitimate. Nevertheless, it cannot appear in strictly conforming
5212      code.
5213 22   After the further declaration:
5214               struct ss { int n; };
5215      the expressions:
5216               sizeof (struct s) &gt;= sizeof (struct ss)
5217               sizeof (struct s) &gt;= offsetof(struct s, d)
5218      are always equal to 1.
5219 23   If sizeof (double) is 8, then after the following code is executed:
5220               struct s *s1;
5221               struct s *s2;
5222               s1 = malloc(sizeof (struct s) + 64);
5223               s2 = malloc(sizeof (struct s) + 46);
5224      and assuming that the calls to malloc succeed, the objects pointed to by s1 and s2 behave, for most
5225      purposes, as if the identifiers had been declared as:
5226               struct { int n; double d[8]; } *s1;
5227               struct { int n; double d[5]; } *s2;
5228 24   Following the further successful assignments:
5229               s1 = malloc(sizeof (struct s) + 10);
5230               s2 = malloc(sizeof (struct s) + 6);
5231      they then behave as if the declarations were:
5232               struct { int n; double d[1]; } *s1, *s2;
5233      and:
5234               double *dp;
5235               dp = &amp;(s1-&gt;d[0]);          //   valid
5236               *dp = 42;                  //   valid
5237               dp = &amp;(s2-&gt;d[0]);          //   valid
5238               *dp = 42;                  //   undefined behavior
5239 25   The assignment:
5240               *s1 = *s2;
5241      only copies the member n; if any of the array elements are within the first sizeof (struct s) bytes
5242      of the structure, they might be copied or simply overwritten with indeterminate values.
5243
5244      Forward references: declarators (<a href="#6.7.6">6.7.6</a>), tags (<a href="#6.7.2.3">6.7.2.3</a>).
5245
5246
5247
5248
5249 [<a name="#p115" href="p115">page 115</a>] (<a href="#Contents">Contents</a>)
5250
5251 <a name="6.7.2.2" href="#6.7.2.2"><b>    6.7.2.2 Enumeration specifiers</b></a>
5252     Syntax
5253 1            enum-specifier:
5254                    enum identifieropt { enumerator-list }
5255                    enum identifieropt { enumerator-list , }
5256                    enum identifier
5257              enumerator-list:
5258                    enumerator
5259                    enumerator-list , enumerator
5260              enumerator:
5261                    enumeration-constant
5262                    enumeration-constant = constant-expression
5263     Constraints
5264 2   The expression that defines the value of an enumeration constant shall be an integer
5265     constant expression that has a value representable as an int.
5266     Semantics
5267 3   The identifiers in an enumerator list are declared as constants that have type int and
5268     may appear wherever such are permitted.126) An enumerator with = defines its
5269     enumeration constant as the value of the constant expression. If the first enumerator has
5270     no =, the value of its enumeration constant is 0. Each subsequent enumerator with no =
5271     defines its enumeration constant as the value of the constant expression obtained by
5272     adding 1 to the value of the previous enumeration constant. (The use of enumerators with
5273     = may produce enumeration constants with values that duplicate other values in the same
5274     enumeration.) The enumerators of an enumeration are also known as its members.
5275 4   Each enumerated type shall be compatible with char, a signed integer type, or an
5276     unsigned integer type. The choice of type is implementation-defined,127) but shall be
5277     capable of representing the values of all the members of the enumeration. The
5278     enumerated type is incomplete until immediately after the } that terminates the list of
5279     enumerator declarations, and complete thereafter.
5280
5281
5282
5283
5284     126) Thus, the identifiers of enumeration constants declared in the same scope shall all be distinct from
5285          each other and from other identifiers declared in ordinary declarators.
5286     127) An implementation may delay the choice of which integer type until all enumeration constants have
5287          been seen.
5288
5289 [<a name="#p116" href="p116">page 116</a>] (<a href="#Contents">Contents</a>)
5290
5291 5   EXAMPLE       The following fragment:
5292              enum hue { chartreuse, burgundy, claret=20, winedark };
5293              enum hue col, *cp;
5294              col = claret;
5295              cp = &amp;col;
5296              if (*cp != burgundy)
5297                    /* ... */
5298     makes hue the tag of an enumeration, and then declares col as an object that has that type and cp as a
5299     pointer to an object that has that type. The enumerated values are in the set { 0, 1, 20, 21 }.
5300
5301     Forward references: tags (<a href="#6.7.2.3">6.7.2.3</a>).
5302 <a name="6.7.2.3" href="#6.7.2.3"><b>    6.7.2.3 Tags</b></a>
5303     Constraints
5304 1   A specific type shall have its content defined at most once.
5305 2   Where two declarations that use the same tag declare the same type, they shall both use
5306     the same choice of struct, union, or enum.
5307 3   A type specifier of the form
5308             enum identifier
5309     without an enumerator list shall only appear after the type it specifies is complete.
5310     Semantics
5311 4   All declarations of structure, union, or enumerated types that have the same scope and
5312     use the same tag declare the same type. Irrespective of whether there is a tag or what
5313     other declarations of the type are in the same translation unit, the type is incomplete128)
5314     until immediately after the closing brace of the list defining the content, and complete
5315     thereafter.
5316 5   Two declarations of structure, union, or enumerated types which are in different scopes or
5317     use different tags declare distinct types. Each declaration of a structure, union, or
5318     enumerated type which does not include a tag declares a distinct type.
5319 6   A type specifier of the form
5320
5321
5322
5323
5324     128) An incomplete type may only by used when the size of an object of that type is not needed. It is not
5325          needed, for example, when a typedef name is declared to be a specifier for a structure or union, or
5326          when a pointer to or a function returning a structure or union is being declared. (See incomplete types
5327          in <a href="#6.2.5">6.2.5</a>.) The specification has to be complete before such a function is called or defined.
5328
5329 [<a name="#p117" href="p117">page 117</a>] (<a href="#Contents">Contents</a>)
5330
5331               struct-or-union identifieropt { struct-declaration-list }
5332      or
5333               enum identifieropt { enumerator-list }
5334      or
5335               enum identifieropt { enumerator-list , }
5336      declares a structure, union, or enumerated type. The list defines the structure content,
5337      union content, or enumeration content. If an identifier is provided,129) the type specifier
5338      also declares the identifier to be the tag of that type.
5339 7    A declaration of the form
5340               struct-or-union identifier ;
5341      specifies a structure or union type and declares the identifier as a tag of that type.130)
5342 8    If a type specifier of the form
5343               struct-or-union identifier
5344      occurs other than as part of one of the above forms, and no other declaration of the
5345      identifier as a tag is visible, then it declares an incomplete structure or union type, and
5346      declares the identifier as the tag of that type.130)
5347 9    If a type specifier of the form
5348               struct-or-union identifier
5349      or
5350               enum identifier
5351      occurs other than as part of one of the above forms, and a declaration of the identifier as a
5352      tag is visible, then it specifies the same type as that other declaration, and does not
5353      redeclare the tag.
5354 10   EXAMPLE 1       This mechanism allows declaration of a self-referential structure.
5355               struct tnode {
5356                     int count;
5357                     struct tnode *left, *right;
5358               };
5359      specifies a structure that contains an integer and two pointers to objects of the same type. Once this
5360      declaration has been given, the declaration
5361
5362
5363
5364
5365      129) If there is no identifier, the type can, within the translation unit, only be referred to by the declaration
5366           of which it is a part. Of course, when the declaration is of a typedef name, subsequent declarations
5367           can make use of that typedef name to declare objects having the specified structure, union, or
5368           enumerated type.
5369      130) A similar construction with enum does not exist.
5370
5371 [<a name="#p118" href="p118">page 118</a>] (<a href="#Contents">Contents</a>)
5372
5373               struct tnode s, *sp;
5374      declares s to be an object of the given type and sp to be a pointer to an object of the given type. With
5375      these declarations, the expression sp-&gt;left refers to the left struct tnode pointer of the object to
5376      which sp points; the expression s.right-&gt;count designates the count member of the right struct
5377      tnode pointed to from s.
5378 11   The following alternative formulation uses the typedef mechanism:
5379               typedef struct tnode TNODE;
5380               struct tnode {
5381                     int count;
5382                     TNODE *left, *right;
5383               };
5384               TNODE s, *sp;
5385
5386 12   EXAMPLE 2 To illustrate the use of prior declaration of a tag to specify a pair of mutually referential
5387      structures, the declarations
5388               struct s1 { struct s2 *s2p; /* ... */ }; // D1
5389               struct s2 { struct s1 *s1p; /* ... */ }; // D2
5390      specify a pair of structures that contain pointers to each other. Note, however, that if s2 were already
5391      declared as a tag in an enclosing scope, the declaration D1 would refer to it, not to the tag s2 declared in
5392      D2. To eliminate this context sensitivity, the declaration
5393               struct s2;
5394      may be inserted ahead of D1. This declares a new tag s2 in the inner scope; the declaration D2 then
5395      completes the specification of the new type.
5396
5397      Forward references: declarators (<a href="#6.7.6">6.7.6</a>), type definitions (<a href="#6.7.8">6.7.8</a>).
5398 <a name="6.7.3" href="#6.7.3"><b>     6.7.3 Type qualifiers</b></a>
5399      Syntax
5400 1             type-qualifier:
5401                      const
5402                      restrict
5403                      volatile
5404                      _Atomic
5405      Constraints
5406 2    Types other than pointer types whose referenced type is an object type shall not be
5407      restrict-qualified.
5408      Semantics
5409 3    The properties associated with qualified types are meaningful only for expressions that
5410      are lvalues.131)
5411 4    If the same qualifier appears more than once in the same specifier-qualifier-list, either
5412      directly or via one or more typedefs, the behavior is the same as if it appeared only
5413      once.
5414 [<a name="#p119" href="p119">page 119</a>] (<a href="#Contents">Contents</a>)
5415
5416 5   If an attempt is made to modify an object defined with a const-qualified type through use
5417     of an lvalue with non-const-qualified type, the behavior is undefined. If an attempt is
5418     made to refer to an object defined with a volatile-qualified type through use of an lvalue
5419     with non-volatile-qualified type, the behavior is undefined.132) If an attempt is made to
5420     refer to an object defined with an _Atomic-qualified type through use of an lvalue with
5421     non-_Atomic-qualified type, the behavior is undefined.
5422 6   An object that has volatile-qualified type may be modified in ways unknown to the
5423     implementation or have other unknown side effects. Therefore any expression referring
5424     to such an object shall be evaluated strictly according to the rules of the abstract machine,
5425     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
5426     object shall agree with that prescribed by the abstract machine, except as modified by the
5427     unknown factors mentioned previously.133) What constitutes an access to an object that
5428     has volatile-qualified type is implementation-defined.
5429 7   An object that is accessed through a restrict-qualified pointer has a special association
5430     with that pointer. This association, defined in <a href="#6.7.3.1">6.7.3.1</a> below, requires that all accesses to
5431     that object use, directly or indirectly, the value of that particular pointer.134) The intended
5432     use of the restrict qualifier (like the register storage class) is to promote
5433     optimization, and deleting all instances of the qualifier from all preprocessing translation
5434     units composing a conforming program does not change its meaning (i.e., observable
5435     behavior).
5436 8   If the specification of an array type includes any type qualifiers, the element type is so-
5437     qualified, not the array type. If the specification of a function type includes any type
5438     qualifiers, the behavior is undefined.135)
5439 9   For two qualified types to be compatible, both shall have the identically qualified version
5440     of a compatible type; the order of type qualifiers within a list of specifiers or qualifiers
5441     does not affect the specified type.
5442
5443     131) The implementation may place a const object that is not volatile in a read-only region of
5444          storage. Moreover, the implementation need not allocate storage for such an object if its address is
5445          never used.
5446     132) This applies to those objects that behave as if they were defined with qualified types, even if they are
5447          never actually defined as objects in the program (such as an object at a memory-mapped input/output
5448          address).
5449     133) A volatile declaration may be used to describe an object corresponding to a memory-mapped
5450          input/output port or an object accessed by an asynchronously interrupting function. Actions on
5451          objects so declared shall not be ''optimized out'' by an implementation or reordered except as
5452          permitted by the rules for evaluating expressions.
5453     134) For example, a statement that assigns a value returned by malloc to a single pointer establishes this
5454          association between the allocated object and the pointer.
5455     135) Both of these can occur through the use of typedefs.
5456
5457 [<a name="#p120" href="p120">page 120</a>] (<a href="#Contents">Contents</a>)
5458
5459 10   EXAMPLE 1      An object declared
5460              extern const volatile int real_time_clock;
5461      may be modifiable by hardware, but cannot be assigned to, incremented, or decremented.
5462
5463 11   EXAMPLE 2 The following declarations and expressions illustrate the behavior when type qualifiers
5464      modify an aggregate type:
5465              const struct s { int mem; } cs = { 1 };
5466              struct s ncs; // the object ncs is modifiable
5467              typedef int A[2][3];
5468              const A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of const int
5469              int *pi;
5470              const int *pci;
5471              ncs = cs;             //    valid
5472              cs = ncs;             //    violates modifiable lvalue constraint for =
5473              pi = &amp;ncs.mem;        //    valid
5474              pi = &amp;cs.mem;         //    violates type constraints for =
5475              pci = &amp;cs.mem;        //    valid
5476              pi = a[0];            //    invalid: a[0] has type ''const int *''
5477
5478 <a name="6.7.3.1" href="#6.7.3.1"><b>     6.7.3.1 Formal definition of restrict</b></a>
5479 1    Let D be a declaration of an ordinary identifier that provides a means of designating an
5480      object P as a restrict-qualified pointer to type T.
5481 2    If D appears inside a block and does not have storage class extern, let B denote the
5482      block. If D appears in the list of parameter declarations of a function definition, let B
5483      denote the associated block. Otherwise, let B denote the block of main (or the block of
5484      whatever function is called at program startup in a freestanding environment).
5485 3    In what follows, a pointer expression E is said to be based on object P if (at some
5486      sequence point in the execution of B prior to the evaluation of E) modifying P to point to
5487      a copy of the array object into which it formerly pointed would change the value of E.136)
5488      Note that ''based'' is defined only for expressions with pointer types.
5489 4    During each execution of B, let L be any lvalue that has &amp;L based on P. If L is used to
5490      access the value of the object X that it designates, and X is also modified (by any means),
5491      then the following requirements apply: T shall not be const-qualified. Every other lvalue
5492      used to access the value of X shall also have its address based on P. Every access that
5493      modifies X shall be considered also to modify P, for the purposes of this subclause. If P
5494      is assigned the value of a pointer expression E that is based on another restricted pointer
5495      object P2, associated with block B2, then either the execution of B2 shall begin before
5496
5497
5498      136) In other words, E depends on the value of P itself rather than on the value of an object referenced
5499           indirectly through P. For example, if identifier p has type (int **restrict), then the pointer
5500           expressions p and p+1 are based on the restricted pointer object designated by p, but the pointer
5501           expressions *p and p[1] are not.
5502
5503 [<a name="#p121" href="p121">page 121</a>] (<a href="#Contents">Contents</a>)
5504
5505      the execution of B, or the execution of B2 shall end prior to the assignment. If these
5506      requirements are not met, then the behavior is undefined.
5507 5    Here an execution of B means that portion of the execution of the program that would
5508      correspond to the lifetime of an object with scalar type and automatic storage duration
5509      associated with B.
5510 6    A translator is free to ignore any or all aliasing implications of uses of restrict.
5511 7    EXAMPLE 1       The file scope declarations
5512              int * restrict a;
5513              int * restrict b;
5514              extern int c[];
5515      assert that if an object is accessed using one of a, b, or c, and that object is modified anywhere in the
5516      program, then it is never accessed using either of the other two.
5517
5518 8    EXAMPLE 2       The function parameter declarations in the following example
5519              void f(int n, int * restrict p, int * restrict q)
5520              {
5521                    while (n-- &gt; 0)
5522                          *p++ = *q++;
5523              }
5524      assert that, during each execution of the function, if an object is accessed through one of the pointer
5525      parameters, then it is not also accessed through the other.
5526 9    The benefit of the restrict qualifiers is that they enable a translator to make an effective dependence
5527      analysis of function f without examining any of the calls of f in the program. The cost is that the
5528      programmer has to examine all of those calls to ensure that none give undefined behavior. For example, the
5529      second call of f in g has undefined behavior because each of d[1] through d[49] is accessed through
5530      both p and q.
5531               void g(void)
5532               {
5533                     extern int d[100];
5534                     f(50, d + 50, d); // valid
5535                     f(50, d + 1, d); // undefined behavior
5536               }
5537
5538 10   EXAMPLE 3       The function parameter declarations
5539              void h(int n, int * restrict p, int * restrict q, int * restrict r)
5540              {
5541                    int i;
5542                    for (i = 0; i &lt; n; i++)
5543                           p[i] = q[i] + r[i];
5544              }
5545      illustrate how an unmodified object can be aliased through two restricted pointers. In particular, if a and b
5546      are disjoint arrays, a call of the form h(100, a, b, b) has defined behavior, because array b is not
5547      modified within function h.
5548
5549 11   EXAMPLE 4 The rule limiting assignments between restricted pointers does not distinguish between a
5550      function call and an equivalent nested block. With one exception, only ''outer-to-inner'' assignments
5551
5552 [<a name="#p122" href="p122">page 122</a>] (<a href="#Contents">Contents</a>)
5553
5554      between restricted pointers declared in nested blocks have defined behavior.
5555               {
5556                        int * restrict p1;
5557                        int * restrict q1;
5558                        p1 = q1; // undefined behavior
5559                        {
5560                              int * restrict p2 = p1; // valid
5561                              int * restrict q2 = q1; // valid
5562                              p1 = q2;                // undefined behavior
5563                              p2 = q2;                // undefined behavior
5564                        }
5565               }
5566 12   The one exception allows the value of a restricted pointer to be carried out of the block in which it (or, more
5567      precisely, the ordinary identifier used to designate it) is declared when that block finishes execution. For
5568      example, this permits new_vector to return a vector.
5569               typedef struct { int n; float * restrict v; } vector;
5570               vector new_vector(int n)
5571               {
5572                     vector t;
5573                     t.n = n;
5574                     t.v = malloc(n * sizeof (float));
5575                     return t;
5576               }
5577
5578 <a name="6.7.4" href="#6.7.4"><b>     6.7.4 Function specifiers</b></a>
5579      Syntax
5580 1             function-specifier:
5581                      inline
5582                      _Noreturn
5583      Constraints
5584 2    Function specifiers shall be used only in the declaration of an identifier for a function.
5585 3    An inline definition of a function with external linkage shall not contain a definition of a
5586      modifiable object with static or thread storage duration, and shall not contain a reference
5587      to an identifier with internal linkage.
5588 4    In a hosted environment, no function specifier(s) shall appear in a declaration of main.
5589      Semantics
5590 5    A function specifier may appear more than once; the behavior is the same as if it
5591      appeared only once.
5592 6    A function declared with an inline function specifier is an inline function. Making a
5593      function an inline function suggests that calls to the function be as fast as possible.137)
5594      The extent to which such suggestions are effective is implementation-defined.138)
5595
5596 [<a name="#p123" href="p123">page 123</a>] (<a href="#Contents">Contents</a>)
5597
5598 7    Any function with internal linkage can be an inline function. For a function with external
5599      linkage, the following restrictions apply: If a function is declared with an inline
5600      function specifier, then it shall also be defined in the same translation unit. If all of the
5601      file scope declarations for a function in a translation unit include the inline function
5602      specifier without extern, then the definition in that translation unit is an inline
5603      definition. An inline definition does not provide an external definition for the function,
5604      and does not forbid an external definition in another translation unit. An inline definition
5605      provides an alternative to an external definition, which a translator may use to implement
5606      any call to the function in the same translation unit. It is unspecified whether a call to the
5607      function uses the inline definition or the external definition.139)
5608 8    A function declared with a _Noreturn function specifier shall not return to its caller.
5609      Recommended practice
5610 9    The implementation should produce a diagnostic message for a function declared with a
5611      _Noreturn function specifier that appears to be capable of returning to its caller.
5612 10   EXAMPLE 1 The declaration of an inline function with external linkage can result in either an external
5613      definition, or a definition available for use only within the translation unit. A file scope declaration with
5614      extern creates an external definition. The following example shows an entire translation unit.
5615               inline double fahr(double t)
5616               {
5617                     return (<a href="#9.0">9.0</a> * t) / <a href="#5.0">5.0</a> + 32.0;
5618               }
5619               inline double cels(double t)
5620               {
5621                     return (<a href="#5.0">5.0</a> * (t - 32.0)) / <a href="#9.0">9.0</a>;
5622               }
5623               extern double fahr(double);                  // creates an external definition
5624
5625
5626
5627
5628      137) By using, for example, an alternative to the usual function call mechanism, such as ''inline
5629           substitution''. Inline substitution is not textual substitution, nor does it create a new function.
5630           Therefore, for example, the expansion of a macro used within the body of the function uses the
5631           definition it had at the point the function body appears, and not where the function is called; and
5632           identifiers refer to the declarations in scope where the body occurs. Likewise, the function has a
5633           single address, regardless of the number of inline definitions that occur in addition to the external
5634           definition.
5635      138) For example, an implementation might never perform inline substitution, or might only perform inline
5636           substitutions to calls in the scope of an inline declaration.
5637      139) Since an inline definition is distinct from the corresponding external definition and from any other
5638           corresponding inline definitions in other translation units, all corresponding objects with static storage
5639           duration are also distinct in each of the definitions.
5640
5641 [<a name="#p124" href="p124">page 124</a>] (<a href="#Contents">Contents</a>)
5642
5643               double convert(int is_fahr, double temp)
5644               {
5645                     /* A translator may perform inline substitutions */
5646                     return is_fahr ? cels(temp) : fahr(temp);
5647               }
5648 11   Note that the definition of fahr is an external definition because fahr is also declared with extern, but
5649      the definition of cels is an inline definition. Because cels has external linkage and is referenced, an
5650      external definition has to appear in another translation unit (see <a href="#6.9">6.9</a>); the inline definition and the external
5651      definition are distinct and either may be used for the call.
5652
5653 12   EXAMPLE 2
5654               _Noreturn void f () {
5655                     abort(); // ok
5656               }
5657               _Noreturn void g (int i) { // causes undefined behavior if i &lt;= 0
5658                     if (i &gt; 0) abort();
5659               }
5660
5661      Forward references: function definitions (<a href="#6.9.1">6.9.1</a>).
5662 <a name="6.7.5" href="#6.7.5"><b>     6.7.5 Alignment specifier</b></a>
5663      Syntax
5664 1             alignment-specifier:
5665                     _Alignas ( type-name )
5666                     _Alignas ( constant-expression )
5667      Constraints
5668 2    An alignment attribute shall not be specified in a declaration of a typedef, or a bit-field, or
5669      a function, or a parameter, or an object declared with the register storage-class
5670      specifier.
5671 3    The constant expression shall be an integer constant expression. It shall evaluate to a
5672      valid fundamental alignment, or to a valid extended alignment supported by the
5673      implementation in the context in which it appears, or to zero.
5674 4    The combined effect of all alignment attributes in a declaration shall not specify an
5675      alignment that is less strict than the alignment that would otherwise be required for the
5676      type of the object or field being declared.
5677      Semantics
5678 5    The first form is equivalent to _Alignas(alignof(type-name)).
5679 6    The alignment requirement of the declared object or field is taken to be the specified
5680      alignment. An alignment specification of zero has no effect.140) When multiple
5681      alignment specifiers occur in a declaration, the effective alignment requirement is the
5682      strictest specified alignment.
5683
5684 [<a name="#p125" href="p125">page 125</a>] (<a href="#Contents">Contents</a>)
5685
5686 7   If the definition of an object has an alignment specifier, any other declaration of that
5687     object shall either specify equivalent alignment or have no alignment specifier. If the
5688     definition of an object does not have an alignment specifier, any other declaration of that
5689     object shall also have no alignment specifier. If declarations of an object in different
5690     translation units have different alignment specifiers, the behavior is undefined.
5691 <a name="6.7.6" href="#6.7.6"><b>    6.7.6 Declarators</b></a>
5692     Syntax
5693 1            declarator:
5694                     pointeropt direct-declarator
5695              direct-declarator:
5696                      identifier
5697                      ( declarator )
5698                      direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
5699                      direct-declarator [ static type-qualifier-listopt assignment-expression ]
5700                      direct-declarator [ type-qualifier-list static assignment-expression ]
5701                      direct-declarator [ type-qualifier-listopt * ]
5702                      direct-declarator ( parameter-type-list )
5703                      direct-declarator ( identifier-listopt )
5704              pointer:
5705                     * type-qualifier-listopt
5706                     * type-qualifier-listopt pointer
5707              type-qualifier-list:
5708                     type-qualifier
5709                     type-qualifier-list type-qualifier
5710              parameter-type-list:
5711                    parameter-list
5712                    parameter-list , ...
5713              parameter-list:
5714                    parameter-declaration
5715                    parameter-list , parameter-declaration
5716              parameter-declaration:
5717                    declaration-specifiers declarator
5718                    declaration-specifiers abstract-declaratoropt
5719
5720
5721
5722     140) An alignment specification of zero also does not affect other alignment specifications in the same
5723          declaration.
5724
5725 [<a name="#p126" href="p126">page 126</a>] (<a href="#Contents">Contents</a>)
5726
5727              identifier-list:
5728                     identifier
5729                     identifier-list , identifier
5730     Semantics
5731 2   Each declarator declares one identifier, and asserts that when an operand of the same
5732     form as the declarator appears in an expression, it designates a function or object with the
5733     scope, storage duration, and type indicated by the declaration specifiers.
5734 3   A full declarator is a declarator that is not part of another declarator. The end of a full
5735     declarator is a sequence point. If, in the nested sequence of declarators in a full
5736     declarator, there is a declarator specifying a variable length array type, the type specified
5737     by the full declarator is said to be variably modified. Furthermore, any type derived by
5738     declarator type derivation from a variably modified type is itself variably modified.
5739 4   In the following subclauses, consider a declaration
5740              T D1
5741     where T contains the declaration specifiers that specify a type T (such as int) and D1 is
5742     a declarator that contains an identifier ident. The type specified for the identifier ident in
5743     the various forms of declarator is described inductively using this notation.
5744 5   If, in the declaration ''T D1'', D1 has the form
5745              identifier
5746     then the type specified for ident is T .
5747 6   If, in the declaration ''T D1'', D1 has the form
5748              ( D )
5749     then ident has the type specified by the declaration ''T D''. Thus, a declarator in
5750     parentheses is identical to the unparenthesized declarator, but the binding of complicated
5751     declarators may be altered by parentheses.
5752     Implementation limits
5753 7   As discussed in <a href="#5.2.4.1">5.2.4.1</a>, an implementation may limit the number of pointer, array, and
5754     function declarators that modify an arithmetic, structure, union, or void type, either
5755     directly or via one or more typedefs.
5756     Forward references: array declarators (<a href="#6.7.6.2">6.7.6.2</a>), type definitions (<a href="#6.7.8">6.7.8</a>).
5757
5758
5759
5760
5761 [<a name="#p127" href="p127">page 127</a>] (<a href="#Contents">Contents</a>)
5762
5763 <a name="6.7.6.1" href="#6.7.6.1"><b>    6.7.6.1 Pointer declarators</b></a>
5764     Semantics
5765 1   If, in the declaration ''T D1'', D1 has the form
5766             * type-qualifier-listopt D
5767     and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
5768     T '', then the type specified for ident is ''derived-declarator-type-list type-qualifier-list
5769     pointer to T ''. For each type qualifier in the list, ident is a so-qualified pointer.
5770 2   For two pointer types to be compatible, both shall be identically qualified and both shall
5771     be pointers to compatible types.
5772 3   EXAMPLE The following pair of declarations demonstrates the difference between a ''variable pointer
5773     to a constant value'' and a ''constant pointer to a variable value''.
5774             const int *ptr_to_constant;
5775             int *const constant_ptr;
5776     The contents of any object pointed to by ptr_to_constant shall not be modified through that pointer,
5777     but ptr_to_constant itself may be changed to point to another object. Similarly, the contents of the
5778     int pointed to by constant_ptr may be modified, but constant_ptr itself shall always point to the
5779     same location.
5780 4   The declaration of the constant pointer constant_ptr may be clarified by including a definition for the
5781     type ''pointer to int''.
5782             typedef int *int_ptr;
5783             const int_ptr constant_ptr;
5784     declares constant_ptr as an object that has type ''const-qualified pointer to int''.
5785
5786 <a name="6.7.6.2" href="#6.7.6.2"><b>    6.7.6.2 Array declarators</b></a>
5787     Constraints
5788 1   In addition to optional type qualifiers and the keyword static, the [ and ] may delimit
5789     an expression or *. If they delimit an expression (which specifies the size of an array), the
5790     expression shall have an integer type. If the expression is a constant expression, it shall
5791     have a value greater than zero. The element type shall not be an incomplete or function
5792     type. The optional type qualifiers and the keyword static shall appear only in a
5793     declaration of a function parameter with an array type, and then only in the outermost
5794     array type derivation.
5795 2   An ordinary identifier (as defined in <a href="#6.2.3">6.2.3</a>) that has a variably modified type shall have
5796     either block scope and no linkage or function prototype scope. If an identifier is declared
5797     to be an object with static or thread storage duration, it shall not have a variable length
5798     array type.
5799
5800
5801
5802
5803 [<a name="#p128" href="p128">page 128</a>] (<a href="#Contents">Contents</a>)
5804
5805     Semantics
5806 3   If, in the declaration ''T D1'', D1 has one of the forms:
5807              D[ type-qualifier-listopt assignment-expressionopt ]
5808              D[ static type-qualifier-listopt assignment-expression ]
5809              D[ type-qualifier-list static assignment-expression ]
5810              D[ type-qualifier-listopt * ]
5811     and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
5812     T '', then the type specified for ident is ''derived-declarator-type-list array of T ''.141)
5813     (See <a href="#6.7.6.3">6.7.6.3</a> for the meaning of the optional type qualifiers and the keyword static.)
5814 4   If the size is not present, the array type is an incomplete type. If the size is * instead of
5815     being an expression, the array type is a variable length array type of unspecified size,
5816     which can only be used in declarations or type names with function prototype scope;142)
5817     such arrays are nonetheless complete types. If the size is an integer constant expression
5818     and the element type has a known constant size, the array type is not a variable length
5819     array type; otherwise, the array type is a variable length array type. (Variable length
5820     arrays are a conditional feature that implementations need not support; see <a href="#6.10.8.3">6.10.8.3</a>.)
5821 5   If the size is an expression that is not an integer constant expression: if it occurs in a
5822     declaration at function prototype scope, it is treated as if it were replaced by *; otherwise,
5823     each time it is evaluated it shall have a value greater than zero. The size of each instance
5824     of a variable length array type does not change during its lifetime. Where a size
5825     expression is part of the operand of a sizeof operator and changing the value of the
5826     size expression would not affect the result of the operator, it is unspecified whether or not
5827     the size expression is evaluated.
5828 6   For two array types to be compatible, both shall have compatible element types, and if
5829     both size specifiers are present, and are integer constant expressions, then both size
5830     specifiers shall have the same constant value. If the two array types are used in a context
5831     which requires them to be compatible, it is undefined behavior if the two size specifiers
5832     evaluate to unequal values.
5833 7   EXAMPLE 1
5834              float fa[11], *afp[17];
5835     declares an array of float numbers and an array of pointers to float numbers.
5836
5837 8   EXAMPLE 2       Note the distinction between the declarations
5838
5839
5840
5841
5842     141) When several ''array of'' specifications are adjacent, a multidimensional array is declared.
5843     142) Thus, * can be used only in function declarations that are not definitions (see <a href="#6.7.6.3">6.7.6.3</a>).
5844
5845 [<a name="#p129" href="p129">page 129</a>] (<a href="#Contents">Contents</a>)
5846
5847              extern int *x;
5848              extern int y[];
5849      The first declares x to be a pointer to int; the second declares y to be an array of int of unspecified size
5850      (an incomplete type), the storage for which is defined elsewhere.
5851
5852 9    EXAMPLE 3      The following declarations demonstrate the compatibility rules for variably modified types.
5853              extern int n;
5854              extern int m;
5855              void fcompat(void)
5856              {
5857                    int a[n][6][m];
5858                    int (*p)[4][n+1];
5859                    int c[n][n][6][m];
5860                    int (*r)[n][n][n+1];
5861                    p = a;       // invalid: not compatible because 4 != 6
5862                    r = c;       // compatible, but defined behavior only if
5863                                 // n == 6 and m == n+1
5864              }
5865
5866 10   EXAMPLE 4 All declarations of variably modified (VM) types have to be at either block scope or
5867      function prototype scope. Array objects declared with the _Thread_local, static, or extern
5868      storage-class specifier cannot have a variable length array (VLA) type. However, an object declared with
5869      the static storage-class specifier can have a VM type (that is, a pointer to a VLA type). Finally, all
5870      identifiers declared with a VM type have to be ordinary identifiers and cannot, therefore, be members of
5871      structures or unions.
5872              extern int n;
5873              int A[n];                                            // invalid: file scope VLA
5874              extern int (*p2)[n];                                 // invalid: file scope VM
5875              int B[100];                                          // valid: file scope but not VM
5876              void fvla(int m, int C[m][m]);                       // valid: VLA with prototype scope
5877              void fvla(int m, int C[m][m])                        // valid: adjusted to auto pointer to VLA
5878              {
5879                    typedef int VLA[m][m];                         // valid: block scope typedef VLA
5880                       struct tag {
5881                             int (*y)[n];                          // invalid: y not ordinary identifier
5882                             int z[n];                             // invalid: z not ordinary identifier
5883                       };
5884                       int D[m];                                   //   valid: auto VLA
5885                       static int E[m];                            //   invalid: static block scope VLA
5886                       extern int F[m];                            //   invalid: F has linkage and is VLA
5887                       int (*s)[m];                                //   valid: auto pointer to VLA
5888                       extern int (*r)[m];                         //   invalid: r has linkage and points to VLA
5889                       static int (*q)[m] = &amp;B;                    //   valid: q is a static block pointer to VLA
5890              }
5891
5892      Forward references:           function declarators (<a href="#6.7.6.3">6.7.6.3</a>), function definitions (<a href="#6.9.1">6.9.1</a>),
5893      initialization (<a href="#6.7.9">6.7.9</a>).
5894
5895
5896
5897 [<a name="#p130" href="p130">page 130</a>] (<a href="#Contents">Contents</a>)
5898
5899 <a name="6.7.6.3" href="#6.7.6.3"><b>     6.7.6.3 Function declarators (including prototypes)</b></a>
5900      Constraints
5901 1    A function declarator shall not specify a return type that is a function type or an array
5902      type.
5903 2    The only storage-class specifier that shall occur in a parameter declaration is register.
5904 3    An identifier list in a function declarator that is not part of a definition of that function
5905      shall be empty.
5906 4    After adjustment, the parameters in a parameter type list in a function declarator that is
5907      part of a definition of that function shall not have incomplete type.
5908      Semantics
5909 5    If, in the declaration ''T D1'', D1 has the form
5910              D( parameter-type-list )
5911      or
5912              D( identifier-listopt )
5913      and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
5914      T '', then the type specified for ident is ''derived-declarator-type-list function returning
5915      T ''.
5916 6    A parameter type list specifies the types of, and may declare identifiers for, the
5917      parameters of the function.
5918 7    A declaration of a parameter as ''array of type'' shall be adjusted to ''qualified pointer to
5919      type'', where the type qualifiers (if any) are those specified within the [ and ] of the
5920      array type derivation. If the keyword static also appears within the [ and ] of the
5921      array type derivation, then for each call to the function, the value of the corresponding
5922      actual argument shall provide access to the first element of an array with at least as many
5923      elements as specified by the size expression.
5924 8    A declaration of a parameter as ''function returning type'' shall be adjusted to ''pointer to
5925      function returning type'', as in <a href="#6.3.2.1">6.3.2.1</a>.
5926 9    If the list terminates with an ellipsis (, ...), no information about the number or types
5927      of the parameters after the comma is supplied.143)
5928 10   The special case of an unnamed parameter of type void as the only item in the list
5929      specifies that the function has no parameters.
5930
5931
5932
5933      143) The macros defined in the <a href="#7.16">&lt;stdarg.h&gt;</a> header (<a href="#7.16">7.16</a>) may be used to access arguments that
5934           correspond to the ellipsis.
5935
5936 [<a name="#p131" href="p131">page 131</a>] (<a href="#Contents">Contents</a>)
5937
5938 11   If, in a parameter declaration, an identifier can be treated either as a typedef name or as a
5939      parameter name, it shall be taken as a typedef name.
5940 12   If the function declarator is not part of a definition of that function, parameters may have
5941      incomplete type and may use the [*] notation in their sequences of declarator specifiers
5942      to specify variable length array types.
5943 13   The storage-class specifier in the declaration specifiers for a parameter declaration, if
5944      present, is ignored unless the declared parameter is one of the members of the parameter
5945      type list for a function definition.
5946 14   An identifier list declares only the identifiers of the parameters of the function. An empty
5947      list in a function declarator that is part of a definition of that function specifies that the
5948      function has no parameters. The empty list in a function declarator that is not part of a
5949      definition of that function specifies that no information about the number or types of the
5950      parameters is supplied.144)
5951 15   For two function types to be compatible, both shall specify compatible return types.145)
5952      Moreover, the parameter type lists, if both are present, shall agree in the number of
5953      parameters and in use of the ellipsis terminator; corresponding parameters shall have
5954      compatible types. If one type has a parameter type list and the other type is specified by a
5955      function declarator that is not part of a function definition and that contains an empty
5956      identifier list, the parameter list shall not have an ellipsis terminator and the type of each
5957      parameter shall be compatible with the type that results from the application of the
5958      default argument promotions. If one type has a parameter type list and the other type is
5959      specified by a function definition that contains a (possibly empty) identifier list, both shall
5960      agree in the number of parameters, and the type of each prototype parameter shall be
5961      compatible with the type that results from the application of the default argument
5962      promotions to the type of the corresponding identifier. (In the determination of type
5963      compatibility and of a composite type, each parameter declared with function or array
5964      type is taken as having the adjusted type and each parameter declared with qualified type
5965      is taken as having the unqualified version of its declared type.)
5966 16   EXAMPLE 1       The declaration
5967               int f(void), *fip(), (*pfi)();
5968      declares a function f with no parameters returning an int, a function fip with no parameter specification
5969      returning a pointer to an int, and a pointer pfi to a function with no parameter specification returning an
5970      int. It is especially useful to compare the last two. The binding of *fip() is *(fip()), so that the
5971      declaration suggests, and the same construction in an expression requires, the calling of a function fip,
5972      and then using indirection through the pointer result to yield an int. In the declarator (*pfi)(), the
5973      extra parentheses are necessary to indicate that indirection through a pointer to a function yields a function
5974
5975
5976      144) See ''future language directions'' (<a href="#6.11.6">6.11.6</a>).
5977      145) If both function types are ''old style'', parameter types are not compared.
5978
5979 [<a name="#p132" href="p132">page 132</a>] (<a href="#Contents">Contents</a>)
5980
5981      designator, which is then used to call the function; it returns an int.
5982 17   If the declaration occurs outside of any function, the identifiers have file scope and external linkage. If the
5983      declaration occurs inside a function, the identifiers of the functions f and fip have block scope and either
5984      internal or external linkage (depending on what file scope declarations for these identifiers are visible), and
5985      the identifier of the pointer pfi has block scope and no linkage.
5986
5987 18   EXAMPLE 2        The declaration
5988                int (*apfi[3])(int *x, int *y);
5989      declares an array apfi of three pointers to functions returning int. Each of these functions has two
5990      parameters that are pointers to int. The identifiers x and y are declared for descriptive purposes only and
5991      go out of scope at the end of the declaration of apfi.
5992
5993 19   EXAMPLE 3        The declaration
5994                int (*fpfi(int (*)(long), int))(int, ...);
5995      declares a function fpfi that returns a pointer to a function returning an int. The function fpfi has two
5996      parameters: a pointer to a function returning an int (with one parameter of type long int), and an int.
5997      The pointer returned by fpfi points to a function that has one int parameter and accepts zero or more
5998      additional arguments of any type.
5999
6000 20   EXAMPLE 4        The following prototype has a variably modified parameter.
6001                void addscalar(int n, int m,
6002                      double a[n][n*m+300], double x);
6003                int main()
6004                {
6005                      double b[4][308];
6006                      addscalar(4, 2, b, <a href="#2.17">2.17</a>);
6007                      return 0;
6008                }
6009                void addscalar(int n, int m,
6010                      double a[n][n*m+300], double x)
6011                {
6012                      for (int i = 0; i &lt; n; i++)
6013                            for (int j = 0, k = n*m+300; j &lt; k; j++)
6014                                  // a is a pointer to a VLA with n*m+300 elements
6015                                  a[i][j] += x;
6016                }
6017
6018 21   EXAMPLE 5        The following are all compatible function prototype declarators.
6019                double    maximum(int        n,   int   m,   double    a[n][m]);
6020                double    maximum(int        n,   int   m,   double    a[*][*]);
6021                double    maximum(int        n,   int   m,   double    a[ ][*]);
6022                double    maximum(int        n,   int   m,   double    a[ ][m]);
6023      as are:
6024                void   f(double      (* restrict a)[5]);
6025                void   f(double      a[restrict][5]);
6026                void   f(double      a[restrict 3][5]);
6027                void   f(double      a[restrict static 3][5]);
6028
6029
6030 [<a name="#p133" href="p133">page 133</a>] (<a href="#Contents">Contents</a>)
6031
6032     (Note that the last declaration also specifies that the argument corresponding to a in any call to f must be a
6033     non-null pointer to the first of at least three arrays of 5 doubles, which the others do not.)
6034
6035     Forward references: function definitions (<a href="#6.9.1">6.9.1</a>), type names (<a href="#6.7.7">6.7.7</a>).
6036 <a name="6.7.7" href="#6.7.7"><b>    6.7.7 Type names</b></a>
6037     Syntax
6038 1            type-name:
6039                     specifier-qualifier-list abstract-declaratoropt
6040              abstract-declarator:
6041                     pointer
6042                     pointeropt direct-abstract-declarator
6043              direct-abstract-declarator:
6044                      ( abstract-declarator )
6045                      direct-abstract-declaratoropt [ type-qualifier-listopt
6046                                     assignment-expressionopt ]
6047                      direct-abstract-declaratoropt [ static type-qualifier-listopt
6048                                     assignment-expression ]
6049                      direct-abstract-declaratoropt [ type-qualifier-list static
6050                                     assignment-expression ]
6051                      direct-abstract-declaratoropt [ * ]
6052                      direct-abstract-declaratoropt ( parameter-type-listopt )
6053     Semantics
6054 2   In several contexts, it is necessary to specify a type. This is accomplished using a type
6055     name, which is syntactically a declaration for a function or an object of that type that
6056     omits the identifier.146)
6057 3   EXAMPLE        The constructions
6058              (a)      int
6059              (b)      int   *
6060              (c)      int   *[3]
6061              (d)      int   (*)[3]
6062              (e)      int   (*)[*]
6063              (f)      int   *()
6064              (g)      int   (*)(void)
6065              (h)      int   (*const [])(unsigned int, ...)
6066     name respectively the types (a) int, (b) pointer to int, (c) array of three pointers to int, (d) pointer to an
6067     array of three ints, (e) pointer to a variable length array of an unspecified number of ints, (f) function
6068     with no parameter specification returning a pointer to int, (g) pointer to function with no parameters
6069
6070
6071     146) As indicated by the syntax, empty parentheses in a type name are interpreted as ''function with no
6072          parameter specification'', rather than redundant parentheses around the omitted identifier.
6073
6074 [<a name="#p134" href="p134">page 134</a>] (<a href="#Contents">Contents</a>)
6075
6076     returning an int, and (h) array of an unspecified number of constant pointers to functions, each with one
6077     parameter that has type unsigned int and an unspecified number of other parameters, returning an
6078     int.
6079
6080 <a name="6.7.8" href="#6.7.8"><b>    6.7.8 Type definitions</b></a>
6081     Syntax
6082 1            typedef-name:
6083                     identifier
6084     Constraints
6085 2   If a typedef name specifies a variably modified type then it shall have block scope.
6086     Semantics
6087 3   In a declaration whose storage-class specifier is typedef, each declarator defines an
6088     identifier to be a typedef name that denotes the type specified for the identifier in the way
6089     described in <a href="#6.7.6">6.7.6</a>. Any array size expressions associated with variable length array
6090     declarators are evaluated each time the declaration of the typedef name is reached in the
6091     order of execution. A typedef declaration does not introduce a new type, only a
6092     synonym for the type so specified. That is, in the following declarations:
6093              typedef T type_ident;
6094              type_ident D;
6095     type_ident is defined as a typedef name with the type specified by the declaration
6096     specifiers in T (known as T ), and the identifier in D has the type ''derived-declarator-
6097     type-list T '' where the derived-declarator-type-list is specified by the declarators of D. A
6098     typedef name shares the same name space as other identifiers declared in ordinary
6099     declarators.
6100 4   EXAMPLE 1       After
6101              typedef int MILES, KLICKSP();
6102              typedef struct { double hi, lo; } range;
6103     the constructions
6104              MILES distance;
6105              extern KLICKSP *metricp;
6106              range x;
6107              range z, *zp;
6108     are all valid declarations. The type of distance is int, that of metricp is ''pointer to function with no
6109     parameter specification returning int'', and that of x and z is the specified structure; zp is a pointer to
6110     such a structure. The object distance has a type compatible with any other int object.
6111
6112 5   EXAMPLE 2       After the declarations
6113              typedef struct s1 { int x; } t1, *tp1;
6114              typedef struct s2 { int x; } t2, *tp2;
6115     type t1 and the type pointed to by tp1 are compatible. Type t1 is also compatible with type struct
6116
6117 [<a name="#p135" href="p135">page 135</a>] (<a href="#Contents">Contents</a>)
6118
6119     s1, but not compatible with the types struct s2, t2, the type pointed to by tp2, or int.
6120
6121 6   EXAMPLE 3       The following obscure constructions
6122              typedef signed int t;
6123              typedef int plain;
6124              struct tag {
6125                    unsigned t:4;
6126                    const t:5;
6127                    plain r:5;
6128              };
6129     declare a typedef name t with type signed int, a typedef name plain with type int, and a structure
6130     with three bit-field members, one named t that contains values in the range [0, 15], an unnamed const-
6131     qualified bit-field which (if it could be accessed) would contain values in either the range [-15, +15] or
6132     [-16, +15], and one named r that contains values in one of the ranges [0, 31], [-15, +15], or [-16, +15].
6133     (The choice of range is implementation-defined.) The first two bit-field declarations differ in that
6134     unsigned is a type specifier (which forces t to be the name of a structure member), while const is a
6135     type qualifier (which modifies t which is still visible as a typedef name). If these declarations are followed
6136     in an inner scope by
6137              t f(t (t));
6138              long t;
6139     then a function f is declared with type ''function returning signed int with one unnamed parameter
6140     with type pointer to function returning signed int with one unnamed parameter with type signed
6141     int'', and an identifier t with type long int.
6142
6143 7   EXAMPLE 4 On the other hand, typedef names can be used to improve code readability. All three of the
6144     following declarations of the signal function specify exactly the same type, the first without making use
6145     of any typedef names.
6146              typedef void fv(int), (*pfv)(int);
6147              void (*signal(int, void (*)(int)))(int);
6148              fv *signal(int, fv *);
6149              pfv signal(int, pfv);
6150
6151 8   EXAMPLE 5 If a typedef name denotes a variable length array type, the length of the array is fixed at the
6152     time the typedef name is defined, not each time it is used:
6153              void copyt(int n)
6154              {
6155                    typedef int B[n];   //               B is n ints, n evaluated now
6156                    n += 1;
6157                    B a;                //               a is n ints, n without += 1
6158                    int b[n];           //               a and b are different sizes
6159                    for (int i = 1; i &lt; n;               i++)
6160                          a[i-1] = b[i];
6161              }
6162
6163
6164
6165
6166 [<a name="#p136" href="p136">page 136</a>] (<a href="#Contents">Contents</a>)
6167
6168 <a name="6.7.9" href="#6.7.9"><b>    6.7.9 Initialization</b></a>
6169     Syntax
6170 1            initializer:
6171                       assignment-expression
6172                       { initializer-list }
6173                       { initializer-list , }
6174              initializer-list:
6175                       designationopt initializer
6176                       initializer-list , designationopt initializer
6177              designation:
6178                     designator-list =
6179              designator-list:
6180                     designator
6181                     designator-list designator
6182              designator:
6183                     [ constant-expression ]
6184                     . identifier
6185     Constraints
6186 2   No initializer shall attempt to provide a value for an object not contained within the entity
6187     being initialized.
6188 3   The type of the entity to be initialized shall be an array of unknown size or a complete
6189     object type that is not a variable length array type.
6190 4   All the expressions in an initializer for an object that has static or thread storage duration
6191     shall be constant expressions or string literals.
6192 5   If the declaration of an identifier has block scope, and the identifier has external or
6193     internal linkage, the declaration shall have no initializer for the identifier.
6194 6   If a designator has the form
6195              [ constant-expression ]
6196     then the current object (defined below) shall have array type and the expression shall be
6197     an integer constant expression. If the array is of unknown size, any nonnegative value is
6198     valid.
6199 7   If a designator has the form
6200              . identifier
6201     then the current object (defined below) shall have structure or union type and the
6202     identifier shall be the name of a member of that type.
6203 [<a name="#p137" href="p137">page 137</a>] (<a href="#Contents">Contents</a>)
6204
6205      Semantics
6206 8    An initializer specifies the initial value stored in an object.
6207 9    Except where explicitly stated otherwise, for the purposes of this subclause unnamed
6208      members of objects of structure and union type do not participate in initialization.
6209      Unnamed members of structure objects have indeterminate value even after initialization.
6210 10   If an object that has automatic storage duration is not initialized explicitly, its value is
6211      indeterminate. If an object that has static or thread storage duration is not initialized
6212      explicitly, then:
6213      -- if it has pointer type, it is initialized to a null pointer;
6214      -- if it has arithmetic type, it is initialized to (positive or unsigned) zero;
6215      -- if it is an aggregate, every member is initialized (recursively) according to these rules,
6216        and any padding is initialized to zero bits;
6217      -- if it is a union, the first named member is initialized (recursively) according to these
6218        rules, and any padding is initialized to zero bits;
6219 11   The initializer for a scalar shall be a single expression, optionally enclosed in braces. The
6220      initial value of the object is that of the expression (after conversion); the same type
6221      constraints and conversions as for simple assignment apply, taking the type of the scalar
6222      to be the unqualified version of its declared type.
6223 12   The rest of this subclause deals with initializers for objects that have aggregate or union
6224      type.
6225 13   The initializer for a structure or union object that has automatic storage duration shall be
6226      either an initializer list as described below, or a single expression that has compatible
6227      structure or union type. In the latter case, the initial value of the object, including
6228      unnamed members, is that of the expression.
6229 14   An array of character type may be initialized by a character string literal or UTF-8 string
6230      literal, optionally enclosed in braces. Successive bytes of the string literal (including the
6231      terminating null character if there is room or if the array is of unknown size) initialize the
6232      elements of the array.
6233 15   An array with element type compatible with a qualified or unqualified version of
6234      wchar_t may be initialized by a wide string literal, optionally enclosed in braces.
6235      Successive wide characters of the wide string literal (including the terminating null wide
6236      character if there is room or if the array is of unknown size) initialize the elements of the
6237      array.
6238 16   Otherwise, the initializer for an object that has aggregate or union type shall be a brace-
6239      enclosed list of initializers for the elements or named members.
6240
6241
6242 [<a name="#p138" href="p138">page 138</a>] (<a href="#Contents">Contents</a>)
6243
6244 17   Each brace-enclosed initializer list has an associated current object. When no
6245      designations are present, subobjects of the current object are initialized in order according
6246      to the type of the current object: array elements in increasing subscript order, structure
6247      members in declaration order, and the first named member of a union.147) In contrast, a
6248      designation causes the following initializer to begin initialization of the subobject
6249      described by the designator. Initialization then continues forward in order, beginning
6250      with the next subobject after that described by the designator.148)
6251 18   Each designator list begins its description with the current object associated with the
6252      closest surrounding brace pair. Each item in the designator list (in order) specifies a
6253      particular member of its current object and changes the current object for the next
6254      designator (if any) to be that member.149) The current object that results at the end of the
6255      designator list is the subobject to be initialized by the following initializer.
6256 19   The initialization shall occur in initializer list order, each initializer provided for a
6257      particular subobject overriding any previously listed initializer for the same subobject;150)
6258      all subobjects that are not initialized explicitly shall be initialized implicitly the same as
6259      objects that have static storage duration.
6260 20   If the aggregate or union contains elements or members that are aggregates or unions,
6261      these rules apply recursively to the subaggregates or contained unions. If the initializer of
6262      a subaggregate or contained union begins with a left brace, the initializers enclosed by
6263      that brace and its matching right brace initialize the elements or members of the
6264      subaggregate or the contained union. Otherwise, only enough initializers from the list are
6265      taken to account for the elements or members of the subaggregate or the first member of
6266      the contained union; any remaining initializers are left to initialize the next element or
6267      member of the aggregate of which the current subaggregate or contained union is a part.
6268 21   If there are fewer initializers in a brace-enclosed list than there are elements or members
6269      of an aggregate, or fewer characters in a string literal used to initialize an array of known
6270      size than there are elements in the array, the remainder of the aggregate shall be
6271      initialized implicitly the same as objects that have static storage duration.
6272
6273
6274
6275      147) If the initializer list for a subaggregate or contained union does not begin with a left brace, its
6276           subobjects are initialized as usual, but the subaggregate or contained union does not become the
6277           current object: current objects are associated only with brace-enclosed initializer lists.
6278      148) After a union member is initialized, the next object is not the next member of the union; instead, it is
6279           the next subobject of an object containing the union.
6280      149) Thus, a designator can only specify a strict subobject of the aggregate or union that is associated with
6281           the surrounding brace pair. Note, too, that each separate designator list is independent.
6282      150) Any initializer for the subobject which is overridden and so not used to initialize that subobject might
6283           not be evaluated at all.
6284
6285 [<a name="#p139" href="p139">page 139</a>] (<a href="#Contents">Contents</a>)
6286
6287 22   If an array of unknown size is initialized, its size is determined by the largest indexed
6288      element with an explicit initializer. The array type is completed at the end of its
6289      initializer list.
6290 23   The order in which any side effects occur among the initialization list expressions is
6291      unspecified.151)
6292 24   EXAMPLE 1       Provided that <a href="#7.3">&lt;complex.h&gt;</a> has been #included, the declarations
6293               int i = <a href="#3.5">3.5</a>;
6294               double complex c = 5 + 3 * I;
6295      define and initialize i with the value 3 and c with the value <a href="#5.0">5.0</a> + i3.0.
6296
6297 25   EXAMPLE 2       The declaration
6298               int x[] = { 1, 3, 5 };
6299      defines and initializes x as a one-dimensional array object that has three elements, as no size was specified
6300      and there are three initializers.
6301
6302 26   EXAMPLE 3       The declaration
6303               int y[4][3] =         {
6304                     { 1, 3,         5 },
6305                     { 2, 4,         6 },
6306                     { 3, 5,         7 },
6307               };
6308      is a definition with a fully bracketed initialization: 1, 3, and 5 initialize the first row of y (the array object
6309      y[0]), namely y[0][0], y[0][1], and y[0][2]. Likewise the next two lines initialize y[1] and
6310      y[2]. The initializer ends early, so y[3] is initialized with zeros. Precisely the same effect could have
6311      been achieved by
6312               int y[4][3] = {
6313                     1, 3, 5, 2, 4, 6, 3, 5, 7
6314               };
6315      The initializer for y[0] does not begin with a left brace, so three items from the list are used. Likewise the
6316      next three are taken successively for y[1] and y[2].
6317
6318 27   EXAMPLE 4       The declaration
6319               int z[4][3] = {
6320                     { 1 }, { 2 }, { 3 }, { 4 }
6321               };
6322      initializes the first column of z as specified and initializes the rest with zeros.
6323
6324 28   EXAMPLE 5       The declaration
6325               struct { int a[3], b; } w[] = { { 1 }, 2 };
6326      is a definition with an inconsistently bracketed initialization. It defines an array with two element
6327      structures: w[0].a[0] is 1 and w[1].a[0] is 2; all the other elements are zero.
6328
6329
6330
6331      151) In particular, the evaluation order need not be the same as the order of subobject initialization.
6332
6333 [<a name="#p140" href="p140">page 140</a>] (<a href="#Contents">Contents</a>)
6334
6335 29   EXAMPLE 6         The declaration
6336                short q[4][3][2] = {
6337                      { 1 },
6338                      { 2, 3 },
6339                      { 4, 5, 6 }
6340                };
6341      contains an incompletely but consistently bracketed initialization. It defines a three-dimensional array
6342      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
6343      q[2][0][0], q[2][0][1], and q[2][1][0], respectively; all the rest are zero. The initializer for
6344      q[0][0] does not begin with a left brace, so up to six items from the current list may be used. There is
6345      only one, so the values for the remaining five elements are initialized with zero. Likewise, the initializers
6346      for q[1][0] and q[2][0] do not begin with a left brace, so each uses up to six items, initializing their
6347      respective two-dimensional subaggregates. If there had been more than six items in any of the lists, a
6348      diagnostic message would have been issued. The same initialization result could have been achieved by:
6349                short q[4][3][2] = {
6350                      1, 0, 0, 0, 0, 0,
6351                      2, 3, 0, 0, 0, 0,
6352                      4, 5, 6
6353                };
6354      or by:
6355                short q[4][3][2] = {
6356                      {
6357                            { 1 },
6358                      },
6359                      {
6360                            { 2, 3 },
6361                      },
6362                      {
6363                            { 4, 5 },
6364                            { 6 },
6365                      }
6366                };
6367      in a fully bracketed form.
6368 30   Note that the fully bracketed and minimally bracketed forms of initialization are, in general, less likely to
6369      cause confusion.
6370
6371 31   EXAMPLE 7         One form of initialization that completes array types involves typedef names. Given the
6372      declaration
6373                typedef int A[];             // OK - declared with block scope
6374      the declaration
6375                A a = { 1, 2 }, b = { 3, 4, 5 };
6376      is identical to
6377                int a[] = { 1, 2 }, b[] = { 3, 4, 5 };
6378      due to the rules for incomplete types.
6379
6380
6381
6382 [<a name="#p141" href="p141">page 141</a>] (<a href="#Contents">Contents</a>)
6383
6384 32   EXAMPLE 8       The declaration
6385               char s[] = "abc", t[3] = "abc";
6386      defines ''plain'' char array objects s and t whose elements are initialized with character string literals.
6387      This declaration is identical to
6388               char s[] = { 'a', 'b', 'c', '\0' },
6389                    t[] = { 'a', 'b', 'c' };
6390      The contents of the arrays are modifiable. On the other hand, the declaration
6391               char *p = "abc";
6392      defines p with type ''pointer to char'' and initializes it to point to an object with type ''array of char''
6393      with length 4 whose elements are initialized with a character string literal. If an attempt is made to use p to
6394      modify the contents of the array, the behavior is undefined.
6395
6396 33   EXAMPLE 9       Arrays can be initialized to correspond to the elements of an enumeration by using
6397      designators:
6398               enum { member_one,           member_two };
6399               const char *nm[] =           {
6400                     [member_two]           = "member two",
6401                     [member_one]           = "member one",
6402               };
6403
6404 34   EXAMPLE 10       Structure members can be initialized to nonzero values without depending on their order:
6405               div_t answer = { .quot = 2, .rem = -1 };
6406
6407 35   EXAMPLE 11 Designators can be used to provide explicit initialization when unadorned initializer lists
6408      might be misunderstood:
6409               struct { int a[3], b; } w[] =
6410                     { [0].a = {1}, [1].a[0] = 2 };
6411
6412 36   EXAMPLE 12       Space can be ''allocated'' from both ends of an array by using a single designator:
6413               int a[MAX] = {
6414                     1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0
6415               };
6416 37   In the above, if MAX is greater than ten, there will be some zero-valued elements in the middle; if it is less
6417      than ten, some of the values provided by the first five initializers will be overridden by the second five.
6418
6419 38   EXAMPLE 13       Any member of a union can be initialized:
6420               union { /* ... */ } u = { .any_member = 42 };
6421
6422      Forward references: common definitions <a href="#7.19">&lt;stddef.h&gt;</a> (<a href="#7.19">7.19</a>).
6423
6424
6425
6426
6427 [<a name="#p142" href="p142">page 142</a>] (<a href="#Contents">Contents</a>)
6428
6429 <a name="6.7.10" href="#6.7.10"><b>    6.7.10 Static assertions</b></a>
6430     Syntax
6431 1            static_assert-declaration:
6432                      _Static_assert ( constant-expression , string-literal ) ;
6433     Constraints
6434 2   The constant expression shall compare unequal to 0.
6435     Semantics
6436 3   The constant expression shall be an integer constant expression. If the value of the
6437     constant expression compares unequal to 0, the declaration has no effect. Otherwise, the
6438     constraint is violated and the implementation shall produce a diagnostic message that
6439     includes the text of the string literal, except that characters not in the basic source
6440     character set are not required to appear in the message.
6441     Forward references: diagnostics (<a href="#7.2">7.2</a>).
6442
6443
6444
6445
6446 [<a name="#p143" href="p143">page 143</a>] (<a href="#Contents">Contents</a>)
6447
6448 <a name="6.8" href="#6.8"><b>    6.8 Statements and blocks</b></a>
6449     Syntax
6450 1            statement:
6451                     labeled-statement
6452                     compound-statement
6453                     expression-statement
6454                     selection-statement
6455                     iteration-statement
6456                     jump-statement
6457     Semantics
6458 2   A statement specifies an action to be performed. Except as indicated, statements are
6459     executed in sequence.
6460 3   A block allows a set of declarations and statements to be grouped into one syntactic unit.
6461     The initializers of objects that have automatic storage duration, and the variable length
6462     array declarators of ordinary identifiers with block scope, are evaluated and the values are
6463     stored in the objects (including storing an indeterminate value in objects without an
6464     initializer) each time the declaration is reached in the order of execution, as if it were a
6465     statement, and within each declaration in the order that declarators appear.
6466 4   A full expression is an expression that is not part of another expression or of a declarator.
6467     Each of the following is a full expression: an initializer that is not part of a compound
6468     literal; the expression in an expression statement; the controlling expression of a selection
6469     statement (if or switch); the controlling expression of a while or do statement; each
6470     of the (optional) expressions of a for statement; the (optional) expression in a return
6471     statement. There is a sequence point between the evaluation of a full expression and the
6472     evaluation of the next full expression to be evaluated.
6473     Forward references: expression and null statements (<a href="#6.8.3">6.8.3</a>), selection statements
6474     (<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>).
6475 <a name="6.8.1" href="#6.8.1"><b>    6.8.1 Labeled statements</b></a>
6476     Syntax
6477 1            labeled-statement:
6478                     identifier : statement
6479                     case constant-expression : statement
6480                     default : statement
6481     Constraints
6482 2   A case or default label shall appear only in a switch statement. Further
6483     constraints on such labels are discussed under the switch statement.
6484
6485 [<a name="#p144" href="p144">page 144</a>] (<a href="#Contents">Contents</a>)
6486
6487 3   Label names shall be unique within a function.
6488     Semantics
6489 4   Any statement may be preceded by a prefix that declares an identifier as a label name.
6490     Labels in themselves do not alter the flow of control, which continues unimpeded across
6491     them.
6492     Forward references: 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>).
6493 <a name="6.8.2" href="#6.8.2"><b>    6.8.2 Compound statement</b></a>
6494     Syntax
6495 1            compound-statement:
6496                    { block-item-listopt }
6497              block-item-list:
6498                      block-item
6499                      block-item-list block-item
6500              block-item:
6501                      declaration
6502                      statement
6503     Semantics
6504 2   A compound statement is a block.
6505 <a name="6.8.3" href="#6.8.3"><b>    6.8.3 Expression and null statements</b></a>
6506     Syntax
6507 1            expression-statement:
6508                     expressionopt ;
6509     Semantics
6510 2   The expression in an expression statement is evaluated as a void expression for its side
6511     effects.152)
6512 3   A null statement (consisting of just a semicolon) performs no operations.
6513 4   EXAMPLE 1 If a function call is evaluated as an expression statement for its side effects only, the
6514     discarding of its value may be made explicit by converting the expression to a void expression by means of
6515     a cast:
6516              int p(int);
6517              /* ... */
6518              (void)p(0);
6519
6520
6521
6522     152) Such as assignments, and function calls which have side effects.
6523
6524 [<a name="#p145" href="p145">page 145</a>] (<a href="#Contents">Contents</a>)
6525
6526 5   EXAMPLE 2       In the program fragment
6527              char *s;
6528              /* ... */
6529              while (*s++ != '\0')
6530                      ;
6531     a null statement is used to supply an empty loop body to the iteration statement.
6532
6533 6   EXAMPLE 3       A null statement may also be used to carry a label just before the closing } of a compound
6534     statement.
6535              while (loop1) {
6536                    /* ... */
6537                    while (loop2) {
6538                            /* ... */
6539                            if (want_out)
6540                                    goto end_loop1;
6541                            /* ... */
6542                    }
6543                    /* ... */
6544              end_loop1: ;
6545              }
6546
6547     Forward references: iteration statements (<a href="#6.8.5">6.8.5</a>).
6548 <a name="6.8.4" href="#6.8.4"><b>    6.8.4 Selection statements</b></a>
6549     Syntax
6550 1            selection-statement:
6551                      if ( expression ) statement
6552                      if ( expression ) statement else statement
6553                      switch ( expression ) statement
6554     Semantics
6555 2   A selection statement selects among a set of statements depending on the value of a
6556     controlling expression.
6557 3   A selection statement is a block whose scope is a strict subset of the scope of its
6558     enclosing block. Each associated substatement is also a block whose scope is a strict
6559     subset of the scope of the selection statement.
6560 <a name="6.8.4.1" href="#6.8.4.1"><b>    6.8.4.1 The if statement</b></a>
6561     Constraints
6562 1   The controlling expression of an if statement shall have scalar type.
6563     Semantics
6564 2   In both forms, the first substatement is executed if the expression compares unequal to 0.
6565     In the else form, the second substatement is executed if the expression compares equal
6566
6567
6568 [<a name="#p146" href="p146">page 146</a>] (<a href="#Contents">Contents</a>)
6569
6570     to 0. If the first substatement is reached via a label, the second substatement is not
6571     executed.
6572 3   An else is associated with the lexically nearest preceding if that is allowed by the
6573     syntax.
6574 <a name="6.8.4.2" href="#6.8.4.2"><b>    6.8.4.2 The switch statement</b></a>
6575     Constraints
6576 1   The controlling expression of a switch statement shall have integer type.
6577 2   If a switch statement has an associated case or default label within the scope of an
6578     identifier with a variably modified type, the entire switch statement shall be within the
6579     scope of that identifier.153)
6580 3   The expression of each case label shall be an integer constant expression and no two of
6581     the case constant expressions in the same switch statement shall have the same value
6582     after conversion. There may be at most one default label in a switch statement.
6583     (Any enclosed switch statement may have a default label or case constant
6584     expressions with values that duplicate case constant expressions in the enclosing
6585     switch statement.)
6586     Semantics
6587 4   A switch statement causes control to jump to, into, or past the statement that is the
6588     switch body, depending on the value of a controlling expression, and on the presence of a
6589     default label and the values of any case labels on or in the switch body. A case or
6590     default label is accessible only within the closest enclosing switch statement.
6591 5   The integer promotions are performed on the controlling expression. The constant
6592     expression in each case label is converted to the promoted type of the controlling
6593     expression. If a converted value matches that of the promoted controlling expression,
6594     control jumps to the statement following the matched case label. Otherwise, if there is
6595     a default label, control jumps to the labeled statement. If no converted case constant
6596     expression matches and there is no default label, no part of the switch body is
6597     executed.
6598     Implementation limits
6599 6   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
6600     switch statement.
6601
6602
6603
6604
6605     153) That is, the declaration either precedes the switch statement, or it follows the last case or
6606          default label associated with the switch that is in the block containing the declaration.
6607
6608 [<a name="#p147" href="p147">page 147</a>] (<a href="#Contents">Contents</a>)
6609
6610 7   EXAMPLE        In the artificial program fragment
6611              switch (expr)
6612              {
6613                    int i = 4;
6614                    f(i);
6615              case 0:
6616                    i = 17;
6617                    /* falls through into default code */
6618              default:
6619                    printf("%d\n", i);
6620              }
6621     the object whose identifier is i exists with automatic storage duration (within the block) but is never
6622     initialized, and thus if the controlling expression has a nonzero value, the call to the printf function will
6623     access an indeterminate value. Similarly, the call to the function f cannot be reached.
6624
6625 <a name="6.8.5" href="#6.8.5"><b>    6.8.5 Iteration statements</b></a>
6626     Syntax
6627 1            iteration-statement:
6628                      while ( expression ) statement
6629                      do statement while ( expression ) ;
6630                      for ( expressionopt ; expressionopt ; expressionopt ) statement
6631                      for ( declaration expressionopt ; expressionopt ) statement
6632     Constraints
6633 2   The controlling expression of an iteration statement shall have scalar type.
6634 3   The declaration part of a for statement shall only declare identifiers for objects having
6635     storage class auto or register.
6636     Semantics
6637 4   An iteration statement causes a statement called the loop body to be executed repeatedly
6638     until the controlling expression compares equal to 0. The repetition occurs regardless of
6639     whether the loop body is entered from the iteration statement or by a jump.154)
6640 5   An iteration statement is a block whose scope is a strict subset of the scope of its
6641     enclosing block. The loop body is also a block whose scope is a strict subset of the scope
6642     of the iteration statement.
6643 6   An iteration statement that performs no input/output operations, does not access volatile
6644     objects, and performs no synchronization or atomic operations in its body, controlling
6645     expression, or (in the case of a for statement) its expression-3, may be assumed by the
6646     implementation to terminate.155)
6647
6648     154) Code jumped over is not executed. In particular, the controlling expression of a for or while
6649          statement is not evaluated before entering the loop body, nor is clause-1 of a for statement.
6650
6651 [<a name="#p148" href="p148">page 148</a>] (<a href="#Contents">Contents</a>)
6652
6653 <a name="6.8.5.1" href="#6.8.5.1"><b>    6.8.5.1 The while statement</b></a>
6654 1   The evaluation of the controlling expression takes place before each execution of the loop
6655     body.
6656 <a name="6.8.5.2" href="#6.8.5.2"><b>    6.8.5.2 The do statement</b></a>
6657 1   The evaluation of the controlling expression takes place after each execution of the loop
6658     body.
6659 <a name="6.8.5.3" href="#6.8.5.3"><b>    6.8.5.3 The for statement</b></a>
6660 1   The statement
6661              for ( clause-1 ; expression-2 ; expression-3 ) statement
6662     behaves as follows: The expression expression-2 is the controlling expression that is
6663     evaluated before each execution of the loop body. The expression expression-3 is
6664     evaluated as a void expression after each execution of the loop body. If clause-1 is a
6665     declaration, the scope of any identifiers it declares is the remainder of the declaration and
6666     the entire loop, including the other two expressions; it is reached in the order of execution
6667     before the first evaluation of the controlling expression. If clause-1 is an expression, it is
6668     evaluated as a void expression before the first evaluation of the controlling expression.156)
6669 2   Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a
6670     nonzero constant.
6671 <a name="6.8.6" href="#6.8.6"><b>    6.8.6 Jump statements</b></a>
6672     Syntax
6673 1            jump-statement:
6674                     goto identifier ;
6675                     continue ;
6676                     break ;
6677                     return expressionopt ;
6678     Semantics
6679 2   A jump statement causes an unconditional jump to another place.
6680
6681
6682
6683
6684     155) This is intended to allow compiler transformations such as removal of empty loops even when
6685          termination cannot be proven.
6686     156) Thus, clause-1 specifies initialization for the loop, possibly declaring one or more variables for use in
6687          the loop; the controlling expression, expression-2, specifies an evaluation made before each iteration,
6688          such that execution of the loop continues until the expression compares equal to 0; and expression-3
6689          specifies an operation (such as incrementing) that is performed after each iteration.
6690
6691 [<a name="#p149" href="p149">page 149</a>] (<a href="#Contents">Contents</a>)
6692
6693 <a name="6.8.6.1" href="#6.8.6.1"><b>    6.8.6.1 The goto statement</b></a>
6694     Constraints
6695 1   The identifier in a goto statement shall name a label located somewhere in the enclosing
6696     function. A goto statement shall not jump from outside the scope of an identifier having
6697     a variably modified type to inside the scope of that identifier.
6698     Semantics
6699 2   A goto statement causes an unconditional jump to the statement prefixed by the named
6700     label in the enclosing function.
6701 3   EXAMPLE 1 It is sometimes convenient to jump into the middle of a complicated set of statements. The
6702     following outline presents one possible approach to a problem based on these three assumptions:
6703       1.   The general initialization code accesses objects only visible to the current function.
6704       2.   The general initialization code is too large to warrant duplication.
6705       3. The code to determine the next operation is at the head of the loop. (To allow it to be reached by
6706          continue statements, for example.)
6707             /* ... */
6708             goto first_time;
6709             for (;;) {
6710                     // determine next operation
6711                     /* ... */
6712                     if (need to reinitialize) {
6713                             // reinitialize-only code
6714                             /* ... */
6715                     first_time:
6716                             // general initialization code
6717                             /* ... */
6718                             continue;
6719                     }
6720                     // handle other operations
6721                     /* ... */
6722             }
6723
6724
6725
6726
6727 [<a name="#p150" href="p150">page 150</a>] (<a href="#Contents">Contents</a>)
6728
6729 4   EXAMPLE 2 A goto statement is not allowed to jump past any declarations of objects with variably
6730     modified types. A jump within the scope, however, is permitted.
6731             goto lab3;                         // invalid: going INTO scope of VLA.
6732             {
6733                   double a[n];
6734                   a[j] = <a href="#4.4">4.4</a>;
6735             lab3:
6736                   a[j] = <a href="#3.3">3.3</a>;
6737                   goto lab4;                   // valid: going WITHIN scope of VLA.
6738                   a[j] = <a href="#5.5">5.5</a>;
6739             lab4:
6740                   a[j] = <a href="#6.6">6.6</a>;
6741             }
6742             goto lab4;                         // invalid: going INTO scope of VLA.
6743
6744 <a name="6.8.6.2" href="#6.8.6.2"><b>    6.8.6.2 The continue statement</b></a>
6745     Constraints
6746 1   A continue statement shall appear only in or as a loop body.
6747     Semantics
6748 2   A continue statement causes a jump to the loop-continuation portion of the smallest
6749     enclosing iteration statement; that is, to the end of the loop body. More precisely, in each
6750     of the statements
6751     while (/* ... */) {                  do {                                 for (/* ... */) {
6752        /* ... */                            /* ... */                            /* ... */
6753        continue;                            continue;                            continue;
6754        /* ... */                            /* ... */                            /* ... */
6755     contin: ;                            contin: ;                            contin: ;
6756     }                                    } while (/* ... */);                 }
6757     unless the continue statement shown is in an enclosed iteration statement (in which
6758     case it is interpreted within that statement), it is equivalent to goto contin;.157)
6759 <a name="6.8.6.3" href="#6.8.6.3"><b>    6.8.6.3 The break statement</b></a>
6760     Constraints
6761 1   A break statement shall appear only in or as a switch body or loop body.
6762     Semantics
6763 2   A break statement terminates execution of the smallest enclosing switch or iteration
6764     statement.
6765
6766
6767
6768     157) Following the contin: label is a null statement.
6769
6770 [<a name="#p151" href="p151">page 151</a>] (<a href="#Contents">Contents</a>)
6771
6772 <a name="6.8.6.4" href="#6.8.6.4"><b>    6.8.6.4 The return statement</b></a>
6773     Constraints
6774 1   A return statement with an expression shall not appear in a function whose return type
6775     is void. A return statement without an expression shall only appear in a function
6776     whose return type is void.
6777     Semantics
6778 2   A return statement terminates execution of the current function and returns control to
6779     its caller. A function may have any number of return statements.
6780 3   If a return statement with an expression is executed, the value of the expression is
6781     returned to the caller as the value of the function call expression. If the expression has a
6782     type different from the return type of the function in which it appears, the value is
6783     converted as if by assignment to an object having the return type of the function.158)
6784 4   EXAMPLE       In:
6785             struct s { double i; } f(void);
6786             union {
6787                   struct {
6788                         int f1;
6789                         struct s f2;
6790                   } u1;
6791                   struct {
6792                         struct s f3;
6793                         int f4;
6794                   } u2;
6795             } g;
6796             struct s f(void)
6797             {
6798                   return g.u1.f2;
6799             }
6800             /* ... */
6801             g.u2.f3 = f();
6802     there is no undefined behavior, although there would be if the assignment were done directly (without using
6803     a function call to fetch the value).
6804
6805
6806
6807
6808     158) 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
6809          apply to the case of function return. The representation of floating-point values may have wider range
6810          or precision than implied by the type; a cast may be used to remove this extra range and precision.
6811
6812 [<a name="#p152" href="p152">page 152</a>] (<a href="#Contents">Contents</a>)
6813
6814 <a name="6.9" href="#6.9"><b>    6.9 External definitions</b></a>
6815     Syntax
6816 1            translation-unit:
6817                      external-declaration
6818                      translation-unit external-declaration
6819              external-declaration:
6820                     function-definition
6821                     declaration
6822     Constraints
6823 2   The storage-class specifiers auto and register shall not appear in the declaration
6824     specifiers in an external declaration.
6825 3   There shall be no more than one external definition for each identifier declared with
6826     internal linkage in a translation unit. Moreover, if an identifier declared with internal
6827     linkage is used in an expression (other than as a part of the operand of a sizeof
6828     operator whose result is an integer constant), there shall be exactly one external definition
6829     for the identifier in the translation unit.
6830     Semantics
6831 4   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,
6832     which consists of a sequence of external declarations. These are described as ''external''
6833     because they appear outside any function (and hence have file scope). As discussed in
6834     <a href="#6.7">6.7</a>, a declaration that also causes storage to be reserved for an object or a function named
6835     by the identifier is a definition.
6836 5   An external definition is an external declaration that is also a definition of a function
6837     (other than an inline definition) or an object. If an identifier declared with external
6838     linkage is used in an expression (other than as part of the operand of a sizeof operator
6839     whose result is an integer constant), somewhere in the entire program there shall be
6840     exactly one external definition for the identifier; otherwise, there shall be no more than
6841     one.159)
6842
6843
6844
6845
6846     159) Thus, if an identifier declared with external linkage is not used in an expression, there need be no
6847          external definition for it.
6848
6849 [<a name="#p153" href="p153">page 153</a>] (<a href="#Contents">Contents</a>)
6850
6851 <a name="6.9.1" href="#6.9.1"><b>    6.9.1 Function definitions</b></a>
6852     Syntax
6853 1            function-definition:
6854                     declaration-specifiers declarator declaration-listopt compound-statement
6855              declaration-list:
6856                     declaration
6857                     declaration-list declaration
6858     Constraints
6859 2   The identifier declared in a function definition (which is the name of the function) shall
6860     have a function type, as specified by the declarator portion of the function definition.160)
6861 3   The return type of a function shall be void or a complete object type other than array
6862     type.
6863 4   The storage-class specifier, if any, in the declaration specifiers shall be either extern or
6864     static.
6865 5   If the declarator includes a parameter type list, the declaration of each parameter shall
6866     include an identifier, except for the special case of a parameter list consisting of a single
6867     parameter of type void, in which case there shall not be an identifier. No declaration list
6868     shall follow.
6869 6   If the declarator includes an identifier list, each declaration in the declaration list shall
6870     have at least one declarator, those declarators shall declare only identifiers from the
6871     identifier list, and every identifier in the identifier list shall be declared. An identifier
6872     declared as a typedef name shall not be redeclared as a parameter. The declarations in the
6873     declaration list shall contain no storage-class specifier other than register and no
6874     initializations.
6875
6876
6877
6878     160) The intent is that the type category in a function definition cannot be inherited from a typedef:
6879                   typedef int F(void);                          //   type F is ''function with no parameters
6880                                                                 //                  returning int''
6881                   F f, g;                                       //   f and g both have type compatible with F
6882                   F f { /* ... */ }                             //   WRONG: syntax/constraint error
6883                   F g() { /* ... */ }                           //   WRONG: declares that g returns a function
6884                   int f(void) { /* ... */ }                     //   RIGHT: f has type compatible with F
6885                   int g() { /* ... */ }                         //   RIGHT: g has type compatible with F
6886                   F *e(void) { /* ... */ }                      //   e returns a pointer to a function
6887                   F *((e))(void) { /* ... */ }                  //   same: parentheses irrelevant
6888                   int (*fp)(void);                              //   fp points to a function that has type F
6889                   F *Fp;                                        //   Fp points to a function that has type F
6890
6891
6892 [<a name="#p154" href="p154">page 154</a>] (<a href="#Contents">Contents</a>)
6893
6894      Semantics
6895 7    The declarator in a function definition specifies the name of the function being defined
6896      and the identifiers of its parameters. If the declarator includes a parameter type list, the
6897      list also specifies the types of all the parameters; such a declarator also serves as a
6898      function prototype for later calls to the same function in the same translation unit. If the
6899      declarator includes an identifier list,161) the types of the parameters shall be declared in a
6900      following declaration list. In either case, the type of each parameter is adjusted as
6901      described in <a href="#6.7.6.3">6.7.6.3</a> for a parameter type list; the resulting type shall be a complete object
6902      type.
6903 8    If a function that accepts a variable number of arguments is defined without a parameter
6904      type list that ends with the ellipsis notation, the behavior is undefined.
6905 9    Each parameter has automatic storage duration; its identifier is an lvalue.162) The layout
6906      of the storage for parameters is unspecified.
6907 10   On entry to the function, the size expressions of each variably modified parameter are
6908      evaluated and the value of each argument expression is converted to the type of the
6909      corresponding parameter as if by assignment. (Array expressions and function
6910      designators as arguments were converted to pointers before the call.)
6911 11   After all parameters have been assigned, the compound statement that constitutes the
6912      body of the function definition is executed.
6913 12   If the } that terminates a function is reached, and the value of the function call is used by
6914      the caller, the behavior is undefined.
6915 13   EXAMPLE 1       In the following:
6916               extern int max(int a, int b)
6917               {
6918                     return a &gt; b ? a : b;
6919               }
6920      extern is the storage-class specifier and int is the type specifier; max(int a, int b) is the
6921      function declarator; and
6922               { return a &gt; b ? a : b; }
6923      is the function body. The following similar definition uses the identifier-list form for the parameter
6924      declarations:
6925
6926
6927
6928
6929      161) See ''future language directions'' (<a href="#6.11.7">6.11.7</a>).
6930      162) A parameter identifier cannot be redeclared in the function body except in an enclosed block.
6931
6932 [<a name="#p155" href="p155">page 155</a>] (<a href="#Contents">Contents</a>)
6933
6934               extern int max(a, b)
6935               int a, b;
6936               {
6937                     return a &gt; b ? a : b;
6938               }
6939      Here int a, b; is the declaration list for the parameters. The difference between these two definitions is
6940      that the first form acts as a prototype declaration that forces conversion of the arguments of subsequent calls
6941      to the function, whereas the second form does not.
6942
6943 14   EXAMPLE 2           To pass one function to another, one might say
6944                           int f(void);
6945                           /* ... */
6946                           g(f);
6947      Then the definition of g might read
6948               void g(int (*funcp)(void))
6949               {
6950                     /* ... */
6951                     (*funcp)(); /* or funcp(); ...                    */
6952               }
6953      or, equivalently,
6954               void g(int func(void))
6955               {
6956                     /* ... */
6957                     func(); /* or (*func)(); ...                   */
6958               }
6959
6960 <a name="6.9.2" href="#6.9.2"><b>     6.9.2 External object definitions</b></a>
6961      Semantics
6962 1    If the declaration of an identifier for an object has file scope and an initializer, the
6963      declaration is an external definition for the identifier.
6964 2    A declaration of an identifier for an object that has file scope without an initializer, and
6965      without a storage-class specifier or with the storage-class specifier static, constitutes a
6966      tentative definition. If a translation unit contains one or more tentative definitions for an
6967      identifier, and the translation unit contains no external definition for that identifier, then
6968      the behavior is exactly as if the translation unit contains a file scope declaration of that
6969      identifier, with the composite type as of the end of the translation unit, with an initializer
6970      equal to 0.
6971 3    If the declaration of an identifier for an object is a tentative definition and has internal
6972      linkage, the declared type shall not be an incomplete type.
6973
6974
6975
6976
6977 [<a name="#p156" href="p156">page 156</a>] (<a href="#Contents">Contents</a>)
6978
6979 4   EXAMPLE 1
6980              int i1 = 1;                    // definition, external linkage
6981              static int i2 = 2;             // definition, internal linkage
6982              extern int i3 = 3;             // definition, external linkage
6983              int i4;                        // tentative definition, external linkage
6984              static int i5;                 // tentative definition, internal linkage
6985              int   i1;                      // valid tentative definition, refers to previous
6986              int   i2;                      // <a href="#6.2.2">6.2.2</a> renders undefined, linkage disagreement
6987              int   i3;                      // valid tentative definition, refers to previous
6988              int   i4;                      // valid tentative definition, refers to previous
6989              int   i5;                      // <a href="#6.2.2">6.2.2</a> renders undefined, linkage disagreement
6990              extern    int   i1;            // refers to previous, whose linkage is external
6991              extern    int   i2;            // refers to previous, whose linkage is internal
6992              extern    int   i3;            // refers to previous, whose linkage is external
6993              extern    int   i4;            // refers to previous, whose linkage is external
6994              extern    int   i5;            // refers to previous, whose linkage is internal
6995
6996 5   EXAMPLE 2       If at the end of the translation unit containing
6997              int i[];
6998     the array i still has incomplete type, the implicit initializer causes it to have one element, which is set to
6999     zero on program startup.
7000
7001
7002
7003
7004 [<a name="#p157" href="p157">page 157</a>] (<a href="#Contents">Contents</a>)
7005
7006 <a name="6.10" href="#6.10"><b>    6.10 Preprocessing directives</b></a>
7007     Syntax
7008 1            preprocessing-file:
7009                     groupopt
7010              group:
7011                       group-part
7012                       group group-part
7013              group-part:
7014                     if-section
7015                     control-line
7016                     text-line
7017                     # non-directive
7018              if-section:
7019                       if-group elif-groupsopt else-groupopt endif-line
7020              if-group:
7021                      # if     constant-expression new-line groupopt
7022                      # ifdef identifier new-line groupopt
7023                      # ifndef identifier new-line groupopt
7024              elif-groups:
7025                      elif-group
7026                      elif-groups elif-group
7027              elif-group:
7028                      # elif        constant-expression new-line groupopt
7029              else-group:
7030                      # else        new-line groupopt
7031              endif-line:
7032                      # endif       new-line
7033
7034
7035
7036
7037 [<a name="#p158" href="p158">page 158</a>] (<a href="#Contents">Contents</a>)
7038
7039              control-line:
7040                     # include pp-tokens new-line
7041                     # define identifier replacement-list new-line
7042                     # define identifier lparen identifier-listopt )
7043                                                     replacement-list new-line
7044                     # define identifier lparen ... ) replacement-list new-line
7045                     # define identifier lparen identifier-list , ... )
7046                                                     replacement-list new-line
7047                     # undef   identifier new-line
7048                     # line    pp-tokens new-line
7049                     # error   pp-tokensopt new-line
7050                     # pragma pp-tokensopt new-line
7051                     #         new-line
7052              text-line:
7053                      pp-tokensopt new-line
7054              non-directive:
7055                     pp-tokens new-line
7056              lparen:
7057                        a ( character not immediately preceded by white-space
7058              replacement-list:
7059                     pp-tokensopt
7060              pp-tokens:
7061                     preprocessing-token
7062                     pp-tokens preprocessing-token
7063              new-line:
7064                     the new-line character
7065     Description
7066 2   A preprocessing directive consists of a sequence of preprocessing tokens that satisfies the
7067     following constraints: The first token in the sequence is a # preprocessing token that (at
7068     the start of translation phase 4) is either the first character in the source file (optionally
7069     after white space containing no new-line characters) or that follows white space
7070     containing at least one new-line character. The last token in the sequence is the first new-
7071     line character that follows the first token in the sequence.163) A new-line character ends
7072     the preprocessing directive even if it occurs within what would otherwise be an
7073
7074     163) Thus, preprocessing directives are commonly called ''lines''. These ''lines'' have no other syntactic
7075          significance, as all white space is equivalent except in certain situations during preprocessing (see the
7076          # character string literal creation operator in <a href="#6.10.3.2">6.10.3.2</a>, for example).
7077
7078 [<a name="#p159" href="p159">page 159</a>] (<a href="#Contents">Contents</a>)
7079
7080     invocation of a function-like macro.
7081 3   A text line shall not begin with a # preprocessing token. A non-directive shall not begin
7082     with any of the directive names appearing in the syntax.
7083 4   When in a group that is skipped (<a href="#6.10.1">6.10.1</a>), the directive syntax is relaxed to allow any
7084     sequence of preprocessing tokens to occur between the directive name and the following
7085     new-line character.
7086     Constraints
7087 5   The only white-space characters that shall appear between preprocessing tokens within a
7088     preprocessing directive (from just after the introducing # preprocessing token through
7089     just before the terminating new-line character) are space and horizontal-tab (including
7090     spaces that have replaced comments or possibly other white-space characters in
7091     translation phase 3).
7092     Semantics
7093 6   The implementation can process and skip sections of source files conditionally, include
7094     other source files, and replace macros. These capabilities are called preprocessing,
7095     because conceptually they occur before translation of the resulting translation unit.
7096 7   The preprocessing tokens within a preprocessing directive are not subject to macro
7097     expansion unless otherwise stated.
7098 8   EXAMPLE        In:
7099              #define EMPTY
7100              EMPTY # include &lt;file.h&gt;
7101     the sequence of preprocessing tokens on the second line is not a preprocessing directive, because it does not
7102     begin with a # at the start of translation phase 4, even though it will do so after the macro EMPTY has been
7103     replaced.
7104
7105 <a name="6.10.1" href="#6.10.1"><b>    6.10.1 Conditional inclusion</b></a>
7106     Constraints
7107 1   The expression that controls conditional inclusion shall be an integer constant expression
7108     except that: identifiers (including those lexically identical to keywords) are interpreted as
7109     described below;164) and it may contain unary operator expressions of the form
7110          defined identifier
7111     or
7112          defined ( identifier )
7113     which evaluate to 1 if the identifier is currently defined as a macro name (that is, if it is
7114
7115
7116     164) Because the controlling constant expression is evaluated during translation phase 4, all identifiers
7117          either are or are not macro names -- there simply are no keywords, enumeration constants, etc.
7118
7119 [<a name="#p160" href="p160">page 160</a>] (<a href="#Contents">Contents</a>)
7120
7121     predefined or if it has been the subject of a #define preprocessing directive without an
7122     intervening #undef directive with the same subject identifier), 0 if it is not.
7123 2   Each preprocessing token that remains (in the list of preprocessing tokens that will
7124     become the controlling expression) after all macro replacements have occurred shall be in
7125     the lexical form of a token (<a href="#6.4">6.4</a>).
7126     Semantics
7127 3   Preprocessing directives of the forms
7128        # if   constant-expression new-line groupopt
7129        # elif constant-expression new-line groupopt
7130     check whether the controlling constant expression evaluates to nonzero.
7131 4   Prior to evaluation, macro invocations in the list of preprocessing tokens that will become
7132     the controlling constant expression are replaced (except for those macro names modified
7133     by the defined unary operator), just as in normal text. If the token defined is
7134     generated as a result of this replacement process or use of the defined unary operator
7135     does not match one of the two specified forms prior to macro replacement, the behavior is
7136     undefined. After all replacements due to macro expansion and the defined unary
7137     operator have been performed, all remaining identifiers (including those lexically
7138     identical to keywords) are replaced with the pp-number 0, and then each preprocessing
7139     token is converted into a token. The resulting tokens compose the controlling constant
7140     expression which is evaluated according to the rules of <a href="#6.6">6.6</a>. For the purposes of this
7141     token conversion and evaluation, all signed integer types and all unsigned integer types
7142     act as if they have the same representation as, respectively, the types intmax_t and
7143     uintmax_t defined in the header <a href="#7.20">&lt;stdint.h&gt;</a>.165) This includes interpreting
7144     character constants, which may involve converting escape sequences into execution
7145     character set members. Whether the numeric value for these character constants matches
7146     the value obtained when an identical character constant occurs in an expression (other
7147     than within a #if or #elif directive) is implementation-defined.166) Also, whether a
7148     single-character character constant may have a negative value is implementation-defined.
7149
7150
7151
7152
7153     165) Thus, on an implementation where INT_MAX is 0x7FFF and UINT_MAX is 0xFFFF, the constant
7154          0x8000 is signed and positive within a #if expression even though it would be unsigned in
7155          translation phase 7.
7156     166) Thus, the constant expression in the following #if directive and if statement is not guaranteed to
7157          evaluate to the same value in these two contexts.
7158             #if 'z' - 'a' == 25
7159             if ('z' - 'a' == 25)
7160
7161
7162 [<a name="#p161" href="p161">page 161</a>] (<a href="#Contents">Contents</a>)
7163
7164 5   Preprocessing directives of the forms
7165        # ifdef identifier new-line groupopt
7166        # ifndef identifier new-line groupopt
7167     check whether the identifier is or is not currently defined as a macro name. Their
7168     conditions are equivalent to #if defined identifier and #if !defined identifier
7169     respectively.
7170 6   Each directive's condition is checked in order. If it evaluates to false (zero), the group
7171     that it controls is skipped: directives are processed only through the name that determines
7172     the directive in order to keep track of the level of nested conditionals; the rest of the
7173     directives' preprocessing tokens are ignored, as are the other preprocessing tokens in the
7174     group. Only the first group whose control condition evaluates to true (nonzero) is
7175     processed. If none of the conditions evaluates to true, and there is a #else directive, the
7176     group controlled by the #else is processed; lacking a #else directive, all the groups
7177     until the #endif are skipped.167)
7178     Forward references: macro replacement (<a href="#6.10.3">6.10.3</a>), source file inclusion (<a href="#6.10.2">6.10.2</a>), largest
7179     integer types (<a href="#7.20.1.5">7.20.1.5</a>).
7180 <a name="6.10.2" href="#6.10.2"><b>    6.10.2 Source file inclusion</b></a>
7181     Constraints
7182 1   A #include directive shall identify a header or source file that can be processed by the
7183     implementation.
7184     Semantics
7185 2   A preprocessing directive of the form
7186        # include &lt;h-char-sequence&gt; new-line
7187     searches a sequence of implementation-defined places for a header identified uniquely by
7188     the specified sequence between the &lt; and &gt; delimiters, and causes the replacement of that
7189     directive by the entire contents of the header. How the places are specified or the header
7190     identified is implementation-defined.
7191 3   A preprocessing directive of the form
7192        # include "q-char-sequence" new-line
7193     causes the replacement of that directive by the entire contents of the source file identified
7194     by the specified sequence between the " delimiters. The named source file is searched
7195
7196
7197     167) As indicated by the syntax, a preprocessing token shall not follow a #else or #endif directive
7198          before the terminating new-line character. However, comments may appear anywhere in a source file,
7199          including within a preprocessing directive.
7200
7201 [<a name="#p162" href="p162">page 162</a>] (<a href="#Contents">Contents</a>)
7202
7203     for in an implementation-defined manner. If this search is not supported, or if the search
7204     fails, the directive is reprocessed as if it read
7205        # include &lt;h-char-sequence&gt; new-line
7206     with the identical contained sequence (including &gt; characters, if any) from the original
7207     directive.
7208 4   A preprocessing directive of the form
7209        # include pp-tokens new-line
7210     (that does not match one of the two previous forms) is permitted. The preprocessing
7211     tokens after include in the directive are processed just as in normal text. (Each
7212     identifier currently defined as a macro name is replaced by its replacement list of
7213     preprocessing tokens.) The directive resulting after all replacements shall match one of
7214     the two previous forms.168) The method by which a sequence of preprocessing tokens
7215     between a &lt; and a &gt; preprocessing token pair or a pair of " characters is combined into a
7216     single header name preprocessing token is implementation-defined.
7217 5   The implementation shall provide unique mappings for sequences consisting of one or
7218     more nondigits or digits (<a href="#6.4.2.1">6.4.2.1</a>) followed by a period (.) and a single nondigit. The
7219     first character shall not be a digit. The implementation may ignore distinctions of
7220     alphabetical case and restrict the mapping to eight significant characters before the
7221     period.
7222 6   A #include preprocessing directive may appear in a source file that has been read
7223     because of a #include directive in another file, up to an implementation-defined
7224     nesting limit (see <a href="#5.2.4.1">5.2.4.1</a>).
7225 7   EXAMPLE 1       The most common uses of #include preprocessing directives are as in the following:
7226               #include <a href="#7.21">&lt;stdio.h&gt;</a>
7227               #include "myprog.h"
7228
7229
7230
7231
7232     168) Note that adjacent string literals are not concatenated into a single string literal (see the translation
7233          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.
7234
7235 [<a name="#p163" href="p163">page 163</a>] (<a href="#Contents">Contents</a>)
7236
7237 8   EXAMPLE 2     This illustrates macro-replaced #include directives:
7238            #if VERSION == 1
7239                  #define INCFILE            "vers1.h"
7240            #elif VERSION == 2
7241                  #define INCFILE            "vers2.h"        // and so on
7242            #else
7243                   #define INCFILE           "versN.h"
7244            #endif
7245            #include INCFILE
7246
7247     Forward references: macro replacement (<a href="#6.10.3">6.10.3</a>).
7248 <a name="6.10.3" href="#6.10.3"><b>    6.10.3 Macro replacement</b></a>
7249     Constraints
7250 1   Two replacement lists are identical if and only if the preprocessing tokens in both have
7251     the same number, ordering, spelling, and white-space separation, where all white-space
7252     separations are considered identical.
7253 2   An identifier currently defined as an object-like macro shall not be redefined by another
7254     #define preprocessing directive unless the second definition is an object-like macro
7255     definition and the two replacement lists are identical. Likewise, an identifier currently
7256     defined as a function-like macro shall not be redefined by another #define
7257     preprocessing directive unless the second definition is a function-like macro definition
7258     that has the same number and spelling of parameters, and the two replacement lists are
7259     identical.
7260 3   There shall be white-space between the identifier and the replacement list in the definition
7261     of an object-like macro.
7262 4   If the identifier-list in the macro definition does not end with an ellipsis, the number of
7263     arguments (including those arguments consisting of no preprocessing tokens) in an
7264     invocation of a function-like macro shall equal the number of parameters in the macro
7265     definition. Otherwise, there shall be more arguments in the invocation than there are
7266     parameters in the macro definition (excluding the ...). There shall exist a )
7267     preprocessing token that terminates the invocation.
7268 5   The identifier __VA_ARGS__ shall occur only in the replacement-list of a function-like
7269     macro that uses the ellipsis notation in the parameters.
7270 6   A parameter identifier in a function-like macro shall be uniquely declared within its
7271     scope.
7272     Semantics
7273 7   The identifier immediately following the define is called the macro name. There is one
7274     name space for macro names. Any white-space characters preceding or following the
7275     replacement list of preprocessing tokens are not considered part of the replacement list
7276
7277 [<a name="#p164" href="p164">page 164</a>] (<a href="#Contents">Contents</a>)
7278
7279      for either form of macro.
7280 8    If a # preprocessing token, followed by an identifier, occurs lexically at the point at which
7281      a preprocessing directive could begin, the identifier is not subject to macro replacement.
7282 9    A preprocessing directive of the form
7283         # define identifier replacement-list new-line
7284      defines an object-like macro that causes each subsequent instance of the macro name169)
7285      to be replaced by the replacement list of preprocessing tokens that constitute the
7286      remainder of the directive. The replacement list is then rescanned for more macro names
7287      as specified below.
7288 10   A preprocessing directive of the form
7289         # define identifier lparen identifier-listopt ) replacement-list new-line
7290         # define identifier lparen ... ) replacement-list new-line
7291         # define identifier lparen identifier-list , ... ) replacement-list new-line
7292      defines a function-like macro with parameters, whose use is similar syntactically to a
7293      function call. The parameters are specified by the optional list of identifiers, whose scope
7294      extends from their declaration in the identifier list until the new-line character that
7295      terminates the #define preprocessing directive. Each subsequent instance of the
7296      function-like macro name followed by a ( as the next preprocessing token introduces the
7297      sequence of preprocessing tokens that is replaced by the replacement list in the definition
7298      (an invocation of the macro). The replaced sequence of preprocessing tokens is
7299      terminated by the matching ) preprocessing token, skipping intervening matched pairs of
7300      left and right parenthesis preprocessing tokens. Within the sequence of preprocessing
7301      tokens making up an invocation of a function-like macro, new-line is considered a normal
7302      white-space character.
7303 11   The sequence of preprocessing tokens bounded by the outside-most matching parentheses
7304      forms the list of arguments for the function-like macro. The individual arguments within
7305      the list are separated by comma preprocessing tokens, but comma preprocessing tokens
7306      between matching inner parentheses do not separate arguments. If there are sequences of
7307      preprocessing tokens within the list of arguments that would otherwise act as
7308      preprocessing directives,170) the behavior is undefined.
7309 12   If there is a ... in the identifier-list in the macro definition, then the trailing arguments,
7310      including any separating comma preprocessing tokens, are merged to form a single item:
7311
7312
7313      169) Since, by macro-replacement time, all character constants and string literals are preprocessing tokens,
7314           not sequences possibly containing identifier-like subsequences (see <a href="#5.1.1.2">5.1.1.2</a>, translation phases), they
7315           are never scanned for macro names or parameters.
7316      170) Despite the name, a non-directive is a preprocessing directive.
7317
7318 [<a name="#p165" href="p165">page 165</a>] (<a href="#Contents">Contents</a>)
7319
7320     the variable arguments. The number of arguments so combined is such that, following
7321     merger, the number of arguments is one more than the number of parameters in the macro
7322     definition (excluding the ...).
7323 <a name="6.10.3.1" href="#6.10.3.1"><b>    6.10.3.1 Argument substitution</b></a>
7324 1   After the arguments for the invocation of a function-like macro have been identified,
7325     argument substitution takes place. A parameter in the replacement list, unless preceded
7326     by a # or ## preprocessing token or followed by a ## preprocessing token (see below), is
7327     replaced by the corresponding argument after all macros contained therein have been
7328     expanded. Before being substituted, each argument's preprocessing tokens are
7329     completely macro replaced as if they formed the rest of the preprocessing file; no other
7330     preprocessing tokens are available.
7331 2   An identifier __VA_ARGS__ that occurs in the replacement list shall be treated as if it
7332     were a parameter, and the variable arguments shall form the preprocessing tokens used to
7333     replace it.
7334 <a name="6.10.3.2" href="#6.10.3.2"><b>    6.10.3.2 The # operator</b></a>
7335     Constraints
7336 1   Each # preprocessing token in the replacement list for a function-like macro shall be
7337     followed by a parameter as the next preprocessing token in the replacement list.
7338     Semantics
7339 2   If, in the replacement list, a parameter is immediately preceded by a # preprocessing
7340     token, both are replaced by a single character string literal preprocessing token that
7341     contains the spelling of the preprocessing token sequence for the corresponding
7342     argument. Each occurrence of white space between the argument's preprocessing tokens
7343     becomes a single space character in the character string literal. White space before the
7344     first preprocessing token and after the last preprocessing token composing the argument
7345     is deleted. Otherwise, the original spelling of each preprocessing token in the argument
7346     is retained in the character string literal, except for special handling for producing the
7347     spelling of string literals and character constants: a \ character is inserted before each "
7348     and \ character of a character constant or string literal (including the delimiting "
7349     characters), except that it is implementation-defined whether a \ character is inserted
7350     before the \ character beginning a universal character name. If the replacement that
7351     results is not a valid character string literal, the behavior is undefined. The character
7352     string literal corresponding to an empty argument is "". The order of evaluation of # and
7353     ## operators is unspecified.
7354
7355
7356
7357
7358 [<a name="#p166" href="p166">page 166</a>] (<a href="#Contents">Contents</a>)
7359
7360 <a name="6.10.3.3" href="#6.10.3.3"><b>    6.10.3.3 The ## operator</b></a>
7361     Constraints
7362 1   A ## preprocessing token shall not occur at the beginning or at the end of a replacement
7363     list for either form of macro definition.
7364     Semantics
7365 2   If, in the replacement list of a function-like macro, a parameter is immediately preceded
7366     or followed by a ## preprocessing token, the parameter is replaced by the corresponding
7367     argument's preprocessing token sequence; however, if an argument consists of no
7368     preprocessing tokens, the parameter is replaced by a placemarker preprocessing token
7369     instead.171)
7370 3   For both object-like and function-like macro invocations, before the replacement list is
7371     reexamined for more macro names to replace, each instance of a ## preprocessing token
7372     in the replacement list (not from an argument) is deleted and the preceding preprocessing
7373     token is concatenated with the following preprocessing token. Placemarker
7374     preprocessing tokens are handled specially: concatenation of two placemarkers results in
7375     a single placemarker preprocessing token, and concatenation of a placemarker with a
7376     non-placemarker preprocessing token results in the non-placemarker preprocessing token.
7377     If the result is not a valid preprocessing token, the behavior is undefined. The resulting
7378     token is available for further macro replacement. The order of evaluation of ## operators
7379     is unspecified.
7380 4   EXAMPLE       In the following fragment:
7381             #define     hash_hash # ## #
7382             #define     mkstr(a) # a
7383             #define     in_between(a) mkstr(a)
7384             #define     join(c, d) in_between(c hash_hash d)
7385             char p[] = join(x, y); // equivalent to
7386                                    // char p[] = "x ## y";
7387     The expansion produces, at various stages:
7388             join(x, y)
7389             in_between(x hash_hash y)
7390             in_between(x ## y)
7391             mkstr(x ## y)
7392             "x ## y"
7393     In other words, expanding hash_hash produces a new token, consisting of two adjacent sharp signs, but
7394     this new token is not the ## operator.
7395
7396
7397     171) Placemarker preprocessing tokens do not appear in the syntax because they are temporary entities that
7398          exist only within translation phase 4.
7399
7400 [<a name="#p167" href="p167">page 167</a>] (<a href="#Contents">Contents</a>)
7401
7402 <a name="6.10.3.4" href="#6.10.3.4"><b>    6.10.3.4 Rescanning and further replacement</b></a>
7403 1   After all parameters in the replacement list have been substituted and # and ##
7404     processing has taken place, all placemarker preprocessing tokens are removed. The
7405     resulting preprocessing token sequence is then rescanned, along with all subsequent
7406     preprocessing tokens of the source file, for more macro names to replace.
7407 2   If the name of the macro being replaced is found during this scan of the replacement list
7408     (not including the rest of the source file's preprocessing tokens), it is not replaced.
7409     Furthermore, if any nested replacements encounter the name of the macro being replaced,
7410     it is not replaced. These nonreplaced macro name preprocessing tokens are no longer
7411     available for further replacement even if they are later (re)examined in contexts in which
7412     that macro name preprocessing token would otherwise have been replaced.
7413 3   The resulting completely macro-replaced preprocessing token sequence is not processed
7414     as a preprocessing directive even if it resembles one, but all pragma unary operator
7415     expressions within it are then processed as specified in <a href="#6.10.9">6.10.9</a> below.
7416 <a name="6.10.3.5" href="#6.10.3.5"><b>    6.10.3.5 Scope of macro definitions</b></a>
7417 1   A macro definition lasts (independent of block structure) until a corresponding #undef
7418     directive is encountered or (if none is encountered) until the end of the preprocessing
7419     translation unit. Macro definitions have no significance after translation phase 4.
7420 2   A preprocessing directive of the form
7421        # undef identifier new-line
7422     causes the specified identifier no longer to be defined as a macro name. It is ignored if
7423     the specified identifier is not currently defined as a macro name.
7424 3   EXAMPLE 1      The simplest use of this facility is to define a ''manifest constant'', as in
7425             #define TABSIZE 100
7426             int table[TABSIZE];
7427
7428 4   EXAMPLE 2 The following defines a function-like macro whose value is the maximum of its arguments.
7429     It has the advantages of working for any compatible types of the arguments and of generating in-line code
7430     without the overhead of function calling. It has the disadvantages of evaluating one or the other of its
7431     arguments a second time (including side effects) and generating more code than a function if invoked
7432     several times. It also cannot have its address taken, as it has none.
7433             #define max(a, b) ((a) &gt; (b) ? (a) : (b))
7434     The parentheses ensure that the arguments and the resulting expression are bound properly.
7435
7436
7437
7438
7439 [<a name="#p168" href="p168">page 168</a>] (<a href="#Contents">Contents</a>)
7440
7441 5   EXAMPLE 3     To illustrate the rules for redefinition and reexamination, the sequence
7442              #define   x         3
7443              #define   f(a)      f(x * (a))
7444              #undef    x
7445              #define   x         2
7446              #define   g         f
7447              #define   z         z[0]
7448              #define   h         g(~
7449              #define   m(a)      a(w)
7450              #define   w         0,1
7451              #define   t(a)      a
7452              #define   p()       int
7453              #define   q(x)      x
7454              #define   r(x,y)    x ## y
7455              #define   str(x)    # x
7456              f(y+1) + f(f(z)) % t(t(g)(0) + t)(1);
7457              g(x+(3,4)-w) | h 5) &amp; m
7458                    (f)^m(m);
7459              p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) };
7460              char c[2][6] = { str(hello), str() };
7461     results in
7462              f(2 * (y+1)) + f(2 * (f(2 * (z[0])))) % f(2 * (0)) + t(1);
7463              f(2 * (2+(3,4)-0,1)) | f(2 * (~ 5)) &amp; f(2 * (0,1))^m(0,1);
7464              int i[] = { 1, 23, 4, 5, };
7465              char c[2][6] = { "hello", "" };
7466
7467 6   EXAMPLE 4     To illustrate the rules for creating character string literals and concatenating tokens, the
7468     sequence
7469              #define str(s)      # s
7470              #define xstr(s)     str(s)
7471              #define debug(s, t) printf("x" # s "= %d, x" # t "= %s", \
7472                                      x ## s, x ## t)
7473              #define INCFILE(n) vers ## n
7474              #define glue(a, b) a ## b
7475              #define xglue(a, b) glue(a, b)
7476              #define HIGHLOW     "hello"
7477              #define LOW         LOW ", world"
7478              debug(1, 2);
7479              fputs(str(strncmp("abc\0d", "abc", '\4') // this goes away
7480                    == 0) str(: @\n), s);
7481              #include xstr(INCFILE(2).h)
7482              glue(HIGH, LOW);
7483              xglue(HIGH, LOW)
7484     results in
7485
7486
7487
7488
7489 [<a name="#p169" href="p169">page 169</a>] (<a href="#Contents">Contents</a>)
7490
7491              printf("x" "1" "= %d, x" "2" "= %s", x1, x2);
7492              fputs(
7493                "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0" ": @\n",
7494                s);
7495              #include "vers2.h"    (after macro replacement, before file access)
7496              "hello";
7497              "hello" ", world"
7498     or, after concatenation of the character string literals,
7499              printf("x1= %d, x2= %s", x1, x2);
7500              fputs(
7501                "strncmp(\"abc\\0d\", \"abc\", '\\4') == 0: @\n",
7502                s);
7503              #include "vers2.h"    (after macro replacement, before file access)
7504              "hello";
7505              "hello, world"
7506     Space around the # and ## tokens in the macro definition is optional.
7507
7508 7   EXAMPLE 5        To illustrate the rules for placemarker preprocessing tokens, the sequence
7509              #define t(x,y,z) x ## y ## z
7510              int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,),
7511                         t(10,,), t(,11,), t(,,12), t(,,) };
7512     results in
7513              int j[] = { 123, 45, 67, 89,
7514                          10, 11, 12, };
7515
7516 8   EXAMPLE 6        To demonstrate the redefinition rules, the following sequence is valid.
7517              #define      OBJ_LIKE      (1-1)
7518              #define      OBJ_LIKE      /* white space */ (1-1) /* other */
7519              #define      FUNC_LIKE(a)   ( a )
7520              #define      FUNC_LIKE( a )( /* note the white space */ \
7521                                           a /* other stuff on this line
7522                                               */ )
7523     But the following redefinitions are invalid:
7524              #define      OBJ_LIKE    (0)     // different token sequence
7525              #define      OBJ_LIKE    (1 - 1) // different white space
7526              #define      FUNC_LIKE(b) ( a ) // different parameter usage
7527              #define      FUNC_LIKE(b) ( b ) // different parameter spelling
7528
7529 9   EXAMPLE 7        Finally, to show the variable argument list macro facilities:
7530              #define debug(...)       fprintf(stderr, __VA_ARGS__)
7531              #define showlist(...)    puts(#__VA_ARGS__)
7532              #define report(test, ...) ((test)?puts(#test):\
7533                          printf(__VA_ARGS__))
7534              debug("Flag");
7535              debug("X = %d\n", x);
7536              showlist(The first, second, and third items.);
7537              report(x&gt;y, "x is %d but y is %d", x, y);
7538
7539
7540 [<a name="#p170" href="p170">page 170</a>] (<a href="#Contents">Contents</a>)
7541
7542     results in
7543               fprintf(stderr, "Flag" );
7544               fprintf(stderr, "X = %d\n", x );
7545               puts( "The first, second, and third items." );
7546               ((x&gt;y)?puts("x&gt;y"):
7547                           printf("x is %d but y is %d", x, y));
7548
7549 <a name="6.10.4" href="#6.10.4"><b>    6.10.4 Line control</b></a>
7550     Constraints
7551 1   The string literal of a #line directive, if present, shall be a character string literal.
7552     Semantics
7553 2   The line number of the current source line is one greater than the number of new-line
7554     characters read or introduced in translation phase 1 (<a href="#5.1.1.2">5.1.1.2</a>) while processing the source
7555     file to the current token.
7556 3   A preprocessing directive of the form
7557        # line digit-sequence new-line
7558     causes the implementation to behave as if the following sequence of source lines begins
7559     with a source line that has a line number as specified by the digit sequence (interpreted as
7560     a decimal integer). The digit sequence shall not specify zero, nor a number greater than
7561     2147483647.
7562 4   A preprocessing directive of the form
7563        # line digit-sequence "s-char-sequenceopt" new-line
7564     sets the presumed line number similarly and changes the presumed name of the source
7565     file to be the contents of the character string literal.
7566 5   A preprocessing directive of the form
7567        # line pp-tokens new-line
7568     (that does not match one of the two previous forms) is permitted. The preprocessing
7569     tokens after line on the directive are processed just as in normal text (each identifier
7570     currently defined as a macro name is replaced by its replacement list of preprocessing
7571     tokens). The directive resulting after all replacements shall match one of the two
7572     previous forms and is then processed as appropriate.
7573
7574
7575
7576
7577 [<a name="#p171" href="p171">page 171</a>] (<a href="#Contents">Contents</a>)
7578
7579 <a name="6.10.5" href="#6.10.5"><b>    6.10.5 Error directive</b></a>
7580     Semantics
7581 1   A preprocessing directive of the form
7582        # error pp-tokensopt new-line
7583     causes the implementation to produce a diagnostic message that includes the specified
7584     sequence of preprocessing tokens.
7585 <a name="6.10.6" href="#6.10.6"><b>    6.10.6 Pragma directive</b></a>
7586     Semantics
7587 1   A preprocessing directive of the form
7588        # pragma pp-tokensopt new-line
7589     where the preprocessing token STDC does not immediately follow pragma in the
7590     directive (prior to any macro replacement)172) causes the implementation to behave in an
7591     implementation-defined manner. The behavior might cause translation to fail or cause the
7592     translator or the resulting program to behave in a non-conforming manner. Any such
7593     pragma that is not recognized by the implementation is ignored.
7594 2   If the preprocessing token STDC does immediately follow pragma in the directive (prior
7595     to any macro replacement), then no macro replacement is performed on the directive, and
7596     the directive shall have one of the following forms173) whose meanings are described
7597     elsewhere:
7598        #pragma STDC FP_CONTRACT on-off-switch
7599        #pragma STDC FENV_ACCESS on-off-switch
7600        #pragma STDC CX_LIMITED_RANGE on-off-switch
7601        on-off-switch: one of
7602                    ON     OFF           DEFAULT
7603     Forward references: the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>), the FENV_ACCESS pragma
7604     (<a href="#7.6.1">7.6.1</a>), the CX_LIMITED_RANGE pragma (<a href="#7.3.4">7.3.4</a>).
7605
7606
7607
7608
7609     172) An implementation is not required to perform macro replacement in pragmas, but it is permitted
7610          except for in standard pragmas (where STDC immediately follows pragma). If the result of macro
7611          replacement in a non-standard pragma has the same form as a standard pragma, the behavior is still
7612          implementation-defined; an implementation is permitted to behave as if it were the standard pragma,
7613          but is not required to.
7614     173) See ''future language directions'' (<a href="#6.11.8">6.11.8</a>).
7615
7616 [<a name="#p172" href="p172">page 172</a>] (<a href="#Contents">Contents</a>)
7617
7618 <a name="6.10.7" href="#6.10.7"><b>    6.10.7 Null directive</b></a>
7619     Semantics
7620 1   A preprocessing directive of the form
7621        # new-line
7622     has no effect.
7623 <a name="6.10.8" href="#6.10.8"><b>    6.10.8 Predefined macro names</b></a>
7624 1   The values of the predefined macros listed in the following subclauses174) (except for
7625     __FILE__ and __LINE__) remain constant throughout the translation unit.
7626 2   None of these macro names, nor the identifier defined, shall be the subject of a
7627     #define or a #undef preprocessing directive. Any other predefined macro names
7628     shall begin with a leading underscore followed by an uppercase letter or a second
7629     underscore.
7630 3   The implementation shall not predefine the macro __cplusplus, nor shall it define it
7631     in any standard header.
7632     Forward references: standard headers (<a href="#7.1.2">7.1.2</a>).
7633 <a name="6.10.8.1" href="#6.10.8.1"><b>    6.10.8.1 Mandatory macros</b></a>
7634 1   The following macro names shall be defined by the implementation:
7635     __DATE__ The date of translation of the preprocessing translation unit: a character
7636                string literal of the form "Mmm dd yyyy", where the names of the
7637                months are the same as those generated by the asctime function, and the
7638                first character of dd is a space character if the value is less than 10. If the
7639                date of translation is not available, an implementation-defined valid date
7640                shall be supplied.
7641     __FILE__ The presumed name of the current source file (a character string literal).175)
7642     __LINE__ The presumed line number (within the current source file) of the current
7643                source line (an integer constant).175)
7644     __STDC__ The integer constant 1, intended to indicate a conforming implementation.
7645     __STDC_HOSTED__ The integer constant 1 if the implementation is a hosted
7646               implementation or the integer constant 0 if it is not.
7647
7648
7649
7650
7651     174) See ''future language directions'' (<a href="#6.11.9">6.11.9</a>).
7652     175) The presumed source file name and line number can be changed by the #line directive.
7653
7654 [<a name="#p173" href="p173">page 173</a>] (<a href="#Contents">Contents</a>)
7655
7656     __STDC_VERSION__ The integer constant 201ymmL.176)
7657     __TIME__ The time of translation of the preprocessing translation unit: a character
7658                string literal of the form "hh:mm:ss" as in the time generated by the
7659                asctime function. If the time of translation is not available, an
7660                implementation-defined valid time shall be supplied.
7661     Forward references: the asctime function (<a href="#7.26.3.1">7.26.3.1</a>).
7662 <a name="6.10.8.2" href="#6.10.8.2"><b>    6.10.8.2 Environment macros</b></a>
7663 1   The following macro names are conditionally defined by the implementation:
7664     __STDC_ISO_10646__ An integer constant of the form yyyymmL (for example,
7665               199712L). If this symbol is defined, then every character in the Unicode
7666               required set, when stored in an object of type wchar_t, has the same
7667               value as the short identifier of that character. The Unicode required set
7668               consists of all the characters that are defined by ISO/IEC 10646, along with
7669               all amendments and technical corrigenda, as of the specified year and
7670               month. If some other encoding is used, the macro shall not be defined and
7671               the actual encoding used is implementation-defined.
7672     __STDC_MB_MIGHT_NEQ_WC__ The integer constant 1, intended to indicate that, in
7673               the encoding for wchar_t, a member of the basic character set need not
7674               have a code value equal to its value when used as the lone character in an
7675               integer character constant.
7676     __STDC_UTF_16__ The integer constant 1, intended to indicate that values of type
7677               char16_t are UTF-16 encoded. If some other encoding is used, the
7678               macro shall not be defined and the actual encoding used is implementation-
7679               defined.
7680     __STDC_UTF_32__ The integer constant 1, intended to indicate that values of type
7681               char32_t are UTF-32 encoded. If some other encoding is used, the
7682               macro shall not be defined and the actual encoding used is implementation-
7683               defined.
7684     Forward references: common definitions (<a href="#7.19">7.19</a>), unicode utilities (<a href="#7.27">7.27</a>).
7685
7686
7687
7688
7689     176) This macro was not specified in ISO/IEC 9899:1990 and was specified as 199409L in
7690          ISO/IEC 9899/AMD1:1995 and as 199901L in ISO/IEC 9899:1999. The intention is that this will
7691          remain an integer constant of type long int that is increased with each revision of this International
7692          Standard.
7693
7694 [<a name="#p174" href="p174">page 174</a>] (<a href="#Contents">Contents</a>)
7695
7696 <a name="6.10.8.3" href="#6.10.8.3"><b>    6.10.8.3 Conditional feature macros</b></a>
7697 1   The following macro names are conditionally defined by the implementation:
7698     __STDC_ANALYZABLE__ The integer constant 1, intended to indicate conformance to
7699               the specifications in <a href="#L">annex L</a> (Analyzability).
7700     __STDC_IEC_559__ The integer constant 1, intended to indicate conformance to the
7701               specifications in <a href="#F">annex F</a> (IEC 60559 floating-point arithmetic).
7702     __STDC_IEC_559_COMPLEX__ The integer constant 1, intended to indicate
7703               adherence to the specifications in informative <a href="#G">annex G</a> (IEC 60559
7704               compatible complex arithmetic).
7705     __STDC_LIB_EXT1__ The integer constant 201ymmL, intended to indicate support
7706               for the extensions defined in <a href="#K">annex K</a> (Bounds-checking interfaces).177)
7707     __STDC_NO_COMPLEX__ The integer constant 1, intended to indicate that the
7708               implementation does not support complex types or the <a href="#7.3">&lt;complex.h&gt;</a>
7709               header.
7710     __STDC_NO_THREADS__ The integer constant 1, intended to indicate that the
7711               implementation does not support atomic types (including the _Atomic
7712               type qualifier and the <a href="#7.17">&lt;stdatomic.h&gt;</a> header) or the <a href="#7.25">&lt;threads.h&gt;</a>
7713               header.
7714     __STDC_NO_VLA__ The integer constant 1, intended to indicate that the
7715               implementation does not support variable length arrays or variably
7716               modified types.
7717 <a name="6.10.9" href="#6.10.9"><b>    6.10.9 Pragma operator</b></a>
7718     Semantics
7719 1   A unary operator expression of the form:
7720        _Pragma ( string-literal )
7721     is processed as follows: The string literal is destringized by deleting the L prefix, if
7722     present, deleting the leading and trailing double-quotes, replacing each escape sequence
7723     \" by a double-quote, and replacing each escape sequence \\ by a single backslash. The
7724     resulting sequence of characters is processed through translation phase 3 to produce
7725     preprocessing tokens that are executed as if they were the pp-tokens in a pragma
7726     directive. The original four preprocessing tokens in the unary operator expression are
7727     removed.
7728
7729
7730     177) The intention is that this will remain an integer constant of type long int that is increased with
7731          each revision of this International Standard.
7732
7733 [<a name="#p175" href="p175">page 175</a>] (<a href="#Contents">Contents</a>)
7734
7735 2   EXAMPLE       A directive of the form:
7736              #pragma listing on "..\listing.dir"
7737     can also be expressed as:
7738              _Pragma ( "listing on \"..\\listing.dir\"" )
7739     The latter form is processed in the same way whether it appears literally as shown, or results from macro
7740     replacement, as in:
7741              #define LISTING(x) PRAGMA(listing on #x)
7742              #define PRAGMA(x) _Pragma(#x)
7743              LISTING ( ..\listing.dir )
7744
7745
7746
7747
7748 [<a name="#p176" href="p176">page 176</a>] (<a href="#Contents">Contents</a>)
7749
7750 <a name="6.11" href="#6.11"><b>    6.11 Future language directions</b></a>
7751 <a name="6.11.1" href="#6.11.1"><b>    6.11.1 Floating types</b></a>
7752 1   Future standardization may include additional floating-point types, including those with
7753     greater range, precision, or both than long double.
7754 <a name="6.11.2" href="#6.11.2"><b>    6.11.2 Linkages of identifiers</b></a>
7755 1   Declaring an identifier with internal linkage at file scope without the static storage-
7756     class specifier is an obsolescent feature.
7757 <a name="6.11.3" href="#6.11.3"><b>    6.11.3 External names</b></a>
7758 1   Restriction of the significance of an external name to fewer than 255 characters
7759     (considering each universal character name or extended source character as a single
7760     character) is an obsolescent feature that is a concession to existing implementations.
7761 <a name="6.11.4" href="#6.11.4"><b>    6.11.4 Character escape sequences</b></a>
7762 1   Lowercase letters as escape sequences are reserved for future standardization. Other
7763     characters may be used in extensions.
7764 <a name="6.11.5" href="#6.11.5"><b>    6.11.5 Storage-class specifiers</b></a>
7765 1   The placement of a storage-class specifier other than at the beginning of the declaration
7766     specifiers in a declaration is an obsolescent feature.
7767 <a name="6.11.6" href="#6.11.6"><b>    6.11.6 Function declarators</b></a>
7768 1   The use of function declarators with empty parentheses (not prototype-format parameter
7769     type declarators) is an obsolescent feature.
7770 <a name="6.11.7" href="#6.11.7"><b>    6.11.7 Function definitions</b></a>
7771 1   The use of function definitions with separate parameter identifier and declaration lists
7772     (not prototype-format parameter type and identifier declarators) is an obsolescent feature.
7773 <a name="6.11.8" href="#6.11.8"><b>    6.11.8 Pragma directives</b></a>
7774 1   Pragmas whose first preprocessing token is STDC are reserved for future standardization.
7775 <a name="6.11.9" href="#6.11.9"><b>    6.11.9 Predefined macro names</b></a>
7776 1   Macro names beginning with __STDC_ are reserved for future standardization.
7777
7778
7779
7780
7781 [<a name="#p177" href="p177">page 177</a>] (<a href="#Contents">Contents</a>)
7782
7783
7784 <a name="7" href="#7"><b>    7. Library</b></a>
7785 <a name="7.1" href="#7.1"><b>    7.1 Introduction</b></a>
7786 <a name="7.1.1" href="#7.1.1"><b>    7.1.1 Definitions of terms</b></a>
7787 1   A string is a contiguous sequence of characters terminated by and including the first null
7788     character. The term multibyte string is sometimes used instead to emphasize special
7789     processing given to multibyte characters contained in the string or to avoid confusion
7790     with a wide string. A pointer to a string is a pointer to its initial (lowest addressed)
7791     character. The length of a string is the number of bytes preceding the null character and
7792     the value of a string is the sequence of the values of the contained characters, in order.
7793 2   The decimal-point character is the character used by functions that convert floating-point
7794     numbers to or from character sequences to denote the beginning of the fractional part of
7795     such character sequences.178) It is represented in the text and examples by a period, but
7796     may be changed by the setlocale function.
7797 3   A null wide character is a wide character with code value zero.
7798 4   A wide string is a contiguous sequence of wide characters terminated by and including
7799     the first null wide character. A pointer to a wide string is a pointer to its initial (lowest
7800     addressed) wide character. The length of a wide string is the number of wide characters
7801     preceding the null wide character and the value of a wide string is the sequence of code
7802     values of the contained wide characters, in order.
7803 5   A shift sequence is a contiguous sequence of bytes within a multibyte string that
7804     (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
7805     corresponding wide character; it is instead taken to be an adjunct to an adjacent multibyte
7806     character.179)
7807     Forward references: character handling (<a href="#7.4">7.4</a>), the setlocale function (<a href="#7.11.1.1">7.11.1.1</a>).
7808
7809
7810
7811
7812     178) The functions that make use of the decimal-point character are the numeric conversion functions
7813          (<a href="#7.22.1">7.22.1</a>, <a href="#7.28.4.1">7.28.4.1</a>) and the formatted input/output functions (<a href="#7.21.6">7.21.6</a>, <a href="#7.28.2">7.28.2</a>).
7814     179) For state-dependent encodings, the values for MB_CUR_MAX and MB_LEN_MAX shall thus be large
7815          enough to count all the bytes in any complete multibyte character plus at least one adjacent shift
7816          sequence of maximum length. Whether these counts provide for more than one shift sequence is the
7817          implementation's choice.
7818
7819 [<a name="#p178" href="p178">page 178</a>] (<a href="#Contents">Contents</a>)
7820
7821 <a name="7.1.2" href="#7.1.2"><b>    7.1.2 Standard headers</b></a>
7822 1   Each library function is declared, with a type that includes a prototype, in a header,180)
7823     whose contents are made available by the #include preprocessing directive. The
7824     header declares a set of related functions, plus any necessary types and additional macros
7825     needed to facilitate their use. Declarations of types described in this clause shall not
7826     include type qualifiers, unless explicitly stated otherwise.
7827 2   The standard headers are181)
7828            <a href="#7.2">&lt;assert.h&gt;</a>             <a href="#7.9">&lt;iso646.h&gt;</a>              <a href="#7.16">&lt;stdarg.h&gt;</a>              <a href="#7.23">&lt;string.h&gt;</a>
7829            <a href="#7.3">&lt;complex.h&gt;</a>            <a href="#7.10">&lt;limits.h&gt;</a>              <a href="#7.17">&lt;stdatomic.h&gt;</a>           <a href="#7.24">&lt;tgmath.h&gt;</a>
7830            <a href="#7.4">&lt;ctype.h&gt;</a>              <a href="#7.11">&lt;locale.h&gt;</a>              <a href="#7.18">&lt;stdbool.h&gt;</a>             <a href="#7.25">&lt;threads.h&gt;</a>
7831            <a href="#7.5">&lt;errno.h&gt;</a>              <a href="#7.12">&lt;math.h&gt;</a>                <a href="#7.19">&lt;stddef.h&gt;</a>              <a href="#7.26">&lt;time.h&gt;</a>
7832            <a href="#7.6">&lt;fenv.h&gt;</a>               <a href="#7.13">&lt;setjmp.h&gt;</a>              <a href="#7.20">&lt;stdint.h&gt;</a>              <a href="#7.27">&lt;uchar.h&gt;</a>
7833            <a href="#7.7">&lt;float.h&gt;</a>              <a href="#7.14">&lt;signal.h&gt;</a>              <a href="#7.21">&lt;stdio.h&gt;</a>               <a href="#7.28">&lt;wchar.h&gt;</a>
7834            <a href="#7.8">&lt;inttypes.h&gt;</a>           <a href="#7.15">&lt;stdalign.h&gt;</a>            <a href="#7.22">&lt;stdlib.h&gt;</a>              <a href="#7.29">&lt;wctype.h&gt;</a>
7835 3   If a file with the same name as one of the above &lt; and &gt; delimited sequences, not
7836     provided as part of the implementation, is placed in any of the standard places that are
7837     searched for included source files, the behavior is undefined.
7838 4   Standard headers may be included in any order; each may be included more than once in
7839     a given scope, with no effect different from being included only once, except that the
7840     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
7841     used, a header shall be included outside of any external declaration or definition, and it
7842     shall first be included before the first reference to any of the functions or objects it
7843     declares, or to any of the types or macros it defines. However, if an identifier is declared
7844     or defined in more than one header, the second and subsequent associated headers may be
7845     included after the initial reference to the identifier. The program shall not have any
7846     macros with names lexically identical to keywords currently defined prior to the
7847     inclusion.
7848 5   Any definition of an object-like macro described in this clause shall expand to code that is
7849     fully protected by parentheses where necessary, so that it groups in an arbitrary
7850     expression as if it were a single identifier.
7851 6   Any declaration of a library function shall have external linkage.
7852
7853
7854
7855
7856     180) A header is not necessarily a source file, nor are the &lt; and &gt; delimited sequences in header names
7857          necessarily valid source file names.
7858     181) The headers <a href="#7.3">&lt;complex.h&gt;</a>, <a href="#7.17">&lt;stdatomic.h&gt;</a>, and <a href="#7.25">&lt;threads.h&gt;</a> are conditional features that
7859          implementations need not support; see <a href="#6.10.8.3">6.10.8.3</a>.
7860
7861 [<a name="#p179" href="p179">page 179</a>] (<a href="#Contents">Contents</a>)
7862
7863 7   A summary of the contents of the standard headers is given in <a href="#B">annex B</a>.
7864     Forward references: diagnostics (<a href="#7.2">7.2</a>).
7865 <a name="7.1.3" href="#7.1.3"><b>    7.1.3 Reserved identifiers</b></a>
7866 1   Each header declares or defines all identifiers listed in its associated subclause, and
7867     optionally declares or defines identifiers listed in its associated future library directions
7868     subclause and identifiers which are always reserved either for any use or for use as file
7869     scope identifiers.
7870     -- All identifiers that begin with an underscore and either an uppercase letter or another
7871       underscore are always reserved for any use.
7872     -- All identifiers that begin with an underscore are always reserved for use as identifiers
7873       with file scope in both the ordinary and tag name spaces.
7874     -- Each macro name in any of the following subclauses (including the future library
7875       directions) is reserved for use as specified if any of its associated headers is included;
7876       unless explicitly stated otherwise (see <a href="#7.1.4">7.1.4</a>).
7877     -- All identifiers with external linkage in any of the following subclauses (including the
7878       future library directions) and errno are always reserved for use as identifiers with
7879       external linkage.182)
7880     -- Each identifier with file scope listed in any of the following subclauses (including the
7881       future library directions) is reserved for use as a macro name and as an identifier with
7882       file scope in the same name space if any of its associated headers is included.
7883 2   No other identifiers are reserved. If the program declares or defines an identifier in a
7884     context in which it is reserved (other than as allowed by <a href="#7.1.4">7.1.4</a>), or defines a reserved
7885     identifier as a macro name, the behavior is undefined.
7886 3   If the program removes (with #undef) any macro definition of an identifier in the first
7887     group listed above, the behavior is undefined.
7888
7889
7890
7891
7892     182) The list of reserved identifiers with external linkage includes math_errhandling, setjmp,
7893          va_copy, and va_end.
7894
7895 [<a name="#p180" href="p180">page 180</a>] (<a href="#Contents">Contents</a>)
7896
7897 <a name="7.1.4" href="#7.1.4"><b>    7.1.4 Use of library functions</b></a>
7898 1   Each of the following statements applies unless explicitly stated otherwise in the detailed
7899     descriptions that follow: If an argument to a function has an invalid value (such as a value
7900     outside the domain of the function, or a pointer outside the address space of the program,
7901     or a null pointer, or a pointer to non-modifiable storage when the corresponding
7902     parameter is not const-qualified) or a type (after promotion) not expected by a function
7903     with variable number of arguments, the behavior is undefined. If a function argument is
7904     described as being an array, the pointer actually passed to the function shall have a value
7905     such that all address computations and accesses to objects (that would be valid if the
7906     pointer did point to the first element of such an array) are in fact valid. Any function
7907     declared in a header may be additionally implemented as a function-like macro defined in
7908     the header, so if a library function is declared explicitly when its header is included, one
7909     of the techniques shown below can be used to ensure the declaration is not affected by
7910     such a macro. Any macro definition of a function can be suppressed locally by enclosing
7911     the name of the function in parentheses, because the name is then not followed by the left
7912     parenthesis that indicates expansion of a macro function name. For the same syntactic
7913     reason, it is permitted to take the address of a library function even if it is also defined as
7914     a macro.183) The use of #undef to remove any macro definition will also ensure that an
7915     actual function is referred to. Any invocation of a library function that is implemented as
7916     a macro shall expand to code that evaluates each of its arguments exactly once, fully
7917     protected by parentheses where necessary, so it is generally safe to use arbitrary
7918     expressions as arguments.184) Likewise, those function-like macros described in the
7919     following subclauses may be invoked in an expression anywhere a function with a
7920     compatible return type could be called.185) All object-like macros listed as expanding to
7921
7922
7923     183) This means that an implementation shall provide an actual function for each library function, even if it
7924          also provides a macro for that function.
7925     184) Such macros might not contain the sequence points that the corresponding function calls do.
7926     185) Because external identifiers and some macro names beginning with an underscore are reserved,
7927          implementations may provide special semantics for such names. For example, the identifier
7928          _BUILTIN_abs could be used to indicate generation of in-line code for the abs function. Thus, the
7929          appropriate header could specify
7930                   #define abs(x) _BUILTIN_abs(x)
7931          for a compiler whose code generator will accept it.
7932          In this manner, a user desiring to guarantee that a given library function such as abs will be a genuine
7933          function may write
7934                   #undef abs
7935          whether the implementation's header provides a macro implementation of abs or a built-in
7936          implementation. The prototype for the function, which precedes and is hidden by any macro
7937          definition, is thereby revealed also.
7938
7939 [<a name="#p181" href="p181">page 181</a>] (<a href="#Contents">Contents</a>)
7940
7941     integer constant expressions shall additionally be suitable for use in #if preprocessing
7942     directives.
7943 2   Provided that a library function can be declared without reference to any type defined in a
7944     header, it is also permissible to declare the function and use it without including its
7945     associated header.
7946 3   There is a sequence point immediately before a library function returns.
7947 4   The functions in the standard library are not guaranteed to be reentrant and may modify
7948     objects with static or thread storage duration.186)
7949 5   Unless explicitly stated otherwise in the detailed descriptions that follow, library
7950     functions shall prevent data races as follows: A library function shall not directly or
7951     indirectly access objects accessible by threads other than the current thread unless the
7952     objects are accessed directly or indirectly via the function's arguments. A library
7953     function shall not directly or indirectly modify objects accessible by threads other than
7954     the current thread unless the objects are accessed directly or indirectly via the function's
7955     non-const arguments.187) Implementations may share their own internal objects between
7956     threads if the objects are not visible to users and are protected against data races.
7957 6   Unless otherwise specified, library functions shall perform all operations solely within the
7958     current thread if those operations have effects that are visible to users.188)
7959 7   EXAMPLE        The function atoi may be used in any of several ways:
7960     -- by use of its associated header (possibly generating a macro expansion)
7961                  #include <a href="#7.22">&lt;stdlib.h&gt;</a>
7962                  const char *str;
7963                  /* ... */
7964                  i = atoi(str);
7965     -- by use of its associated header (assuredly generating a true function reference)
7966
7967
7968
7969
7970     186) Thus, a signal handler cannot, in general, call standard library functions.
7971     187) This means, for example, that an implementation is not permitted to use a static object for internal
7972          purposes without synchronization because it could cause a data race even in programs that do not
7973          explicitly share objects between threads.
7974     188) This allows implementations to parallelize operations if there are no visible side effects.
7975
7976 [<a name="#p182" href="p182">page 182</a>] (<a href="#Contents">Contents</a>)
7977
7978             #include <a href="#7.22">&lt;stdlib.h&gt;</a>
7979             #undef atoi
7980             const char *str;
7981             /* ... */
7982             i = atoi(str);
7983    or
7984             #include <a href="#7.22">&lt;stdlib.h&gt;</a>
7985             const char *str;
7986             /* ... */
7987             i = (atoi)(str);
7988 -- by explicit declaration
7989             extern int atoi(const char *);
7990             const char *str;
7991             /* ... */
7992             i = atoi(str);
7993
7994
7995
7996
7997 [<a name="#p183" href="p183">page 183</a>] (<a href="#Contents">Contents</a>)
7998
7999 <a name="7.2" href="#7.2"><b>    7.2 Diagnostics &lt;assert.h&gt;</b></a>
8000 1   The header <a href="#7.2">&lt;assert.h&gt;</a> defines the assert and static_assert macros and
8001     refers to another macro,
8002             NDEBUG
8003     which is not defined by <a href="#7.2">&lt;assert.h&gt;</a>. If NDEBUG is defined as a macro name at the
8004     point in the source file where <a href="#7.2">&lt;assert.h&gt;</a> is included, the assert macro is defined
8005     simply as
8006             #define assert(ignore) ((void)0)
8007     The assert macro is redefined according to the current state of NDEBUG each time that
8008     <a href="#7.2">&lt;assert.h&gt;</a> is included.
8009 2   The assert macro shall be implemented as a macro, not as an actual function. If the
8010     macro definition is suppressed in order to access an actual function, the behavior is
8011     undefined.
8012 3   The macro
8013             static_assert
8014     expands to _Static_assert.
8015 <a name="7.2.1" href="#7.2.1"><b>    7.2.1 Program diagnostics</b></a>
8016 <a name="7.2.1.1" href="#7.2.1.1"><b>    7.2.1.1 The assert macro</b></a>
8017     Synopsis
8018 1           #include <a href="#7.2">&lt;assert.h&gt;</a>
8019             void assert(scalar expression);
8020     Description
8021 2   The assert macro puts diagnostic tests into programs; it expands to a void expression.
8022     When it is executed, if expression (which shall have a scalar type) is false (that is,
8023     compares equal to 0), the assert macro writes information about the particular call that
8024     failed (including the text of the argument, the name of the source file, the source line
8025     number, and the name of the enclosing function -- the latter are respectively the values of
8026     the preprocessing macros __FILE__ and __LINE__ and of the identifier
8027     __func__) on the standard error stream in an implementation-defined format.189) It
8028     then calls the abort function.
8029
8030
8031
8032     189) The message written might be of the form:
8033           Assertion failed: expression, function abc, file xyz, line nnn.
8034
8035
8036 [<a name="#p184" href="p184">page 184</a>] (<a href="#Contents">Contents</a>)
8037
8038     Returns
8039 3   The assert macro returns no value.
8040     Forward references: the abort function (<a href="#7.22.4.1">7.22.4.1</a>).
8041
8042
8043
8044
8045 [<a name="#p185" href="p185">page 185</a>] (<a href="#Contents">Contents</a>)
8046
8047 <a name="7.3" href="#7.3"><b>    7.3 Complex arithmetic &lt;complex.h&gt;</b></a>
8048 <a name="7.3.1" href="#7.3.1"><b>    7.3.1 Introduction</b></a>
8049 1   The header <a href="#7.3">&lt;complex.h&gt;</a> defines macros and declares functions that support complex
8050     arithmetic.190)
8051 2   Implementations that define the macro __STDC_NO_COMPLEX__ need not provide
8052     this header nor support any of its facilities.
8053 3   Each synopsis specifies a family of functions consisting of a principal function with one
8054     or more double complex parameters and a double complex or double return
8055     value; and other functions with the same name but with f and l suffixes which are
8056     corresponding functions with float and long double parameters and return values.
8057 4   The macro
8058              complex
8059     expands to _Complex; the macro
8060              _Complex_I
8061     expands to a constant expression of type const float _Complex, with the value of
8062     the imaginary unit.191)
8063 5   The macros
8064              imaginary
8065     and
8066              _Imaginary_I
8067     are defined if and only if the implementation supports imaginary types;192) if defined,
8068     they expand to _Imaginary and a constant expression of type const float
8069     _Imaginary with the value of the imaginary unit.
8070 6   The macro
8071              I
8072     expands to either _Imaginary_I or _Complex_I. If _Imaginary_I is not
8073     defined, I shall expand to _Complex_I.
8074 7   Notwithstanding the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and perhaps then
8075     redefine the macros complex, imaginary, and I.
8076
8077     190) See ''future library directions'' (<a href="#7.30.1">7.30.1</a>).
8078     191) The imaginary unit is a number i such that i 2 = -1.
8079     192) A specification for imaginary types is in informative <a href="#G">annex G</a>.
8080
8081 [<a name="#p186" href="p186">page 186</a>] (<a href="#Contents">Contents</a>)
8082
8083     Forward references: IEC 60559-compatible complex arithmetic (<a href="#G">annex G</a>).
8084 <a name="7.3.2" href="#7.3.2"><b>    7.3.2 Conventions</b></a>
8085 1   Values are interpreted as radians, not degrees. An implementation may set errno but is
8086     not required to.
8087 <a name="7.3.3" href="#7.3.3"><b>    7.3.3 Branch cuts</b></a>
8088 1   Some of the functions below have branch cuts, across which the function is
8089     discontinuous. For implementations with a signed zero (including all IEC 60559
8090     implementations) that follow the specifications of <a href="#G">annex G</a>, the sign of zero distinguishes
8091     one side of a cut from another so the function is continuous (except for format
8092     limitations) as the cut is approached from either side. For example, for the square root
8093     function, which has a branch cut along the negative real axis, the top of the cut, with
8094     imaginary part +0, maps to the positive imaginary axis, and the bottom of the cut, with
8095     imaginary part -0, maps to the negative imaginary axis.
8096 2   Implementations that do not support a signed zero (see <a href="#F">annex F</a>) cannot distinguish the
8097     sides of branch cuts. These implementations shall map a cut so the function is continuous
8098     as the cut is approached coming around the finite endpoint of the cut in a counter
8099     clockwise direction. (Branch cuts for the functions specified here have just one finite
8100     endpoint.) For example, for the square root function, coming counter clockwise around
8101     the finite endpoint of the cut along the negative real axis approaches the cut from above,
8102     so the cut maps to the positive imaginary axis.
8103 <a name="7.3.4" href="#7.3.4"><b>    7.3.4 The CX_LIMITED_RANGE pragma</b></a>
8104     Synopsis
8105 1            #include <a href="#7.3">&lt;complex.h&gt;</a>
8106              #pragma STDC CX_LIMITED_RANGE on-off-switch
8107     Description
8108 2   The usual mathematical formulas for complex multiply, divide, and absolute value are
8109     problematic because of their treatment of infinities and because of undue overflow and
8110     underflow. The CX_LIMITED_RANGE pragma can be used to inform the
8111     implementation that (where the state is ''on'') the usual mathematical formulas are
8112     acceptable.193) The pragma can occur either outside external declarations or preceding all
8113     explicit declarations and statements inside a compound statement. When outside external
8114     declarations, the pragma takes effect from its occurrence until another
8115     CX_LIMITED_RANGE pragma is encountered, or until the end of the translation unit.
8116     When inside a compound statement, the pragma takes effect from its occurrence until
8117     another CX_LIMITED_RANGE pragma is encountered (including within a nested
8118     compound statement), or until the end of the compound statement; at the end of a
8119     compound statement the state for the pragma is restored to its condition just before the
8120
8121 [<a name="#p187" href="p187">page 187</a>] (<a href="#Contents">Contents</a>)
8122
8123     compound statement. If this pragma is used in any other context, the behavior is
8124     undefined. The default state for the pragma is ''off''.
8125 <a name="7.3.5" href="#7.3.5"><b>    7.3.5 Trigonometric functions</b></a>
8126 <a name="7.3.5.1" href="#7.3.5.1"><b>    7.3.5.1 The cacos functions</b></a>
8127     Synopsis
8128 1            #include <a href="#7.3">&lt;complex.h&gt;</a>
8129              double complex cacos(double complex z);
8130              float complex cacosf(float complex z);
8131              long double complex cacosl(long double complex z);
8132     Description
8133 2   The cacos functions compute the complex arc cosine of z, with branch cuts outside the
8134     interval [-1, +1] along the real axis.
8135     Returns
8136 3   The cacos functions return the complex arc cosine value, in the range of a strip
8137     mathematically unbounded along the imaginary axis and in the interval [0, pi ] along the
8138     real axis.
8139 <a name="7.3.5.2" href="#7.3.5.2"><b>    7.3.5.2 The casin functions</b></a>
8140     Synopsis
8141 1            #include <a href="#7.3">&lt;complex.h&gt;</a>
8142              double complex casin(double complex z);
8143              float complex casinf(float complex z);
8144              long double complex casinl(long double complex z);
8145     Description
8146 2   The casin functions compute the complex arc sine of z, with branch cuts outside the
8147     interval [-1, +1] along the real axis.
8148     Returns
8149 3   The casin functions return the complex arc sine value, in the range of a strip
8150     mathematically unbounded along the imaginary axis and in the interval [-pi /2, +pi /2]
8151
8152     193) The purpose of the pragma is to allow the implementation to use the formulas:
8153              (x + iy) x (u + iv) = (xu - yv) + i(yu + xv)
8154              (x + iy) / (u + iv) = [(xu + yv) + i(yu - xv)]/(u2 + v 2 )
8155              | x + iy | = sqrt: x 2 + y 2
8156                           -----
8157           where the programmer can determine they are safe.
8158
8159 [<a name="#p188" href="p188">page 188</a>] (<a href="#Contents">Contents</a>)
8160
8161     along the real axis.
8162 <a name="7.3.5.3" href="#7.3.5.3"><b>    7.3.5.3 The catan functions</b></a>
8163     Synopsis
8164 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8165             double complex catan(double complex z);
8166             float complex catanf(float complex z);
8167             long double complex catanl(long double complex z);
8168     Description
8169 2   The catan functions compute the complex arc tangent of z, with branch cuts outside the
8170     interval [-i, +i] along the imaginary axis.
8171     Returns
8172 3   The catan functions return the complex arc tangent value, in the range of a strip
8173     mathematically unbounded along the imaginary axis and in the interval [-pi /2, +pi /2]
8174     along the real axis.
8175 <a name="7.3.5.4" href="#7.3.5.4"><b>    7.3.5.4 The ccos functions</b></a>
8176     Synopsis
8177 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8178             double complex ccos(double complex z);
8179             float complex ccosf(float complex z);
8180             long double complex ccosl(long double complex z);
8181     Description
8182 2   The ccos functions compute the complex cosine of z.
8183     Returns
8184 3   The ccos functions return the complex cosine value.
8185 <a name="7.3.5.5" href="#7.3.5.5"><b>    7.3.5.5 The csin functions</b></a>
8186     Synopsis
8187 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8188             double complex csin(double complex z);
8189             float complex csinf(float complex z);
8190             long double complex csinl(long double complex z);
8191     Description
8192 2   The csin functions compute the complex sine of z.
8193
8194
8195
8196 [<a name="#p189" href="p189">page 189</a>] (<a href="#Contents">Contents</a>)
8197
8198     Returns
8199 3   The csin functions return the complex sine value.
8200 <a name="7.3.5.6" href="#7.3.5.6"><b>    7.3.5.6 The ctan functions</b></a>
8201     Synopsis
8202 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8203            double complex ctan(double complex z);
8204            float complex ctanf(float complex z);
8205            long double complex ctanl(long double complex z);
8206     Description
8207 2   The ctan functions compute the complex tangent of z.
8208     Returns
8209 3   The ctan functions return the complex tangent value.
8210 <a name="7.3.6" href="#7.3.6"><b>    7.3.6 Hyperbolic functions</b></a>
8211 <a name="7.3.6.1" href="#7.3.6.1"><b>    7.3.6.1 The cacosh functions</b></a>
8212     Synopsis
8213 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8214            double complex cacosh(double complex z);
8215            float complex cacoshf(float complex z);
8216            long double complex cacoshl(long double complex z);
8217     Description
8218 2   The cacosh functions compute the complex arc hyperbolic cosine of z, with a branch
8219     cut at values less than 1 along the real axis.
8220     Returns
8221 3   The cacosh functions return the complex arc hyperbolic cosine value, in the range of a
8222     half-strip of non-negative values along the real axis and in the interval [-ipi , +ipi ] along
8223     the imaginary axis.
8224 <a name="7.3.6.2" href="#7.3.6.2"><b>    7.3.6.2 The casinh functions</b></a>
8225     Synopsis
8226 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8227            double complex casinh(double complex z);
8228            float complex casinhf(float complex z);
8229            long double complex casinhl(long double complex z);
8230
8231
8232
8233 [<a name="#p190" href="p190">page 190</a>] (<a href="#Contents">Contents</a>)
8234
8235     Description
8236 2   The casinh functions compute the complex arc hyperbolic sine of z, with branch cuts
8237     outside the interval [-i, +i] along the imaginary axis.
8238     Returns
8239 3   The casinh functions return the complex arc hyperbolic sine value, in the range of a
8240     strip mathematically unbounded along the real axis and in the interval [-ipi /2, +ipi /2]
8241     along the imaginary axis.
8242 <a name="7.3.6.3" href="#7.3.6.3"><b>    7.3.6.3 The catanh functions</b></a>
8243     Synopsis
8244 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8245             double complex catanh(double complex z);
8246             float complex catanhf(float complex z);
8247             long double complex catanhl(long double complex z);
8248     Description
8249 2   The catanh functions compute the complex arc hyperbolic tangent of z, with branch
8250     cuts outside the interval [-1, +1] along the real axis.
8251     Returns
8252 3   The catanh functions return the complex arc hyperbolic tangent value, in the range of a
8253     strip mathematically unbounded along the real axis and in the interval [-ipi /2, +ipi /2]
8254     along the imaginary axis.
8255 <a name="7.3.6.4" href="#7.3.6.4"><b>    7.3.6.4 The ccosh functions</b></a>
8256     Synopsis
8257 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8258             double complex ccosh(double complex z);
8259             float complex ccoshf(float complex z);
8260             long double complex ccoshl(long double complex z);
8261     Description
8262 2   The ccosh functions compute the complex hyperbolic cosine of z.
8263     Returns
8264 3   The ccosh functions return the complex hyperbolic cosine value.
8265
8266
8267
8268
8269 [<a name="#p191" href="p191">page 191</a>] (<a href="#Contents">Contents</a>)
8270
8271 <a name="7.3.6.5" href="#7.3.6.5"><b>    7.3.6.5 The csinh functions</b></a>
8272     Synopsis
8273 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8274            double complex csinh(double complex z);
8275            float complex csinhf(float complex z);
8276            long double complex csinhl(long double complex z);
8277     Description
8278 2   The csinh functions compute the complex hyperbolic sine of z.
8279     Returns
8280 3   The csinh functions return the complex hyperbolic sine value.
8281 <a name="7.3.6.6" href="#7.3.6.6"><b>    7.3.6.6 The ctanh functions</b></a>
8282     Synopsis
8283 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8284            double complex ctanh(double complex z);
8285            float complex ctanhf(float complex z);
8286            long double complex ctanhl(long double complex z);
8287     Description
8288 2   The ctanh functions compute the complex hyperbolic tangent of z.
8289     Returns
8290 3   The ctanh functions return the complex hyperbolic tangent value.
8291 <a name="7.3.7" href="#7.3.7"><b>    7.3.7 Exponential and logarithmic functions</b></a>
8292 <a name="7.3.7.1" href="#7.3.7.1"><b>    7.3.7.1 The cexp functions</b></a>
8293     Synopsis
8294 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8295            double complex cexp(double complex z);
8296            float complex cexpf(float complex z);
8297            long double complex cexpl(long double complex z);
8298     Description
8299 2   The cexp functions compute the complex base-e exponential of z.
8300     Returns
8301 3   The cexp functions return the complex base-e exponential value.
8302
8303
8304
8305 [<a name="#p192" href="p192">page 192</a>] (<a href="#Contents">Contents</a>)
8306
8307 <a name="7.3.7.2" href="#7.3.7.2"><b>    7.3.7.2 The clog functions</b></a>
8308     Synopsis
8309 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8310             double complex clog(double complex z);
8311             float complex clogf(float complex z);
8312             long double complex clogl(long double complex z);
8313     Description
8314 2   The clog functions compute the complex natural (base-e) logarithm of z, with a branch
8315     cut along the negative real axis.
8316     Returns
8317 3   The clog functions return the complex natural logarithm value, in the range of a strip
8318     mathematically unbounded along the real axis and in the interval [-ipi , +ipi ] along the
8319     imaginary axis.
8320 <a name="7.3.8" href="#7.3.8"><b>    7.3.8 Power and absolute-value functions</b></a>
8321 <a name="7.3.8.1" href="#7.3.8.1"><b>    7.3.8.1 The cabs functions</b></a>
8322     Synopsis
8323 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8324             double cabs(double complex z);
8325             float cabsf(float complex z);
8326             long double cabsl(long double complex z);
8327     Description
8328 2   The cabs functions compute the complex absolute value (also called norm, modulus, or
8329     magnitude) of z.
8330     Returns
8331 3   The cabs functions return the complex absolute value.
8332 <a name="7.3.8.2" href="#7.3.8.2"><b>    7.3.8.2 The cpow functions</b></a>
8333     Synopsis
8334 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8335             double complex cpow(double complex x, double complex y);
8336             float complex cpowf(float complex x, float complex y);
8337             long double complex cpowl(long double complex x,
8338                  long double complex y);
8339
8340
8341
8342
8343 [<a name="#p193" href="p193">page 193</a>] (<a href="#Contents">Contents</a>)
8344
8345     Description
8346 2   The cpow functions compute the complex power function xy , with a branch cut for the
8347     first parameter along the negative real axis.
8348     Returns
8349 3   The cpow functions return the complex power function value.
8350 <a name="7.3.8.3" href="#7.3.8.3"><b>    7.3.8.3 The csqrt functions</b></a>
8351     Synopsis
8352 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8353            double complex csqrt(double complex z);
8354            float complex csqrtf(float complex z);
8355            long double complex csqrtl(long double complex z);
8356     Description
8357 2   The csqrt functions compute the complex square root of z, with a branch cut along the
8358     negative real axis.
8359     Returns
8360 3   The csqrt functions return the complex square root value, in the range of the right half-
8361     plane (including the imaginary axis).
8362 <a name="7.3.9" href="#7.3.9"><b>    7.3.9 Manipulation functions</b></a>
8363 <a name="7.3.9.1" href="#7.3.9.1"><b>    7.3.9.1 The carg functions</b></a>
8364     Synopsis
8365 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8366            double carg(double complex z);
8367            float cargf(float complex z);
8368            long double cargl(long double complex z);
8369     Description
8370 2   The carg functions compute the argument (also called phase angle) of z, with a branch
8371     cut along the negative real axis.
8372     Returns
8373 3   The carg functions return the value of the argument in the interval [-pi , +pi ].
8374
8375
8376
8377
8378 [<a name="#p194" href="p194">page 194</a>] (<a href="#Contents">Contents</a>)
8379
8380 <a name="7.3.9.2" href="#7.3.9.2"><b>    7.3.9.2 The cimag functions</b></a>
8381     Synopsis
8382 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8383             double cimag(double complex z);
8384             float cimagf(float complex z);
8385             long double cimagl(long double complex z);
8386     Description
8387 2   The cimag functions compute the imaginary part of z.194)
8388     Returns
8389 3   The cimag functions return the imaginary part value (as a real).
8390 <a name="7.3.9.3" href="#7.3.9.3"><b>    7.3.9.3 The CMPLX macros</b></a>
8391     Synopsis
8392 1           #include <a href="#7.3">&lt;complex.h&gt;</a>
8393             double complex CMPLX(double x, double y);
8394             float complex CMPLXF(float x, float y);
8395             long double complex CMPLXL(long double x, long double y);
8396     Description
8397 2   The CMPLX macros expand to an expression of the specified complex type, with the real
8398     part having the (converted) value of x and the imaginary part having the (converted)
8399     value of y.
8400     Recommended practice
8401 3   The resulting expression should be suitable for use as an initializer for an object with
8402     static or thread storage duration, provided both arguments are likewise suitable.
8403     Returns
8404 4   The CMPLX macros return the complex value x + i y.
8405 5   NOTE    These macros act as if the implementation supported imaginary types and the definitions were:
8406          #define CMPLX(x, y)  ((double complex)((double)(x) + \
8407                                        _Imaginary_I * (double)(y)))
8408          #define CMPLXF(x, y) ((float complex)((float)(x) + \
8409                                        _Imaginary_I * (float)(y)))
8410          #define CMPLXL(x, y) ((long double complex)((long double)(x) + \
8411                                        _Imaginary_I * (long double)(y)))
8412
8413
8414
8415
8416     194) For a variable z of complex type, z == creal(z) + cimag(z)*I.
8417
8418 [<a name="#p195" href="p195">page 195</a>] (<a href="#Contents">Contents</a>)
8419
8420 <a name="7.3.9.4" href="#7.3.9.4"><b>    7.3.9.4 The conj functions</b></a>
8421     Synopsis
8422 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8423            double complex conj(double complex z);
8424            float complex conjf(float complex z);
8425            long double complex conjl(long double complex z);
8426     Description
8427 2   The conj functions compute the complex conjugate of z, by reversing the sign of its
8428     imaginary part.
8429     Returns
8430 3   The conj functions return the complex conjugate value.
8431 <a name="7.3.9.5" href="#7.3.9.5"><b>    7.3.9.5 The cproj functions</b></a>
8432     Synopsis
8433 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8434            double complex cproj(double complex z);
8435            float complex cprojf(float complex z);
8436            long double complex cprojl(long double complex z);
8437     Description
8438 2   The cproj functions compute a projection of z onto the Riemann sphere: z projects to
8439     z except that all complex infinities (even those with one infinite part and one NaN part)
8440     project to positive infinity on the real axis. If z has an infinite part, then cproj(z) is
8441     equivalent to
8442            INFINITY + I * copysign(0.0, cimag(z))
8443     Returns
8444 3   The cproj functions return the value of the projection onto the Riemann sphere.
8445 <a name="7.3.9.6" href="#7.3.9.6"><b>    7.3.9.6 The creal functions</b></a>
8446     Synopsis
8447 1          #include <a href="#7.3">&lt;complex.h&gt;</a>
8448            double creal(double complex z);
8449            float crealf(float complex z);
8450            long double creall(long double complex z);
8451     Description
8452 2   The creal functions compute the real part of z.195)
8453
8454
8455 [<a name="#p196" href="p196">page 196</a>] (<a href="#Contents">Contents</a>)
8456
8457     Returns
8458 3   The creal functions return the real part value.
8459
8460
8461
8462
8463     195) For a variable z of complex type, z == creal(z) + cimag(z)*I.
8464
8465 [<a name="#p197" href="p197">page 197</a>] (<a href="#Contents">Contents</a>)
8466
8467 <a name="7.4" href="#7.4"><b>    7.4 Character handling &lt;ctype.h&gt;</b></a>
8468 1   The header <a href="#7.4">&lt;ctype.h&gt;</a> declares several functions useful for classifying and mapping
8469     characters.196) In all cases the argument is an int, the value of which shall be
8470     representable as an unsigned char or shall equal the value of the macro EOF. If the
8471     argument has any other value, the behavior is undefined.
8472 2   The behavior of these functions is affected by the current locale. Those functions that
8473     have locale-specific aspects only when not in the "C" locale are noted below.
8474 3   The term printing character refers to a member of a locale-specific set of characters, each
8475     of which occupies one printing position on a display device; the term control character
8476     refers to a member of a locale-specific set of characters that are not printing
8477     characters.197) All letters and digits are printing characters.
8478     Forward references: EOF (<a href="#7.21.1">7.21.1</a>), localization (<a href="#7.11">7.11</a>).
8479 <a name="7.4.1" href="#7.4.1"><b>    7.4.1 Character classification functions</b></a>
8480 1   The functions in this subclause return nonzero (true) if and only if the value of the
8481     argument c conforms to that in the description of the function.
8482 <a name="7.4.1.1" href="#7.4.1.1"><b>    7.4.1.1 The isalnum function</b></a>
8483     Synopsis
8484 1            #include <a href="#7.4">&lt;ctype.h&gt;</a>
8485              int isalnum(int c);
8486     Description
8487 2   The isalnum function tests for any character for which isalpha or isdigit is true.
8488 <a name="7.4.1.2" href="#7.4.1.2"><b>    7.4.1.2 The isalpha function</b></a>
8489     Synopsis
8490 1            #include <a href="#7.4">&lt;ctype.h&gt;</a>
8491              int isalpha(int c);
8492     Description
8493 2   The isalpha function tests for any character for which isupper or islower is true,
8494     or any character that is one of a locale-specific set of alphabetic characters for which
8495
8496
8497
8498     196) See ''future library directions'' (<a href="#7.30.2">7.30.2</a>).
8499     197) In an implementation that uses the seven-bit US ASCII character set, the printing characters are those
8500          whose values lie from 0x20 (space) through 0x7E (tilde); the control characters are those whose
8501          values lie from 0 (NUL) through 0x1F (US), and the character 0x7F (DEL).
8502
8503 [<a name="#p198" href="p198">page 198</a>] (<a href="#Contents">Contents</a>)
8504
8505     none of iscntrl, isdigit, ispunct, or isspace is true.198) In the "C" locale,
8506     isalpha returns true only for the characters for which isupper or islower is true.
8507 <a name="7.4.1.3" href="#7.4.1.3"><b>    7.4.1.3 The isblank function</b></a>
8508     Synopsis
8509 1           #include <a href="#7.4">&lt;ctype.h&gt;</a>
8510             int isblank(int c);
8511     Description
8512 2   The isblank function tests for any character that is a standard blank character or is one
8513     of a locale-specific set of characters for which isspace is true and that is used to
8514     separate words within a line of text. The standard blank characters are the following:
8515     space (' '), and horizontal tab ('\t'). In the "C" locale, isblank returns true only
8516     for the standard blank characters.
8517 <a name="7.4.1.4" href="#7.4.1.4"><b>    7.4.1.4 The iscntrl function</b></a>
8518     Synopsis
8519 1           #include <a href="#7.4">&lt;ctype.h&gt;</a>
8520             int iscntrl(int c);
8521     Description
8522 2   The iscntrl function tests for any control character.
8523 <a name="7.4.1.5" href="#7.4.1.5"><b>    7.4.1.5 The isdigit function</b></a>
8524     Synopsis
8525 1           #include <a href="#7.4">&lt;ctype.h&gt;</a>
8526             int isdigit(int c);
8527     Description
8528 2   The isdigit function tests for any decimal-digit character (as defined in <a href="#5.2.1">5.2.1</a>).
8529 <a name="7.4.1.6" href="#7.4.1.6"><b>    7.4.1.6 The isgraph function</b></a>
8530     Synopsis
8531 1           #include <a href="#7.4">&lt;ctype.h&gt;</a>
8532             int isgraph(int c);
8533
8534
8535
8536
8537     198) The functions islower and isupper test true or false separately for each of these additional
8538          characters; all four combinations are possible.
8539
8540 [<a name="#p199" href="p199">page 199</a>] (<a href="#Contents">Contents</a>)
8541
8542     Description
8543 2   The isgraph function tests for any printing character except space (' ').
8544 <a name="7.4.1.7" href="#7.4.1.7"><b>    7.4.1.7 The islower function</b></a>
8545     Synopsis
8546 1          #include <a href="#7.4">&lt;ctype.h&gt;</a>
8547            int islower(int c);
8548     Description
8549 2   The islower function tests for any character that is a lowercase letter or is one of a
8550     locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
8551     isspace is true. In the "C" locale, islower returns true only for the lowercase
8552     letters (as defined in <a href="#5.2.1">5.2.1</a>).
8553 <a name="7.4.1.8" href="#7.4.1.8"><b>    7.4.1.8 The isprint function</b></a>
8554     Synopsis
8555 1          #include <a href="#7.4">&lt;ctype.h&gt;</a>
8556            int isprint(int c);
8557     Description
8558 2   The isprint function tests for any printing character including space (' ').
8559 <a name="7.4.1.9" href="#7.4.1.9"><b>    7.4.1.9 The ispunct function</b></a>
8560     Synopsis
8561 1          #include <a href="#7.4">&lt;ctype.h&gt;</a>
8562            int ispunct(int c);
8563     Description
8564 2   The ispunct function tests for any printing character that is one of a locale-specific set
8565     of punctuation characters for which neither isspace nor isalnum is true. In the "C"
8566     locale, ispunct returns true for every printing character for which neither isspace
8567     nor isalnum is true.
8568 <a name="7.4.1.10" href="#7.4.1.10"><b>    7.4.1.10 The isspace function</b></a>
8569     Synopsis
8570 1          #include <a href="#7.4">&lt;ctype.h&gt;</a>
8571            int isspace(int c);
8572     Description
8573 2   The isspace function tests for any character that is a standard white-space character or
8574     is one of a locale-specific set of characters for which isalnum is false. The standard
8575
8576 [<a name="#p200" href="p200">page 200</a>] (<a href="#Contents">Contents</a>)
8577
8578     white-space characters are the following: space (' '), form feed ('\f'), new-line
8579     ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). In the
8580     "C" locale, isspace returns true only for the standard white-space characters.
8581 <a name="7.4.1.11" href="#7.4.1.11"><b>    7.4.1.11 The isupper function</b></a>
8582     Synopsis
8583 1           #include <a href="#7.4">&lt;ctype.h&gt;</a>
8584             int isupper(int c);
8585     Description
8586 2   The isupper function tests for any character that is an uppercase letter or is one of a
8587     locale-specific set of characters for which none of iscntrl, isdigit, ispunct, or
8588     isspace is true. In the "C" locale, isupper returns true only for the uppercase
8589     letters (as defined in <a href="#5.2.1">5.2.1</a>).
8590 <a name="7.4.1.12" href="#7.4.1.12"><b>    7.4.1.12 The isxdigit function</b></a>
8591     Synopsis
8592 1           #include <a href="#7.4">&lt;ctype.h&gt;</a>
8593             int isxdigit(int c);
8594     Description
8595 2   The isxdigit function tests for any hexadecimal-digit character (as defined in <a href="#6.4.4.1">6.4.4.1</a>).
8596 <a name="7.4.2" href="#7.4.2"><b>    7.4.2 Character case mapping functions</b></a>
8597 <a name="7.4.2.1" href="#7.4.2.1"><b>    7.4.2.1 The tolower function</b></a>
8598     Synopsis
8599 1           #include <a href="#7.4">&lt;ctype.h&gt;</a>
8600             int tolower(int c);
8601     Description
8602 2   The tolower function converts an uppercase letter to a corresponding lowercase letter.
8603     Returns
8604 3   If the argument is a character for which isupper is true and there are one or more
8605     corresponding characters, as specified by the current locale, for which islower is true,
8606     the tolower function returns one of the corresponding characters (always the same one
8607     for any given locale); otherwise, the argument is returned unchanged.
8608
8609
8610
8611
8612 [<a name="#p201" href="p201">page 201</a>] (<a href="#Contents">Contents</a>)
8613
8614 <a name="7.4.2.2" href="#7.4.2.2"><b>    7.4.2.2 The toupper function</b></a>
8615     Synopsis
8616 1          #include <a href="#7.4">&lt;ctype.h&gt;</a>
8617            int toupper(int c);
8618     Description
8619 2   The toupper function converts a lowercase letter to a corresponding uppercase letter.
8620     Returns
8621 3   If the argument is a character for which islower is true and there are one or more
8622     corresponding characters, as specified by the current locale, for which isupper is true,
8623     the toupper function returns one of the corresponding characters (always the same one
8624     for any given locale); otherwise, the argument is returned unchanged.
8625
8626
8627
8628
8629 [<a name="#p202" href="p202">page 202</a>] (<a href="#Contents">Contents</a>)
8630
8631 <a name="7.5" href="#7.5"><b>    7.5 Errors &lt;errno.h&gt;</b></a>
8632 1   The header <a href="#7.5">&lt;errno.h&gt;</a> defines several macros, all relating to the reporting of error
8633     conditions.
8634 2   The macros are
8635              EDOM
8636              EILSEQ
8637              ERANGE
8638     which expand to integer constant expressions with type int, distinct positive values, and
8639     which are suitable for use in #if preprocessing directives; and
8640              errno
8641     which expands to a modifiable lvalue199) that has type int and thread local storage
8642     duration, the value of which is set to a positive error number by several library functions.
8643     If a macro definition is suppressed in order to access an actual object, or a program
8644     defines an identifier with the name errno, the behavior is undefined.
8645 3   The value of errno in the initial thread is zero at program startup (the initial value of
8646     errno in other threads is an indeterminate value), but is never set to zero by any library
8647     function.200) The value of errno may be set to nonzero by a library function call
8648     whether or not there is an error, provided the use of errno is not documented in the
8649     description of the function in this International Standard.
8650 4   Additional macro definitions, beginning with E and a digit or E and an uppercase
8651     letter,201) may also be specified by the implementation.
8652
8653
8654
8655
8656     199) The macro errno need not be the identifier of an object. It might expand to a modifiable lvalue
8657          resulting from a function call (for example, *errno()).
8658     200) Thus, a program that uses errno for error checking should set it to zero before a library function call,
8659          then inspect it before a subsequent library function call. Of course, a library function can save the
8660          value of errno on entry and then set it to zero, as long as the original value is restored if errno's
8661          value is still zero just before the return.
8662     201) See ''future library directions'' (<a href="#7.30.3">7.30.3</a>).
8663
8664 [<a name="#p203" href="p203">page 203</a>] (<a href="#Contents">Contents</a>)
8665
8666 <a name="7.6" href="#7.6"><b>    7.6 Floating-point environment &lt;fenv.h&gt;</b></a>
8667 1   The header <a href="#7.6">&lt;fenv.h&gt;</a> defines several macros, and declares types and functions that
8668     provide access to the floating-point environment. The floating-point environment refers
8669     collectively to any floating-point status flags and control modes supported by the
8670     implementation.202) A floating-point status flag is a system variable whose value is set
8671     (but never cleared) when a floating-point exception is raised, which occurs as a side effect
8672     of exceptional floating-point arithmetic to provide auxiliary information.203) A floating-
8673     point control mode is a system variable whose value may be set by the user to affect the
8674     subsequent behavior of floating-point arithmetic.
8675 2   The floating-point environment has thread storage duration. The initial state for a
8676     thread's floating-point environment is the current state of the floating-point environment
8677     of the thread that creates it at the time of creation.
8678 3   Certain programming conventions support the intended model of use for the floating-
8679     point environment:204)
8680     -- a function call does not alter its caller's floating-point control modes, clear its caller's
8681       floating-point status flags, nor depend on the state of its caller's floating-point status
8682       flags unless the function is so documented;
8683     -- a function call is assumed to require default floating-point control modes, unless its
8684       documentation promises otherwise;
8685     -- a function call is assumed to have the potential for raising floating-point exceptions,
8686       unless its documentation promises otherwise.
8687 4   The type
8688             fenv_t
8689     represents the entire floating-point environment.
8690 5   The type
8691             fexcept_t
8692     represents the floating-point status flags collectively, including any status the
8693     implementation associates with the flags.
8694
8695
8696     202) This header is designed to support the floating-point exception status flags and directed-rounding
8697          control modes required by IEC 60559, and other similar floating-point state information. Also it is
8698          designed to facilitate code portability among all systems.
8699     203) A floating-point status flag is not an object and can be set more than once within an expression.
8700     204) With these conventions, a programmer can safely assume default floating-point control modes (or be
8701          unaware of them). The responsibilities associated with accessing the floating-point environment fall
8702          on the programmer or program that does so explicitly.
8703
8704 [<a name="#p204" href="p204">page 204</a>] (<a href="#Contents">Contents</a>)
8705
8706 6   Each of the macros
8707              FE_DIVBYZERO
8708              FE_INEXACT
8709              FE_INVALID
8710              FE_OVERFLOW
8711              FE_UNDERFLOW
8712     is defined if and only if the implementation supports the floating-point exception by
8713     means of the functions in 7.6.2.205) Additional implementation-defined floating-point
8714     exceptions, with macro definitions beginning with FE_ and an uppercase letter, may also
8715     be specified by the implementation. The defined macros expand to integer constant
8716     expressions with values such that bitwise ORs of all combinations of the macros result in
8717     distinct values, and furthermore, bitwise ANDs of all combinations of the macros result in
8718     zero.206)
8719 7   The macro
8720              FE_ALL_EXCEPT
8721     is simply the bitwise OR of all floating-point exception macros defined by the
8722     implementation. If no such macros are defined, FE_ALL_EXCEPT shall be defined as 0.
8723 8   Each of the macros
8724             FE_DOWNWARD
8725             FE_TONEAREST
8726             FE_TOWARDZERO
8727             FE_UPWARD
8728     is defined if and only if the implementation supports getting and setting the represented
8729     rounding direction by means of the fegetround and fesetround functions.
8730     Additional implementation-defined rounding directions, with macro definitions beginning
8731     with FE_ and an uppercase letter, may also be specified by the implementation. The
8732     defined macros expand to integer constant expressions whose values are distinct
8733     nonnegative values.207)
8734 9   The macro
8735
8736
8737
8738     205) The implementation supports an exception if there are circumstances where a call to at least one of the
8739          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
8740          all the functions to succeed all the time.
8741     206) The macros should be distinct powers of two.
8742     207) Even though the rounding direction macros may expand to constants corresponding to the values of
8743          FLT_ROUNDS, they are not required to do so.
8744
8745 [<a name="#p205" href="p205">page 205</a>] (<a href="#Contents">Contents</a>)
8746
8747              FE_DFL_ENV
8748      represents the default floating-point environment -- the one installed at program startup
8749      -- and has type ''pointer to const-qualified fenv_t''. It can be used as an argument to
8750      <a href="#7.6">&lt;fenv.h&gt;</a> functions that manage the floating-point environment.
8751 10   Additional implementation-defined environments, with macro definitions beginning with
8752      FE_ and an uppercase letter, and having type ''pointer to const-qualified fenv_t'', may
8753      also be specified by the implementation.
8754 <a name="7.6.1" href="#7.6.1"><b>     7.6.1 The FENV_ACCESS pragma</b></a>
8755      Synopsis
8756 1            #include <a href="#7.6">&lt;fenv.h&gt;</a>
8757              #pragma STDC FENV_ACCESS on-off-switch
8758      Description
8759 2    The FENV_ACCESS pragma provides a means to inform the implementation when a
8760      program might access the floating-point environment to test floating-point status flags or
8761      run under non-default floating-point control modes.208) The pragma shall occur either
8762      outside external declarations or preceding all explicit declarations and statements inside a
8763      compound statement. When outside external declarations, the pragma takes effect from
8764      its occurrence until another FENV_ACCESS pragma is encountered, or until the end of
8765      the translation unit. When inside a compound statement, the pragma takes effect from its
8766      occurrence until another FENV_ACCESS pragma is encountered (including within a
8767      nested compound statement), or until the end of the compound statement; at the end of a
8768      compound statement the state for the pragma is restored to its condition just before the
8769      compound statement. If this pragma is used in any other context, the behavior is
8770      undefined. If part of a program tests floating-point status flags, sets floating-point control
8771      modes, or runs under non-default mode settings, but was translated with the state for the
8772      FENV_ACCESS pragma ''off'', the behavior is undefined. The default state (''on'' or
8773      ''off'') for the pragma is implementation-defined. (When execution passes from a part of
8774      the program translated with FENV_ACCESS ''off'' to a part translated with
8775      FENV_ACCESS ''on'', the state of the floating-point status flags is unspecified and the
8776      floating-point control modes have their default settings.)
8777
8778
8779
8780
8781      208) The purpose of the FENV_ACCESS pragma is to allow certain optimizations that could subvert flag
8782           tests and mode changes (e.g., global common subexpression elimination, code motion, and constant
8783           folding). In general, if the state of FENV_ACCESS is ''off'', the translator can assume that default
8784           modes are in effect and the flags are not tested.
8785
8786 [<a name="#p206" href="p206">page 206</a>] (<a href="#Contents">Contents</a>)
8787
8788 3   EXAMPLE
8789             #include <a href="#7.6">&lt;fenv.h&gt;</a>
8790             void f(double x)
8791             {
8792                   #pragma STDC FENV_ACCESS ON
8793                   void g(double);
8794                   void h(double);
8795                   /* ... */
8796                   g(x + 1);
8797                   h(x + 1);
8798                   /* ... */
8799             }
8800 4   If the function g might depend on status flags set as a side effect of the first x + 1, or if the second
8801     x + 1 might depend on control modes set as a side effect of the call to function g, then the program shall
8802     contain an appropriately placed invocation of #pragma STDC FENV_ACCESS ON.209)
8803
8804 <a name="7.6.2" href="#7.6.2"><b>    7.6.2 Floating-point exceptions</b></a>
8805 1   The following functions provide access to the floating-point status flags.210) The int
8806     input argument for the functions represents a subset of floating-point exceptions, and can
8807     be zero or the bitwise OR of one or more floating-point exception macros, for example
8808     FE_OVERFLOW | FE_INEXACT. For other argument values the behavior of these
8809     functions is undefined.
8810 <a name="7.6.2.1" href="#7.6.2.1"><b>    7.6.2.1 The feclearexcept function</b></a>
8811     Synopsis
8812 1           #include <a href="#7.6">&lt;fenv.h&gt;</a>
8813             int feclearexcept(int excepts);
8814     Description
8815 2   The feclearexcept function attempts to clear the supported floating-point exceptions
8816     represented by its argument.
8817     Returns
8818 3   The feclearexcept function returns zero if the excepts argument is zero or if all
8819     the specified exceptions were successfully cleared. Otherwise, it returns a nonzero value.
8820
8821
8822     209) The side effects impose a temporal ordering that requires two evaluations of x + 1. On the other
8823          hand, without the #pragma STDC FENV_ACCESS ON pragma, and assuming the default state is
8824          ''off'', just one evaluation of x + 1 would suffice.
8825     210) The functions fetestexcept, feraiseexcept, and feclearexcept support the basic
8826          abstraction of flags that are either set or clear. An implementation may endow floating-point status
8827          flags with more information -- for example, the address of the code which first raised the floating-
8828          point exception; the functions fegetexceptflag and fesetexceptflag deal with the full
8829          content of flags.
8830
8831 [<a name="#p207" href="p207">page 207</a>] (<a href="#Contents">Contents</a>)
8832
8833 <a name="7.6.2.2" href="#7.6.2.2"><b>    7.6.2.2 The fegetexceptflag function</b></a>
8834     Synopsis
8835 1            #include <a href="#7.6">&lt;fenv.h&gt;</a>
8836              int fegetexceptflag(fexcept_t *flagp,
8837                   int excepts);
8838     Description
8839 2   The fegetexceptflag function attempts to store an implementation-defined
8840     representation of the states of the floating-point status flags indicated by the argument
8841     excepts in the object pointed to by the argument flagp.
8842     Returns
8843 3   The fegetexceptflag function returns zero if the representation was successfully
8844     stored. Otherwise, it returns a nonzero value.
8845 <a name="7.6.2.3" href="#7.6.2.3"><b>    7.6.2.3 The feraiseexcept function</b></a>
8846     Synopsis
8847 1            #include <a href="#7.6">&lt;fenv.h&gt;</a>
8848              int feraiseexcept(int excepts);
8849     Description
8850 2   The feraiseexcept function attempts to raise the supported floating-point exceptions
8851     represented by its argument.211) The order in which these floating-point exceptions are
8852     raised is unspecified, except as stated in <a href="#F.8.6">F.8.6</a>. Whether the feraiseexcept function
8853     additionally raises the ''inexact'' floating-point exception whenever it raises the
8854     ''overflow'' or ''underflow'' floating-point exception is implementation-defined.
8855     Returns
8856 3   The feraiseexcept function returns zero if the excepts argument is zero or if all
8857     the specified exceptions were successfully raised. Otherwise, it returns a nonzero value.
8858
8859
8860
8861
8862     211) The effect is intended to be similar to that of floating-point exceptions raised by arithmetic operations.
8863          Hence, enabled traps for floating-point exceptions raised by this function are taken. The specification
8864          in <a href="#F.8.6">F.8.6</a> is in the same spirit.
8865
8866 [<a name="#p208" href="p208">page 208</a>] (<a href="#Contents">Contents</a>)
8867
8868 <a name="7.6.2.4" href="#7.6.2.4"><b>    7.6.2.4 The fesetexceptflag function</b></a>
8869     Synopsis
8870 1           #include <a href="#7.6">&lt;fenv.h&gt;</a>
8871             int fesetexceptflag(const fexcept_t *flagp,
8872                  int excepts);
8873     Description
8874 2   The fesetexceptflag function attempts to set the floating-point status flags
8875     indicated by the argument excepts to the states stored in the object pointed to by
8876     flagp. The value of *flagp shall have been set by a previous call to
8877     fegetexceptflag whose second argument represented at least those floating-point
8878     exceptions represented by the argument excepts. This function does not raise floating-
8879     point exceptions, but only sets the state of the flags.
8880     Returns
8881 3   The fesetexceptflag function returns zero if the excepts argument is zero or if
8882     all the specified flags were successfully set to the appropriate state. Otherwise, it returns
8883     a nonzero value.
8884 <a name="7.6.2.5" href="#7.6.2.5"><b>    7.6.2.5 The fetestexcept function</b></a>
8885     Synopsis
8886 1           #include <a href="#7.6">&lt;fenv.h&gt;</a>
8887             int fetestexcept(int excepts);
8888     Description
8889 2   The fetestexcept function determines which of a specified subset of the floating-
8890     point exception flags are currently set. The excepts argument specifies the floating-
8891     point status flags to be queried.212)
8892     Returns
8893 3   The fetestexcept function returns the value of the bitwise OR of the floating-point
8894     exception macros corresponding to the currently set floating-point exceptions included in
8895     excepts.
8896 4   EXAMPLE       Call f if ''invalid'' is set, then g if ''overflow'' is set:
8897
8898
8899
8900
8901     212) This mechanism allows testing several floating-point exceptions with just one function call.
8902
8903 [<a name="#p209" href="p209">page 209</a>] (<a href="#Contents">Contents</a>)
8904
8905            #include <a href="#7.6">&lt;fenv.h&gt;</a>
8906            /* ... */
8907            {
8908                    #pragma STDC FENV_ACCESS ON
8909                    int set_excepts;
8910                    feclearexcept(FE_INVALID | FE_OVERFLOW);
8911                    // maybe raise exceptions
8912                    set_excepts = fetestexcept(FE_INVALID | FE_OVERFLOW);
8913                    if (set_excepts &amp; FE_INVALID) f();
8914                    if (set_excepts &amp; FE_OVERFLOW) g();
8915                    /* ... */
8916            }
8917
8918 <a name="7.6.3" href="#7.6.3"><b>    7.6.3 Rounding</b></a>
8919 1   The fegetround and fesetround functions provide control of rounding direction
8920     modes.
8921 <a name="7.6.3.1" href="#7.6.3.1"><b>    7.6.3.1 The fegetround function</b></a>
8922     Synopsis
8923 1          #include <a href="#7.6">&lt;fenv.h&gt;</a>
8924            int fegetround(void);
8925     Description
8926 2   The fegetround function gets the current rounding direction.
8927     Returns
8928 3   The fegetround function returns the value of the rounding direction macro
8929     representing the current rounding direction or a negative value if there is no such
8930     rounding direction macro or the current rounding direction is not determinable.
8931 <a name="7.6.3.2" href="#7.6.3.2"><b>    7.6.3.2 The fesetround function</b></a>
8932     Synopsis
8933 1          #include <a href="#7.6">&lt;fenv.h&gt;</a>
8934            int fesetround(int round);
8935     Description
8936 2   The fesetround function establishes the rounding direction represented by its
8937     argument round. If the argument is not equal to the value of a rounding direction macro,
8938     the rounding direction is not changed.
8939     Returns
8940 3   The fesetround function returns zero if and only if the requested rounding direction
8941     was established.
8942
8943
8944 [<a name="#p210" href="p210">page 210</a>] (<a href="#Contents">Contents</a>)
8945
8946 4   EXAMPLE Save, set, and restore the rounding direction. Report an error and abort if setting the
8947     rounding direction fails.
8948             #include <a href="#7.6">&lt;fenv.h&gt;</a>
8949             #include <a href="#7.2">&lt;assert.h&gt;</a>
8950             void f(int round_dir)
8951             {
8952                   #pragma STDC FENV_ACCESS ON
8953                   int save_round;
8954                   int setround_ok;
8955                   save_round = fegetround();
8956                   setround_ok = fesetround(round_dir);
8957                   assert(setround_ok == 0);
8958                   /* ... */
8959                   fesetround(save_round);
8960                   /* ... */
8961             }
8962
8963 <a name="7.6.4" href="#7.6.4"><b>    7.6.4 Environment</b></a>
8964 1   The functions in this section manage the floating-point environment -- status flags and
8965     control modes -- as one entity.
8966 <a name="7.6.4.1" href="#7.6.4.1"><b>    7.6.4.1 The fegetenv function</b></a>
8967     Synopsis
8968 1           #include <a href="#7.6">&lt;fenv.h&gt;</a>
8969             int fegetenv(fenv_t *envp);
8970     Description
8971 2   The fegetenv function attempts to store the current floating-point environment in the
8972     object pointed to by envp.
8973     Returns
8974 3   The fegetenv function returns zero if the environment was successfully stored.
8975     Otherwise, it returns a nonzero value.
8976 <a name="7.6.4.2" href="#7.6.4.2"><b>    7.6.4.2 The feholdexcept function</b></a>
8977     Synopsis
8978 1           #include <a href="#7.6">&lt;fenv.h&gt;</a>
8979             int feholdexcept(fenv_t *envp);
8980     Description
8981 2   The feholdexcept function saves the current floating-point environment in the object
8982     pointed to by envp, clears the floating-point status flags, and then installs a non-stop
8983     (continue on floating-point exceptions) mode, if available, for all floating-point
8984     exceptions.213)
8985
8986 [<a name="#p211" href="p211">page 211</a>] (<a href="#Contents">Contents</a>)
8987
8988     Returns
8989 3   The feholdexcept function returns zero if and only if non-stop floating-point
8990     exception handling was successfully installed.
8991 <a name="7.6.4.3" href="#7.6.4.3"><b>    7.6.4.3 The fesetenv function</b></a>
8992     Synopsis
8993 1           #include <a href="#7.6">&lt;fenv.h&gt;</a>
8994             int fesetenv(const fenv_t *envp);
8995     Description
8996 2   The fesetenv function attempts to establish the floating-point environment represented
8997     by the object pointed to by envp. The argument envp shall point to an object set by a
8998     call to fegetenv or feholdexcept, or equal a floating-point environment macro.
8999     Note that fesetenv merely installs the state of the floating-point status flags
9000     represented through its argument, and does not raise these floating-point exceptions.
9001     Returns
9002 3   The fesetenv function returns zero if the environment was successfully established.
9003     Otherwise, it returns a nonzero value.
9004 <a name="7.6.4.4" href="#7.6.4.4"><b>    7.6.4.4 The feupdateenv function</b></a>
9005     Synopsis
9006 1           #include <a href="#7.6">&lt;fenv.h&gt;</a>
9007             int feupdateenv(const fenv_t *envp);
9008     Description
9009 2   The feupdateenv function attempts to save the currently raised floating-point
9010     exceptions in its automatic storage, install the floating-point environment represented by
9011     the object pointed to by envp, and then raise the saved floating-point exceptions. The
9012     argument envp shall point to an object set by a call to feholdexcept or fegetenv,
9013     or equal a floating-point environment macro.
9014     Returns
9015 3   The feupdateenv function returns zero if all the actions were successfully carried out.
9016     Otherwise, it returns a nonzero value.
9017
9018
9019
9020
9021     213) IEC 60559 systems have a default non-stop mode, and typically at least one other mode for trap
9022          handling or aborting; if the system provides only the non-stop mode then installing it is trivial. For
9023          such systems, the feholdexcept function can be used in conjunction with the feupdateenv
9024          function to write routines that hide spurious floating-point exceptions from their callers.
9025
9026 [<a name="#p212" href="p212">page 212</a>] (<a href="#Contents">Contents</a>)
9027
9028 4   EXAMPLE     Hide spurious underflow floating-point exceptions:
9029             #include <a href="#7.6">&lt;fenv.h&gt;</a>
9030             double f(double x)
9031             {
9032                   #pragma STDC FENV_ACCESS ON
9033                   double result;
9034                   fenv_t save_env;
9035                   if (feholdexcept(&amp;save_env))
9036                         return /* indication of an environmental problem */;
9037                   // compute result
9038                   if (/* test spurious underflow */)
9039                         if (feclearexcept(FE_UNDERFLOW))
9040                                  return /* indication of an environmental problem */;
9041                   if (feupdateenv(&amp;save_env))
9042                         return /* indication of an environmental problem */;
9043                   return result;
9044             }
9045
9046
9047
9048
9049 [<a name="#p213" href="p213">page 213</a>] (<a href="#Contents">Contents</a>)
9050
9051 <a name="7.7" href="#7.7"><b>    7.7 Characteristics of floating types &lt;float.h&gt;</b></a>
9052 1   The header <a href="#7.7">&lt;float.h&gt;</a> defines several macros that expand to various limits and
9053     parameters of the standard floating-point types.
9054 2   The macros, their meanings, and the constraints (or restrictions) on their values are listed
9055     in <a href="#5.2.4.2.2">5.2.4.2.2</a>.
9056
9057
9058
9059
9060 [<a name="#p214" href="p214">page 214</a>] (<a href="#Contents">Contents</a>)
9061
9062 <a name="7.8" href="#7.8"><b>    7.8 Format conversion of integer types &lt;inttypes.h&gt;</b></a>
9063 1   The header <a href="#7.8">&lt;inttypes.h&gt;</a> includes the header <a href="#7.20">&lt;stdint.h&gt;</a> and extends it with
9064     additional facilities provided by hosted implementations.
9065 2   It declares functions for manipulating greatest-width integers and converting numeric
9066     character strings to greatest-width integers, and it declares the type
9067              imaxdiv_t
9068     which is a structure type that is the type of the value returned by the imaxdiv function.
9069     For each type declared in <a href="#7.20">&lt;stdint.h&gt;</a>, it defines corresponding macros for conversion
9070     specifiers for use with the formatted input/output functions.214)
9071     Forward references: integer types <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#7.20">7.20</a>), formatted input/output
9072     functions (<a href="#7.21.6">7.21.6</a>), formatted wide character input/output functions (<a href="#7.28.2">7.28.2</a>).
9073 <a name="7.8.1" href="#7.8.1"><b>    7.8.1 Macros for format specifiers</b></a>
9074 1   Each of the following object-like macros expands to a character string literal containing a
9075     conversion specifier, possibly modified by a length modifier, suitable for use within the
9076     format argument of a formatted input/output function when converting the corresponding
9077     integer type. These macro names have the general form of PRI (character string literals
9078     for the fprintf and fwprintf family) or SCN (character string literals for the
9079     fscanf and fwscanf family),215) followed by the conversion specifier, followed by a
9080     name corresponding to a similar type name in <a href="#7.20.1">7.20.1</a>. In these names, N represents the
9081     width of the type as described in <a href="#7.20.1">7.20.1</a>. For example, PRIdFAST32 can be used in a
9082     format string to print the value of an integer of type int_fast32_t.
9083 2   The fprintf macros for signed integers are:
9084            PRIdN             PRIdLEASTN                PRIdFASTN          PRIdMAX             PRIdPTR
9085            PRIiN             PRIiLEASTN                PRIiFASTN          PRIiMAX             PRIiPTR
9086 3   The fprintf macros for unsigned integers are:
9087            PRIoN             PRIoLEASTN                PRIoFASTN          PRIoMAX             PRIoPTR
9088            PRIuN             PRIuLEASTN                PRIuFASTN          PRIuMAX             PRIuPTR
9089            PRIxN             PRIxLEASTN                PRIxFASTN          PRIxMAX             PRIxPTR
9090            PRIXN             PRIXLEASTN                PRIXFASTN          PRIXMAX             PRIXPTR
9091 4   The fscanf macros for signed integers are:
9092
9093
9094
9095     214) See ''future library directions'' (<a href="#7.30.4">7.30.4</a>).
9096     215) Separate macros are given for use with fprintf and fscanf functions because, in the general case,
9097          different format specifiers may be required for fprintf and fscanf, even when the type is the
9098          same.
9099
9100 [<a name="#p215" href="p215">page 215</a>] (<a href="#Contents">Contents</a>)
9101
9102            SCNdN           SCNdLEASTN               SCNdFASTN              SCNdMAX             SCNdPTR
9103            SCNiN           SCNiLEASTN               SCNiFASTN              SCNiMAX             SCNiPTR
9104 5   The fscanf macros for unsigned integers are:
9105            SCNoN           SCNoLEASTN               SCNoFASTN              SCNoMAX             SCNoPTR
9106            SCNuN           SCNuLEASTN               SCNuFASTN              SCNuMAX             SCNuPTR
9107            SCNxN           SCNxLEASTN               SCNxFASTN              SCNxMAX             SCNxPTR
9108 6   For each type that the implementation provides in <a href="#7.20">&lt;stdint.h&gt;</a>, the corresponding
9109     fprintf macros shall be defined and the corresponding fscanf macros shall be
9110     defined unless the implementation does not have a suitable fscanf length modifier for
9111     the type.
9112 7   EXAMPLE
9113             #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9114             #include <a href="#7.28">&lt;wchar.h&gt;</a>
9115             int main(void)
9116             {
9117                   uintmax_t i = UINTMAX_MAX;    // this type always exists
9118                   wprintf(L"The largest integer value is %020"
9119                         PRIxMAX "\n", i);
9120                   return 0;
9121             }
9122
9123 <a name="7.8.2" href="#7.8.2"><b>    7.8.2 Functions for greatest-width integer types</b></a>
9124 <a name="7.8.2.1" href="#7.8.2.1"><b>    7.8.2.1 The imaxabs function</b></a>
9125     Synopsis
9126 1           #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9127             intmax_t imaxabs(intmax_t j);
9128     Description
9129 2   The imaxabs function computes the absolute value of an integer j. If the result cannot
9130     be represented, the behavior is undefined.216)
9131     Returns
9132 3   The imaxabs function returns the absolute value.
9133
9134
9135
9136
9137     216) The absolute value of the most negative number cannot be represented in two's complement.
9138
9139 [<a name="#p216" href="p216">page 216</a>] (<a href="#Contents">Contents</a>)
9140
9141 <a name="7.8.2.2" href="#7.8.2.2"><b>    7.8.2.2 The imaxdiv function</b></a>
9142     Synopsis
9143 1           #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9144             imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
9145     Description
9146 2   The imaxdiv function computes numer / denom and numer % denom in a single
9147     operation.
9148     Returns
9149 3   The imaxdiv function returns a structure of type imaxdiv_t comprising both the
9150     quotient and the remainder. The structure shall contain (in either order) the members
9151     quot (the quotient) and rem (the remainder), each of which has type intmax_t. If
9152     either part of the result cannot be represented, the behavior is undefined.
9153 <a name="7.8.2.3" href="#7.8.2.3"><b>    7.8.2.3 The strtoimax and strtoumax functions</b></a>
9154     Synopsis
9155 1           #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9156             intmax_t strtoimax(const char * restrict nptr,
9157                  char ** restrict endptr, int base);
9158             uintmax_t strtoumax(const char * restrict nptr,
9159                  char ** restrict endptr, int base);
9160     Description
9161 2   The strtoimax and strtoumax functions are equivalent to the strtol, strtoll,
9162     strtoul, and strtoull functions, except that the initial portion of the string is
9163     converted to intmax_t and uintmax_t representation, respectively.
9164     Returns
9165 3   The strtoimax and strtoumax functions return the converted value, if any. If no
9166     conversion could be performed, zero is returned. If the correct value is outside the range
9167     of representable values, INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned
9168     (according to the return type and sign of the value, if any), and the value of the macro
9169     ERANGE is stored in errno.
9170     Forward references: the strtol, strtoll, strtoul, and strtoull functions
9171     (<a href="#7.22.1.4">7.22.1.4</a>).
9172
9173
9174
9175
9176 [<a name="#p217" href="p217">page 217</a>] (<a href="#Contents">Contents</a>)
9177
9178 <a name="7.8.2.4" href="#7.8.2.4"><b>    7.8.2.4 The wcstoimax and wcstoumax functions</b></a>
9179     Synopsis
9180 1          #include <a href="#7.19">&lt;stddef.h&gt;</a>           // for wchar_t
9181            #include <a href="#7.8">&lt;inttypes.h&gt;</a>
9182            intmax_t wcstoimax(const wchar_t * restrict nptr,
9183                 wchar_t ** restrict endptr, int base);
9184            uintmax_t wcstoumax(const wchar_t * restrict nptr,
9185                 wchar_t ** restrict endptr, int base);
9186     Description
9187 2   The wcstoimax and wcstoumax functions are equivalent to the wcstol, wcstoll,
9188     wcstoul, and wcstoull functions except that the initial portion of the wide string is
9189     converted to intmax_t and uintmax_t representation, respectively.
9190     Returns
9191 3   The wcstoimax function returns the converted value, if any. If no conversion could be
9192     performed, zero is returned. If the correct value is outside the range of representable
9193     values, INTMAX_MAX, INTMAX_MIN, or UINTMAX_MAX is returned (according to the
9194     return type and sign of the value, if any), and the value of the macro ERANGE is stored in
9195     errno.
9196     Forward references: the wcstol, wcstoll, wcstoul, and wcstoull functions
9197     (<a href="#7.28.4.1.2">7.28.4.1.2</a>).
9198
9199
9200
9201
9202 [<a name="#p218" href="p218">page 218</a>] (<a href="#Contents">Contents</a>)
9203
9204 <a name="7.9" href="#7.9"><b>    7.9 Alternative spellings &lt;iso646.h&gt;</b></a>
9205 1   The header <a href="#7.9">&lt;iso646.h&gt;</a> defines the following eleven macros (on the left) that expand
9206     to the corresponding tokens (on the right):
9207             and        &amp;&amp;
9208             and_eq     &amp;=
9209             bitand     &amp;
9210             bitor      |
9211             compl      ~
9212             not        !
9213             not_eq     !=
9214             or         ||
9215             or_eq      |=
9216             xor        ^
9217             xor_eq     ^=
9218
9219
9220
9221
9222 [<a name="#p219" href="p219">page 219</a>] (<a href="#Contents">Contents</a>)
9223
9224 <a name="7.10" href="#7.10"><b>    7.10 Sizes of integer types &lt;limits.h&gt;</b></a>
9225 1   The header <a href="#7.10">&lt;limits.h&gt;</a> defines several macros that expand to various limits and
9226     parameters of the standard integer types.
9227 2   The macros, their meanings, and the constraints (or restrictions) on their values are listed
9228     in <a href="#5.2.4.2.1">5.2.4.2.1</a>.
9229
9230
9231
9232
9233 [<a name="#p220" href="p220">page 220</a>] (<a href="#Contents">Contents</a>)
9234
9235 <a name="7.11" href="#7.11"><b>    7.11 Localization &lt;locale.h&gt;</b></a>
9236 1   The header <a href="#7.11">&lt;locale.h&gt;</a> declares two functions, one type, and defines several macros.
9237 2   The type is
9238             struct lconv
9239     which contains members related to the formatting of numeric values. The structure shall
9240     contain at least the following members, in any order. The semantics of the members and
9241     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
9242     the values specified in the comments.
9243             char   *decimal_point;                //   "."
9244             char   *thousands_sep;                //   ""
9245             char   *grouping;                     //   ""
9246             char   *mon_decimal_point;            //   ""
9247             char   *mon_thousands_sep;            //   ""
9248             char   *mon_grouping;                 //   ""
9249             char   *positive_sign;                //   ""
9250             char   *negative_sign;                //   ""
9251             char   *currency_symbol;              //   ""
9252             char   frac_digits;                   //   CHAR_MAX
9253             char   p_cs_precedes;                 //   CHAR_MAX
9254             char   n_cs_precedes;                 //   CHAR_MAX
9255             char   p_sep_by_space;                //   CHAR_MAX
9256             char   n_sep_by_space;                //   CHAR_MAX
9257             char   p_sign_posn;                   //   CHAR_MAX
9258             char   n_sign_posn;                   //   CHAR_MAX
9259             char   *int_curr_symbol;              //   ""
9260             char   int_frac_digits;               //   CHAR_MAX
9261             char   int_p_cs_precedes;             //   CHAR_MAX
9262             char   int_n_cs_precedes;             //   CHAR_MAX
9263             char   int_p_sep_by_space;            //   CHAR_MAX
9264             char   int_n_sep_by_space;            //   CHAR_MAX
9265             char   int_p_sign_posn;               //   CHAR_MAX
9266             char   int_n_sign_posn;               //   CHAR_MAX
9267
9268
9269
9270
9271 [<a name="#p221" href="p221">page 221</a>] (<a href="#Contents">Contents</a>)
9272
9273 3   The macros defined are NULL (described in <a href="#7.19">7.19</a>); and
9274              LC_ALL
9275              LC_COLLATE
9276              LC_CTYPE
9277              LC_MONETARY
9278              LC_NUMERIC
9279              LC_TIME
9280     which expand to integer constant expressions with distinct values, suitable for use as the
9281     first argument to the setlocale function.217) Additional macro definitions, beginning
9282     with the characters LC_ and an uppercase letter,218) may also be specified by the
9283     implementation.
9284 <a name="7.11.1" href="#7.11.1"><b>    7.11.1 Locale control</b></a>
9285 <a name="7.11.1.1" href="#7.11.1.1"><b>    7.11.1.1 The setlocale function</b></a>
9286     Synopsis
9287 1            #include <a href="#7.11">&lt;locale.h&gt;</a>
9288              char *setlocale(int category, const char *locale);
9289     Description
9290 2   The setlocale function selects the appropriate portion of the program's locale as
9291     specified by the category and locale arguments. The setlocale function may be
9292     used to change or query the program's entire current locale or portions thereof. The value
9293     LC_ALL for category names the program's entire locale; the other values for
9294     category name only a portion of the program's locale. LC_COLLATE affects the
9295     behavior of the strcoll and strxfrm functions. LC_CTYPE affects the behavior of
9296     the character handling functions219) and the multibyte and wide character functions.
9297     LC_MONETARY affects the monetary formatting information returned by the
9298     localeconv function. LC_NUMERIC affects the decimal-point character for the
9299     formatted input/output functions and the string conversion functions, as well as the
9300     nonmonetary formatting information returned by the localeconv function. LC_TIME
9301     affects the behavior of the strftime and wcsftime functions.
9302 3   A value of "C" for locale specifies the minimal environment for C translation; a value
9303     of "" for locale specifies the locale-specific native environment. Other
9304     implementation-defined strings may be passed as the second argument to setlocale.
9305
9306     217) ISO/IEC 9945-2 specifies locale and charmap formats that may be used to specify locales for C.
9307     218) See ''future library directions'' (<a href="#7.30.5">7.30.5</a>).
9308     219) The only functions in <a href="#7.4">7.4</a> whose behavior is not affected by the current locale are isdigit and
9309          isxdigit.
9310
9311 [<a name="#p222" href="p222">page 222</a>] (<a href="#Contents">Contents</a>)
9312
9313 4   At program startup, the equivalent of
9314             setlocale(LC_ALL, "C");
9315     is executed.
9316 5   A call to the setlocale function may introduce a data race with other calls to the
9317     setlocale function or with calls to functions that are affected by the current locale.
9318     The implementation shall behave as if no library function calls the setlocale function.
9319     Returns
9320 6   If a pointer to a string is given for locale and the selection can be honored, the
9321     setlocale function returns a pointer to the string associated with the specified
9322     category for the new locale. If the selection cannot be honored, the setlocale
9323     function returns a null pointer and the program's locale is not changed.
9324 7   A null pointer for locale causes the setlocale function to return a pointer to the
9325     string associated with the category for the program's current locale; the program's
9326     locale is not changed.220)
9327 8   The pointer to string returned by the setlocale function is such that a subsequent call
9328     with that string value and its associated category will restore that part of the program's
9329     locale. The string pointed to shall not be modified by the program, but may be
9330     overwritten by a subsequent call to the setlocale function.
9331     Forward references: formatted input/output functions (<a href="#7.21.6">7.21.6</a>), multibyte/wide
9332     character conversion functions (<a href="#7.22.7">7.22.7</a>), multibyte/wide string conversion functions
9333     (<a href="#7.22.8">7.22.8</a>), numeric conversion functions (<a href="#7.22.1">7.22.1</a>), the strcoll function (<a href="#7.23.4.3">7.23.4.3</a>), the
9334     strftime function (<a href="#7.26.3.5">7.26.3.5</a>), the strxfrm function (<a href="#7.23.4.5">7.23.4.5</a>).
9335 <a name="7.11.2" href="#7.11.2"><b>    7.11.2 Numeric formatting convention inquiry</b></a>
9336 <a name="7.11.2.1" href="#7.11.2.1"><b>    7.11.2.1 The localeconv function</b></a>
9337     Synopsis
9338 1           #include <a href="#7.11">&lt;locale.h&gt;</a>
9339             struct lconv *localeconv(void);
9340     Description
9341 2   The localeconv function sets the components of an object with type struct lconv
9342     with values appropriate for the formatting of numeric quantities (monetary and otherwise)
9343     according to the rules of the current locale.
9344
9345
9346
9347     220) The implementation shall arrange to encode in a string the various categories due to a heterogeneous
9348          locale when category has the value LC_ALL.
9349
9350 [<a name="#p223" href="p223">page 223</a>] (<a href="#Contents">Contents</a>)
9351
9352 3   The members of the structure with type char * are pointers to strings, any of which
9353     (except decimal_point) can point to "", to indicate that the value is not available in
9354     the current locale or is of zero length. Apart from grouping and mon_grouping, the
9355     strings shall start and end in the initial shift state. The members with type char are
9356     nonnegative numbers, any of which can be CHAR_MAX to indicate that the value is not
9357     available in the current locale. The members include the following:
9358     char *decimal_point
9359               The decimal-point character used to format nonmonetary quantities.
9360     char *thousands_sep
9361               The character used to separate groups of digits before the decimal-point
9362               character in formatted nonmonetary quantities.
9363     char *grouping
9364               A string whose elements indicate the size of each group of digits in
9365               formatted nonmonetary quantities.
9366     char *mon_decimal_point
9367               The decimal-point used to format monetary quantities.
9368     char *mon_thousands_sep
9369               The separator for groups of digits before the decimal-point in formatted
9370               monetary quantities.
9371     char *mon_grouping
9372               A string whose elements indicate the size of each group of digits in
9373               formatted monetary quantities.
9374     char *positive_sign
9375               The string used to indicate a nonnegative-valued formatted monetary
9376               quantity.
9377     char *negative_sign
9378               The string used to indicate a negative-valued formatted monetary quantity.
9379     char *currency_symbol
9380               The local currency symbol applicable to the current locale.
9381     char frac_digits
9382               The number of fractional digits (those after the decimal-point) to be
9383               displayed in a locally formatted monetary quantity.
9384     char p_cs_precedes
9385               Set to 1 or 0 if the currency_symbol respectively precedes or
9386               succeeds the value for a nonnegative locally formatted monetary quantity.
9387
9388
9389
9390 [<a name="#p224" href="p224">page 224</a>] (<a href="#Contents">Contents</a>)
9391
9392 char n_cs_precedes
9393           Set to 1 or 0 if the currency_symbol respectively precedes or
9394           succeeds the value for a negative locally formatted monetary quantity.
9395 char p_sep_by_space
9396           Set to a value indicating the separation of the currency_symbol, the
9397           sign string, and the value for a nonnegative locally formatted monetary
9398           quantity.
9399 char n_sep_by_space
9400           Set to a value indicating the separation of the currency_symbol, the
9401           sign string, and the value for a negative locally formatted monetary
9402           quantity.
9403 char p_sign_posn
9404           Set to a value indicating the positioning of the positive_sign for a
9405           nonnegative locally formatted monetary quantity.
9406 char n_sign_posn
9407           Set to a value indicating the positioning of the negative_sign for a
9408           negative locally formatted monetary quantity.
9409 char *int_curr_symbol
9410           The international currency symbol applicable to the current locale. The
9411           first three characters contain the alphabetic international currency symbol
9412           in accordance with those specified in ISO 4217. The fourth character
9413           (immediately preceding the null character) is the character used to separate
9414           the international currency symbol from the monetary quantity.
9415 char int_frac_digits
9416           The number of fractional digits (those after the decimal-point) to be
9417           displayed in an internationally formatted monetary quantity.
9418 char int_p_cs_precedes
9419           Set to 1 or 0 if the int_curr_symbol respectively precedes or
9420           succeeds the value for a nonnegative internationally formatted monetary
9421           quantity.
9422 char int_n_cs_precedes
9423           Set to 1 or 0 if the int_curr_symbol respectively precedes or
9424           succeeds the value for a negative internationally formatted monetary
9425           quantity.
9426 char int_p_sep_by_space
9427           Set to a value indicating the separation of the int_curr_symbol, the
9428           sign string, and the value for a nonnegative internationally formatted
9429           monetary quantity.
9430 [<a name="#p225" href="p225">page 225</a>] (<a href="#Contents">Contents</a>)
9431
9432     char int_n_sep_by_space
9433               Set to a value indicating the separation of the int_curr_symbol, the
9434               sign string, and the value for a negative internationally formatted monetary
9435               quantity.
9436     char int_p_sign_posn
9437               Set to a value indicating the positioning of the positive_sign for a
9438               nonnegative internationally formatted monetary quantity.
9439     char int_n_sign_posn
9440               Set to a value indicating the positioning of the negative_sign for a
9441               negative internationally formatted monetary quantity.
9442 4   The elements of grouping and mon_grouping are interpreted according to the
9443     following:
9444     CHAR_MAX        No further grouping is to be performed.
9445     0               The previous element is to be repeatedly used for the remainder of the
9446                     digits.
9447     other           The integer value is the number of digits that compose the current group.
9448                     The next element is examined to determine the size of the next group of
9449                     digits before the current group.
9450 5   The values of p_sep_by_space, n_sep_by_space, int_p_sep_by_space,
9451     and int_n_sep_by_space are interpreted according to the following:
9452     0     No space separates the currency symbol and value.
9453     1     If the currency symbol and sign string are adjacent, a space separates them from the
9454           value; otherwise, a space separates the currency symbol from the value.
9455     2   If the currency symbol and sign string are adjacent, a space separates them;
9456         otherwise, a space separates the sign string from the value.
9457     For int_p_sep_by_space and int_n_sep_by_space, the fourth character of
9458     int_curr_symbol is used instead of a space.
9459 6   The values of p_sign_posn, n_sign_posn, int_p_sign_posn,                              and
9460     int_n_sign_posn are interpreted according to the following:
9461     0     Parentheses surround the quantity and currency symbol.
9462     1     The sign string precedes the quantity and currency symbol.
9463     2     The sign string succeeds the quantity and currency symbol.
9464     3     The sign string immediately precedes the currency symbol.
9465     4     The sign string immediately succeeds the currency symbol.
9466
9467
9468 [<a name="#p226" href="p226">page 226</a>] (<a href="#Contents">Contents</a>)
9469
9470 7    The implementation shall behave as if no library function calls the localeconv
9471      function.
9472      Returns
9473 8    The localeconv function returns a pointer to the filled-in object. The structure
9474      pointed to by the return value shall not be modified by the program, but may be
9475      overwritten by a subsequent call to the localeconv function. In addition, calls to the
9476      setlocale function with categories LC_ALL, LC_MONETARY, or LC_NUMERIC may
9477      overwrite the contents of the structure.
9478 9    EXAMPLE 1 The following table illustrates rules which may well be used by four countries to format
9479      monetary quantities.
9480                                    Local format                                     International format
9481
9482      Country            Positive                  Negative                    Positive               Negative
9483
9484      Country1     1.234,56 mk             -1.234,56 mk                  FIM   1.234,56         FIM -1.234,56
9485      Country2     L.1.234                 -L.1.234                      ITL   1.234            -ITL 1.234
9486      Country3     fl. 1.234,56              fl. -1.234,56                   NLG   1.234,56         NLG -1.234,56
9487      Country4     SFrs.1,234.56           SFrs.1,234.56C                CHF   1,234.56         CHF 1,234.56C
9488 10   For these four countries, the respective values for the monetary members of the structure returned by
9489      localeconv could be:
9490                                        Country1              Country2              Country3            Country4
9491
9492      mon_decimal_point                 ","                   ""                   ","                 "."
9493      mon_thousands_sep                 "."                   "."                  "."                 ","
9494      mon_grouping                      "\3"                  "\3"                 "\3"                "\3"
9495      positive_sign                     ""                    ""                   ""                  ""
9496      negative_sign                     "-"                   "-"                  "-"                 "C"
9497      currency_symbol                   "mk"                  "L."                 "\u0192"            "SFrs."
9498      frac_digits                       2                     0                    2                   2
9499      p_cs_precedes                     0                     1                    1                   1
9500      n_cs_precedes                     0                     1                    1                   1
9501      p_sep_by_space                    1                     0                    1                   0
9502      n_sep_by_space                    1                     0                    2                   0
9503      p_sign_posn                       1                     1                    1                   1
9504      n_sign_posn                       1                     1                    4                   2
9505      int_curr_symbol                   "FIM "                "ITL "               "NLG "              "CHF "
9506      int_frac_digits                   2                     0                    2                   2
9507      int_p_cs_precedes                 1                     1                    1                   1
9508      int_n_cs_precedes                 1                     1                    1                   1
9509      int_p_sep_by_space                1                     1                    1                   1
9510      int_n_sep_by_space                2                     1                    2                   1
9511      int_p_sign_posn                   1                     1                    1                   1
9512      int_n_sign_posn                   4                     1                    4                   2
9513
9514
9515
9516
9517 [<a name="#p227" href="p227">page 227</a>] (<a href="#Contents">Contents</a>)
9518
9519 11   EXAMPLE 2 The following table illustrates how the cs_precedes, sep_by_space, and sign_posn members
9520      affect the formatted value.
9521                                                                    p_sep_by_space
9522
9523      p_cs_precedes           p_sign_posn                0                   1                  2
9524
9525                      0                    0         (<a href="#1.25">1.25</a>$)            (<a href="#1.25">1.25</a> $)            (<a href="#1.25">1.25</a>$)
9526                                           1         +1.25$             +1.25 $             + <a href="#1.25">1.25</a>$
9527                                           2         <a href="#1.25">1.25</a>$+             <a href="#1.25">1.25</a> $+             <a href="#1.25">1.25</a>$ +
9528                                           3         <a href="#1.25">1.25</a>+$             <a href="#1.25">1.25</a> +$             <a href="#1.25">1.25</a>+ $
9529                                           4         <a href="#1.25">1.25</a>$+             <a href="#1.25">1.25</a> $+             <a href="#1.25">1.25</a>$ +
9530
9531                      1                    0         ($1.25)            ($ <a href="#1.25">1.25</a>)            ($1.25)
9532                                           1         +$1.25             +$ <a href="#1.25">1.25</a>             + $1.25
9533                                           2         $1.25+             $ <a href="#1.25">1.25</a>+             $1.25 +
9534                                           3         +$1.25             +$ <a href="#1.25">1.25</a>             + $1.25
9535                                           4         $+1.25             $+ <a href="#1.25">1.25</a>             $ +1.25
9536
9537
9538
9539
9540 [<a name="#p228" href="p228">page 228</a>] (<a href="#Contents">Contents</a>)
9541
9542 <a name="7.12" href="#7.12"><b>    7.12 Mathematics &lt;math.h&gt;</b></a>
9543 1   The header <a href="#7.12">&lt;math.h&gt;</a> declares two types and many mathematical functions and defines
9544     several macros. Most synopses specify a family of functions consisting of a principal
9545     function with one or more double parameters, a double return value, or both; and
9546     other functions with the same name but with f and l suffixes, which are corresponding
9547     functions with float and long double parameters, return values, or both.221)
9548     Integer arithmetic functions and conversion functions are discussed later.
9549 2   The types
9550             float_t
9551             double_t
9552     are floating types at least as wide as float and double, respectively, and such that
9553     double_t is at least as wide as float_t. If FLT_EVAL_METHOD equals 0,
9554     float_t and double_t are float and double, respectively; if
9555     FLT_EVAL_METHOD equals 1, they are both double; if FLT_EVAL_METHOD equals
9556     2, they are both long double; and for other values of FLT_EVAL_METHOD, they are
9557     otherwise implementation-defined.222)
9558 3   The macro
9559             HUGE_VAL
9560     expands to a positive double constant expression, not necessarily representable as a
9561     float. The macros
9562             HUGE_VALF
9563             HUGE_VALL
9564     are respectively float and long double analogs of HUGE_VAL.223)
9565 4   The macro
9566             INFINITY
9567     expands to a constant expression of type float representing positive or unsigned
9568     infinity, if available; else to a positive constant of type float that overflows at
9569
9570
9571
9572     221) Particularly on systems with wide expression evaluation, a <a href="#7.12">&lt;math.h&gt;</a> function might pass arguments
9573          and return values in wider format than the synopsis prototype indicates.
9574     222) The types float_t and double_t are intended to be the implementation's most efficient types at
9575          least as wide as float and double, respectively. For FLT_EVAL_METHOD equal 0, 1, or 2, the
9576          type float_t is the narrowest type used by the implementation to evaluate floating expressions.
9577     223) HUGE_VAL, HUGE_VALF, and HUGE_VALL can be positive infinities in an implementation that
9578          supports infinities.
9579
9580 [<a name="#p229" href="p229">page 229</a>] (<a href="#Contents">Contents</a>)
9581
9582     translation time.224)
9583 5   The macro
9584              NAN
9585     is defined if and only if the implementation supports quiet NaNs for the float type. It
9586     expands to a constant expression of type float representing a quiet NaN.
9587 6   The number classification macros
9588              FP_INFINITE
9589              FP_NAN
9590              FP_NORMAL
9591              FP_SUBNORMAL
9592              FP_ZERO
9593     represent the mutually exclusive kinds of floating-point values. They expand to integer
9594     constant expressions with distinct values. Additional implementation-defined floating-
9595     point classifications, with macro definitions beginning with FP_ and an uppercase letter,
9596     may also be specified by the implementation.
9597 7   The macro
9598              FP_FAST_FMA
9599     is optionally defined. If defined, it indicates that the fma function generally executes
9600     about as fast as, or faster than, a multiply and an add of double operands.225) The
9601     macros
9602              FP_FAST_FMAF
9603              FP_FAST_FMAL
9604     are, respectively, float and long double analogs of FP_FAST_FMA. If defined,
9605     these macros expand to the integer constant 1.
9606 8   The macros
9607              FP_ILOGB0
9608              FP_ILOGBNAN
9609     expand to integer constant expressions whose values are returned by ilogb(x) if x is
9610     zero or NaN, respectively. The value of FP_ILOGB0 shall be either INT_MIN or
9611     -INT_MAX. The value of FP_ILOGBNAN shall be either INT_MAX or INT_MIN.
9612
9613
9614     224) In this case, using INFINITY will violate the constraint in <a href="#6.4.4">6.4.4</a> and thus require a diagnostic.
9615     225) Typically, the FP_FAST_FMA macro is defined if and only if the fma function is implemented
9616          directly with a hardware multiply-add instruction. Software implementations are expected to be
9617          substantially slower.
9618
9619 [<a name="#p230" href="p230">page 230</a>] (<a href="#Contents">Contents</a>)
9620
9621 9   The macros
9622               MATH_ERRNO
9623               MATH_ERREXCEPT
9624     expand to the integer constants 1 and 2, respectively; the macro
9625             math_errhandling
9626     expands to an expression that has type int and the value MATH_ERRNO,
9627     MATH_ERREXCEPT, or the bitwise OR of both. The value of math_errhandling is
9628     constant for the duration of the program. It is unspecified whether
9629     math_errhandling is a macro or an identifier with external linkage. If a macro
9630     definition is suppressed or a program defines an identifier with the name
9631     math_errhandling, the behavior is undefined.               If the expression
9632     math_errhandling &amp; MATH_ERREXCEPT can be nonzero, the implementation
9633     shall define the macros FE_DIVBYZERO, FE_INVALID, and FE_OVERFLOW in
9634     <a href="#7.6">&lt;fenv.h&gt;</a>.
9635 <a name="7.12.1" href="#7.12.1"><b>    7.12.1 Treatment of error conditions</b></a>
9636 1   The behavior of each of the functions in <a href="#7.12">&lt;math.h&gt;</a> is specified for all representable
9637     values of its input arguments, except where stated otherwise. Each function shall execute
9638     as if it were a single operation without raising SIGFPE and without generating any of the
9639     exceptions ''invalid'', ''divide-by-zero'', or ''overflow'' except to reflect the result of the
9640     function.
9641 2   For all functions, a domain error occurs if an input argument is outside the domain over
9642     which the mathematical function is defined. The description of each function lists any
9643     required domain errors; an implementation may define additional domain errors, provided
9644     that such errors are consistent with the mathematical definition of the function.226) On a
9645     domain error, the function returns an implementation-defined value; if the integer
9646     expression math_errhandling &amp; MATH_ERRNO is nonzero, the integer expression
9647     errno acquires the value EDOM; if the integer expression math_errhandling &amp;
9648     MATH_ERREXCEPT is nonzero, the ''invalid'' floating-point exception is raised.
9649 3   Similarly, a pole error (also known as a singularity or infinitary) occurs if the
9650     mathematical function has an exact infinite result as the finite input argument(s) are
9651     approached in the limit (for example, log(0.0)). The description of each function lists
9652     any required pole errors; an implementation may define additional pole errors, provided
9653     that such errors are consistent with the mathematical definition of the function. On a pole
9654     error, the function returns an implementation-defined value; if the integer expression
9655
9656
9657     226) In an implementation that supports infinities, this allows an infinity as an argument to be a domain
9658          error if the mathematical domain of the function does not include the infinity.
9659
9660 [<a name="#p231" href="p231">page 231</a>] (<a href="#Contents">Contents</a>)
9661
9662     math_errhandling &amp; MATH_ERRNO is nonzero, the integer expression errno
9663     acquires the value ERANGE; if the integer expression math_errhandling &amp;
9664     MATH_ERREXCEPT is nonzero, the ''divide-by-zero'' floating-point exception is raised.
9665 4   Likewise, a range error occurs if the mathematical result of the function cannot be
9666     represented in an object of the specified type, due to extreme magnitude.
9667 5   A floating result overflows if the magnitude of the mathematical result is finite but so
9668     large that the mathematical result cannot be represented without extraordinary roundoff
9669     error in an object of the specified type. If a floating result overflows and default rounding
9670     is in effect, then the function returns the value of the macro HUGE_VAL, HUGE_VALF, or
9671     HUGE_VALL according to the return type, with the same sign as the correct value of the
9672     function; if the integer expression math_errhandling &amp; MATH_ERRNO is nonzero,
9673     the integer expression errno acquires the value ERANGE; if the integer expression
9674     math_errhandling &amp; MATH_ERREXCEPT is nonzero, the ''overflow'' floating-
9675     point exception is raised.
9676 6   The result underflows if the magnitude of the mathematical result is so small that the
9677     mathematical result cannot be represented, without extraordinary roundoff error, in an
9678     object of the specified type.227) If the result underflows, the function returns an
9679     implementation-defined value whose magnitude is no greater than the smallest
9680     normalized positive number in the specified type; if the integer expression
9681     math_errhandling &amp; MATH_ERRNO is nonzero, whether errno acquires the
9682     value    ERANGE       is    implementation-defined;     if   the  integer   expression
9683     math_errhandling &amp; MATH_ERREXCEPT is nonzero, whether the ''underflow''
9684     floating-point exception is raised is implementation-defined.
9685 7   If a domain, pole, or range error occurs and the integer expression
9686     math_errhandling &amp; MATH_ERRNO is zero,228) then errno shall either be set to
9687     the value corresponding to the error or left unmodified. If no such error occurs, errno
9688     shall be left unmodified regardless of the setting of math_errhandling.
9689
9690
9691
9692
9693     227) The term underflow here is intended to encompass both ''gradual underflow'' as in IEC 60559 and
9694          also ''flush-to-zero'' underflow.
9695     228) Math errors are being indicated by the floating-point exception flags rather than by errno.
9696
9697 [<a name="#p232" href="p232">page 232</a>] (<a href="#Contents">Contents</a>)
9698
9699 <a name="7.12.2" href="#7.12.2"><b>    7.12.2 The FP_CONTRACT pragma</b></a>
9700     Synopsis
9701 1            #include <a href="#7.12">&lt;math.h&gt;</a>
9702              #pragma STDC FP_CONTRACT on-off-switch
9703     Description
9704 2   The FP_CONTRACT pragma can be used to allow (if the state is ''on'') or disallow (if the
9705     state is ''off'') the implementation to contract expressions (<a href="#6.5">6.5</a>). Each pragma can occur
9706     either outside external declarations or preceding all explicit declarations and statements
9707     inside a compound statement. When outside external declarations, the pragma takes
9708     effect from its occurrence until another FP_CONTRACT pragma is encountered, or until
9709     the end of the translation unit. When inside a compound statement, the pragma takes
9710     effect from its occurrence until another FP_CONTRACT pragma is encountered
9711     (including within a nested compound statement), or until the end of the compound
9712     statement; at the end of a compound statement the state for the pragma is restored to its
9713     condition just before the compound statement. If this pragma is used in any other
9714     context, the behavior is undefined. The default state (''on'' or ''off'') for the pragma is
9715     implementation-defined.
9716 <a name="7.12.3" href="#7.12.3"><b>    7.12.3 Classification macros</b></a>
9717 1   In the synopses in this subclause, real-floating indicates that the argument shall be an
9718     expression of real floating type.
9719 <a name="7.12.3.1" href="#7.12.3.1"><b>    7.12.3.1 The fpclassify macro</b></a>
9720     Synopsis
9721 1            #include <a href="#7.12">&lt;math.h&gt;</a>
9722              int fpclassify(real-floating x);
9723     Description
9724 2   The fpclassify macro classifies its argument value as NaN, infinite, normal,
9725     subnormal, zero, or into another implementation-defined category. First, an argument
9726     represented in a format wider than its semantic type is converted to its semantic type.
9727     Then classification is based on the type of the argument.229)
9728     Returns
9729 3   The fpclassify macro returns the value of the number classification macro
9730     appropriate to the value of its argument.
9731
9732
9733     229) Since an expression can be evaluated with more range and precision than its type has, it is important to
9734          know the type that classification is based on. For example, a normal long double value might
9735          become subnormal when converted to double, and zero when converted to float.
9736
9737 [<a name="#p233" href="p233">page 233</a>] (<a href="#Contents">Contents</a>)
9738
9739 <a name="7.12.3.2" href="#7.12.3.2"><b>    7.12.3.2 The isfinite macro</b></a>
9740     Synopsis
9741 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9742             int isfinite(real-floating x);
9743     Description
9744 2   The isfinite macro determines whether its argument has a finite value (zero,
9745     subnormal, or normal, and not infinite or NaN). First, an argument represented in a
9746     format wider than its semantic type is converted to its semantic type. Then determination
9747     is based on the type of the argument.
9748     Returns
9749 3   The isfinite macro returns a nonzero value if and only if its argument has a finite
9750     value.
9751 <a name="7.12.3.3" href="#7.12.3.3"><b>    7.12.3.3 The isinf macro</b></a>
9752     Synopsis
9753 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9754             int isinf(real-floating x);
9755     Description
9756 2   The isinf macro determines whether its argument value is an infinity (positive or
9757     negative). First, an argument represented in a format wider than its semantic type is
9758     converted to its semantic type. Then determination is based on the type of the argument.
9759     Returns
9760 3   The isinf macro returns a nonzero value if and only if its argument has an infinite
9761     value.
9762 <a name="7.12.3.4" href="#7.12.3.4"><b>    7.12.3.4 The isnan macro</b></a>
9763     Synopsis
9764 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9765             int isnan(real-floating x);
9766     Description
9767 2   The isnan macro determines whether its argument value is a NaN. First, an argument
9768     represented in a format wider than its semantic type is converted to its semantic type.
9769     Then determination is based on the type of the argument.230)
9770
9771
9772     230) For the isnan macro, the type for determination does not matter unless the implementation supports
9773          NaNs in the evaluation type but not in the semantic type.
9774
9775 [<a name="#p234" href="p234">page 234</a>] (<a href="#Contents">Contents</a>)
9776
9777     Returns
9778 3   The isnan macro returns a nonzero value if and only if its argument has a NaN value.
9779 <a name="7.12.3.5" href="#7.12.3.5"><b>    7.12.3.5 The isnormal macro</b></a>
9780     Synopsis
9781 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9782             int isnormal(real-floating x);
9783     Description
9784 2   The isnormal macro determines whether its argument value is normal (neither zero,
9785     subnormal, infinite, nor NaN). First, an argument represented in a format wider than its
9786     semantic type is converted to its semantic type. Then determination is based on the type
9787     of the argument.
9788     Returns
9789 3   The isnormal macro returns a nonzero value if and only if its argument has a normal
9790     value.
9791 <a name="7.12.3.6" href="#7.12.3.6"><b>    7.12.3.6 The signbit macro</b></a>
9792     Synopsis
9793 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9794             int signbit(real-floating x);
9795     Description
9796 2   The signbit macro determines whether the sign of its argument value is negative.231)
9797     Returns
9798 3   The signbit macro returns a nonzero value if and only if the sign of its argument value
9799     is negative.
9800
9801
9802
9803
9804     231) The signbit macro reports the sign of all values, including infinities, zeros, and NaNs. If zero is
9805          unsigned, it is treated as positive.
9806
9807 [<a name="#p235" href="p235">page 235</a>] (<a href="#Contents">Contents</a>)
9808
9809 <a name="7.12.4" href="#7.12.4"><b>    7.12.4 Trigonometric functions</b></a>
9810 <a name="7.12.4.1" href="#7.12.4.1"><b>    7.12.4.1 The acos functions</b></a>
9811     Synopsis
9812 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9813            double acos(double x);
9814            float acosf(float x);
9815            long double acosl(long double x);
9816     Description
9817 2   The acos functions compute the principal value of the arc cosine of x. A domain error
9818     occurs for arguments not in the interval [-1, +1].
9819     Returns
9820 3   The acos functions return arccos x in the interval [0, pi ] radians.
9821 <a name="7.12.4.2" href="#7.12.4.2"><b>    7.12.4.2 The asin functions</b></a>
9822     Synopsis
9823 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9824            double asin(double x);
9825            float asinf(float x);
9826            long double asinl(long double x);
9827     Description
9828 2   The asin functions compute the principal value of the arc sine of x. A domain error
9829     occurs for arguments not in the interval [-1, +1].
9830     Returns
9831 3   The asin functions return arcsin x in the interval [-pi /2, +pi /2] radians.
9832 <a name="7.12.4.3" href="#7.12.4.3"><b>    7.12.4.3 The atan functions</b></a>
9833     Synopsis
9834 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9835            double atan(double x);
9836            float atanf(float x);
9837            long double atanl(long double x);
9838     Description
9839 2   The atan functions compute the principal value of the arc tangent of x.
9840
9841
9842
9843
9844 [<a name="#p236" href="p236">page 236</a>] (<a href="#Contents">Contents</a>)
9845
9846     Returns
9847 3   The atan functions return arctan x in the interval [-pi /2, +pi /2] radians.
9848 <a name="7.12.4.4" href="#7.12.4.4"><b>    7.12.4.4 The atan2 functions</b></a>
9849     Synopsis
9850 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9851             double atan2(double y, double x);
9852             float atan2f(float y, float x);
9853             long double atan2l(long double y, long double x);
9854     Description
9855 2   The atan2 functions compute the value of the arc tangent of y/x, using the signs of both
9856     arguments to determine the quadrant of the return value. A domain error may occur if
9857     both arguments are zero.
9858     Returns
9859 3   The atan2 functions return arctan y/x in the interval [-pi , +pi ] radians.
9860 <a name="7.12.4.5" href="#7.12.4.5"><b>    7.12.4.5 The cos functions</b></a>
9861     Synopsis
9862 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9863             double cos(double x);
9864             float cosf(float x);
9865             long double cosl(long double x);
9866     Description
9867 2   The cos functions compute the cosine of x (measured in radians).
9868     Returns
9869 3   The cos functions return cos x.
9870 <a name="7.12.4.6" href="#7.12.4.6"><b>    7.12.4.6 The sin functions</b></a>
9871     Synopsis
9872 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9873             double sin(double x);
9874             float sinf(float x);
9875             long double sinl(long double x);
9876     Description
9877 2   The sin functions compute the sine of x (measured in radians).
9878
9879
9880
9881 [<a name="#p237" href="p237">page 237</a>] (<a href="#Contents">Contents</a>)
9882
9883     Returns
9884 3   The sin functions return sin x.
9885 <a name="7.12.4.7" href="#7.12.4.7"><b>    7.12.4.7 The tan functions</b></a>
9886     Synopsis
9887 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9888            double tan(double x);
9889            float tanf(float x);
9890            long double tanl(long double x);
9891     Description
9892 2   The tan functions return the tangent of x (measured in radians).
9893     Returns
9894 3   The tan functions return tan x.
9895 <a name="7.12.5" href="#7.12.5"><b>    7.12.5 Hyperbolic functions</b></a>
9896 <a name="7.12.5.1" href="#7.12.5.1"><b>    7.12.5.1 The acosh functions</b></a>
9897     Synopsis
9898 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9899            double acosh(double x);
9900            float acoshf(float x);
9901            long double acoshl(long double x);
9902     Description
9903 2   The acosh functions compute the (nonnegative) arc hyperbolic cosine of x. A domain
9904     error occurs for arguments less than 1.
9905     Returns
9906 3   The acosh functions return arcosh x in the interval [0, +(inf)].
9907 <a name="7.12.5.2" href="#7.12.5.2"><b>    7.12.5.2 The asinh functions</b></a>
9908     Synopsis
9909 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9910            double asinh(double x);
9911            float asinhf(float x);
9912            long double asinhl(long double x);
9913     Description
9914 2   The asinh functions compute the arc hyperbolic sine of x.
9915
9916
9917 [<a name="#p238" href="p238">page 238</a>] (<a href="#Contents">Contents</a>)
9918
9919     Returns
9920 3   The asinh functions return arsinh x.
9921 <a name="7.12.5.3" href="#7.12.5.3"><b>    7.12.5.3 The atanh functions</b></a>
9922     Synopsis
9923 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9924             double atanh(double x);
9925             float atanhf(float x);
9926             long double atanhl(long double x);
9927     Description
9928 2   The atanh functions compute the arc hyperbolic tangent of x. A domain error occurs
9929     for arguments not in the interval [-1, +1]. A pole error may occur if the argument equals
9930     -1 or +1.
9931     Returns
9932 3   The atanh functions return artanh x.
9933 <a name="7.12.5.4" href="#7.12.5.4"><b>    7.12.5.4 The cosh functions</b></a>
9934     Synopsis
9935 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9936             double cosh(double x);
9937             float coshf(float x);
9938             long double coshl(long double x);
9939     Description
9940 2   The cosh functions compute the hyperbolic cosine of x. A range error occurs if the
9941     magnitude of x is too large.
9942     Returns
9943 3   The cosh functions return cosh x.
9944 <a name="7.12.5.5" href="#7.12.5.5"><b>    7.12.5.5 The sinh functions</b></a>
9945     Synopsis
9946 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9947             double sinh(double x);
9948             float sinhf(float x);
9949             long double sinhl(long double x);
9950     Description
9951 2   The sinh functions compute the hyperbolic sine of x. A range error occurs if the
9952     magnitude of x is too large.
9953 [<a name="#p239" href="p239">page 239</a>] (<a href="#Contents">Contents</a>)
9954
9955     Returns
9956 3   The sinh functions return sinh x.
9957 <a name="7.12.5.6" href="#7.12.5.6"><b>    7.12.5.6 The tanh functions</b></a>
9958     Synopsis
9959 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9960            double tanh(double x);
9961            float tanhf(float x);
9962            long double tanhl(long double x);
9963     Description
9964 2   The tanh functions compute the hyperbolic tangent of x.
9965     Returns
9966 3   The tanh functions return tanh x.
9967 <a name="7.12.6" href="#7.12.6"><b>    7.12.6 Exponential and logarithmic functions</b></a>
9968 <a name="7.12.6.1" href="#7.12.6.1"><b>    7.12.6.1 The exp functions</b></a>
9969     Synopsis
9970 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9971            double exp(double x);
9972            float expf(float x);
9973            long double expl(long double x);
9974     Description
9975 2   The exp functions compute the base-e exponential of x. A range error occurs if the
9976     magnitude of x is too large.
9977     Returns
9978 3   The exp functions return ex .
9979 <a name="7.12.6.2" href="#7.12.6.2"><b>    7.12.6.2 The exp2 functions</b></a>
9980     Synopsis
9981 1          #include <a href="#7.12">&lt;math.h&gt;</a>
9982            double exp2(double x);
9983            float exp2f(float x);
9984            long double exp2l(long double x);
9985     Description
9986 2   The exp2 functions compute the base-2 exponential of x. A range error occurs if the
9987     magnitude of x is too large.
9988
9989 [<a name="#p240" href="p240">page 240</a>] (<a href="#Contents">Contents</a>)
9990
9991     Returns
9992 3   The exp2 functions return 2x .
9993 <a name="7.12.6.3" href="#7.12.6.3"><b>    7.12.6.3 The expm1 functions</b></a>
9994     Synopsis
9995 1           #include <a href="#7.12">&lt;math.h&gt;</a>
9996             double expm1(double x);
9997             float expm1f(float x);
9998             long double expm1l(long double x);
9999     Description
10000 2   The expm1 functions compute the base-e exponential of the argument, minus 1. A range
10001     error occurs if x is too large.232)
10002     Returns
10003 3   The expm1 functions return ex - 1.
10004 <a name="7.12.6.4" href="#7.12.6.4"><b>    7.12.6.4 The frexp functions</b></a>
10005     Synopsis
10006 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10007             double frexp(double value, int *exp);
10008             float frexpf(float value, int *exp);
10009             long double frexpl(long double value, int *exp);
10010     Description
10011 2   The frexp functions break a floating-point number into a normalized fraction and an
10012     integral power of 2. They store the integer in the int object pointed to by exp.
10013     Returns
10014 3   If value is not a floating-point number or if the integral power of 2 is outside the range
10015     of int, the results are unspecified. Otherwise, the frexp functions return the value x,
10016     such that x has a magnitude in the interval [1/2, 1) or zero, and value equals x x 2*exp .
10017     If value is zero, both parts of the result are zero.
10018
10019
10020
10021
10022     232) For small magnitude x, expm1(x) is expected to be more accurate than exp(x) - 1.
10023
10024 [<a name="#p241" href="p241">page 241</a>] (<a href="#Contents">Contents</a>)
10025
10026 <a name="7.12.6.5" href="#7.12.6.5"><b>    7.12.6.5 The ilogb functions</b></a>
10027     Synopsis
10028 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10029            int ilogb(double x);
10030            int ilogbf(float x);
10031            int ilogbl(long double x);
10032     Description
10033 2   The ilogb functions extract the exponent of x as a signed int value. If x is zero they
10034     compute the value FP_ILOGB0; if x is infinite they compute the value INT_MAX; if x is
10035     a NaN they compute the value FP_ILOGBNAN; otherwise, they are equivalent to calling
10036     the corresponding logb function and casting the returned value to type int. A domain
10037     error or range error may occur if x is zero, infinite, or NaN. If the correct value is outside
10038     the range of the return type, the numeric result is unspecified.
10039     Returns
10040 3   The ilogb functions return the exponent of x as a signed int value.
10041     Forward references: the logb functions (<a href="#7.12.6.11">7.12.6.11</a>).
10042 <a name="7.12.6.6" href="#7.12.6.6"><b>    7.12.6.6 The ldexp functions</b></a>
10043     Synopsis
10044 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10045            double ldexp(double x, int exp);
10046            float ldexpf(float x, int exp);
10047            long double ldexpl(long double x, int exp);
10048     Description
10049 2   The ldexp functions multiply a floating-point number by an integral power of 2. A
10050     range error may occur.
10051     Returns
10052 3   The ldexp functions return x x 2exp .
10053 <a name="7.12.6.7" href="#7.12.6.7"><b>    7.12.6.7 The log functions</b></a>
10054     Synopsis
10055 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10056            double log(double x);
10057            float logf(float x);
10058            long double logl(long double x);
10059
10060
10061
10062 [<a name="#p242" href="p242">page 242</a>] (<a href="#Contents">Contents</a>)
10063
10064     Description
10065 2   The log functions compute the base-e (natural) logarithm of x. A domain error occurs if
10066     the argument is negative. A pole error may occur if the argument is zero.
10067     Returns
10068 3   The log functions return loge x.
10069 <a name="7.12.6.8" href="#7.12.6.8"><b>    7.12.6.8 The log10 functions</b></a>
10070     Synopsis
10071 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10072             double log10(double x);
10073             float log10f(float x);
10074             long double log10l(long double x);
10075     Description
10076 2   The log10 functions compute the base-10 (common) logarithm of x. A domain error
10077     occurs if the argument is negative. A pole error may occur if the argument is zero.
10078     Returns
10079 3   The log10 functions return log10 x.
10080 <a name="7.12.6.9" href="#7.12.6.9"><b>    7.12.6.9 The log1p functions</b></a>
10081     Synopsis
10082 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10083             double log1p(double x);
10084             float log1pf(float x);
10085             long double log1pl(long double x);
10086     Description
10087 2   The log1p functions compute the base-e (natural) logarithm of 1 plus the argument.233)
10088     A domain error occurs if the argument is less than -1. A pole error may occur if the
10089     argument equals -1.
10090     Returns
10091 3   The log1p functions return loge (1 + x).
10092
10093
10094
10095
10096     233) For small magnitude x, log1p(x) is expected to be more accurate than log(1 + x).
10097
10098 [<a name="#p243" href="p243">page 243</a>] (<a href="#Contents">Contents</a>)
10099
10100 <a name="7.12.6.10" href="#7.12.6.10"><b>    7.12.6.10 The log2 functions</b></a>
10101     Synopsis
10102 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10103            double log2(double x);
10104            float log2f(float x);
10105            long double log2l(long double x);
10106     Description
10107 2   The log2 functions compute the base-2 logarithm of x. A domain error occurs if the
10108     argument is less than zero. A pole error may occur if the argument is zero.
10109     Returns
10110 3   The log2 functions return log2 x.
10111 <a name="7.12.6.11" href="#7.12.6.11"><b>    7.12.6.11 The logb functions</b></a>
10112     Synopsis
10113 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10114            double logb(double x);
10115            float logbf(float x);
10116            long double logbl(long double x);
10117     Description
10118 2   The logb functions extract the exponent of x, as a signed integer value in floating-point
10119     format. If x is subnormal it is treated as though it were normalized; thus, for positive
10120     finite x,
10121           1 &lt;= x x FLT_RADIX-logb(x) &lt; FLT_RADIX
10122     A domain error or pole error may occur if the argument is zero.
10123     Returns
10124 3   The logb functions return the signed exponent of x.
10125 <a name="7.12.6.12" href="#7.12.6.12"><b>    7.12.6.12 The modf functions</b></a>
10126     Synopsis
10127 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10128            double modf(double value, double *iptr);
10129            float modff(float value, float *iptr);
10130            long double modfl(long double value, long double *iptr);
10131     Description
10132 2   The modf functions break the argument value into integral and fractional parts, each of
10133     which has the same type and sign as the argument. They store the integral part (in
10134 [<a name="#p244" href="p244">page 244</a>] (<a href="#Contents">Contents</a>)
10135
10136     floating-point format) in the object pointed to by iptr.
10137     Returns
10138 3   The modf functions return the signed fractional part of value.
10139 <a name="7.12.6.13" href="#7.12.6.13"><b>    7.12.6.13 The scalbn and scalbln functions</b></a>
10140     Synopsis
10141 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10142             double scalbn(double x, int n);
10143             float scalbnf(float x, int n);
10144             long double scalbnl(long double x, int n);
10145             double scalbln(double x, long int n);
10146             float scalblnf(float x, long int n);
10147             long double scalblnl(long double x, long int n);
10148     Description
10149 2   The scalbn and scalbln functions compute x x FLT_RADIXn efficiently, not
10150     normally by computing FLT_RADIXn explicitly. A range error may occur.
10151     Returns
10152 3   The scalbn and scalbln functions return x x FLT_RADIXn .
10153 <a name="7.12.7" href="#7.12.7"><b>    7.12.7 Power and absolute-value functions</b></a>
10154 <a name="7.12.7.1" href="#7.12.7.1"><b>    7.12.7.1 The cbrt functions</b></a>
10155     Synopsis
10156 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10157             double cbrt(double x);
10158             float cbrtf(float x);
10159             long double cbrtl(long double x);
10160     Description
10161 2   The cbrt functions compute the real cube root of x.
10162     Returns
10163 3   The cbrt functions return x1/3 .
10164
10165
10166
10167
10168 [<a name="#p245" href="p245">page 245</a>] (<a href="#Contents">Contents</a>)
10169
10170 <a name="7.12.7.2" href="#7.12.7.2"><b>    7.12.7.2 The fabs functions</b></a>
10171     Synopsis
10172 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10173            double fabs(double x);
10174            float fabsf(float x);
10175            long double fabsl(long double x);
10176     Description
10177 2   The fabs functions compute the absolute value of a floating-point number x.
10178     Returns
10179 3   The fabs functions return | x |.
10180 <a name="7.12.7.3" href="#7.12.7.3"><b>    7.12.7.3 The hypot functions</b></a>
10181     Synopsis
10182 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10183            double hypot(double x, double y);
10184            float hypotf(float x, float y);
10185            long double hypotl(long double x, long double y);
10186     Description
10187 2   The hypot functions compute the square root of the sum of the squares of x and y,
10188     without undue overflow or underflow. A range error may occur.
10189 3   Returns
10190 4   The hypot functions return sqrt:x2 + y2 .
10191                                -
10192                                -----
10193 <a name="7.12.7.4" href="#7.12.7.4"><b>    7.12.7.4 The pow functions</b></a>
10194     Synopsis
10195 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10196            double pow(double x, double y);
10197            float powf(float x, float y);
10198            long double powl(long double x, long double y);
10199     Description
10200 2   The pow functions compute x raised to the power y. A domain error occurs if x is finite
10201     and negative and y is finite and not an integer value. A range error may occur. A domain
10202     error may occur if x is zero and y is zero. A domain error or pole error may occur if x is
10203     zero and y is less than zero.
10204
10205
10206
10207
10208 [<a name="#p246" href="p246">page 246</a>] (<a href="#Contents">Contents</a>)
10209
10210     Returns
10211 3   The pow functions return xy .
10212 <a name="7.12.7.5" href="#7.12.7.5"><b>    7.12.7.5 The sqrt functions</b></a>
10213     Synopsis
10214 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10215             double sqrt(double x);
10216             float sqrtf(float x);
10217             long double sqrtl(long double x);
10218     Description
10219 2   The sqrt functions compute the nonnegative square root of x. A domain error occurs if
10220     the argument is less than zero.
10221     Returns
10222 3   The sqrt functions return sqrt:x.
10223                               -
10224                               -
10225 <a name="7.12.8" href="#7.12.8"><b>    7.12.8 Error and gamma functions</b></a>
10226 <a name="7.12.8.1" href="#7.12.8.1"><b>    7.12.8.1 The erf functions</b></a>
10227     Synopsis
10228 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10229             double erf(double x);
10230             float erff(float x);
10231             long double erfl(long double x);
10232     Description
10233 2   The erf functions compute the error function of x.
10234     Returns
10235 3                                      2        x
10236                                             (integral)       e-t dt.
10237                                                       2
10238     The erf functions return erf x =
10239                                        sqrt:pi
10240                                        -
10241                                        -    0
10242
10243 <a name="7.12.8.2" href="#7.12.8.2"><b>    7.12.8.2 The erfc functions</b></a>
10244     Synopsis
10245 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10246             double erfc(double x);
10247             float erfcf(float x);
10248             long double erfcl(long double x);
10249     Description
10250 2   The erfc functions compute the complementary error function of x. A range error
10251     occurs if x is too large.
10252 [<a name="#p247" href="p247">page 247</a>] (<a href="#Contents">Contents</a>)
10253
10254     Returns
10255 3                                                       2       (inf)
10256                                                             (integral)       e-t dt.
10257                                                                       2
10258     The erfc functions return erfc x = 1 - erf x =
10259                                                      sqrt:pi
10260                                                      -
10261                                                      -      x
10262
10263 <a name="7.12.8.3" href="#7.12.8.3"><b>    7.12.8.3 The lgamma functions</b></a>
10264     Synopsis
10265 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10266            double lgamma(double x);
10267            float lgammaf(float x);
10268            long double lgammal(long double x);
10269     Description
10270 2   The lgamma functions compute the natural logarithm of the absolute value of gamma of
10271     x. A range error occurs if x is too large. A pole error may occur if x is a negative integer
10272     or zero.
10273     Returns
10274 3   The lgamma functions return loge | (Gamma)(x) |.
10275 <a name="7.12.8.4" href="#7.12.8.4"><b>    7.12.8.4 The tgamma functions</b></a>
10276     Synopsis
10277 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10278            double tgamma(double x);
10279            float tgammaf(float x);
10280            long double tgammal(long double x);
10281     Description
10282 2   The tgamma functions compute the gamma function of x. A domain error or pole error
10283     may occur if x is a negative integer or zero. A range error occurs if the magnitude of x is
10284     too large and may occur if the magnitude of x is too small.
10285     Returns
10286 3   The tgamma functions return (Gamma)(x).
10287
10288
10289
10290
10291 [<a name="#p248" href="p248">page 248</a>] (<a href="#Contents">Contents</a>)
10292
10293 <a name="7.12.9" href="#7.12.9"><b>    7.12.9 Nearest integer functions</b></a>
10294 <a name="7.12.9.1" href="#7.12.9.1"><b>    7.12.9.1 The ceil functions</b></a>
10295     Synopsis
10296 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10297             double ceil(double x);
10298             float ceilf(float x);
10299             long double ceill(long double x);
10300     Description
10301 2   The ceil functions compute the smallest integer value not less than x.
10302     Returns
10303 3   The ceil functions return [^x^], expressed as a floating-point number.
10304 <a name="7.12.9.2" href="#7.12.9.2"><b>    7.12.9.2 The floor functions</b></a>
10305     Synopsis
10306 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10307             double floor(double x);
10308             float floorf(float x);
10309             long double floorl(long double x);
10310     Description
10311 2   The floor functions compute the largest integer value not greater than x.
10312     Returns
10313 3   The floor functions return [_x_], expressed as a floating-point number.
10314 <a name="7.12.9.3" href="#7.12.9.3"><b>    7.12.9.3 The nearbyint functions</b></a>
10315     Synopsis
10316 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10317             double nearbyint(double x);
10318             float nearbyintf(float x);
10319             long double nearbyintl(long double x);
10320     Description
10321 2   The nearbyint functions round their argument to an integer value in floating-point
10322     format, using the current rounding direction and without raising the ''inexact'' floating-
10323     point exception.
10324
10325
10326
10327
10328 [<a name="#p249" href="p249">page 249</a>] (<a href="#Contents">Contents</a>)
10329
10330     Returns
10331 3   The nearbyint functions return the rounded integer value.
10332 <a name="7.12.9.4" href="#7.12.9.4"><b>    7.12.9.4 The rint functions</b></a>
10333     Synopsis
10334 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10335            double rint(double x);
10336            float rintf(float x);
10337            long double rintl(long double x);
10338     Description
10339 2   The rint functions differ from the nearbyint functions (<a href="#7.12.9.3">7.12.9.3</a>) only in that the
10340     rint functions may raise the ''inexact'' floating-point exception if the result differs in
10341     value from the argument.
10342     Returns
10343 3   The rint functions return the rounded integer value.
10344 <a name="7.12.9.5" href="#7.12.9.5"><b>    7.12.9.5 The lrint and llrint functions</b></a>
10345     Synopsis
10346 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10347            long int lrint(double x);
10348            long int lrintf(float x);
10349            long int lrintl(long double x);
10350            long long int llrint(double x);
10351            long long int llrintf(float x);
10352            long long int llrintl(long double x);
10353     Description
10354 2   The lrint and llrint functions round their argument to the nearest integer value,
10355     rounding according to the current rounding direction. If the rounded value is outside the
10356     range of the return type, the numeric result is unspecified and a domain error or range
10357     error may occur.
10358     Returns
10359 3   The lrint and llrint functions return the rounded integer value.
10360
10361
10362
10363
10364 [<a name="#p250" href="p250">page 250</a>] (<a href="#Contents">Contents</a>)
10365
10366 <a name="7.12.9.6" href="#7.12.9.6"><b>    7.12.9.6 The round functions</b></a>
10367     Synopsis
10368 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10369             double round(double x);
10370             float roundf(float x);
10371             long double roundl(long double x);
10372     Description
10373 2   The round functions round their argument to the nearest integer value in floating-point
10374     format, rounding halfway cases away from zero, regardless of the current rounding
10375     direction.
10376     Returns
10377 3   The round functions return the rounded integer value.
10378 <a name="7.12.9.7" href="#7.12.9.7"><b>    7.12.9.7 The lround and llround functions</b></a>
10379     Synopsis
10380 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10381             long int lround(double x);
10382             long int lroundf(float x);
10383             long int lroundl(long double x);
10384             long long int llround(double x);
10385             long long int llroundf(float x);
10386             long long int llroundl(long double x);
10387     Description
10388 2   The lround and llround functions round their argument to the nearest integer value,
10389     rounding halfway cases away from zero, regardless of the current rounding direction. If
10390     the rounded value is outside the range of the return type, the numeric result is unspecified
10391     and a domain error or range error may occur.
10392     Returns
10393 3   The lround and llround functions return the rounded integer value.
10394 <a name="7.12.9.8" href="#7.12.9.8"><b>    7.12.9.8 The trunc functions</b></a>
10395     Synopsis
10396 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10397             double trunc(double x);
10398             float truncf(float x);
10399             long double truncl(long double x);
10400
10401
10402 [<a name="#p251" href="p251">page 251</a>] (<a href="#Contents">Contents</a>)
10403
10404     Description
10405 2   The trunc functions round their argument to the integer value, in floating format,
10406     nearest to but no larger in magnitude than the argument.
10407     Returns
10408 3   The trunc functions return the truncated integer value.
10409 <a name="7.12.10" href="#7.12.10"><b>    7.12.10 Remainder functions</b></a>
10410 <a name="7.12.10.1" href="#7.12.10.1"><b>    7.12.10.1 The fmod functions</b></a>
10411     Synopsis
10412 1            #include <a href="#7.12">&lt;math.h&gt;</a>
10413              double fmod(double x, double y);
10414              float fmodf(float x, float y);
10415              long double fmodl(long double x, long double y);
10416     Description
10417 2   The fmod functions compute the floating-point remainder of x/y.
10418     Returns
10419 3   The fmod functions return the value x - ny, for some integer n such that, if y is nonzero,
10420     the result has the same sign as x and magnitude less than the magnitude of y. If y is zero,
10421     whether a domain error occurs or the fmod functions return zero is implementation-
10422     defined.
10423 <a name="7.12.10.2" href="#7.12.10.2"><b>    7.12.10.2 The remainder functions</b></a>
10424     Synopsis
10425 1            #include <a href="#7.12">&lt;math.h&gt;</a>
10426              double remainder(double x, double y);
10427              float remainderf(float x, float y);
10428              long double remainderl(long double x, long double y);
10429     Description
10430 2   The remainder functions compute the remainder x REM y required by IEC 60559.234)
10431
10432
10433
10434
10435     234) ''When y != 0, the remainder r = x REM y is defined regardless of the rounding mode by the
10436          mathematical relation r = x - ny, where n is the integer nearest the exact value of x/y; whenever
10437          | n - x/y | = 1/2, then n is even. If r = 0, its sign shall be that of x.'' This definition is applicable for
10438          all implementations.
10439
10440 [<a name="#p252" href="p252">page 252</a>] (<a href="#Contents">Contents</a>)
10441
10442     Returns
10443 3   The remainder functions return x REM y. If y is zero, whether a domain error occurs
10444     or the functions return zero is implementation defined.
10445 <a name="7.12.10.3" href="#7.12.10.3"><b>    7.12.10.3 The remquo functions</b></a>
10446     Synopsis
10447 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10448             double remquo(double x, double y, int *quo);
10449             float remquof(float x, float y, int *quo);
10450             long double remquol(long double x, long double y,
10451                  int *quo);
10452     Description
10453 2   The remquo functions compute the same remainder as the remainder functions. In
10454     the object pointed to by quo they store a value whose sign is the sign of x/y and whose
10455     magnitude is congruent modulo 2n to the magnitude of the integral quotient of x/y, where
10456     n is an implementation-defined integer greater than or equal to 3.
10457     Returns
10458 3   The remquo functions return x REM y. If y is zero, the value stored in the object
10459     pointed to by quo is unspecified and whether a domain error occurs or the functions
10460     return zero is implementation defined.
10461 <a name="7.12.11" href="#7.12.11"><b>    7.12.11 Manipulation functions</b></a>
10462 <a name="7.12.11.1" href="#7.12.11.1"><b>    7.12.11.1 The copysign functions</b></a>
10463     Synopsis
10464 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10465             double copysign(double x, double y);
10466             float copysignf(float x, float y);
10467             long double copysignl(long double x, long double y);
10468     Description
10469 2   The copysign functions produce a value with the magnitude of x and the sign of y.
10470     They produce a NaN (with the sign of y) if x is a NaN. On implementations that
10471     represent a signed zero but do not treat negative zero consistently in arithmetic
10472     operations, the copysign functions regard the sign of zero as positive.
10473     Returns
10474 3   The copysign functions return a value with the magnitude of x and the sign of y.
10475
10476
10477
10478 [<a name="#p253" href="p253">page 253</a>] (<a href="#Contents">Contents</a>)
10479
10480 <a name="7.12.11.2" href="#7.12.11.2"><b>    7.12.11.2 The nan functions</b></a>
10481     Synopsis
10482 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10483             double nan(const char *tagp);
10484             float nanf(const char *tagp);
10485             long double nanl(const char *tagp);
10486     Description
10487 2   The call nan("n-char-sequence") is equivalent to strtod("NAN(n-char-
10488     sequence)",     (char**)       NULL); the call nan("") is equivalent to
10489     strtod("NAN()", (char**) NULL). If tagp does not point to an n-char
10490     sequence or an empty string, the call is equivalent to strtod("NAN", (char**)
10491     NULL). Calls to nanf and nanl are equivalent to the corresponding calls to strtof
10492     and strtold.
10493     Returns
10494 3   The nan functions return a quiet NaN, if available, with content indicated through tagp.
10495     If the implementation does not support quiet NaNs, the functions return zero.
10496     Forward references: the strtod, strtof, and strtold functions (<a href="#7.22.1.3">7.22.1.3</a>).
10497 <a name="7.12.11.3" href="#7.12.11.3"><b>    7.12.11.3 The nextafter functions</b></a>
10498     Synopsis
10499 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10500             double nextafter(double x, double y);
10501             float nextafterf(float x, float y);
10502             long double nextafterl(long double x, long double y);
10503     Description
10504 2   The nextafter functions determine the next representable value, in the type of the
10505     function, after x in the direction of y, where x and y are first converted to the type of the
10506     function.235) The nextafter functions return y if x equals y. A range error may occur
10507     if the magnitude of x is the largest finite value representable in the type and the result is
10508     infinite or not representable in the type.
10509     Returns
10510 3   The nextafter functions return the next representable value in the specified format
10511     after x in the direction of y.
10512
10513
10514     235) The argument values are converted to the type of the function, even by a macro implementation of the
10515          function.
10516
10517 [<a name="#p254" href="p254">page 254</a>] (<a href="#Contents">Contents</a>)
10518
10519 <a name="7.12.11.4" href="#7.12.11.4"><b>    7.12.11.4 The nexttoward functions</b></a>
10520     Synopsis
10521 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10522             double nexttoward(double x, long double y);
10523             float nexttowardf(float x, long double y);
10524             long double nexttowardl(long double x, long double y);
10525     Description
10526 2   The nexttoward functions are equivalent to the nextafter functions except that the
10527     second parameter has type long double and the functions return y converted to the
10528     type of the function if x equals y.236)
10529 <a name="7.12.12" href="#7.12.12"><b>    7.12.12 Maximum, minimum, and positive difference functions</b></a>
10530 <a name="7.12.12.1" href="#7.12.12.1"><b>    7.12.12.1 The fdim functions</b></a>
10531     Synopsis
10532 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10533             double fdim(double x, double y);
10534             float fdimf(float x, float y);
10535             long double fdiml(long double x, long double y);
10536     Description
10537 2   The fdim functions determine the positive difference between their arguments:
10538           {x - y if x &gt; y
10539           {
10540           {+0     if x &lt;= y
10541     A range error may occur.
10542     Returns
10543 3   The fdim functions return the positive difference value.
10544 <a name="7.12.12.2" href="#7.12.12.2"><b>    7.12.12.2 The fmax functions</b></a>
10545     Synopsis
10546 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10547             double fmax(double x, double y);
10548             float fmaxf(float x, float y);
10549             long double fmaxl(long double x, long double y);
10550
10551
10552
10553     236) The result of the nexttoward functions is determined in the type of the function, without loss of
10554          range or precision in a floating second argument.
10555
10556 [<a name="#p255" href="p255">page 255</a>] (<a href="#Contents">Contents</a>)
10557
10558     Description
10559 2   The fmax functions determine the maximum numeric value of their arguments.237)
10560     Returns
10561 3   The fmax functions return the maximum numeric value of their arguments.
10562 <a name="7.12.12.3" href="#7.12.12.3"><b>    7.12.12.3 The fmin functions</b></a>
10563     Synopsis
10564 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10565             double fmin(double x, double y);
10566             float fminf(float x, float y);
10567             long double fminl(long double x, long double y);
10568     Description
10569 2   The fmin functions determine the minimum numeric value of their arguments.238)
10570     Returns
10571 3   The fmin functions return the minimum numeric value of their arguments.
10572 <a name="7.12.13" href="#7.12.13"><b>    7.12.13 Floating multiply-add</b></a>
10573 <a name="7.12.13.1" href="#7.12.13.1"><b>    7.12.13.1 The fma functions</b></a>
10574     Synopsis
10575 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10576             double fma(double x, double y, double z);
10577             float fmaf(float x, float y, float z);
10578             long double fmal(long double x, long double y,
10579                  long double z);
10580     Description
10581 2   The fma functions compute (x x y) + z, rounded as one ternary operation: they compute
10582     the value (as if) to infinite precision and round once to the result format, according to the
10583     current rounding mode. A range error may occur.
10584     Returns
10585 3   The fma functions return (x x y) + z, rounded as one ternary operation.
10586
10587
10588
10589
10590     237) NaN arguments are treated as missing data: if one argument is a NaN and the other numeric, then the
10591          fmax functions choose the numeric value. See <a href="#F.10.9.2">F.10.9.2</a>.
10592     238) The fmin functions are analogous to the fmax functions in their treatment of NaNs.
10593
10594 [<a name="#p256" href="p256">page 256</a>] (<a href="#Contents">Contents</a>)
10595
10596 <a name="7.12.14" href="#7.12.14"><b>    7.12.14 Comparison macros</b></a>
10597 1   The relational and equality operators support the usual mathematical relationships
10598     between numeric values. For any ordered pair of numeric values exactly one of the
10599     relationships -- less, greater, and equal -- is true. Relational operators may raise the
10600     ''invalid'' floating-point exception when argument values are NaNs. For a NaN and a
10601     numeric value, or for two NaNs, just the unordered relationship is true.239) The following
10602     subclauses provide macros that are quiet (non floating-point exception raising) versions
10603     of the relational operators, and other comparison macros that facilitate writing efficient
10604     code that accounts for NaNs without suffering the ''invalid'' floating-point exception. In
10605     the synopses in this subclause, real-floating indicates that the argument shall be an
10606     expression of real floating type (both arguments need not have the same type).240)
10607 <a name="7.12.14.1" href="#7.12.14.1"><b>    7.12.14.1 The isgreater macro</b></a>
10608     Synopsis
10609 1            #include <a href="#7.12">&lt;math.h&gt;</a>
10610              int isgreater(real-floating x, real-floating y);
10611     Description
10612 2   The isgreater macro determines whether its first argument is greater than its second
10613     argument. The value of isgreater(x, y) is always equal to (x) &gt; (y); however,
10614     unlike (x) &gt; (y), isgreater(x, y) does not raise the ''invalid'' floating-point
10615     exception when x and y are unordered.
10616     Returns
10617 3   The isgreater macro returns the value of (x) &gt; (y).
10618 <a name="7.12.14.2" href="#7.12.14.2"><b>    7.12.14.2 The isgreaterequal macro</b></a>
10619     Synopsis
10620 1            #include <a href="#7.12">&lt;math.h&gt;</a>
10621              int isgreaterequal(real-floating x, real-floating y);
10622     Description
10623 2   The isgreaterequal macro determines whether its first argument is greater than or
10624     equal to its second argument. The value of isgreaterequal(x, y) is always equal
10625     to (x) &gt;= (y); however, unlike (x) &gt;= (y), isgreaterequal(x, y) does
10626
10627
10628     239) IEC 60559 requires that the built-in relational operators raise the ''invalid'' floating-point exception if
10629          the operands compare unordered, as an error indicator for programs written without consideration of
10630          NaNs; the result in these cases is false.
10631     240) Whether an argument represented in a format wider than its semantic type is converted to the semantic
10632          type is unspecified.
10633
10634 [<a name="#p257" href="p257">page 257</a>] (<a href="#Contents">Contents</a>)
10635
10636     not raise the ''invalid'' floating-point exception when x and y are unordered.
10637     Returns
10638 3   The isgreaterequal macro returns the value of (x) &gt;= (y).
10639 <a name="7.12.14.3" href="#7.12.14.3"><b>    7.12.14.3 The isless macro</b></a>
10640     Synopsis
10641 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10642            int isless(real-floating x, real-floating y);
10643     Description
10644 2   The isless macro determines whether its first argument is less than its second
10645     argument. The value of isless(x, y) is always equal to (x) &lt; (y); however,
10646     unlike (x) &lt; (y), isless(x, y) does not raise the ''invalid'' floating-point
10647     exception when x and y are unordered.
10648     Returns
10649 3   The isless macro returns the value of (x) &lt; (y).
10650 <a name="7.12.14.4" href="#7.12.14.4"><b>    7.12.14.4 The islessequal macro</b></a>
10651     Synopsis
10652 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10653            int islessequal(real-floating x, real-floating y);
10654     Description
10655 2   The islessequal macro determines whether its first argument is less than or equal to
10656     its second argument. The value of islessequal(x, y) is always equal to
10657     (x) &lt;= (y); however, unlike (x) &lt;= (y), islessequal(x, y) does not raise
10658     the ''invalid'' floating-point exception when x and y are unordered.
10659     Returns
10660 3   The islessequal macro returns the value of (x) &lt;= (y).
10661 <a name="7.12.14.5" href="#7.12.14.5"><b>    7.12.14.5 The islessgreater macro</b></a>
10662     Synopsis
10663 1          #include <a href="#7.12">&lt;math.h&gt;</a>
10664            int islessgreater(real-floating x, real-floating y);
10665     Description
10666 2   The islessgreater macro determines whether its first argument is less than or
10667     greater than its second argument. The islessgreater(x, y) macro is similar to
10668     (x) &lt; (y) || (x) &gt; (y); however, islessgreater(x, y) does not raise
10669
10670 [<a name="#p258" href="p258">page 258</a>] (<a href="#Contents">Contents</a>)
10671
10672     the ''invalid'' floating-point exception when x and y are unordered (nor does it evaluate x
10673     and y twice).
10674     Returns
10675 3   The islessgreater macro returns the value of (x) &lt; (y) || (x) &gt; (y).
10676 <a name="7.12.14.6" href="#7.12.14.6"><b>    7.12.14.6 The isunordered macro</b></a>
10677     Synopsis
10678 1           #include <a href="#7.12">&lt;math.h&gt;</a>
10679             int isunordered(real-floating x, real-floating y);
10680     Description
10681 2   The isunordered macro determines whether its arguments are unordered.
10682     Returns
10683 3   The isunordered macro returns 1 if its arguments are unordered and 0 otherwise.
10684
10685
10686
10687
10688 [<a name="#p259" href="p259">page 259</a>] (<a href="#Contents">Contents</a>)
10689
10690 <a name="7.13" href="#7.13"><b>    7.13 Nonlocal jumps &lt;setjmp.h&gt;</b></a>
10691 1   The header <a href="#7.13">&lt;setjmp.h&gt;</a> defines the macro setjmp, and declares one function and
10692     one type, for bypassing the normal function call and return discipline.241)
10693 2   The type declared is
10694             jmp_buf
10695     which is an array type suitable for holding the information needed to restore a calling
10696     environment. The environment of a call to the setjmp macro consists of information
10697     sufficient for a call to the longjmp function to return execution to the correct block and
10698     invocation of that block, were it called recursively. It does not include the state of the
10699     floating-point status flags, of open files, or of any other component of the abstract
10700     machine.
10701 3   It is unspecified whether setjmp is a macro or an identifier declared with external
10702     linkage. If a macro definition is suppressed in order to access an actual function, or a
10703     program defines an external identifier with the name setjmp, the behavior is undefined.
10704 <a name="7.13.1" href="#7.13.1"><b>    7.13.1 Save calling environment</b></a>
10705 <a name="7.13.1.1" href="#7.13.1.1"><b>    7.13.1.1 The setjmp macro</b></a>
10706     Synopsis
10707 1           #include <a href="#7.13">&lt;setjmp.h&gt;</a>
10708             int setjmp(jmp_buf env);
10709     Description
10710 2   The setjmp macro saves its calling environment in its jmp_buf argument for later use
10711     by the longjmp function.
10712     Returns
10713 3   If the return is from a direct invocation, the setjmp macro returns the value zero. If the
10714     return is from a call to the longjmp function, the setjmp macro returns a nonzero
10715     value.
10716     Environmental limits
10717 4   An invocation of the setjmp macro shall appear only in one of the following contexts:
10718     -- the entire controlling expression of a selection or iteration statement;
10719     -- one operand of a relational or equality operator with the other operand an integer
10720       constant expression, with the resulting expression being the entire controlling
10721
10722
10723     241) These functions are useful for dealing with unusual conditions encountered in a low-level function of
10724          a program.
10725
10726 [<a name="#p260" href="p260">page 260</a>] (<a href="#Contents">Contents</a>)
10727
10728         expression of a selection or iteration statement;
10729     -- the operand of a unary ! operator with the resulting expression being the entire
10730       controlling expression of a selection or iteration statement; or
10731     -- the entire expression of an expression statement (possibly cast to void).
10732 5   If the invocation appears in any other context, the behavior is undefined.
10733 <a name="7.13.2" href="#7.13.2"><b>    7.13.2 Restore calling environment</b></a>
10734 <a name="7.13.2.1" href="#7.13.2.1"><b>    7.13.2.1 The longjmp function</b></a>
10735     Synopsis
10736 1            #include <a href="#7.13">&lt;setjmp.h&gt;</a>
10737              _Noreturn void longjmp(jmp_buf env, int val);
10738     Description
10739 2   The longjmp function restores the environment saved by the most recent invocation of
10740     the setjmp macro in the same invocation of the program with the corresponding
10741     jmp_buf argument. If there has been no such invocation, or if the function containing
10742     the invocation of the setjmp macro has terminated execution242) in the interim, or if the
10743     invocation of the setjmp macro was within the scope of an identifier with variably
10744     modified type and execution has left that scope in the interim, the behavior is undefined.
10745 3   All accessible objects have values, and all other components of the abstract machine243)
10746     have state, as of the time the longjmp function was called, except that the values of
10747     objects of automatic storage duration that are local to the function containing the
10748     invocation of the corresponding setjmp macro that do not have volatile-qualified type
10749     and have been changed between the setjmp invocation and longjmp call are
10750     indeterminate.
10751     Returns
10752 4   After longjmp is completed, program execution continues as if the corresponding
10753     invocation of the setjmp macro had just returned the value specified by val. The
10754     longjmp function cannot cause the setjmp macro to return the value 0; if val is 0,
10755     the setjmp macro returns the value 1.
10756 5   EXAMPLE The longjmp function that returns control back to the point of the setjmp invocation
10757     might cause memory associated with a variable length array object to be squandered.
10758
10759
10760
10761
10762     242) For example, by executing a return statement or because another longjmp call has caused a
10763          transfer to a setjmp invocation in a function earlier in the set of nested calls.
10764     243) This includes, but is not limited to, the floating-point status flags and the state of open files.
10765
10766 [<a name="#p261" href="p261">page 261</a>] (<a href="#Contents">Contents</a>)
10767
10768       #include <a href="#7.13">&lt;setjmp.h&gt;</a>
10769       jmp_buf buf;
10770       void g(int n);
10771       void h(int n);
10772       int n = 6;
10773       void f(void)
10774       {
10775             int x[n];             // valid: f is not terminated
10776             setjmp(buf);
10777             g(n);
10778       }
10779       void g(int n)
10780       {
10781             int a[n];             // a may remain allocated
10782             h(n);
10783       }
10784       void h(int n)
10785       {
10786             int b[n];             // b may remain allocated
10787             longjmp(buf, 2);      // might cause memory loss
10788       }
10789
10790
10791
10792
10793 [<a name="#p262" href="p262">page 262</a>] (<a href="#Contents">Contents</a>)
10794
10795 <a name="7.14" href="#7.14"><b>    7.14 Signal handling &lt;signal.h&gt;</b></a>
10796 1   The header <a href="#7.14">&lt;signal.h&gt;</a> declares a type and two functions and defines several macros,
10797     for handling various signals (conditions that may be reported during program execution).
10798 2   The type defined is
10799              sig_atomic_t
10800     which is the (possibly volatile-qualified) integer type of an object that can be accessed as
10801     an atomic entity, even in the presence of asynchronous interrupts.
10802 3   The macros defined are
10803              SIG_DFL
10804              SIG_ERR
10805              SIG_IGN
10806     which expand to constant expressions with distinct values that have type compatible with
10807     the second argument to, and the return value of, the signal function, and whose values
10808     compare unequal to the address of any declarable function; and the following, which
10809     expand to positive integer constant expressions with type int and distinct values that are
10810     the signal numbers, each corresponding to the specified condition:
10811              SIGABRT abnormal termination, such as is initiated by the abort function
10812              SIGFPE        an erroneous arithmetic operation, such as zero divide or an operation
10813                            resulting in overflow
10814              SIGILL        detection of an invalid function image, such as an invalid instruction
10815              SIGINT        receipt of an interactive attention signal
10816              SIGSEGV an invalid access to storage
10817              SIGTERM a termination request sent to the program
10818 4   An implementation need not generate any of these signals, except as a result of explicit
10819     calls to the raise function. Additional signals and pointers to undeclarable functions,
10820     with macro definitions beginning, respectively, with the letters SIG and an uppercase
10821     letter or with SIG_ and an uppercase letter,244) may also be specified by the
10822     implementation. The complete set of signals, their semantics, and their default handling
10823     is implementation-defined; all signal numbers shall be positive.
10824
10825
10826
10827
10828     244) See ''future library directions'' (<a href="#7.30.6">7.30.6</a>). The names of the signal numbers reflect the following terms
10829          (respectively): abort, floating-point exception, illegal instruction, interrupt, segmentation violation,
10830          and termination.
10831
10832 [<a name="#p263" href="p263">page 263</a>] (<a href="#Contents">Contents</a>)
10833
10834 <a name="7.14.1" href="#7.14.1"><b>    7.14.1 Specify signal handling</b></a>
10835 <a name="7.14.1.1" href="#7.14.1.1"><b>    7.14.1.1 The signal function</b></a>
10836     Synopsis
10837 1           #include <a href="#7.14">&lt;signal.h&gt;</a>
10838             void (*signal(int sig, void (*func)(int)))(int);
10839     Description
10840 2   The signal function chooses one of three ways in which receipt of the signal number
10841     sig is to be subsequently handled. If the value of func is SIG_DFL, default handling
10842     for that signal will occur. If the value of func is SIG_IGN, the signal will be ignored.
10843     Otherwise, func shall point to a function to be called when that signal occurs. An
10844     invocation of such a function because of a signal, or (recursively) of any further functions
10845     called by that invocation (other than functions in the standard library), is called a signal
10846     handler.
10847 3   When a signal occurs and func points to a function, it is implementation-defined
10848     whether the equivalent of signal(sig, SIG_DFL); is executed or the
10849     implementation prevents some implementation-defined set of signals (at least including
10850     sig) from occurring until the current signal handling has completed; in the case of
10851     SIGILL, the implementation may alternatively define that no action is taken. Then the
10852     equivalent of (*func)(sig); is executed. If and when the function returns, if the
10853     value of sig is SIGFPE, SIGILL, SIGSEGV, or any other implementation-defined
10854     value corresponding to a computational exception, the behavior is undefined; otherwise
10855     the program will resume execution at the point it was interrupted.
10856 4   If the signal occurs as the result of calling the abort or raise function, the signal
10857     handler shall not call the raise function.
10858 5   If the signal occurs other than as the result of calling the abort or raise function, the
10859     behavior is undefined if the signal handler refers to any object with static or thread
10860     storage duration other than by assigning a value to an object declared as volatile
10861     sig_atomic_t, or the signal handler calls any function in the standard library other
10862     than the abort function, the _Exit function, the quick_exit function, or the
10863     signal function with the first argument equal to the signal number corresponding to the
10864     signal that caused the invocation of the handler. Furthermore, if such a call to the
10865     signal function results in a SIG_ERR return, the value of errno is indeterminate.245)
10866 6   At program startup, the equivalent of
10867             signal(sig, SIG_IGN);
10868
10869
10870     245) If any signal is generated by an asynchronous signal handler, the behavior is undefined.
10871
10872 [<a name="#p264" href="p264">page 264</a>] (<a href="#Contents">Contents</a>)
10873
10874     may be executed for some signals selected in an implementation-defined manner; the
10875     equivalent of
10876             signal(sig, SIG_DFL);
10877     is executed for all other signals defined by the implementation.
10878 7   The implementation shall behave as if no library function calls the signal function.
10879     Returns
10880 8   If the request can be honored, the signal function returns the value of func for the
10881     most recent successful call to signal for the specified signal sig. Otherwise, a value of
10882     SIG_ERR is returned and a positive value is stored in errno.
10883     Forward references: the abort function (<a href="#7.22.4.1">7.22.4.1</a>), the exit function (<a href="#7.22.4.4">7.22.4.4</a>), the
10884     _Exit function (<a href="#7.22.4.5">7.22.4.5</a>), the quick_exit function (<a href="#7.22.4.7">7.22.4.7</a>).
10885 <a name="7.14.2" href="#7.14.2"><b>    7.14.2 Send signal</b></a>
10886 <a name="7.14.2.1" href="#7.14.2.1"><b>    7.14.2.1 The raise function</b></a>
10887     Synopsis
10888 1           #include <a href="#7.14">&lt;signal.h&gt;</a>
10889             int raise(int sig);
10890     Description
10891 2   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
10892     signal handler is called, the raise function shall not return until after the signal handler
10893     does.
10894     Returns
10895 3   The raise function returns zero if successful, nonzero if unsuccessful.
10896
10897
10898
10899
10900 [<a name="#p265" href="p265">page 265</a>] (<a href="#Contents">Contents</a>)
10901
10902 <a name="7.15" href="#7.15"><b>    7.15 Alignment &lt;stdalign.h&gt;</b></a>
10903 1   The header <a href="#7.15">&lt;stdalign.h&gt;</a> defines two macros.
10904 2   The macro
10905            alignas
10906     expands to _Alignas.
10907 3   The remaining macro is suitable for use in #if preprocessing directives. It is
10908            __alignas_is_defined
10909     which expands to the integer constant 1.
10910
10911
10912
10913
10914 [<a name="#p266" href="p266">page 266</a>] (<a href="#Contents">Contents</a>)
10915
10916 <a name="7.16" href="#7.16"><b>    7.16 Variable arguments &lt;stdarg.h&gt;</b></a>
10917 1   The header <a href="#7.16">&lt;stdarg.h&gt;</a> declares a type and defines four macros, for advancing
10918     through a list of arguments whose number and types are not known to the called function
10919     when it is translated.
10920 2   A function may be called with a variable number of arguments of varying types. As
10921     described in <a href="#6.9.1">6.9.1</a>, its parameter list contains one or more parameters. The rightmost
10922     parameter plays a special role in the access mechanism, and will be designated parmN in
10923     this description.
10924 3   The type declared is
10925             va_list
10926     which is a complete object type suitable for holding information needed by the macros
10927     va_start, va_arg, va_end, and va_copy. If access to the varying arguments is
10928     desired, the called function shall declare an object (generally referred to as ap in this
10929     subclause) having type va_list. The object ap may be passed as an argument to
10930     another function; if that function invokes the va_arg macro with parameter ap, the
10931     value of ap in the calling function is indeterminate and shall be passed to the va_end
10932     macro prior to any further reference to ap.246)
10933 <a name="7.16.1" href="#7.16.1"><b>    7.16.1 Variable argument list access macros</b></a>
10934 1   The va_start and va_arg macros described in this subclause shall be implemented
10935     as macros, not functions. It is unspecified whether va_copy and va_end are macros or
10936     identifiers declared with external linkage. If a macro definition is suppressed in order to
10937     access an actual function, or a program defines an external identifier with the same name,
10938     the behavior is undefined. Each invocation of the va_start and va_copy macros
10939     shall be matched by a corresponding invocation of the va_end macro in the same
10940     function.
10941 <a name="7.16.1.1" href="#7.16.1.1"><b>    7.16.1.1 The va_arg macro</b></a>
10942     Synopsis
10943 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
10944             type va_arg(va_list ap, type);
10945     Description
10946 2   The va_arg macro expands to an expression that has the specified type and the value of
10947     the next argument in the call. The parameter ap shall have been initialized by the
10948     va_start or va_copy macro (without an intervening invocation of the va_end
10949
10950     246) It is permitted to create a pointer to a va_list and pass that pointer to another function, in which
10951          case the original function may make further use of the original list after the other function returns.
10952
10953 [<a name="#p267" href="p267">page 267</a>] (<a href="#Contents">Contents</a>)
10954
10955     macro for the same ap). Each invocation of the va_arg macro modifies ap so that the
10956     values of successive arguments are returned in turn. The parameter type shall be a type
10957     name specified such that the type of a pointer to an object that has the specified type can
10958     be obtained simply by postfixing a * to type. If there is no actual next argument, or if
10959     type is not compatible with the type of the actual next argument (as promoted according
10960     to the default argument promotions), the behavior is undefined, except for the following
10961     cases:
10962     -- one type is a signed integer type, the other type is the corresponding unsigned integer
10963       type, and the value is representable in both types;
10964     -- one type is pointer to void and the other is a pointer to a character type.
10965     Returns
10966 3   The first invocation of the va_arg macro after that of the va_start macro returns the
10967     value of the argument after that specified by parmN . Successive invocations return the
10968     values of the remaining arguments in succession.
10969 <a name="7.16.1.2" href="#7.16.1.2"><b>    7.16.1.2 The va_copy macro</b></a>
10970     Synopsis
10971 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
10972            void va_copy(va_list dest, va_list src);
10973     Description
10974 2   The va_copy macro initializes dest as a copy of src, as if the va_start macro had
10975     been applied to dest followed by the same sequence of uses of the va_arg macro as
10976     had previously been used to reach the present state of src. Neither the va_copy nor
10977     va_start macro shall be invoked to reinitialize dest without an intervening
10978     invocation of the va_end macro for the same dest.
10979     Returns
10980 3   The va_copy macro returns no value.
10981 <a name="7.16.1.3" href="#7.16.1.3"><b>    7.16.1.3 The va_end macro</b></a>
10982     Synopsis
10983 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
10984            void va_end(va_list ap);
10985     Description
10986 2   The va_end macro facilitates a normal return from the function whose variable
10987     argument list was referred to by the expansion of the va_start macro, or the function
10988     containing the expansion of the va_copy macro, that initialized the va_list ap. The
10989     va_end macro may modify ap so that it is no longer usable (without being reinitialized
10990
10991 [<a name="#p268" href="p268">page 268</a>] (<a href="#Contents">Contents</a>)
10992
10993     by the va_start or va_copy macro). If there is no corresponding invocation of the
10994     va_start or va_copy macro, or if the va_end macro is not invoked before the
10995     return, the behavior is undefined.
10996     Returns
10997 3   The va_end macro returns no value.
10998 <a name="7.16.1.4" href="#7.16.1.4"><b>    7.16.1.4 The va_start macro</b></a>
10999     Synopsis
11000 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
11001             void va_start(va_list ap, parmN);
11002     Description
11003 2   The va_start macro shall be invoked before any access to the unnamed arguments.
11004 3   The va_start macro initializes ap for subsequent use by the va_arg and va_end
11005     macros. Neither the va_start nor va_copy macro shall be invoked to reinitialize ap
11006     without an intervening invocation of the va_end macro for the same ap.
11007 4   The parameter parmN is the identifier of the rightmost parameter in the variable
11008     parameter list in the function definition (the one just before the , ...). If the parameter
11009     parmN is declared with the register storage class, with a function or array type, or
11010     with a type that is not compatible with the type that results after application of the default
11011     argument promotions, the behavior is undefined.
11012     Returns
11013 5   The va_start macro returns no value.
11014 6   EXAMPLE 1 The function f1 gathers into an array a list of arguments that are pointers to strings (but not
11015     more than MAXARGS arguments), then passes the array as a single argument to function f2. The number of
11016     pointers is specified by the first argument to f1.
11017             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
11018             #define MAXARGS   31
11019             void f1(int n_ptrs, ...)
11020             {
11021                   va_list ap;
11022                   char *array[MAXARGS];
11023                   int ptr_no = 0;
11024
11025
11026
11027
11028 [<a name="#p269" href="p269">page 269</a>] (<a href="#Contents">Contents</a>)
11029
11030                       if (n_ptrs &gt; MAXARGS)
11031                             n_ptrs = MAXARGS;
11032                       va_start(ap, n_ptrs);
11033                       while (ptr_no &lt; n_ptrs)
11034                             array[ptr_no++] = va_arg(ap, char *);
11035                       va_end(ap);
11036                       f2(n_ptrs, array);
11037              }
11038     Each call to f1 is required to have visible the definition of the function or a declaration such as
11039              void f1(int, ...);
11040
11041 7   EXAMPLE 2 The function f3 is similar, but saves the status of the variable argument list after the
11042     indicated number of arguments; after f2 has been called once with the whole list, the trailing part of the list
11043     is gathered again and passed to function f4.
11044              #include <a href="#7.16">&lt;stdarg.h&gt;</a>
11045              #define MAXARGS 31
11046              void f3(int n_ptrs, int f4_after, ...)
11047              {
11048                    va_list ap, ap_save;
11049                    char *array[MAXARGS];
11050                    int ptr_no = 0;
11051                    if (n_ptrs &gt; MAXARGS)
11052                          n_ptrs = MAXARGS;
11053                    va_start(ap, f4_after);
11054                    while (ptr_no &lt; n_ptrs) {
11055                          array[ptr_no++] = va_arg(ap, char *);
11056                          if (ptr_no == f4_after)
11057                                va_copy(ap_save, ap);
11058                    }
11059                    va_end(ap);
11060                    f2(n_ptrs, array);
11061                       // Now process the saved copy.
11062                       n_ptrs -= f4_after;
11063                       ptr_no = 0;
11064                       while (ptr_no &lt; n_ptrs)
11065                             array[ptr_no++] = va_arg(ap_save, char *);
11066                       va_end(ap_save);
11067                       f4(n_ptrs, array);
11068              }
11069
11070
11071
11072
11073 [<a name="#p270" href="p270">page 270</a>] (<a href="#Contents">Contents</a>)
11074
11075 <a name="7.17" href="#7.17"><b>    7.17 Atomics &lt;stdatomic.h&gt;</b></a>
11076 <a name="7.17.1" href="#7.17.1"><b>    7.17.1 Introduction</b></a>
11077 1   The header <a href="#7.17">&lt;stdatomic.h&gt;</a> defines several macros and declares several types and
11078     functions for performing atomic operations on data shared between threads.
11079 2   Implementations that define the macro __STDC_NO_THREADS__ need not provide
11080     this header nor support any of its facilities.
11081 3   The macros defined are the atomic lock-free macros
11082             ATOMIC_CHAR_LOCK_FREE
11083             ATOMIC_CHAR16_T_LOCK_FREE
11084             ATOMIC_CHAR32_T_LOCK_FREE
11085             ATOMIC_WCHAR_T_LOCK_FREE
11086             ATOMIC_SHORT_LOCK_FREE
11087             ATOMIC_INT_LOCK_FREE
11088             ATOMIC_LONG_LOCK_FREE
11089             ATOMIC_LLONG_LOCK_FREE
11090             ATOMIC_ADDRESS_LOCK_FREE
11091     which indicate the lock-free property of the corresponding atomic types (both signed and
11092     unsigned); and
11093             ATOMIC_FLAG_INIT
11094     which expands to an initializer for an object of type atomic_flag.
11095 4   The types include
11096               memory_order
11097     which is an enumerated type whose enumerators identify memory ordering constraints;
11098               atomic_flag
11099     which is a structure type representing a lock-free, primitive atomic flag;
11100               atomic_bool
11101     which is a structure type representing the atomic analog of the type _Bool;
11102               atomic_address
11103     which is a structure type representing the atomic analog of a pointer type; and several
11104     atomic analogs of integer types.
11105 5   In the following operation definitions:
11106     -- An A refers to one of the atomic types.
11107
11108
11109 [<a name="#p271" href="p271">page 271</a>] (<a href="#Contents">Contents</a>)
11110
11111         -- A C refers to its corresponding non-atomic type. The atomic_address atomic
11112           type corresponds to the void * non-atomic type.
11113         -- An M refers to the type of the other argument for arithmetic operations. For atomic
11114           integer types, M is C. For atomic address types, M is ptrdiff_t.
11115         -- The functions not ending in _explicit have the same semantics as the
11116           corresponding _explicit function with memory_order_seq_cst for the
11117           memory_order argument.
11118     6         NOTE Many operations are volatile-qualified. The ''volatile as device register'' semantics have not
11119               changed in the standard. This qualification means that volatility is preserved when applying these
11120               operations to volatile objects.
11121
11122 <a name="7.17.2" href="#7.17.2"><b>        7.17.2 Initialization</b></a>
11123 <a name="7.17.2.1" href="#7.17.2.1"><b>        7.17.2.1 The ATOMIC_VAR_INIT macro</b></a>
11124         Synopsis
11125 1                 #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11126                   #define ATOMIC_VAR_INIT(C value)
11127         Description
11128 2       The ATOMIC_VAR_INIT macro expands to a token sequence suitable for initializing an
11129         atomic object of a type that is initialization-compatible with value. An atomic object
11130         with automatic storage duration that is not explicitly initialized using
11131         ATOMIC_VAR_INIT is initially in an indeterminate state; however, the default (zero)
11132         initialization for objects with static or thread-local storage duration is guaranteed to
11133         produce a valid state.
11134 3       Concurrent access to the variable being initialized, even via an atomic operation,
11135         constitutes a data race.
11136 4       EXAMPLE
11137                   atomic_int guide = ATOMIC_VAR_INIT(42);
11138
11139 <a name="7.17.2.2" href="#7.17.2.2"><b>        7.17.2.2 The atomic_init generic function</b></a>
11140         Synopsis
11141 1                 #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11142                   void atomic_init(volatile A *obj, C value);
11143         Description
11144 2       The atomic_init generic function initializes the atomic object pointed to by obj to
11145         the value value, while also initializing any additional state that the implementation
11146         might need to carry for the atomic object.
11147
11148
11149
11150 [<a name="#p272" href="p272">page 272</a>] (<a href="#Contents">Contents</a>)
11151
11152 3   Although this function initializes an atomic object, it does not avoid data races;
11153     concurrent access to the variable being initialized, even via an atomic operation,
11154     constitutes a data race.
11155     Returns
11156 4   The atomic_init generic function returns no value.
11157 5   EXAMPLE
11158               atomic_int guide;
11159               atomic_init(&amp;guide, 42);
11160
11161 <a name="7.17.3" href="#7.17.3"><b>    7.17.3 Order and consistency</b></a>
11162 1   The enumerated type memory_order specifies the detailed regular (non-atomic)
11163     memory synchronization operations as defined in <a href="#5.1.2.4">5.1.2.4</a> and may provide for operation
11164     ordering. Its enumeration constants are as follows:
11165               memory_order_relaxed
11166               memory_order_consume
11167               memory_order_acquire
11168               memory_order_release
11169               memory_order_acq_rel
11170               memory_order_seq_cst
11171 2   For memory_order_relaxed, no operation orders memory.
11172 3   For       memory_order_release,       memory_order_acq_rel,             and
11173     memory_order_seq_cst, a store operation performs a release operation on the
11174     affected memory location.
11175 4   For       memory_order_acquire,       memory_order_acq_rel,             and
11176     memory_order_seq_cst, a load operation performs an acquire operation on the
11177     affected memory location.
11178 5   For memory_order_consume, a load operation performs a consume operation on the
11179     affected memory location.
11180 6   For memory_order_seq_cst, there shall be a single total order S on all operations,
11181     consistent with the ''happens before'' order and modification orders for all affected
11182     locations, such that each memory_order_seq_cst operation that loads a value
11183     observes either the last preceding modification according to this order S, or the result of
11184     an operation that is not memory_order_seq_cst.
11185 7   NOTE 1 Although it is not explicitly required that S include lock operations, it can always be extended to
11186     an order that does include lock and unlock operations, since the ordering between those is already included
11187     in the ''happens before'' ordering.
11188
11189 8   NOTE 2 Atomic operations specifying memory_order_relaxed are relaxed only with respect to
11190     memory ordering. Implementations must still guarantee that any given atomic access to a particular atomic
11191
11192 [<a name="#p273" href="p273">page 273</a>] (<a href="#Contents">Contents</a>)
11193
11194      object be indivisible with respect to all other atomic accesses to that object.
11195
11196 9    For an atomic operation B that reads the value of an atomic object M, if there is a
11197      memory_order_seq_cst fence X sequenced before B, then B observes either the
11198      last memory_order_seq_cst modification of M preceding X in the total order S or
11199      a later modification of M in its modification order.
11200 10   For atomic operations A and B on an atomic object M, where A modifies M and B takes
11201      its value, if there is a memory_order_seq_cst fence X such that A is sequenced
11202      before X and B follows X in S, then B observes either the effects of A or a later
11203      modification of M in its modification order.
11204 11   For atomic operations A and B on an atomic object M, where A modifies M and B takes
11205      its value, if there are memory_order_seq_cst fences X and Y such that A is
11206      sequenced before X, Y is sequenced before B, and X precedes Y in S, then B observes
11207      either the effects of A or a later modification of M in its modification order.
11208 12   Atomic read-modify-write operations shall always read the last value (in the modification
11209      order) stored before the write associated with the read-modify-write operation.
11210 13   An atomic store shall only store a value that has been computed from constants and
11211      program input values by a finite sequence of program evaluations, such that each
11212      evaluation observes the values of variables as computed by the last prior assignment in
11213      the sequence.247) The ordering of evaluations in this sequence shall be such that
11214      -- If an evaluation B observes a value computed by A in a different thread, then B does
11215        not happen before A.
11216      -- If an evaluation A is included in the sequence, then all evaluations that assign to the
11217        same variable and happen before A are also included.
11218 14   NOTE 3 The second requirement disallows ''out-of-thin-air'', or ''speculative'' stores of atomics when
11219      relaxed atomics are used. Since unordered operations are involved, evaluations may appear in this
11220      sequence out of thread order. For example, with x and y initially zero,
11221               // Thread 1:
11222               r1 = atomic_load_explicit(&amp;y, memory_order_relaxed);
11223               atomic_store_explicit(&amp;x, r1, memory_order_relaxed);
11224
11225               // Thread 2:
11226               r2 = atomic_load_explicit(&amp;x, memory_order_relaxed);
11227               atomic_store_explicit(&amp;y, 42, memory_order_relaxed);
11228      is allowed to produce r1 == 42 &amp;&amp; r2 == 42. The sequence of evaluations justifying this consists of:
11229
11230
11231
11232
11233      247) Among other implications, atomic variables shall not decay.
11234
11235 [<a name="#p274" href="p274">page 274</a>] (<a href="#Contents">Contents</a>)
11236
11237              atomic_store_explicit(&amp;y, 42,               memory_order_relaxed);
11238              r1 = atomic_load_explicit(&amp;y,               memory_order_relaxed);
11239              atomic_store_explicit(&amp;x, r1,               memory_order_relaxed);
11240              r2 = atomic_load_explicit(&amp;x,               memory_order_relaxed);
11241      On the other hand,
11242              // Thread 1:
11243              r1 = atomic_load_explicit(&amp;y, memory_order_relaxed);
11244              atomic_store_explicit(&amp;x, r1, memory_order_relaxed);
11245
11246              // Thread 2:
11247              r2 = atomic_load_explicit(&amp;x, memory_order_relaxed);
11248              atomic_store_explicit(&amp;y, r2, memory_order_relaxed);
11249      is not allowed to produce r1 == 42 &amp;&amp; r2 = 42, since there is no sequence of evaluations that results
11250      in the computation of 42. In the absence of ''relaxed'' operations and read-modify-write operations with
11251      weaker than memory_order_acq_rel ordering, the second requirement has no impact.
11252
11253      Recommended practice
11254 15   The requirements do not forbid r1 == 42 &amp;&amp; r2 == 42 in the following example,
11255      with x and y initially zero:
11256              // Thread 1:
11257              r1 = atomic_load_explicit(&amp;x, memory_order_relaxed);
11258              if (r1 == 42)
11259                   atomic_store_explicit(&amp;y, r1, memory_order_relaxed);
11260
11261              // Thread 2:
11262              r2 = atomic_load_explicit(&amp;y, memory_order_relaxed);
11263              if (r2 == 42)
11264                   atomic_store_explicit(&amp;x, 42, memory_order_relaxed);
11265      However, this is not useful behavior, and implementations should not allow it.
11266 16   Implementations should make atomic stores visible to atomic loads within a reasonable
11267      amount of time.
11268 <a name="7.17.3.1" href="#7.17.3.1"><b>     7.17.3.1 The kill_dependency macro</b></a>
11269      Synopsis
11270 1            #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11271              type kill_dependency(type y);
11272      Description
11273 2    The kill_dependency macro terminates a dependency chain; the argument does not
11274      carry a dependency to the return value.
11275
11276
11277
11278 [<a name="#p275" href="p275">page 275</a>] (<a href="#Contents">Contents</a>)
11279
11280     Returns
11281 3   The kill_dependency macro returns the value of y.
11282 <a name="7.17.4" href="#7.17.4"><b>    7.17.4 Fences</b></a>
11283 1   This subclause introduces synchronization primitives called fences. Fences can have
11284     acquire semantics, release semantics, or both. A fence with acquire semantics is called
11285     an acquire fence; a fence with release semantics is called a release fence.
11286 2   A release fence A synchronizes with an acquire fence B if there exist atomic operations
11287     X and Y , both operating on some atomic object M, such that A is sequenced before X, X
11288     modifies M, Y is sequenced before B, and Y reads the value written by X or a value
11289     written by any side effect in the hypothetical release sequence X would head if it were a
11290     release operation.
11291 3   A release fence A synchronizes with an atomic operation B that performs an acquire
11292     operation on an atomic object M if there exists an atomic operation X such that A is
11293     sequenced before X, X modifies M, and B reads the value written by X or a value written
11294     by any side effect in the hypothetical release sequence X would head if it were a release
11295     operation.
11296 4   An atomic operation A that is a release operation on an atomic object M synchronizes
11297     with an acquire fence B if there exists some atomic operation X on M such that X is
11298     sequenced before B and reads the value written by A or a value written by any side effect
11299     in the release sequence headed by A.
11300 <a name="7.17.4.1" href="#7.17.4.1"><b>    7.17.4.1 The atomic_thread_fence function</b></a>
11301     Synopsis
11302 1          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11303            void atomic_thread_fence(memory_order order);
11304     Description
11305 2   Depending on the value of order, this operation:
11306     -- has no effects, if order == memory_order_relaxed;
11307     -- is an acquire fence, if order == memory_order_acquire or order ==
11308       memory_order_consume;
11309     -- is a release fence, if order == memory_order_release;
11310     -- is both an acquire fence              and   a    release   fence,   if   order      ==
11311       memory_order_acq_rel;
11312     -- is a sequentially consistent acquire and release fence, if order                    ==
11313       memory_order_seq_cst.
11314
11315
11316 [<a name="#p276" href="p276">page 276</a>] (<a href="#Contents">Contents</a>)
11317
11318     Returns
11319 3   The atomic_thread_fence function returns no value.
11320 <a name="7.17.4.2" href="#7.17.4.2"><b>    7.17.4.2 The atomic_signal_fence function</b></a>
11321     Synopsis
11322 1           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11323             void atomic_signal_fence(memory_order order);
11324     Description
11325 2   Equivalent to atomic_thread_fence(order), except that ''synchronizes with''
11326     relationships are established only between a thread and a signal handler executed in the
11327     same thread.
11328 3   NOTE 1 The atomic_signal_fence function can be used to specify the order in which actions
11329     performed by the thread become visible to the signal handler.
11330
11331 4   NOTE 2 Compiler optimizations and reorderings of loads and stores are inhibited in the same way as with
11332     atomic_thread_fence, but the hardware fence instructions that atomic_thread_fence would
11333     have inserted are not emitted.
11334
11335     Returns
11336 5   The atomic_signal_fence function returns no value.
11337 <a name="7.17.5" href="#7.17.5"><b>    7.17.5 Lock-free property</b></a>
11338 1   The atomic lock-free macros indicate the lock-free property of integer and address atomic
11339     types. A value of 0 indicates that the type is never lock-free; a value of 1 indicates that
11340     the type is sometimes lock-free; a value of 2 indicates that the type is always lock-free.
11341 2   NOTE Operations that are lock-free should also be address-free. That is, atomic operations on the same
11342     memory location via two different addresses will communicate atomically. The implementation should not
11343     depend on any per-process state. This restriction enables communication via memory mapped into a
11344     process more than once and memory shared between two processes.
11345
11346 <a name="7.17.5.1" href="#7.17.5.1"><b>    7.17.5.1 The atomic_is_lock_free generic function</b></a>
11347     Synopsis
11348 1           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11349             _Bool atomic_is_lock_free(atomic_type const volatile *obj);
11350     Description
11351 2   The atomic_is_lock_free generic function indicates whether or not the object
11352     pointed to by obj is lock-free. atomic_type can be any atomic type.
11353     Returns
11354 3   The atomic_is_lock_free generic function returns nonzero (true) if and only if the
11355     object's operations are lock-free. The result of a lock-free query on one object cannot be
11356
11357 [<a name="#p277" href="p277">page 277</a>] (<a href="#Contents">Contents</a>)
11358
11359     inferred from the result of a lock-free query on another object.
11360 <a name="7.17.6" href="#7.17.6"><b>    7.17.6 Atomic integer and address types</b></a>
11361 1   For each line in the following table, the atomic type name is declared as the
11362     corresponding direct type.
11363
11364
11365
11366
11367 [<a name="#p278" href="p278">page 278</a>] (<a href="#Contents">Contents</a>)
11368
11369
11370
11371                 Atomic type name                             Direct type
11372             atomic_char                          _Atomic    char
11373             atomic_schar                         _Atomic    signed char
11374             atomic_uchar                         _Atomic    unsigned char
11375             atomic_short                         _Atomic    short
11376             atomic_ushort                        _Atomic    unsigned short
11377             atomic_int                           _Atomic    int
11378             atomic_uint                          _Atomic    unsigned int
11379             atomic_long                          _Atomic    long
11380             atomic_ulong                         _Atomic    unsigned long
11381             atomic_llong                         _Atomic    long long
11382             atomic_ullong                        _Atomic    unsigned long long
11383             atomic_char16_t                      _Atomic    char16_t
11384             atomic_char32_t                      _Atomic    char32_t
11385             atomic_wchar_t                       _Atomic    wchar_t
11386             atomic_int_least8_t                  _Atomic    int_least8_t
11387             atomic_uint_least8_t                 _Atomic    uint_least8_t
11388             atomic_int_least16_t                 _Atomic    int_least16_t
11389             atomic_uint_least16_t                _Atomic    uint_least16_t
11390             atomic_int_least32_t                 _Atomic    int_least32_t
11391             atomic_uint_least32_t                _Atomic    uint_least32_t
11392             atomic_int_least64_t                 _Atomic    int_least64_t
11393             atomic_uint_least64_t                _Atomic    uint_least64_t
11394             atomic_int_fast8_t                   _Atomic    int_fast8_t
11395             atomic_uint_fast8_t                  _Atomic    uint_fast8_t
11396             atomic_int_fast16_t                  _Atomic    int_fast16_t
11397             atomic_uint_fast16_t                 _Atomic    uint_fast16_t
11398             atomic_int_fast32_t                  _Atomic    int_fast32_t
11399             atomic_uint_fast32_t                 _Atomic    uint_fast32_t
11400             atomic_int_fast64_t                  _Atomic    int_fast64_t
11401             atomic_uint_fast64_t                 _Atomic    uint_fast64_t
11402             atomic_intptr_t                      _Atomic    intptr_t
11403             atomic_uintptr_t                     _Atomic    uintptr_t
11404             atomic_size_t                        _Atomic    size_t
11405             atomic_ptrdiff_t                     _Atomic    ptrdiff_t
11406             atomic_intmax_t                      _Atomic    intmax_t
11407             atomic_uintmax_t                     _Atomic    uintmax_t
11408 2   The semantics of the operations on these types are defined in <a href="#7.17.7">7.17.7</a>.
11409
11410
11411
11412 [<a name="#p279" href="p279">page 279</a>] (<a href="#Contents">Contents</a>)
11413
11414 3   The atomic_bool type provides an atomic boolean.
11415 4   The atomic_address type provides atomic void * operations. The unit of
11416     addition/subtraction shall be one byte.
11417 5   NOTE The representation of atomic integer and address types need not have the same size as their
11418     corresponding regular types. They should have the same size whenever possible, as it eases effort required
11419     to port existing code.
11420
11421 <a name="7.17.7" href="#7.17.7"><b>    7.17.7 Operations on atomic types</b></a>
11422 1   There are only a few kinds of operations on atomic types, though there are many
11423     instances of those kinds. This subclause specifies each general kind.
11424 <a name="7.17.7.1" href="#7.17.7.1"><b>    7.17.7.1 The atomic_store generic functions</b></a>
11425     Synopsis
11426 1           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11427             void atomic_store(volatile A *object, C desired);
11428             void atomic_store_explicit(volatile A *object,
11429                  C desired, memory_order order);
11430     Description
11431 2   The      order      argument    shall    not    be    memory_order_acquire,
11432     memory_order_consume, nor memory_order_acq_rel. Atomically replace the
11433     value pointed to by object with the value of desired. Memory is affected according
11434     to the value of order.
11435     Returns
11436 3   The atomic_store generic functions return no value.
11437 <a name="7.17.7.2" href="#7.17.7.2"><b>    7.17.7.2 The atomic_load generic functions</b></a>
11438     Synopsis
11439 1           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11440             C atomic_load(volatile A *object);
11441             C atomic_load_explicit(volatile A *object,
11442                  memory_order order);
11443     Description
11444 2   The order argument shall not be memory_order_release nor
11445     memory_order_acq_rel. Memory is affected according to the value of order.
11446     Returns
11447     Atomically returns the value pointed to by object.
11448
11449
11450
11451 [<a name="#p280" href="p280">page 280</a>] (<a href="#Contents">Contents</a>)
11452
11453 <a name="7.17.7.3" href="#7.17.7.3"><b>    7.17.7.3 The atomic_exchange generic functions</b></a>
11454     Synopsis
11455 1            #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11456              C atomic_exchange(volatile A *object, C desired);
11457              C atomic_exchange_explicit(volatile A *object,
11458                   C desired, memory_order order);
11459     Description
11460 2   Atomically replace the value pointed to by object with desired. Memory is affected
11461     according to the value of order. These operations are read-modify-write operations
11462     (<a href="#5.1.2.4">5.1.2.4</a>).
11463     Returns
11464 3   Atomically returns the value pointed to by object immediately before the effects.
11465 <a name="7.17.7.4" href="#7.17.7.4"><b>    7.17.7.4 The atomic_compare_exchange generic functions</b></a>
11466     Synopsis
11467 1            #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11468              _Bool atomic_compare_exchange_strong(volatile A *object,
11469                   C *expected, C desired);
11470              _Bool atomic_compare_exchange_strong_explicit(
11471                   volatile A *object, C *expected, C desired,
11472                   memory_order success, memory_order failure);
11473              _Bool atomic_compare_exchange_weak(volatile A *object,
11474                   C *expected, C desired);
11475              _Bool atomic_compare_exchange_weak_explicit(
11476                   volatile A *object, C *expected, C desired,
11477                   memory_order success, memory_order failure);
11478     Description
11479 2   The failure argument shall not be memory_order_release nor
11480     memory_order_acq_rel. The failure argument shall be no stronger than the
11481     success argument. Atomically, compares the value pointed to by object for equality
11482     with that in expected, and if true, replaces the value pointed to by object with
11483     desired, and if false, updates the value in expected with the value pointed to by
11484     object. Further, if the comparison is true, memory is affected according to the value of
11485     success, and if the comparison is false, memory is affected according to the value of
11486     failure. These operations are atomic read-modify-write operations (<a href="#5.1.2.4">5.1.2.4</a>).
11487 3   NOTE 1    The effect of the compare-and-exchange operations is
11488
11489
11490
11491
11492 [<a name="#p281" href="p281">page 281</a>] (<a href="#Contents">Contents</a>)
11493
11494              if (*object == *expected)
11495                    *object = desired;
11496              else
11497                    *expected = *object;
11498
11499 4   The weak compare-and-exchange operations may fail spuriously, that is, return zero
11500     while leaving the value pointed to by expected unchanged.
11501 5   NOTE 2 This spurious failure enables implementation of compare-and-exchange on a broader class of
11502     machines, e.g. load-locked store-conditional machines.
11503
11504 6   EXAMPLE         A consequence of spurious failure is that nearly all uses of weak compare-and-exchange will
11505     be in a loop.
11506              exp = atomic_load(&amp;cur);
11507              do {
11508                    des = function(exp);
11509              } while (!atomic_compare_exchange_weak(&amp;cur, &amp;exp, des));
11510     When a compare-and-exchange is in a loop, the weak version will yield better performance on some
11511     platforms. When a weak compare-and-exchange would require a loop and a strong one would not, the
11512     strong one is preferable.
11513
11514     Returns
11515 7   The result of the comparison.
11516 <a name="7.17.7.5" href="#7.17.7.5"><b>    7.17.7.5 The atomic_fetch and modify generic functions</b></a>
11517 1   The following operations perform arithmetic and bitwise computations. All of these
11518     operations are applicable to an object of any atomic integer type. Only addition and
11519     subtraction are applicable to atomic_address. None of these operations is applicable
11520     to atomic_bool. The key, operator, and computation correspondence is:
11521
11522
11523      key            op          computation
11524      add            +       addition
11525      sub            -       subtraction
11526      or             |       bitwise inclusive or
11527      xor            ^       bitwise exclusive or
11528      and            &amp;       bitwise and
11529     Synopsis
11530 2            #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11531              C atomic_fetch_key(volatile A *object, M operand);
11532              C atomic_fetch_key_explicit(volatile A *object,
11533                   M operand, memory_order order);
11534     Description
11535 3   Atomically replaces the value pointed to by object with the result of the computation
11536     applied to the value pointed to by object and the given operand. Memory is affected
11537 [<a name="#p282" href="p282">page 282</a>] (<a href="#Contents">Contents</a>)
11538
11539     according to the value of order. These operations are atomic read-modify-write
11540     operations (<a href="#5.1.2.4">5.1.2.4</a>). For signed integer types, arithmetic is defined to use two's-
11541     complement representation. There are no undefined results. For address types, the result
11542     may be an undefined address, but the operations otherwise have no undefined behavior.
11543     Returns
11544 4   Atomically, the value pointed to by object immediately before the effects.
11545 5   NOTE The operation of the atomic_fetch and modify generic functions are nearly equivalent to the
11546     operation of the corresponding op= compound assignment operators. The only differences are that the
11547     compound assignment operators are not guaranteed to operate atomically, and the value yielded by a
11548     compound assignment operator is the updated value of the object, whereas the value returned by the
11549     atomic_fetch and modify generic functions is the previous value of the atomic object.
11550
11551 <a name="7.17.8" href="#7.17.8"><b>    7.17.8 Atomic flag type and operations</b></a>
11552 1   The atomic_flag type provides the classic test-and-set functionality. It has two
11553     states, set and clear.
11554 2   Operations on an object of type atomic_flag shall be lock free.
11555 3   NOTE Hence the operations should also be address-free. No other type requires lock-free operations, so
11556     the atomic_flag type is the minimum hardware-implemented type needed to conform to this
11557     International standard. The remaining types can be emulated with atomic_flag, though with less than
11558     ideal properties.
11559
11560 4   The macro ATOMIC_FLAG_INIT may be used to initialize an atomic_flag to the
11561     clear state. An atomic_flag that is not explicitly initialized with
11562     ATOMIC_FLAG_INIT is initially in an indeterminate state.
11563 5   EXAMPLE
11564             atomic_flag guard = ATOMIC_FLAG_INIT;
11565
11566 <a name="7.17.8.1" href="#7.17.8.1"><b>    7.17.8.1 The atomic_flag_test_and_set functions</b></a>
11567     Synopsis
11568 1           #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11569             bool atomic_flag_test_and_set(
11570                  volatile atomic_flag *object);
11571             bool atomic_flag_test_and_set_explicit(
11572                  volatile atomic_flag *object, memory_order order);
11573     Description
11574 2   Atomically sets the value pointed to by object to true. Memory is affected according
11575     to the value of order. These operations are atomic read-modify-write operations
11576     (<a href="#5.1.2.4">5.1.2.4</a>).
11577
11578
11579
11580
11581 [<a name="#p283" href="p283">page 283</a>] (<a href="#Contents">Contents</a>)
11582
11583     Returns
11584 3   Atomically, the value of the object immediately before the effects.
11585 <a name="7.17.8.2" href="#7.17.8.2"><b>    7.17.8.2 The atomic_flag_clear functions</b></a>
11586     Synopsis
11587 1          #include <a href="#7.17">&lt;stdatomic.h&gt;</a>
11588            void atomic_flag_clear(volatile atomic_flag *object);
11589            void atomic_flag_clear_explicit(
11590                 volatile atomic_flag *object, memory_order order);
11591     Description
11592 2   The order argument shall not be memory_order_acquire nor
11593     memory_order_acq_rel. Atomically sets the value pointed to by object to false.
11594     Memory is affected according to the value of order.
11595     Returns
11596 3   The atomic_flag_clear functions return no value.
11597
11598
11599
11600
11601 [<a name="#p284" href="p284">page 284</a>] (<a href="#Contents">Contents</a>)
11602
11603 <a name="7.18" href="#7.18"><b>    7.18 Boolean type and values &lt;stdbool.h&gt;</b></a>
11604 1   The header <a href="#7.18">&lt;stdbool.h&gt;</a> defines four macros.
11605 2   The macro
11606              bool
11607     expands to _Bool.
11608 3   The remaining three macros are suitable for use in #if preprocessing directives. They
11609     are
11610              true
11611     which expands to the integer constant 1,
11612              false
11613     which expands to the integer constant 0, and
11614              __bool_true_false_are_defined
11615     which expands to the integer constant 1.
11616 4   Notwithstanding the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and perhaps then
11617     redefine the macros bool, true, and false.248)
11618
11619
11620
11621
11622     248) See ''future library directions'' (<a href="#7.30.7">7.30.7</a>).
11623
11624 [<a name="#p285" href="p285">page 285</a>] (<a href="#Contents">Contents</a>)
11625
11626 <a name="7.19" href="#7.19"><b>    7.19 Common definitions &lt;stddef.h&gt;</b></a>
11627 1   The header <a href="#7.19">&lt;stddef.h&gt;</a> defines the following macros and declares the following types.
11628     Some are also defined in other headers, as noted in their respective subclauses.
11629 2   The types are
11630            ptrdiff_t
11631     which is the signed integer type of the result of subtracting two pointers;
11632            size_t
11633     which is the unsigned integer type of the result of the sizeof operator;
11634            max_align_t
11635     which is an object type whose alignment is as great as is supported by the implementation
11636     in all contexts; and
11637            wchar_t
11638     which is an integer type whose range of values can represent distinct codes for all
11639     members of the largest extended character set specified among the supported locales; the
11640     null character shall have the code value zero. Each member of the basic character set
11641     shall have a code value equal to its value when used as the lone character in an integer
11642     character      constant     if     an      implementation      does      not      define
11643     __STDC_MB_MIGHT_NEQ_WC__.
11644 3   The macros are
11645            NULL
11646     which expands to an implementation-defined null pointer constant; and
11647            offsetof(type, member-designator)
11648     which expands to an integer constant expression that has type size_t, the value of
11649     which is the offset in bytes, to the structure member (designated by member-designator),
11650     from the beginning of its structure (designated by type). The type and member designator
11651     shall be such that given
11652            static type t;
11653     then the expression &amp;(t.member-designator) evaluates to an address constant. (If the
11654     specified member is a bit-field, the behavior is undefined.)
11655     Recommended practice
11656 4   The types used for size_t and ptrdiff_t should not have an integer conversion rank
11657     greater than that of signed long int unless the implementation supports objects
11658     large enough to make this necessary.
11659
11660 [<a name="#p286" href="p286">page 286</a>] (<a href="#Contents">Contents</a>)
11661
11662 Forward references: localization (<a href="#7.11">7.11</a>).
11663
11664
11665
11666
11667 [<a name="#p287" href="p287">page 287</a>] (<a href="#Contents">Contents</a>)
11668
11669 <a name="7.20" href="#7.20"><b>    7.20 Integer types &lt;stdint.h&gt;</b></a>
11670 1   The header <a href="#7.20">&lt;stdint.h&gt;</a> declares sets of integer types having specified widths, and
11671     defines corresponding sets of macros.249) It also defines macros that specify limits of
11672     integer types corresponding to types defined in other standard headers.
11673 2   Types are defined in the following categories:
11674     -- integer types having certain exact widths;
11675     -- integer types having at least certain specified widths;
11676     -- fastest integer types having at least certain specified widths;
11677     -- integer types wide enough to hold pointers to objects;
11678     -- integer types having greatest width.
11679     (Some of these types may denote the same type.)
11680 3   Corresponding macros specify limits of the declared types and construct suitable
11681     constants.
11682 4   For each type described herein that the implementation provides,250) <a href="#7.20">&lt;stdint.h&gt;</a> shall
11683     declare that typedef name and define the associated macros. Conversely, for each type
11684     described herein that the implementation does not provide, <a href="#7.20">&lt;stdint.h&gt;</a> shall not
11685     declare that typedef name nor shall it define the associated macros. An implementation
11686     shall provide those types described as ''required'', but need not provide any of the others
11687     (described as ''optional'').
11688 <a name="7.20.1" href="#7.20.1"><b>    7.20.1 Integer types</b></a>
11689 1   When typedef names differing only in the absence or presence of the initial u are defined,
11690     they shall denote corresponding signed and unsigned types as described in <a href="#6.2.5">6.2.5</a>; an
11691     implementation providing one of these corresponding types shall also provide the other.
11692 2   In the following descriptions, the symbol N represents an unsigned decimal integer with
11693     no leading zeros (e.g., 8 or 24, but not 04 or 048).
11694
11695
11696
11697
11698     249) See ''future library directions'' (<a href="#7.30.8">7.30.8</a>).
11699     250) Some of these types may denote implementation-defined extended integer types.
11700
11701 [<a name="#p288" href="p288">page 288</a>] (<a href="#Contents">Contents</a>)
11702
11703 <a name="7.20.1.1" href="#7.20.1.1"><b>    7.20.1.1 Exact-width integer types</b></a>
11704 1   The typedef name intN_t designates a signed integer type with width N , no padding
11705     bits, and a two's complement representation. Thus, int8_t denotes such a signed
11706     integer type with a width of exactly 8 bits.
11707 2   The typedef name uintN_t designates an unsigned integer type with width N and no
11708     padding bits. Thus, uint24_t denotes such an unsigned integer type with a width of
11709     exactly 24 bits.
11710 3   These types are optional. However, if an implementation provides integer types with
11711     widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a
11712     two's complement representation, it shall define the corresponding typedef names.
11713 <a name="7.20.1.2" href="#7.20.1.2"><b>    7.20.1.2 Minimum-width integer types</b></a>
11714 1   The typedef name int_leastN_t designates a signed integer type with a width of at
11715     least N , such that no signed integer type with lesser size has at least the specified width.
11716     Thus, int_least32_t denotes a signed integer type with a width of at least 32 bits.
11717 2   The typedef name uint_leastN_t designates an unsigned integer type with a width
11718     of at least N , such that no unsigned integer type with lesser size has at least the specified
11719     width. Thus, uint_least16_t denotes an unsigned integer type with a width of at
11720     least 16 bits.
11721 3   The following types are required:
11722              int_least8_t                                      uint_least8_t
11723              int_least16_t                                     uint_least16_t
11724              int_least32_t                                     uint_least32_t
11725              int_least64_t                                     uint_least64_t
11726     All other types of this form are optional.
11727 <a name="7.20.1.3" href="#7.20.1.3"><b>    7.20.1.3 Fastest minimum-width integer types</b></a>
11728 1   Each of the following types designates an integer type that is usually fastest251) to operate
11729     with among all integer types that have at least the specified width.
11730 2   The typedef name int_fastN_t designates the fastest signed integer type with a width
11731     of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer
11732     type with a width of at least N .
11733
11734
11735
11736
11737     251) The designated type is not guaranteed to be fastest for all purposes; if the implementation has no clear
11738          grounds for choosing one type over another, it will simply pick some integer type satisfying the
11739          signedness and width requirements.
11740
11741 [<a name="#p289" href="p289">page 289</a>] (<a href="#Contents">Contents</a>)
11742
11743 3   The following types are required:
11744            int_fast8_t                                     uint_fast8_t
11745            int_fast16_t                                    uint_fast16_t
11746            int_fast32_t                                    uint_fast32_t
11747            int_fast64_t                                    uint_fast64_t
11748     All other types of this form are optional.
11749 <a name="7.20.1.4" href="#7.20.1.4"><b>    7.20.1.4 Integer types capable of holding object pointers</b></a>
11750 1   The following type designates a signed integer type with the property that any valid
11751     pointer to void can be converted to this type, then converted back to pointer to void,
11752     and the result will compare equal to the original pointer:
11753            intptr_t
11754     The following type designates an unsigned integer type with the property that any valid
11755     pointer to void can be converted to this type, then converted back to pointer to void,
11756     and the result will compare equal to the original pointer:
11757            uintptr_t
11758     These types are optional.
11759 <a name="7.20.1.5" href="#7.20.1.5"><b>    7.20.1.5 Greatest-width integer types</b></a>
11760 1   The following type designates a signed integer type capable of representing any value of
11761     any signed integer type:
11762            intmax_t
11763     The following type designates an unsigned integer type capable of representing any value
11764     of any unsigned integer type:
11765            uintmax_t
11766     These types are required.
11767 <a name="7.20.2" href="#7.20.2"><b>    7.20.2 Limits of specified-width integer types</b></a>
11768 1   The following object-like macros specify the minimum and maximum limits of the types
11769     declared in <a href="#7.20">&lt;stdint.h&gt;</a>. Each macro name corresponds to a similar type name in
11770 <a name="7.20.1" href="#7.20.1"><b>    7.20.1.</b></a>
11771 2   Each instance of any defined macro shall be replaced by a constant expression suitable
11772     for use in #if preprocessing directives, and this expression shall have the same type as
11773     would an expression that is an object of the corresponding type converted according to
11774     the integer promotions. Its implementation-defined value shall be equal to or greater in
11775     magnitude (absolute value) than the corresponding value given below, with the same sign,
11776     except where stated to be exactly the given value.
11777
11778 [<a name="#p290" href="p290">page 290</a>] (<a href="#Contents">Contents</a>)
11779
11780 <a name="7.20.2.1" href="#7.20.2.1"><b>    7.20.2.1 Limits of exact-width integer types</b></a>
11781 1   -- minimum values of exact-width signed integer types
11782        INTN_MIN                                     exactly -(2 N -1 )
11783     -- maximum values of exact-width signed integer types
11784        INTN_MAX                                     exactly 2 N -1 - 1
11785     -- maximum values of exact-width unsigned integer types
11786        UINTN_MAX                                    exactly 2 N - 1
11787 <a name="7.20.2.2" href="#7.20.2.2"><b>    7.20.2.2 Limits of minimum-width integer types</b></a>
11788 1   -- minimum values of minimum-width signed integer types
11789        INT_LEASTN_MIN                                       -(2 N -1 - 1)
11790     -- maximum values of minimum-width signed integer types
11791        INT_LEASTN_MAX                                       2 N -1 - 1
11792     -- maximum values of minimum-width unsigned integer types
11793        UINT_LEASTN_MAX                                      2N - 1
11794 <a name="7.20.2.3" href="#7.20.2.3"><b>    7.20.2.3 Limits of fastest minimum-width integer types</b></a>
11795 1   -- minimum values of fastest minimum-width signed integer types
11796        INT_FASTN_MIN                                        -(2 N -1 - 1)
11797     -- maximum values of fastest minimum-width signed integer types
11798        INT_FASTN_MAX                                        2 N -1 - 1
11799     -- maximum values of fastest minimum-width unsigned integer types
11800        UINT_FASTN_MAX                                       2N - 1
11801 <a name="7.20.2.4" href="#7.20.2.4"><b>    7.20.2.4 Limits of integer types capable of holding object pointers</b></a>
11802 1   -- minimum value of pointer-holding signed integer type
11803        INTPTR_MIN                                           -(215 - 1)
11804     -- maximum value of pointer-holding signed integer type
11805        INTPTR_MAX                                           215 - 1
11806     -- maximum value of pointer-holding unsigned integer type
11807        UINTPTR_MAX                                          216 - 1
11808
11809
11810
11811 [<a name="#p291" href="p291">page 291</a>] (<a href="#Contents">Contents</a>)
11812
11813 <a name="7.20.2.5" href="#7.20.2.5"><b>    7.20.2.5 Limits of greatest-width integer types</b></a>
11814 1   -- minimum value of greatest-width signed integer type
11815           INTMAX_MIN                                                  -(263 - 1)
11816     -- maximum value of greatest-width signed integer type
11817         INTMAX_MAX                                                    263 - 1
11818     -- maximum value of greatest-width unsigned integer type
11819         UINTMAX_MAX                                                   264 - 1
11820 <a name="7.20.3" href="#7.20.3"><b>    7.20.3 Limits of other integer types</b></a>
11821 1   The following object-like macros specify the minimum and maximum limits of integer
11822     types corresponding to types defined in other standard headers.
11823 2   Each instance of these macros shall be replaced by a constant expression suitable for use
11824     in #if preprocessing directives, and this expression shall have the same type as would an
11825     expression that is an object of the corresponding type converted according to the integer
11826     promotions. Its implementation-defined value shall be equal to or greater in magnitude
11827     (absolute value) than the corresponding value given below, with the same sign. An
11828     implementation shall define only the macros corresponding to those typedef names it
11829     actually provides.252)
11830     -- limits of ptrdiff_t
11831         PTRDIFF_MIN                                                 -65535
11832         PTRDIFF_MAX                                                 +65535
11833     -- limits of sig_atomic_t
11834         SIG_ATOMIC_MIN                                              see below
11835         SIG_ATOMIC_MAX                                              see below
11836     -- limit of size_t
11837         SIZE_MAX                                                      65535
11838     -- limits of wchar_t
11839         WCHAR_MIN                                                   see below
11840         WCHAR_MAX                                                   see below
11841     -- limits of wint_t
11842
11843
11844
11845
11846     252) A freestanding implementation need not provide all of these types.
11847
11848 [<a name="#p292" href="p292">page 292</a>] (<a href="#Contents">Contents</a>)
11849
11850         WINT_MIN                                              see below
11851         WINT_MAX                                              see below
11852 3   If sig_atomic_t (see <a href="#7.14">7.14</a>) is defined as a signed integer type, the value of
11853     SIG_ATOMIC_MIN shall be no greater than -127 and the value of SIG_ATOMIC_MAX
11854     shall be no less than 127; otherwise, sig_atomic_t is defined as an unsigned integer
11855     type, and the value of SIG_ATOMIC_MIN shall be 0 and the value of
11856     SIG_ATOMIC_MAX shall be no less than 255.
11857 4   If wchar_t (see <a href="#7.19">7.19</a>) is defined as a signed integer type, the value of WCHAR_MIN
11858     shall be no greater than -127 and the value of WCHAR_MAX shall be no less than 127;
11859     otherwise, wchar_t is defined as an unsigned integer type, and the value of
11860     WCHAR_MIN shall be 0 and the value of WCHAR_MAX shall be no less than 255.253)
11861 5   If wint_t (see <a href="#7.28">7.28</a>) is defined as a signed integer type, the value of WINT_MIN shall
11862     be no greater than -32767 and the value of WINT_MAX shall be no less than 32767;
11863     otherwise, wint_t is defined as an unsigned integer type, and the value of WINT_MIN
11864     shall be 0 and the value of WINT_MAX shall be no less than 65535.
11865 <a name="7.20.4" href="#7.20.4"><b>    7.20.4 Macros for integer constants</b></a>
11866 1   The following function-like macros expand to integer constants suitable for initializing
11867     objects that have integer types corresponding to types defined in <a href="#7.20">&lt;stdint.h&gt;</a>. Each
11868     macro name corresponds to a similar type name in <a href="#7.20.1.2">7.20.1.2</a> or <a href="#7.20.1.5">7.20.1.5</a>.
11869 2   The argument in any instance of these macros shall be an unsuffixed integer constant (as
11870     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.
11871 3   Each invocation of one of these macros shall expand to an integer constant expression
11872     suitable for use in #if preprocessing directives. The type of the expression shall have
11873     the same type as would an expression of the corresponding type converted according to
11874     the integer promotions. The value of the expression shall be that of the argument.
11875 <a name="7.20.4.1" href="#7.20.4.1"><b>    7.20.4.1 Macros for minimum-width integer constants</b></a>
11876 1   The macro INTN_C(value) shall expand to an integer constant expression
11877     corresponding to the type int_leastN_t. The macro UINTN_C(value) shall expand
11878     to an integer constant expression corresponding to the type uint_leastN_t. For
11879     example, if uint_least64_t is a name for the type unsigned long long int,
11880     then UINT64_C(0x123) might expand to the integer constant 0x123ULL.
11881
11882
11883
11884
11885     253) The values WCHAR_MIN and WCHAR_MAX do not necessarily correspond to members of the extended
11886          character set.
11887
11888 [<a name="#p293" href="p293">page 293</a>] (<a href="#Contents">Contents</a>)
11889
11890 <a name="7.20.4.2" href="#7.20.4.2"><b>    7.20.4.2 Macros for greatest-width integer constants</b></a>
11891 1   The following macro expands to an integer constant expression having the value specified
11892     by its argument and the type intmax_t:
11893            INTMAX_C(value)
11894     The following macro expands to an integer constant expression having the value specified
11895     by its argument and the type uintmax_t:
11896            UINTMAX_C(value)
11897
11898
11899
11900
11901 [<a name="#p294" href="p294">page 294</a>] (<a href="#Contents">Contents</a>)
11902
11903 <a name="7.21" href="#7.21"><b>    7.21 Input/output &lt;stdio.h&gt;</b></a>
11904 <a name="7.21.1" href="#7.21.1"><b>    7.21.1 Introduction</b></a>
11905 1   The header <a href="#7.21">&lt;stdio.h&gt;</a> defines several macros, and declares three types and many
11906     functions for performing input and output.
11907 2   The types declared are size_t (described in <a href="#7.19">7.19</a>);
11908             FILE
11909     which is an object type capable of recording all the information needed to control a
11910     stream, including its file position indicator, a pointer to its associated buffer (if any), an
11911     error indicator that records whether a read/write error has occurred, and an end-of-file
11912     indicator that records whether the end of the file has been reached; and
11913             fpos_t
11914     which is a complete object type other than an array type capable of recording all the
11915     information needed to specify uniquely every position within a file.
11916 3   The macros are NULL (described in <a href="#7.19">7.19</a>);
11917             _IOFBF
11918             _IOLBF
11919             _IONBF
11920     which expand to integer constant expressions with distinct values, suitable for use as the
11921     third argument to the setvbuf function;
11922             BUFSIZ
11923     which expands to an integer constant expression that is the size of the buffer used by the
11924     setbuf function;
11925             EOF
11926     which expands to an integer constant expression, with type int and a negative value, that
11927     is returned by several functions to indicate end-of-file, that is, no more input from a
11928     stream;
11929               FOPEN_MAX
11930     which expands to an integer constant expression that is the minimum number of files that
11931     the implementation guarantees can be open simultaneously;
11932               FILENAME_MAX
11933     which expands to an integer constant expression that is the size needed for an array of
11934     char large enough to hold the longest file name string that the implementation
11935
11936
11937
11938 [<a name="#p295" href="p295">page 295</a>] (<a href="#Contents">Contents</a>)
11939
11940     guarantees can be opened;254)
11941             L_tmpnam
11942     which expands to an integer constant expression that is the size needed for an array of
11943     char large enough to hold a temporary file name string generated by the tmpnam
11944     function;
11945             SEEK_CUR
11946             SEEK_END
11947             SEEK_SET
11948     which expand to integer constant expressions with distinct values, suitable for use as the
11949     third argument to the fseek function;
11950             TMP_MAX
11951     which expands to an integer constant expression that is the minimum number of unique
11952     file names that can be generated by the tmpnam function;
11953             stderr
11954             stdin
11955             stdout
11956     which are expressions of type ''pointer to FILE'' that point to the FILE objects
11957     associated, respectively, with the standard error, input, and output streams.
11958 4   The header <a href="#7.28">&lt;wchar.h&gt;</a> declares a number of functions useful for wide character input
11959     and output. The wide character input/output functions described in that subclause
11960     provide operations analogous to most of those described here, except that the
11961     fundamental units internal to the program are wide characters. The external
11962     representation (in the file) is a sequence of ''generalized'' multibyte characters, as
11963     described further in <a href="#7.21.3">7.21.3</a>.
11964 5   The input/output functions are given the following collective terms:
11965     -- The wide character input functions -- those functions described in <a href="#7.28">7.28</a> that perform
11966       input into wide characters and wide strings: fgetwc, fgetws, getwc, getwchar,
11967       fwscanf, wscanf, vfwscanf, and vwscanf.
11968     -- The wide character output functions -- those functions described in <a href="#7.28">7.28</a> that perform
11969       output from wide characters and wide strings: fputwc, fputws, putwc,
11970       putwchar, fwprintf, wprintf, vfwprintf, and vwprintf.
11971
11972
11973     254) If the implementation imposes no practical limit on the length of file name strings, the value of
11974          FILENAME_MAX should instead be the recommended size of an array intended to hold a file name
11975          string. Of course, file name string contents are subject to other system-specific constraints; therefore
11976          all possible strings of length FILENAME_MAX cannot be expected to be opened successfully.
11977
11978 [<a name="#p296" href="p296">page 296</a>] (<a href="#Contents">Contents</a>)
11979
11980     -- The wide character input/output functions -- the union of the ungetwc function, the
11981       wide character input functions, and the wide character output functions.
11982     -- The byte input/output functions -- those functions described in this subclause that
11983       perform input/output: fgetc, fgets, fprintf, fputc, fputs, fread,
11984       fscanf, fwrite, getc, getchar, printf, putc, putchar, puts, scanf,
11985       ungetc, vfprintf, vfscanf, vprintf, and vscanf.
11986     Forward references: files (<a href="#7.21.3">7.21.3</a>), the fseek function (<a href="#7.21.9.2">7.21.9.2</a>), streams (<a href="#7.21.2">7.21.2</a>), the
11987     tmpnam function (<a href="#7.21.4.4">7.21.4.4</a>), <a href="#7.28">&lt;wchar.h&gt;</a> (<a href="#7.28">7.28</a>).
11988 <a name="7.21.2" href="#7.21.2"><b>    7.21.2 Streams</b></a>
11989 1   Input and output, whether to or from physical devices such as terminals and tape drives,
11990     or whether to or from files supported on structured storage devices, are mapped into
11991     logical data streams, whose properties are more uniform than their various inputs and
11992     outputs. Two forms of mapping are supported, for text streams and for binary
11993     streams.255)
11994 2   A text stream is an ordered sequence of characters composed into lines, each line
11995     consisting of zero or more characters plus a terminating new-line character. Whether the
11996     last line requires a terminating new-line character is implementation-defined. Characters
11997     may have to be added, altered, or deleted on input and output to conform to differing
11998     conventions for representing text in the host environment. Thus, there need not be a one-
11999     to-one correspondence between the characters in a stream and those in the external
12000     representation. Data read in from a text stream will necessarily compare equal to the data
12001     that were earlier written out to that stream only if: the data consist only of printing
12002     characters and the control characters horizontal tab and new-line; no new-line character is
12003     immediately preceded by space characters; and the last character is a new-line character.
12004     Whether space characters that are written out immediately before a new-line character
12005     appear when read in is implementation-defined.
12006 3   A binary stream is an ordered sequence of characters that can transparently record
12007     internal data. Data read in from a binary stream shall compare equal to the data that were
12008     earlier written out to that stream, under the same implementation. Such a stream may,
12009     however, have an implementation-defined number of null characters appended to the end
12010     of the stream.
12011 4   Each stream has an orientation. After a stream is associated with an external file, but
12012     before any operations are performed on it, the stream is without orientation. Once a wide
12013     character input/output function has been applied to a stream without orientation, the
12014
12015
12016     255) An implementation need not distinguish between text streams and binary streams. In such an
12017          implementation, there need be no new-line characters in a text stream nor any limit to the length of a
12018          line.
12019
12020 [<a name="#p297" href="p297">page 297</a>] (<a href="#Contents">Contents</a>)
12021
12022     stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
12023     been applied to a stream without orientation, the stream becomes a byte-oriented stream.
12024     Only a call to the freopen function or the fwide function can otherwise alter the
12025     orientation of a stream. (A successful call to freopen removes any orientation.)256)
12026 5   Byte input/output functions shall not be applied to a wide-oriented stream and wide
12027     character input/output functions shall not be applied to a byte-oriented stream. The
12028     remaining stream operations do not affect, and are not affected by, a stream's orientation,
12029     except for the following additional restrictions:
12030     -- Binary wide-oriented streams have the file-positioning restrictions ascribed to both
12031       text and binary streams.
12032     -- For wide-oriented streams, after a successful call to a file-positioning function that
12033       leaves the file position indicator prior to the end-of-file, a wide character output
12034       function can overwrite a partial multibyte character; any file contents beyond the
12035       byte(s) written are henceforth indeterminate.
12036 6   Each wide-oriented stream has an associated mbstate_t object that stores the current
12037     parse state of the stream. A successful call to fgetpos stores a representation of the
12038     value of this mbstate_t object as part of the value of the fpos_t object. A later
12039     successful call to fsetpos using the same stored fpos_t value restores the value of
12040     the associated mbstate_t object as well as the position within the controlled stream.
12041     Environmental limits
12042 7   An implementation shall support text files with lines containing at least 254 characters,
12043     including the terminating new-line character. The value of the macro BUFSIZ shall be at
12044     least 256.
12045     Forward references: the freopen function (<a href="#7.21.5.4">7.21.5.4</a>), the fwide function (<a href="#7.28.3.5">7.28.3.5</a>),
12046     mbstate_t (<a href="#7.29.1">7.29.1</a>), the fgetpos function (<a href="#7.21.9.1">7.21.9.1</a>), the fsetpos function
12047     (<a href="#7.21.9.3">7.21.9.3</a>).
12048
12049
12050
12051
12052     256) The three predefined streams stdin, stdout, and stderr are unoriented at program startup.
12053
12054 [<a name="#p298" href="p298">page 298</a>] (<a href="#Contents">Contents</a>)
12055
12056 <a name="7.21.3" href="#7.21.3"><b>    7.21.3 Files</b></a>
12057 1   A stream is associated with an external file (which may be a physical device) by opening
12058     a file, which may involve creating a new file. Creating an existing file causes its former
12059     contents to be discarded, if necessary. If a file can support positioning requests (such as a
12060     disk file, as opposed to a terminal), then a file position indicator associated with the
12061     stream is positioned at the start (character number zero) of the file, unless the file is
12062     opened with append mode in which case it is implementation-defined whether the file
12063     position indicator is initially positioned at the beginning or the end of the file. The file
12064     position indicator is maintained by subsequent reads, writes, and positioning requests, to
12065     facilitate an orderly progression through the file.
12066 2   Binary files are not truncated, except as defined in <a href="#7.21.5.3">7.21.5.3</a>. Whether a write on a text
12067     stream causes the associated file to be truncated beyond that point is implementation-
12068     defined.
12069 3   When a stream is unbuffered, characters are intended to appear from the source or at the
12070     destination as soon as possible. Otherwise characters may be accumulated and
12071     transmitted to or from the host environment as a block. When a stream is fully buffered,
12072     characters are intended to be transmitted to or from the host environment as a block when
12073     a buffer is filled. When a stream is line buffered, characters are intended to be
12074     transmitted to or from the host environment as a block when a new-line character is
12075     encountered. Furthermore, characters are intended to be transmitted as a block to the host
12076     environment when a buffer is filled, when input is requested on an unbuffered stream, or
12077     when input is requested on a line buffered stream that requires the transmission of
12078     characters from the host environment. Support for these characteristics is
12079     implementation-defined, and may be affected via the setbuf and setvbuf functions.
12080 4   A file may be disassociated from a controlling stream by closing the file. Output streams
12081     are flushed (any unwritten buffer contents are transmitted to the host environment) before
12082     the stream is disassociated from the file. The value of a pointer to a FILE object is
12083     indeterminate after the associated file is closed (including the standard text streams).
12084     Whether a file of zero length (on which no characters have been written by an output
12085     stream) actually exists is implementation-defined.
12086 5   The file may be subsequently reopened, by the same or another program execution, and
12087     its contents reclaimed or modified (if it can be repositioned at its start). If the main
12088     function returns to its original caller, or if the exit function is called, all open files are
12089     closed (hence all output streams are flushed) before program termination. Other paths to
12090     program termination, such as calling the abort function, need not close all files
12091     properly.
12092 6   The address of the FILE object used to control a stream may be significant; a copy of a
12093     FILE object need not serve in place of the original.
12094
12095 [<a name="#p299" href="p299">page 299</a>] (<a href="#Contents">Contents</a>)
12096
12097 7    At program startup, three text streams are predefined and need not be opened explicitly
12098      -- standard input (for reading conventional input), standard output (for writing
12099      conventional output), and standard error (for writing diagnostic output). As initially
12100      opened, the standard error stream is not fully buffered; the standard input and standard
12101      output streams are fully buffered if and only if the stream can be determined not to refer
12102      to an interactive device.
12103 8    Functions that open additional (nontemporary) files require a file name, which is a string.
12104      The rules for composing valid file names are implementation-defined. Whether the same
12105      file can be simultaneously open multiple times is also implementation-defined.
12106 9    Although both text and binary wide-oriented streams are conceptually sequences of wide
12107      characters, the external file associated with a wide-oriented stream is a sequence of
12108      multibyte characters, generalized as follows:
12109      -- Multibyte encodings within files may contain embedded null bytes (unlike multibyte
12110        encodings valid for use internal to the program).
12111      -- A file need not begin nor end in the initial shift state.257)
12112 10   Moreover, the encodings used for multibyte characters may differ among files. Both the
12113      nature and choice of such encodings are implementation-defined.
12114 11   The wide character input functions read multibyte characters from the stream and convert
12115      them to wide characters as if they were read by successive calls to the fgetwc function.
12116      Each conversion occurs as if by a call to the mbrtowc function, with the conversion state
12117      described by the stream's own mbstate_t object. The byte input functions read
12118      characters from the stream as if by successive calls to the fgetc function.
12119 12   The wide character output functions convert wide characters to multibyte characters and
12120      write them to the stream as if they were written by successive calls to the fputwc
12121      function. Each conversion occurs as if by a call to the wcrtomb function, with the
12122      conversion state described by the stream's own mbstate_t object. The byte output
12123      functions write characters to the stream as if by successive calls to the fputc function.
12124 13   In some cases, some of the byte input/output functions also perform conversions between
12125      multibyte characters and wide characters. These conversions also occur as if by calls to
12126      the mbrtowc and wcrtomb functions.
12127 14   An encoding error occurs if the character sequence presented to the underlying
12128      mbrtowc function does not form a valid (generalized) multibyte character, or if the code
12129      value passed to the underlying wcrtomb does not correspond to a valid (generalized)
12130
12131
12132      257) Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has
12133           undefined behavior for a binary stream (because of possible trailing null characters) or for any stream
12134           with state-dependent encoding that does not assuredly end in the initial shift state.
12135
12136 [<a name="#p300" href="p300">page 300</a>] (<a href="#Contents">Contents</a>)
12137
12138      multibyte character. The wide character input/output functions and the byte input/output
12139      functions store the value of the macro EILSEQ in errno if and only if an encoding error
12140      occurs.
12141      Environmental limits
12142 15   The value of FOPEN_MAX shall be at least eight, including the three standard text
12143      streams.
12144      Forward references: the exit function (<a href="#7.22.4.4">7.22.4.4</a>), the fgetc function (<a href="#7.21.7.1">7.21.7.1</a>), the
12145      fopen function (<a href="#7.21.5.3">7.21.5.3</a>), the fputc function (<a href="#7.21.7.3">7.21.7.3</a>), the setbuf function
12146      (<a href="#7.21.5.5">7.21.5.5</a>), the setvbuf function (<a href="#7.21.5.6">7.21.5.6</a>), the fgetwc function (<a href="#7.28.3.1">7.28.3.1</a>), the
12147      fputwc function (<a href="#7.28.3.3">7.28.3.3</a>), conversion state (<a href="#7.28.6">7.28.6</a>), the mbrtowc function
12148      (<a href="#7.28.6.3.2">7.28.6.3.2</a>), the wcrtomb function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
12149 <a name="7.21.4" href="#7.21.4"><b>     7.21.4 Operations on files</b></a>
12150 <a name="7.21.4.1" href="#7.21.4.1"><b>     7.21.4.1 The remove function</b></a>
12151      Synopsis
12152 1            #include <a href="#7.21">&lt;stdio.h&gt;</a>
12153              int remove(const char *filename);
12154      Description
12155 2    The remove function causes the file whose name is the string pointed to by filename
12156      to be no longer accessible by that name. A subsequent attempt to open that file using that
12157      name will fail, unless it is created anew. If the file is open, the behavior of the remove
12158      function is implementation-defined.
12159      Returns
12160 3    The remove function returns zero if the operation succeeds, nonzero if it fails.
12161 <a name="7.21.4.2" href="#7.21.4.2"><b>     7.21.4.2 The rename function</b></a>
12162      Synopsis
12163 1            #include <a href="#7.21">&lt;stdio.h&gt;</a>
12164              int rename(const char *old, const char *new);
12165      Description
12166 2    The rename function causes the file whose name is the string pointed to by old to be
12167      henceforth known by the name given by the string pointed to by new. The file named
12168      old is no longer accessible by that name. If a file named by the string pointed to by new
12169      exists prior to the call to the rename function, the behavior is implementation-defined.
12170
12171
12172
12173
12174 [<a name="#p301" href="p301">page 301</a>] (<a href="#Contents">Contents</a>)
12175
12176     Returns
12177 3   The rename function returns zero if the operation succeeds, nonzero if it fails,258) in
12178     which case if the file existed previously it is still known by its original name.
12179 <a name="7.21.4.3" href="#7.21.4.3"><b>    7.21.4.3 The tmpfile function</b></a>
12180     Synopsis
12181 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12182             FILE *tmpfile(void);
12183     Description
12184 2   The tmpfile function creates a temporary binary file that is different from any other
12185     existing file and that will automatically be removed when it is closed or at program
12186     termination. If the program terminates abnormally, whether an open temporary file is
12187     removed is implementation-defined. The file is opened for update with "wb+" mode.
12188     Recommended practice
12189 3   It should be possible to open at least TMP_MAX temporary files during the lifetime of the
12190     program (this limit may be shared with tmpnam) and there should be no limit on the
12191     number simultaneously open other than this limit and any limit on the number of open
12192     files (FOPEN_MAX).
12193     Returns
12194 4   The tmpfile function returns a pointer to the stream of the file that it created. If the file
12195     cannot be created, the tmpfile function returns a null pointer.
12196     Forward references: the fopen function (<a href="#7.21.5.3">7.21.5.3</a>).
12197 <a name="7.21.4.4" href="#7.21.4.4"><b>    7.21.4.4 The tmpnam function</b></a>
12198     Synopsis
12199 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12200             char *tmpnam(char *s);
12201     Description
12202 2   The tmpnam function generates a string that is a valid file name and that is not the same
12203     as the name of an existing file.259) The function is potentially capable of generating at
12204
12205
12206     258) Among the reasons the implementation may cause the rename function to fail are that the file is open
12207          or that it is necessary to copy its contents to effectuate its renaming.
12208     259) Files created using strings generated by the tmpnam function are temporary only in the sense that
12209          their names should not collide with those generated by conventional naming rules for the
12210          implementation. It is still necessary to use the remove function to remove such files when their use
12211          is ended, and before program termination.
12212
12213 [<a name="#p302" href="p302">page 302</a>] (<a href="#Contents">Contents</a>)
12214
12215     least TMP_MAX different strings, but any or all of them may already be in use by existing
12216     files and thus not be suitable return values.
12217 3   The tmpnam function generates a different string each time it is called.
12218 4   Calls to the tmpnam function with a null pointer argument may introduce data races with
12219     each other. The implementation shall behave as if no library function calls the tmpnam
12220     function.
12221     Returns
12222 5   If no suitable string can be generated, the tmpnam function returns a null pointer.
12223     Otherwise, if the argument is a null pointer, the tmpnam function leaves its result in an
12224     internal static object and returns a pointer to that object (subsequent calls to the tmpnam
12225     function may modify the same object). If the argument is not a null pointer, it is assumed
12226     to point to an array of at least L_tmpnam chars; the tmpnam function writes its result
12227     in that array and returns the argument as its value.
12228     Environmental limits
12229 6   The value of the macro TMP_MAX shall be at least 25.
12230 <a name="7.21.5" href="#7.21.5"><b>    7.21.5 File access functions</b></a>
12231 <a name="7.21.5.1" href="#7.21.5.1"><b>    7.21.5.1 The fclose function</b></a>
12232     Synopsis
12233 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12234             int fclose(FILE *stream);
12235     Description
12236 2   A successful call to the fclose function causes the stream pointed to by stream to be
12237     flushed and the associated file to be closed. Any unwritten buffered data for the stream
12238     are delivered to the host environment to be written to the file; any unread buffered data
12239     are discarded. Whether or not the call succeeds, the stream is disassociated from the file
12240     and any buffer set by the setbuf or setvbuf function is disassociated from the stream
12241     (and deallocated if it was automatically allocated).
12242     Returns
12243 3   The fclose function returns zero if the stream was successfully closed, or EOF if any
12244     errors were detected.
12245
12246
12247
12248
12249 [<a name="#p303" href="p303">page 303</a>] (<a href="#Contents">Contents</a>)
12250
12251 <a name="7.21.5.2" href="#7.21.5.2"><b>    7.21.5.2 The fflush function</b></a>
12252     Synopsis
12253 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12254             int fflush(FILE *stream);
12255     Description
12256 2   If stream points to an output stream or an update stream in which the most recent
12257     operation was not input, the fflush function causes any unwritten data for that stream
12258     to be delivered to the host environment to be written to the file; otherwise, the behavior is
12259     undefined.
12260 3   If stream is a null pointer, the fflush function performs this flushing action on all
12261     streams for which the behavior is defined above.
12262     Returns
12263 4   The fflush function sets the error indicator for the stream and returns EOF if a write
12264     error occurs, otherwise it returns zero.
12265     Forward references: the fopen function (<a href="#7.21.5.3">7.21.5.3</a>).
12266 <a name="7.21.5.3" href="#7.21.5.3"><b>    7.21.5.3 The fopen function</b></a>
12267     Synopsis
12268 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12269             FILE *fopen(const char * restrict filename,
12270                  const char * restrict mode);
12271     Description
12272 2   The fopen function opens the file whose name is the string pointed to by filename,
12273     and associates a stream with it.
12274 3   The argument mode points to a string. If the string is one of the following, the file is
12275     open in the indicated mode. Otherwise, the behavior is undefined.260)
12276     r                     open text file for reading
12277     w                     truncate to zero length or create text file for writing
12278     wx                    create text file for writing
12279     a                     append; open or create text file for writing at end-of-file
12280     rb                    open binary file for reading
12281     wb                    truncate to zero length or create binary file for writing
12282
12283
12284     260) If the string begins with one of the above sequences, the implementation might choose to ignore the
12285          remaining characters, or it might use them to select different kinds of a file (some of which might not
12286          conform to the properties in <a href="#7.21.2">7.21.2</a>).
12287
12288 [<a name="#p304" href="p304">page 304</a>] (<a href="#Contents">Contents</a>)
12289
12290     wbx               create binary file for writing
12291     ab                append; open or create binary file for writing at end-of-file
12292     r+                open text file for update (reading and writing)
12293     w+                truncate to zero length or create text file for update
12294     w+x               create text file for update
12295     a+                append; open or create text file for update, writing at end-of-file
12296     r+b or rb+        open binary file for update (reading and writing)
12297     w+b or wb+        truncate to zero length or create binary file for update
12298     w+bx or wb+x      create binary file for update
12299     a+b or ab+        append; open or create binary file for update, writing at end-of-file
12300 4   Opening a file with read mode ('r' as the first character in the mode argument) fails if
12301     the file does not exist or cannot be read.
12302 5   Opening a file with exclusive mode ('x' as the last character in the mode argument)
12303     fails if the file already exists or cannot be created. Otherwise, the file is created with
12304     exclusive (also known as non-shared) access to the extent that the underlying system
12305     supports exclusive access.
12306 6   Opening a file with append mode ('a' as the first character in the mode argument)
12307     causes all subsequent writes to the file to be forced to the then current end-of-file,
12308     regardless of intervening calls to the fseek function. In some implementations, opening
12309     a binary file with append mode ('b' as the second or third character in the above list of
12310     mode argument values) may initially position the file position indicator for the stream
12311     beyond the last data written, because of null character padding.
12312 7   When a file is opened with update mode ('+' as the second or third character in the
12313     above list of mode argument values), both input and output may be performed on the
12314     associated stream. However, output shall not be directly followed by input without an
12315     intervening call to the fflush function or to a file positioning function (fseek,
12316     fsetpos, or rewind), and input shall not be directly followed by output without an
12317     intervening call to a file positioning function, unless the input operation encounters end-
12318     of-file. Opening (or creating) a text file with update mode may instead open (or create) a
12319     binary stream in some implementations.
12320 8   When opened, a stream is fully buffered if and only if it can be determined not to refer to
12321     an interactive device. The error and end-of-file indicators for the stream are cleared.
12322     Returns
12323 9   The fopen function returns a pointer to the object controlling the stream. If the open
12324     operation fails, fopen returns a null pointer.
12325     Forward references: file positioning functions (<a href="#7.21.9">7.21.9</a>).
12326
12327
12328
12329 [<a name="#p305" href="p305">page 305</a>] (<a href="#Contents">Contents</a>)
12330
12331 <a name="7.21.5.4" href="#7.21.5.4"><b>    7.21.5.4 The freopen function</b></a>
12332     Synopsis
12333 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12334             FILE *freopen(const char * restrict filename,
12335                  const char * restrict mode,
12336                  FILE * restrict stream);
12337     Description
12338 2   The freopen function opens the file whose name is the string pointed to by filename
12339     and associates the stream pointed to by stream with it. The mode argument is used just
12340     as in the fopen function.261)
12341 3   If filename is a null pointer, the freopen function attempts to change the mode of
12342     the stream to that specified by mode, as if the name of the file currently associated with
12343     the stream had been used. It is implementation-defined which changes of mode are
12344     permitted (if any), and under what circumstances.
12345 4   The freopen function first attempts to close any file that is associated with the specified
12346     stream. Failure to close the file is ignored. The error and end-of-file indicators for the
12347     stream are cleared.
12348     Returns
12349 5   The freopen function returns a null pointer if the open operation fails. Otherwise,
12350     freopen returns the value of stream.
12351 <a name="7.21.5.5" href="#7.21.5.5"><b>    7.21.5.5 The setbuf function</b></a>
12352     Synopsis
12353 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12354             void setbuf(FILE * restrict stream,
12355                  char * restrict buf);
12356     Description
12357 2   Except that it returns no value, the setbuf function is equivalent to the setvbuf
12358     function invoked with the values _IOFBF for mode and BUFSIZ for size, or (if buf
12359     is a null pointer), with the value _IONBF for mode.
12360
12361
12362
12363
12364     261) The primary use of the freopen function is to change the file associated with a standard text stream
12365          (stderr, stdin, or stdout), as those identifiers need not be modifiable lvalues to which the value
12366          returned by the fopen function may be assigned.
12367
12368 [<a name="#p306" href="p306">page 306</a>] (<a href="#Contents">Contents</a>)
12369
12370     Returns
12371 3   The setbuf function returns no value.
12372     Forward references: the setvbuf function (<a href="#7.21.5.6">7.21.5.6</a>).
12373 <a name="7.21.5.6" href="#7.21.5.6"><b>    7.21.5.6 The setvbuf function</b></a>
12374     Synopsis
12375 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
12376             int setvbuf(FILE * restrict stream,
12377                  char * restrict buf,
12378                  int mode, size_t size);
12379     Description
12380 2   The setvbuf function may be used only after the stream pointed to by stream has
12381     been associated with an open file and before any other operation (other than an
12382     unsuccessful call to setvbuf) is performed on the stream. The argument mode
12383     determines how stream will be buffered, as follows: _IOFBF causes input/output to be
12384     fully buffered; _IOLBF causes input/output to be line buffered; _IONBF causes
12385     input/output to be unbuffered. If buf is not a null pointer, the array it points to may be
12386     used instead of a buffer allocated by the setvbuf function262) and the argument size
12387     specifies the size of the array; otherwise, size may determine the size of a buffer
12388     allocated by the setvbuf function. The contents of the array at any time are
12389     indeterminate.
12390     Returns
12391 3   The setvbuf function returns zero on success, or nonzero if an invalid value is given
12392     for mode or if the request cannot be honored.
12393
12394
12395
12396
12397     262) The buffer has to have a lifetime at least as great as the open stream, so the stream should be closed
12398          before a buffer that has automatic storage duration is deallocated upon block exit.
12399
12400 [<a name="#p307" href="p307">page 307</a>] (<a href="#Contents">Contents</a>)
12401
12402 <a name="7.21.6" href="#7.21.6"><b>    7.21.6 Formatted input/output functions</b></a>
12403 1   The formatted input/output functions shall behave as if there is a sequence point after the
12404     actions associated with each specifier.263)
12405 <a name="7.21.6.1" href="#7.21.6.1"><b>    7.21.6.1 The fprintf function</b></a>
12406     Synopsis
12407 1            #include <a href="#7.21">&lt;stdio.h&gt;</a>
12408              int fprintf(FILE * restrict stream,
12409                   const char * restrict format, ...);
12410     Description
12411 2   The fprintf function writes output to the stream pointed to by stream, under control
12412     of the string pointed to by format that specifies how subsequent arguments are
12413     converted for output. If there are insufficient arguments for the format, the behavior is
12414     undefined. If the format is exhausted while arguments remain, the excess arguments are
12415     evaluated (as always) but are otherwise ignored. The fprintf function returns when
12416     the end of the format string is encountered.
12417 3   The format shall be a multibyte character sequence, beginning and ending in its initial
12418     shift state. The format is composed of zero or more directives: ordinary multibyte
12419     characters (not %), which are copied unchanged to the output stream; and conversion
12420     specifications, each of which results in fetching zero or more subsequent arguments,
12421     converting them, if applicable, according to the corresponding conversion specifier, and
12422     then writing the result to the output stream.
12423 4   Each conversion specification is introduced by the character %. After the %, the following
12424     appear in sequence:
12425     -- Zero or more flags (in any order) that modify the meaning of the conversion
12426       specification.
12427     -- An optional minimum field width. If the converted value has fewer characters than the
12428       field width, it is padded with spaces (by default) on the left (or right, if the left
12429       adjustment flag, described later, has been given) to the field width. The field width
12430       takes the form of an asterisk * (described later) or a nonnegative decimal integer.264)
12431     -- An optional precision that gives the minimum number of digits to appear for the d, i,
12432       o, u, x, and X conversions, the number of digits to appear after the decimal-point
12433       character for a, A, e, E, f, and F conversions, the maximum number of significant
12434       digits for the g and G conversions, or the maximum number of bytes to be written for
12435
12436
12437     263) The fprintf functions perform writes to memory for the %n specifier.
12438     264) Note that 0 is taken as a flag, not as the beginning of a field width.
12439
12440 [<a name="#p308" href="p308">page 308</a>] (<a href="#Contents">Contents</a>)
12441
12442         s conversions. The precision takes the form of a period (.) followed either by an
12443         asterisk * (described later) or by an optional decimal integer; if only the period is
12444         specified, the precision is taken as zero. If a precision appears with any other
12445         conversion specifier, the behavior is undefined.
12446     -- An optional length modifier that specifies the size of the argument.
12447     -- A conversion specifier character that specifies the type of conversion to be applied.
12448 5   As noted above, a field width, or precision, or both, may be indicated by an asterisk. In
12449     this case, an int argument supplies the field width or precision. The arguments
12450     specifying field width, or precision, or both, shall appear (in that order) before the
12451     argument (if any) to be converted. A negative field width argument is taken as a - flag
12452     followed by a positive field width. A negative precision argument is taken as if the
12453     precision were omitted.
12454 6   The flag characters and their meanings are:
12455     -       The result of the conversion is left-justified within the field. (It is right-justified if
12456             this flag is not specified.)
12457     +       The result of a signed conversion always begins with a plus or minus sign. (It
12458             begins with a sign only when a negative value is converted if this flag is not
12459             specified.)265)
12460     space If the first character of a signed conversion is not a sign, or if a signed conversion
12461           results in no characters, a space is prefixed to the result. If the space and + flags
12462           both appear, the space flag is ignored.
12463     #       The result is converted to an ''alternative form''. For o conversion, it increases
12464             the precision, if and only if necessary, to force the first digit of the result to be a
12465             zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
12466             conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,
12467             and G conversions, the result of converting a floating-point number always
12468             contains a decimal-point character, even if no digits follow it. (Normally, a
12469             decimal-point character appears in the result of these conversions only if a digit
12470             follows it.) For g and G conversions, trailing zeros are not removed from the
12471             result. For other conversions, the behavior is undefined.
12472     0       For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros
12473             (following any indication of sign or base) are used to pad to the field width rather
12474             than performing space padding, except when converting an infinity or NaN. If the
12475             0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X
12476
12477
12478     265) The results of all floating conversions of a negative zero, and of negative values that round to zero,
12479          include a minus sign.
12480
12481 [<a name="#p309" href="p309">page 309</a>] (<a href="#Contents">Contents</a>)
12482
12483               conversions, if a precision is specified, the 0 flag is ignored. For other
12484               conversions, the behavior is undefined.
12485 7   The length modifiers and their meanings are:
12486     hh            Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
12487                   signed char or unsigned char argument (the argument will have
12488                   been promoted according to the integer promotions, but its value shall be
12489                   converted to signed char or unsigned char before printing); or that
12490                   a following n conversion specifier applies to a pointer to a signed char
12491                   argument.
12492     h             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
12493                   short int or unsigned short int argument (the argument will
12494                   have been promoted according to the integer promotions, but its value shall
12495                   be converted to short int or unsigned short int before printing);
12496                   or that a following n conversion specifier applies to a pointer to a short
12497                   int argument.
12498     l (ell)       Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
12499                   long int or unsigned long int argument; that a following n
12500                   conversion specifier applies to a pointer to a long int argument; that a
12501                   following c conversion specifier applies to a wint_t argument; that a
12502                   following s conversion specifier applies to a pointer to a wchar_t
12503                   argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
12504                   specifier.
12505     ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
12506                  long long int or unsigned long long int argument; or that a
12507                  following n conversion specifier applies to a pointer to a long long int
12508                  argument.
12509     j             Specifies that a following d, i, o, u, x, or X conversion specifier applies to
12510                   an intmax_t or uintmax_t argument; or that a following n conversion
12511                   specifier applies to a pointer to an intmax_t argument.
12512     z             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
12513                   size_t or the corresponding signed integer type argument; or that a
12514                   following n conversion specifier applies to a pointer to a signed integer type
12515                   corresponding to size_t argument.
12516     t             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
12517                   ptrdiff_t or the corresponding unsigned integer type argument; or that a
12518                   following n conversion specifier applies to a pointer to a ptrdiff_t
12519                   argument.
12520
12521
12522 [<a name="#p310" href="p310">page 310</a>] (<a href="#Contents">Contents</a>)
12523
12524     L              Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
12525                    applies to a long double argument.
12526     If a length modifier appears with any conversion specifier other than as specified above,
12527     the behavior is undefined.
12528 8   The conversion specifiers and their meanings are:
12529     d,i          The int argument is converted to signed decimal in the style [-]dddd. The
12530                  precision specifies the minimum number of digits to appear; if the value
12531                  being converted can be represented in fewer digits, it is expanded with
12532                  leading zeros. The default precision is 1. The result of converting a zero
12533                  value with a precision of zero is no characters.
12534     o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned
12535             decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the
12536             letters abcdef are used for x conversion and the letters ABCDEF for X
12537             conversion. The precision specifies the minimum number of digits to appear;
12538             if the value being converted can be represented in fewer digits, it is expanded
12539             with leading zeros. The default precision is 1. The result of converting a
12540             zero value with a precision of zero is no characters.
12541     f,F          A double argument representing a floating-point number is converted to
12542                  decimal notation in the style [-]ddd.ddd, where the number of digits after
12543                  the decimal-point character is equal to the precision specification. If the
12544                  precision is missing, it is taken as 6; if the precision is zero and the # flag is
12545                  not specified, no decimal-point character appears. If a decimal-point
12546                  character appears, at least one digit appears before it. The value is rounded to
12547                  the appropriate number of digits.
12548                  A double argument representing an infinity is converted in one of the styles
12549                  [-]inf or [-]infinity -- which style is implementation-defined. A
12550                  double argument representing a NaN is converted in one of the styles
12551                  [-]nan or [-]nan(n-char-sequence) -- which style, and the meaning of
12552                  any n-char-sequence, is implementation-defined. The F conversion specifier
12553                  produces INF, INFINITY, or NAN instead of inf, infinity, or nan,
12554                  respectively.266)
12555     e,E          A double argument representing a floating-point number is converted in the
12556                  style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
12557                  argument is nonzero) before the decimal-point character and the number of
12558                  digits after it is equal to the precision; if the precision is missing, it is taken as
12559
12560
12561     266) When applied to infinite and NaN values, the -, +, and space flag characters have their usual meaning;
12562          the # and 0 flag characters have no effect.
12563
12564 [<a name="#p311" href="p311">page 311</a>] (<a href="#Contents">Contents</a>)
12565
12566               6; if the precision is zero and the # flag is not specified, no decimal-point
12567               character appears. The value is rounded to the appropriate number of digits.
12568               The E conversion specifier produces a number with E instead of e
12569               introducing the exponent. The exponent always contains at least two digits,
12570               and only as many more digits as necessary to represent the exponent. If the
12571               value is zero, the exponent is zero.
12572               A double argument representing an infinity or NaN is converted in the style
12573               of an f or F conversion specifier.
12574 g,G           A double argument representing a floating-point number is converted in
12575               style f or e (or in style F or E in the case of a G conversion specifier),
12576               depending on the value converted and the precision. Let P equal the
12577               precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero.
12578               Then, if a conversion with style E would have an exponent of X:
12579               -- if P &gt; X &gt;= -4, the conversion is with style f (or F) and precision
12580                 P - (X + 1).
12581               -- otherwise, the conversion is with style e (or E) and precision P - 1.
12582               Finally, unless the # flag is used, any trailing zeros are removed from the
12583               fractional portion of the result and the decimal-point character is removed if
12584               there is no fractional portion remaining.
12585               A double argument representing an infinity or NaN is converted in the style
12586               of an f or F conversion specifier.
12587 a,A           A double argument representing a floating-point number is converted in the
12588               style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
12589               nonzero if the argument is a normalized floating-point number and is
12590               otherwise unspecified) before the decimal-point character267) and the number
12591               of hexadecimal digits after it is equal to the precision; if the precision is
12592               missing and FLT_RADIX is a power of 2, then the precision is sufficient for
12593               an exact representation of the value; if the precision is missing and
12594               FLT_RADIX is not a power of 2, then the precision is sufficient to
12595
12596
12597
12598
12599 267) Binary implementations can choose the hexadecimal digit to the left of the decimal-point character so
12600      that subsequent digits align to nibble (4-bit) boundaries.
12601
12602 [<a name="#p312" href="p312">page 312</a>] (<a href="#Contents">Contents</a>)
12603
12604               distinguish268) values of type double, except that trailing zeros may be
12605               omitted; if the precision is zero and the # flag is not specified, no decimal-
12606               point character appears. The letters abcdef are used for a conversion and
12607               the letters ABCDEF for A conversion. The A conversion specifier produces a
12608               number with X and P instead of x and p. The exponent always contains at
12609               least one digit, and only as many more digits as necessary to represent the
12610               decimal exponent of 2. If the value is zero, the exponent is zero.
12611               A double argument representing an infinity or NaN is converted in the style
12612               of an f or F conversion specifier.
12613 c             If no l length modifier is present, the int argument is converted to an
12614               unsigned char, and the resulting character is written.
12615               If an l length modifier is present, the wint_t argument is converted as if by
12616               an ls conversion specification with no precision and an argument that points
12617               to the initial element of a two-element array of wchar_t, the first element
12618               containing the wint_t argument to the lc conversion specification and the
12619               second a null wide character.
12620 s             If no l length modifier is present, the argument shall be a pointer to the initial
12621               element of an array of character type.269) Characters from the array are
12622               written up to (but not including) the terminating null character. If the
12623               precision is specified, no more than that many bytes are written. If the
12624               precision is not specified or is greater than the size of the array, the array shall
12625               contain a null character.
12626               If an l length modifier is present, the argument shall be a pointer to the initial
12627               element of an array of wchar_t type. Wide characters from the array are
12628               converted to multibyte characters (each as if by a call to the wcrtomb
12629               function, with the conversion state described by an mbstate_t object
12630               initialized to zero before the first wide character is converted) up to and
12631               including a terminating null wide character. The resulting multibyte
12632               characters are written up to (but not including) the terminating null character
12633               (byte). If no precision is specified, the array shall contain a null wide
12634               character. If a precision is specified, no more than that many bytes are
12635               written (including shift sequences, if any), and the array shall contain a null
12636               wide character if, to equal the multibyte character sequence length given by
12637
12638 268) The precision p is sufficient to distinguish values of the source type if 16 p-1 &gt; b n where b is
12639      FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
12640      might suffice depending on the implementation's scheme for determining the digit to the left of the
12641      decimal-point character.
12642 269) No special provisions are made for multibyte characters.
12643
12644 [<a name="#p313" href="p313">page 313</a>] (<a href="#Contents">Contents</a>)
12645
12646                     the precision, the function would need to access a wide character one past the
12647                     end of the array. In no case is a partial multibyte character written.270)
12648      p              The argument shall be a pointer to void. The value of the pointer is
12649                     converted to a sequence of printing characters, in an implementation-defined
12650                     manner.
12651      n              The argument shall be a pointer to signed integer into which is written the
12652                     number of characters written to the output stream so far by this call to
12653                     fprintf. No argument is converted, but one is consumed. If the conversion
12654                     specification includes any flags, a field width, or a precision, the behavior is
12655                     undefined.
12656      %              A % character is written. No argument is converted. The complete
12657                     conversion specification shall be %%.
12658 9    If a conversion specification is invalid, the behavior is undefined.271) If any argument is
12659      not the correct type for the corresponding conversion specification, the behavior is
12660      undefined.
12661 10   In no case does a nonexistent or small field width cause truncation of a field; if the result
12662      of a conversion is wider than the field width, the field is expanded to contain the
12663      conversion result.
12664 11   For a and A conversions, if FLT_RADIX is a power of 2, the value is correctly rounded
12665      to a hexadecimal floating number with the given precision.
12666      Recommended practice
12667 12   For a and A conversions, if FLT_RADIX is not a power of 2 and the result is not exactly
12668      representable in the given precision, the result should be one of the two adjacent numbers
12669      in hexadecimal floating style with the given precision, with the extra stipulation that the
12670      error should have a correct sign for the current rounding direction.
12671 13   For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
12672      DECIMAL_DIG, then the result should be correctly rounded.272) If the number of
12673      significant decimal digits is more than DECIMAL_DIG but the source value is exactly
12674      representable with DECIMAL_DIG digits, then the result should be an exact
12675      representation with trailing zeros. Otherwise, the source value is bounded by two
12676      adjacent decimal strings L &lt; U, both having DECIMAL_DIG significant digits; the value
12677
12678
12679      270) Redundant shift sequences may result if multibyte characters have a state-dependent encoding.
12680      271) See ''future library directions'' (<a href="#7.30.9">7.30.9</a>).
12681      272) For binary-to-decimal conversion, the result format's values are the numbers representable with the
12682           given format specifier. The number of significant digits is determined by the format specifier, and in
12683           the case of fixed-point conversion by the source value as well.
12684
12685 [<a name="#p314" href="p314">page 314</a>] (<a href="#Contents">Contents</a>)
12686
12687      of the resultant decimal string D should satisfy L &lt;= D &lt;= U, with the extra stipulation that
12688      the error should have a correct sign for the current rounding direction.
12689      Returns
12690 14   The fprintf function returns the number of characters transmitted, or a negative value
12691      if an output or encoding error occurred.
12692      Environmental limits
12693 15   The number of characters that can be produced by any single conversion shall be at least
12694      4095.
12695 16   EXAMPLE 1         To print a date and time in the form ''Sunday, July 3, 10:02'' followed by pi to five decimal
12696      places:
12697               #include <a href="#7.12">&lt;math.h&gt;</a>
12698               #include <a href="#7.21">&lt;stdio.h&gt;</a>
12699               /* ... */
12700               char *weekday, *month;      // pointers to strings
12701               int day, hour, min;
12702               fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
12703                       weekday, month, day, hour, min);
12704               fprintf(stdout, "pi = %.5f\n", 4 * atan(<a href="#1.0">1.0</a>));
12705
12706 17   EXAMPLE 2 In this example, multibyte characters do not have a state-dependent encoding, and the
12707      members of the extended character set that consist of more than one byte each consist of exactly two bytes,
12708      the first of which is denoted here by a and the second by an uppercase letter.
12709 18   Given the following wide string with length seven,
12710               static wchar_t wstr[] = L" X Yabc Z W";
12711      the seven calls
12712               fprintf(stdout,          "|1234567890123|\n");
12713               fprintf(stdout,          "|%13ls|\n", wstr);
12714               fprintf(stdout,          "|%-13.9ls|\n", wstr);
12715               fprintf(stdout,          "|%13.10ls|\n", wstr);
12716               fprintf(stdout,          "|%13.11ls|\n", wstr);
12717               fprintf(stdout,          "|%13.15ls|\n", &amp;wstr[2]);
12718               fprintf(stdout,          "|%13lc|\n", (wint_t) wstr[5]);
12719      will print the following seven lines:
12720               |1234567890123|
12721               |   X Yabc Z W|
12722               | X Yabc Z    |
12723               |     X Yabc Z|
12724               |   X Yabc Z W|
12725               |      abc Z W|
12726               |            Z|
12727
12728      Forward references: conversion state (<a href="#7.28.6">7.28.6</a>), the wcrtomb function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
12729
12730
12731
12732 [<a name="#p315" href="p315">page 315</a>] (<a href="#Contents">Contents</a>)
12733
12734 <a name="7.21.6.2" href="#7.21.6.2"><b>    7.21.6.2 The fscanf function</b></a>
12735     Synopsis
12736 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
12737            int fscanf(FILE * restrict stream,
12738                 const char * restrict format, ...);
12739     Description
12740 2   The fscanf function reads input from the stream pointed to by stream, under control
12741     of the string pointed to by format that specifies the admissible input sequences and how
12742     they are to be converted for assignment, using subsequent arguments as pointers to the
12743     objects to receive the converted input. If there are insufficient arguments for the format,
12744     the behavior is undefined. If the format is exhausted while arguments remain, the excess
12745     arguments are evaluated (as always) but are otherwise ignored.
12746 3   The format shall be a multibyte character sequence, beginning and ending in its initial
12747     shift state. The format is composed of zero or more directives: one or more white-space
12748     characters, an ordinary multibyte character (neither % nor a white-space character), or a
12749     conversion specification. Each conversion specification is introduced by the character %.
12750     After the %, the following appear in sequence:
12751     -- An optional assignment-suppressing character *.
12752     -- An optional decimal integer greater than zero that specifies the maximum field width
12753       (in characters).
12754     -- An optional length modifier that specifies the size of the receiving object.
12755     -- A conversion specifier character that specifies the type of conversion to be applied.
12756 4   The fscanf function executes each directive of the format in turn. When all directives
12757     have been executed, or if a directive fails (as detailed below), the function returns.
12758     Failures are described as input failures (due to the occurrence of an encoding error or the
12759     unavailability of input characters), or matching failures (due to inappropriate input).
12760 5   A directive composed of white-space character(s) is executed by reading input up to the
12761     first non-white-space character (which remains unread), or until no more characters can
12762     be read.
12763 6   A directive that is an ordinary multibyte character is executed by reading the next
12764     characters of the stream. If any of those characters differ from the ones composing the
12765     directive, the directive fails and the differing and subsequent characters remain unread.
12766     Similarly, if end-of-file, an encoding error, or a read error prevents a character from being
12767     read, the directive fails.
12768 7   A directive that is a conversion specification defines a set of matching input sequences, as
12769     described below for each specifier. A conversion specification is executed in the
12770
12771 [<a name="#p316" href="p316">page 316</a>] (<a href="#Contents">Contents</a>)
12772
12773      following steps:
12774 8    Input white-space characters (as specified by the isspace function) are skipped, unless
12775      the specification includes a [, c, or n specifier.273)
12776 9    An input item is read from the stream, unless the specification includes an n specifier. An
12777      input item is defined as the longest sequence of input characters which does not exceed
12778      any specified field width and which is, or is a prefix of, a matching input sequence.274)
12779      The first character, if any, after the input item remains unread. If the length of the input
12780      item is zero, the execution of the directive fails; this condition is a matching failure unless
12781      end-of-file, an encoding error, or a read error prevented input from the stream, in which
12782      case it is an input failure.
12783 10   Except in the case of a % specifier, the input item (or, in the case of a %n directive, the
12784      count of input characters) is converted to a type appropriate to the conversion specifier. If
12785      the input item is not a matching sequence, the execution of the directive fails: this
12786      condition is a matching failure. Unless assignment suppression was indicated by a *, the
12787      result of the conversion is placed in the object pointed to by the first argument following
12788      the format argument that has not already received a conversion result. If this object
12789      does not have an appropriate type, or if the result of the conversion cannot be represented
12790      in the object, the behavior is undefined.
12791 11   The length modifiers and their meanings are:
12792      hh             Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
12793                     to an argument with type pointer to signed char or unsigned char.
12794      h              Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
12795                     to an argument with type pointer to short int or unsigned short
12796                     int.
12797      l (ell)        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
12798                     to an argument with type pointer to long int or unsigned long
12799                     int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to
12800                     an argument with type pointer to double; or that a following c, s, or [
12801                     conversion specifier applies to an argument with type pointer to wchar_t.
12802      ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
12803                   to an argument with type pointer to long long int or unsigned
12804                   long long int.
12805
12806
12807
12808      273) These white-space characters are not counted against a specified field width.
12809      274) fscanf pushes back at most one input character onto the input stream. Therefore, some sequences
12810           that are acceptable to strtod, strtol, etc., are unacceptable to fscanf.
12811
12812 [<a name="#p317" href="p317">page 317</a>] (<a href="#Contents">Contents</a>)
12813
12814      j           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
12815                  to an argument with type pointer to intmax_t or uintmax_t.
12816      z           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
12817                  to an argument with type pointer to size_t or the corresponding signed
12818                  integer type.
12819      t           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
12820                  to an argument with type pointer to ptrdiff_t or the corresponding
12821                  unsigned integer type.
12822      L           Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
12823                  applies to an argument with type pointer to long double.
12824      If a length modifier appears with any conversion specifier other than as specified above,
12825      the behavior is undefined.
12826 12   The conversion specifiers and their meanings are:
12827      d          Matches an optionally signed decimal integer, whose format is the same as
12828                 expected for the subject sequence of the strtol function with the value 10
12829                 for the base argument. The corresponding argument shall be a pointer to
12830                 signed integer.
12831      i          Matches an optionally signed integer, whose format is the same as expected
12832                 for the subject sequence of the strtol function with the value 0 for the
12833                 base argument. The corresponding argument shall be a pointer to signed
12834                 integer.
12835      o          Matches an optionally signed octal integer, whose format is the same as
12836                 expected for the subject sequence of the strtoul function with the value 8
12837                 for the base argument. The corresponding argument shall be a pointer to
12838                 unsigned integer.
12839      u          Matches an optionally signed decimal integer, whose format is the same as
12840                 expected for the subject sequence of the strtoul function with the value 10
12841                 for the base argument. The corresponding argument shall be a pointer to
12842                 unsigned integer.
12843      x          Matches an optionally signed hexadecimal integer, whose format is the same
12844                 as expected for the subject sequence of the strtoul function with the value
12845                 16 for the base argument. The corresponding argument shall be a pointer to
12846                 unsigned integer.
12847      a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
12848              format is the same as expected for the subject sequence of the strtod
12849              function. The corresponding argument shall be a pointer to floating.
12850
12851
12852 [<a name="#p318" href="p318">page 318</a>] (<a href="#Contents">Contents</a>)
12853
12854 c             Matches a sequence of characters of exactly the number specified by the field
12855               width (1 if no field width is present in the directive).275)
12856               If no l length modifier is present, the corresponding argument shall be a
12857               pointer to the initial element of a character array large enough to accept the
12858               sequence. No null character is added.
12859               If an l length modifier is present, the input shall be a sequence of multibyte
12860               characters that begins in the initial shift state. Each multibyte character in the
12861               sequence is converted to a wide character as if by a call to the mbrtowc
12862               function, with the conversion state described by an mbstate_t object
12863               initialized to zero before the first multibyte character is converted. The
12864               corresponding argument shall be a pointer to the initial element of an array of
12865               wchar_t large enough to accept the resulting sequence of wide characters.
12866               No null wide character is added.
12867 s             Matches a sequence of non-white-space characters.275)
12868               If no l length modifier is present, the corresponding argument shall be a
12869               pointer to the initial element of a character array large enough to accept the
12870               sequence and a terminating null character, which will be added automatically.
12871               If an l length modifier is present, the input shall be a sequence of multibyte
12872               characters that begins in the initial shift state. Each multibyte character is
12873               converted to a wide character as if by a call to the mbrtowc function, with
12874               the conversion state described by an mbstate_t object initialized to zero
12875               before the first multibyte character is converted. The corresponding argument
12876               shall be a pointer to the initial element of an array of wchar_t large enough
12877               to accept the sequence and the terminating null wide character, which will be
12878               added automatically.
12879 [             Matches a nonempty sequence of characters from a set of expected characters
12880               (the scanset).275)
12881               If no l length modifier is present, the corresponding argument shall be a
12882               pointer to the initial element of a character array large enough to accept the
12883               sequence and a terminating null character, which will be added automatically.
12884               If an l length modifier is present, the input shall be a sequence of multibyte
12885               characters that begins in the initial shift state. Each multibyte character is
12886               converted to a wide character as if by a call to the mbrtowc function, with
12887               the conversion state described by an mbstate_t object initialized to zero
12888
12889 275) No special provisions are made for multibyte characters in the matching rules used by the c, s, and [
12890      conversion specifiers -- the extent of the input field is determined on a byte-by-byte basis. The
12891      resulting field is nevertheless a sequence of multibyte characters that begins in the initial shift state.
12892
12893 [<a name="#p319" href="p319">page 319</a>] (<a href="#Contents">Contents</a>)
12894
12895                     before the first multibyte character is converted. The corresponding argument
12896                     shall be a pointer to the initial element of an array of wchar_t large enough
12897                     to accept the sequence and the terminating null wide character, which will be
12898                     added automatically.
12899                     The conversion specifier includes all subsequent characters in the format
12900                     string, up to and including the matching right bracket (]). The characters
12901                     between the brackets (the scanlist) compose the scanset, unless the character
12902                     after the left bracket is a circumflex (^), in which case the scanset contains all
12903                     characters that do not appear in the scanlist between the circumflex and the
12904                     right bracket. If the conversion specifier begins with [] or [^], the right
12905                     bracket character is in the scanlist and the next following right bracket
12906                     character is the matching right bracket that ends the specification; otherwise
12907                     the first following right bracket character is the one that ends the
12908                     specification. If a - character is in the scanlist and is not the first, nor the
12909                     second where the first character is a ^, nor the last character, the behavior is
12910                     implementation-defined.
12911      p              Matches an implementation-defined set of sequences, which should be the
12912                     same as the set of sequences that may be produced by the %p conversion of
12913                     the fprintf function. The corresponding argument shall be a pointer to a
12914                     pointer to void. The input item is converted to a pointer value in an
12915                     implementation-defined manner. If the input item is a value converted earlier
12916                     during the same program execution, the pointer that results shall compare
12917                     equal to that value; otherwise the behavior of the %p conversion is undefined.
12918      n              No input is consumed. The corresponding argument shall be a pointer to
12919                     signed integer into which is to be written the number of characters read from
12920                     the input stream so far by this call to the fscanf function. Execution of a
12921                     %n directive does not increment the assignment count returned at the
12922                     completion of execution of the fscanf function. No argument is converted,
12923                     but one is consumed. If the conversion specification includes an assignment-
12924                     suppressing character or a field width, the behavior is undefined.
12925      %              Matches a single % character; no conversion or assignment occurs. The
12926                     complete conversion specification shall be %%.
12927 13   If a conversion specification is invalid, the behavior is undefined.276)
12928 14   The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
12929      respectively, a, e, f, g, and x.
12930
12931
12932
12933      276) See ''future library directions'' (<a href="#7.30.9">7.30.9</a>).
12934
12935 [<a name="#p320" href="p320">page 320</a>] (<a href="#Contents">Contents</a>)
12936
12937 15   Trailing white space (including new-line characters) is left unread unless matched by a
12938      directive. The success of literal matches and suppressed assignments is not directly
12939      determinable other than via the %n directive.
12940      Returns
12941 16   The fscanf function returns the value of the macro EOF if an input failure occurs
12942      before the first conversion (if any) has completed. Otherwise, the function returns the
12943      number of input items assigned, which can be fewer than provided for, or even zero, in
12944      the event of an early matching failure.
12945 17   EXAMPLE 1        The call:
12946               #include <a href="#7.21">&lt;stdio.h&gt;</a>
12947               /* ... */
12948               int n, i; float x; char name[50];
12949               n = fscanf(stdin, "%d%f%s", &amp;i, &amp;x, name);
12950      with the input line:
12951               25 54.32E-1 thompson
12952      will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
12953      thompson\0.
12954
12955 18   EXAMPLE 2        The call:
12956               #include <a href="#7.21">&lt;stdio.h&gt;</a>
12957               /* ... */
12958               int i; float x; char name[50];
12959               fscanf(stdin, "%2d%f%*d %[0123456789]", &amp;i, &amp;x, name);
12960      with input:
12961               56789 0123 56a72
12962      will assign to i the value 56 and to x the value 789.0, will skip 0123, and will assign to name the
12963      sequence 56\0. The next character read from the input stream will be a.
12964
12965 19   EXAMPLE 3        To accept repeatedly from stdin a quantity, a unit of measure, and an item name:
12966               #include <a href="#7.21">&lt;stdio.h&gt;</a>
12967               /* ... */
12968               int count; float quant; char units[21], item[21];
12969               do {
12970                       count = fscanf(stdin, "%f%20s of %20s", &amp;quant, units, item);
12971                       fscanf(stdin,"%*[^\n]");
12972               } while (!feof(stdin) &amp;&amp; !ferror(stdin));
12973 20   If the stdin stream contains the following lines:
12974               2 quarts of oil
12975               -12.8degrees Celsius
12976               lots of luck
12977               10.0LBS     of
12978               dirt
12979               100ergs of energy
12980
12981 [<a name="#p321" href="p321">page 321</a>] (<a href="#Contents">Contents</a>)
12982
12983      the execution of the above example will be analogous to the following assignments:
12984                quant     =   2; strcpy(units, "quarts"); strcpy(item, "oil");
12985                count     =   3;
12986                quant     =   -12.8; strcpy(units, "degrees");
12987                count     =   2; // "C" fails to match "o"
12988                count     =   0; // "l" fails to match "%f"
12989                quant     =   10.0; strcpy(units, "LBS"); strcpy(item, "dirt");
12990                count     =   3;
12991                count     =   0; // "100e" fails to match "%f"
12992                count     =   EOF;
12993
12994 21   EXAMPLE 4         In:
12995                #include <a href="#7.21">&lt;stdio.h&gt;</a>
12996                /* ... */
12997                int d1, d2, n1, n2, i;
12998                i = sscanf("123", "%d%n%n%d", &amp;d1, &amp;n1, &amp;n2, &amp;d2);
12999      the value 123 is assigned to d1 and the value 3 to n1. Because %n can never get an input failure the value
13000      of 3 is also assigned to n2. The value of d2 is not affected. The value 1 is assigned to i.
13001
13002 22   EXAMPLE 5 In these examples, multibyte characters do have a state-dependent encoding, and the
13003      members of the extended character set that consist of more than one byte each consist of exactly two bytes,
13004      the first of which is denoted here by a and the second by an uppercase letter, but are only recognized as
13005      such when in the alternate shift state. The shift sequences are denoted by (uparrow) and (downarrow), in which the first causes
13006      entry into the alternate shift state.
13007 23   After the call:
13008                #include <a href="#7.21">&lt;stdio.h&gt;</a>
13009                /* ... */
13010                char str[50];
13011                fscanf(stdin, "a%s", str);
13012      with the input line:
13013                a(uparrow) X Y(downarrow) bc
13014      str will contain (uparrow) X Y(downarrow)\0 assuming that none of the bytes of the shift sequences (or of the multibyte
13015      characters, in the more general case) appears to be a single-byte white-space character.
13016 24   In contrast, after the call:
13017                #include <a href="#7.21">&lt;stdio.h&gt;</a>
13018                #include <a href="#7.19">&lt;stddef.h&gt;</a>
13019                /* ... */
13020                wchar_t wstr[50];
13021                fscanf(stdin, "a%ls", wstr);
13022      with the same input line, wstr will contain the two wide characters that correspond to X and Y and a
13023      terminating null wide character.
13024 25   However, the call:
13025
13026
13027
13028
13029 [<a name="#p322" href="p322">page 322</a>] (<a href="#Contents">Contents</a>)
13030
13031              #include <a href="#7.21">&lt;stdio.h&gt;</a>
13032              #include <a href="#7.19">&lt;stddef.h&gt;</a>
13033              /* ... */
13034              wchar_t wstr[50];
13035              fscanf(stdin, "a(uparrow) X(downarrow)%ls", wstr);
13036      with the same input line will return zero due to a matching failure against the (downarrow) sequence in the format
13037      string.
13038 26   Assuming that the first byte of the multibyte character X is the same as the first byte of the multibyte
13039      character Y, after the call:
13040              #include <a href="#7.21">&lt;stdio.h&gt;</a>
13041              #include <a href="#7.19">&lt;stddef.h&gt;</a>
13042              /* ... */
13043              wchar_t wstr[50];
13044              fscanf(stdin, "a(uparrow) Y(downarrow)%ls", wstr);
13045      with the same input line, zero will again be returned, but stdin will be left with a partially consumed
13046      multibyte character.
13047
13048      Forward references: the strtod, strtof, and strtold functions (<a href="#7.22.1.3">7.22.1.3</a>), the
13049      strtol, strtoll, strtoul, and strtoull functions (<a href="#7.22.1.4">7.22.1.4</a>), conversion state
13050      (<a href="#7.28.6">7.28.6</a>), the wcrtomb function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
13051 <a name="7.21.6.3" href="#7.21.6.3"><b>     7.21.6.3 The printf function</b></a>
13052      Synopsis
13053 1            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13054              int printf(const char * restrict format, ...);
13055      Description
13056 2    The printf function is equivalent to fprintf with the argument stdout interposed
13057      before the arguments to printf.
13058      Returns
13059 3    The printf function returns the number of characters transmitted, or a negative value if
13060      an output or encoding error occurred.
13061 <a name="7.21.6.4" href="#7.21.6.4"><b>     7.21.6.4 The scanf function</b></a>
13062      Synopsis
13063 1            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13064              int scanf(const char * restrict format, ...);
13065      Description
13066 2    The scanf function is equivalent to fscanf with the argument stdin interposed
13067      before the arguments to scanf.
13068
13069
13070
13071 [<a name="#p323" href="p323">page 323</a>] (<a href="#Contents">Contents</a>)
13072
13073     Returns
13074 3   The scanf function returns the value of the macro EOF if an input failure occurs before
13075     the first conversion (if any) has completed. Otherwise, the scanf function returns the
13076     number of input items assigned, which can be fewer than provided for, or even zero, in
13077     the event of an early matching failure.
13078 <a name="7.21.6.5" href="#7.21.6.5"><b>    7.21.6.5 The snprintf function</b></a>
13079     Synopsis
13080 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13081            int snprintf(char * restrict s, size_t n,
13082                 const char * restrict format, ...);
13083     Description
13084 2   The snprintf function is equivalent to fprintf, except that the output is written into
13085     an array (specified by argument s) rather than to a stream. If n is zero, nothing is written,
13086     and s may be a null pointer. Otherwise, output characters beyond the n-1st are
13087     discarded rather than being written to the array, and a null character is written at the end
13088     of the characters actually written into the array. If copying takes place between objects
13089     that overlap, the behavior is undefined.
13090     Returns
13091 3   The snprintf function returns the number of characters that would have been written
13092     had n been sufficiently large, not counting the terminating null character, or a negative
13093     value if an encoding error occurred. Thus, the null-terminated output has been
13094     completely written if and only if the returned value is nonnegative and less than n.
13095 <a name="7.21.6.6" href="#7.21.6.6"><b>    7.21.6.6 The sprintf function</b></a>
13096     Synopsis
13097 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13098            int sprintf(char * restrict s,
13099                 const char * restrict format, ...);
13100     Description
13101 2   The sprintf function is equivalent to fprintf, except that the output is written into
13102     an array (specified by the argument s) rather than to a stream. A null character is written
13103     at the end of the characters written; it is not counted as part of the returned value. If
13104     copying takes place between objects that overlap, the behavior is undefined.
13105     Returns
13106 3   The sprintf function returns the number of characters written in the array, not
13107     counting the terminating null character, or a negative value if an encoding error occurred.
13108
13109 [<a name="#p324" href="p324">page 324</a>] (<a href="#Contents">Contents</a>)
13110
13111 <a name="7.21.6.7" href="#7.21.6.7"><b>    7.21.6.7 The sscanf function</b></a>
13112     Synopsis
13113 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13114             int sscanf(const char * restrict s,
13115                  const char * restrict format, ...);
13116     Description
13117 2   The sscanf function is equivalent to fscanf, except that input is obtained from a
13118     string (specified by the argument s) rather than from a stream. Reaching the end of the
13119     string is equivalent to encountering end-of-file for the fscanf function. If copying
13120     takes place between objects that overlap, the behavior is undefined.
13121     Returns
13122 3   The sscanf function returns the value of the macro EOF if an input failure occurs
13123     before the first conversion (if any) has completed. Otherwise, the sscanf function
13124     returns the number of input items assigned, which can be fewer than provided for, or even
13125     zero, in the event of an early matching failure.
13126 <a name="7.21.6.8" href="#7.21.6.8"><b>    7.21.6.8 The vfprintf function</b></a>
13127     Synopsis
13128 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13129             #include <a href="#7.21">&lt;stdio.h&gt;</a>
13130             int vfprintf(FILE * restrict stream,
13131                  const char * restrict format,
13132                  va_list arg);
13133     Description
13134 2   The vfprintf function is equivalent to fprintf, with the variable argument list
13135     replaced by arg, which shall have been initialized by the va_start macro (and
13136     possibly subsequent va_arg calls). The vfprintf function does not invoke the
13137     va_end macro.277)
13138     Returns
13139 3   The vfprintf function returns the number of characters transmitted, or a negative
13140     value if an output or encoding error occurred.
13141 4   EXAMPLE       The following shows the use of the vfprintf function in a general error-reporting routine.
13142
13143
13144
13145
13146     277) As the functions vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf, and
13147          vsscanf invoke the va_arg macro, the value of arg after the return is indeterminate.
13148
13149 [<a name="#p325" href="p325">page 325</a>] (<a href="#Contents">Contents</a>)
13150
13151            #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13152            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13153            void error(char *function_name, char *format, ...)
13154            {
13155                  va_list args;
13156                   va_start(args, format);
13157                   // print out name of function causing error
13158                   fprintf(stderr, "ERROR in %s: ", function_name);
13159                   // print out remainder of message
13160                   vfprintf(stderr, format, args);
13161                   va_end(args);
13162            }
13163
13164 <a name="7.21.6.9" href="#7.21.6.9"><b>    7.21.6.9 The vfscanf function</b></a>
13165     Synopsis
13166 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13167            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13168            int vfscanf(FILE * restrict stream,
13169                 const char * restrict format,
13170                 va_list arg);
13171     Description
13172 2   The vfscanf function is equivalent to fscanf, with the variable argument list
13173     replaced by arg, which shall have been initialized by the va_start macro (and
13174     possibly subsequent va_arg calls). The vfscanf function does not invoke the
13175     va_end macro.277)
13176     Returns
13177 3   The vfscanf function returns the value of the macro EOF if an input failure occurs
13178     before the first conversion (if any) has completed. Otherwise, the vfscanf function
13179     returns the number of input items assigned, which can be fewer than provided for, or even
13180     zero, in the event of an early matching failure.
13181 <a name="7.21.6.10" href="#7.21.6.10"><b>    7.21.6.10 The vprintf function</b></a>
13182     Synopsis
13183 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13184            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13185            int vprintf(const char * restrict format,
13186                 va_list arg);
13187     Description
13188 2   The vprintf function is equivalent to printf, with the variable argument list
13189     replaced by arg, which shall have been initialized by the va_start macro (and
13190
13191 [<a name="#p326" href="p326">page 326</a>] (<a href="#Contents">Contents</a>)
13192
13193     possibly subsequent va_arg calls). The vprintf function does not invoke the
13194     va_end macro.277)
13195     Returns
13196 3   The vprintf function returns the number of characters transmitted, or a negative value
13197     if an output or encoding error occurred.
13198 <a name="7.21.6.11" href="#7.21.6.11"><b>    7.21.6.11 The vscanf function</b></a>
13199     Synopsis
13200 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13201             #include <a href="#7.21">&lt;stdio.h&gt;</a>
13202             int vscanf(const char * restrict format,
13203                  va_list arg);
13204     Description
13205 2   The vscanf function is equivalent to scanf, with the variable argument list replaced
13206     by arg, which shall have been initialized by the va_start macro (and possibly
13207     subsequent va_arg calls). The vscanf function does not invoke the va_end
13208     macro.277)
13209     Returns
13210 3   The vscanf function returns the value of the macro EOF if an input failure occurs
13211     before the first conversion (if any) has completed. Otherwise, the vscanf function
13212     returns the number of input items assigned, which can be fewer than provided for, or even
13213     zero, in the event of an early matching failure.
13214 <a name="7.21.6.12" href="#7.21.6.12"><b>    7.21.6.12 The vsnprintf function</b></a>
13215     Synopsis
13216 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13217             #include <a href="#7.21">&lt;stdio.h&gt;</a>
13218             int vsnprintf(char * restrict s, size_t n,
13219                  const char * restrict format,
13220                  va_list arg);
13221     Description
13222 2   The vsnprintf function is equivalent to snprintf, with the variable argument list
13223     replaced by arg, which shall have been initialized by the va_start macro (and
13224     possibly subsequent va_arg calls). The vsnprintf function does not invoke the
13225     va_end macro.277) If copying takes place between objects that overlap, the behavior is
13226     undefined.
13227
13228
13229
13230 [<a name="#p327" href="p327">page 327</a>] (<a href="#Contents">Contents</a>)
13231
13232     Returns
13233 3   The vsnprintf function returns the number of characters that would have been written
13234     had n been sufficiently large, not counting the terminating null character, or a negative
13235     value if an encoding error occurred. Thus, the null-terminated output has been
13236     completely written if and only if the returned value is nonnegative and less than n.
13237 <a name="7.21.6.13" href="#7.21.6.13"><b>    7.21.6.13 The vsprintf function</b></a>
13238     Synopsis
13239 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13240            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13241            int vsprintf(char * restrict s,
13242                 const char * restrict format,
13243                 va_list arg);
13244     Description
13245 2   The vsprintf function is equivalent to sprintf, with the variable argument list
13246     replaced by arg, which shall have been initialized by the va_start macro (and
13247     possibly subsequent va_arg calls). The vsprintf function does not invoke the
13248     va_end macro.277) If copying takes place between objects that overlap, the behavior is
13249     undefined.
13250     Returns
13251 3   The vsprintf function returns the number of characters written in the array, not
13252     counting the terminating null character, or a negative value if an encoding error occurred.
13253 <a name="7.21.6.14" href="#7.21.6.14"><b>    7.21.6.14 The vsscanf function</b></a>
13254     Synopsis
13255 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
13256            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13257            int vsscanf(const char * restrict s,
13258                 const char * restrict format,
13259                 va_list arg);
13260     Description
13261 2   The vsscanf function is equivalent to sscanf, with the variable argument list
13262     replaced by arg, which shall have been initialized by the va_start macro (and
13263     possibly subsequent va_arg calls). The vsscanf function does not invoke the
13264     va_end macro.277)
13265     Returns
13266 3   The vsscanf function returns the value of the macro EOF if an input failure occurs
13267     before the first conversion (if any) has completed. Otherwise, the vsscanf function
13268 [<a name="#p328" href="p328">page 328</a>] (<a href="#Contents">Contents</a>)
13269
13270     returns the number of input items assigned, which can be fewer than provided for, or even
13271     zero, in the event of an early matching failure.
13272 <a name="7.21.7" href="#7.21.7"><b>    7.21.7 Character input/output functions</b></a>
13273 <a name="7.21.7.1" href="#7.21.7.1"><b>    7.21.7.1 The fgetc function</b></a>
13274     Synopsis
13275 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13276             int fgetc(FILE *stream);
13277     Description
13278 2   If the end-of-file indicator for the input stream pointed to by stream is not set and a
13279     next character is present, the fgetc function obtains that character as an unsigned
13280     char converted to an int and advances the associated file position indicator for the
13281     stream (if defined).
13282     Returns
13283 3   If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-
13284     of-file indicator for the stream is set and the fgetc function returns EOF. Otherwise, the
13285     fgetc function returns the next character from the input stream pointed to by stream.
13286     If a read error occurs, the error indicator for the stream is set and the fgetc function
13287     returns EOF.278)
13288 <a name="7.21.7.2" href="#7.21.7.2"><b>    7.21.7.2 The fgets function</b></a>
13289     Synopsis
13290 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13291             char *fgets(char * restrict s, int n,
13292                  FILE * restrict stream);
13293     Description
13294 2   The fgets function reads at most one less than the number of characters specified by n
13295     from the stream pointed to by stream into the array pointed to by s. No additional
13296     characters are read after a new-line character (which is retained) or after end-of-file. A
13297     null character is written immediately after the last character read into the array.
13298     Returns
13299 3   The fgets function returns s if successful. If end-of-file is encountered and no
13300     characters have been read into the array, the contents of the array remain unchanged and a
13301     null pointer is returned. If a read error occurs during the operation, the array contents are
13302     indeterminate and a null pointer is returned.
13303
13304     278) An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
13305
13306 [<a name="#p329" href="p329">page 329</a>] (<a href="#Contents">Contents</a>)
13307
13308 <a name="7.21.7.3" href="#7.21.7.3"><b>    7.21.7.3 The fputc function</b></a>
13309     Synopsis
13310 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13311            int fputc(int c, FILE *stream);
13312     Description
13313 2   The fputc function writes the character specified by c (converted to an unsigned
13314     char) to the output stream pointed to by stream, at the position indicated by the
13315     associated file position indicator for the stream (if defined), and advances the indicator
13316     appropriately. If the file cannot support positioning requests, or if the stream was opened
13317     with append mode, the character is appended to the output stream.
13318     Returns
13319 3   The fputc function returns the character written. If a write error occurs, the error
13320     indicator for the stream is set and fputc returns EOF.
13321 <a name="7.21.7.4" href="#7.21.7.4"><b>    7.21.7.4 The fputs function</b></a>
13322     Synopsis
13323 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13324            int fputs(const char * restrict s,
13325                 FILE * restrict stream);
13326     Description
13327 2   The fputs function writes the string pointed to by s to the stream pointed to by
13328     stream. The terminating null character is not written.
13329     Returns
13330 3   The fputs function returns EOF if a write error occurs; otherwise it returns a
13331     nonnegative value.
13332 <a name="7.21.7.5" href="#7.21.7.5"><b>    7.21.7.5 The getc function</b></a>
13333     Synopsis
13334 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13335            int getc(FILE *stream);
13336     Description
13337 2   The getc function is equivalent to fgetc, except that if it is implemented as a macro, it
13338     may evaluate stream more than once, so the argument should never be an expression
13339     with side effects.
13340
13341
13342
13343
13344 [<a name="#p330" href="p330">page 330</a>] (<a href="#Contents">Contents</a>)
13345
13346     Returns
13347 3   The getc function returns the next character from the input stream pointed to by
13348     stream. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
13349     getc returns EOF. If a read error occurs, the error indicator for the stream is set and
13350     getc returns EOF.
13351 <a name="7.21.7.6" href="#7.21.7.6"><b>    7.21.7.6 The getchar function</b></a>
13352     Synopsis
13353 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13354             int getchar(void);
13355     Description
13356 2   The getchar function is equivalent to getc with the argument stdin.
13357     Returns
13358 3   The getchar function returns the next character from the input stream pointed to by
13359     stdin. If the stream is at end-of-file, the end-of-file indicator for the stream is set and
13360     getchar returns EOF. If a read error occurs, the error indicator for the stream is set and
13361     getchar returns EOF.
13362 <a name="7.21.7.7" href="#7.21.7.7"><b>    7.21.7.7 The putc function</b></a>
13363     Synopsis
13364 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13365             int putc(int c, FILE *stream);
13366     Description
13367 2   The putc function is equivalent to fputc, except that if it is implemented as a macro, it
13368     may evaluate stream more than once, so that argument should never be an expression
13369     with side effects.
13370     Returns
13371 3   The putc function returns the character written. If a write error occurs, the error
13372     indicator for the stream is set and putc returns EOF.
13373 <a name="7.21.7.8" href="#7.21.7.8"><b>    7.21.7.8 The putchar function</b></a>
13374     Synopsis
13375 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13376             int putchar(int c);
13377     Description
13378 2   The putchar function is equivalent to putc with the second argument stdout.
13379
13380
13381 [<a name="#p331" href="p331">page 331</a>] (<a href="#Contents">Contents</a>)
13382
13383     Returns
13384 3   The putchar function returns the character written. If a write error occurs, the error
13385     indicator for the stream is set and putchar returns EOF.
13386 <a name="7.21.7.9" href="#7.21.7.9"><b>    7.21.7.9 The puts function</b></a>
13387     Synopsis
13388 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13389            int puts(const char *s);
13390     Description
13391 2   The puts function writes the string pointed to by s to the stream pointed to by stdout,
13392     and appends a new-line character to the output. The terminating null character is not
13393     written.
13394     Returns
13395 3   The puts function returns EOF if a write error occurs; otherwise it returns a nonnegative
13396     value.
13397 <a name="7.21.7.10" href="#7.21.7.10"><b>    7.21.7.10 The ungetc function</b></a>
13398     Synopsis
13399 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13400            int ungetc(int c, FILE *stream);
13401     Description
13402 2   The ungetc function pushes the character specified by c (converted to an unsigned
13403     char) back onto the input stream pointed to by stream. Pushed-back characters will be
13404     returned by subsequent reads on that stream in the reverse order of their pushing. A
13405     successful intervening call (with the stream pointed to by stream) to a file positioning
13406     function (fseek, fsetpos, or rewind) discards any pushed-back characters for the
13407     stream. The external storage corresponding to the stream is unchanged.
13408 3   One character of pushback is guaranteed. If the ungetc function is called too many
13409     times on the same stream without an intervening read or file positioning operation on that
13410     stream, the operation may fail.
13411 4   If the value of c equals that of the macro EOF, the operation fails and the input stream is
13412     unchanged.
13413 5   A successful call to the ungetc function clears the end-of-file indicator for the stream.
13414     The value of the file position indicator for the stream after reading or discarding all
13415     pushed-back characters shall be the same as it was before the characters were pushed
13416     back. For a text stream, the value of its file position indicator after a successful call to the
13417     ungetc function is unspecified until all pushed-back characters are read or discarded.
13418
13419 [<a name="#p332" href="p332">page 332</a>] (<a href="#Contents">Contents</a>)
13420
13421     For a binary stream, its file position indicator is decremented by each successful call to
13422     the ungetc function; if its value was zero before a call, it is indeterminate after the
13423     call.279)
13424     Returns
13425 6   The ungetc function returns the character pushed back after conversion, or EOF if the
13426     operation fails.
13427     Forward references: file positioning functions (<a href="#7.21.9">7.21.9</a>).
13428 <a name="7.21.8" href="#7.21.8"><b>    7.21.8 Direct input/output functions</b></a>
13429 <a name="7.21.8.1" href="#7.21.8.1"><b>    7.21.8.1 The fread function</b></a>
13430     Synopsis
13431 1            #include <a href="#7.21">&lt;stdio.h&gt;</a>
13432              size_t fread(void * restrict ptr,
13433                   size_t size, size_t nmemb,
13434                   FILE * restrict stream);
13435     Description
13436 2   The fread function reads, into the array pointed to by ptr, up to nmemb elements
13437     whose size is specified by size, from the stream pointed to by stream. For each
13438     object, size calls are made to the fgetc function and the results stored, in the order
13439     read, in an array of unsigned char exactly overlaying the object. The file position
13440     indicator for the stream (if defined) is advanced by the number of characters successfully
13441     read. If an error occurs, the resulting value of the file position indicator for the stream is
13442     indeterminate. If a partial element is read, its value is indeterminate.
13443     Returns
13444 3   The fread function returns the number of elements successfully read, which may be
13445     less than nmemb if a read error or end-of-file is encountered. If size or nmemb is zero,
13446     fread returns zero and the contents of the array and the state of the stream remain
13447     unchanged.
13448
13449
13450
13451
13452     279) See ''future library directions'' (<a href="#7.30.9">7.30.9</a>).
13453
13454 [<a name="#p333" href="p333">page 333</a>] (<a href="#Contents">Contents</a>)
13455
13456 <a name="7.21.8.2" href="#7.21.8.2"><b>    7.21.8.2 The fwrite function</b></a>
13457     Synopsis
13458 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13459            size_t fwrite(const void * restrict ptr,
13460                 size_t size, size_t nmemb,
13461                 FILE * restrict stream);
13462     Description
13463 2   The fwrite function writes, from the array pointed to by ptr, up to nmemb elements
13464     whose size is specified by size, to the stream pointed to by stream. For each object,
13465     size calls are made to the fputc function, taking the values (in order) from an array of
13466     unsigned char exactly overlaying the object. The file position indicator for the
13467     stream (if defined) is advanced by the number of characters successfully written. If an
13468     error occurs, the resulting value of the file position indicator for the stream is
13469     indeterminate.
13470     Returns
13471 3   The fwrite function returns the number of elements successfully written, which will be
13472     less than nmemb only if a write error is encountered. If size or nmemb is zero,
13473     fwrite returns zero and the state of the stream remains unchanged.
13474 <a name="7.21.9" href="#7.21.9"><b>    7.21.9 File positioning functions</b></a>
13475 <a name="7.21.9.1" href="#7.21.9.1"><b>    7.21.9.1 The fgetpos function</b></a>
13476     Synopsis
13477 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13478            int fgetpos(FILE * restrict stream,
13479                 fpos_t * restrict pos);
13480     Description
13481 2   The fgetpos function stores the current values of the parse state (if any) and file
13482     position indicator for the stream pointed to by stream in the object pointed to by pos.
13483     The values stored contain unspecified information usable by the fsetpos function for
13484     repositioning the stream to its position at the time of the call to the fgetpos function.
13485     Returns
13486 3   If successful, the fgetpos function returns zero; on failure, the fgetpos function
13487     returns nonzero and stores an implementation-defined positive value in errno.
13488     Forward references: the fsetpos function (<a href="#7.21.9.3">7.21.9.3</a>).
13489
13490
13491
13492
13493 [<a name="#p334" href="p334">page 334</a>] (<a href="#Contents">Contents</a>)
13494
13495 <a name="7.21.9.2" href="#7.21.9.2"><b>    7.21.9.2 The fseek function</b></a>
13496     Synopsis
13497 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13498             int fseek(FILE *stream, long int offset, int whence);
13499     Description
13500 2   The fseek function sets the file position indicator for the stream pointed to by stream.
13501     If a read or write error occurs, the error indicator for the stream is set and fseek fails.
13502 3   For a binary stream, the new position, measured in characters from the beginning of the
13503     file, is obtained by adding offset to the position specified by whence. The specified
13504     position is the beginning of the file if whence is SEEK_SET, the current value of the file
13505     position indicator if SEEK_CUR, or end-of-file if SEEK_END. A binary stream need not
13506     meaningfully support fseek calls with a whence value of SEEK_END.
13507 4   For a text stream, either offset shall be zero, or offset shall be a value returned by
13508     an earlier successful call to the ftell function on a stream associated with the same file
13509     and whence shall be SEEK_SET.
13510 5   After determining the new position, a successful call to the fseek function undoes any
13511     effects of the ungetc function on the stream, clears the end-of-file indicator for the
13512     stream, and then establishes the new position. After a successful fseek call, the next
13513     operation on an update stream may be either input or output.
13514     Returns
13515 6   The fseek function returns nonzero only for a request that cannot be satisfied.
13516     Forward references: the ftell function (<a href="#7.21.9.4">7.21.9.4</a>).
13517 <a name="7.21.9.3" href="#7.21.9.3"><b>    7.21.9.3 The fsetpos function</b></a>
13518     Synopsis
13519 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13520             int fsetpos(FILE *stream, const fpos_t *pos);
13521     Description
13522 2   The fsetpos function sets the mbstate_t object (if any) and file position indicator
13523     for the stream pointed to by stream according to the value of the object pointed to by
13524     pos, which shall be a value obtained from an earlier successful call to the fgetpos
13525     function on a stream associated with the same file. If a read or write error occurs, the
13526     error indicator for the stream is set and fsetpos fails.
13527 3   A successful call to the fsetpos function undoes any effects of the ungetc function
13528     on the stream, clears the end-of-file indicator for the stream, and then establishes the new
13529     parse state and position. After a successful fsetpos call, the next operation on an
13530
13531 [<a name="#p335" href="p335">page 335</a>] (<a href="#Contents">Contents</a>)
13532
13533     update stream may be either input or output.
13534     Returns
13535 4   If successful, the fsetpos function returns zero; on failure, the fsetpos function
13536     returns nonzero and stores an implementation-defined positive value in errno.
13537 <a name="7.21.9.4" href="#7.21.9.4"><b>    7.21.9.4 The ftell function</b></a>
13538     Synopsis
13539 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13540            long int ftell(FILE *stream);
13541     Description
13542 2   The ftell function obtains the current value of the file position indicator for the stream
13543     pointed to by stream. For a binary stream, the value is the number of characters from
13544     the beginning of the file. For a text stream, its file position indicator contains unspecified
13545     information, usable by the fseek function for returning the file position indicator for the
13546     stream to its position at the time of the ftell call; the difference between two such
13547     return values is not necessarily a meaningful measure of the number of characters written
13548     or read.
13549     Returns
13550 3   If successful, the ftell function returns the current value of the file position indicator
13551     for the stream. On failure, the ftell function returns -1L and stores an
13552     implementation-defined positive value in errno.
13553 <a name="7.21.9.5" href="#7.21.9.5"><b>    7.21.9.5 The rewind function</b></a>
13554     Synopsis
13555 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13556            void rewind(FILE *stream);
13557     Description
13558 2   The rewind function sets the file position indicator for the stream pointed to by
13559     stream to the beginning of the file. It is equivalent to
13560            (void)fseek(stream, 0L, SEEK_SET)
13561     except that the error indicator for the stream is also cleared.
13562     Returns
13563 3   The rewind function returns no value.
13564
13565
13566
13567
13568 [<a name="#p336" href="p336">page 336</a>] (<a href="#Contents">Contents</a>)
13569
13570 <a name="7.21.10" href="#7.21.10"><b>    7.21.10 Error-handling functions</b></a>
13571 <a name="7.21.10.1" href="#7.21.10.1"><b>    7.21.10.1 The clearerr function</b></a>
13572     Synopsis
13573 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13574             void clearerr(FILE *stream);
13575     Description
13576 2   The clearerr function clears the end-of-file and error indicators for the stream pointed
13577     to by stream.
13578     Returns
13579 3   The clearerr function returns no value.
13580 <a name="7.21.10.2" href="#7.21.10.2"><b>    7.21.10.2 The feof function</b></a>
13581     Synopsis
13582 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13583             int feof(FILE *stream);
13584     Description
13585 2   The feof function tests the end-of-file indicator for the stream pointed to by stream.
13586     Returns
13587 3   The feof function returns nonzero if and only if the end-of-file indicator is set for
13588     stream.
13589 <a name="7.21.10.3" href="#7.21.10.3"><b>    7.21.10.3 The ferror function</b></a>
13590     Synopsis
13591 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
13592             int ferror(FILE *stream);
13593     Description
13594 2   The ferror function tests the error indicator for the stream pointed to by stream.
13595     Returns
13596 3   The ferror function returns nonzero if and only if the error indicator is set for
13597     stream.
13598
13599
13600
13601
13602 [<a name="#p337" href="p337">page 337</a>] (<a href="#Contents">Contents</a>)
13603
13604 <a name="7.21.10.4" href="#7.21.10.4"><b>    7.21.10.4 The perror function</b></a>
13605     Synopsis
13606 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
13607            void perror(const char *s);
13608     Description
13609 2   The perror function maps the error number in the integer expression errno to an
13610     error message. It writes a sequence of characters to the standard error stream thus: first
13611     (if s is not a null pointer and the character pointed to by s is not the null character), the
13612     string pointed to by s followed by a colon (:) and a space; then an appropriate error
13613     message string followed by a new-line character. The contents of the error message
13614     strings are the same as those returned by the strerror function with argument errno.
13615     Returns
13616 3   The perror function returns no value.
13617     Forward references: the strerror function (<a href="#7.23.6.2">7.23.6.2</a>).
13618
13619
13620
13621
13622 [<a name="#p338" href="p338">page 338</a>] (<a href="#Contents">Contents</a>)
13623
13624 <a name="7.22" href="#7.22"><b>    7.22 General utilities &lt;stdlib.h&gt;</b></a>
13625 1   The header <a href="#7.22">&lt;stdlib.h&gt;</a> declares five types and several functions of general utility, and
13626     defines several macros.280)
13627 2   The types declared are size_t and wchar_t (both described in <a href="#7.19">7.19</a>),
13628              div_t
13629     which is a structure type that is the type of the value returned by the div function,
13630              ldiv_t
13631     which is a structure type that is the type of the value returned by the ldiv function, and
13632              lldiv_t
13633     which is a structure type that is the type of the value returned by the lldiv function.
13634 3   The macros defined are NULL (described in <a href="#7.19">7.19</a>);
13635              EXIT_FAILURE
13636     and
13637              EXIT_SUCCESS
13638     which expand to integer constant expressions that can be used as the argument to the
13639     exit function to return unsuccessful or successful termination status, respectively, to the
13640     host environment;
13641              RAND_MAX
13642     which expands to an integer constant expression that is the maximum value returned by
13643     the rand function; and
13644              MB_CUR_MAX
13645     which expands to a positive integer expression with type size_t that is the maximum
13646     number of bytes in a multibyte character for the extended character set specified by the
13647     current locale (category LC_CTYPE), which is never greater than MB_LEN_MAX.
13648
13649
13650
13651
13652     280) See ''future library directions'' (<a href="#7.30.10">7.30.10</a>).
13653
13654 [<a name="#p339" href="p339">page 339</a>] (<a href="#Contents">Contents</a>)
13655
13656 <a name="7.22.1" href="#7.22.1"><b>    7.22.1 Numeric conversion functions</b></a>
13657 1   The functions atof, atoi, atol, and atoll need not affect the value of the integer
13658     expression errno on an error. If the value of the result cannot be represented, the
13659     behavior is undefined.
13660 <a name="7.22.1.1" href="#7.22.1.1"><b>    7.22.1.1 The atof function</b></a>
13661     Synopsis
13662 1          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13663            double atof(const char *nptr);
13664     Description
13665 2   The atof function converts the initial portion of the string pointed to by nptr to
13666     double representation. Except for the behavior on error, it is equivalent to
13667            strtod(nptr, (char **)NULL)
13668     Returns
13669 3   The atof function returns the converted value.
13670     Forward references: the strtod, strtof, and strtold functions (<a href="#7.22.1.3">7.22.1.3</a>).
13671 <a name="7.22.1.2" href="#7.22.1.2"><b>    7.22.1.2 The atoi, atol, and atoll functions</b></a>
13672     Synopsis
13673 1          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13674            int atoi(const char *nptr);
13675            long int atol(const char *nptr);
13676            long long int atoll(const char *nptr);
13677     Description
13678 2   The atoi, atol, and atoll functions convert the initial portion of the string pointed
13679     to by nptr to int, long int, and long long int representation, respectively.
13680     Except for the behavior on error, they are equivalent to
13681            atoi: (int)strtol(nptr, (char **)NULL, 10)
13682            atol: strtol(nptr, (char **)NULL, 10)
13683            atoll: strtoll(nptr, (char **)NULL, 10)
13684     Returns
13685 3   The atoi, atol, and atoll functions return the converted value.
13686     Forward references: the strtol, strtoll, strtoul, and strtoull functions
13687     (<a href="#7.22.1.4">7.22.1.4</a>).
13688
13689
13690
13691 [<a name="#p340" href="p340">page 340</a>] (<a href="#Contents">Contents</a>)
13692
13693 <a name="7.22.1.3" href="#7.22.1.3"><b>    7.22.1.3 The strtod, strtof, and strtold functions</b></a>
13694     Synopsis
13695 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13696             double strtod(const char * restrict nptr,
13697                  char ** restrict endptr);
13698             float strtof(const char * restrict nptr,
13699                  char ** restrict endptr);
13700             long double strtold(const char * restrict nptr,
13701                  char ** restrict endptr);
13702     Description
13703 2   The strtod, strtof, and strtold functions convert the initial portion of the string
13704     pointed to by nptr to double, float, and long double representation,
13705     respectively. First, they decompose the input string into three parts: an initial, possibly
13706     empty, sequence of white-space characters (as specified by the isspace function), a
13707     subject sequence resembling a floating-point constant or representing an infinity or NaN;
13708     and a final string of one or more unrecognized characters, including the terminating null
13709     character of the input string. Then, they attempt to convert the subject sequence to a
13710     floating-point number, and return the result.
13711 3   The expected form of the subject sequence is an optional plus or minus sign, then one of
13712     the following:
13713     -- a nonempty sequence of decimal digits optionally containing a decimal-point
13714       character, then an optional exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
13715     -- a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
13716       decimal-point character, then an optional binary exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
13717     -- INF or INFINITY, ignoring case
13718     -- NAN or NAN(n-char-sequenceopt), ignoring case in the NAN part, where:
13719                n-char-sequence:
13720                       digit
13721                       nondigit
13722                       n-char-sequence digit
13723                       n-char-sequence nondigit
13724     The subject sequence is defined as the longest initial subsequence of the input string,
13725     starting with the first non-white-space character, that is of the expected form. The subject
13726     sequence contains no characters if the input string is not of the expected form.
13727 4   If the subject sequence has the expected form for a floating-point number, the sequence of
13728     characters starting with the first digit or the decimal-point character (whichever occurs
13729     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
13730 [<a name="#p341" href="p341">page 341</a>] (<a href="#Contents">Contents</a>)
13731
13732     decimal-point character is used in place of a period, and that if neither an exponent part
13733     nor a decimal-point character appears in a decimal floating point number, or if a binary
13734     exponent part does not appear in a hexadecimal floating point number, an exponent part
13735     of the appropriate type with value zero is assumed to follow the last digit in the string. If
13736     the subject sequence begins with a minus sign, the sequence is interpreted as negated.281)
13737     A character sequence INF or INFINITY is interpreted as an infinity, if representable in
13738     the return type, else like a floating constant that is too large for the range of the return
13739     type. A character sequence NAN or NAN(n-char-sequenceopt), is interpreted as a quiet
13740     NaN, if supported in the return type, else like a subject sequence part that does not have
13741     the expected form; the meaning of the n-char sequences is implementation-defined.282) A
13742     pointer to the final string is stored in the object pointed to by endptr, provided that
13743     endptr is not a null pointer.
13744 5   If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
13745     value resulting from the conversion is correctly rounded.
13746 6   In other than the "C" locale, additional locale-specific subject sequence forms may be
13747     accepted.
13748 7   If the subject sequence is empty or does not have the expected form, no conversion is
13749     performed; the value of nptr is stored in the object pointed to by endptr, provided
13750     that endptr is not a null pointer.
13751     Recommended practice
13752 8   If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
13753     the result is not exactly representable, the result should be one of the two numbers in the
13754     appropriate internal format that are adjacent to the hexadecimal floating source value,
13755     with the extra stipulation that the error should have a correct sign for the current rounding
13756     direction.
13757 9   If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in
13758     <a href="#7.7">&lt;float.h&gt;</a>) significant digits, the result should be correctly rounded. If the subject
13759     sequence D has the decimal form and more than DECIMAL_DIG significant digits,
13760     consider the two bounding, adjacent decimal strings L and U, both having
13761     DECIMAL_DIG significant digits, such that the values of L, D, and U satisfy L &lt;= D &lt;= U.
13762     The result should be one of the (equal or adjacent) values that would be obtained by
13763     correctly rounding L and U according to the current rounding direction, with the extra
13764
13765     281) It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
13766          negating the value resulting from converting the corresponding unsigned sequence (see <a href="#F.5">F.5</a>); the two
13767          methods may yield different results if rounding is toward positive or negative infinity. In either case,
13768          the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
13769     282) An implementation may use the n-char sequence to determine extra information to be represented in
13770          the NaN's significand.
13771
13772 [<a name="#p342" href="p342">page 342</a>] (<a href="#Contents">Contents</a>)
13773
13774      stipulation that the error with respect to D should have a correct sign for the current
13775      rounding direction.283)
13776      Returns
13777 10   The functions return the converted value, if any. If no conversion could be performed,
13778      zero is returned. If the correct value overflows and default rounding is in effect (<a href="#7.12.1">7.12.1</a>),
13779      plus or minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the
13780      return type and sign of the value), and the value of the macro ERANGE is stored in
13781      errno. If the result underflows (<a href="#7.12.1">7.12.1</a>), the functions return a value whose magnitude is
13782      no greater than the smallest normalized positive number in the return type; whether
13783      errno acquires the value ERANGE is implementation-defined.
13784 <a name="7.22.1.4" href="#7.22.1.4"><b>     7.22.1.4 The strtol, strtoll, strtoul, and strtoull functions</b></a>
13785      Synopsis
13786 1            #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13787              long int strtol(
13788                   const char * restrict nptr,
13789                   char ** restrict endptr,
13790                   int base);
13791              long long int strtoll(
13792                   const char * restrict nptr,
13793                   char ** restrict endptr,
13794                   int base);
13795              unsigned long int strtoul(
13796                   const char * restrict nptr,
13797                   char ** restrict endptr,
13798                   int base);
13799              unsigned long long int strtoull(
13800                   const char * restrict nptr,
13801                   char ** restrict endptr,
13802                   int base);
13803      Description
13804 2    The strtol, strtoll, strtoul, and strtoull functions convert the initial
13805      portion of the string pointed to by nptr to long int, long long int, unsigned
13806      long int, and unsigned long long int representation, respectively. First,
13807      they decompose the input string into three parts: an initial, possibly empty, sequence of
13808      white-space characters (as specified by the isspace function), a subject sequence
13809
13810
13811      283) DECIMAL_DIG, defined in <a href="#7.7">&lt;float.h&gt;</a>, should be sufficiently large that L and U will usually round
13812           to the same internal floating value, but if not will round to adjacent values.
13813
13814 [<a name="#p343" href="p343">page 343</a>] (<a href="#Contents">Contents</a>)
13815
13816     resembling an integer represented in some radix determined by the value of base, and a
13817     final string of one or more unrecognized characters, including the terminating null
13818     character of the input string. Then, they attempt to convert the subject sequence to an
13819     integer, and return the result.
13820 3   If the value of base is zero, the expected form of the subject sequence is that of an
13821     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
13822     not including an integer suffix. If the value of base is between 2 and 36 (inclusive), the
13823     expected form of the subject sequence is a sequence of letters and digits representing an
13824     integer with the radix specified by base, optionally preceded by a plus or minus sign,
13825     but not including an integer suffix. The letters from a (or A) through z (or Z) are
13826     ascribed the values 10 through 35; only letters and digits whose ascribed values are less
13827     than that of base are permitted. If the value of base is 16, the characters 0x or 0X may
13828     optionally precede the sequence of letters and digits, following the sign if present.
13829 4   The subject sequence is defined as the longest initial subsequence of the input string,
13830     starting with the first non-white-space character, that is of the expected form. The subject
13831     sequence contains no characters if the input string is empty or consists entirely of white
13832     space, or if the first non-white-space character is other than a sign or a permissible letter
13833     or digit.
13834 5   If the subject sequence has the expected form and the value of base is zero, the sequence
13835     of characters starting with the first digit is interpreted as an integer constant according to
13836     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
13837     is between 2 and 36, it is used as the base for conversion, ascribing to each letter its value
13838     as given above. If the subject sequence begins with a minus sign, the value resulting from
13839     the conversion is negated (in the return type). A pointer to the final string is stored in the
13840     object pointed to by endptr, provided that endptr is not a null pointer.
13841 6   In other than the "C" locale, additional locale-specific subject sequence forms may be
13842     accepted.
13843 7   If the subject sequence is empty or does not have the expected form, no conversion is
13844     performed; the value of nptr is stored in the object pointed to by endptr, provided
13845     that endptr is not a null pointer.
13846     Returns
13847 8   The strtol, strtoll, strtoul, and strtoull functions return the converted
13848     value, if any. If no conversion could be performed, zero is returned. If the correct value
13849     is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
13850     LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
13851     and sign of the value, if any), and the value of the macro ERANGE is stored in errno.
13852
13853
13854
13855
13856 [<a name="#p344" href="p344">page 344</a>] (<a href="#Contents">Contents</a>)
13857
13858 <a name="7.22.2" href="#7.22.2"><b>    7.22.2 Pseudo-random sequence generation functions</b></a>
13859 <a name="7.22.2.1" href="#7.22.2.1"><b>    7.22.2.1 The rand function</b></a>
13860     Synopsis
13861 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13862             int rand(void);
13863     Description
13864 2   The rand function computes a sequence of pseudo-random integers in the range 0 to
13865     RAND_MAX.284)
13866 3   The rand function is not required to avoid data races. The implementation shall behave
13867     as if no library function calls the rand function.
13868     Returns
13869 4   The rand function returns a pseudo-random integer.
13870     Environmental limits
13871 5   The value of the RAND_MAX macro shall be at least 32767.
13872 <a name="7.22.2.2" href="#7.22.2.2"><b>    7.22.2.2 The srand function</b></a>
13873     Synopsis
13874 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13875             void srand(unsigned int seed);
13876     Description
13877 2   The srand function uses the argument as a seed for a new sequence of pseudo-random
13878     numbers to be returned by subsequent calls to rand. If srand is then called with the
13879     same seed value, the sequence of pseudo-random numbers shall be repeated. If rand is
13880     called before any calls to srand have been made, the same sequence shall be generated
13881     as when srand is first called with a seed value of 1.
13882 3   The implementation shall behave as if no library function calls the srand function.
13883     Returns
13884 4   The srand function returns no value.
13885
13886
13887
13888
13889     284) There are no guarantees as to the quality of the random sequence produced and some implementations
13890          are known to produce sequences with distressingly non-random low-order bits. Applications with
13891          particular requirements should use a generator that is known to be sufficient for their needs.
13892
13893 [<a name="#p345" href="p345">page 345</a>] (<a href="#Contents">Contents</a>)
13894
13895 5   EXAMPLE       The following functions define a portable implementation of rand and srand.
13896            static unsigned long int next = 1;
13897            int rand(void)   // RAND_MAX assumed to be 32767
13898            {
13899                  next = next * 1103515245 + 12345;
13900                  return (unsigned int)(next/65536) % 32768;
13901            }
13902            void srand(unsigned int seed)
13903            {
13904                  next = seed;
13905            }
13906
13907 <a name="7.22.3" href="#7.22.3"><b>    7.22.3 Memory management functions</b></a>
13908 1   The order and contiguity of storage allocated by successive calls to the
13909     aligned_alloc, calloc, malloc, and realloc functions is unspecified. The
13910     pointer returned if the allocation succeeds is suitably aligned so that it may be assigned to
13911     a pointer to any type of object with a fundamental alignment requirement and then used
13912     to access such an object or an array of such objects in the space allocated (until the space
13913     is explicitly deallocated). The lifetime of an allocated object extends from the allocation
13914     until the deallocation. Each such allocation shall yield a pointer to an object disjoint from
13915     any other object. The pointer returned points to the start (lowest byte address) of the
13916     allocated space. If the space cannot be allocated, a null pointer is returned. If the size of
13917     the space requested is zero, the behavior is implementation-defined: either a null pointer
13918     is returned, or the behavior is as if the size were some nonzero value, except that the
13919     returned pointer shall not be used to access an object.
13920 <a name="7.22.3.1" href="#7.22.3.1"><b>    7.22.3.1 The aligned_alloc function</b></a>
13921     Synopsis
13922 1          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13923            void *aligned_alloc(size_t alignment, size_t size);
13924     Description
13925 2   The aligned_alloc function allocates space for an object whose alignment is
13926     specified by alignment, whose size is specified by size, and whose value is
13927     indeterminate. The value of alignment shall be a valid alignment supported by the
13928     implementation and the value of size shall be an integral multiple of alignment.
13929     Returns
13930 3   The aligned_alloc function returns either a null pointer or a pointer to the allocated
13931     space.
13932
13933
13934
13935
13936 [<a name="#p346" href="p346">page 346</a>] (<a href="#Contents">Contents</a>)
13937
13938 <a name="7.22.3.2" href="#7.22.3.2"><b>    7.22.3.2 The calloc function</b></a>
13939     Synopsis
13940 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13941             void *calloc(size_t nmemb, size_t size);
13942     Description
13943 2   The calloc function allocates space for an array of nmemb objects, each of whose size
13944     is size. The space is initialized to all bits zero.285)
13945     Returns
13946 3   The calloc function returns either a null pointer or a pointer to the allocated space.
13947 <a name="7.22.3.3" href="#7.22.3.3"><b>    7.22.3.3 The free function</b></a>
13948     Synopsis
13949 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13950             void free(void *ptr);
13951     Description
13952 2   The free function causes the space pointed to by ptr to be deallocated, that is, made
13953     available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if
13954     the argument does not match a pointer earlier returned by a memory management
13955     function, or if the space has been deallocated by a call to free or realloc, the
13956     behavior is undefined.
13957     Returns
13958 3   The free function returns no value.
13959 <a name="7.22.3.4" href="#7.22.3.4"><b>    7.22.3.4 The malloc function</b></a>
13960     Synopsis
13961 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13962             void *malloc(size_t size);
13963     Description
13964 2   The malloc function allocates space for an object whose size is specified by size and
13965     whose value is indeterminate.
13966
13967
13968
13969
13970     285) Note that this need not be the same as the representation of floating-point zero or a null pointer
13971          constant.
13972
13973 [<a name="#p347" href="p347">page 347</a>] (<a href="#Contents">Contents</a>)
13974
13975     Returns
13976 3   The malloc function returns either a null pointer or a pointer to the allocated space.
13977 <a name="7.22.3.5" href="#7.22.3.5"><b>    7.22.3.5 The realloc function</b></a>
13978     Synopsis
13979 1          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
13980            void *realloc(void *ptr, size_t size);
13981     Description
13982 2   The realloc function deallocates the old object pointed to by ptr and returns a
13983     pointer to a new object that has the size specified by size. The contents of the new
13984     object shall be the same as that of the old object prior to deallocation, up to the lesser of
13985     the new and old sizes. Any bytes in the new object beyond the size of the old object have
13986     indeterminate values.
13987 3   If ptr is a null pointer, the realloc function behaves like the malloc function for the
13988     specified size. Otherwise, if ptr does not match a pointer earlier returned by a memory
13989     management function, or if the space has been deallocated by a call to the free or
13990     realloc function, the behavior is undefined. If memory for the new object cannot be
13991     allocated, the old object is not deallocated and its value is unchanged.
13992     Returns
13993 4   The realloc function returns a pointer to the new object (which may have the same
13994     value as a pointer to the old object), or a null pointer if the new object could not be
13995     allocated.
13996 <a name="7.22.4" href="#7.22.4"><b>    7.22.4 Communication with the environment</b></a>
13997 <a name="7.22.4.1" href="#7.22.4.1"><b>    7.22.4.1 The abort function</b></a>
13998     Synopsis
13999 1          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14000            _Noreturn void abort(void);
14001     Description
14002 2   The abort function causes abnormal program termination to occur, unless the signal
14003     SIGABRT is being caught and the signal handler does not return. Whether open streams
14004     with unwritten buffered data are flushed, open streams are closed, or temporary files are
14005     removed is implementation-defined. An implementation-defined form of the status
14006     unsuccessful termination is returned to the host environment by means of the function
14007     call raise(SIGABRT).
14008
14009
14010
14011
14012 [<a name="#p348" href="p348">page 348</a>] (<a href="#Contents">Contents</a>)
14013
14014     Returns
14015 3   The abort function does not return to its caller.
14016 <a name="7.22.4.2" href="#7.22.4.2"><b>    7.22.4.2 The atexit function</b></a>
14017     Synopsis
14018 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14019             int atexit(void (*func)(void));
14020     Description
14021 2   The atexit function registers the function pointed to by func, to be called without
14022     arguments at normal program termination.286)
14023     Environmental limits
14024 3   The implementation shall support the registration of at least 32 functions.
14025     Returns
14026 4   The atexit function returns zero if the registration succeeds, nonzero if it fails.
14027     Forward references: the at_quick_exit function (<a href="#7.22.4.3">7.22.4.3</a>), the exit function
14028     (<a href="#7.22.4.4">7.22.4.4</a>).
14029 <a name="7.22.4.3" href="#7.22.4.3"><b>    7.22.4.3 The at_quick_exit function</b></a>
14030     Synopsis
14031 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14032             int at_quick_exit(void (*func)(void));
14033     Description
14034 2   The at_quick_exit function registers the function pointed to by func, to be called
14035     without arguments should quick_exit be called.287)
14036     Environmental limits
14037 3   The implementation shall support the registration of at least 32 functions.
14038     Returns
14039 4   The at_quick_exit function returns zero if the registration succeeds, nonzero if it
14040     fails.
14041     Forward references: the quick_exit function (<a href="#7.22.4.7">7.22.4.7</a>).
14042
14043     286) The atexit function registrations are distinct from the at_quick_exit registrations, so
14044          applications may need to call both registration functions with the same argument.
14045     287) The at_quick_exit function registrations are distinct from the atexit registrations, so
14046          applications may need to call both registration functions with the same argument.
14047
14048 [<a name="#p349" href="p349">page 349</a>] (<a href="#Contents">Contents</a>)
14049
14050 <a name="7.22.4.4" href="#7.22.4.4"><b>    7.22.4.4 The exit function</b></a>
14051     Synopsis
14052 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14053             _Noreturn void exit(int status);
14054     Description
14055 2   The exit function causes normal program termination to occur. No functions registered
14056     by the at_quick_exit function are called. If a program calls the exit function
14057     more than once, or calls the quick_exit function in addition to the exit function, the
14058     behavior is undefined.
14059 3   First, all functions registered by the atexit function are called, in the reverse order of
14060     their registration,288) except that a function is called after any previously registered
14061     functions that had already been called at the time it was registered. If, during the call to
14062     any such function, a call to the longjmp function is made that would terminate the call
14063     to the registered function, the behavior is undefined.
14064 4   Next, all open streams with unwritten buffered data are flushed, all open streams are
14065     closed, and all files created by the tmpfile function are removed.
14066 5   Finally, control is returned to the host environment. If the value of status is zero or
14067     EXIT_SUCCESS, an implementation-defined form of the status successful termination is
14068     returned. If the value of status is EXIT_FAILURE, an implementation-defined form
14069     of the status unsuccessful termination is returned. Otherwise the status returned is
14070     implementation-defined.
14071     Returns
14072 6   The exit function cannot return to its caller.
14073 <a name="7.22.4.5" href="#7.22.4.5"><b>    7.22.4.5 The _Exit function</b></a>
14074     Synopsis
14075 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14076             _Noreturn void _Exit(int status);
14077     Description
14078 2   The _Exit function causes normal program termination to occur and control to be
14079     returned to the host environment. No functions registered by the atexit function, the
14080     at_quick_exit function, or signal handlers registered by the signal function are
14081     called. The status returned to the host environment is determined in the same way as for
14082
14083
14084     288) Each function is called as many times as it was registered, and in the correct order with respect to
14085          other registered functions.
14086
14087 [<a name="#p350" href="p350">page 350</a>] (<a href="#Contents">Contents</a>)
14088
14089     the exit function (<a href="#7.22.4.4">7.22.4.4</a>). Whether open streams with unwritten buffered data are
14090     flushed, open streams are closed, or temporary files are removed is implementation-
14091     defined.
14092     Returns
14093 3   The _Exit function cannot return to its caller.
14094 <a name="7.22.4.6" href="#7.22.4.6"><b>    7.22.4.6 The getenv function</b></a>
14095     Synopsis
14096 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14097             char *getenv(const char *name);
14098     Description
14099 2   The getenv function searches an environment list, provided by the host environment,
14100     for a string that matches the string pointed to by name. The set of environment names
14101     and the method for altering the environment list are implementation-defined. The
14102     getenv function need not avoid data races with other threads of execution that modify
14103     the environment list.289)
14104 3   The implementation shall behave as if no library function calls the getenv function.
14105     Returns
14106 4   The getenv function returns a pointer to a string associated with the matched list
14107     member. The string pointed to shall not be modified by the program, but may be
14108     overwritten by a subsequent call to the getenv function. If the specified name cannot
14109     be found, a null pointer is returned.
14110 <a name="7.22.4.7" href="#7.22.4.7"><b>    7.22.4.7 The quick_exit function</b></a>
14111     Synopsis
14112 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14113             _Noreturn void quick_exit(int status);
14114     Description
14115 2   The quick_exit function causes normal program termination to occur. No functions
14116     registered by the atexit function or signal handlers registered by the signal function
14117     are called. If a program calls the quick_exit function more than once, or calls the
14118     exit function in addition to the quick_exit function, the behavior is undefined.
14119 3   The quick_exit function first calls all functions registered by the at_quick_exit
14120     function, in the reverse order of their registration,290) except that a function is called after
14121
14122
14123     289) Many implementations provide non-standard functions that modify the environment list.
14124
14125 [<a name="#p351" href="p351">page 351</a>] (<a href="#Contents">Contents</a>)
14126
14127     any previously registered functions that had already been called at the time it was
14128     registered. If, during the call to any such function, a call to the longjmp function is
14129     made that would terminate the call to the registered function, the behavior is undefined.
14130 4   Then control is returned to the host environment by means of the function call
14131     _Exit(status).
14132     Returns
14133 5   The quick_exit function cannot return to its caller.
14134 <a name="7.22.4.8" href="#7.22.4.8"><b>    7.22.4.8 The system function</b></a>
14135     Synopsis
14136 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14137             int system(const char *string);
14138     Description
14139 2   If string is a null pointer, the system function determines whether the host
14140     environment has a command processor. If string is not a null pointer, the system
14141     function passes the string pointed to by string to that command processor to be
14142     executed in a manner which the implementation shall document; this might then cause the
14143     program calling system to behave in a non-conforming manner or to terminate.
14144     Returns
14145 3   If the argument is a null pointer, the system function returns nonzero only if a
14146     command processor is available. If the argument is not a null pointer, and the system
14147     function does return, it returns an implementation-defined value.
14148 <a name="7.22.5" href="#7.22.5"><b>    7.22.5 Searching and sorting utilities</b></a>
14149 1   These utilities make use of a comparison function to search or sort arrays of unspecified
14150     type. Where an argument declared as size_t nmemb specifies the length of the array
14151     for a function, nmemb can have the value zero on a call to that function; the comparison
14152     function is not called, a search finds no matching element, and sorting performs no
14153     rearrangement. Pointer arguments on such a call shall still have valid values, as described
14154     in <a href="#7.1.4">7.1.4</a>.
14155 2   The implementation shall ensure that the second argument of the comparison function
14156     (when called from bsearch), or both arguments (when called from qsort), are
14157     pointers to elements of the array.291) The first argument when called from bsearch
14158     shall equal key.
14159
14160
14161
14162     290) Each function is called as many times as it was registered, and in the correct order with respect to
14163          other registered functions.
14164
14165 [<a name="#p352" href="p352">page 352</a>] (<a href="#Contents">Contents</a>)
14166
14167 3   The comparison function shall not alter the contents of the array. The implementation
14168     may reorder elements of the array between calls to the comparison function, but shall not
14169     alter the contents of any individual element.
14170 4   When the same objects (consisting of size bytes, irrespective of their current positions
14171     in the array) are passed more than once to the comparison function, the results shall be
14172     consistent with one another. That is, for qsort they shall define a total ordering on the
14173     array, and for bsearch the same object shall always compare the same way with the
14174     key.
14175 5   A sequence point occurs immediately before and immediately after each call to the
14176     comparison function, and also between any call to the comparison function and any
14177     movement of the objects passed as arguments to that call.
14178 <a name="7.22.5.1" href="#7.22.5.1"><b>    7.22.5.1 The bsearch function</b></a>
14179     Synopsis
14180 1            #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14181              void *bsearch(const void *key, const void *base,
14182                   size_t nmemb, size_t size,
14183                   int (*compar)(const void *, const void *));
14184     Description
14185 2   The bsearch function searches an array of nmemb objects, the initial element of which
14186     is pointed to by base, for an element that matches the object pointed to by key. The
14187     size of each element of the array is specified by size.
14188 3   The comparison function pointed to by compar is called with two arguments that point
14189     to the key object and to an array element, in that order. The function shall return an
14190     integer less than, equal to, or greater than zero if the key object is considered,
14191     respectively, to be less than, to match, or to be greater than the array element. The array
14192     shall consist of: all the elements that compare less than, all the elements that compare
14193     equal to, and all the elements that compare greater than the key object, in that order.292)
14194     Returns
14195 4   The bsearch function returns a pointer to a matching element of the array, or a null
14196     pointer if no match is found. If two elements compare as equal, which element is
14197
14198
14199     291) That is, if the value passed is p, then the following expressions are always nonzero:
14200                   ((char *)p - (char *)base) % size == 0
14201                   (char *)p &gt;= (char *)base
14202                   (char *)p &lt; (char *)base + nmemb * size
14203
14204     292) In practice, the entire array is sorted according to the comparison function.
14205
14206 [<a name="#p353" href="p353">page 353</a>] (<a href="#Contents">Contents</a>)
14207
14208     matched is unspecified.
14209 <a name="7.22.5.2" href="#7.22.5.2"><b>    7.22.5.2 The qsort function</b></a>
14210     Synopsis
14211 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14212             void qsort(void *base, size_t nmemb, size_t size,
14213                  int (*compar)(const void *, const void *));
14214     Description
14215 2   The qsort function sorts an array of nmemb objects, the initial element of which is
14216     pointed to by base. The size of each object is specified by size.
14217 3   The contents of the array are sorted into ascending order according to a comparison
14218     function pointed to by compar, which is called with two arguments that point to the
14219     objects being compared. The function shall return an integer less than, equal to, or
14220     greater than zero if the first argument is considered to be respectively less than, equal to,
14221     or greater than the second.
14222 4   If two elements compare as equal, their order in the resulting sorted array is unspecified.
14223     Returns
14224 5   The qsort function returns no value.
14225 <a name="7.22.6" href="#7.22.6"><b>    7.22.6 Integer arithmetic functions</b></a>
14226 <a name="7.22.6.1" href="#7.22.6.1"><b>    7.22.6.1 The abs, labs and llabs functions</b></a>
14227     Synopsis
14228 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14229             int abs(int j);
14230             long int labs(long int j);
14231             long long int llabs(long long int j);
14232     Description
14233 2   The abs, labs, and llabs functions compute the absolute value of an integer j. If the
14234     result cannot be represented, the behavior is undefined.293)
14235     Returns
14236 3   The abs, labs, and llabs, functions return the absolute value.
14237
14238
14239
14240
14241     293) The absolute value of the most negative number cannot be represented in two's complement.
14242
14243 [<a name="#p354" href="p354">page 354</a>] (<a href="#Contents">Contents</a>)
14244
14245 <a name="7.22.6.2" href="#7.22.6.2"><b>    7.22.6.2 The div, ldiv, and lldiv functions</b></a>
14246     Synopsis
14247 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14248             div_t div(int numer, int denom);
14249             ldiv_t ldiv(long int numer, long int denom);
14250             lldiv_t lldiv(long long int numer, long long int denom);
14251     Description
14252 2   The div, ldiv, and lldiv, functions compute numer / denom and numer %
14253     denom in a single operation.
14254     Returns
14255 3   The div, ldiv, and lldiv functions return a structure of type div_t, ldiv_t, and
14256     lldiv_t, respectively, comprising both the quotient and the remainder. The structures
14257     shall contain (in either order) the members quot (the quotient) and rem (the remainder),
14258     each of which has the same type as the arguments numer and denom. If either part of
14259     the result cannot be represented, the behavior is undefined.
14260 <a name="7.22.7" href="#7.22.7"><b>    7.22.7 Multibyte/wide character conversion functions</b></a>
14261 1   The behavior of the multibyte character functions is affected by the LC_CTYPE category
14262     of the current locale. For a state-dependent encoding, each function is placed into its
14263     initial conversion state at program startup and can be returned to that state by a call for
14264     which its character pointer argument, s, is a null pointer. Subsequent calls with s as
14265     other than a null pointer cause the internal conversion state of the function to be altered as
14266     necessary. A call with s as a null pointer causes these functions to return a nonzero value
14267     if encodings have state dependency, and zero otherwise.294) Changing the LC_CTYPE
14268     category causes the conversion state of these functions to be indeterminate.
14269 <a name="7.22.7.1" href="#7.22.7.1"><b>    7.22.7.1 The mblen function</b></a>
14270     Synopsis
14271 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14272             int mblen(const char *s, size_t n);
14273     Description
14274 2   If s is not a null pointer, the mblen function determines the number of bytes contained
14275     in the multibyte character pointed to by s. Except that the conversion state of the
14276     mbtowc function is not affected, it is equivalent to
14277
14278
14279
14280     294) If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
14281          character codes, but are grouped with an adjacent multibyte character.
14282
14283 [<a name="#p355" href="p355">page 355</a>] (<a href="#Contents">Contents</a>)
14284
14285            mbtowc((wchar_t *)0, (const char *)0, 0);
14286            mbtowc((wchar_t *)0, s, n);
14287 3   The implementation shall behave as if no library function calls the mblen function.
14288     Returns
14289 4   If s is a null pointer, the mblen function returns a nonzero or zero value, if multibyte
14290     character encodings, respectively, do or do not have state-dependent encodings. If s is
14291     not a null pointer, the mblen function either returns 0 (if s points to the null character),
14292     or returns the number of bytes that are contained in the multibyte character (if the next n
14293     or fewer bytes form a valid multibyte character), or returns -1 (if they do not form a valid
14294     multibyte character).
14295     Forward references: the mbtowc function (<a href="#7.22.7.2">7.22.7.2</a>).
14296 <a name="7.22.7.2" href="#7.22.7.2"><b>    7.22.7.2 The mbtowc function</b></a>
14297     Synopsis
14298 1          #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14299            int mbtowc(wchar_t * restrict pwc,
14300                 const char * restrict s,
14301                 size_t n);
14302     Description
14303 2   If s is not a null pointer, the mbtowc function inspects at most n bytes beginning with
14304     the byte pointed to by s to determine the number of bytes needed to complete the next
14305     multibyte character (including any shift sequences). If the function determines that the
14306     next multibyte character is complete and valid, it determines the value of the
14307     corresponding wide character and then, if pwc is not a null pointer, stores that value in
14308     the object pointed to by pwc. If the corresponding wide character is the null wide
14309     character, the function is left in the initial conversion state.
14310 3   The implementation shall behave as if no library function calls the mbtowc function.
14311     Returns
14312 4   If s is a null pointer, the mbtowc function returns a nonzero or zero value, if multibyte
14313     character encodings, respectively, do or do not have state-dependent encodings. If s is
14314     not a null pointer, the mbtowc function either returns 0 (if s points to the null character),
14315     or returns the number of bytes that are contained in the converted multibyte character (if
14316     the next n or fewer bytes form a valid multibyte character), or returns -1 (if they do not
14317     form a valid multibyte character).
14318 5   In no case will the value returned be greater than n or the value of the MB_CUR_MAX
14319     macro.
14320
14321
14322 [<a name="#p356" href="p356">page 356</a>] (<a href="#Contents">Contents</a>)
14323
14324 <a name="7.22.7.3" href="#7.22.7.3"><b>    7.22.7.3 The wctomb function</b></a>
14325     Synopsis
14326 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14327             int wctomb(char *s, wchar_t wc);
14328     Description
14329 2   The wctomb function determines the number of bytes needed to represent the multibyte
14330     character corresponding to the wide character given by wc (including any shift
14331     sequences), and stores the multibyte character representation in the array whose first
14332     element is pointed to by s (if s is not a null pointer). At most MB_CUR_MAX characters
14333     are stored. If wc is a null wide character, a null byte is stored, preceded by any shift
14334     sequence needed to restore the initial shift state, and the function is left in the initial
14335     conversion state.
14336 3   The implementation shall behave as if no library function calls the wctomb function.
14337     Returns
14338 4   If s is a null pointer, the wctomb function returns a nonzero or zero value, if multibyte
14339     character encodings, respectively, do or do not have state-dependent encodings. If s is
14340     not a null pointer, the wctomb function returns -1 if the value of wc does not correspond
14341     to a valid multibyte character, or returns the number of bytes that are contained in the
14342     multibyte character corresponding to the value of wc.
14343 5   In no case will the value returned be greater than the value of the MB_CUR_MAX macro.
14344 <a name="7.22.8" href="#7.22.8"><b>    7.22.8 Multibyte/wide string conversion functions</b></a>
14345 1   The behavior of the multibyte string functions is affected by the LC_CTYPE category of
14346     the current locale.
14347 <a name="7.22.8.1" href="#7.22.8.1"><b>    7.22.8.1 The mbstowcs function</b></a>
14348     Synopsis
14349 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14350             size_t mbstowcs(wchar_t * restrict pwcs,
14351                  const char * restrict s,
14352                  size_t n);
14353     Description
14354 2   The mbstowcs function converts a sequence of multibyte characters that begins in the
14355     initial shift state from the array pointed to by s into a sequence of corresponding wide
14356     characters and stores not more than n wide characters into the array pointed to by pwcs.
14357     No multibyte characters that follow a null character (which is converted into a null wide
14358     character) will be examined or converted. Each multibyte character is converted as if by
14359     a call to the mbtowc function, except that the conversion state of the mbtowc function is
14360 [<a name="#p357" href="p357">page 357</a>] (<a href="#Contents">Contents</a>)
14361
14362     not affected.
14363 3   No more than n elements will be modified in the array pointed to by pwcs. If copying
14364     takes place between objects that overlap, the behavior is undefined.
14365     Returns
14366 4   If an invalid multibyte character is encountered, the mbstowcs function returns
14367     (size_t)(-1). Otherwise, the mbstowcs function returns the number of array
14368     elements modified, not including a terminating null wide character, if any.295)
14369 <a name="7.22.8.2" href="#7.22.8.2"><b>    7.22.8.2 The wcstombs function</b></a>
14370     Synopsis
14371 1            #include <a href="#7.22">&lt;stdlib.h&gt;</a>
14372              size_t wcstombs(char * restrict s,
14373                   const wchar_t * restrict pwcs,
14374                   size_t n);
14375     Description
14376 2   The wcstombs function converts a sequence of wide characters from the array pointed
14377     to by pwcs into a sequence of corresponding multibyte characters that begins in the
14378     initial shift state, and stores these multibyte characters into the array pointed to by s,
14379     stopping if a multibyte character would exceed the limit of n total bytes or if a null
14380     character is stored. Each wide character is converted as if by a call to the wctomb
14381     function, except that the conversion state of the wctomb function is not affected.
14382 3   No more than n bytes will be modified in the array pointed to by s. If copying takes place
14383     between objects that overlap, the behavior is undefined.
14384     Returns
14385 4   If a wide character is encountered that does not correspond to a valid multibyte character,
14386     the wcstombs function returns (size_t)(-1). Otherwise, the wcstombs function
14387     returns the number of bytes modified, not including a terminating null character, if
14388     any.295)
14389
14390
14391
14392
14393     295) The array will not be null-terminated if the value returned is n.
14394
14395 [<a name="#p358" href="p358">page 358</a>] (<a href="#Contents">Contents</a>)
14396
14397 <a name="7.23" href="#7.23"><b>    7.23 String handling &lt;string.h&gt;</b></a>
14398 <a name="7.23.1" href="#7.23.1"><b>    7.23.1 String function conventions</b></a>
14399 1   The header <a href="#7.23">&lt;string.h&gt;</a> declares one type and several functions, and defines one
14400     macro useful for manipulating arrays of character type and other objects treated as arrays
14401     of character type.296) The type is size_t and the macro is NULL (both described in
14402 <a name="7.19)" href="#7.19)"><b>    7.19). Various methods are used for determining the lengths of the arrays, but in all cases</b></a>
14403     a char * or void * argument points to the initial (lowest addressed) character of the
14404     array. If an array is accessed beyond the end of an object, the behavior is undefined.
14405 2   Where an argument declared as size_t n specifies the length of the array for a
14406     function, n can have the value zero on a call to that function. Unless explicitly stated
14407     otherwise in the description of a particular function in this subclause, pointer arguments
14408     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
14409     function that locates a character finds no occurrence, a function that compares two
14410     character sequences returns zero, and a function that copies characters copies zero
14411     characters.
14412 3   For all functions in this subclause, each character shall be interpreted as if it had the type
14413     unsigned char (and therefore every possible object representation is valid and has a
14414     different value).
14415 <a name="7.23.2" href="#7.23.2"><b>    7.23.2 Copying functions</b></a>
14416 <a name="7.23.2.1" href="#7.23.2.1"><b>    7.23.2.1 The memcpy function</b></a>
14417     Synopsis
14418 1            #include <a href="#7.23">&lt;string.h&gt;</a>
14419              void *memcpy(void * restrict s1,
14420                   const void * restrict s2,
14421                   size_t n);
14422     Description
14423 2   The memcpy function copies n characters from the object pointed to by s2 into the
14424     object pointed to by s1. If copying takes place between objects that overlap, the behavior
14425     is undefined.
14426     Returns
14427 3   The memcpy function returns the value of s1.
14428
14429
14430
14431
14432     296) See ''future library directions'' (<a href="#7.30.11">7.30.11</a>).
14433
14434 [<a name="#p359" href="p359">page 359</a>] (<a href="#Contents">Contents</a>)
14435
14436 <a name="7.23.2.2" href="#7.23.2.2"><b>    7.23.2.2 The memmove function</b></a>
14437     Synopsis
14438 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14439            void *memmove(void *s1, const void *s2, size_t n);
14440     Description
14441 2   The memmove function copies n characters from the object pointed to by s2 into the
14442     object pointed to by s1. Copying takes place as if the n characters from the object
14443     pointed to by s2 are first copied into a temporary array of n characters that does not
14444     overlap the objects pointed to by s1 and s2, and then the n characters from the
14445     temporary array are copied into the object pointed to by s1.
14446     Returns
14447 3   The memmove function returns the value of s1.
14448 <a name="7.23.2.3" href="#7.23.2.3"><b>    7.23.2.3 The strcpy function</b></a>
14449     Synopsis
14450 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14451            char *strcpy(char * restrict s1,
14452                 const char * restrict s2);
14453     Description
14454 2   The strcpy function copies the string pointed to by s2 (including the terminating null
14455     character) into the array pointed to by s1. If copying takes place between objects that
14456     overlap, the behavior is undefined.
14457     Returns
14458 3   The strcpy function returns the value of s1.
14459 <a name="7.23.2.4" href="#7.23.2.4"><b>    7.23.2.4 The strncpy function</b></a>
14460     Synopsis
14461 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14462            char *strncpy(char * restrict s1,
14463                 const char * restrict s2,
14464                 size_t n);
14465     Description
14466 2   The strncpy function copies not more than n characters (characters that follow a null
14467     character are not copied) from the array pointed to by s2 to the array pointed to by
14468
14469
14470
14471
14472 [<a name="#p360" href="p360">page 360</a>] (<a href="#Contents">Contents</a>)
14473
14474     s1.297) If copying takes place between objects that overlap, the behavior is undefined.
14475 3   If the array pointed to by s2 is a string that is shorter than n characters, null characters
14476     are appended to the copy in the array pointed to by s1, until n characters in all have been
14477     written.
14478     Returns
14479 4   The strncpy function returns the value of s1.
14480 <a name="7.23.3" href="#7.23.3"><b>    7.23.3 Concatenation functions</b></a>
14481 <a name="7.23.3.1" href="#7.23.3.1"><b>    7.23.3.1 The strcat function</b></a>
14482     Synopsis
14483 1            #include <a href="#7.23">&lt;string.h&gt;</a>
14484              char *strcat(char * restrict s1,
14485                   const char * restrict s2);
14486     Description
14487 2   The strcat function appends a copy of the string pointed to by s2 (including the
14488     terminating null character) to the end of the string pointed to by s1. The initial character
14489     of s2 overwrites the null character at the end of s1. If copying takes place between
14490     objects that overlap, the behavior is undefined.
14491     Returns
14492 3   The strcat function returns the value of s1.
14493 <a name="7.23.3.2" href="#7.23.3.2"><b>    7.23.3.2 The strncat function</b></a>
14494     Synopsis
14495 1            #include <a href="#7.23">&lt;string.h&gt;</a>
14496              char *strncat(char * restrict s1,
14497                   const char * restrict s2,
14498                   size_t n);
14499     Description
14500 2   The strncat function appends not more than n characters (a null character and
14501     characters that follow it are not appended) from the array pointed to by s2 to the end of
14502     the string pointed to by s1. The initial character of s2 overwrites the null character at the
14503     end of s1. A terminating null character is always appended to the result.298) If copying
14504
14505     297) Thus, if there is no null character in the first n characters of the array pointed to by s2, the result will
14506          not be null-terminated.
14507     298) Thus, the maximum number of characters that can end up in the array pointed to by s1 is
14508          strlen(s1)+n+1.
14509
14510 [<a name="#p361" href="p361">page 361</a>] (<a href="#Contents">Contents</a>)
14511
14512     takes place between objects that overlap, the behavior is undefined.
14513     Returns
14514 3   The strncat function returns the value of s1.
14515     Forward references: the strlen function (<a href="#7.23.6.3">7.23.6.3</a>).
14516 <a name="7.23.4" href="#7.23.4"><b>    7.23.4 Comparison functions</b></a>
14517 1   The sign of a nonzero value returned by the comparison functions memcmp, strcmp,
14518     and strncmp is determined by the sign of the difference between the values of the first
14519     pair of characters (both interpreted as unsigned char) that differ in the objects being
14520     compared.
14521 <a name="7.23.4.1" href="#7.23.4.1"><b>    7.23.4.1 The memcmp function</b></a>
14522     Synopsis
14523 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14524             int memcmp(const void *s1, const void *s2, size_t n);
14525     Description
14526 2   The memcmp function compares the first n characters of the object pointed to by s1 to
14527     the first n characters of the object pointed to by s2.299)
14528     Returns
14529 3   The memcmp function returns an integer greater than, equal to, or less than zero,
14530     accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
14531     pointed to by s2.
14532 <a name="7.23.4.2" href="#7.23.4.2"><b>    7.23.4.2 The strcmp function</b></a>
14533     Synopsis
14534 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14535             int strcmp(const char *s1, const char *s2);
14536     Description
14537 2   The strcmp function compares the string pointed to by s1 to the string pointed to by
14538     s2.
14539     Returns
14540 3   The strcmp function returns an integer greater than, equal to, or less than zero,
14541     accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
14542
14543     299) The contents of ''holes'' used as padding for purposes of alignment within structure objects are
14544          indeterminate. Strings shorter than their allocated space and unions may also cause problems in
14545          comparison.
14546
14547 [<a name="#p362" href="p362">page 362</a>] (<a href="#Contents">Contents</a>)
14548
14549     pointed to by s2.
14550 <a name="7.23.4.3" href="#7.23.4.3"><b>    7.23.4.3 The strcoll function</b></a>
14551     Synopsis
14552 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14553             int strcoll(const char *s1, const char *s2);
14554     Description
14555 2   The strcoll function compares the string pointed to by s1 to the string pointed to by
14556     s2, both interpreted as appropriate to the LC_COLLATE category of the current locale.
14557     Returns
14558 3   The strcoll function returns an integer greater than, equal to, or less than zero,
14559     accordingly as the string pointed to by s1 is greater than, equal to, or less than the string
14560     pointed to by s2 when both are interpreted as appropriate to the current locale.
14561 <a name="7.23.4.4" href="#7.23.4.4"><b>    7.23.4.4 The strncmp function</b></a>
14562     Synopsis
14563 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14564             int strncmp(const char *s1, const char *s2, size_t n);
14565     Description
14566 2   The strncmp function compares not more than n characters (characters that follow a
14567     null character are not compared) from the array pointed to by s1 to the array pointed to
14568     by s2.
14569     Returns
14570 3   The strncmp function returns an integer greater than, equal to, or less than zero,
14571     accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
14572     to, or less than the possibly null-terminated array pointed to by s2.
14573 <a name="7.23.4.5" href="#7.23.4.5"><b>    7.23.4.5 The strxfrm function</b></a>
14574     Synopsis
14575 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14576             size_t strxfrm(char * restrict s1,
14577                  const char * restrict s2,
14578                  size_t n);
14579     Description
14580 2   The strxfrm function transforms the string pointed to by s2 and places the resulting
14581     string into the array pointed to by s1. The transformation is such that if the strcmp
14582     function is applied to two transformed strings, it returns a value greater than, equal to, or
14583
14584 [<a name="#p363" href="p363">page 363</a>] (<a href="#Contents">Contents</a>)
14585
14586     less than zero, corresponding to the result of the strcoll function applied to the same
14587     two original strings. No more than n characters are placed into the resulting array
14588     pointed to by s1, including the terminating null character. If n is zero, s1 is permitted to
14589     be a null pointer. If copying takes place between objects that overlap, the behavior is
14590     undefined.
14591     Returns
14592 3   The strxfrm function returns the length of the transformed string (not including the
14593     terminating null character). If the value returned is n or more, the contents of the array
14594     pointed to by s1 are indeterminate.
14595 4   EXAMPLE The value of the following expression is the size of the array needed to hold the
14596     transformation of the string pointed to by s.
14597            1 + strxfrm(NULL, s, 0)
14598
14599 <a name="7.23.5" href="#7.23.5"><b>    7.23.5 Search functions</b></a>
14600 <a name="7.23.5.1" href="#7.23.5.1"><b>    7.23.5.1 The memchr function</b></a>
14601     Synopsis
14602 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14603            void *memchr(const void *s, int c, size_t n);
14604     Description
14605 2   The memchr function locates the first occurrence of c (converted to an unsigned
14606     char) in the initial n characters (each interpreted as unsigned char) of the object
14607     pointed to by s.
14608     Returns
14609 3   The memchr function returns a pointer to the located character, or a null pointer if the
14610     character does not occur in the object.
14611 <a name="7.23.5.2" href="#7.23.5.2"><b>    7.23.5.2 The strchr function</b></a>
14612     Synopsis
14613 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14614            char *strchr(const char *s, int c);
14615     Description
14616 2   The strchr function locates the first occurrence of c (converted to a char) in the
14617     string pointed to by s. The terminating null character is considered to be part of the
14618     string.
14619     Returns
14620 3   The strchr function returns a pointer to the located character, or a null pointer if the
14621     character does not occur in the string.
14622 [<a name="#p364" href="p364">page 364</a>] (<a href="#Contents">Contents</a>)
14623
14624 <a name="7.23.5.3" href="#7.23.5.3"><b>    7.23.5.3 The strcspn function</b></a>
14625     Synopsis
14626 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14627             size_t strcspn(const char *s1, const char *s2);
14628     Description
14629 2   The strcspn function computes the length of the maximum initial segment of the string
14630     pointed to by s1 which consists entirely of characters not from the string pointed to by
14631     s2.
14632     Returns
14633 3   The strcspn function returns the length of the segment.
14634 <a name="7.23.5.4" href="#7.23.5.4"><b>    7.23.5.4 The strpbrk function</b></a>
14635     Synopsis
14636 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14637             char *strpbrk(const char *s1, const char *s2);
14638     Description
14639 2   The strpbrk function locates the first occurrence in the string pointed to by s1 of any
14640     character from the string pointed to by s2.
14641     Returns
14642 3   The strpbrk function returns a pointer to the character, or a null pointer if no character
14643     from s2 occurs in s1.
14644 <a name="7.23.5.5" href="#7.23.5.5"><b>    7.23.5.5 The strrchr function</b></a>
14645     Synopsis
14646 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14647             char *strrchr(const char *s, int c);
14648     Description
14649 2   The strrchr function locates the last occurrence of c (converted to a char) in the
14650     string pointed to by s. The terminating null character is considered to be part of the
14651     string.
14652     Returns
14653 3   The strrchr function returns a pointer to the character, or a null pointer if c does not
14654     occur in the string.
14655
14656
14657
14658
14659 [<a name="#p365" href="p365">page 365</a>] (<a href="#Contents">Contents</a>)
14660
14661 <a name="7.23.5.6" href="#7.23.5.6"><b>    7.23.5.6 The strspn function</b></a>
14662     Synopsis
14663 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14664            size_t strspn(const char *s1, const char *s2);
14665     Description
14666 2   The strspn function computes the length of the maximum initial segment of the string
14667     pointed to by s1 which consists entirely of characters from the string pointed to by s2.
14668     Returns
14669 3   The strspn function returns the length of the segment.
14670 <a name="7.23.5.7" href="#7.23.5.7"><b>    7.23.5.7 The strstr function</b></a>
14671     Synopsis
14672 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14673            char *strstr(const char *s1, const char *s2);
14674     Description
14675 2   The strstr function locates the first occurrence in the string pointed to by s1 of the
14676     sequence of characters (excluding the terminating null character) in the string pointed to
14677     by s2.
14678     Returns
14679 3   The strstr function returns a pointer to the located string, or a null pointer if the string
14680     is not found. If s2 points to a string with zero length, the function returns s1.
14681 <a name="7.23.5.8" href="#7.23.5.8"><b>    7.23.5.8 The strtok function</b></a>
14682     Synopsis
14683 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14684            char *strtok(char * restrict s1,
14685                 const char * restrict s2);
14686     Description
14687 2   A sequence of calls to the strtok function breaks the string pointed to by s1 into a
14688     sequence of tokens, each of which is delimited by a character from the string pointed to
14689     by s2. The first call in the sequence has a non-null first argument; subsequent calls in the
14690     sequence have a null first argument. The separator string pointed to by s2 may be
14691     different from call to call.
14692 3   The first call in the sequence searches the string pointed to by s1 for the first character
14693     that is not contained in the current separator string pointed to by s2. If no such character
14694     is found, then there are no tokens in the string pointed to by s1 and the strtok function
14695
14696 [<a name="#p366" href="p366">page 366</a>] (<a href="#Contents">Contents</a>)
14697
14698     returns a null pointer. If such a character is found, it is the start of the first token.
14699 4   The strtok function then searches from there for a character that is contained in the
14700     current separator string. If no such character is found, the current token extends to the
14701     end of the string pointed to by s1, and subsequent searches for a token will return a null
14702     pointer. If such a character is found, it is overwritten by a null character, which
14703     terminates the current token. The strtok function saves a pointer to the following
14704     character, from which the next search for a token will start.
14705 5   Each subsequent call, with a null pointer as the value of the first argument, starts
14706     searching from the saved pointer and behaves as described above.
14707 6   The strtok function is not required to avoid data races. The implementation shall
14708     behave as if no library function calls the strtok function.
14709     Returns
14710 7   The strtok function returns a pointer to the first character of a token, or a null pointer
14711     if there is no token.
14712 8   EXAMPLE
14713             #include <a href="#7.23">&lt;string.h&gt;</a>
14714             static char str[] = "?a???b,,,#c";
14715             char *t;
14716             t   =   strtok(str, "?");       //   t   points to the token "a"
14717             t   =   strtok(NULL, ",");      //   t   points to the token "??b"
14718             t   =   strtok(NULL, "#,");     //   t   points to the token "c"
14719             t   =   strtok(NULL, "?");      //   t   is a null pointer
14720
14721 <a name="7.23.6" href="#7.23.6"><b>    7.23.6 Miscellaneous functions</b></a>
14722 <a name="7.23.6.1" href="#7.23.6.1"><b>    7.23.6.1 The memset function</b></a>
14723     Synopsis
14724 1           #include <a href="#7.23">&lt;string.h&gt;</a>
14725             void *memset(void *s, int c, size_t n);
14726     Description
14727 2   The memset function copies the value of c (converted to an unsigned char) into
14728     each of the first n characters of the object pointed to by s.
14729     Returns
14730 3   The memset function returns the value of s.
14731
14732
14733
14734
14735 [<a name="#p367" href="p367">page 367</a>] (<a href="#Contents">Contents</a>)
14736
14737 <a name="7.23.6.2" href="#7.23.6.2"><b>    7.23.6.2 The strerror function</b></a>
14738     Synopsis
14739 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14740            char *strerror(int errnum);
14741     Description
14742 2   The strerror function maps the number in errnum to a message string. Typically,
14743     the values for errnum come from errno, but strerror shall map any value of type
14744     int to a message.
14745 3   The strerror function is not required to avoid data races. The implementation shall
14746     behave as if no library function calls the strerror function.
14747     Returns
14748 4   The strerror function returns a pointer to the string, the contents of which are locale-
14749     specific. The array pointed to shall not be modified by the program, but may be
14750     overwritten by a subsequent call to the strerror function.
14751 <a name="7.23.6.3" href="#7.23.6.3"><b>    7.23.6.3 The strlen function</b></a>
14752     Synopsis
14753 1          #include <a href="#7.23">&lt;string.h&gt;</a>
14754            size_t strlen(const char *s);
14755     Description
14756 2   The strlen function computes the length of the string pointed to by s.
14757     Returns
14758 3   The strlen function returns the number of characters that precede the terminating null
14759     character.
14760
14761
14762
14763
14764 [<a name="#p368" href="p368">page 368</a>] (<a href="#Contents">Contents</a>)
14765
14766 <a name="7.24" href="#7.24"><b>    7.24 Type-generic math &lt;tgmath.h&gt;</b></a>
14767 1   The header <a href="#7.24">&lt;tgmath.h&gt;</a> includes the headers <a href="#7.12">&lt;math.h&gt;</a> and <a href="#7.3">&lt;complex.h&gt;</a> and
14768     defines several type-generic macros.
14769 2   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
14770     double) suffix, several have one or more parameters whose corresponding real type is
14771     double. For each such function, except modf, there is a corresponding type-generic
14772     macro.300) The parameters whose corresponding real type is double in the function
14773     synopsis are generic parameters. Use of the macro invokes a function whose
14774     corresponding real type and type domain are determined by the arguments for the generic
14775     parameters.301)
14776 3   Use of the macro invokes a function whose generic parameters have the corresponding
14777     real type determined as follows:
14778     -- First, if any argument for generic parameters has type long double, the type
14779       determined is long double.
14780     -- Otherwise, if any argument for generic parameters has type double or is of integer
14781       type, the type determined is double.
14782     -- Otherwise, the type determined is float.
14783 4   For each unsuffixed function in <a href="#7.12">&lt;math.h&gt;</a> for which there is a function in
14784     <a href="#7.3">&lt;complex.h&gt;</a> with the same name except for a c prefix, the corresponding type-
14785     generic macro (for both functions) has the same name as the function in <a href="#7.12">&lt;math.h&gt;</a>. The
14786     corresponding type-generic macro for fabs and cabs is fabs.
14787
14788
14789
14790
14791     300) Like other function-like macros in Standard libraries, each type-generic macro can be suppressed to
14792          make available the corresponding ordinary function.
14793     301) If the type of the argument is not compatible with the type of the parameter for the selected function,
14794          the behavior is undefined.
14795
14796 [<a name="#p369" href="p369">page 369</a>] (<a href="#Contents">Contents</a>)
14797
14798             <a href="#7.12">&lt;math.h&gt;</a>          <a href="#7.3">&lt;complex.h&gt;</a>              type-generic
14799              function            function                 macro
14800               acos               cacos                   acos
14801               asin               casin                   asin
14802               atan               catan                   atan
14803               acosh              cacosh                  acosh
14804               asinh              casinh                  asinh
14805               atanh              catanh                  atanh
14806               cos                ccos                    cos
14807               sin                csin                    sin
14808               tan                ctan                    tan
14809               cosh               ccosh                   cosh
14810               sinh               csinh                   sinh
14811               tanh               ctanh                   tanh
14812               exp                cexp                    exp
14813               log                clog                    log
14814               pow                cpow                    pow
14815               sqrt               csqrt                   sqrt
14816               fabs               cabs                    fabs
14817     If at least one argument for a generic parameter is complex, then use of the macro invokes
14818     a complex function; otherwise, use of the macro invokes a real function.
14819 5   For each unsuffixed function in <a href="#7.12">&lt;math.h&gt;</a> without a c-prefixed counterpart in
14820     <a href="#7.3">&lt;complex.h&gt;</a> (except modf), the corresponding type-generic macro has the same
14821     name as the function. These type-generic macros are:
14822           atan2                fma                  llround              remainder
14823           cbrt                 fmax                 log10                remquo
14824           ceil                 fmin                 log1p                rint
14825           copysign             fmod                 log2                 round
14826           erf                  frexp                logb                 scalbn
14827           erfc                 hypot                lrint                scalbln
14828           exp2                 ilogb                lround               tgamma
14829           expm1                ldexp                nearbyint            trunc
14830           fdim                 lgamma               nextafter
14831           floor                llrint               nexttoward
14832     If all arguments for generic parameters are real, then use of the macro invokes a real
14833     function; otherwise, use of the macro results in undefined behavior.
14834
14835
14836
14837
14838 [<a name="#p370" href="p370">page 370</a>] (<a href="#Contents">Contents</a>)
14839
14840 6   For each unsuffixed function in <a href="#7.3">&lt;complex.h&gt;</a> that is not a c-prefixed counterpart to a
14841     function in <a href="#7.12">&lt;math.h&gt;</a>, the corresponding type-generic macro has the same name as the
14842     function. These type-generic macros are:
14843             carg                    conj                     creal
14844             cimag                   cproj
14845     Use of the macro with any real or complex argument invokes a complex function.
14846 7   EXAMPLE       With the declarations
14847             #include <a href="#7.24">&lt;tgmath.h&gt;</a>
14848             int n;
14849             float f;
14850             double d;
14851             long double ld;
14852             float complex fc;
14853             double complex dc;
14854             long double complex ldc;
14855     functions invoked by use of type-generic macros are shown in the following table:
14856                      macro use                                  invokes
14857                 exp(n)                              exp(n), the function
14858                 acosh(f)                            acoshf(f)
14859                 sin(d)                              sin(d), the function
14860                 atan(ld)                            atanl(ld)
14861                 log(fc)                             clogf(fc)
14862                 sqrt(dc)                            csqrt(dc)
14863                 pow(ldc, f)                         cpowl(ldc, f)
14864                 remainder(n, n)                     remainder(n, n), the function
14865                 nextafter(d, f)                     nextafter(d, f), the function
14866                 nexttoward(f, ld)                   nexttowardf(f, ld)
14867                 copysign(n, ld)                     copysignl(n, ld)
14868                 ceil(fc)                            undefined behavior
14869                 rint(dc)                            undefined behavior
14870                 fmax(ldc, ld)                       undefined behavior
14871                 carg(n)                             carg(n), the function
14872                 cproj(f)                            cprojf(f)
14873                 creal(d)                            creal(d), the function
14874                 cimag(ld)                           cimagl(ld)
14875                 fabs(fc)                            cabsf(fc)
14876                 carg(dc)                            carg(dc), the function
14877                 cproj(ldc)                          cprojl(ldc)
14878
14879
14880
14881
14882 [<a name="#p371" href="p371">page 371</a>] (<a href="#Contents">Contents</a>)
14883
14884 <a name="7.25" href="#7.25"><b>    7.25 Threads &lt;threads.h&gt;</b></a>
14885 <a name="7.25.1" href="#7.25.1"><b>    7.25.1 Introduction</b></a>
14886 1   The header <a href="#7.25">&lt;threads.h&gt;</a> defines macros, and declares types, enumeration constants,
14887     and functions that support multiple threads of execution.
14888 2   Implementations that define the macro __STDC_NO_THREADS__ need not provide
14889     this header nor support any of its facilities.
14890 3   The macros are
14891            ONCE_FLAG_INIT
14892     which expands to a value that can be used to initialize an object of type once_flag;
14893     and
14894            TSS_DTOR_ITERATIONS
14895     which expands to an integer constant expression representing the maximum number of
14896     times that destructors will be called when a thread terminates.
14897 4   The types are
14898            cnd_t
14899     which is a complete object type that holds an identifier for a condition variable;
14900            thrd_t
14901     which is a complete object type that holds an identifier for a thread;
14902            tss_t
14903     which is a complete object type that holds an identifier for a thread-specific storage
14904     pointer;
14905            mtx_t
14906     which is a complete object type that holds an identifier for a mutex;
14907            tss_dtor_t
14908     which is the function pointer type void (*)(void*), used for a destructor for a
14909     thread-specific storage pointer;
14910            thrd_start_t
14911     which is the function pointer type int (*)(void*) that is passed to thrd_create
14912     to create a new thread;
14913            once_flag
14914     which is a complete object type that holds a flag for use by call_once; and
14915
14916
14917 [<a name="#p372" href="p372">page 372</a>] (<a href="#Contents">Contents</a>)
14918
14919             xtime
14920     which is a structure type that holds a time specified in seconds and nanoseconds. The
14921     structure shall contain at least the following members, in any order.
14922             time_t sec;
14923             long nsec;
14924 5   The enumeration constants are
14925             mtx_plain
14926     which is passed to mtx_init to create a mutex object that supports neither timeout nor
14927     test and return;
14928             mtx_recursive
14929     which is passed to mtx_init to create a mutex object that supports recursive locking;
14930             mtx_timed
14931     which is passed to mtx_init to create a mutex object that supports timeout;
14932             mtx_try
14933     which is passed to mtx_init to create a mutex object that supports test and return;
14934             thrd_timeout
14935     which is returned by a timed wait function to indicate that the time specified in the call
14936     was reached without acquiring the requested resource;
14937             thrd_success
14938     which is returned by a function to indicate that the requested operation succeeded;
14939             thrd_busy
14940     which is returned by a function to indicate that the requested operation failed because a
14941     resource requested by a test and return function is already in use;
14942             thrd_error
14943     which is returned by a function to indicate that the requested operation failed; and
14944             thrd_nomem
14945     which is returned by a function to indicate that the requested operation failed because it
14946     was unable to allocate memory.
14947
14948
14949
14950
14951 [<a name="#p373" href="p373">page 373</a>] (<a href="#Contents">Contents</a>)
14952
14953 <a name="7.25.2" href="#7.25.2"><b>    7.25.2 Initialization functions</b></a>
14954 <a name="7.25.2.1" href="#7.25.2.1"><b>    7.25.2.1 The call_once function</b></a>
14955     Synopsis
14956 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
14957            void call_once(once_flag *flag, void (*func)(void));
14958     Description
14959 2   The call_once function uses the once_flag pointed to by flag to ensure that
14960     func is called exactly once, the first time the call_once function is called with that
14961     value of flag. Completion of an effective call to the call_once function synchronizes
14962     with all subsequent calls to the call_once function with the same value of flag.
14963     Returns
14964 3   The call_once function returns no value.
14965 <a name="7.25.3" href="#7.25.3"><b>    7.25.3 Condition variable functions</b></a>
14966 <a name="7.25.3.1" href="#7.25.3.1"><b>    7.25.3.1 The cnd_broadcast function</b></a>
14967     Synopsis
14968 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
14969            int cnd_broadcast(cnd_t *cond);
14970     Description
14971 2   The cnd_broadcast function unblocks all of the threads that are blocked on the
14972     condition variable pointed to by cond at the time of the call. If no threads are blocked
14973     on the condition variable pointed to by cond at the time of the call, the function does
14974     nothing.
14975     Returns
14976 3   The cnd_broadcast function returns thrd_success on success, or thrd_error
14977     if the request could not be honored.
14978 <a name="7.25.3.2" href="#7.25.3.2"><b>    7.25.3.2 The cnd_destroy function</b></a>
14979     Synopsis
14980 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
14981            void cnd_destroy(cnd_t *cond);
14982     Description
14983 2   The cnd_destroy function releases all resources used by the condition variable
14984     pointed to by cond. The cnd_destroy function requires that no threads be blocked
14985     waiting for the condition variable pointed to by cond.
14986
14987 [<a name="#p374" href="p374">page 374</a>] (<a href="#Contents">Contents</a>)
14988
14989     Returns
14990 3   The cnd_destroy function returns no value.
14991 <a name="7.25.3.3" href="#7.25.3.3"><b>    7.25.3.3 The cnd_init function</b></a>
14992     Synopsis
14993 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
14994             int cnd_init(cnd_t *cond);
14995     Description
14996 2   The cnd_init function creates a condition variable. If it succeeds it sets the variable
14997     pointed to by cond to a value that uniquely identifies the newly created condition
14998     variable. A thread that calls cnd_wait on a newly created condition variable will
14999     block.
15000     Returns
15001 3   The cnd_init function returns thrd_success on success, or thrd_nomem if no
15002     memory could be allocated for the newly created condition, or thrd_error if the
15003     request could not be honored.
15004 <a name="7.25.3.4" href="#7.25.3.4"><b>    7.25.3.4 The cnd_signal function</b></a>
15005     Synopsis
15006 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15007             int cnd_signal(cnd_t *cond);
15008     Description
15009 2   The cnd_signal function unblocks one of the threads that are blocked on the
15010     condition variable pointed to by cond at the time of the call. If no threads are blocked
15011     on the condition variable at the time of the call, the function does nothing and return
15012     success.
15013     Returns
15014 3   The cnd_signal function returns thrd_success on success or thrd_error if
15015     the request could not be honored.
15016 <a name="7.25.3.5" href="#7.25.3.5"><b>    7.25.3.5 The cnd_timedwait function</b></a>
15017     Synopsis
15018 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15019             int cnd_timedwait(cnd_t *cond, mtx_t *mtx,
15020                  const xtime *xt);
15021
15022
15023
15024
15025 [<a name="#p375" href="p375">page 375</a>] (<a href="#Contents">Contents</a>)
15026
15027     Description
15028 2   The cnd_timedwait function atomically unlocks the mutex pointed to by mtx and
15029     endeavors to block until the condition variable pointed to by cond is signaled by a call to
15030     cnd_signal or to cnd_broadcast, or until after the time specified by the xtime
15031     object pointed to by xt. When the calling thread becomes unblocked it locks the variable
15032     pointed to by mtx before it returns. The cnd_timedwait function requires that the
15033     mutex pointed to by mtx be locked by the calling thread.
15034     Returns
15035 3   The cnd_timedwait function returns thrd_success upon success, or
15036     thrd_timeout if the time specified in the call was reached without acquiring the
15037     requested resource, or thrd_error if the request could not be honored.
15038 <a name="7.25.3.6" href="#7.25.3.6"><b>    7.25.3.6 The cnd_wait function</b></a>
15039     Synopsis
15040 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15041            int cnd_wait(cnd_t *cond, mtx_t *mtx);
15042     Description
15043 2   The cnd_wait function atomically unlocks the mutex pointed to by mtx and endeavors
15044     to block until the condition variable pointed to by cond is signaled by a call to
15045     cnd_signal or to cnd_broadcast. When the calling thread becomes unblocked it
15046     locks the mutex pointed to by mtx before it returns. If the mutex pointed to by mtx is
15047     not locked by the calling thread, the cnd_wait function will act as if the abort
15048     function is called.
15049     Returns
15050 3   The cnd_wait function returns thrd_success on success or thrd_error if the
15051     request could not be honored.
15052 <a name="7.25.4" href="#7.25.4"><b>    7.25.4 Mutex functions</b></a>
15053 <a name="7.25.4.1" href="#7.25.4.1"><b>    7.25.4.1 The mtx_destroy function</b></a>
15054     Synopsis
15055 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15056            void mtx_destroy(mtx_t *mtx);
15057     Description
15058 2   The mtx_destroy function releases any resources used by the mutex pointed to by
15059     mtx. No threads can be blocked waiting for the mutex pointed to by mtx.
15060
15061
15062
15063 [<a name="#p376" href="p376">page 376</a>] (<a href="#Contents">Contents</a>)
15064
15065     Returns
15066 3   The mtx_destroy function returns no value.
15067 <a name="7.25.4.2" href="#7.25.4.2"><b>    7.25.4.2 The mtx_init function</b></a>
15068     Synopsis
15069 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15070             int mtx_init(mtx_t *mtx, int type);
15071     Description
15072 2   The mtx_init function creates a mutex object with properties indicated by type,
15073     which must have one of the six values:
15074     mtx_plain for a simple non-recursive mutex,
15075     mtx_timed for a non-recursive mutex that supports timeout,
15076     mtx_try      for a non-recursive mutex that supports test and return,
15077     mtx_plain | mtx_recursive for a simple recursive mutex,
15078     mtx_timed | mtx_recursive for a recursive mutex that supports timeout, or
15079     mtx_try | mtx_recursive for a recursive mutex that supports test and return.
15080 3   If the mtx_init function succeeds, it sets the mutex pointed to by mtx to a value that
15081     uniquely identifies the newly created mutex.
15082     Returns
15083 4   The mtx_init function returns thrd_success on success, or thrd_error if the
15084     request could not be honored.
15085 <a name="7.25.4.3" href="#7.25.4.3"><b>    7.25.4.3 The mtx_lock function</b></a>
15086     Synopsis
15087 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15088             int mtx_lock(mtx_t *mtx);
15089     Description
15090 2   The mtx_lock function blocks until it locks the mutex pointed to by mtx. If the mutex
15091     is non-recursive, it shall not be locked by the calling thread. Prior calls to mtx_unlock
15092     on the same mutex shall synchronize with this operation.
15093     Returns
15094 3   The mtx_lock function returns thrd_success on success, or thrd_busy if the
15095     resource requested is already in use, or thrd_error if the request could not be
15096     honored.
15097
15098
15099
15100
15101 [<a name="#p377" href="p377">page 377</a>] (<a href="#Contents">Contents</a>)
15102
15103 <a name="7.25.4.4" href="#7.25.4.4"><b>    7.25.4.4 The mtx_timedlock function</b></a>
15104     Synopsis
15105 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15106            int mtx_timedlock(mtx_t *mtx, const xtime *xt);
15107     Description
15108 2   The mtx_timedlock function endeavors to block until it locks the mutex pointed to by
15109     mtx or until the time specified by the xtime object xt has passed. The specified mutex
15110     shall support timeout. Prior calls to mtx_unlock on the same mutex shall synchronize
15111     with this operation.                                                                 *
15112     Returns
15113 3   The mtx_timedlock function returns thrd_success on success, or thrd_busy
15114     if the resource requested is already in use, or thrd_timeout if the time specified was
15115     reached without acquiring the requested resource, or thrd_error if the request could
15116     not be honored.
15117 <a name="7.25.4.5" href="#7.25.4.5"><b>    7.25.4.5 The mtx_trylock function</b></a>
15118     Synopsis
15119 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15120            int mtx_trylock(mtx_t *mtx);
15121     Description
15122 2   The mtx_trylock function endeavors to lock the mutex pointed to by mtx. The
15123     specified mutex shall support either test and return or timeout. If the mutex is already
15124     locked, the function returns without blocking. Prior calls to mtx_unlock on the same
15125     mutex shall synchronize with this operation.                                            *
15126     Returns
15127 3   The mtx_trylock function returns thrd_success on success, or thrd_busy if
15128     the resource requested is already in use, or thrd_error if the request could not be
15129     honored.
15130 <a name="7.25.4.6" href="#7.25.4.6"><b>    7.25.4.6 The mtx_unlock function</b></a>
15131     Synopsis
15132 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15133            int mtx_unlock(mtx_t *mtx);
15134     Description
15135 2   The mtx_unlock function unlocks the mutex pointed to by mtx. The mutex pointed to
15136     by mtx shall be locked by the calling thread.
15137
15138 [<a name="#p378" href="p378">page 378</a>] (<a href="#Contents">Contents</a>)
15139
15140     Returns
15141 3   The mtx_unlock function returns thrd_success on success or thrd_error if
15142     the request could not be honored.
15143 <a name="7.25.5" href="#7.25.5"><b>    7.25.5 Thread functions</b></a>
15144 <a name="7.25.5.1" href="#7.25.5.1"><b>    7.25.5.1 The thrd_create function</b></a>
15145     Synopsis
15146 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15147             int thrd_create(thrd_t *thr, thrd_start_t func,
15148                  void *arg);
15149     Description
15150 2   The thrd_create function creates a new thread executing func(arg). If the
15151     thrd_create function succeeds, it sets the thread thr to a value that uniquely
15152     identifies the newly created thread.
15153     Returns
15154 3   The thrd_create function returns thrd_success on success, or thrd_nomem if
15155     no memory could be allocated for the thread requested, or thrd_error if the request
15156     could not be honored.
15157 <a name="7.25.5.2" href="#7.25.5.2"><b>    7.25.5.2 The thrd_current function</b></a>
15158     Synopsis
15159 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15160             thrd_t thrd_current(void);
15161     Description
15162 2   The thrd_current function identifies the thread that called it.
15163     Returns
15164 3   The thrd_current function returns a value that uniquely identifies the thread that
15165     called it.
15166 <a name="7.25.5.3" href="#7.25.5.3"><b>    7.25.5.3 The thrd_detach function</b></a>
15167     Synopsis
15168 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15169             int thrd_detach(thrd_t thr);
15170     Description
15171 2   The thrd_detach function tells the operating system to dispose of any resources
15172     allocated to the thread identified by thr when that thread terminates. The value of the
15173
15174 [<a name="#p379" href="p379">page 379</a>] (<a href="#Contents">Contents</a>)
15175
15176     thread identified by thr value shall not have been set by a call to thrd_join or
15177     thrd_detach.
15178     Returns
15179 3   The thrd_detach function returns thrd_success on success or thrd_error if
15180     the request could not be honored.
15181 <a name="7.25.5.4" href="#7.25.5.4"><b>    7.25.5.4 The thrd_equal function</b></a>
15182     Synopsis
15183 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15184            int thrd_equal(thrd_t thr0, thrd_t thr1);
15185     Description
15186 2   The thrd_equal function will determine whether the thread identified by thr0 refers
15187     to the thread identified by thr1.
15188     Returns
15189 3   The thrd_equal function returns zero if the thread thr0 and the thread thr1 refer to
15190     different threads. Otherwise the thrd_equal function returns a nonzero value.
15191 <a name="7.25.5.5" href="#7.25.5.5"><b>    7.25.5.5 The thrd_exit function</b></a>
15192     Synopsis
15193 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15194            void thrd_exit(int res);
15195     Description
15196 2   The thrd_exit function terminates execution of the calling thread and sets its result
15197     code to res.
15198     Returns
15199 3   The thrd_exit function returns no value.
15200 <a name="7.25.5.6" href="#7.25.5.6"><b>    7.25.5.6 The thrd_join function</b></a>
15201     Synopsis
15202 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15203            int thrd_join(thrd_t thr, int *res);
15204     Description
15205 2   The thrd_join function blocks until the thread identified by thr has terminated. If
15206     the parameter res is not a null pointer, it stores the thread's result code in the integer
15207     pointed to by res. The value of the thread identified by thr shall not have been set by a
15208     call to thrd_join or thrd_detach.
15209
15210 [<a name="#p380" href="p380">page 380</a>] (<a href="#Contents">Contents</a>)
15211
15212     Returns
15213 3   The thrd_join function returns thrd_success on success or thrd_error if the
15214     request could not be honored.
15215 <a name="7.25.5.7" href="#7.25.5.7"><b>    7.25.5.7 The thrd_sleep function</b></a>
15216     Synopsis
15217 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15218             void thrd_sleep(const xtime *xt);
15219     Description
15220 2   The thrd_sleep function suspends execution of the calling thread until after the time
15221     specified by the xtime object pointed to by xt.
15222     Returns
15223 3   The thrd_sleep function returns no value.
15224 <a name="7.25.5.8" href="#7.25.5.8"><b>    7.25.5.8 The thrd_yield function</b></a>
15225     Synopsis
15226 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15227             void thrd_yield(void);
15228     Description
15229 2   The thrd_yield function endeavors to permit other threads to run, even if the current
15230     thread would ordinarily continue to run.
15231     Returns
15232 3   The thrd_yield function returns no value.
15233 <a name="7.25.6" href="#7.25.6"><b>    7.25.6 Thread-specific storage functions</b></a>
15234 <a name="7.25.6.1" href="#7.25.6.1"><b>    7.25.6.1 The tss_create function</b></a>
15235     Synopsis
15236 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15237             int tss_create(tss_t *key, tss_dtor_t dtor);
15238     Description
15239 2   The tss_create function creates a thread-specific storage pointer with destructor
15240     dtor, which may be null.
15241     Returns
15242 3   If the tss_create function is successful, it sets the thread-specific storage pointed to
15243     by key to a value that uniquely identifies the newly created pointer and returns
15244     thrd_success; otherwise, thrd_error is returned and the thread-specific storage
15245 [<a name="#p381" href="p381">page 381</a>] (<a href="#Contents">Contents</a>)
15246
15247     pointed to by key is set to an undefined value.
15248 <a name="7.25.6.2" href="#7.25.6.2"><b>    7.25.6.2 The tss_delete function</b></a>
15249     Synopsis
15250 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15251            void tss_delete(tss_t key);
15252     Description
15253 2   The tss_delete function releases any resources used by the thread-specific storage
15254     identified by key.
15255     Returns
15256 3   The tss_delete function returns no value.
15257 <a name="7.25.6.3" href="#7.25.6.3"><b>    7.25.6.3 The tss_get function</b></a>
15258     Synopsis
15259 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15260            void *tss_get(tss_t key);
15261     Description
15262 2   The tss_get function returns the value for the current thread held in the thread-specific
15263     storage identified by key.
15264     Returns
15265 3   The tss_get function returns the value for the current thread if successful, or zero if
15266     unsuccessful.
15267 <a name="7.25.6.4" href="#7.25.6.4"><b>    7.25.6.4 The tss_set function</b></a>
15268     Synopsis
15269 1          #include <a href="#7.25">&lt;threads.h&gt;</a>
15270            int tss_set(tss_t key, void *val);
15271     Description
15272 2   The tss_set function sets the value for the current thread held in the thread-specific
15273     storage identified by key to val.
15274     Returns
15275 3   The tss_set function returns thrd_success on success or thrd_error if the
15276     request could not be honored.
15277
15278
15279
15280
15281 [<a name="#p382" href="p382">page 382</a>] (<a href="#Contents">Contents</a>)
15282
15283 <a name="7.25.7" href="#7.25.7"><b>    7.25.7 Time functions</b></a>
15284 <a name="7.25.7.1" href="#7.25.7.1"><b>    7.25.7.1 The xtime_get function</b></a>
15285     Synopsis
15286 1           #include <a href="#7.25">&lt;threads.h&gt;</a>
15287             int xtime_get(xtime *xt, int base);
15288     Description
15289 2   The xtime_get function sets the xtime object pointed to by xt to hold the current
15290     time based on the time base base.
15291     Returns
15292 3   If the xtime_get function is successful it returns the nonzero value base, which must
15293     be TIME_UTC; otherwise, it returns zero.302)
15294
15295
15296
15297
15298     302) Although an xtime object describes times with nanosecond resolution, the actual resolution in an
15299          xtime object is system dependent.
15300
15301 [<a name="#p383" href="p383">page 383</a>] (<a href="#Contents">Contents</a>)
15302
15303 <a name="7.26" href="#7.26"><b>    7.26 Date and time &lt;time.h&gt;</b></a>
15304 <a name="7.26.1" href="#7.26.1"><b>    7.26.1 Components of time</b></a>
15305 1   The header <a href="#7.26">&lt;time.h&gt;</a> defines two macros, and declares several types and functions for
15306     manipulating time. Many functions deal with a calendar time that represents the current
15307     date (according to the Gregorian calendar) and time. Some functions deal with local
15308     time, which is the calendar time expressed for some specific time zone, and with Daylight
15309     Saving Time, which is a temporary change in the algorithm for determining local time.
15310     The local time zone and Daylight Saving Time are implementation-defined.
15311 2   The macros defined are NULL (described in <a href="#7.19">7.19</a>); and
15312             CLOCKS_PER_SEC
15313     which expands to an expression with type clock_t (described below) that is the
15314     number per second of the value returned by the clock function.
15315 3   The types declared are size_t (described in <a href="#7.19">7.19</a>);
15316             clock_t
15317     and
15318             time_t
15319     which are arithmetic types capable of representing times; and
15320             struct tm
15321     which holds the components of a calendar time, called the broken-down time.
15322 4   The range and precision of times representable in clock_t and time_t are
15323     implementation-defined. The tm structure shall contain at least the following members,
15324     in any order. The semantics of the members and their normal ranges are expressed in the
15325     comments.303)
15326             int    tm_sec;           //   seconds after the minute -- [0, 60]
15327             int    tm_min;           //   minutes after the hour -- [0, 59]
15328             int    tm_hour;          //   hours since midnight -- [0, 23]
15329             int    tm_mday;          //   day of the month -- [1, 31]
15330             int    tm_mon;           //   months since January -- [0, 11]
15331             int    tm_year;          //   years since 1900
15332             int    tm_wday;          //   days since Sunday -- [0, 6]
15333             int    tm_yday;          //   days since January 1 -- [0, 365]
15334             int    tm_isdst;         //   Daylight Saving Time flag
15335
15336
15337
15338     303) The range [0, 60] for tm_sec allows for a positive leap second.
15339
15340 [<a name="#p384" href="p384">page 384</a>] (<a href="#Contents">Contents</a>)
15341
15342     The value of tm_isdst is positive if Daylight Saving Time is in effect, zero if Daylight
15343     Saving Time is not in effect, and negative if the information is not available.
15344 <a name="7.26.2" href="#7.26.2"><b>    7.26.2 Time manipulation functions</b></a>
15345 <a name="7.26.2.1" href="#7.26.2.1"><b>    7.26.2.1 The clock function</b></a>
15346     Synopsis
15347 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15348             clock_t clock(void);
15349     Description
15350 2   The clock function determines the processor time used.
15351     Returns
15352 3   The clock function returns the implementation's best approximation to the processor
15353     time used by the program since the beginning of an implementation-defined era related
15354     only to the program invocation. To determine the time in seconds, the value returned by
15355     the clock function should be divided by the value of the macro CLOCKS_PER_SEC. If
15356     the processor time used is not available or its value cannot be represented, the function
15357     returns the value (clock_t)(-1).304)
15358 <a name="7.26.2.2" href="#7.26.2.2"><b>    7.26.2.2 The difftime function</b></a>
15359     Synopsis
15360 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15361             double difftime(time_t time1, time_t time0);
15362     Description
15363 2   The difftime function computes the difference between two calendar times: time1 -
15364     time0.
15365     Returns
15366 3   The difftime function returns the difference expressed in seconds as a double.
15367
15368
15369
15370
15371     304) In order to measure the time spent in a program, the clock function should be called at the start of
15372          the program and its return value subtracted from the value returned by subsequent calls.
15373
15374 [<a name="#p385" href="p385">page 385</a>] (<a href="#Contents">Contents</a>)
15375
15376 <a name="7.26.2.3" href="#7.26.2.3"><b>    7.26.2.3 The mktime function</b></a>
15377     Synopsis
15378 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15379             time_t mktime(struct tm *timeptr);
15380     Description
15381 2   The mktime function converts the broken-down time, expressed as local time, in the
15382     structure pointed to by timeptr into a calendar time value with the same encoding as
15383     that of the values returned by the time function. The original values of the tm_wday
15384     and tm_yday components of the structure are ignored, and the original values of the
15385     other components are not restricted to the ranges indicated above.305) On successful
15386     completion, the values of the tm_wday and tm_yday components of the structure are
15387     set appropriately, and the other components are set to represent the specified calendar
15388     time, but with their values forced to the ranges indicated above; the final value of
15389     tm_mday is not set until tm_mon and tm_year are determined.
15390     Returns
15391 3   The mktime function returns the specified calendar time encoded as a value of type
15392     time_t. If the calendar time cannot be represented, the function returns the value
15393     (time_t)(-1).
15394 4   EXAMPLE       What day of the week is July 4, 2001?
15395             #include <a href="#7.21">&lt;stdio.h&gt;</a>
15396             #include <a href="#7.26">&lt;time.h&gt;</a>
15397             static const char *const wday[] = {
15398                     "Sunday", "Monday", "Tuesday", "Wednesday",
15399                     "Thursday", "Friday", "Saturday", "-unknown-"
15400             };
15401             struct tm time_str;
15402             /* ... */
15403
15404
15405
15406
15407     305) Thus, a positive or zero value for tm_isdst causes the mktime function to presume initially that
15408          Daylight Saving Time, respectively, is or is not in effect for the specified time. A negative value
15409          causes it to attempt to determine whether Daylight Saving Time is in effect for the specified time.
15410
15411 [<a name="#p386" href="p386">page 386</a>] (<a href="#Contents">Contents</a>)
15412
15413             time_str.tm_year   = 2001 - 1900;
15414             time_str.tm_mon    = 7 - 1;
15415             time_str.tm_mday   = 4;
15416             time_str.tm_hour   = 0;
15417             time_str.tm_min    = 0;
15418             time_str.tm_sec    = 1;
15419             time_str.tm_isdst = -1;
15420             if (mktime(&amp;time_str) == (time_t)(-1))
15421                   time_str.tm_wday = 7;
15422             printf("%s\n", wday[time_str.tm_wday]);
15423
15424 <a name="7.26.2.4" href="#7.26.2.4"><b>    7.26.2.4 The time function</b></a>
15425     Synopsis
15426 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15427             time_t time(time_t *timer);
15428     Description
15429 2   The time function determines the current calendar time. The encoding of the value is
15430     unspecified.
15431     Returns
15432 3   The time function returns the implementation's best approximation to the current
15433     calendar time. The value (time_t)(-1) is returned if the calendar time is not
15434     available. If timer is not a null pointer, the return value is also assigned to the object it
15435     points to.
15436 <a name="7.26.3" href="#7.26.3"><b>    7.26.3 Time conversion functions</b></a>
15437 1   Except for the strftime function, these functions each return a pointer to one of two
15438     types of static objects: a broken-down time structure or an array of char. Execution of
15439     any of the functions that return a pointer to one of these object types may overwrite the
15440     information in any object of the same type pointed to by the value returned from any
15441     previous call to any of them and the functions are not required to avoid data races. The
15442     implementation shall behave as if no other library functions call these functions.
15443 <a name="7.26.3.1" href="#7.26.3.1"><b>    7.26.3.1 The asctime function</b></a>
15444     Synopsis
15445 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15446             char *asctime(const struct tm *timeptr);
15447     Description
15448 2   The asctime function converts the broken-down time in the structure pointed to by
15449     timeptr into a string in the form
15450             Sun Sep 16 01:03:52 1973\n\0
15451
15452 [<a name="#p387" href="p387">page 387</a>] (<a href="#Contents">Contents</a>)
15453
15454     using the equivalent of the following algorithm.
15455     char *asctime(const struct tm *timeptr)
15456     {
15457          static const char wday_name[7][3] = {
15458               "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
15459          };
15460          static const char mon_name[12][3] = {
15461               "Jan", "Feb", "Mar", "Apr", "May", "Jun",
15462               "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
15463          };
15464          static char result[26];
15465             sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
15466                  wday_name[timeptr-&gt;tm_wday],
15467                  mon_name[timeptr-&gt;tm_mon],
15468                  timeptr-&gt;tm_mday, timeptr-&gt;tm_hour,
15469                  timeptr-&gt;tm_min, timeptr-&gt;tm_sec,
15470                  1900 + timeptr-&gt;tm_year);
15471             return result;
15472     }
15473 3   If any of the fields of the broken-down time contain values that are outside their normal
15474     ranges,306) the behavior of the asctime function is undefined. Likewise, if the
15475     calculated year exceeds four digits or is less than the year 1000, the behavior is
15476     undefined.
15477     Returns
15478 4   The asctime function returns a pointer to the string.
15479 <a name="7.26.3.2" href="#7.26.3.2"><b>    7.26.3.2 The ctime function</b></a>
15480     Synopsis
15481 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15482             char *ctime(const time_t *timer);
15483     Description
15484 2   The ctime function converts the calendar time pointed to by timer to local time in the
15485     form of a string. It is equivalent to
15486             asctime(localtime(timer))
15487
15488
15489
15490     306) See <a href="#7.26.1">7.26.1</a>.
15491
15492 [<a name="#p388" href="p388">page 388</a>] (<a href="#Contents">Contents</a>)
15493
15494     Returns
15495 3   The ctime function returns the pointer returned by the asctime function with that
15496     broken-down time as argument.
15497     Forward references: the localtime function (<a href="#7.26.3.4">7.26.3.4</a>).
15498 <a name="7.26.3.3" href="#7.26.3.3"><b>    7.26.3.3 The gmtime function</b></a>
15499     Synopsis
15500 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15501             struct tm *gmtime(const time_t *timer);
15502     Description
15503 2   The gmtime function converts the calendar time pointed to by timer into a broken-
15504     down time, expressed as UTC.
15505     Returns
15506 3   The gmtime function returns a pointer to the broken-down time, or a null pointer if the
15507     specified time cannot be converted to UTC.
15508 <a name="7.26.3.4" href="#7.26.3.4"><b>    7.26.3.4 The localtime function</b></a>
15509     Synopsis
15510 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15511             struct tm *localtime(const time_t *timer);
15512     Description
15513 2   The localtime function converts the calendar time pointed to by timer into a
15514     broken-down time, expressed as local time.
15515     Returns
15516 3   The localtime function returns a pointer to the broken-down time, or a null pointer if
15517     the specified time cannot be converted to local time.
15518 <a name="7.26.3.5" href="#7.26.3.5"><b>    7.26.3.5 The strftime function</b></a>
15519     Synopsis
15520 1           #include <a href="#7.26">&lt;time.h&gt;</a>
15521             size_t strftime(char * restrict s,
15522                  size_t maxsize,
15523                  const char * restrict format,
15524                  const struct tm * restrict timeptr);
15525
15526
15527
15528
15529 [<a name="#p389" href="p389">page 389</a>] (<a href="#Contents">Contents</a>)
15530
15531     Description
15532 2   The strftime function places characters into the array pointed to by s as controlled by
15533     the string pointed to by format. The format shall be a multibyte character sequence,
15534     beginning and ending in its initial shift state. The format string consists of zero or
15535     more conversion specifiers and ordinary multibyte characters. A conversion specifier
15536     consists of a % character, possibly followed by an E or O modifier character (described
15537     below), followed by a character that determines the behavior of the conversion specifier.
15538     All ordinary multibyte characters (including the terminating null character) are copied
15539     unchanged into the array. If copying takes place between objects that overlap, the
15540     behavior is undefined. No more than maxsize characters are placed into the array.
15541 3   Each conversion specifier is replaced by appropriate characters as described in the
15542     following list. The appropriate characters are determined using the LC_TIME category
15543     of the current locale and by the values of zero or more members of the broken-down time
15544     structure pointed to by timeptr, as specified in brackets in the description. If any of
15545     the specified values is outside the normal range, the characters stored are unspecified.
15546     %a    is replaced by the locale's abbreviated weekday name. [tm_wday]
15547     %A    is replaced by the locale's full weekday name. [tm_wday]
15548     %b    is replaced by the locale's abbreviated month name. [tm_mon]
15549     %B    is replaced by the locale's full month name. [tm_mon]
15550     %c    is replaced by the locale's appropriate date and time representation. [all specified
15551           in <a href="#7.26.1">7.26.1</a>]
15552     %C    is replaced by the year divided by 100 and truncated to an integer, as a decimal
15553           number (00-99). [tm_year]
15554     %d    is replaced by the day of the month as a decimal number (01-31). [tm_mday]
15555     %D    is equivalent to ''%m/%d/%y''. [tm_mon, tm_mday, tm_year]
15556     %e    is replaced by the day of the month as a decimal number (1-31); a single digit is
15557           preceded by a space. [tm_mday]
15558     %F    is equivalent to ''%Y-%m-%d'' (the ISO 8601 date format). [tm_year, tm_mon,
15559           tm_mday]
15560     %g    is replaced by the last 2 digits of the week-based year (see below) as a decimal
15561           number (00-99). [tm_year, tm_wday, tm_yday]
15562     %G    is replaced by the week-based year (see below) as a decimal number (e.g., 1997).
15563           [tm_year, tm_wday, tm_yday]
15564     %h    is equivalent to ''%b''. [tm_mon]
15565     %H    is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour]
15566     %I    is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour]
15567     %j    is replaced by the day of the year as a decimal number (001-366). [tm_yday]
15568     %m    is replaced by the month as a decimal number (01-12). [tm_mon]
15569     %M    is replaced by the minute as a decimal number (00-59). [tm_min]
15570     %n    is replaced by a new-line character.
15571
15572 [<a name="#p390" href="p390">page 390</a>] (<a href="#Contents">Contents</a>)
15573
15574     %p   is replaced by the locale's equivalent of the AM/PM designations associated with a
15575          12-hour clock. [tm_hour]
15576     %r   is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec]
15577     %R   is equivalent to ''%H:%M''. [tm_hour, tm_min]
15578     %S   is replaced by the second as a decimal number (00-60). [tm_sec]
15579     %t   is replaced by a horizontal-tab character.
15580     %T   is equivalent to ''%H:%M:%S'' (the ISO 8601 time format). [tm_hour, tm_min,
15581          tm_sec]
15582     %u   is replaced by the ISO 8601 weekday as a decimal number (1-7), where Monday
15583          is 1. [tm_wday]
15584     %U   is replaced by the week number of the year (the first Sunday as the first day of week
15585          1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
15586     %V   is replaced by the ISO 8601 week number (see below) as a decimal number
15587          (01-53). [tm_year, tm_wday, tm_yday]
15588     %w   is replaced by the weekday as a decimal number (0-6), where Sunday is 0.
15589          [tm_wday]
15590     %W   is replaced by the week number of the year (the first Monday as the first day of
15591          week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
15592     %x   is replaced by the locale's appropriate date representation. [all specified in <a href="#7.26.1">7.26.1</a>]
15593     %X   is replaced by the locale's appropriate time representation. [all specified in <a href="#7.26.1">7.26.1</a>]
15594     %y   is replaced by the last 2 digits of the year as a decimal number (00-99).
15595          [tm_year]
15596     %Y   is replaced by the year as a decimal number (e.g., 1997). [tm_year]
15597     %z   is replaced by the offset from UTC in the ISO 8601 format ''-0430'' (meaning 4
15598          hours 30 minutes behind UTC, west of Greenwich), or by no characters if no time
15599          zone is determinable. [tm_isdst]
15600     %Z   is replaced by the locale's time zone name or abbreviation, or by no characters if no
15601          time zone is determinable. [tm_isdst]
15602     %%   is replaced by %.
15603 4   Some conversion specifiers can be modified by the inclusion of an E or O modifier
15604     character to indicate an alternative format or specification. If the alternative format or
15605     specification does not exist for the current locale, the modifier is ignored.
15606     %Ec is replaced by the locale's alternative date and time representation.
15607     %EC is replaced by the name of the base year (period) in the locale's alternative
15608         representation.
15609     %Ex is replaced by the locale's alternative date representation.
15610     %EX is replaced by the locale's alternative time representation.
15611     %Ey is replaced by the offset from %EC (year only) in the locale's alternative
15612         representation.
15613     %EY is replaced by the locale's full alternative year representation.
15614
15615 [<a name="#p391" href="p391">page 391</a>] (<a href="#Contents">Contents</a>)
15616
15617     %Od is replaced by the day of the month, using the locale's alternative numeric symbols
15618         (filled as needed with leading zeros, or with leading spaces if there is no alternative
15619         symbol for zero).
15620     %Oe is replaced by the day of the month, using the locale's alternative numeric symbols
15621         (filled as needed with leading spaces).
15622     %OH is replaced by the hour (24-hour clock), using the locale's alternative numeric
15623         symbols.
15624     %OI is replaced by the hour (12-hour clock), using the locale's alternative numeric
15625         symbols.
15626     %Om is replaced by the month, using the locale's alternative numeric symbols.
15627     %OM is replaced by the minutes, using the locale's alternative numeric symbols.
15628     %OS is replaced by the seconds, using the locale's alternative numeric symbols.
15629     %Ou is replaced by the ISO 8601 weekday as a number in the locale's alternative
15630         representation, where Monday is 1.
15631     %OU is replaced by the week number, using the locale's alternative numeric symbols.
15632     %OV is replaced by the ISO 8601 week number, using the locale's alternative numeric
15633         symbols.
15634     %Ow is replaced by the weekday as a number, using the locale's alternative numeric
15635         symbols.
15636     %OW is replaced by the week number of the year, using the locale's alternative numeric
15637         symbols.
15638     %Oy is replaced by the last 2 digits of the year, using the locale's alternative numeric
15639         symbols.
15640 5   %g, %G, and %V give values according to the ISO 8601 week-based year. In this system,
15641     weeks begin on a Monday and week 1 of the year is the week that includes January 4th,
15642     which is also the week that includes the first Thursday of the year, and is also the first
15643     week that contains at least four days in the year. If the first Monday of January is the
15644     2nd, 3rd, or 4th, the preceding days are part of the last week of the preceding year; thus,
15645     for Saturday 2nd January 1999, %G is replaced by 1998 and %V is replaced by 53. If
15646     December 29th, 30th, or 31st is a Monday, it and any following days are part of week 1 of
15647     the following year. Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and
15648     %V is replaced by 01.
15649 6   If a conversion specifier is not one of the above, the behavior is undefined.
15650 7   In the "C" locale, the E and O modifiers are ignored and the replacement strings for the
15651     following specifiers are:
15652     %a    the first three characters of %A.
15653     %A    one of ''Sunday'', ''Monday'', ... , ''Saturday''.
15654     %b    the first three characters of %B.
15655     %B    one of ''January'', ''February'', ... , ''December''.
15656     %c    equivalent to ''%a %b %e %T %Y''.
15657 [<a name="#p392" href="p392">page 392</a>] (<a href="#Contents">Contents</a>)
15658
15659     %p    one of ''AM'' or ''PM''.
15660     %r    equivalent to ''%I:%M:%S %p''.
15661     %x    equivalent to ''%m/%d/%y''.
15662     %X    equivalent to %T.
15663     %Z    implementation-defined.
15664     Returns
15665 8   If the total number of resulting characters including the terminating null character is not
15666     more than maxsize, the strftime function returns the number of characters placed
15667     into the array pointed to by s not including the terminating null character. Otherwise,
15668     zero is returned and the contents of the array are indeterminate.
15669
15670
15671
15672
15673 [<a name="#p393" href="p393">page 393</a>] (<a href="#Contents">Contents</a>)
15674
15675 <a name="7.27" href="#7.27"><b>    7.27 Unicode utilities &lt;uchar.h&gt;</b></a>
15676 1   The header <a href="#7.27">&lt;uchar.h&gt;</a> declares types and functions for manipulating Unicode
15677     characters.
15678 2   The types declared are mbstate_t (described in <a href="#7.29.1">7.29.1</a>) and size_t (described in
15679 <a name="7.19);" href="#7.19);"><b>    7.19);</b></a>
15680            char16_t
15681     which is an unsigned integer type used for 16-bit characters and is the same type as
15682     uint_least16_t (described in <a href="#7.20.1.2">7.20.1.2</a>); and
15683            char32_t
15684     which is an unsigned integer type used for 32-bit characters and is the same type as
15685     uint_least32_t (also described in <a href="#7.20.1.2">7.20.1.2</a>).
15686 <a name="7.27.1" href="#7.27.1"><b>    7.27.1 Restartable multibyte/wide character conversion functions</b></a>
15687 1   These functions have a parameter, ps, of type pointer to mbstate_t that points to an
15688     object that can completely describe the current conversion state of the associated
15689     multibyte character sequence, which the functions alter as necessary. If ps is a null
15690     pointer, each function uses its own internal mbstate_t object instead, which is
15691     initialized at program startup to the initial conversion state; the functions are not required
15692     to avoid data races in this case. The implementation behaves as if no library function
15693     calls these functions with a null pointer for ps.
15694 <a name="7.27.1.1" href="#7.27.1.1"><b>    7.27.1.1 The mbrtoc16 function</b></a>
15695     Synopsis
15696 1          #include <a href="#7.27">&lt;uchar.h&gt;</a>
15697            size_t mbrtoc16(char16_t * restrict pc16,
15698                 const char * restrict s, size_t n,
15699                 mbstate_t * restrict ps);
15700     Description
15701 2   If s is a null pointer, the mbrtoc16 function is equivalent to the call:
15702                    mbrtoc16(NULL, "", 1, ps)
15703     In this case, the values of the parameters pc16 and n are ignored.
15704 3   If s is not a null pointer, the mbrtoc16 function inspects at most n bytes beginning with
15705     the byte pointed to by s to determine the number of bytes needed to complete the next
15706     multibyte character (including any shift sequences). If the function determines that the
15707     next multibyte character is complete and valid, it determines the values of the
15708     corresponding wide characters and then, if pc16 is not a null pointer, stores the value of
15709     the first (or only) such character in the object pointed to by pc16. Subsequent calls will
15710 [<a name="#p394" href="p394">page 394</a>] (<a href="#Contents">Contents</a>)
15711
15712     store successive wide characters without consuming any additional input until all the
15713     characters have been stored. If the corresponding wide character is the null wide
15714     character, the resulting state described is the initial conversion state.
15715     Returns
15716 4   The mbrtoc16 function returns the first of the following that applies (given the current
15717     conversion state):
15718     0                     if the next n or fewer bytes complete the multibyte character that
15719                           corresponds to the null wide character (which is the value stored).
15720     between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte
15721                        character (which is the value stored); the value returned is the number
15722                        of bytes that complete the multibyte character.
15723     (size_t)(-3) if the next character resulting from a previous call has been stored (no
15724                  bytes from the input have been consumed by this call).
15725     (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
15726                  multibyte character, and all n bytes have been processed (no value is
15727                  stored).307)
15728     (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
15729                  do not contribute to a complete and valid multibyte character (no
15730                  value is stored); the value of the macro EILSEQ is stored in errno,
15731                  and the conversion state is unspecified.
15732 <a name="7.27.1.2" href="#7.27.1.2"><b>    7.27.1.2 The c16rtomb function</b></a>
15733     Synopsis
15734 1           #include <a href="#7.27">&lt;uchar.h&gt;</a>
15735             size_t c16rtomb(char * restrict s, char16_t c16,
15736                  mbstate_t * restrict ps);
15737     Description
15738 2   If s is a null pointer, the c16rtomb function is equivalent to the call
15739                     c16rtomb(buf, L'\0', ps)
15740     where buf is an internal buffer.
15741 3   If s is not a null pointer, the c16rtomb function determines the number of bytes needed
15742     to represent the multibyte character that corresponds to the wide character given by c16
15743     (including any shift sequences), and stores the multibyte character representation in the
15744
15745     307) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
15746          sequence of redundant shift sequences (for implementations with state-dependent encodings).
15747
15748 [<a name="#p395" href="p395">page 395</a>] (<a href="#Contents">Contents</a>)
15749
15750     array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
15751     c16 is a null wide character, a null byte is stored, preceded by any shift sequence needed
15752     to restore the initial shift state; the resulting state described is the initial conversion state.
15753     Returns
15754 4   The c16rtomb function returns the number of bytes stored in the array object (including
15755     any shift sequences). When c16 is not a valid wide character, an encoding error occurs:
15756     the function stores the value of the macro EILSEQ in errno and returns
15757     (size_t)(-1); the conversion state is unspecified.
15758 <a name="7.27.1.3" href="#7.27.1.3"><b>    7.27.1.3 The mbrtoc32 function</b></a>
15759     Synopsis
15760 1           #include <a href="#7.27">&lt;uchar.h&gt;</a>
15761             size_t mbrtoc32(char32_t * restrict pc32,
15762                  const char * restrict s, size_t n,
15763                  mbstate_t * restrict ps);
15764     Description
15765 2   If s is a null pointer, the mbrtoc32 function is equivalent to the call:
15766                     mbrtoc32(NULL, "", 1, ps)
15767     In this case, the values of the parameters pc32 and n are ignored.
15768 3   If s is not a null pointer, the mbrtoc32 function inspects at most n bytes beginning with
15769     the byte pointed to by s to determine the number of bytes needed to complete the next
15770     multibyte character (including any shift sequences). If the function determines that the
15771     next multibyte character is complete and valid, it determines the values of the
15772     corresponding wide characters and then, if pc32 is not a null pointer, stores the value of
15773     the first (or only) such character in the object pointed to by pc32. Subsequent calls will
15774     store successive wide characters without consuming any additional input until all the
15775     characters have been stored. If the corresponding wide character is the null wide
15776     character, the resulting state described is the initial conversion state.
15777     Returns
15778 4   The mbrtoc32 function returns the first of the following that applies (given the current
15779     conversion state):
15780     0                    if the next n or fewer bytes complete the multibyte character that
15781                          corresponds to the null wide character (which is the value stored).
15782     between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte
15783                        character (which is the value stored); the value returned is the number
15784                        of bytes that complete the multibyte character.
15785
15786
15787 [<a name="#p396" href="p396">page 396</a>] (<a href="#Contents">Contents</a>)
15788
15789     (size_t)(-3) if the next character resulting from a previous call has been stored (no
15790                  bytes from the input have been consumed by this call).
15791     (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
15792                  multibyte character, and all n bytes have been processed (no value is
15793                  stored).308)
15794     (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
15795                  do not contribute to a complete and valid multibyte character (no
15796                  value is stored); the value of the macro EILSEQ is stored in errno,
15797                  and the conversion state is unspecified.
15798 <a name="7.27.1.4" href="#7.27.1.4"><b>    7.27.1.4 The c32rtomb function</b></a>
15799     Synopsis
15800 1           #include <a href="#7.27">&lt;uchar.h&gt;</a>
15801             size_t c32rtomb(char * restrict s, char32_t c32,
15802                  mbstate_t * restrict ps);
15803     Description
15804 2   If s is a null pointer, the c32rtomb function is equivalent to the call
15805                     c32rtomb(buf, L'\0', ps)
15806     where buf is an internal buffer.
15807 3   If s is not a null pointer, the c32rtomb function determines the number of bytes needed
15808     to represent the multibyte character that corresponds to the wide character given by c32
15809     (including any shift sequences), and stores the multibyte character representation in the
15810     array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
15811     c32 is a null wide character, a null byte is stored, preceded by any shift sequence needed
15812     to restore the initial shift state; the resulting state described is the initial conversion state.
15813     Returns
15814 4   The c32rtomb function returns the number of bytes stored in the array object (including
15815     any shift sequences). When c32 is not a valid wide character, an encoding error occurs:
15816     the function stores the value of the macro EILSEQ in errno and returns
15817     (size_t)(-1); the conversion state is unspecified.
15818
15819
15820
15821
15822     308) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
15823          sequence of redundant shift sequences (for implementations with state-dependent encodings).
15824
15825 [<a name="#p397" href="p397">page 397</a>] (<a href="#Contents">Contents</a>)
15826
15827 <a name="7.28" href="#7.28"><b>    7.28 Extended multibyte and wide character utilities &lt;wchar.h&gt;</b></a>
15828 <a name="7.28.1" href="#7.28.1"><b>    7.28.1 Introduction</b></a>
15829 1   The header <a href="#7.28">&lt;wchar.h&gt;</a> defines four macros, and declares four data types, one tag, and
15830     many functions.309)
15831 2   The types declared are wchar_t and size_t (both described in <a href="#7.19">7.19</a>);
15832              mbstate_t
15833     which is a complete object type other than an array type that can hold the conversion state
15834     information necessary to convert between sequences of multibyte characters and wide
15835     characters;
15836              wint_t
15837     which is an integer type unchanged by default argument promotions that can hold any
15838     value corresponding to members of the extended character set, as well as at least one
15839     value that does not correspond to any member of the extended character set (see WEOF
15840     below);310) and
15841              struct tm
15842     which is declared as an incomplete structure type (the contents are described in <a href="#7.26.1">7.26.1</a>).
15843 3   The macros defined are NULL (described in <a href="#7.19">7.19</a>); WCHAR_MIN and WCHAR_MAX
15844     (described in <a href="#7.20.3">7.20.3</a>); and
15845              WEOF
15846     which expands to a constant expression of type wint_t whose value does not
15847     correspond to any member of the extended character set.311) It is accepted (and returned)
15848     by several functions in this subclause to indicate end-of-file, that is, no more input from a
15849     stream. It is also used as a wide character value that does not correspond to any member
15850     of the extended character set.
15851 4   The functions declared are grouped as follows:
15852     -- Functions that perform input and output of wide characters, or multibyte characters,
15853       or both;
15854     -- Functions that provide wide string numeric conversion;
15855     -- Functions that perform general wide string manipulation;
15856
15857
15858     309) See ''future library directions'' (<a href="#7.30.12">7.30.12</a>).
15859     310) wchar_t and wint_t can be the same integer type.
15860     311) The value of the macro WEOF may differ from that of EOF and need not be negative.
15861
15862 [<a name="#p398" href="p398">page 398</a>] (<a href="#Contents">Contents</a>)
15863
15864     -- Functions for wide string date and time conversion; and
15865     -- Functions that provide extended capabilities for conversion between multibyte and
15866       wide character sequences.
15867 5   Unless explicitly stated otherwise, if the execution of a function described in this
15868     subclause causes copying to take place between objects that overlap, the behavior is
15869     undefined.
15870 <a name="7.28.2" href="#7.28.2"><b>    7.28.2 Formatted wide character input/output functions</b></a>
15871 1   The formatted wide character input/output functions shall behave as if there is a sequence
15872     point after the actions associated with each specifier.312)
15873 <a name="7.28.2.1" href="#7.28.2.1"><b>    7.28.2.1 The fwprintf function</b></a>
15874     Synopsis
15875 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
15876             #include <a href="#7.28">&lt;wchar.h&gt;</a>
15877             int fwprintf(FILE * restrict stream,
15878                  const wchar_t * restrict format, ...);
15879     Description
15880 2   The fwprintf function writes output to the stream pointed to by stream, under
15881     control of the wide string pointed to by format that specifies how subsequent arguments
15882     are converted for output. If there are insufficient arguments for the format, the behavior
15883     is undefined. If the format is exhausted while arguments remain, the excess arguments
15884     are evaluated (as always) but are otherwise ignored. The fwprintf function returns
15885     when the end of the format string is encountered.
15886 3   The format is composed of zero or more directives: ordinary wide characters (not %),
15887     which are copied unchanged to the output stream; and conversion specifications, each of
15888     which results in fetching zero or more subsequent arguments, converting them, if
15889     applicable, according to the corresponding conversion specifier, and then writing the
15890     result to the output stream.
15891 4   Each conversion specification is introduced by the wide character %. After the %, the
15892     following appear in sequence:
15893     -- Zero or more flags (in any order) that modify the meaning of the conversion
15894       specification.
15895     -- An optional minimum field width. If the converted value has fewer wide characters
15896       than the field width, it is padded with spaces (by default) on the left (or right, if the
15897
15898
15899     312) The fwprintf functions perform writes to memory for the %n specifier.
15900
15901 [<a name="#p399" href="p399">page 399</a>] (<a href="#Contents">Contents</a>)
15902
15903         left adjustment flag, described later, has been given) to the field width. The field
15904         width takes the form of an asterisk * (described later) or a nonnegative decimal
15905         integer.313)
15906     -- An optional precision that gives the minimum number of digits to appear for the d, i,
15907       o, u, x, and X conversions, the number of digits to appear after the decimal-point
15908       wide character for a, A, e, E, f, and F conversions, the maximum number of
15909       significant digits for the g and G conversions, or the maximum number of wide
15910       characters to be written for s conversions. The precision takes the form of a period
15911       (.) followed either by an asterisk * (described later) or by an optional decimal
15912       integer; if only the period is specified, the precision is taken as zero. If a precision
15913       appears with any other conversion specifier, the behavior is undefined.
15914     -- An optional length modifier that specifies the size of the argument.
15915     -- A conversion specifier wide character that specifies the type of conversion to be
15916       applied.
15917 5   As noted above, a field width, or precision, or both, may be indicated by an asterisk. In
15918     this case, an int argument supplies the field width or precision. The arguments
15919     specifying field width, or precision, or both, shall appear (in that order) before the
15920     argument (if any) to be converted. A negative field width argument is taken as a - flag
15921     followed by a positive field width. A negative precision argument is taken as if the
15922     precision were omitted.
15923 6   The flag wide characters and their meanings are:
15924     -        The result of the conversion is left-justified within the field. (It is right-justified if
15925              this flag is not specified.)
15926     +        The result of a signed conversion always begins with a plus or minus sign. (It
15927              begins with a sign only when a negative value is converted if this flag is not
15928              specified.)314)
15929     space If the first wide character of a signed conversion is not a sign, or if a signed
15930           conversion results in no wide characters, a space is prefixed to the result. If the
15931           space and + flags both appear, the space flag is ignored.
15932     #        The result is converted to an ''alternative form''. For o conversion, it increases
15933              the precision, if and only if necessary, to force the first digit of the result to be a
15934              zero (if the value and precision are both 0, a single 0 is printed). For x (or X)
15935              conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g,
15936
15937
15938     313) Note that 0 is taken as a flag, not as the beginning of a field width.
15939     314) The results of all floating conversions of a negative zero, and of negative values that round to zero,
15940          include a minus sign.
15941
15942 [<a name="#p400" href="p400">page 400</a>] (<a href="#Contents">Contents</a>)
15943
15944               and G conversions, the result of converting a floating-point number always
15945               contains a decimal-point wide character, even if no digits follow it. (Normally, a
15946               decimal-point wide character appears in the result of these conversions only if a
15947               digit follows it.) For g and G conversions, trailing zeros are not removed from the
15948               result. For other conversions, the behavior is undefined.
15949     0         For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros
15950               (following any indication of sign or base) are used to pad to the field width rather
15951               than performing space padding, except when converting an infinity or NaN. If the
15952               0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X
15953               conversions, if a precision is specified, the 0 flag is ignored. For other
15954               conversions, the behavior is undefined.
15955 7   The length modifiers and their meanings are:
15956     hh             Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
15957                    signed char or unsigned char argument (the argument will have
15958                    been promoted according to the integer promotions, but its value shall be
15959                    converted to signed char or unsigned char before printing); or that
15960                    a following n conversion specifier applies to a pointer to a signed char
15961                    argument.
15962     h              Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
15963                    short int or unsigned short int argument (the argument will
15964                    have been promoted according to the integer promotions, but its value shall
15965                    be converted to short int or unsigned short int before printing);
15966                    or that a following n conversion specifier applies to a pointer to a short
15967                    int argument.
15968     l (ell)        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
15969                    long int or unsigned long int argument; that a following n
15970                    conversion specifier applies to a pointer to a long int argument; that a
15971                    following c conversion specifier applies to a wint_t argument; that a
15972                    following s conversion specifier applies to a pointer to a wchar_t
15973                    argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
15974                    specifier.
15975     ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
15976                  long long int or unsigned long long int argument; or that a
15977                  following n conversion specifier applies to a pointer to a long long int
15978                  argument.
15979     j              Specifies that a following d, i, o, u, x, or X conversion specifier applies to
15980                    an intmax_t or uintmax_t argument; or that a following n conversion
15981                    specifier applies to a pointer to an intmax_t argument.
15982
15983 [<a name="#p401" href="p401">page 401</a>] (<a href="#Contents">Contents</a>)
15984
15985     z           Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
15986                 size_t or the corresponding signed integer type argument; or that a
15987                 following n conversion specifier applies to a pointer to a signed integer type
15988                 corresponding to size_t argument.
15989     t           Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
15990                 ptrdiff_t or the corresponding unsigned integer type argument; or that a
15991                 following n conversion specifier applies to a pointer to a ptrdiff_t
15992                 argument.
15993     L           Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
15994                 applies to a long double argument.
15995     If a length modifier appears with any conversion specifier other than as specified above,
15996     the behavior is undefined.
15997 8   The conversion specifiers and their meanings are:
15998     d,i        The int argument is converted to signed decimal in the style [-]dddd. The
15999                precision specifies the minimum number of digits to appear; if the value
16000                being converted can be represented in fewer digits, it is expanded with
16001                leading zeros. The default precision is 1. The result of converting a zero
16002                value with a precision of zero is no wide characters.
16003     o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned
16004             decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the
16005             letters abcdef are used for x conversion and the letters ABCDEF for X
16006             conversion. The precision specifies the minimum number of digits to appear;
16007             if the value being converted can be represented in fewer digits, it is expanded
16008             with leading zeros. The default precision is 1. The result of converting a
16009             zero value with a precision of zero is no wide characters.
16010     f,F        A double argument representing a floating-point number is converted to
16011                decimal notation in the style [-]ddd.ddd, where the number of digits after
16012                the decimal-point wide character is equal to the precision specification. If the
16013                precision is missing, it is taken as 6; if the precision is zero and the # flag is
16014                not specified, no decimal-point wide character appears. If a decimal-point
16015                wide character appears, at least one digit appears before it. The value is
16016                rounded to the appropriate number of digits.
16017                A double argument representing an infinity is converted in one of the styles
16018                [-]inf or [-]infinity -- which style is implementation-defined. A
16019                double argument representing a NaN is converted in one of the styles
16020                [-]nan or [-]nan(n-wchar-sequence) -- which style, and the meaning of
16021                any n-wchar-sequence, is implementation-defined. The F conversion
16022                specifier produces INF, INFINITY, or NAN instead of inf, infinity, or
16023
16024 [<a name="#p402" href="p402">page 402</a>] (<a href="#Contents">Contents</a>)
16025
16026              nan, respectively.315)
16027 e,E          A double argument representing a floating-point number is converted in the
16028              style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the
16029              argument is nonzero) before the decimal-point wide character and the number
16030              of digits after it is equal to the precision; if the precision is missing, it is taken
16031              as 6; if the precision is zero and the # flag is not specified, no decimal-point
16032              wide character appears. The value is rounded to the appropriate number of
16033              digits. The E conversion specifier produces a number with E instead of e
16034              introducing the exponent. The exponent always contains at least two digits,
16035              and only as many more digits as necessary to represent the exponent. If the
16036              value is zero, the exponent is zero.
16037              A double argument representing an infinity or NaN is converted in the style
16038              of an f or F conversion specifier.
16039 g,G          A double argument representing a floating-point number is converted in
16040              style f or e (or in style F or E in the case of a G conversion specifier),
16041              depending on the value converted and the precision. Let P equal the
16042              precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero.
16043              Then, if a conversion with style E would have an exponent of X:
16044              -- if P &gt; X &gt;= -4, the conversion is with style f (or F) and precision
16045                P - (X + 1).
16046              -- otherwise, the conversion is with style e (or E) and precision P - 1.
16047              Finally, unless the # flag is used, any trailing zeros are removed from the
16048              fractional portion of the result and the decimal-point wide character is
16049              removed if there is no fractional portion remaining.
16050              A double argument representing an infinity or NaN is converted in the style
16051              of an f or F conversion specifier.
16052 a,A          A double argument representing a floating-point number is converted in the
16053              style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is
16054              nonzero if the argument is a normalized floating-point number and is
16055              otherwise unspecified) before the decimal-point wide character316) and the
16056              number of hexadecimal digits after it is equal to the precision; if the precision
16057              is missing and FLT_RADIX is a power of 2, then the precision is sufficient
16058
16059
16060 315) When applied to infinite and NaN values, the -, +, and space flag wide characters have their usual
16061      meaning; the # and 0 flag wide characters have no effect.
16062 316) Binary implementations can choose the hexadecimal digit to the left of the decimal-point wide
16063      character so that subsequent digits align to nibble (4-bit) boundaries.
16064
16065 [<a name="#p403" href="p403">page 403</a>] (<a href="#Contents">Contents</a>)
16066
16067              for an exact representation of the value; if the precision is missing and
16068              FLT_RADIX is not a power of 2, then the precision is sufficient to
16069              distinguish317) values of type double, except that trailing zeros may be
16070              omitted; if the precision is zero and the # flag is not specified, no decimal-
16071              point wide character appears. The letters abcdef are used for a conversion
16072              and the letters ABCDEF for A conversion. The A conversion specifier
16073              produces a number with X and P instead of x and p. The exponent always
16074              contains at least one digit, and only as many more digits as necessary to
16075              represent the decimal exponent of 2. If the value is zero, the exponent is
16076              zero.
16077              A double argument representing an infinity or NaN is converted in the style
16078              of an f or F conversion specifier.
16079 c            If no l length modifier is present, the int argument is converted to a wide
16080              character as if by calling btowc and the resulting wide character is written.
16081              If an l length modifier is present, the wint_t argument is converted to
16082              wchar_t and written.
16083 s            If no l length modifier is present, the argument shall be a pointer to the initial
16084              element of a character array containing a multibyte character sequence
16085              beginning in the initial shift state. Characters from the array are converted as
16086              if by repeated calls to the mbrtowc function, with the conversion state
16087              described by an mbstate_t object initialized to zero before the first
16088              multibyte character is converted, and written up to (but not including) the
16089              terminating null wide character. If the precision is specified, no more than
16090              that many wide characters are written. If the precision is not specified or is
16091              greater than the size of the converted array, the converted array shall contain a
16092              null wide character.
16093              If an l length modifier is present, the argument shall be a pointer to the initial
16094              element of an array of wchar_t type. Wide characters from the array are
16095              written up to (but not including) a terminating null wide character. If the
16096              precision is specified, no more than that many wide characters are written. If
16097              the precision is not specified or is greater than the size of the array, the array
16098              shall contain a null wide character.
16099 p            The argument shall be a pointer to void. The value of the pointer is
16100              converted to a sequence of printing wide characters, in an implementation-
16101
16102 317) The precision p is sufficient to distinguish values of the source type if 16 p-1 &gt; b n where b is
16103      FLT_RADIX and n is the number of base-b digits in the significand of the source type. A smaller p
16104      might suffice depending on the implementation's scheme for determining the digit to the left of the
16105      decimal-point wide character.
16106
16107 [<a name="#p404" href="p404">page 404</a>] (<a href="#Contents">Contents</a>)
16108
16109                     defined manner.
16110      n              The argument shall be a pointer to signed integer into which is written the
16111                     number of wide characters written to the output stream so far by this call to
16112                     fwprintf. No argument is converted, but one is consumed. If the
16113                     conversion specification includes any flags, a field width, or a precision, the
16114                     behavior is undefined.
16115      %              A % wide character is written. No argument is converted. The complete
16116                     conversion specification shall be %%.
16117 9    If a conversion specification is invalid, the behavior is undefined.318) If any argument is
16118      not the correct type for the corresponding conversion specification, the behavior is
16119      undefined.
16120 10   In no case does a nonexistent or small field width cause truncation of a field; if the result
16121      of a conversion is wider than the field width, the field is expanded to contain the
16122      conversion result.
16123 11   For a and A conversions, if FLT_RADIX is a power of 2, the value is correctly rounded
16124      to a hexadecimal floating number with the given precision.
16125      Recommended practice
16126 12   For a and A conversions, if FLT_RADIX is not a power of 2 and the result is not exactly
16127      representable in the given precision, the result should be one of the two adjacent numbers
16128      in hexadecimal floating style with the given precision, with the extra stipulation that the
16129      error should have a correct sign for the current rounding direction.
16130 13   For e, E, f, F, g, and G conversions, if the number of significant decimal digits is at most
16131      DECIMAL_DIG, then the result should be correctly rounded.319) If the number of
16132      significant decimal digits is more than DECIMAL_DIG but the source value is exactly
16133      representable with DECIMAL_DIG digits, then the result should be an exact
16134      representation with trailing zeros. Otherwise, the source value is bounded by two
16135      adjacent decimal strings L &lt; U, both having DECIMAL_DIG significant digits; the value
16136      of the resultant decimal string D should satisfy L &lt;= D &lt;= U, with the extra stipulation that
16137      the error should have a correct sign for the current rounding direction.
16138      Returns
16139 14   The fwprintf function returns the number of wide characters transmitted, or a negative
16140      value if an output or encoding error occurred.
16141
16142      318) See ''future library directions'' (<a href="#7.30.12">7.30.12</a>).
16143      319) For binary-to-decimal conversion, the result format's values are the numbers representable with the
16144           given format specifier. The number of significant digits is determined by the format specifier, and in
16145           the case of fixed-point conversion by the source value as well.
16146
16147 [<a name="#p405" href="p405">page 405</a>] (<a href="#Contents">Contents</a>)
16148
16149      Environmental limits
16150 15   The number of wide characters that can be produced by any single conversion shall be at
16151      least 4095.
16152 16   EXAMPLE       To print a date and time in the form ''Sunday, July 3, 10:02'' followed by pi to five decimal
16153      places:
16154             #include <a href="#7.12">&lt;math.h&gt;</a>
16155             #include <a href="#7.21">&lt;stdio.h&gt;</a>
16156             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16157             /* ... */
16158             wchar_t *weekday, *month; // pointers to wide strings
16159             int day, hour, min;
16160             fwprintf(stdout, L"%ls, %ls %d, %.2d:%.2d\n",
16161                     weekday, month, day, hour, min);
16162             fwprintf(stdout, L"pi = %.5f\n", 4 * atan(<a href="#1.0">1.0</a>));
16163
16164      Forward references:          the btowc function (<a href="#7.28.6.1.1">7.28.6.1.1</a>), the mbrtowc function
16165      (<a href="#7.28.6.3.2">7.28.6.3.2</a>).
16166 <a name="7.28.2.2" href="#7.28.2.2"><b>     7.28.2.2 The fwscanf function</b></a>
16167      Synopsis
16168 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16169             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16170             int fwscanf(FILE * restrict stream,
16171                  const wchar_t * restrict format, ...);
16172      Description
16173 2    The fwscanf function reads input from the stream pointed to by stream, under
16174      control of the wide string pointed to by format that specifies the admissible input
16175      sequences and how they are to be converted for assignment, using subsequent arguments
16176      as pointers to the objects to receive the converted input. If there are insufficient
16177      arguments for the format, the behavior is undefined. If the format is exhausted while
16178      arguments remain, the excess arguments are evaluated (as always) but are otherwise
16179      ignored.
16180 3    The format is composed of zero or more directives: one or more white-space wide
16181      characters, an ordinary wide character (neither % nor a white-space wide character), or a
16182      conversion specification. Each conversion specification is introduced by the wide
16183      character %. After the %, the following appear in sequence:
16184      -- An optional assignment-suppressing wide character *.
16185      -- An optional decimal integer greater than zero that specifies the maximum field width
16186        (in wide characters).
16187
16188
16189
16190 [<a name="#p406" href="p406">page 406</a>] (<a href="#Contents">Contents</a>)
16191
16192      -- An optional length modifier that specifies the size of the receiving object.
16193      -- A conversion specifier wide character that specifies the type of conversion to be
16194        applied.
16195 4    The fwscanf function executes each directive of the format in turn. When all directives
16196      have been executed, or if a directive fails (as detailed below), the function returns.
16197      Failures are described as input failures (due to the occurrence of an encoding error or the
16198      unavailability of input characters), or matching failures (due to inappropriate input).
16199 5    A directive composed of white-space wide character(s) is executed by reading input up to
16200      the first non-white-space wide character (which remains unread), or until no more wide
16201      characters can be read.
16202 6    A directive that is an ordinary wide character is executed by reading the next wide
16203      character of the stream. If that wide character differs from the directive, the directive
16204      fails and the differing and subsequent wide characters remain unread. Similarly, if end-
16205      of-file, an encoding error, or a read error prevents a wide character from being read, the
16206      directive fails.
16207 7    A directive that is a conversion specification defines a set of matching input sequences, as
16208      described below for each specifier. A conversion specification is executed in the
16209      following steps:
16210 8    Input white-space wide characters (as specified by the iswspace function) are skipped,
16211      unless the specification includes a [, c, or n specifier.320)
16212 9    An input item is read from the stream, unless the specification includes an n specifier. An
16213      input item is defined as the longest sequence of input wide characters which does not
16214      exceed any specified field width and which is, or is a prefix of, a matching input
16215      sequence.321) The first wide character, if any, after the input item remains unread. If the
16216      length of the input item is zero, the execution of the directive fails; this condition is a
16217      matching failure unless end-of-file, an encoding error, or a read error prevented input
16218      from the stream, in which case it is an input failure.
16219 10   Except in the case of a % specifier, the input item (or, in the case of a %n directive, the
16220      count of input wide characters) is converted to a type appropriate to the conversion
16221      specifier. If the input item is not a matching sequence, the execution of the directive fails:
16222      this condition is a matching failure. Unless assignment suppression was indicated by a *,
16223      the result of the conversion is placed in the object pointed to by the first argument
16224      following the format argument that has not already received a conversion result. If this
16225
16226
16227      320) These white-space wide characters are not counted against a specified field width.
16228      321) fwscanf pushes back at most one input wide character onto the input stream. Therefore, some
16229           sequences that are acceptable to wcstod, wcstol, etc., are unacceptable to fwscanf.
16230
16231 [<a name="#p407" href="p407">page 407</a>] (<a href="#Contents">Contents</a>)
16232
16233      object does not have an appropriate type, or if the result of the conversion cannot be
16234      represented in the object, the behavior is undefined.
16235 11   The length modifiers and their meanings are:
16236      hh          Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16237                  to an argument with type pointer to signed char or unsigned char.
16238      h           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16239                  to an argument with type pointer to short int or unsigned short
16240                  int.
16241      l (ell)     Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16242                  to an argument with type pointer to long int or unsigned long
16243                  int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to
16244                  an argument with type pointer to double; or that a following c, s, or [
16245                  conversion specifier applies to an argument with type pointer to wchar_t.
16246      ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16247                   to an argument with type pointer to long long int or unsigned
16248                   long long int.
16249      j           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16250                  to an argument with type pointer to intmax_t or uintmax_t.
16251      z           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16252                  to an argument with type pointer to size_t or the corresponding signed
16253                  integer type.
16254      t           Specifies that a following d, i, o, u, x, X, or n conversion specifier applies
16255                  to an argument with type pointer to ptrdiff_t or the corresponding
16256                  unsigned integer type.
16257      L           Specifies that a following a, A, e, E, f, F, g, or G conversion specifier
16258                  applies to an argument with type pointer to long double.
16259      If a length modifier appears with any conversion specifier other than as specified above,
16260      the behavior is undefined.
16261 12   The conversion specifiers and their meanings are:
16262      d          Matches an optionally signed decimal integer, whose format is the same as
16263                 expected for the subject sequence of the wcstol function with the value 10
16264                 for the base argument. The corresponding argument shall be a pointer to
16265                 signed integer.
16266      i          Matches an optionally signed integer, whose format is the same as expected
16267                 for the subject sequence of the wcstol function with the value 0 for the
16268                 base argument. The corresponding argument shall be a pointer to signed
16269
16270 [<a name="#p408" href="p408">page 408</a>] (<a href="#Contents">Contents</a>)
16271
16272             integer.
16273 o           Matches an optionally signed octal integer, whose format is the same as
16274             expected for the subject sequence of the wcstoul function with the value 8
16275             for the base argument. The corresponding argument shall be a pointer to
16276             unsigned integer.
16277 u           Matches an optionally signed decimal integer, whose format is the same as
16278             expected for the subject sequence of the wcstoul function with the value 10
16279             for the base argument. The corresponding argument shall be a pointer to
16280             unsigned integer.
16281 x           Matches an optionally signed hexadecimal integer, whose format is the same
16282             as expected for the subject sequence of the wcstoul function with the value
16283             16 for the base argument. The corresponding argument shall be a pointer to
16284             unsigned integer.
16285 a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose
16286         format is the same as expected for the subject sequence of the wcstod
16287         function. The corresponding argument shall be a pointer to floating.
16288 c           Matches a sequence of wide characters of exactly the number specified by the
16289             field width (1 if no field width is present in the directive).
16290             If no l length modifier is present, characters from the input field are
16291             converted as if by repeated calls to the wcrtomb function, with the
16292             conversion state described by an mbstate_t object initialized to zero
16293             before the first wide character is converted. The corresponding argument
16294             shall be a pointer to the initial element of a character array large enough to
16295             accept the sequence. No null character is added.
16296             If an l length modifier is present, the corresponding argument shall be a
16297             pointer to the initial element of an array of wchar_t large enough to accept
16298             the sequence. No null wide character is added.
16299 s           Matches a sequence of non-white-space wide characters.
16300             If no l length modifier is present, characters from the input field are
16301             converted as if by repeated calls to the wcrtomb function, with the
16302             conversion state described by an mbstate_t object initialized to zero
16303             before the first wide character is converted. The corresponding argument
16304             shall be a pointer to the initial element of a character array large enough to
16305             accept the sequence and a terminating null character, which will be added
16306             automatically.
16307             If an l length modifier is present, the corresponding argument shall be a
16308             pointer to the initial element of an array of wchar_t large enough to accept
16309
16310 [<a name="#p409" href="p409">page 409</a>] (<a href="#Contents">Contents</a>)
16311
16312          the sequence and the terminating null wide character, which will be added
16313          automatically.
16314 [        Matches a nonempty sequence of wide characters from a set of expected
16315          characters (the scanset).
16316          If no l length modifier is present, characters from the input field are
16317          converted as if by repeated calls to the wcrtomb function, with the
16318          conversion state described by an mbstate_t object initialized to zero
16319          before the first wide character is converted. The corresponding argument
16320          shall be a pointer to the initial element of a character array large enough to
16321          accept the sequence and a terminating null character, which will be added
16322          automatically.
16323          If an l length modifier is present, the corresponding argument shall be a
16324          pointer to the initial element of an array of wchar_t large enough to accept
16325          the sequence and the terminating null wide character, which will be added
16326          automatically.
16327          The conversion specifier includes all subsequent wide characters in the
16328          format string, up to and including the matching right bracket (]). The wide
16329          characters between the brackets (the scanlist) compose the scanset, unless the
16330          wide character after the left bracket is a circumflex (^), in which case the
16331          scanset contains all wide characters that do not appear in the scanlist between
16332          the circumflex and the right bracket. If the conversion specifier begins with
16333          [] or [^], the right bracket wide character is in the scanlist and the next
16334          following right bracket wide character is the matching right bracket that ends
16335          the specification; otherwise the first following right bracket wide character is
16336          the one that ends the specification. If a - wide character is in the scanlist and
16337          is not the first, nor the second where the first wide character is a ^, nor the
16338          last character, the behavior is implementation-defined.
16339 p        Matches an implementation-defined set of sequences, which should be the
16340          same as the set of sequences that may be produced by the %p conversion of
16341          the fwprintf function. The corresponding argument shall be a pointer to a
16342          pointer to void. The input item is converted to a pointer value in an
16343          implementation-defined manner. If the input item is a value converted earlier
16344          during the same program execution, the pointer that results shall compare
16345          equal to that value; otherwise the behavior of the %p conversion is undefined.
16346 n        No input is consumed. The corresponding argument shall be a pointer to
16347          signed integer into which is to be written the number of wide characters read
16348          from the input stream so far by this call to the fwscanf function. Execution
16349          of a %n directive does not increment the assignment count returned at the
16350          completion of execution of the fwscanf function. No argument is
16351 [<a name="#p410" href="p410">page 410</a>] (<a href="#Contents">Contents</a>)
16352
16353                     converted, but one is consumed. If the conversion specification includes an
16354                     assignment-suppressing wide character or a field width, the behavior is
16355                     undefined.
16356      %              Matches a single % wide character; no conversion or assignment occurs. The
16357                     complete conversion specification shall be %%.
16358 13   If a conversion specification is invalid, the behavior is undefined.322)
16359 14   The conversion specifiers A, E, F, G, and X are also valid and behave the same as,
16360      respectively, a, e, f, g, and x.
16361 15   Trailing white space (including new-line wide characters) is left unread unless matched
16362      by a directive. The success of literal matches and suppressed assignments is not directly
16363      determinable other than via the %n directive.
16364      Returns
16365 16   The fwscanf function returns the value of the macro EOF if an input failure occurs
16366      before the first conversion (if any) has completed. Otherwise, the function returns the
16367      number of input items assigned, which can be fewer than provided for, or even zero, in
16368      the event of an early matching failure.
16369 17   EXAMPLE 1        The call:
16370               #include <a href="#7.21">&lt;stdio.h&gt;</a>
16371               #include <a href="#7.28">&lt;wchar.h&gt;</a>
16372               /* ... */
16373               int n, i; float x; wchar_t name[50];
16374               n = fwscanf(stdin, L"%d%f%ls", &amp;i, &amp;x, name);
16375      with the input line:
16376               25 54.32E-1 thompson
16377      will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
16378      thompson\0.
16379
16380 18   EXAMPLE 2        The call:
16381               #include <a href="#7.21">&lt;stdio.h&gt;</a>
16382               #include <a href="#7.28">&lt;wchar.h&gt;</a>
16383               /* ... */
16384               int i; float x; double y;
16385               fwscanf(stdin, L"%2d%f%*d %lf", &amp;i, &amp;x, &amp;y);
16386      with input:
16387               56789 0123 56a72
16388      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
16389      56.0. The next wide character read from the input stream will be a.
16390
16391
16392      322) See ''future library directions'' (<a href="#7.30.12">7.30.12</a>).
16393
16394 [<a name="#p411" href="p411">page 411</a>] (<a href="#Contents">Contents</a>)
16395
16396     Forward references: the wcstod, wcstof, and wcstold functions (<a href="#7.28.4.1.1">7.28.4.1.1</a>), the
16397     wcstol, wcstoll, wcstoul, and wcstoull functions (<a href="#7.28.4.1.2">7.28.4.1.2</a>), the wcrtomb
16398     function (<a href="#7.28.6.3.3">7.28.6.3.3</a>).
16399 <a name="7.28.2.3" href="#7.28.2.3"><b>    7.28.2.3 The swprintf function</b></a>
16400     Synopsis
16401 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
16402            int swprintf(wchar_t * restrict s,
16403                 size_t n,
16404                 const wchar_t * restrict format, ...);
16405     Description
16406 2   The swprintf function is equivalent to fwprintf, except that the argument s
16407     specifies an array of wide characters into which the generated output is to be written,
16408     rather than written to a stream. No more than n wide characters are written, including a
16409     terminating null wide character, which is always added (unless n is zero).
16410     Returns
16411 3   The swprintf function returns the number of wide characters written in the array, not
16412     counting the terminating null wide character, or a negative value if an encoding error
16413     occurred or if n or more wide characters were requested to be written.
16414 <a name="7.28.2.4" href="#7.28.2.4"><b>    7.28.2.4 The swscanf function</b></a>
16415     Synopsis
16416 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
16417            int swscanf(const wchar_t * restrict s,
16418                 const wchar_t * restrict format, ...);
16419     Description
16420 2   The swscanf function is equivalent to fwscanf, except that the argument s specifies a
16421     wide string from which the input is to be obtained, rather than from a stream. Reaching
16422     the end of the wide string is equivalent to encountering end-of-file for the fwscanf
16423     function.
16424     Returns
16425 3   The swscanf function returns the value of the macro EOF if an input failure occurs
16426     before the first conversion (if any) has completed. Otherwise, the swscanf function
16427     returns the number of input items assigned, which can be fewer than provided for, or even
16428     zero, in the event of an early matching failure.
16429
16430
16431
16432
16433 [<a name="#p412" href="p412">page 412</a>] (<a href="#Contents">Contents</a>)
16434
16435 <a name="7.28.2.5" href="#7.28.2.5"><b>    7.28.2.5 The vfwprintf function</b></a>
16436     Synopsis
16437 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
16438             #include <a href="#7.21">&lt;stdio.h&gt;</a>
16439             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16440             int vfwprintf(FILE * restrict stream,
16441                  const wchar_t * restrict format,
16442                  va_list arg);
16443     Description
16444 2   The vfwprintf function is equivalent to fwprintf, with the variable argument list
16445     replaced by arg, which shall have been initialized by the va_start macro (and
16446     possibly subsequent va_arg calls). The vfwprintf function does not invoke the
16447     va_end macro.323)
16448     Returns
16449 3   The vfwprintf function returns the number of wide characters transmitted, or a
16450     negative value if an output or encoding error occurred.
16451 4   EXAMPLE       The following shows the use of the vfwprintf function in a general error-reporting
16452     routine.
16453             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
16454             #include <a href="#7.21">&lt;stdio.h&gt;</a>
16455             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16456             void error(char *function_name, wchar_t *format, ...)
16457             {
16458                   va_list args;
16459                     va_start(args, format);
16460                     // print out name of function causing error
16461                     fwprintf(stderr, L"ERROR in %s: ", function_name);
16462                     // print out remainder of message
16463                     vfwprintf(stderr, format, args);
16464                     va_end(args);
16465             }
16466
16467
16468
16469
16470     323) As the functions vfwprintf, vswprintf, vfwscanf, vwprintf, vwscanf, and vswscanf
16471          invoke the va_arg macro, the value of arg after the return is indeterminate.
16472
16473 [<a name="#p413" href="p413">page 413</a>] (<a href="#Contents">Contents</a>)
16474
16475 <a name="7.28.2.6" href="#7.28.2.6"><b>    7.28.2.6 The vfwscanf function</b></a>
16476     Synopsis
16477 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
16478            #include <a href="#7.21">&lt;stdio.h&gt;</a>
16479            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16480            int vfwscanf(FILE * restrict stream,
16481                 const wchar_t * restrict format,
16482                 va_list arg);
16483     Description
16484 2   The vfwscanf function is equivalent to fwscanf, with the variable argument list
16485     replaced by arg, which shall have been initialized by the va_start macro (and
16486     possibly subsequent va_arg calls). The vfwscanf function does not invoke the
16487     va_end macro.323)
16488     Returns
16489 3   The vfwscanf function returns the value of the macro EOF if an input failure occurs
16490     before the first conversion (if any) has completed. Otherwise, the vfwscanf function
16491     returns the number of input items assigned, which can be fewer than provided for, or even
16492     zero, in the event of an early matching failure.
16493 <a name="7.28.2.7" href="#7.28.2.7"><b>    7.28.2.7 The vswprintf function</b></a>
16494     Synopsis
16495 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
16496            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16497            int vswprintf(wchar_t * restrict s,
16498                 size_t n,
16499                 const wchar_t * restrict format,
16500                 va_list arg);
16501     Description
16502 2   The vswprintf function is equivalent to swprintf, with the variable argument list
16503     replaced by arg, which shall have been initialized by the va_start macro (and
16504     possibly subsequent va_arg calls). The vswprintf function does not invoke the
16505     va_end macro.323)
16506     Returns
16507 3   The vswprintf function returns the number of wide characters written in the array, not
16508     counting the terminating null wide character, or a negative value if an encoding error
16509     occurred or if n or more wide characters were requested to be generated.
16510
16511
16512 [<a name="#p414" href="p414">page 414</a>] (<a href="#Contents">Contents</a>)
16513
16514 <a name="7.28.2.8" href="#7.28.2.8"><b>    7.28.2.8 The vswscanf function</b></a>
16515     Synopsis
16516 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
16517             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16518             int vswscanf(const wchar_t * restrict s,
16519                  const wchar_t * restrict format,
16520                  va_list arg);
16521     Description
16522 2   The vswscanf function is equivalent to swscanf, with the variable argument list
16523     replaced by arg, which shall have been initialized by the va_start macro (and
16524     possibly subsequent va_arg calls). The vswscanf function does not invoke the
16525     va_end macro.323)
16526     Returns
16527 3   The vswscanf function returns the value of the macro EOF if an input failure occurs
16528     before the first conversion (if any) has completed. Otherwise, the vswscanf function
16529     returns the number of input items assigned, which can be fewer than provided for, or even
16530     zero, in the event of an early matching failure.
16531 <a name="7.28.2.9" href="#7.28.2.9"><b>    7.28.2.9 The vwprintf function</b></a>
16532     Synopsis
16533 1           #include <a href="#7.16">&lt;stdarg.h&gt;</a>
16534             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16535             int vwprintf(const wchar_t * restrict format,
16536                  va_list arg);
16537     Description
16538 2   The vwprintf function is equivalent to wprintf, with the variable argument list
16539     replaced by arg, which shall have been initialized by the va_start macro (and
16540     possibly subsequent va_arg calls). The vwprintf function does not invoke the
16541     va_end macro.323)
16542     Returns
16543 3   The vwprintf function returns the number of wide characters transmitted, or a negative
16544     value if an output or encoding error occurred.
16545
16546
16547
16548
16549 [<a name="#p415" href="p415">page 415</a>] (<a href="#Contents">Contents</a>)
16550
16551 <a name="7.28.2.10" href="#7.28.2.10"><b>    7.28.2.10 The vwscanf function</b></a>
16552     Synopsis
16553 1          #include <a href="#7.16">&lt;stdarg.h&gt;</a>
16554            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16555            int vwscanf(const wchar_t * restrict format,
16556                 va_list arg);
16557     Description
16558 2   The vwscanf function is equivalent to wscanf, with the variable argument list
16559     replaced by arg, which shall have been initialized by the va_start macro (and
16560     possibly subsequent va_arg calls). The vwscanf function does not invoke the
16561     va_end macro.323)
16562     Returns
16563 3   The vwscanf function returns the value of the macro EOF if an input failure occurs
16564     before the first conversion (if any) has completed. Otherwise, the vwscanf function
16565     returns the number of input items assigned, which can be fewer than provided for, or even
16566     zero, in the event of an early matching failure.
16567 <a name="7.28.2.11" href="#7.28.2.11"><b>    7.28.2.11 The wprintf function</b></a>
16568     Synopsis
16569 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
16570            int wprintf(const wchar_t * restrict format, ...);
16571     Description
16572 2   The wprintf function is equivalent to fwprintf with the argument stdout
16573     interposed before the arguments to wprintf.
16574     Returns
16575 3   The wprintf function returns the number of wide characters transmitted, or a negative
16576     value if an output or encoding error occurred.
16577 <a name="7.28.2.12" href="#7.28.2.12"><b>    7.28.2.12 The wscanf function</b></a>
16578     Synopsis
16579 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
16580            int wscanf(const wchar_t * restrict format, ...);
16581     Description
16582 2   The wscanf function is equivalent to fwscanf with the argument stdin interposed
16583     before the arguments to wscanf.
16584
16585
16586 [<a name="#p416" href="p416">page 416</a>] (<a href="#Contents">Contents</a>)
16587
16588     Returns
16589 3   The wscanf function returns the value of the macro EOF if an input failure occurs
16590     before the first conversion (if any) has completed. Otherwise, the wscanf function
16591     returns the number of input items assigned, which can be fewer than provided for, or even
16592     zero, in the event of an early matching failure.
16593 <a name="7.28.3" href="#7.28.3"><b>    7.28.3 Wide character input/output functions</b></a>
16594 <a name="7.28.3.1" href="#7.28.3.1"><b>    7.28.3.1 The fgetwc function</b></a>
16595     Synopsis
16596 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16597             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16598             wint_t fgetwc(FILE *stream);
16599     Description
16600 2   If the end-of-file indicator for the input stream pointed to by stream is not set and a
16601     next wide character is present, the fgetwc function obtains that wide character as a
16602     wchar_t converted to a wint_t and advances the associated file position indicator for
16603     the stream (if defined).
16604     Returns
16605 3   If the end-of-file indicator for the stream is set, or if the stream is at end-of-file, the end-
16606     of-file indicator for the stream is set and the fgetwc function returns WEOF. Otherwise,
16607     the fgetwc function returns the next wide character from the input stream pointed to by
16608     stream. If a read error occurs, the error indicator for the stream is set and the fgetwc
16609     function returns WEOF. If an encoding error occurs (including too few bytes), the value of
16610     the macro EILSEQ is stored in errno and the fgetwc function returns WEOF.324)
16611 <a name="7.28.3.2" href="#7.28.3.2"><b>    7.28.3.2 The fgetws function</b></a>
16612     Synopsis
16613 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16614             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16615             wchar_t *fgetws(wchar_t * restrict s,
16616                  int n, FILE * restrict stream);
16617     Description
16618 2   The fgetws function reads at most one less than the number of wide characters
16619     specified by n from the stream pointed to by stream into the array pointed to by s. No
16620
16621
16622     324) An end-of-file and a read error can be distinguished by use of the feof and ferror functions.
16623          Also, errno will be set to EILSEQ by input/output functions only if an encoding error occurs.
16624
16625 [<a name="#p417" href="p417">page 417</a>] (<a href="#Contents">Contents</a>)
16626
16627     additional wide characters are read after a new-line wide character (which is retained) or
16628     after end-of-file. A null wide character is written immediately after the last wide
16629     character read into the array.
16630     Returns
16631 3   The fgetws function returns s if successful. If end-of-file is encountered and no
16632     characters have been read into the array, the contents of the array remain unchanged and a
16633     null pointer is returned. If a read or encoding error occurs during the operation, the array
16634     contents are indeterminate and a null pointer is returned.
16635 <a name="7.28.3.3" href="#7.28.3.3"><b>    7.28.3.3 The fputwc function</b></a>
16636     Synopsis
16637 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16638            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16639            wint_t fputwc(wchar_t c, FILE *stream);
16640     Description
16641 2   The fputwc function writes the wide character specified by c to the output stream
16642     pointed to by stream, at the position indicated by the associated file position indicator
16643     for the stream (if defined), and advances the indicator appropriately. If the file cannot
16644     support positioning requests, or if the stream was opened with append mode, the
16645     character is appended to the output stream.
16646     Returns
16647 3   The fputwc function returns the wide character written. If a write error occurs, the
16648     error indicator for the stream is set and fputwc returns WEOF. If an encoding error
16649     occurs, the value of the macro EILSEQ is stored in errno and fputwc returns WEOF.
16650 <a name="7.28.3.4" href="#7.28.3.4"><b>    7.28.3.4 The fputws function</b></a>
16651     Synopsis
16652 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16653            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16654            int fputws(const wchar_t * restrict s,
16655                 FILE * restrict stream);
16656     Description
16657 2   The fputws function writes the wide string pointed to by s to the stream pointed to by
16658     stream. The terminating null wide character is not written.
16659     Returns
16660 3   The fputws function returns EOF if a write or encoding error occurs; otherwise, it
16661     returns a nonnegative value.
16662
16663 [<a name="#p418" href="p418">page 418</a>] (<a href="#Contents">Contents</a>)
16664
16665 <a name="7.28.3.5" href="#7.28.3.5"><b>    7.28.3.5 The fwide function</b></a>
16666     Synopsis
16667 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16668             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16669             int fwide(FILE *stream, int mode);
16670     Description
16671 2   The fwide function determines the orientation of the stream pointed to by stream. If
16672     mode is greater than zero, the function first attempts to make the stream wide oriented. If
16673     mode is less than zero, the function first attempts to make the stream byte oriented.325)
16674     Otherwise, mode is zero and the function does not alter the orientation of the stream.
16675     Returns
16676 3   The fwide function returns a value greater than zero if, after the call, the stream has
16677     wide orientation, a value less than zero if the stream has byte orientation, or zero if the
16678     stream has no orientation.
16679 <a name="7.28.3.6" href="#7.28.3.6"><b>    7.28.3.6 The getwc function</b></a>
16680     Synopsis
16681 1           #include <a href="#7.21">&lt;stdio.h&gt;</a>
16682             #include <a href="#7.28">&lt;wchar.h&gt;</a>
16683             wint_t getwc(FILE *stream);
16684     Description
16685 2   The getwc function is equivalent to fgetwc, except that if it is implemented as a
16686     macro, it may evaluate stream more than once, so the argument should never be an
16687     expression with side effects.
16688     Returns
16689 3   The getwc function returns the next wide character from the input stream pointed to by
16690     stream, or WEOF.
16691 <a name="7.28.3.7" href="#7.28.3.7"><b>    7.28.3.7 The getwchar function</b></a>
16692     Synopsis
16693 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
16694             wint_t getwchar(void);
16695
16696
16697
16698
16699     325) If the orientation of the stream has already been determined, fwide does not change it.
16700
16701 [<a name="#p419" href="p419">page 419</a>] (<a href="#Contents">Contents</a>)
16702
16703     Description
16704 2   The getwchar function is equivalent to getwc with the argument stdin.
16705     Returns
16706 3   The getwchar function returns the next wide character from the input stream pointed to
16707     by stdin, or WEOF.
16708 <a name="7.28.3.8" href="#7.28.3.8"><b>    7.28.3.8 The putwc function</b></a>
16709     Synopsis
16710 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16711            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16712            wint_t putwc(wchar_t c, FILE *stream);
16713     Description
16714 2   The putwc function is equivalent to fputwc, except that if it is implemented as a
16715     macro, it may evaluate stream more than once, so that argument should never be an
16716     expression with side effects.
16717     Returns
16718 3   The putwc function returns the wide character written, or WEOF.
16719 <a name="7.28.3.9" href="#7.28.3.9"><b>    7.28.3.9 The putwchar function</b></a>
16720     Synopsis
16721 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
16722            wint_t putwchar(wchar_t c);
16723     Description
16724 2   The putwchar function is equivalent to putwc with the second argument stdout.
16725     Returns
16726 3   The putwchar function returns the character written, or WEOF.
16727 <a name="7.28.3.10" href="#7.28.3.10"><b>    7.28.3.10 The ungetwc function</b></a>
16728     Synopsis
16729 1          #include <a href="#7.21">&lt;stdio.h&gt;</a>
16730            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16731            wint_t ungetwc(wint_t c, FILE *stream);
16732     Description
16733 2   The ungetwc function pushes the wide character specified by c back onto the input
16734     stream pointed to by stream. Pushed-back wide characters will be returned by
16735     subsequent reads on that stream in the reverse order of their pushing. A successful
16736
16737 [<a name="#p420" href="p420">page 420</a>] (<a href="#Contents">Contents</a>)
16738
16739     intervening call (with the stream pointed to by stream) to a file positioning function
16740     (fseek, fsetpos, or rewind) discards any pushed-back wide characters for the
16741     stream. The external storage corresponding to the stream is unchanged.
16742 3   One wide character of pushback is guaranteed, even if the call to the ungetwc function
16743     follows just after a call to a formatted wide character input function fwscanf,
16744     vfwscanf, vwscanf, or wscanf. If the ungetwc function is called too many times
16745     on the same stream without an intervening read or file positioning operation on that
16746     stream, the operation may fail.
16747 4   If the value of c equals that of the macro WEOF, the operation fails and the input stream is
16748     unchanged.
16749 5   A successful call to the ungetwc function clears the end-of-file indicator for the stream.
16750     The value of the file position indicator for the stream after reading or discarding all
16751     pushed-back wide characters is the same as it was before the wide characters were pushed
16752     back. For a text or binary stream, the value of its file position indicator after a successful
16753     call to the ungetwc function is unspecified until all pushed-back wide characters are
16754     read or discarded.
16755     Returns
16756 6   The ungetwc function returns the wide character pushed back, or WEOF if the operation
16757     fails.
16758 <a name="7.28.4" href="#7.28.4"><b>    7.28.4 General wide string utilities</b></a>
16759 1   The header <a href="#7.28">&lt;wchar.h&gt;</a> declares a number of functions useful for wide string
16760     manipulation. Various methods are used for determining the lengths of the arrays, but in
16761     all cases a wchar_t * argument points to the initial (lowest addressed) element of the
16762     array. If an array is accessed beyond the end of an object, the behavior is undefined.
16763 2   Where an argument declared as size_t n determines the length of the array for a
16764     function, n can have the value zero on a call to that function. Unless explicitly stated
16765     otherwise in the description of a particular function in this subclause, pointer arguments
16766     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
16767     function that locates a wide character finds no occurrence, a function that compares two
16768     wide character sequences returns zero, and a function that copies wide characters copies
16769     zero wide characters.
16770
16771
16772
16773
16774 [<a name="#p421" href="p421">page 421</a>] (<a href="#Contents">Contents</a>)
16775
16776 <a name="7.28.4.1" href="#7.28.4.1"><b>    7.28.4.1 Wide string numeric conversion functions</b></a>
16777 <a name="7.28.4.1.1" href="#7.28.4.1.1"><b>    7.28.4.1.1 The wcstod, wcstof, and wcstold functions</b></a>
16778     Synopsis
16779 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
16780            double wcstod(const wchar_t * restrict nptr,
16781                 wchar_t ** restrict endptr);
16782            float wcstof(const wchar_t * restrict nptr,
16783                 wchar_t ** restrict endptr);
16784            long double wcstold(const wchar_t * restrict nptr,
16785                 wchar_t ** restrict endptr);
16786     Description
16787 2   The wcstod, wcstof, and wcstold functions convert the initial portion of the wide
16788     string pointed to by nptr to double, float, and long double representation,
16789     respectively. First, they decompose the input string into three parts: an initial, possibly
16790     empty, sequence of white-space wide characters (as specified by the iswspace
16791     function), a subject sequence resembling a floating-point constant or representing an
16792     infinity or NaN; and a final wide string of one or more unrecognized wide characters,
16793     including the terminating null wide character of the input wide string. Then, they attempt
16794     to convert the subject sequence to a floating-point number, and return the result.
16795 3   The expected form of the subject sequence is an optional plus or minus sign, then one of
16796     the following:
16797     -- a nonempty sequence of decimal digits optionally containing a decimal-point wide
16798       character, then an optional exponent part as defined for the corresponding single-byte
16799       characters in <a href="#6.4.4.2">6.4.4.2</a>;
16800     -- a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
16801       decimal-point wide character, then an optional binary exponent part as defined in
16802       <a href="#6.4.4.2">6.4.4.2</a>;
16803     -- INF or INFINITY, or any other wide string equivalent except for case
16804     -- NAN or NAN(n-wchar-sequenceopt), or any other wide string equivalent except for
16805       case in the NAN part, where:
16806                n-wchar-sequence:
16807                      digit
16808                      nondigit
16809                      n-wchar-sequence digit
16810                      n-wchar-sequence nondigit
16811     The subject sequence is defined as the longest initial subsequence of the input wide
16812     string, starting with the first non-white-space wide character, that is of the expected form.
16813 [<a name="#p422" href="p422">page 422</a>] (<a href="#Contents">Contents</a>)
16814
16815     The subject sequence contains no wide characters if the input wide string is not of the
16816     expected form.
16817 4   If the subject sequence has the expected form for a floating-point number, the sequence of
16818     wide characters starting with the first digit or the decimal-point wide character
16819     (whichever occurs first) is interpreted as a floating constant according to the rules of
16820     <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
16821     if neither an exponent part nor a decimal-point wide character appears in a decimal
16822     floating point number, or if a binary exponent part does not appear in a hexadecimal
16823     floating point number, an exponent part of the appropriate type with value zero is
16824     assumed to follow the last digit in the string. If the subject sequence begins with a minus
16825     sign, the sequence is interpreted as negated.326) A wide character sequence INF or
16826     INFINITY is interpreted as an infinity, if representable in the return type, else like a
16827     floating constant that is too large for the range of the return type. A wide character
16828     sequence NAN or NAN(n-wchar-sequenceopt) is interpreted as a quiet NaN, if supported
16829     in the return type, else like a subject sequence part that does not have the expected form;
16830     the meaning of the n-wchar sequences is implementation-defined.327) A pointer to the
16831     final wide string is stored in the object pointed to by endptr, provided that endptr is
16832     not a null pointer.
16833 5   If the subject sequence has the hexadecimal form and FLT_RADIX is a power of 2, the
16834     value resulting from the conversion is correctly rounded.
16835 6   In other than the "C" locale, additional locale-specific subject sequence forms may be
16836     accepted.
16837 7   If the subject sequence is empty or does not have the expected form, no conversion is
16838     performed; the value of nptr is stored in the object pointed to by endptr, provided
16839     that endptr is not a null pointer.
16840     Recommended practice
16841 8   If the subject sequence has the hexadecimal form, FLT_RADIX is not a power of 2, and
16842     the result is not exactly representable, the result should be one of the two numbers in the
16843     appropriate internal format that are adjacent to the hexadecimal floating source value,
16844     with the extra stipulation that the error should have a correct sign for the current rounding
16845     direction.
16846
16847
16848
16849     326) It is unspecified whether a minus-signed sequence is converted to a negative number directly or by
16850          negating the value resulting from converting the corresponding unsigned sequence (see <a href="#F.5">F.5</a>); the two
16851          methods may yield different results if rounding is toward positive or negative infinity. In either case,
16852          the functions honor the sign of zero if floating-point arithmetic supports signed zeros.
16853     327) An implementation may use the n-wchar sequence to determine extra information to be represented in
16854          the NaN's significand.
16855
16856 [<a name="#p423" href="p423">page 423</a>] (<a href="#Contents">Contents</a>)
16857
16858 9    If the subject sequence has the decimal form and at most DECIMAL_DIG (defined in
16859      <a href="#7.7">&lt;float.h&gt;</a>) significant digits, the result should be correctly rounded. If the subject
16860      sequence D has the decimal form and more than DECIMAL_DIG significant digits,
16861      consider the two bounding, adjacent decimal strings L and U, both having
16862      DECIMAL_DIG significant digits, such that the values of L, D, and U satisfy L &lt;= D &lt;= U.
16863      The result should be one of the (equal or adjacent) values that would be obtained by
16864      correctly rounding L and U according to the current rounding direction, with the extra
16865      stipulation that the error with respect to D should have a correct sign for the current
16866      rounding direction.328)
16867      Returns
16868 10   The functions return the converted value, if any. If no conversion could be performed,
16869      zero is returned. If the correct value overflows and default rounding is in effect (<a href="#7.12.1">7.12.1</a>),
16870      plus or minus HUGE_VAL, HUGE_VALF, or HUGE_VALL is returned (according to the
16871      return type and sign of the value), and the value of the macro ERANGE is stored in
16872      errno. If the result underflows (<a href="#7.12.1">7.12.1</a>), the functions return a value whose magnitude is
16873      no greater than the smallest normalized positive number in the return type; whether
16874      errno acquires the value ERANGE is implementation-defined.
16875
16876
16877
16878
16879      328) DECIMAL_DIG, defined in <a href="#7.7">&lt;float.h&gt;</a>, should be sufficiently large that L and U will usually round
16880           to the same internal floating value, but if not will round to adjacent values.
16881
16882 [<a name="#p424" href="p424">page 424</a>] (<a href="#Contents">Contents</a>)
16883
16884 <a name="7.28.4.1.2" href="#7.28.4.1.2"><b>    7.28.4.1.2 The wcstol, wcstoll, wcstoul, and wcstoull functions</b></a>
16885     Synopsis
16886 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
16887             long int wcstol(
16888                  const wchar_t * restrict nptr,
16889                  wchar_t ** restrict endptr,
16890                  int base);
16891             long long int wcstoll(
16892                  const wchar_t * restrict nptr,
16893                  wchar_t ** restrict endptr,
16894                  int base);
16895             unsigned long int wcstoul(
16896                  const wchar_t * restrict nptr,
16897                  wchar_t ** restrict endptr,
16898                  int base);
16899             unsigned long long int wcstoull(
16900                  const wchar_t * restrict nptr,
16901                  wchar_t ** restrict endptr,
16902                  int base);
16903     Description
16904 2   The wcstol, wcstoll, wcstoul, and wcstoull functions convert the initial
16905     portion of the wide string pointed to by nptr to long int, long long int,
16906     unsigned long int, and unsigned long long int representation,
16907     respectively. First, they decompose the input string into three parts: an initial, possibly
16908     empty, sequence of white-space wide characters (as specified by the iswspace
16909     function), a subject sequence resembling an integer represented in some radix determined
16910     by the value of base, and a final wide string of one or more unrecognized wide
16911     characters, including the terminating null wide character of the input wide string. Then,
16912     they attempt to convert the subject sequence to an integer, and return the result.
16913 3   If the value of base is zero, the expected form of the subject sequence is that of an
16914     integer constant as described for the corresponding single-byte characters in <a href="#6.4.4.1">6.4.4.1</a>,
16915     optionally preceded by a plus or minus sign, but not including an integer suffix. If the
16916     value of base is between 2 and 36 (inclusive), the expected form of the subject sequence
16917     is a sequence of letters and digits representing an integer with the radix specified by
16918     base, optionally preceded by a plus or minus sign, but not including an integer suffix.
16919     The letters from a (or A) through z (or Z) are ascribed the values 10 through 35; only
16920     letters and digits whose ascribed values are less than that of base are permitted. If the
16921     value of base is 16, the wide characters 0x or 0X may optionally precede the sequence
16922     of letters and digits, following the sign if present.
16923
16924 [<a name="#p425" href="p425">page 425</a>] (<a href="#Contents">Contents</a>)
16925
16926 4   The subject sequence is defined as the longest initial subsequence of the input wide
16927     string, starting with the first non-white-space wide character, that is of the expected form.
16928     The subject sequence contains no wide characters if the input wide string is empty or
16929     consists entirely of white space, or if the first non-white-space wide character is other
16930     than a sign or a permissible letter or digit.
16931 5   If the subject sequence has the expected form and the value of base is zero, the sequence
16932     of wide characters starting with the first digit is interpreted as an integer constant
16933     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
16934     value of base is between 2 and 36, it is used as the base for conversion, ascribing to each
16935     letter its value as given above. If the subject sequence begins with a minus sign, the value
16936     resulting from the conversion is negated (in the return type). A pointer to the final wide
16937     string is stored in the object pointed to by endptr, provided that endptr is not a null
16938     pointer.
16939 6   In other than the "C" locale, additional locale-specific subject sequence forms may be
16940     accepted.
16941 7   If the subject sequence is empty or does not have the expected form, no conversion is
16942     performed; the value of nptr is stored in the object pointed to by endptr, provided
16943     that endptr is not a null pointer.
16944     Returns
16945 8   The wcstol, wcstoll, wcstoul, and wcstoull functions return the converted
16946     value, if any. If no conversion could be performed, zero is returned. If the correct value
16947     is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN,
16948     LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type
16949     sign of the value, if any), and the value of the macro ERANGE is stored in errno.
16950 <a name="7.28.4.2" href="#7.28.4.2"><b>    7.28.4.2 Wide string copying functions</b></a>
16951 <a name="7.28.4.2.1" href="#7.28.4.2.1"><b>    7.28.4.2.1 The wcscpy function</b></a>
16952     Synopsis
16953 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
16954            wchar_t *wcscpy(wchar_t * restrict s1,
16955                 const wchar_t * restrict s2);
16956     Description
16957 2   The wcscpy function copies the wide string pointed to by s2 (including the terminating
16958     null wide character) into the array pointed to by s1.
16959     Returns
16960 3   The wcscpy function returns the value of s1.
16961
16962
16963 [<a name="#p426" href="p426">page 426</a>] (<a href="#Contents">Contents</a>)
16964
16965 <a name="7.28.4.2.2" href="#7.28.4.2.2"><b>    7.28.4.2.2 The wcsncpy function</b></a>
16966     Synopsis
16967 1            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16968              wchar_t *wcsncpy(wchar_t * restrict s1,
16969                   const wchar_t * restrict s2,
16970                   size_t n);
16971     Description
16972 2   The wcsncpy function copies not more than n wide characters (those that follow a null
16973     wide character are not copied) from the array pointed to by s2 to the array pointed to by
16974     s1.329)
16975 3   If the array pointed to by s2 is a wide string that is shorter than n wide characters, null
16976     wide characters are appended to the copy in the array pointed to by s1, until n wide
16977     characters in all have been written.
16978     Returns
16979 4   The wcsncpy function returns the value of s1.
16980 <a name="7.28.4.2.3" href="#7.28.4.2.3"><b>    7.28.4.2.3 The wmemcpy function</b></a>
16981     Synopsis
16982 1            #include <a href="#7.28">&lt;wchar.h&gt;</a>
16983              wchar_t *wmemcpy(wchar_t * restrict s1,
16984                   const wchar_t * restrict s2,
16985                   size_t n);
16986     Description
16987 2   The wmemcpy function copies n wide characters from the object pointed to by s2 to the
16988     object pointed to by s1.
16989     Returns
16990 3   The wmemcpy function returns the value of s1.
16991
16992
16993
16994
16995     329) Thus, if there is no null wide character in the first n wide characters of the array pointed to by s2, the
16996          result will not be null-terminated.
16997
16998 [<a name="#p427" href="p427">page 427</a>] (<a href="#Contents">Contents</a>)
16999
17000 <a name="7.28.4.2.4" href="#7.28.4.2.4"><b>    7.28.4.2.4 The wmemmove function</b></a>
17001     Synopsis
17002 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17003            wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
17004                 size_t n);
17005     Description
17006 2   The wmemmove function copies n wide characters from the object pointed to by s2 to
17007     the object pointed to by s1. Copying takes place as if the n wide characters from the
17008     object pointed to by s2 are first copied into a temporary array of n wide characters that
17009     does not overlap the objects pointed to by s1 or s2, and then the n wide characters from
17010     the temporary array are copied into the object pointed to by s1.
17011     Returns
17012 3   The wmemmove function returns the value of s1.
17013 <a name="7.28.4.3" href="#7.28.4.3"><b>    7.28.4.3 Wide string concatenation functions</b></a>
17014 <a name="7.28.4.3.1" href="#7.28.4.3.1"><b>    7.28.4.3.1 The wcscat function</b></a>
17015     Synopsis
17016 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17017            wchar_t *wcscat(wchar_t * restrict s1,
17018                 const wchar_t * restrict s2);
17019     Description
17020 2   The wcscat function appends a copy of the wide string pointed to by s2 (including the
17021     terminating null wide character) to the end of the wide string pointed to by s1. The initial
17022     wide character of s2 overwrites the null wide character at the end of s1.
17023     Returns
17024 3   The wcscat function returns the value of s1.
17025 <a name="7.28.4.3.2" href="#7.28.4.3.2"><b>    7.28.4.3.2 The wcsncat function</b></a>
17026     Synopsis
17027 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17028            wchar_t *wcsncat(wchar_t * restrict s1,
17029                 const wchar_t * restrict s2,
17030                 size_t n);
17031     Description
17032 2   The wcsncat function appends not more than n wide characters (a null wide character
17033     and those that follow it are not appended) from the array pointed to by s2 to the end of
17034
17035 [<a name="#p428" href="p428">page 428</a>] (<a href="#Contents">Contents</a>)
17036
17037     the wide string pointed to by s1. The initial wide character of s2 overwrites the null
17038     wide character at the end of s1. A terminating null wide character is always appended to
17039     the result.330)
17040     Returns
17041 3   The wcsncat function returns the value of s1.
17042 <a name="7.28.4.4" href="#7.28.4.4"><b>    7.28.4.4 Wide string comparison functions</b></a>
17043 1   Unless explicitly stated otherwise, the functions described in this subclause order two
17044     wide characters the same way as two integers of the underlying integer type designated
17045     by wchar_t.
17046 <a name="7.28.4.4.1" href="#7.28.4.4.1"><b>    7.28.4.4.1 The wcscmp function</b></a>
17047     Synopsis
17048 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17049             int wcscmp(const wchar_t *s1, const wchar_t *s2);
17050     Description
17051 2   The wcscmp function compares the wide string pointed to by s1 to the wide string
17052     pointed to by s2.
17053     Returns
17054 3   The wcscmp function returns an integer greater than, equal to, or less than zero,
17055     accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
17056     wide string pointed to by s2.
17057 <a name="7.28.4.4.2" href="#7.28.4.4.2"><b>    7.28.4.4.2 The wcscoll function</b></a>
17058     Synopsis
17059 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17060             int wcscoll(const wchar_t *s1, const wchar_t *s2);
17061     Description
17062 2   The wcscoll function compares the wide string pointed to by s1 to the wide string
17063     pointed to by s2, both interpreted as appropriate to the LC_COLLATE category of the
17064     current locale.
17065     Returns
17066 3   The wcscoll function returns an integer greater than, equal to, or less than zero,
17067     accordingly as the wide string pointed to by s1 is greater than, equal to, or less than the
17068
17069
17070     330) Thus, the maximum number of wide characters that can end up in the array pointed to by s1 is
17071          wcslen(s1)+n+1.
17072
17073 [<a name="#p429" href="p429">page 429</a>] (<a href="#Contents">Contents</a>)
17074
17075     wide string pointed to by s2 when both are interpreted as appropriate to the current
17076     locale.
17077 <a name="7.28.4.4.3" href="#7.28.4.4.3"><b>    7.28.4.4.3 The wcsncmp function</b></a>
17078     Synopsis
17079 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17080            int wcsncmp(const wchar_t *s1, const wchar_t *s2,
17081                 size_t n);
17082     Description
17083 2   The wcsncmp function compares not more than n wide characters (those that follow a
17084     null wide character are not compared) from the array pointed to by s1 to the array
17085     pointed to by s2.
17086     Returns
17087 3   The wcsncmp function returns an integer greater than, equal to, or less than zero,
17088     accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal
17089     to, or less than the possibly null-terminated array pointed to by s2.
17090 <a name="7.28.4.4.4" href="#7.28.4.4.4"><b>    7.28.4.4.4 The wcsxfrm function</b></a>
17091     Synopsis
17092 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17093            size_t wcsxfrm(wchar_t * restrict s1,
17094                 const wchar_t * restrict s2,
17095                 size_t n);
17096     Description
17097 2   The wcsxfrm function transforms the wide string pointed to by s2 and places the
17098     resulting wide string into the array pointed to by s1. The transformation is such that if
17099     the wcscmp function is applied to two transformed wide strings, it returns a value greater
17100     than, equal to, or less than zero, corresponding to the result of the wcscoll function
17101     applied to the same two original wide strings. No more than n wide characters are placed
17102     into the resulting array pointed to by s1, including the terminating null wide character. If
17103     n is zero, s1 is permitted to be a null pointer.
17104     Returns
17105 3   The wcsxfrm function returns the length of the transformed wide string (not including
17106     the terminating null wide character). If the value returned is n or greater, the contents of
17107     the array pointed to by s1 are indeterminate.
17108 4   EXAMPLE The value of the following expression is the length of the array needed to hold the
17109     transformation of the wide string pointed to by s:
17110
17111
17112 [<a name="#p430" href="p430">page 430</a>] (<a href="#Contents">Contents</a>)
17113
17114             1 + wcsxfrm(NULL, s, 0)
17115
17116 <a name="7.28.4.4.5" href="#7.28.4.4.5"><b>    7.28.4.4.5 The wmemcmp function</b></a>
17117     Synopsis
17118 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17119             int wmemcmp(const wchar_t *s1, const wchar_t *s2,
17120                  size_t n);
17121     Description
17122 2   The wmemcmp function compares the first n wide characters of the object pointed to by
17123     s1 to the first n wide characters of the object pointed to by s2.
17124     Returns
17125 3   The wmemcmp function returns an integer greater than, equal to, or less than zero,
17126     accordingly as the object pointed to by s1 is greater than, equal to, or less than the object
17127     pointed to by s2.
17128 <a name="7.28.4.5" href="#7.28.4.5"><b>    7.28.4.5 Wide string search functions</b></a>
17129 <a name="7.28.4.5.1" href="#7.28.4.5.1"><b>    7.28.4.5.1 The wcschr function</b></a>
17130     Synopsis
17131 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17132             wchar_t *wcschr(const wchar_t *s, wchar_t c);
17133     Description
17134 2   The wcschr function locates the first occurrence of c in the wide string pointed to by s.
17135     The terminating null wide character is considered to be part of the wide string.
17136     Returns
17137 3   The wcschr function returns a pointer to the located wide character, or a null pointer if
17138     the wide character does not occur in the wide string.
17139 <a name="7.28.4.5.2" href="#7.28.4.5.2"><b>    7.28.4.5.2 The wcscspn function</b></a>
17140     Synopsis
17141 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17142             size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
17143     Description
17144 2   The wcscspn function computes the length of the maximum initial segment of the wide
17145     string pointed to by s1 which consists entirely of wide characters not from the wide
17146     string pointed to by s2.
17147
17148
17149
17150 [<a name="#p431" href="p431">page 431</a>] (<a href="#Contents">Contents</a>)
17151
17152     Returns
17153 3   The wcscspn function returns the length of the segment.
17154 <a name="7.28.4.5.3" href="#7.28.4.5.3"><b>    7.28.4.5.3 The wcspbrk function</b></a>
17155     Synopsis
17156 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17157            wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);
17158     Description
17159 2   The wcspbrk function locates the first occurrence in the wide string pointed to by s1 of
17160     any wide character from the wide string pointed to by s2.
17161     Returns
17162 3   The wcspbrk function returns a pointer to the wide character in s1, or a null pointer if
17163     no wide character from s2 occurs in s1.
17164 <a name="7.28.4.5.4" href="#7.28.4.5.4"><b>    7.28.4.5.4 The wcsrchr function</b></a>
17165     Synopsis
17166 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17167            wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
17168     Description
17169 2   The wcsrchr function locates the last occurrence of c in the wide string pointed to by
17170     s. The terminating null wide character is considered to be part of the wide string.
17171     Returns
17172 3   The wcsrchr function returns a pointer to the wide character, or a null pointer if c does
17173     not occur in the wide string.
17174 <a name="7.28.4.5.5" href="#7.28.4.5.5"><b>    7.28.4.5.5 The wcsspn function</b></a>
17175     Synopsis
17176 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17177            size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
17178     Description
17179 2   The wcsspn function computes the length of the maximum initial segment of the wide
17180     string pointed to by s1 which consists entirely of wide characters from the wide string
17181     pointed to by s2.
17182     Returns
17183 3   The wcsspn function returns the length of the segment.
17184
17185
17186 [<a name="#p432" href="p432">page 432</a>] (<a href="#Contents">Contents</a>)
17187
17188 <a name="7.28.4.5.6" href="#7.28.4.5.6"><b>    7.28.4.5.6 The wcsstr function</b></a>
17189     Synopsis
17190 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17191             wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
17192     Description
17193 2   The wcsstr function locates the first occurrence in the wide string pointed to by s1 of
17194     the sequence of wide characters (excluding the terminating null wide character) in the
17195     wide string pointed to by s2.
17196     Returns
17197 3   The wcsstr function returns a pointer to the located wide string, or a null pointer if the
17198     wide string is not found. If s2 points to a wide string with zero length, the function
17199     returns s1.
17200 <a name="7.28.4.5.7" href="#7.28.4.5.7"><b>    7.28.4.5.7 The wcstok function</b></a>
17201     Synopsis
17202 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17203             wchar_t *wcstok(wchar_t * restrict s1,
17204                  const wchar_t * restrict s2,
17205                  wchar_t ** restrict ptr);
17206     Description
17207 2   A sequence of calls to the wcstok function breaks the wide string pointed to by s1 into
17208     a sequence of tokens, each of which is delimited by a wide character from the wide string
17209     pointed to by s2. The third argument points to a caller-provided wchar_t pointer into
17210     which the wcstok function stores information necessary for it to continue scanning the
17211     same wide string.
17212 3   The first call in a sequence has a non-null first argument and stores an initial value in the
17213     object pointed to by ptr. Subsequent calls in the sequence have a null first argument and
17214     the object pointed to by ptr is required to have the value stored by the previous call in
17215     the sequence, which is then updated. The separator wide string pointed to by s2 may be
17216     different from call to call.
17217 4   The first call in the sequence searches the wide string pointed to by s1 for the first wide
17218     character that is not contained in the current separator wide string pointed to by s2. If no
17219     such wide character is found, then there are no tokens in the wide string pointed to by s1
17220     and the wcstok function returns a null pointer. If such a wide character is found, it is
17221     the start of the first token.
17222 5   The wcstok function then searches from there for a wide character that is contained in
17223     the current separator wide string. If no such wide character is found, the current token
17224 [<a name="#p433" href="p433">page 433</a>] (<a href="#Contents">Contents</a>)
17225
17226     extends to the end of the wide string pointed to by s1, and subsequent searches in the
17227     same wide string for a token return a null pointer. If such a wide character is found, it is
17228     overwritten by a null wide character, which terminates the current token.
17229 6   In all cases, the wcstok function stores sufficient information in the pointer pointed to
17230     by ptr so that subsequent calls, with a null pointer for s1 and the unmodified pointer
17231     value for ptr, shall start searching just past the element overwritten by a null wide
17232     character (if any).
17233     Returns
17234 7   The wcstok function returns a pointer to the first wide character of a token, or a null
17235     pointer if there is no token.
17236 8   EXAMPLE
17237            #include <a href="#7.28">&lt;wchar.h&gt;</a>
17238            static wchar_t str1[] = L"?a???b,,,#c";
17239            static wchar_t str2[] = L"\t \t";
17240            wchar_t *t, *ptr1, *ptr2;
17241            t   =   wcstok(str1,   L"?", &amp;ptr1);          //   t   points to the token L"a"
17242            t   =   wcstok(NULL,   L",", &amp;ptr1);          //   t   points to the token L"??b"
17243            t   =   wcstok(str2,   L" \t", &amp;ptr2);        //   t   is a null pointer
17244            t   =   wcstok(NULL,   L"#,", &amp;ptr1);         //   t   points to the token L"c"
17245            t   =   wcstok(NULL,   L"?", &amp;ptr1);          //   t   is a null pointer
17246
17247 <a name="7.28.4.5.8" href="#7.28.4.5.8"><b>    7.28.4.5.8 The wmemchr function</b></a>
17248     Synopsis
17249 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17250            wchar_t *wmemchr(const wchar_t *s, wchar_t c,
17251                 size_t n);
17252     Description
17253 2   The wmemchr function locates the first occurrence of c in the initial n wide characters of
17254     the object pointed to by s.
17255     Returns
17256 3   The wmemchr function returns a pointer to the located wide character, or a null pointer if
17257     the wide character does not occur in the object.
17258
17259
17260
17261
17262 [<a name="#p434" href="p434">page 434</a>] (<a href="#Contents">Contents</a>)
17263
17264 <a name="7.28.4.6" href="#7.28.4.6"><b>    7.28.4.6 Miscellaneous functions</b></a>
17265 <a name="7.28.4.6.1" href="#7.28.4.6.1"><b>    7.28.4.6.1 The wcslen function</b></a>
17266     Synopsis
17267 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17268             size_t wcslen(const wchar_t *s);
17269     Description
17270 2   The wcslen function computes the length of the wide string pointed to by s.
17271     Returns
17272 3   The wcslen function returns the number of wide characters that precede the terminating
17273     null wide character.
17274 <a name="7.28.4.6.2" href="#7.28.4.6.2"><b>    7.28.4.6.2 The wmemset function</b></a>
17275     Synopsis
17276 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17277             wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);
17278     Description
17279 2   The wmemset function copies the value of c into each of the first n wide characters of
17280     the object pointed to by s.
17281     Returns
17282 3   The wmemset function returns the value of s.
17283 <a name="7.28.5" href="#7.28.5"><b>    7.28.5 Wide character time conversion functions</b></a>
17284 <a name="7.28.5.1" href="#7.28.5.1"><b>    7.28.5.1 The wcsftime function</b></a>
17285     Synopsis
17286 1           #include <a href="#7.26">&lt;time.h&gt;</a>
17287             #include <a href="#7.28">&lt;wchar.h&gt;</a>
17288             size_t wcsftime(wchar_t * restrict s,
17289                  size_t maxsize,
17290                  const wchar_t * restrict format,
17291                  const struct tm * restrict timeptr);
17292     Description
17293 2   The wcsftime function is equivalent to the strftime function, except that:
17294     -- The argument s points to the initial element of an array of wide characters into which
17295       the generated output is to be placed.
17296
17297
17298 [<a name="#p435" href="p435">page 435</a>] (<a href="#Contents">Contents</a>)
17299
17300     -- The argument maxsize indicates the limiting number of wide characters.
17301     -- The argument format is a wide string and the conversion specifiers are replaced by
17302       corresponding sequences of wide characters.
17303     -- The return value indicates the number of wide characters.
17304     Returns
17305 3   If the total number of resulting wide characters including the terminating null wide
17306     character is not more than maxsize, the wcsftime function returns the number of
17307     wide characters placed into the array pointed to by s not including the terminating null
17308     wide character. Otherwise, zero is returned and the contents of the array are
17309     indeterminate.
17310 <a name="7.28.6" href="#7.28.6"><b>    7.28.6 Extended multibyte/wide character conversion utilities</b></a>
17311 1   The header <a href="#7.28">&lt;wchar.h&gt;</a> declares an extended set of functions useful for conversion
17312     between multibyte characters and wide characters.
17313 2   Most of the following functions -- those that are listed as ''restartable'', <a href="#7.28.6.3">7.28.6.3</a> and
17314     <a href="#7.28.6.4">7.28.6.4</a> -- take as a last argument a pointer to an object of type mbstate_t that is used
17315     to describe the current conversion state from a particular multibyte character sequence to
17316     a wide character sequence (or the reverse) under the rules of a particular setting for the
17317     LC_CTYPE category of the current locale.
17318 3   The initial conversion state corresponds, for a conversion in either direction, to the
17319     beginning of a new multibyte character in the initial shift state. A zero-valued
17320     mbstate_t object is (at least) one way to describe an initial conversion state. A zero-
17321     valued mbstate_t object can be used to initiate conversion involving any multibyte
17322     character sequence, in any LC_CTYPE category setting. If an mbstate_t object has
17323     been altered by any of the functions described in this subclause, and is then used with a
17324     different multibyte character sequence, or in the other conversion direction, or with a
17325     different LC_CTYPE category setting than on earlier function calls, the behavior is
17326     undefined.331)
17327 4   On entry, each function takes the described conversion state (either internal or pointed to
17328     by an argument) as current. The conversion state described by the referenced object is
17329     altered as needed to track the shift state, and the position within a multibyte character, for
17330     the associated multibyte character sequence.
17331
17332
17333
17334
17335     331) Thus, a particular mbstate_t object can be used, for example, with both the mbrtowc and
17336          mbsrtowcs functions as long as they are used to step sequentially through the same multibyte
17337          character string.
17338
17339 [<a name="#p436" href="p436">page 436</a>] (<a href="#Contents">Contents</a>)
17340
17341 <a name="7.28.6.1" href="#7.28.6.1"><b>    7.28.6.1 Single-byte/wide character conversion functions</b></a>
17342 <a name="7.28.6.1.1" href="#7.28.6.1.1"><b>    7.28.6.1.1 The btowc function</b></a>
17343     Synopsis
17344 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>                                                                       *
17345             wint_t btowc(int c);
17346     Description
17347 2   The btowc function determines whether c constitutes a valid single-byte character in the
17348     initial shift state.
17349     Returns
17350 3   The btowc function returns WEOF if c has the value EOF or if (unsigned char)c
17351     does not constitute a valid single-byte character in the initial shift state. Otherwise, it
17352     returns the wide character representation of that character.
17353 <a name="7.28.6.1.2" href="#7.28.6.1.2"><b>    7.28.6.1.2 The wctob function</b></a>
17354     Synopsis
17355 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>                                                                       *
17356             int wctob(wint_t c);
17357     Description
17358 2   The wctob function determines whether c corresponds to a member of the extended
17359     character set whose multibyte character representation is a single byte when in the initial
17360     shift state.
17361     Returns
17362 3   The wctob function returns EOF if c does not correspond to a multibyte character with
17363     length one in the initial shift state. Otherwise, it returns the single-byte representation of
17364     that character as an unsigned char converted to an int.
17365 <a name="7.28.6.2" href="#7.28.6.2"><b>    7.28.6.2 Conversion state functions</b></a>
17366 <a name="7.28.6.2.1" href="#7.28.6.2.1"><b>    7.28.6.2.1 The mbsinit function</b></a>
17367     Synopsis
17368 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17369             int mbsinit(const mbstate_t *ps);
17370     Description
17371 2   If ps is not a null pointer, the mbsinit function determines whether the referenced
17372     mbstate_t object describes an initial conversion state.
17373
17374
17375
17376 [<a name="#p437" href="p437">page 437</a>] (<a href="#Contents">Contents</a>)
17377
17378     Returns
17379 3   The mbsinit function returns nonzero if ps is a null pointer or if the referenced object
17380     describes an initial conversion state; otherwise, it returns zero.
17381 <a name="7.28.6.3" href="#7.28.6.3"><b>    7.28.6.3 Restartable multibyte/wide character conversion functions</b></a>
17382 1   These functions differ from the corresponding multibyte character functions of <a href="#7.22.7">7.22.7</a>
17383     (mblen, mbtowc, and wctomb) in that they have an extra parameter, ps, of type
17384     pointer to mbstate_t that points to an object that can completely describe the current
17385     conversion state of the associated multibyte character sequence. If ps is a null pointer,
17386     each function uses its own internal mbstate_t object instead, which is initialized at
17387     program startup to the initial conversion state; the functions are not required to avoid data
17388     races in this case. The implementation behaves as if no library function calls these
17389     functions with a null pointer for ps.
17390 2   Also unlike their corresponding functions, the return value does not represent whether the
17391     encoding is state-dependent.
17392 <a name="7.28.6.3.1" href="#7.28.6.3.1"><b>    7.28.6.3.1 The mbrlen function</b></a>
17393     Synopsis
17394 1          #include <a href="#7.28">&lt;wchar.h&gt;</a>
17395            size_t mbrlen(const char * restrict s,
17396                 size_t n,
17397                 mbstate_t * restrict ps);
17398     Description
17399 2   The mbrlen function is equivalent to the call:
17400            mbrtowc(NULL, s, n, ps != NULL ? ps : &amp;internal)
17401     where internal is the mbstate_t object for the mbrlen function, except that the
17402     expression designated by ps is evaluated only once.
17403     Returns
17404 3   The mbrlen function returns a value between zero and n, inclusive, (size_t)(-2),
17405     or (size_t)(-1).
17406     Forward references: the mbrtowc function (<a href="#7.28.6.3.2">7.28.6.3.2</a>).
17407
17408
17409
17410
17411 [<a name="#p438" href="p438">page 438</a>] (<a href="#Contents">Contents</a>)
17412
17413 <a name="7.28.6.3.2" href="#7.28.6.3.2"><b>    7.28.6.3.2 The mbrtowc function</b></a>
17414     Synopsis
17415 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17416             size_t mbrtowc(wchar_t * restrict pwc,
17417                  const char * restrict s,
17418                  size_t n,
17419                  mbstate_t * restrict ps);
17420     Description
17421 2   If s is a null pointer, the mbrtowc function is equivalent to the call:
17422                     mbrtowc(NULL, "", 1, ps)
17423     In this case, the values of the parameters pwc and n are ignored.
17424 3   If s is not a null pointer, the mbrtowc function inspects at most n bytes beginning with
17425     the byte pointed to by s to determine the number of bytes needed to complete the next
17426     multibyte character (including any shift sequences). If the function determines that the
17427     next multibyte character is complete and valid, it determines the value of the
17428     corresponding wide character and then, if pwc is not a null pointer, stores that value in
17429     the object pointed to by pwc. If the corresponding wide character is the null wide
17430     character, the resulting state described is the initial conversion state.
17431     Returns
17432 4   The mbrtowc function returns the first of the following that applies (given the current
17433     conversion state):
17434     0                     if the next n or fewer bytes complete the multibyte character that
17435                           corresponds to the null wide character (which is the value stored).
17436     between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte
17437                        character (which is the value stored); the value returned is the number
17438                        of bytes that complete the multibyte character.
17439     (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid)
17440                  multibyte character, and all n bytes have been processed (no value is
17441                  stored).332)
17442     (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes
17443                  do not contribute to a complete and valid multibyte character (no
17444                  value is stored); the value of the macro EILSEQ is stored in errno,
17445                  and the conversion state is unspecified.
17446
17447     332) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a
17448          sequence of redundant shift sequences (for implementations with state-dependent encodings).
17449
17450 [<a name="#p439" href="p439">page 439</a>] (<a href="#Contents">Contents</a>)
17451
17452 <a name="7.28.6.3.3" href="#7.28.6.3.3"><b>    7.28.6.3.3 The wcrtomb function</b></a>
17453     Synopsis
17454 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17455             size_t wcrtomb(char * restrict s,
17456                  wchar_t wc,
17457                  mbstate_t * restrict ps);
17458     Description
17459 2   If s is a null pointer, the wcrtomb function is equivalent to the call
17460                     wcrtomb(buf, L'\0', ps)
17461     where buf is an internal buffer.
17462 3   If s is not a null pointer, the wcrtomb function determines the number of bytes needed
17463     to represent the multibyte character that corresponds to the wide character given by wc
17464     (including any shift sequences), and stores the multibyte character representation in the
17465     array whose first element is pointed to by s. At most MB_CUR_MAX bytes are stored. If
17466     wc is a null wide character, a null byte is stored, preceded by any shift sequence needed
17467     to restore the initial shift state; the resulting state described is the initial conversion state.
17468     Returns
17469 4   The wcrtomb function returns the number of bytes stored in the array object (including
17470     any shift sequences). When wc is not a valid wide character, an encoding error occurs:
17471     the function stores the value of the macro EILSEQ in errno and returns
17472     (size_t)(-1); the conversion state is unspecified.
17473 <a name="7.28.6.4" href="#7.28.6.4"><b>    7.28.6.4 Restartable multibyte/wide string conversion functions</b></a>
17474 1   These functions differ from the corresponding multibyte string functions of <a href="#7.22.8">7.22.8</a>
17475     (mbstowcs and wcstombs) in that they have an extra parameter, ps, of type pointer to
17476     mbstate_t that points to an object that can completely describe the current conversion
17477     state of the associated multibyte character sequence. If ps is a null pointer, each function
17478     uses its own internal mbstate_t object instead, which is initialized at program startup
17479     to the initial conversion state; the functions are not required to avoid data races in this
17480     case. The implementation behaves as if no library function calls these functions with a
17481     null pointer for ps.
17482 2   Also unlike their corresponding functions, the conversion source parameter, src, has a
17483     pointer-to-pointer type. When the function is storing the results of conversions (that is,
17484     when dst is not a null pointer), the pointer object pointed to by this parameter is updated
17485     to reflect the amount of the source processed by that invocation.
17486
17487
17488
17489
17490 [<a name="#p440" href="p440">page 440</a>] (<a href="#Contents">Contents</a>)
17491
17492 <a name="7.28.6.4.1" href="#7.28.6.4.1"><b>    7.28.6.4.1 The mbsrtowcs function</b></a>
17493     Synopsis
17494 1            #include <a href="#7.28">&lt;wchar.h&gt;</a>
17495              size_t mbsrtowcs(wchar_t * restrict dst,
17496                   const char ** restrict src,
17497                   size_t len,
17498                   mbstate_t * restrict ps);
17499     Description
17500 2   The mbsrtowcs function converts a sequence of multibyte characters that begins in the
17501     conversion state described by the object pointed to by ps, from the array indirectly
17502     pointed to by src into a sequence of corresponding wide characters. If dst is not a null
17503     pointer, the converted characters are stored into the array pointed to by dst. Conversion
17504     continues up to and including a terminating null character, which is also stored.
17505     Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
17506     not form a valid multibyte character, or (if dst is not a null pointer) when len wide
17507     characters have been stored into the array pointed to by dst.333) Each conversion takes
17508     place as if by a call to the mbrtowc function.
17509 3   If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
17510     pointer (if conversion stopped due to reaching a terminating null character) or the address
17511     just past the last multibyte character converted (if any). If conversion stopped due to
17512     reaching a terminating null character and if dst is not a null pointer, the resulting state
17513     described is the initial conversion state.
17514     Returns
17515 4   If the input conversion encounters a sequence of bytes that do not form a valid multibyte
17516     character, an encoding error occurs: the mbsrtowcs function stores the value of the
17517     macro EILSEQ in errno and returns (size_t)(-1); the conversion state is
17518     unspecified. Otherwise, it returns the number of multibyte characters successfully
17519     converted, not including the terminating null character (if any).
17520
17521
17522
17523
17524     333) Thus, the value of len is ignored if dst is a null pointer.
17525
17526 [<a name="#p441" href="p441">page 441</a>] (<a href="#Contents">Contents</a>)
17527
17528 <a name="7.28.6.4.2" href="#7.28.6.4.2"><b>    7.28.6.4.2 The wcsrtombs function</b></a>
17529     Synopsis
17530 1           #include <a href="#7.28">&lt;wchar.h&gt;</a>
17531             size_t wcsrtombs(char * restrict dst,
17532                  const wchar_t ** restrict src,
17533                  size_t len,
17534                  mbstate_t * restrict ps);
17535     Description
17536 2   The wcsrtombs function converts a sequence of wide characters from the array
17537     indirectly pointed to by src into a sequence of corresponding multibyte characters that
17538     begins in the conversion state described by the object pointed to by ps. If dst is not a
17539     null pointer, the converted characters are then stored into the array pointed to by dst.
17540     Conversion continues up to and including a terminating null wide character, which is also
17541     stored. Conversion stops earlier in two cases: when a wide character is reached that does
17542     not correspond to a valid multibyte character, or (if dst is not a null pointer) when the
17543     next multibyte character would exceed the limit of len total bytes to be stored into the
17544     array pointed to by dst. Each conversion takes place as if by a call to the wcrtomb
17545     function.334)
17546 3   If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
17547     pointer (if conversion stopped due to reaching a terminating null wide character) or the
17548     address just past the last wide character converted (if any). If conversion stopped due to
17549     reaching a terminating null wide character, the resulting state described is the initial
17550     conversion state.
17551     Returns
17552 4   If conversion stops because a wide character is reached that does not correspond to a
17553     valid multibyte character, an encoding error occurs: the wcsrtombs function stores the
17554     value of the macro EILSEQ in errno and returns (size_t)(-1); the conversion
17555     state is unspecified. Otherwise, it returns the number of bytes in the resulting multibyte
17556     character sequence, not including the terminating null character (if any).
17557
17558
17559
17560
17561     334) If conversion stops because a terminating null wide character has been reached, the bytes stored
17562          include those necessary to reach the initial shift state immediately before the null byte.
17563
17564 [<a name="#p442" href="p442">page 442</a>] (<a href="#Contents">Contents</a>)
17565
17566 <a name="7.29" href="#7.29"><b>    7.29 Wide character classification and mapping utilities &lt;wctype.h&gt;</b></a>
17567 <a name="7.29.1" href="#7.29.1"><b>    7.29.1 Introduction</b></a>
17568 1   The header <a href="#7.29">&lt;wctype.h&gt;</a> defines one macro, and declares three data types and many
17569     functions.335)
17570 2   The types declared are
17571               wint_t
17572     described in <a href="#7.28.1">7.28.1</a>;
17573               wctrans_t
17574     which is a scalar type that can hold values which represent locale-specific character
17575     mappings; and
17576               wctype_t
17577     which is a scalar type that can hold values which represent locale-specific character
17578     classifications.
17579 3   The macro defined is WEOF (described in <a href="#7.28.1">7.28.1</a>).
17580 4   The functions declared are grouped as follows:
17581     -- Functions that provide wide character classification;
17582     -- Extensible functions that provide wide character classification;
17583     -- Functions that provide wide character case mapping;
17584     -- Extensible functions that provide wide character mapping.
17585 5   For all functions described in this subclause that accept an argument of type wint_t, the
17586     value shall be representable as a wchar_t or shall equal the value of the macro WEOF. If
17587     this argument has any other value, the behavior is undefined.
17588 6   The behavior of these functions is affected by the LC_CTYPE category of the current
17589     locale.
17590
17591
17592
17593
17594     335) See ''future library directions'' (<a href="#7.30.13">7.30.13</a>).
17595
17596 [<a name="#p443" href="p443">page 443</a>] (<a href="#Contents">Contents</a>)
17597
17598 <a name="7.29.2" href="#7.29.2"><b>    7.29.2 Wide character classification utilities</b></a>
17599 1   The header <a href="#7.29">&lt;wctype.h&gt;</a> declares several functions useful for classifying wide
17600     characters.
17601 2   The term printing wide character refers to a member of a locale-specific set of wide
17602     characters, each of which occupies at least one printing position on a display device. The
17603     term control wide character refers to a member of a locale-specific set of wide characters
17604     that are not printing wide characters.
17605 <a name="7.29.2.1" href="#7.29.2.1"><b>    7.29.2.1 Wide character classification functions</b></a>
17606 1   The functions in this subclause return nonzero (true) if and only if the value of the
17607     argument wc conforms to that in the description of the function.
17608 2   Each of the following functions returns true for each wide character that corresponds (as
17609     if by a call to the wctob function) to a single-byte character for which the corresponding
17610     character classification function from <a href="#7.4.1">7.4.1</a> returns true, except that the iswgraph and
17611     iswpunct functions may differ with respect to wide characters other than L' ' that are
17612     both printing and white-space wide characters.336)
17613     Forward references: the wctob function (<a href="#7.28.6.1.2">7.28.6.1.2</a>).
17614 <a name="7.29.2.1.1" href="#7.29.2.1.1"><b>    7.29.2.1.1 The iswalnum function</b></a>
17615     Synopsis
17616 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17617             int iswalnum(wint_t wc);
17618     Description
17619 2   The iswalnum function tests for any wide character for which iswalpha or
17620     iswdigit is true.
17621 <a name="7.29.2.1.2" href="#7.29.2.1.2"><b>    7.29.2.1.2 The iswalpha function</b></a>
17622     Synopsis
17623 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17624             int iswalpha(wint_t wc);
17625     Description
17626 2   The iswalpha function tests for any wide character for which iswupper or
17627     iswlower is true, or any wide character that is one of a locale-specific set of alphabetic
17628
17629     336) For example, if the expression isalpha(wctob(wc)) evaluates to true, then the call
17630          iswalpha(wc) also returns true. But, if the expression isgraph(wctob(wc)) evaluates to true
17631          (which cannot occur for wc == L' ' of course), then either iswgraph(wc) or iswprint(wc)
17632          &amp;&amp; iswspace(wc) is true, but not both.
17633
17634 [<a name="#p444" href="p444">page 444</a>] (<a href="#Contents">Contents</a>)
17635
17636     wide characters for which none of iswcntrl, iswdigit, iswpunct, or iswspace
17637     is true.337)
17638 <a name="7.29.2.1.3" href="#7.29.2.1.3"><b>    7.29.2.1.3 The iswblank function</b></a>
17639     Synopsis
17640 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17641             int iswblank(wint_t wc);
17642     Description
17643 2   The iswblank function tests for any wide character that is a standard blank wide
17644     character or is one of a locale-specific set of wide characters for which iswspace is true
17645     and that is used to separate words within a line of text. The standard blank wide
17646     characters are the following: space (L' '), and horizontal tab (L'\t'). In the "C"
17647     locale, iswblank returns true only for the standard blank characters.
17648 <a name="7.29.2.1.4" href="#7.29.2.1.4"><b>    7.29.2.1.4 The iswcntrl function</b></a>
17649     Synopsis
17650 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17651             int iswcntrl(wint_t wc);
17652     Description
17653 2   The iswcntrl function tests for any control wide character.
17654 <a name="7.29.2.1.5" href="#7.29.2.1.5"><b>    7.29.2.1.5 The iswdigit function</b></a>
17655     Synopsis
17656 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17657             int iswdigit(wint_t wc);
17658     Description
17659 2   The iswdigit function tests for any wide character that corresponds to a decimal-digit
17660     character (as defined in <a href="#5.2.1">5.2.1</a>).
17661 <a name="7.29.2.1.6" href="#7.29.2.1.6"><b>    7.29.2.1.6 The iswgraph function</b></a>
17662     Synopsis
17663 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17664             int iswgraph(wint_t wc);
17665
17666
17667
17668
17669     337) The functions iswlower and iswupper test true or false separately for each of these additional
17670          wide characters; all four combinations are possible.
17671
17672 [<a name="#p445" href="p445">page 445</a>] (<a href="#Contents">Contents</a>)
17673
17674     Description
17675 2   The iswgraph function tests for any wide character for which iswprint is true and
17676     iswspace is false.338)
17677 <a name="7.29.2.1.7" href="#7.29.2.1.7"><b>    7.29.2.1.7 The iswlower function</b></a>
17678     Synopsis
17679 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17680             int iswlower(wint_t wc);
17681     Description
17682 2   The iswlower function tests for any wide character that corresponds to a lowercase
17683     letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
17684     iswdigit, iswpunct, or iswspace is true.
17685 <a name="7.29.2.1.8" href="#7.29.2.1.8"><b>    7.29.2.1.8 The iswprint function</b></a>
17686     Synopsis
17687 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17688             int iswprint(wint_t wc);
17689     Description
17690 2   The iswprint function tests for any printing wide character.
17691 <a name="7.29.2.1.9" href="#7.29.2.1.9"><b>    7.29.2.1.9 The iswpunct function</b></a>
17692     Synopsis
17693 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17694             int iswpunct(wint_t wc);
17695     Description
17696 2   The iswpunct function tests for any printing wide character that is one of a locale-
17697     specific set of punctuation wide characters for which neither iswspace nor iswalnum
17698     is true.338)
17699 <a name="7.29.2.1.10" href="#7.29.2.1.10"><b>    7.29.2.1.10 The iswspace function</b></a>
17700     Synopsis
17701 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17702             int iswspace(wint_t wc);
17703
17704
17705
17706     338) Note that the behavior of the iswgraph and iswpunct functions may differ from their
17707          corresponding functions in <a href="#7.4.1">7.4.1</a> with respect to printing, white-space, single-byte execution
17708          characters other than ' '.
17709
17710 [<a name="#p446" href="p446">page 446</a>] (<a href="#Contents">Contents</a>)
17711
17712     Description
17713 2   The iswspace function tests for any wide character that corresponds to a locale-specific
17714     set of white-space wide characters for which none of iswalnum, iswgraph, or
17715     iswpunct is true.
17716 <a name="7.29.2.1.11" href="#7.29.2.1.11"><b>    7.29.2.1.11 The iswupper function</b></a>
17717     Synopsis
17718 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17719             int iswupper(wint_t wc);
17720     Description
17721 2   The iswupper function tests for any wide character that corresponds to an uppercase
17722     letter or is one of a locale-specific set of wide characters for which none of iswcntrl,
17723     iswdigit, iswpunct, or iswspace is true.
17724 <a name="7.29.2.1.12" href="#7.29.2.1.12"><b>    7.29.2.1.12 The iswxdigit function</b></a>
17725     Synopsis
17726 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17727             int iswxdigit(wint_t wc);
17728     Description
17729 2   The iswxdigit function tests for any wide character that corresponds to a
17730     hexadecimal-digit character (as defined in <a href="#6.4.4.1">6.4.4.1</a>).
17731 <a name="7.29.2.2" href="#7.29.2.2"><b>    7.29.2.2 Extensible wide character classification functions</b></a>
17732 1   The functions wctype and iswctype provide extensible wide character classification
17733     as well as testing equivalent to that performed by the functions described in the previous
17734     subclause (<a href="#7.29.2.1">7.29.2.1</a>).
17735 <a name="7.29.2.2.1" href="#7.29.2.2.1"><b>    7.29.2.2.1 The iswctype function</b></a>
17736     Synopsis
17737 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17738             int iswctype(wint_t wc, wctype_t desc);
17739     Description
17740 2   The iswctype function determines whether the wide character wc has the property
17741     described by desc. The current setting of the LC_CTYPE category shall be the same as
17742     during the call to wctype that returned the value desc.
17743 3   Each of the following expressions has a truth-value equivalent to the call to the wide
17744     character classification function (<a href="#7.29.2.1">7.29.2.1</a>) in the comment that follows the expression:
17745
17746
17747 [<a name="#p447" href="p447">page 447</a>] (<a href="#Contents">Contents</a>)
17748
17749            iswctype(wc,       wctype("alnum"))              //   iswalnum(wc)
17750            iswctype(wc,       wctype("alpha"))              //   iswalpha(wc)
17751            iswctype(wc,       wctype("blank"))              //   iswblank(wc)
17752            iswctype(wc,       wctype("cntrl"))              //   iswcntrl(wc)
17753            iswctype(wc,       wctype("digit"))              //   iswdigit(wc)
17754            iswctype(wc,       wctype("graph"))              //   iswgraph(wc)
17755            iswctype(wc,       wctype("lower"))              //   iswlower(wc)
17756            iswctype(wc,       wctype("print"))              //   iswprint(wc)
17757            iswctype(wc,       wctype("punct"))              //   iswpunct(wc)
17758            iswctype(wc,       wctype("space"))              //   iswspace(wc)
17759            iswctype(wc,       wctype("upper"))              //   iswupper(wc)
17760            iswctype(wc,       wctype("xdigit"))             //   iswxdigit(wc)
17761     Returns
17762 4   The iswctype function returns nonzero (true) if and only if the value of the wide
17763     character wc has the property described by desc.
17764     Forward references: the wctype function (<a href="#7.29.2.2.2">7.29.2.2.2</a>).
17765 <a name="7.29.2.2.2" href="#7.29.2.2.2"><b>    7.29.2.2.2 The wctype function</b></a>
17766     Synopsis
17767 1          #include <a href="#7.29">&lt;wctype.h&gt;</a>
17768            wctype_t wctype(const char *property);
17769     Description
17770 2   The wctype function constructs a value with type wctype_t that describes a class of
17771     wide characters identified by the string argument property.
17772 3   The strings listed in the description of the iswctype function shall be valid in all
17773     locales as property arguments to the wctype function.
17774     Returns
17775 4   If property identifies a valid class of wide characters according to the LC_CTYPE
17776     category of the current locale, the wctype function returns a nonzero value that is valid
17777     as the second argument to the iswctype function; otherwise, it returns zero.
17778
17779
17780
17781
17782 [<a name="#p448" href="p448">page 448</a>] (<a href="#Contents">Contents</a>)
17783
17784 <a name="7.29.3" href="#7.29.3"><b>    7.29.3 Wide character case mapping utilities</b></a>
17785 1   The header <a href="#7.29">&lt;wctype.h&gt;</a> declares several functions useful for mapping wide characters.
17786 <a name="7.29.3.1" href="#7.29.3.1"><b>    7.29.3.1 Wide character case mapping functions</b></a>
17787 <a name="7.29.3.1.1" href="#7.29.3.1.1"><b>    7.29.3.1.1 The towlower function</b></a>
17788     Synopsis
17789 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17790             wint_t towlower(wint_t wc);
17791     Description
17792 2   The towlower function converts an uppercase letter to a corresponding lowercase letter.
17793     Returns
17794 3   If the argument is a wide character for which iswupper is true and there are one or
17795     more corresponding wide characters, as specified by the current locale, for which
17796     iswlower is true, the towlower function returns one of the corresponding wide
17797     characters (always the same one for any given locale); otherwise, the argument is
17798     returned unchanged.
17799 <a name="7.29.3.1.2" href="#7.29.3.1.2"><b>    7.29.3.1.2 The towupper function</b></a>
17800     Synopsis
17801 1           #include <a href="#7.29">&lt;wctype.h&gt;</a>
17802             wint_t towupper(wint_t wc);
17803     Description
17804 2   The towupper function converts a lowercase letter to a corresponding uppercase letter.
17805     Returns
17806 3   If the argument is a wide character for which iswlower is true and there are one or
17807     more corresponding wide characters, as specified by the current locale, for which
17808     iswupper is true, the towupper function returns one of the corresponding wide
17809     characters (always the same one for any given locale); otherwise, the argument is
17810     returned unchanged.
17811 <a name="7.29.3.2" href="#7.29.3.2"><b>    7.29.3.2 Extensible wide character case mapping functions</b></a>
17812 1   The functions wctrans and towctrans provide extensible wide character mapping as
17813     well as case mapping equivalent to that performed by the functions described in the
17814     previous subclause (<a href="#7.29.3.1">7.29.3.1</a>).
17815
17816
17817
17818
17819 [<a name="#p449" href="p449">page 449</a>] (<a href="#Contents">Contents</a>)
17820
17821 <a name="7.29.3.2.1" href="#7.29.3.2.1"><b>    7.29.3.2.1 The towctrans function</b></a>
17822     Synopsis
17823 1          #include <a href="#7.29">&lt;wctype.h&gt;</a>
17824            wint_t towctrans(wint_t wc, wctrans_t desc);
17825     Description
17826 2   The towctrans function maps the wide character wc using the mapping described by
17827     desc. The current setting of the LC_CTYPE category shall be the same as during the call
17828     to wctrans that returned the value desc.
17829 3   Each of the following expressions behaves the same as the call to the wide character case
17830     mapping function (<a href="#7.29.3.1">7.29.3.1</a>) in the comment that follows the expression:
17831            towctrans(wc, wctrans("tolower"))                      // towlower(wc)
17832            towctrans(wc, wctrans("toupper"))                      // towupper(wc)
17833     Returns
17834 4   The towctrans function returns the mapped value of wc using the mapping described
17835     by desc.
17836 <a name="7.29.3.2.2" href="#7.29.3.2.2"><b>    7.29.3.2.2 The wctrans function</b></a>
17837     Synopsis
17838 1          #include <a href="#7.29">&lt;wctype.h&gt;</a>
17839            wctrans_t wctrans(const char *property);
17840     Description
17841 2   The wctrans function constructs a value with type wctrans_t that describes a
17842     mapping between wide characters identified by the string argument property.
17843 3   The strings listed in the description of the towctrans function shall be valid in all
17844     locales as property arguments to the wctrans function.
17845     Returns
17846 4   If property identifies a valid mapping of wide characters according to the LC_CTYPE
17847     category of the current locale, the wctrans function returns a nonzero value that is valid
17848     as the second argument to the towctrans function; otherwise, it returns zero.
17849
17850
17851
17852
17853 [<a name="#p450" href="p450">page 450</a>] (<a href="#Contents">Contents</a>)
17854
17855 <a name="7.30" href="#7.30"><b>    7.30 Future library directions</b></a>
17856 1   The following names are grouped under individual headers for convenience. All external
17857     names described below are reserved no matter what headers are included by the program.
17858 <a name="7.30.1" href="#7.30.1"><b>    7.30.1 Complex arithmetic &lt;complex.h&gt;</b></a>
17859 1   The function names
17860          cerf                cexpm1              clog2
17861          cerfc               clog10              clgamma
17862          cexp2               clog1p              ctgamma
17863     and the same names suffixed with f or l may be added to the declarations in the
17864     <a href="#7.3">&lt;complex.h&gt;</a> header.
17865 <a name="7.30.2" href="#7.30.2"><b>    7.30.2 Character handling &lt;ctype.h&gt;</b></a>
17866 1   Function names that begin with either is or to, and a lowercase letter may be added to
17867     the declarations in the <a href="#7.4">&lt;ctype.h&gt;</a> header.
17868 <a name="7.30.3" href="#7.30.3"><b>    7.30.3 Errors &lt;errno.h&gt;</b></a>
17869 1   Macros that begin with E and a digit or E and an uppercase letter may be added to the
17870     declarations in the <a href="#7.5">&lt;errno.h&gt;</a> header.
17871 <a name="7.30.4" href="#7.30.4"><b>    7.30.4 Format conversion of integer types &lt;inttypes.h&gt;</b></a>
17872 1   Macro names beginning with PRI or SCN followed by any lowercase letter or X may be
17873     added to the macros defined in the <a href="#7.8">&lt;inttypes.h&gt;</a> header.
17874 <a name="7.30.5" href="#7.30.5"><b>    7.30.5 Localization &lt;locale.h&gt;</b></a>
17875 1   Macros that begin with LC_ and an uppercase letter may be added to the definitions in
17876     the <a href="#7.11">&lt;locale.h&gt;</a> header.
17877 <a name="7.30.6" href="#7.30.6"><b>    7.30.6 Signal handling &lt;signal.h&gt;</b></a>
17878 1   Macros that begin with either SIG and an uppercase letter or SIG_ and an uppercase
17879     letter may be added to the definitions in the <a href="#7.14">&lt;signal.h&gt;</a> header.
17880 <a name="7.30.7" href="#7.30.7"><b>    7.30.7 Boolean type and values &lt;stdbool.h&gt;</b></a>
17881 1   The ability to undefine and perhaps then redefine the macros bool, true, and false is
17882     an obsolescent feature.
17883 <a name="7.30.8" href="#7.30.8"><b>    7.30.8 Integer types &lt;stdint.h&gt;</b></a>
17884 1   Typedef names beginning with int or uint and ending with _t may be added to the
17885     types defined in the <a href="#7.20">&lt;stdint.h&gt;</a> header. Macro names beginning with INT or UINT
17886     and ending with _MAX, _MIN, or _C may be added to the macros defined in the
17887     <a href="#7.20">&lt;stdint.h&gt;</a> header.
17888
17889 [<a name="#p451" href="p451">page 451</a>] (<a href="#Contents">Contents</a>)
17890
17891 <a name="7.30.9" href="#7.30.9"><b>    7.30.9 Input/output &lt;stdio.h&gt;</b></a>
17892 1   Lowercase letters may be added to the conversion specifiers and length modifiers in
17893     fprintf and fscanf. Other characters may be used in extensions.
17894 2   The use of ungetc on a binary stream where the file position indicator is zero prior to
17895     the call is an obsolescent feature.
17896 <a name="7.30.10" href="#7.30.10"><b>    7.30.10 General utilities &lt;stdlib.h&gt;</b></a>
17897 1   Function names that begin with str and a lowercase letter may be added to the
17898     declarations in the <a href="#7.22">&lt;stdlib.h&gt;</a> header.
17899 <a name="7.30.11" href="#7.30.11"><b>    7.30.11 String handling &lt;string.h&gt;</b></a>
17900 1   Function names that begin with str, mem, or wcs and a lowercase letter may be added
17901     to the declarations in the <a href="#7.23">&lt;string.h&gt;</a> header.
17902 <a name="7.30.12" href="#7.30.12"><b>    7.30.12 Extended multibyte and wide character utilities &lt;wchar.h&gt;</b></a>
17903 1   Function names that begin with wcs and a lowercase letter may be added to the
17904     declarations in the <a href="#7.28">&lt;wchar.h&gt;</a> header.
17905 2   Lowercase letters may be added to the conversion specifiers and length modifiers in
17906     fwprintf and fwscanf. Other characters may be used in extensions.
17907 <a name="7.30.13" href="#7.30.13"><b>    7.30.13 Wide character classification and mapping utilities</b></a>
17908     <a href="#7.29">&lt;wctype.h&gt;</a>
17909 1   Function names that begin with is or to and a lowercase letter may be added to the
17910     declarations in the <a href="#7.29">&lt;wctype.h&gt;</a> header.
17911
17912
17913
17914
17915 [<a name="#p452" href="p452">page 452</a>] (<a href="#Contents">Contents</a>)
17916
17917 <a name="A" href="#A"><b>                                                   Annex A</b></a>
17918                                                  (informative)
17919                                   Language syntax summary
17920 1   NOTE     The notation is described in <a href="#6.1">6.1</a>.
17921
17922 <a name="A.1" href="#A.1"><b>    A.1 Lexical grammar</b></a>
17923 <a name="A.1.1" href="#A.1.1"><b>    A.1.1 Lexical elements</b></a>
17924     (<a href="#6.4">6.4</a>) token:
17925                      keyword
17926                      identifier
17927                      constant
17928                      string-literal
17929                      punctuator
17930     (<a href="#6.4">6.4</a>) preprocessing-token:
17931                   header-name
17932                   identifier
17933                   pp-number
17934                   character-constant
17935                   string-literal
17936                   punctuator
17937                   each non-white-space character that cannot be one of the above
17938
17939
17940
17941
17942 [<a name="#p453" href="p453">page 453</a>] (<a href="#Contents">Contents</a>)
17943
17944 <a name="A.1.2" href="#A.1.2"><b>A.1.2 Keywords</b></a>
17945 (<a href="#6.4.1">6.4.1</a>) keyword: one of
17946               alignof                     goto                  union
17947               auto                        if                    unsigned
17948               break                       inline                void
17949               case                        int                   volatile
17950               char                        long                  while
17951               const                       register              _Alignas
17952               continue                    restrict              _Atomic
17953               default                     return                _Bool
17954               do                          short                 _Complex
17955               double                      signed                _Generic
17956               else                        sizeof                _Imaginary
17957               enum                        static                _Noreturn
17958               extern                      struct                _Static_assert
17959               float                       switch                _Thread_local
17960               for                         typedef
17961 <a name="A.1.3" href="#A.1.3"><b>A.1.3 Identifiers</b></a>
17962 (<a href="#6.4.2.1">6.4.2.1</a>) identifier:
17963                identifier-nondigit
17964                identifier identifier-nondigit
17965                identifier digit
17966 (<a href="#6.4.2.1">6.4.2.1</a>) identifier-nondigit:
17967                nondigit
17968                universal-character-name
17969                other implementation-defined characters
17970 (<a href="#6.4.2.1">6.4.2.1</a>) nondigit: one of
17971               _ a b          c    d   e    f   g   h    i   j   k   l   m
17972                    n o       p    q   r    s   t   u    v   w   x   y   z
17973                    A B       C    D   E    F   G   H    I   J   K   L   M
17974                    N O       P    Q   R    S   T   U    V   W   X   Y   Z
17975 (<a href="#6.4.2.1">6.4.2.1</a>) digit: one of
17976                0 1 2         3    4   5    6   7   8    9
17977
17978
17979
17980
17981 [<a name="#p454" href="p454">page 454</a>] (<a href="#Contents">Contents</a>)
17982
17983 <a name="A.1.4" href="#A.1.4"><b>A.1.4 Universal character names</b></a>
17984 (<a href="#6.4.3">6.4.3</a>) universal-character-name:
17985               \u hex-quad
17986               \U hex-quad hex-quad
17987 (<a href="#6.4.3">6.4.3</a>) hex-quad:
17988               hexadecimal-digit hexadecimal-digit
17989                            hexadecimal-digit hexadecimal-digit
17990 <a name="A.1.5" href="#A.1.5"><b>A.1.5 Constants</b></a>
17991 (<a href="#6.4.4">6.4.4</a>) constant:
17992               integer-constant
17993               floating-constant
17994               enumeration-constant
17995               character-constant
17996 (<a href="#6.4.4.1">6.4.4.1</a>) integer-constant:
17997                decimal-constant integer-suffixopt
17998                octal-constant integer-suffixopt
17999                hexadecimal-constant integer-suffixopt
18000 (<a href="#6.4.4.1">6.4.4.1</a>) decimal-constant:
18001               nonzero-digit
18002               decimal-constant digit
18003 (<a href="#6.4.4.1">6.4.4.1</a>) octal-constant:
18004                0
18005                octal-constant octal-digit
18006 (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-constant:
18007               hexadecimal-prefix hexadecimal-digit
18008               hexadecimal-constant hexadecimal-digit
18009 (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-prefix: one of
18010               0x 0X
18011 (<a href="#6.4.4.1">6.4.4.1</a>) nonzero-digit: one of
18012               1 2 3 4 5              6      7   8   9
18013 (<a href="#6.4.4.1">6.4.4.1</a>) octal-digit: one of
18014                0 1 2 3           4   5      6   7
18015
18016
18017
18018
18019 [<a name="#p455" href="p455">page 455</a>] (<a href="#Contents">Contents</a>)
18020
18021 (<a href="#6.4.4.1">6.4.4.1</a>) hexadecimal-digit: one of
18022               0 1 2 3 4 5                6    7    8   9
18023               a b c d e f
18024               A B C D E F
18025 (<a href="#6.4.4.1">6.4.4.1</a>) integer-suffix:
18026                unsigned-suffix long-suffixopt
18027                unsigned-suffix long-long-suffix
18028                long-suffix unsigned-suffixopt
18029                long-long-suffix unsigned-suffixopt
18030 (<a href="#6.4.4.1">6.4.4.1</a>) unsigned-suffix: one of
18031                u U
18032 (<a href="#6.4.4.1">6.4.4.1</a>) long-suffix: one of
18033                l L
18034 (<a href="#6.4.4.1">6.4.4.1</a>) long-long-suffix: one of
18035                ll LL
18036 (<a href="#6.4.4.2">6.4.4.2</a>) floating-constant:
18037                decimal-floating-constant
18038                hexadecimal-floating-constant
18039 (<a href="#6.4.4.2">6.4.4.2</a>) decimal-floating-constant:
18040               fractional-constant exponent-partopt floating-suffixopt
18041               digit-sequence exponent-part floating-suffixopt
18042 (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-floating-constant:
18043               hexadecimal-prefix hexadecimal-fractional-constant
18044                             binary-exponent-part floating-suffixopt
18045               hexadecimal-prefix hexadecimal-digit-sequence
18046                             binary-exponent-part floating-suffixopt
18047 (<a href="#6.4.4.2">6.4.4.2</a>) fractional-constant:
18048                digit-sequenceopt . digit-sequence
18049                digit-sequence .
18050 (<a href="#6.4.4.2">6.4.4.2</a>) exponent-part:
18051               e signopt digit-sequence
18052               E signopt digit-sequence
18053 (<a href="#6.4.4.2">6.4.4.2</a>) sign: one of
18054                + -
18055
18056
18057
18058 [<a name="#p456" href="p456">page 456</a>] (<a href="#Contents">Contents</a>)
18059
18060 (<a href="#6.4.4.2">6.4.4.2</a>) digit-sequence:
18061                digit
18062                digit-sequence digit
18063 (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-fractional-constant:
18064               hexadecimal-digit-sequenceopt .
18065                              hexadecimal-digit-sequence
18066               hexadecimal-digit-sequence .
18067 (<a href="#6.4.4.2">6.4.4.2</a>) binary-exponent-part:
18068                p signopt digit-sequence
18069                P signopt digit-sequence
18070 (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-digit-sequence:
18071               hexadecimal-digit
18072               hexadecimal-digit-sequence hexadecimal-digit
18073 (<a href="#6.4.4.2">6.4.4.2</a>) floating-suffix: one of
18074                f l F L
18075 (<a href="#6.4.4.3">6.4.4.3</a>) enumeration-constant:
18076               identifier
18077 (<a href="#6.4.4.4">6.4.4.4</a>) character-constant:
18078               ' c-char-sequence '
18079               L' c-char-sequence '
18080               u' c-char-sequence '
18081               U' c-char-sequence '
18082 (<a href="#6.4.4.4">6.4.4.4</a>) c-char-sequence:
18083                c-char
18084                c-char-sequence c-char
18085 (<a href="#6.4.4.4">6.4.4.4</a>) c-char:
18086                any member of the source character set except
18087                             the single-quote ', backslash \, or new-line character
18088                escape-sequence
18089 (<a href="#6.4.4.4">6.4.4.4</a>) escape-sequence:
18090               simple-escape-sequence
18091               octal-escape-sequence
18092               hexadecimal-escape-sequence
18093               universal-character-name
18094
18095
18096
18097
18098 [<a name="#p457" href="p457">page 457</a>] (<a href="#Contents">Contents</a>)
18099
18100 (<a href="#6.4.4.4">6.4.4.4</a>) simple-escape-sequence: one of
18101               \' \" \? \\
18102               \a \b \f \n \r \t                   \v
18103 (<a href="#6.4.4.4">6.4.4.4</a>) octal-escape-sequence:
18104                \ octal-digit
18105                \ octal-digit octal-digit
18106                \ octal-digit octal-digit octal-digit
18107 (<a href="#6.4.4.4">6.4.4.4</a>) hexadecimal-escape-sequence:
18108               \x hexadecimal-digit
18109               hexadecimal-escape-sequence hexadecimal-digit
18110 <a name="A.1.6" href="#A.1.6"><b>A.1.6 String literals</b></a>
18111 (<a href="#6.4.5">6.4.5</a>) string-literal:
18112                encoding-prefixopt " s-char-sequenceopt "
18113 (<a href="#6.4.5">6.4.5</a>) encoding-prefix:
18114               u8
18115               u
18116               U
18117               L
18118 (<a href="#6.4.5">6.4.5</a>) s-char-sequence:
18119                s-char
18120                s-char-sequence s-char
18121 (<a href="#6.4.5">6.4.5</a>) s-char:
18122                any member of the source character set except
18123                             the double-quote ", backslash \, or new-line character
18124                escape-sequence
18125 <a name="A.1.7" href="#A.1.7"><b>A.1.7 Punctuators</b></a>
18126 (<a href="#6.4.6">6.4.6</a>) punctuator: one of
18127               [ ] ( ) { } . -&gt;
18128               ++ -- &amp; * + - ~ !
18129               / % &lt;&lt; &gt;&gt; &lt; &gt; &lt;= &gt;=                      ==    !=    ^    |   &amp;&amp;   ||
18130               ? : ; ...
18131               = *= /= %= += -= &lt;&lt;=                     &gt;&gt;=    &amp;=       ^=   |=
18132               , # ##
18133               &lt;: :&gt; &lt;% %&gt; %: %:%:
18134
18135
18136
18137
18138 [<a name="#p458" href="p458">page 458</a>] (<a href="#Contents">Contents</a>)
18139
18140 <a name="A.1.8" href="#A.1.8"><b>A.1.8 Header names</b></a>
18141 (<a href="#6.4.7">6.4.7</a>) header-name:
18142               &lt; h-char-sequence &gt;
18143               " q-char-sequence "
18144 (<a href="#6.4.7">6.4.7</a>) h-char-sequence:
18145               h-char
18146               h-char-sequence h-char
18147 (<a href="#6.4.7">6.4.7</a>) h-char:
18148               any member of the source character set except
18149                            the new-line character and &gt;
18150 (<a href="#6.4.7">6.4.7</a>) q-char-sequence:
18151               q-char
18152               q-char-sequence q-char
18153 (<a href="#6.4.7">6.4.7</a>) q-char:
18154               any member of the source character set except
18155                            the new-line character and "
18156 <a name="A.1.9" href="#A.1.9"><b>A.1.9 Preprocessing numbers</b></a>
18157 (<a href="#6.4.8">6.4.8</a>) pp-number:
18158               digit
18159               . digit
18160               pp-number   digit
18161               pp-number   identifier-nondigit
18162               pp-number   e sign
18163               pp-number   E sign
18164               pp-number   p sign
18165               pp-number   P sign
18166               pp-number   .
18167
18168
18169
18170
18171 [<a name="#p459" href="p459">page 459</a>] (<a href="#Contents">Contents</a>)
18172
18173 <a name="A.2" href="#A.2"><b>A.2 Phrase structure grammar</b></a>
18174 <a name="A.2.1" href="#A.2.1"><b>A.2.1 Expressions</b></a>
18175 (<a href="#6.5.1">6.5.1</a>) primary-expression:
18176               identifier
18177               constant
18178               string-literal
18179               ( expression )
18180               generic-selection
18181 (<a href="#6.5.1.1">6.5.1.1</a>) generic-selection:
18182               _Generic ( assignment-expression , generic-assoc-list )
18183 (<a href="#6.5.1.1">6.5.1.1</a>) generic-assoc-list:
18184               generic-association
18185               generic-assoc-list , generic-association
18186 (<a href="#6.5.1.1">6.5.1.1</a>) generic-association:
18187               type-name : assignment-expression
18188               default : assignment-expression
18189 (<a href="#6.5.2">6.5.2</a>) postfix-expression:
18190               primary-expression
18191               postfix-expression [ expression ]
18192               postfix-expression ( argument-expression-listopt )
18193               postfix-expression . identifier
18194               postfix-expression -&gt; identifier
18195               postfix-expression ++
18196               postfix-expression --
18197               ( type-name ) { initializer-list }
18198               ( type-name ) { initializer-list , }
18199 (<a href="#6.5.2">6.5.2</a>) argument-expression-list:
18200              assignment-expression
18201              argument-expression-list , assignment-expression
18202 (<a href="#6.5.3">6.5.3</a>) unary-expression:
18203               postfix-expression
18204               ++ unary-expression
18205               -- unary-expression
18206               unary-operator cast-expression
18207               sizeof unary-expression
18208               sizeof ( type-name )
18209               alignof ( type-name )
18210
18211 [<a name="#p460" href="p460">page 460</a>] (<a href="#Contents">Contents</a>)
18212
18213 (<a href="#6.5.3">6.5.3</a>) unary-operator: one of
18214               &amp; * + - ~                !
18215 (<a href="#6.5.4">6.5.4</a>) cast-expression:
18216                unary-expression
18217                ( type-name ) cast-expression
18218 (<a href="#6.5.5">6.5.5</a>) multiplicative-expression:
18219                cast-expression
18220                multiplicative-expression * cast-expression
18221                multiplicative-expression / cast-expression
18222                multiplicative-expression % cast-expression
18223 (<a href="#6.5.6">6.5.6</a>) additive-expression:
18224                multiplicative-expression
18225                additive-expression + multiplicative-expression
18226                additive-expression - multiplicative-expression
18227 (<a href="#6.5.7">6.5.7</a>) shift-expression:
18228                 additive-expression
18229                 shift-expression &lt;&lt; additive-expression
18230                 shift-expression &gt;&gt; additive-expression
18231 (<a href="#6.5.8">6.5.8</a>) relational-expression:
18232                shift-expression
18233                relational-expression   &lt;    shift-expression
18234                relational-expression   &gt;    shift-expression
18235                relational-expression   &lt;=   shift-expression
18236                relational-expression   &gt;=   shift-expression
18237 (<a href="#6.5.9">6.5.9</a>) equality-expression:
18238                relational-expression
18239                equality-expression == relational-expression
18240                equality-expression != relational-expression
18241 (<a href="#6.5.10">6.5.10</a>) AND-expression:
18242              equality-expression
18243              AND-expression &amp; equality-expression
18244 (<a href="#6.5.11">6.5.11</a>) exclusive-OR-expression:
18245               AND-expression
18246               exclusive-OR-expression ^ AND-expression
18247
18248
18249
18250
18251 [<a name="#p461" href="p461">page 461</a>] (<a href="#Contents">Contents</a>)
18252
18253 (<a href="#6.5.12">6.5.12</a>) inclusive-OR-expression:
18254                exclusive-OR-expression
18255                inclusive-OR-expression | exclusive-OR-expression
18256 (<a href="#6.5.13">6.5.13</a>) logical-AND-expression:
18257               inclusive-OR-expression
18258               logical-AND-expression &amp;&amp; inclusive-OR-expression
18259 (<a href="#6.5.14">6.5.14</a>) logical-OR-expression:
18260               logical-AND-expression
18261               logical-OR-expression || logical-AND-expression
18262 (<a href="#6.5.15">6.5.15</a>) conditional-expression:
18263               logical-OR-expression
18264               logical-OR-expression ? expression : conditional-expression
18265 (<a href="#6.5.16">6.5.16</a>) assignment-expression:
18266               conditional-expression
18267               unary-expression assignment-operator assignment-expression
18268 (<a href="#6.5.16">6.5.16</a>) assignment-operator: one of
18269               = *= /= %= +=                -=    &lt;&lt;=    &gt;&gt;=      &amp;=   ^=   |=
18270 (<a href="#6.5.17">6.5.17</a>) expression:
18271               assignment-expression
18272               expression , assignment-expression
18273 (<a href="#6.6">6.6</a>) constant-expression:
18274               conditional-expression
18275 <a name="A.2.2" href="#A.2.2"><b>A.2.2 Declarations</b></a>
18276 (<a href="#6.7">6.7</a>) declaration:
18277                declaration-specifiers init-declarator-listopt ;
18278                static_assert-declaration                                                 *
18279 (<a href="#6.7">6.7</a>) declaration-specifiers:
18280                storage-class-specifier declaration-specifiersopt
18281                type-specifier declaration-specifiersopt
18282                type-qualifier declaration-specifiersopt
18283                function-specifier declaration-specifiersopt
18284                alignment-specifier declaration-specifiersopt
18285 (<a href="#6.7">6.7</a>) init-declarator-list:
18286                init-declarator
18287                init-declarator-list , init-declarator
18288
18289
18290 [<a name="#p462" href="p462">page 462</a>] (<a href="#Contents">Contents</a>)
18291
18292 (<a href="#6.7">6.7</a>) init-declarator:
18293                declarator
18294                declarator = initializer
18295 (<a href="#6.7.1">6.7.1</a>) storage-class-specifier:
18296               typedef
18297               extern
18298               static
18299               _Thread_local
18300               auto
18301               register
18302 (<a href="#6.7.2">6.7.2</a>) type-specifier:
18303                void
18304                char
18305                short
18306                int
18307                long
18308                float
18309                double
18310                signed
18311                unsigned
18312                _Bool
18313                _Complex
18314                _Atomic ( type-name )
18315                struct-or-union-specifier
18316                enum-specifier
18317                typedef-name
18318 (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union-specifier:
18319                struct-or-union identifieropt { struct-declaration-list }
18320                struct-or-union identifier
18321 (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union:
18322                struct
18323                union
18324 (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration-list:
18325                struct-declaration
18326                struct-declaration-list struct-declaration
18327 (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration:
18328                specifier-qualifier-list struct-declarator-listopt ;
18329                static_assert-declaration
18330
18331 [<a name="#p463" href="p463">page 463</a>] (<a href="#Contents">Contents</a>)
18332
18333 (<a href="#6.7.2.1">6.7.2.1</a>) specifier-qualifier-list:
18334                type-specifier specifier-qualifier-listopt
18335                type-qualifier specifier-qualifier-listopt
18336 (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator-list:
18337                struct-declarator
18338                struct-declarator-list , struct-declarator
18339 (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator:
18340                declarator
18341                declaratoropt : constant-expression
18342 (<a href="#6.7.2.2">6.7.2.2</a>) enum-specifier:
18343               enum identifieropt { enumerator-list }
18344               enum identifieropt { enumerator-list , }
18345               enum identifier
18346 (<a href="#6.7.2.2">6.7.2.2</a>) enumerator-list:
18347               enumerator
18348               enumerator-list , enumerator
18349 (<a href="#6.7.2.2">6.7.2.2</a>) enumerator:
18350               enumeration-constant
18351               enumeration-constant = constant-expression
18352 (<a href="#6.7.3">6.7.3</a>) type-qualifier:
18353               const
18354               restrict
18355               volatile
18356               _Atomic
18357 (<a href="#6.7.4">6.7.4</a>) function-specifier:
18358                inline
18359                _Noreturn
18360 (<a href="#6.7.5">6.7.5</a>) alignment-specifier:
18361               _Alignas ( type-name )
18362               _Alignas ( constant-expression )
18363 (<a href="#6.7.6">6.7.6</a>) declarator:
18364               pointeropt direct-declarator
18365
18366
18367
18368
18369 [<a name="#p464" href="p464">page 464</a>] (<a href="#Contents">Contents</a>)
18370
18371 (<a href="#6.7.6">6.7.6</a>) direct-declarator:
18372                identifier
18373                ( declarator )
18374                direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
18375                direct-declarator [ static type-qualifier-listopt assignment-expression ]
18376                direct-declarator [ type-qualifier-list static assignment-expression ]
18377                direct-declarator [ type-qualifier-listopt * ]
18378                direct-declarator ( parameter-type-list )
18379                direct-declarator ( identifier-listopt )
18380 (<a href="#6.7.6">6.7.6</a>) pointer:
18381                * type-qualifier-listopt
18382                * type-qualifier-listopt pointer
18383 (<a href="#6.7.6">6.7.6</a>) type-qualifier-list:
18384               type-qualifier
18385               type-qualifier-list type-qualifier
18386 (<a href="#6.7.6">6.7.6</a>) parameter-type-list:
18387              parameter-list
18388              parameter-list , ...
18389 (<a href="#6.7.6">6.7.6</a>) parameter-list:
18390              parameter-declaration
18391              parameter-list , parameter-declaration
18392 (<a href="#6.7.6">6.7.6</a>) parameter-declaration:
18393              declaration-specifiers declarator
18394              declaration-specifiers abstract-declaratoropt
18395 (<a href="#6.7.6">6.7.6</a>) identifier-list:
18396                identifier
18397                identifier-list , identifier
18398 (<a href="#6.7.7">6.7.7</a>) type-name:
18399               specifier-qualifier-list abstract-declaratoropt
18400 (<a href="#6.7.7">6.7.7</a>) abstract-declarator:
18401               pointer
18402               pointeropt direct-abstract-declarator
18403
18404
18405
18406
18407 [<a name="#p465" href="p465">page 465</a>] (<a href="#Contents">Contents</a>)
18408
18409 (<a href="#6.7.7">6.7.7</a>) direct-abstract-declarator:
18410                ( abstract-declarator )
18411                direct-abstract-declaratoropt [ type-qualifier-listopt
18412                               assignment-expressionopt ]
18413                direct-abstract-declaratoropt [ static type-qualifier-listopt
18414                               assignment-expression ]
18415                direct-abstract-declaratoropt [ type-qualifier-list static
18416                               assignment-expression ]
18417                direct-abstract-declaratoropt [ * ]
18418                direct-abstract-declaratoropt ( parameter-type-listopt )
18419 (<a href="#6.7.8">6.7.8</a>) typedef-name:
18420               identifier
18421 (<a href="#6.7.9">6.7.9</a>) initializer:
18422                 assignment-expression
18423                 { initializer-list }
18424                 { initializer-list , }
18425 (<a href="#6.7.9">6.7.9</a>) initializer-list:
18426                 designationopt initializer
18427                 initializer-list , designationopt initializer
18428 (<a href="#6.7.9">6.7.9</a>) designation:
18429               designator-list =
18430 (<a href="#6.7.9">6.7.9</a>) designator-list:
18431               designator
18432               designator-list designator
18433 (<a href="#6.7.9">6.7.9</a>) designator:
18434               [ constant-expression ]
18435               . identifier
18436 (<a href="#6.7.10">6.7.10</a>) static_assert-declaration:
18437                _Static_assert ( constant-expression , string-literal ) ;
18438
18439
18440
18441
18442 [<a name="#p466" href="p466">page 466</a>] (<a href="#Contents">Contents</a>)
18443
18444 <a name="A.2.3" href="#A.2.3"><b>A.2.3 Statements</b></a>
18445 (<a href="#6.8">6.8</a>) statement:
18446               labeled-statement
18447               compound-statement
18448               expression-statement
18449               selection-statement
18450               iteration-statement
18451               jump-statement
18452 (<a href="#6.8.1">6.8.1</a>) labeled-statement:
18453                identifier : statement
18454                case constant-expression : statement
18455                default : statement
18456 (<a href="#6.8.2">6.8.2</a>) compound-statement:
18457              { block-item-listopt }
18458 (<a href="#6.8.2">6.8.2</a>) block-item-list:
18459                block-item
18460                block-item-list block-item
18461 (<a href="#6.8.2">6.8.2</a>) block-item:
18462                declaration
18463                statement
18464 (<a href="#6.8.3">6.8.3</a>) expression-statement:
18465               expressionopt ;
18466 (<a href="#6.8.4">6.8.4</a>) selection-statement:
18467                if ( expression ) statement
18468                if ( expression ) statement else statement
18469                switch ( expression ) statement
18470 (<a href="#6.8.5">6.8.5</a>) iteration-statement:
18471                 while ( expression ) statement
18472                 do statement while ( expression ) ;
18473                 for ( expressionopt ; expressionopt ; expressionopt ) statement
18474                 for ( declaration expressionopt ; expressionopt ) statement
18475 (<a href="#6.8.6">6.8.6</a>) jump-statement:
18476               goto identifier ;
18477               continue ;
18478               break ;
18479               return expressionopt ;
18480
18481 [<a name="#p467" href="p467">page 467</a>] (<a href="#Contents">Contents</a>)
18482
18483 <a name="A.2.4" href="#A.2.4"><b>A.2.4 External definitions</b></a>
18484 (<a href="#6.9">6.9</a>) translation-unit:
18485                external-declaration
18486                translation-unit external-declaration
18487 (<a href="#6.9">6.9</a>) external-declaration:
18488                function-definition
18489                declaration
18490 (<a href="#6.9.1">6.9.1</a>) function-definition:
18491                declaration-specifiers declarator declaration-listopt compound-statement
18492 (<a href="#6.9.1">6.9.1</a>) declaration-list:
18493               declaration
18494               declaration-list declaration
18495 <a name="A.3" href="#A.3"><b>A.3 Preprocessing directives</b></a>
18496 (<a href="#6.10">6.10</a>) preprocessing-file:
18497               groupopt
18498 (<a href="#6.10">6.10</a>) group:
18499                 group-part
18500                 group group-part
18501 (<a href="#6.10">6.10</a>) group-part:
18502               if-section
18503               control-line
18504               text-line
18505               # non-directive
18506 (<a href="#6.10">6.10</a>) if-section:
18507                 if-group elif-groupsopt else-groupopt endif-line
18508 (<a href="#6.10">6.10</a>) if-group:
18509                # if     constant-expression new-line groupopt
18510                # ifdef identifier new-line groupopt
18511                # ifndef identifier new-line groupopt
18512 (<a href="#6.10">6.10</a>) elif-groups:
18513                elif-group
18514                elif-groups elif-group
18515 (<a href="#6.10">6.10</a>) elif-group:
18516                # elif        constant-expression new-line groupopt
18517
18518
18519 [<a name="#p468" href="p468">page 468</a>] (<a href="#Contents">Contents</a>)
18520
18521 (<a href="#6.10">6.10</a>) else-group:
18522                # else        new-line groupopt
18523 (<a href="#6.10">6.10</a>) endif-line:
18524                # endif       new-line
18525 (<a href="#6.10">6.10</a>) control-line:
18526               # include pp-tokens new-line
18527               # define identifier replacement-list new-line
18528               # define identifier lparen identifier-listopt )
18529                                               replacement-list new-line
18530               # define identifier lparen ... ) replacement-list new-line
18531               # define identifier lparen identifier-list , ... )
18532                                               replacement-list new-line
18533               # undef   identifier new-line
18534               # line    pp-tokens new-line
18535               # error   pp-tokensopt new-line
18536               # pragma pp-tokensopt new-line
18537               #         new-line
18538 (<a href="#6.10">6.10</a>) text-line:
18539                pp-tokensopt new-line
18540 (<a href="#6.10">6.10</a>) non-directive:
18541               pp-tokens new-line
18542 (<a href="#6.10">6.10</a>) lparen:
18543                  a ( character not immediately preceded by white-space
18544 (<a href="#6.10">6.10</a>) replacement-list:
18545               pp-tokensopt
18546 (<a href="#6.10">6.10</a>) pp-tokens:
18547               preprocessing-token
18548               pp-tokens preprocessing-token
18549 (<a href="#6.10">6.10</a>) new-line:
18550               the new-line character
18551
18552
18553
18554
18555 [<a name="#p469" href="p469">page 469</a>] (<a href="#Contents">Contents</a>)
18556
18557 <a name="B" href="#B"><b>                              Annex B</b></a>
18558                             (informative)
18559                          Library summary
18560 <a name="B.1" href="#B.1"><b>B.1 Diagnostics &lt;assert.h&gt;</b></a>
18561       NDEBUG
18562       static_assert
18563       void assert(scalar expression);
18564 <a name="B.2" href="#B.2"><b>B.2 Complex &lt;complex.h&gt;</b></a>
18565       __STDC_NO_COMPLEX__            imaginary
18566       complex                          _Imaginary_I
18567       _Complex_I                       I
18568       #pragma STDC CX_LIMITED_RANGE on-off-switch
18569       double complex cacos(double complex z);
18570       float complex cacosf(float complex z);
18571       long double complex cacosl(long double complex z);
18572       double complex casin(double complex z);
18573       float complex casinf(float complex z);
18574       long double complex casinl(long double complex z);
18575       double complex catan(double complex z);
18576       float complex catanf(float complex z);
18577       long double complex catanl(long double complex z);
18578       double complex ccos(double complex z);
18579       float complex ccosf(float complex z);
18580       long double complex ccosl(long double complex z);
18581       double complex csin(double complex z);
18582       float complex csinf(float complex z);
18583       long double complex csinl(long double complex z);
18584       double complex ctan(double complex z);
18585       float complex ctanf(float complex z);
18586       long double complex ctanl(long double complex z);
18587       double complex cacosh(double complex z);
18588       float complex cacoshf(float complex z);
18589       long double complex cacoshl(long double complex z);
18590       double complex casinh(double complex z);
18591       float complex casinhf(float complex z);
18592       long double complex casinhl(long double complex z);
18593
18594 [<a name="#p470" href="p470">page 470</a>] (<a href="#Contents">Contents</a>)
18595
18596         double complex catanh(double complex z);
18597         float complex catanhf(float complex z);
18598         long double complex catanhl(long double complex z);
18599         double complex ccosh(double complex z);
18600         float complex ccoshf(float complex z);
18601         long double complex ccoshl(long double complex z);
18602         double complex csinh(double complex z);
18603         float complex csinhf(float complex z);
18604         long double complex csinhl(long double complex z);
18605         double complex ctanh(double complex z);
18606         float complex ctanhf(float complex z);
18607         long double complex ctanhl(long double complex z);
18608         double complex cexp(double complex z);
18609         float complex cexpf(float complex z);
18610         long double complex cexpl(long double complex z);
18611         double complex clog(double complex z);
18612         float complex clogf(float complex z);
18613         long double complex clogl(long double complex z);
18614         double cabs(double complex z);
18615         float cabsf(float complex z);
18616         long double cabsl(long double complex z);
18617         double complex cpow(double complex x, double complex y);
18618         float complex cpowf(float complex x, float complex y);
18619         long double complex cpowl(long double complex x,
18620              long double complex y);
18621         double complex csqrt(double complex z);
18622         float complex csqrtf(float complex z);
18623         long double complex csqrtl(long double complex z);
18624         double carg(double complex z);
18625         float cargf(float complex z);
18626         long double cargl(long double complex z);
18627         double cimag(double complex z);
18628         float cimagf(float complex z);
18629         long double cimagl(long double complex z);
18630         double complex CMPLX(double x, double y);
18631         float complex CMPLXF(float x, float y);
18632         long double complex CMPLXL(long double x, long double y);
18633         double complex conj(double complex z);
18634         float complex conjf(float complex z);
18635         long double complex conjl(long double complex z);
18636         double complex cproj(double complex z);
18637
18638 [<a name="#p471" href="p471">page 471</a>] (<a href="#Contents">Contents</a>)
18639
18640       float complex cprojf(float complex z);
18641       long double complex cprojl(long double complex z);
18642       double creal(double complex z);
18643       float crealf(float complex z);
18644       long double creall(long double complex z);
18645 <a name="B.3" href="#B.3"><b>B.3 Character handling &lt;ctype.h&gt;</b></a>
18646       int   isalnum(int c);
18647       int   isalpha(int c);
18648       int   isblank(int c);
18649       int   iscntrl(int c);
18650       int   isdigit(int c);
18651       int   isgraph(int c);
18652       int   islower(int c);
18653       int   isprint(int c);
18654       int   ispunct(int c);
18655       int   isspace(int c);
18656       int   isupper(int c);
18657       int   isxdigit(int c);
18658       int   tolower(int c);
18659       int   toupper(int c);
18660 <a name="B.4" href="#B.4"><b>B.4 Errors &lt;errno.h&gt;</b></a>
18661       EDOM            EILSEQ            ERANGE           errno
18662       __STDC_WANT_LIB_EXT1__
18663       errno_t
18664 <a name="B.5" href="#B.5"><b>B.5 Floating-point environment &lt;fenv.h&gt;</b></a>
18665       fenv_t                FE_OVERFLOW              FE_TOWARDZERO
18666       fexcept_t             FE_UNDERFLOW             FE_UPWARD
18667       FE_DIVBYZERO          FE_ALL_EXCEPT            FE_DFL_ENV
18668       FE_INEXACT            FE_DOWNWARD
18669       FE_INVALID            FE_TONEAREST
18670       #pragma STDC FENV_ACCESS on-off-switch
18671       int feclearexcept(int excepts);
18672       int fegetexceptflag(fexcept_t *flagp, int excepts);
18673       int feraiseexcept(int excepts);
18674       int fesetexceptflag(const fexcept_t *flagp,
18675            int excepts);
18676       int fetestexcept(int excepts);
18677
18678 [<a name="#p472" href="p472">page 472</a>] (<a href="#Contents">Contents</a>)
18679
18680         int   fegetround(void);
18681         int   fesetround(int round);
18682         int   fegetenv(fenv_t *envp);
18683         int   feholdexcept(fenv_t *envp);
18684         int   fesetenv(const fenv_t *envp);
18685         int   feupdateenv(const fenv_t *envp);
18686 <a name="B.6" href="#B.6"><b>B.6 Characteristics of floating types &lt;float.h&gt;</b></a>
18687         FLT_ROUNDS            DBL_DIG                  FLT_MAX
18688         FLT_EVAL_METHOD       LDBL_DIG                 DBL_MAX
18689         FLT_HAS_SUBNORM       FLT_MIN_EXP              LDBL_MAX
18690         DBL_HAS_SUBNORM       DBL_MIN_EXP              FLT_EPSILON
18691         LDBL_HAS_SUBNORM      LDBL_MIN_EXP             DBL_EPSILON
18692         FLT_RADIX             FLT_MIN_10_EXP           LDBL_EPSILON
18693         FLT_MANT_DIG          DBL_MIN_10_EXP           FLT_MIN
18694         DBL_MANT_DIG          LDBL_MIN_10_EXP          DBL_MIN
18695         LDBL_MANT_DIG         FLT_MAX_EXP              LDBL_MIN
18696         FLT_DECIMAL_DIG       DBL_MAX_EXP              FLT_TRUE_MIN
18697         DBL_DECIMAL_DIG       LDBL_MAX_EXP             DBL_TRUE_MIN
18698         LDBL_DECIMAL_DIG      FLT_MAX_10_EXP           LDBL_TRUE_MIN
18699         DECIMAL_DIG           DBL_MAX_10_EXP
18700         FLT_DIG               LDBL_MAX_10_EXP
18701 <a name="B.7" href="#B.7"><b>B.7 Format conversion of integer types &lt;inttypes.h&gt;</b></a>
18702         imaxdiv_t
18703         PRIdN       PRIdLEASTN       PRIdFASTN         PRIdMAX     PRIdPTR
18704         PRIiN       PRIiLEASTN       PRIiFASTN         PRIiMAX     PRIiPTR
18705         PRIoN       PRIoLEASTN       PRIoFASTN         PRIoMAX     PRIoPTR
18706         PRIuN       PRIuLEASTN       PRIuFASTN         PRIuMAX     PRIuPTR
18707         PRIxN       PRIxLEASTN       PRIxFASTN         PRIxMAX     PRIxPTR
18708         PRIXN       PRIXLEASTN       PRIXFASTN         PRIXMAX     PRIXPTR
18709         SCNdN       SCNdLEASTN       SCNdFASTN         SCNdMAX     SCNdPTR
18710         SCNiN       SCNiLEASTN       SCNiFASTN         SCNiMAX     SCNiPTR
18711         SCNoN       SCNoLEASTN       SCNoFASTN         SCNoMAX     SCNoPTR
18712         SCNuN       SCNuLEASTN       SCNuFASTN         SCNuMAX     SCNuPTR
18713         SCNxN       SCNxLEASTN       SCNxFASTN         SCNxMAX     SCNxPTR
18714         intmax_t imaxabs(intmax_t j);
18715         imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
18716         intmax_t strtoimax(const char * restrict nptr,
18717                 char ** restrict endptr, int base);
18718
18719 [<a name="#p473" href="p473">page 473</a>] (<a href="#Contents">Contents</a>)
18720
18721       uintmax_t strtoumax(const char * restrict nptr,
18722               char ** restrict endptr, int base);
18723       intmax_t wcstoimax(const wchar_t * restrict nptr,
18724               wchar_t ** restrict endptr, int base);
18725       uintmax_t wcstoumax(const wchar_t * restrict nptr,
18726               wchar_t ** restrict endptr, int base);
18727 <a name="B.8" href="#B.8"><b>B.8 Alternative spellings &lt;iso646.h&gt;</b></a>
18728       and             bitor             not_eq           xor
18729       and_eq          compl             or               xor_eq
18730       bitand          not               or_eq
18731 <a name="B.9" href="#B.9"><b>B.9 Sizes of integer types &lt;limits.h&gt;</b></a>
18732       CHAR_BIT        CHAR_MAX          INT_MIN          ULONG_MAX
18733       SCHAR_MIN       MB_LEN_MAX        INT_MAX          LLONG_MIN
18734       SCHAR_MAX       SHRT_MIN          UINT_MAX         LLONG_MAX
18735       UCHAR_MAX       SHRT_MAX          LONG_MIN         ULLONG_MAX
18736       CHAR_MIN        USHRT_MAX         LONG_MAX
18737 <a name="B.10" href="#B.10"><b>B.10 Localization &lt;locale.h&gt;</b></a>
18738       struct lconv    LC_ALL            LC_CTYPE         LC_NUMERIC
18739       NULL            LC_COLLATE        LC_MONETARY      LC_TIME
18740       char *setlocale(int category, const char *locale);
18741       struct lconv *localeconv(void);
18742 <a name="B.11" href="#B.11"><b>B.11 Mathematics &lt;math.h&gt;</b></a>
18743       float_t               FP_INFINITE              FP_FAST_FMAL
18744       double_t              FP_NAN                   FP_ILOGB0
18745       HUGE_VAL              FP_NORMAL                FP_ILOGBNAN
18746       HUGE_VALF             FP_SUBNORMAL             MATH_ERRNO
18747       HUGE_VALL             FP_ZERO                  MATH_ERREXCEPT
18748       INFINITY              FP_FAST_FMA              math_errhandling
18749       NAN                   FP_FAST_FMAF
18750       #pragma STDC FP_CONTRACT on-off-switch
18751       int fpclassify(real-floating x);
18752       int isfinite(real-floating x);
18753       int isinf(real-floating x);
18754       int isnan(real-floating x);
18755       int isnormal(real-floating x);
18756       int signbit(real-floating x);
18757 [<a name="#p474" href="p474">page 474</a>] (<a href="#Contents">Contents</a>)
18758
18759         double acos(double x);
18760         float acosf(float x);
18761         long double acosl(long double x);
18762         double asin(double x);
18763         float asinf(float x);
18764         long double asinl(long double x);
18765         double atan(double x);
18766         float atanf(float x);
18767         long double atanl(long double x);
18768         double atan2(double y, double x);
18769         float atan2f(float y, float x);
18770         long double atan2l(long double y, long double x);
18771         double cos(double x);
18772         float cosf(float x);
18773         long double cosl(long double x);
18774         double sin(double x);
18775         float sinf(float x);
18776         long double sinl(long double x);
18777         double tan(double x);
18778         float tanf(float x);
18779         long double tanl(long double x);
18780         double acosh(double x);
18781         float acoshf(float x);
18782         long double acoshl(long double x);
18783         double asinh(double x);
18784         float asinhf(float x);
18785         long double asinhl(long double x);
18786         double atanh(double x);
18787         float atanhf(float x);
18788         long double atanhl(long double x);
18789         double cosh(double x);
18790         float coshf(float x);
18791         long double coshl(long double x);
18792         double sinh(double x);
18793         float sinhf(float x);
18794         long double sinhl(long double x);
18795         double tanh(double x);
18796         float tanhf(float x);
18797         long double tanhl(long double x);
18798         double exp(double x);
18799         float expf(float x);
18800
18801 [<a name="#p475" href="p475">page 475</a>] (<a href="#Contents">Contents</a>)
18802
18803       long double expl(long double x);
18804       double exp2(double x);
18805       float exp2f(float x);
18806       long double exp2l(long double x);
18807       double expm1(double x);
18808       float expm1f(float x);
18809       long double expm1l(long double x);
18810       double frexp(double value, int *exp);
18811       float frexpf(float value, int *exp);
18812       long double frexpl(long double value, int *exp);
18813       int ilogb(double x);
18814       int ilogbf(float x);
18815       int ilogbl(long double x);
18816       double ldexp(double x, int exp);
18817       float ldexpf(float x, int exp);
18818       long double ldexpl(long double x, int exp);
18819       double log(double x);
18820       float logf(float x);
18821       long double logl(long double x);
18822       double log10(double x);
18823       float log10f(float x);
18824       long double log10l(long double x);
18825       double log1p(double x);
18826       float log1pf(float x);
18827       long double log1pl(long double x);
18828       double log2(double x);
18829       float log2f(float x);
18830       long double log2l(long double x);
18831       double logb(double x);
18832       float logbf(float x);
18833       long double logbl(long double x);
18834       double modf(double value, double *iptr);
18835       float modff(float value, float *iptr);
18836       long double modfl(long double value, long double *iptr);
18837       double scalbn(double x, int n);
18838       float scalbnf(float x, int n);
18839       long double scalbnl(long double x, int n);
18840       double scalbln(double x, long int n);
18841       float scalblnf(float x, long int n);
18842       long double scalblnl(long double x, long int n);
18843       double cbrt(double x);
18844
18845 [<a name="#p476" href="p476">page 476</a>] (<a href="#Contents">Contents</a>)
18846
18847         float cbrtf(float x);
18848         long double cbrtl(long double x);
18849         double fabs(double x);
18850         float fabsf(float x);
18851         long double fabsl(long double x);
18852         double hypot(double x, double y);
18853         float hypotf(float x, float y);
18854         long double hypotl(long double x, long double y);
18855         double pow(double x, double y);
18856         float powf(float x, float y);
18857         long double powl(long double x, long double y);
18858         double sqrt(double x);
18859         float sqrtf(float x);
18860         long double sqrtl(long double x);
18861         double erf(double x);
18862         float erff(float x);
18863         long double erfl(long double x);
18864         double erfc(double x);
18865         float erfcf(float x);
18866         long double erfcl(long double x);
18867         double lgamma(double x);
18868         float lgammaf(float x);
18869         long double lgammal(long double x);
18870         double tgamma(double x);
18871         float tgammaf(float x);
18872         long double tgammal(long double x);
18873         double ceil(double x);
18874         float ceilf(float x);
18875         long double ceill(long double x);
18876         double floor(double x);
18877         float floorf(float x);
18878         long double floorl(long double x);
18879         double nearbyint(double x);
18880         float nearbyintf(float x);
18881         long double nearbyintl(long double x);
18882         double rint(double x);
18883         float rintf(float x);
18884         long double rintl(long double x);
18885         long int lrint(double x);
18886         long int lrintf(float x);
18887         long int lrintl(long double x);
18888
18889 [<a name="#p477" href="p477">page 477</a>] (<a href="#Contents">Contents</a>)
18890
18891       long long int llrint(double x);
18892       long long int llrintf(float x);
18893       long long int llrintl(long double x);
18894       double round(double x);
18895       float roundf(float x);
18896       long double roundl(long double x);
18897       long int lround(double x);
18898       long int lroundf(float x);
18899       long int lroundl(long double x);
18900       long long int llround(double x);
18901       long long int llroundf(float x);
18902       long long int llroundl(long double x);
18903       double trunc(double x);
18904       float truncf(float x);
18905       long double truncl(long double x);
18906       double fmod(double x, double y);
18907       float fmodf(float x, float y);
18908       long double fmodl(long double x, long double y);
18909       double remainder(double x, double y);
18910       float remainderf(float x, float y);
18911       long double remainderl(long double x, long double y);
18912       double remquo(double x, double y, int *quo);
18913       float remquof(float x, float y, int *quo);
18914       long double remquol(long double x, long double y,
18915            int *quo);
18916       double copysign(double x, double y);
18917       float copysignf(float x, float y);
18918       long double copysignl(long double x, long double y);
18919       double nan(const char *tagp);
18920       float nanf(const char *tagp);
18921       long double nanl(const char *tagp);
18922       double nextafter(double x, double y);
18923       float nextafterf(float x, float y);
18924       long double nextafterl(long double x, long double y);
18925       double nexttoward(double x, long double y);
18926       float nexttowardf(float x, long double y);
18927       long double nexttowardl(long double x, long double y);
18928       double fdim(double x, double y);
18929       float fdimf(float x, float y);
18930       long double fdiml(long double x, long double y);
18931       double fmax(double x, double y);
18932
18933 [<a name="#p478" href="p478">page 478</a>] (<a href="#Contents">Contents</a>)
18934
18935         float fmaxf(float x, float y);
18936         long double fmaxl(long double x, long double y);
18937         double fmin(double x, double y);
18938         float fminf(float x, float y);
18939         long double fminl(long double x, long double y);
18940         double fma(double x, double y, double z);
18941         float fmaf(float x, float y, float z);
18942         long double fmal(long double x, long double y,
18943              long double z);
18944         int isgreater(real-floating x, real-floating y);
18945         int isgreaterequal(real-floating x, real-floating y);
18946         int isless(real-floating x, real-floating y);
18947         int islessequal(real-floating x, real-floating y);
18948         int islessgreater(real-floating x, real-floating y);
18949         int isunordered(real-floating x, real-floating y);
18950 <a name="B.12" href="#B.12"><b>B.12 Nonlocal jumps &lt;setjmp.h&gt;</b></a>
18951         jmp_buf
18952         int setjmp(jmp_buf env);
18953         _Noreturn void longjmp(jmp_buf env, int val);
18954 <a name="B.13" href="#B.13"><b>B.13 Signal handling &lt;signal.h&gt;</b></a>
18955         sig_atomic_t    SIG_IGN           SIGILL           SIGTERM
18956         SIG_DFL         SIGABRT           SIGINT
18957         SIG_ERR         SIGFPE            SIGSEGV
18958         void (*signal(int sig, void (*func)(int)))(int);
18959         int raise(int sig);
18960
18961
18962
18963
18964 [<a name="#p479" href="p479">page 479</a>] (<a href="#Contents">Contents</a>)
18965
18966 <a name="B.14" href="#B.14"><b>B.14 Alignment &lt;stdalign.h&gt;</b></a>
18967       alignas
18968       __alignas_is_defined
18969 <a name="B.15" href="#B.15"><b>B.15 Variable arguments &lt;stdarg.h&gt;</b></a>
18970       va_list
18971       type va_arg(va_list ap, type);
18972       void va_copy(va_list dest, va_list src);
18973       void va_end(va_list ap);
18974       void va_start(va_list ap, parmN);
18975 <a name="B.16" href="#B.16"><b>B.16 Atomics &lt;stdatomic.h&gt;</b></a>
18976       ATOMIC_CHAR_LOCK_FREE            atomic_uint
18977       ATOMIC_CHAR16_T_LOCK_FREE        atomic_long
18978       ATOMIC_CHAR32_T_LOCK_FREE        atomic_ulong
18979       ATOMIC_WCHAR_T_LOCK_FREE         atomic_llong
18980       ATOMIC_SHORT_LOCK_FREE           atomic_ullong
18981       ATOMIC_INT_LOCK_FREE             atomic_char16_t
18982       ATOMIC_LONG_LOCK_FREE            atomic_char32_t
18983       ATOMIC_LLONG_LOCK_FREE           atomic_wchar_t
18984       ATOMIC_ADDRESS_LOCK_FREE         atomic_int_least8_t
18985       ATOMIC_FLAG_INIT                 atomic_uint_least8_t
18986       memory_order                     atomic_int_least16_t
18987       atomic_flag                      atomic_uint_least16_t
18988       atomic_bool                      atomic_int_least32_t
18989       atomic_address                   atomic_uint_least32_t
18990       memory_order_relaxed             atomic_int_least64_t
18991       memory_order_consume             atomic_uint_least64_t
18992       memory_order_acquire             atomic_int_fast8_t
18993       memory_order_release             atomic_uint_fast8_t
18994       memory_order_acq_rel             atomic_int_fast16_t
18995       memory_order_seq_cst             atomic_uint_fast16_t
18996       atomic_char                      atomic_int_fast32_t
18997       atomic_schar                     atomic_uint_fast32_t
18998       atomic_uchar                     atomic_int_fast64_t
18999       atomic_short                     atomic_uint_fast64_t
19000       atomic_ushort                    atomic_intptr_t
19001       atomic_int                       atomic_uintptr_t
19002
19003
19004
19005 [<a name="#p480" href="p480">page 480</a>] (<a href="#Contents">Contents</a>)
19006
19007         atomic_size_t                   atomic_intmax_t
19008         atomic_ptrdiff_t                atomic_uintmax_t
19009         #define ATOMIC_VAR_INIT(C value)
19010         void atomic_init(volatile A *obj, C value);
19011         type kill_dependency(type y);
19012         void atomic_thread_fence(memory_order order);
19013         void atomic_signal_fence(memory_order order);
19014         _Bool atomic_is_lock_free(atomic_type const volatile *obj);
19015         void atomic_store(volatile A *object, C desired);
19016         void atomic_store_explicit(volatile A *object,
19017               C desired, memory_order order);
19018         C atomic_load(volatile A *object);
19019         C atomic_load_explicit(volatile A *object,
19020               memory_order order);
19021         C atomic_exchange(volatile A *object, C desired);
19022         C atomic_exchange_explicit(volatile A *object,
19023               C desired, memory_order order);
19024         _Bool atomic_compare_exchange_strong(volatile A *object,
19025               C *expected, C desired);
19026         _Bool atomic_compare_exchange_strong_explicit(
19027               volatile A *object, C *expected, C desired,
19028               memory_order success, memory_order failure);
19029         _Bool atomic_compare_exchange_weak(volatile A *object,
19030               C *expected, C desired);
19031         _Bool atomic_compare_exchange_weak_explicit(
19032               volatile A *object, C *expected, C desired,
19033               memory_order success, memory_order failure);
19034         C atomic_fetch_key(volatile A *object, M operand);
19035         C atomic_fetch_key_explicit(volatile A *object,
19036               M operand, memory_order order);
19037         bool atomic_flag_test_and_set(
19038               volatile atomic_flag *object);
19039         bool atomic_flag_test_and_set_explicit(
19040               volatile atomic_flag *object, memory_order order);
19041         void atomic_flag_clear(volatile atomic_flag *object);
19042         void atomic_flag_clear_explicit(
19043               volatile atomic_flag *object, memory_order order);
19044
19045
19046
19047
19048 [<a name="#p481" href="p481">page 481</a>] (<a href="#Contents">Contents</a>)
19049
19050 <a name="B.17" href="#B.17"><b>B.17 Boolean type and values &lt;stdbool.h&gt;</b></a>
19051       bool
19052       true
19053       false
19054       __bool_true_false_are_defined
19055 <a name="B.18" href="#B.18"><b>B.18 Common definitions &lt;stddef.h&gt;</b></a>
19056       ptrdiff_t       max_align_t       NULL
19057       size_t          wchar_t
19058       offsetof(type, member-designator)
19059       __STDC_WANT_LIB_EXT1__
19060       rsize_t
19061 <a name="B.19" href="#B.19"><b>B.19 Integer types &lt;stdint.h&gt;</b></a>
19062       intN_t                INT_LEASTN_MIN           PTRDIFF_MAX
19063       uintN_t               INT_LEASTN_MAX           SIG_ATOMIC_MIN
19064       int_leastN_t          UINT_LEASTN_MAX          SIG_ATOMIC_MAX
19065       uint_leastN_t         INT_FASTN_MIN            SIZE_MAX
19066       int_fastN_t           INT_FASTN_MAX            WCHAR_MIN
19067       uint_fastN_t          UINT_FASTN_MAX           WCHAR_MAX
19068       intptr_t              INTPTR_MIN               WINT_MIN
19069       uintptr_t             INTPTR_MAX               WINT_MAX
19070       intmax_t              UINTPTR_MAX              INTN_C(value)
19071       uintmax_t             INTMAX_MIN               UINTN_C(value)
19072       INTN_MIN              INTMAX_MAX               INTMAX_C(value)
19073       INTN_MAX              UINTMAX_MAX              UINTMAX_C(value)
19074       UINTN_MAX             PTRDIFF_MIN
19075       __STDC_WANT_LIB_EXT1__
19076       RSIZE_MAX
19077
19078
19079
19080
19081 [<a name="#p482" href="p482">page 482</a>] (<a href="#Contents">Contents</a>)
19082
19083 <a name="B.20" href="#B.20"><b>B.20 Input/output &lt;stdio.h&gt;</b></a>
19084         size_t       _IOLBF            FILENAME_MAX     TMP_MAX
19085         FILE         _IONBF            L_tmpnam         stderr
19086         fpos_t       BUFSIZ            SEEK_CUR         stdin
19087         NULL         EOF               SEEK_END         stdout
19088         _IOFBF       FOPEN_MAX         SEEK_SET
19089         int remove(const char *filename);
19090         int rename(const char *old, const char *new);
19091         FILE *tmpfile(void);
19092         char *tmpnam(char *s);
19093         int fclose(FILE *stream);
19094         int fflush(FILE *stream);
19095         FILE *fopen(const char * restrict filename,
19096              const char * restrict mode);
19097         FILE *freopen(const char * restrict filename,
19098              const char * restrict mode,
19099              FILE * restrict stream);
19100         void setbuf(FILE * restrict stream,
19101              char * restrict buf);
19102         int setvbuf(FILE * restrict stream,
19103              char * restrict buf,
19104              int mode, size_t size);
19105         int fprintf(FILE * restrict stream,
19106              const char * restrict format, ...);
19107         int fscanf(FILE * restrict stream,
19108              const char * restrict format, ...);
19109         int printf(const char * restrict format, ...);
19110         int scanf(const char * restrict format, ...);
19111         int snprintf(char * restrict s, size_t n,
19112              const char * restrict format, ...);
19113         int sprintf(char * restrict s,
19114              const char * restrict format, ...);
19115         int sscanf(const char * restrict s,
19116              const char * restrict format, ...);
19117         int vfprintf(FILE * restrict stream,
19118              const char * restrict format, va_list arg);
19119         int vfscanf(FILE * restrict stream,
19120              const char * restrict format, va_list arg);
19121         int vprintf(const char * restrict format, va_list arg);
19122         int vscanf(const char * restrict format, va_list arg);
19123
19124 [<a name="#p483" href="p483">page 483</a>] (<a href="#Contents">Contents</a>)
19125
19126       int vsnprintf(char * restrict s, size_t n,
19127            const char * restrict format, va_list arg);
19128       int vsprintf(char * restrict s,
19129            const char * restrict format, va_list arg);
19130       int vsscanf(const char * restrict s,
19131            const char * restrict format, va_list arg);
19132       int fgetc(FILE *stream);
19133       char *fgets(char * restrict s, int n,
19134            FILE * restrict stream);
19135       int fputc(int c, FILE *stream);
19136       int fputs(const char * restrict s,
19137            FILE * restrict stream);
19138       int getc(FILE *stream);
19139       int getchar(void);
19140       int putc(int c, FILE *stream);
19141       int putchar(int c);
19142       int puts(const char *s);
19143       int ungetc(int c, FILE *stream);
19144       size_t fread(void * restrict ptr,
19145            size_t size, size_t nmemb,
19146            FILE * restrict stream);
19147       size_t fwrite(const void * restrict ptr,
19148            size_t size, size_t nmemb,
19149            FILE * restrict stream);
19150       int fgetpos(FILE * restrict stream,
19151            fpos_t * restrict pos);
19152       int fseek(FILE *stream, long int offset, int whence);
19153       int fsetpos(FILE *stream, const fpos_t *pos);
19154       long int ftell(FILE *stream);
19155       void rewind(FILE *stream);
19156       void clearerr(FILE *stream);
19157       int feof(FILE *stream);
19158       int ferror(FILE *stream);
19159       void perror(const char *s);
19160       __STDC_WANT_LIB_EXT1__
19161       L_tmpnam_s    TMP_MAX_S          errno_t          rsize_t
19162       errno_t tmpfile_s(FILE * restrict * restrict streamptr);
19163       errno_t tmpnam_s(char *s, rsize_t maxsize);
19164
19165
19166
19167 [<a name="#p484" href="p484">page 484</a>] (<a href="#Contents">Contents</a>)
19168
19169         errno_t fopen_s(FILE * restrict * restrict streamptr,
19170              const char * restrict filename,
19171              const char * restrict mode);
19172         errno_t freopen_s(FILE * restrict * restrict newstreamptr,
19173              const char * restrict filename,
19174              const char * restrict mode,
19175              FILE * restrict stream);
19176         int fprintf_s(FILE * restrict stream,
19177              const char * restrict format, ...);
19178         int fscanf_s(FILE * restrict stream,
19179              const char * restrict format, ...);
19180         int printf_s(const char * restrict format, ...);
19181         int scanf_s(const char * restrict format, ...);
19182         int snprintf_s(char * restrict s, rsize_t n,
19183              const char * restrict format, ...);
19184         int sprintf_s(char * restrict s, rsize_t n,
19185              const char * restrict format, ...);
19186         int sscanf_s(const char * restrict s,
19187              const char * restrict format, ...);
19188         int vfprintf_s(FILE * restrict stream,
19189              const char * restrict format,
19190              va_list arg);
19191         int vfscanf_s(FILE * restrict stream,
19192              const char * restrict format,
19193              va_list arg);
19194         int vprintf_s(const char * restrict format,
19195              va_list arg);
19196         int vscanf_s(const char * restrict format,
19197              va_list arg);
19198         int vsnprintf_s(char * restrict s, rsize_t n,
19199              const char * restrict format,
19200              va_list arg);
19201         int vsprintf_s(char * restrict s, rsize_t n,
19202              const char * restrict format,
19203              va_list arg);
19204         int vsscanf_s(const char * restrict s,
19205              const char * restrict format,
19206              va_list arg);
19207         char *gets_s(char *s, rsize_t n);
19208
19209
19210
19211 [<a name="#p485" href="p485">page 485</a>] (<a href="#Contents">Contents</a>)
19212
19213 <a name="B.21" href="#B.21"><b>B.21 General utilities &lt;stdlib.h&gt;</b></a>
19214       size_t         ldiv_t            EXIT_FAILURE     MB_CUR_MAX
19215       wchar_t        lldiv_t           EXIT_SUCCESS
19216       div_t          NULL              RAND_MAX
19217       double atof(const char *nptr);
19218       int atoi(const char *nptr);
19219       long int atol(const char *nptr);
19220       long long int atoll(const char *nptr);
19221       double strtod(const char * restrict nptr,
19222            char ** restrict endptr);
19223       float strtof(const char * restrict nptr,
19224            char ** restrict endptr);
19225       long double strtold(const char * restrict nptr,
19226            char ** restrict endptr);
19227       long int strtol(const char * restrict nptr,
19228            char ** restrict endptr, int base);
19229       long long int strtoll(const char * restrict nptr,
19230            char ** restrict endptr, int base);
19231       unsigned long int strtoul(
19232            const char * restrict nptr,
19233            char ** restrict endptr, int base);
19234       unsigned long long int strtoull(
19235            const char * restrict nptr,
19236            char ** restrict endptr, int base);
19237       int rand(void);
19238       void srand(unsigned int seed);
19239       void *aligned_alloc(size_t alignment, size_t size);
19240       void *calloc(size_t nmemb, size_t size);
19241       void free(void *ptr);
19242       void *malloc(size_t size);
19243       void *realloc(void *ptr, size_t size);
19244       _Noreturn void abort(void);
19245       int atexit(void (*func)(void));
19246       int at_quick_exit(void (*func)(void));
19247       _Noreturn void exit(int status);
19248       _Noreturn void _Exit(int status);
19249       char *getenv(const char *name);
19250       _Noreturn void quick_exit(int status);
19251       int system(const char *string);
19252
19253
19254 [<a name="#p486" href="p486">page 486</a>] (<a href="#Contents">Contents</a>)
19255
19256         void *bsearch(const void *key, const void *base,
19257              size_t nmemb, size_t size,
19258              int (*compar)(const void *, const void *));
19259         void qsort(void *base, size_t nmemb, size_t size,
19260              int (*compar)(const void *, const void *));
19261         int abs(int j);
19262         long int labs(long int j);
19263         long long int llabs(long long int j);
19264         div_t div(int numer, int denom);
19265         ldiv_t ldiv(long int numer, long int denom);
19266         lldiv_t lldiv(long long int numer,
19267              long long int denom);
19268         int mblen(const char *s, size_t n);
19269         int mbtowc(wchar_t * restrict pwc,
19270              const char * restrict s, size_t n);
19271         int wctomb(char *s, wchar_t wchar);
19272         size_t mbstowcs(wchar_t * restrict pwcs,
19273              const char * restrict s, size_t n);
19274         size_t wcstombs(char * restrict s,
19275              const wchar_t * restrict pwcs, size_t n);
19276         __STDC_WANT_LIB_EXT1__
19277         errno_t
19278         rsize_t
19279         constraint_handler_t
19280         constraint_handler_t set_constraint_handler_s(
19281              constraint_handler_t handler);
19282         void abort_handler_s(
19283              const char * restrict msg,
19284              void * restrict ptr,
19285              errno_t error);
19286         void ignore_handler_s(
19287              const char * restrict msg,
19288              void * restrict ptr,
19289              errno_t error);
19290         errno_t getenv_s(size_t * restrict len,
19291                   char * restrict value, rsize_t maxsize,
19292                   const char * restrict name);
19293
19294
19295
19296
19297 [<a name="#p487" href="p487">page 487</a>] (<a href="#Contents">Contents</a>)
19298
19299       void *bsearch_s(const void *key, const void *base,
19300            rsize_t nmemb, rsize_t size,
19301            int (*compar)(const void *k, const void *y,
19302                            void *context),
19303            void *context);
19304       errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size,
19305            int (*compar)(const void *x, const void *y,
19306                            void *context),
19307            void *context);
19308       errno_t wctomb_s(int * restrict status,
19309            char * restrict s,
19310            rsize_t smax,
19311            wchar_t wc);
19312       errno_t mbstowcs_s(size_t * restrict retval,
19313            wchar_t * restrict dst, rsize_t dstmax,
19314            const char * restrict src, rsize_t len);
19315       errno_t wcstombs_s(size_t * restrict retval,
19316            char * restrict dst, rsize_t dstmax,
19317            const wchar_t * restrict src, rsize_t len);
19318 <a name="B.22" href="#B.22"><b>B.22 String handling &lt;string.h&gt;</b></a>
19319       size_t
19320       NULL
19321       void *memcpy(void * restrict s1,
19322            const void * restrict s2, size_t n);
19323       void *memmove(void *s1, const void *s2, size_t n);
19324       char *strcpy(char * restrict s1,
19325            const char * restrict s2);
19326       char *strncpy(char * restrict s1,
19327            const char * restrict s2, size_t n);
19328       char *strcat(char * restrict s1,
19329            const char * restrict s2);
19330       char *strncat(char * restrict s1,
19331            const char * restrict s2, size_t n);
19332       int memcmp(const void *s1, const void *s2, size_t n);
19333       int strcmp(const char *s1, const char *s2);
19334       int strcoll(const char *s1, const char *s2);
19335       int strncmp(const char *s1, const char *s2, size_t n);
19336       size_t strxfrm(char * restrict s1,
19337            const char * restrict s2, size_t n);
19338       void *memchr(const void *s, int c, size_t n);
19339 [<a name="#p488" href="p488">page 488</a>] (<a href="#Contents">Contents</a>)
19340
19341         char *strchr(const char *s, int c);
19342         size_t strcspn(const char *s1, const char *s2);
19343         char *strpbrk(const char *s1, const char *s2);
19344         char *strrchr(const char *s, int c);
19345         size_t strspn(const char *s1, const char *s2);
19346         char *strstr(const char *s1, const char *s2);
19347         char *strtok(char * restrict s1,
19348              const char * restrict s2);
19349         void *memset(void *s, int c, size_t n);
19350         char *strerror(int errnum);
19351         size_t strlen(const char *s);
19352         __STDC_WANT_LIB_EXT1__
19353         errno_t
19354         rsize_t
19355         errno_t memcpy_s(void * restrict s1, rsize_t s1max,
19356              const void * restrict s2, rsize_t n);
19357         errno_t memmove_s(void *s1, rsize_t s1max,
19358              const void *s2, rsize_t n);
19359         errno_t strcpy_s(char * restrict s1,
19360              rsize_t s1max,
19361              const char * restrict s2);
19362         errno_t strncpy_s(char * restrict s1,
19363              rsize_t s1max,
19364              const char * restrict s2,
19365              rsize_t n);
19366         errno_t strcat_s(char * restrict s1,
19367              rsize_t s1max,
19368              const char * restrict s2);
19369         errno_t strncat_s(char * restrict s1,
19370              rsize_t s1max,
19371              const char * restrict s2,
19372              rsize_t n);
19373         char *strtok_s(char * restrict s1,
19374              rsize_t * restrict s1max,
19375              const char * restrict s2,
19376              char ** restrict ptr);
19377         errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n)
19378         errno_t strerror_s(char *s, rsize_t maxsize,
19379              errno_t errnum);
19380         size_t strerrorlen_s(errno_t errnum);
19381
19382 [<a name="#p489" href="p489">page 489</a>] (<a href="#Contents">Contents</a>)
19383
19384       size_t strnlen_s(const char *s, size_t maxsize);
19385 <a name="B.23" href="#B.23"><b>B.23 Type-generic math &lt;tgmath.h&gt;</b></a>
19386       acos           sqrt              fmod             nextafter
19387       asin           fabs              frexp            nexttoward
19388       atan           atan2             hypot            remainder
19389       acosh          cbrt              ilogb            remquo
19390       asinh          ceil              ldexp            rint
19391       atanh          copysign          lgamma           round
19392       cos            erf               llrint           scalbn
19393       sin            erfc              llround          scalbln
19394       tan            exp2              log10            tgamma
19395       cosh           expm1             log1p            trunc
19396       sinh           fdim              log2             carg
19397       tanh           floor             logb             cimag
19398       exp            fma               lrint            conj
19399       log            fmax              lround           cproj
19400       pow            fmin              nearbyint        creal
19401 <a name="B.24" href="#B.24"><b>B.24 Threads &lt;threads.h&gt;</b></a>
19402       ONCE_FLAG_INIT                   mtx_plain
19403       TSS_DTOR_ITERATIONS              mtx_recursive
19404       cnd_t                            mtx_timed
19405       thrd_t                           mtx_try
19406       tss_t                            thrd_timeout
19407       mtx_t                            thrd_success
19408       tss_dtor_t                       thrd_busy
19409       thrd_start_t                     thrd_error
19410       once_flag                        thrd_nomem
19411       xtime
19412       void call_once(once_flag *flag, void (*func)(void));
19413       int cnd_broadcast(cnd_t *cond);
19414       void cnd_destroy(cnd_t *cond);
19415       int cnd_init(cnd_t *cond);
19416       int cnd_signal(cnd_t *cond);
19417       int cnd_timedwait(cnd_t *cond, mtx_t *mtx,
19418            const xtime *xt);
19419       int cnd_wait(cnd_t *cond, mtx_t *mtx);
19420       void mtx_destroy(mtx_t *mtx);
19421       int mtx_init(mtx_t *mtx, int type);
19422       int mtx_lock(mtx_t *mtx);
19423 [<a name="#p490" href="p490">page 490</a>] (<a href="#Contents">Contents</a>)
19424
19425         int mtx_timedlock(mtx_t *mtx, const xtime *xt);
19426         int mtx_trylock(mtx_t *mtx);
19427         int mtx_unlock(mtx_t *mtx);
19428         int thrd_create(thrd_t *thr, thrd_start_t func,
19429              void *arg);
19430         thrd_t thrd_current(void);
19431         int thrd_detach(thrd_t thr);
19432         int thrd_equal(thrd_t thr0, thrd_t thr1);
19433         void thrd_exit(int res);
19434         int thrd_join(thrd_t thr, int *res);
19435         void thrd_sleep(const xtime *xt);
19436         void thrd_yield(void);
19437         int tss_create(tss_t *key, tss_dtor_t dtor);
19438         void tss_delete(tss_t key);
19439         void *tss_get(tss_t key);
19440         int tss_set(tss_t key, void *val);
19441         int xtime_get(xtime *xt, int base);
19442 <a name="B.25" href="#B.25"><b>B.25 Date and time &lt;time.h&gt;</b></a>
19443         NULL                size_t                   time_t
19444         CLOCKS_PER_SEC      clock_t                  struct tm
19445         clock_t clock(void);
19446         double difftime(time_t time1, time_t time0);
19447         time_t mktime(struct tm *timeptr);
19448         time_t time(time_t *timer);
19449         char *asctime(const struct tm *timeptr);
19450         char *ctime(const time_t *timer);
19451         struct tm *gmtime(const time_t *timer);
19452         struct tm *localtime(const time_t *timer);
19453         size_t strftime(char * restrict s,
19454              size_t maxsize,
19455              const char * restrict format,
19456              const struct tm * restrict timeptr);
19457         __STDC_WANT_LIB_EXT1__
19458         errno_t
19459         rsize_t
19460         errno_t asctime_s(char *s, rsize_t maxsize,
19461              const struct tm *timeptr);
19462
19463
19464
19465 [<a name="#p491" href="p491">page 491</a>] (<a href="#Contents">Contents</a>)
19466
19467       errno_t ctime_s(char *s, rsize_t maxsize,
19468            const time_t *timer);
19469       struct tm *gmtime_s(const time_t * restrict timer,
19470            struct tm * restrict result);
19471       struct tm *localtime_s(const time_t * restrict timer,
19472            struct tm * restrict result);
19473 <a name="B.26" href="#B.26"><b>B.26 Unicode utilities &lt;uchar.h&gt;</b></a>
19474       mbstate_t      size_t            char16_t         char32_t
19475       size_t mbrtoc16(char16_t * restrict pc16,
19476            const char * restrict s, size_t n,
19477            mbstate_t * restrict ps);
19478       size_t c16rtomb(char * restrict s, char16_t c16,
19479            mbstate_t * restrict ps);
19480       size_t mbrtoc32(char32_t * restrict pc32,
19481            const char * restrict s, size_t n,
19482            mbstate_t * restrict ps);
19483       size_t c32rtomb(char * restrict s, char32_t c32,
19484            mbstate_t * restrict ps);
19485 <a name="B.27" href="#B.27"><b>B.27 Extended multibyte/wide character utilities &lt;wchar.h&gt;</b></a>
19486       wchar_t              wint_t                   WCHAR_MAX
19487       size_t               struct tm                WCHAR_MIN
19488       mbstate_t            NULL                     WEOF
19489       int fwprintf(FILE * restrict stream,
19490            const wchar_t * restrict format, ...);
19491       int fwscanf(FILE * restrict stream,
19492            const wchar_t * restrict format, ...);
19493       int swprintf(wchar_t * restrict s, size_t n,
19494            const wchar_t * restrict format, ...);
19495       int swscanf(const wchar_t * restrict s,
19496            const wchar_t * restrict format, ...);
19497       int vfwprintf(FILE * restrict stream,
19498            const wchar_t * restrict format, va_list arg);
19499       int vfwscanf(FILE * restrict stream,
19500            const wchar_t * restrict format, va_list arg);
19501       int vswprintf(wchar_t * restrict s, size_t n,
19502            const wchar_t * restrict format, va_list arg);
19503
19504
19505
19506 [<a name="#p492" href="p492">page 492</a>] (<a href="#Contents">Contents</a>)
19507
19508         int vswscanf(const wchar_t * restrict s,
19509              const wchar_t * restrict format, va_list arg);
19510         int vwprintf(const wchar_t * restrict format,
19511              va_list arg);
19512         int vwscanf(const wchar_t * restrict format,
19513              va_list arg);
19514         int wprintf(const wchar_t * restrict format, ...);
19515         int wscanf(const wchar_t * restrict format, ...);
19516         wint_t fgetwc(FILE *stream);
19517         wchar_t *fgetws(wchar_t * restrict s, int n,
19518              FILE * restrict stream);
19519         wint_t fputwc(wchar_t c, FILE *stream);
19520         int fputws(const wchar_t * restrict s,
19521              FILE * restrict stream);
19522         int fwide(FILE *stream, int mode);
19523         wint_t getwc(FILE *stream);
19524         wint_t getwchar(void);
19525         wint_t putwc(wchar_t c, FILE *stream);
19526         wint_t putwchar(wchar_t c);
19527         wint_t ungetwc(wint_t c, FILE *stream);
19528         double wcstod(const wchar_t * restrict nptr,
19529              wchar_t ** restrict endptr);
19530         float wcstof(const wchar_t * restrict nptr,
19531              wchar_t ** restrict endptr);
19532         long double wcstold(const wchar_t * restrict nptr,
19533              wchar_t ** restrict endptr);
19534         long int wcstol(const wchar_t * restrict nptr,
19535              wchar_t ** restrict endptr, int base);
19536         long long int wcstoll(const wchar_t * restrict nptr,
19537              wchar_t ** restrict endptr, int base);
19538         unsigned long int wcstoul(const wchar_t * restrict nptr,
19539              wchar_t ** restrict endptr, int base);
19540         unsigned long long int wcstoull(
19541              const wchar_t * restrict nptr,
19542              wchar_t ** restrict endptr, int base);
19543         wchar_t *wcscpy(wchar_t * restrict s1,
19544              const wchar_t * restrict s2);
19545         wchar_t *wcsncpy(wchar_t * restrict s1,
19546              const wchar_t * restrict s2, size_t n);
19547
19548
19549
19550 [<a name="#p493" href="p493">page 493</a>] (<a href="#Contents">Contents</a>)
19551
19552       wchar_t *wmemcpy(wchar_t * restrict s1,
19553            const wchar_t * restrict s2, size_t n);
19554       wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2,
19555            size_t n);
19556       wchar_t *wcscat(wchar_t * restrict s1,
19557            const wchar_t * restrict s2);
19558       wchar_t *wcsncat(wchar_t * restrict s1,
19559            const wchar_t * restrict s2, size_t n);
19560       int wcscmp(const wchar_t *s1, const wchar_t *s2);
19561       int wcscoll(const wchar_t *s1, const wchar_t *s2);
19562       int wcsncmp(const wchar_t *s1, const wchar_t *s2,
19563            size_t n);
19564       size_t wcsxfrm(wchar_t * restrict s1,
19565            const wchar_t * restrict s2, size_t n);
19566       int wmemcmp(const wchar_t *s1, const wchar_t *s2,
19567            size_t n);
19568       wchar_t *wcschr(const wchar_t *s, wchar_t c);
19569       size_t wcscspn(const wchar_t *s1, const wchar_t *s2);
19570       wchar_t *wcspbrk(const wchar_t *s1, const wchar_t *s2);
19571       wchar_t *wcsrchr(const wchar_t *s, wchar_t c);
19572       size_t wcsspn(const wchar_t *s1, const wchar_t *s2);
19573       wchar_t *wcsstr(const wchar_t *s1, const wchar_t *s2);
19574       wchar_t *wcstok(wchar_t * restrict s1,
19575            const wchar_t * restrict s2,
19576            wchar_t ** restrict ptr);
19577       wchar_t *wmemchr(const wchar_t *s, wchar_t c, size_t n);
19578       size_t wcslen(const wchar_t *s);
19579       wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n);
19580       size_t wcsftime(wchar_t * restrict s, size_t maxsize,
19581            const wchar_t * restrict format,
19582            const struct tm * restrict timeptr);
19583       wint_t btowc(int c);
19584       int wctob(wint_t c);
19585       int mbsinit(const mbstate_t *ps);
19586       size_t mbrlen(const char * restrict s, size_t n,
19587            mbstate_t * restrict ps);
19588       size_t mbrtowc(wchar_t * restrict pwc,
19589            const char * restrict s, size_t n,
19590            mbstate_t * restrict ps);
19591
19592
19593
19594 [<a name="#p494" href="p494">page 494</a>] (<a href="#Contents">Contents</a>)
19595
19596         size_t wcrtomb(char * restrict s, wchar_t wc,
19597              mbstate_t * restrict ps);
19598         size_t mbsrtowcs(wchar_t * restrict dst,
19599              const char ** restrict src, size_t len,
19600              mbstate_t * restrict ps);
19601         size_t wcsrtombs(char * restrict dst,
19602              const wchar_t ** restrict src, size_t len,
19603              mbstate_t * restrict ps);
19604         __STDC_WANT_LIB_EXT1__
19605         errno_t
19606         rsize_t
19607         int fwprintf_s(FILE * restrict stream,
19608              const wchar_t * restrict format, ...);
19609         int fwscanf_s(FILE * restrict stream,
19610              const wchar_t * restrict format, ...);
19611         int snwprintf_s(wchar_t * restrict s,
19612              rsize_t n,
19613              const wchar_t * restrict format, ...);
19614         int swprintf_s(wchar_t * restrict s, rsize_t n,
19615              const wchar_t * restrict format, ...);
19616         int swscanf_s(const wchar_t * restrict s,
19617              const wchar_t * restrict format, ...);
19618         int vfwprintf_s(FILE * restrict stream,
19619              const wchar_t * restrict format,
19620              va_list arg);
19621         int vfwscanf_s(FILE * restrict stream,
19622              const wchar_t * restrict format, va_list arg);
19623         int vsnwprintf_s(wchar_t * restrict s,
19624              rsize_t n,
19625              const wchar_t * restrict format,
19626              va_list arg);
19627         int vswprintf_s(wchar_t * restrict s,
19628              rsize_t n,
19629              const wchar_t * restrict format,
19630              va_list arg);
19631         int vswscanf_s(const wchar_t * restrict s,
19632              const wchar_t * restrict format,
19633              va_list arg);
19634
19635
19636
19637 [<a name="#p495" href="p495">page 495</a>] (<a href="#Contents">Contents</a>)
19638
19639       int vwprintf_s(const wchar_t * restrict format,
19640            va_list arg);
19641       int vwscanf_s(const wchar_t * restrict format,
19642            va_list arg);
19643       int wprintf_s(const wchar_t * restrict format, ...);
19644       int wscanf_s(const wchar_t * restrict format, ...);
19645       errno_t wcscpy_s(wchar_t * restrict s1,
19646            rsize_t s1max,
19647            const wchar_t * restrict s2);
19648       errno_t wcsncpy_s(wchar_t * restrict s1,
19649            rsize_t s1max,
19650            const wchar_t * restrict s2,
19651            rsize_t n);
19652       errno_t wmemcpy_s(wchar_t * restrict s1,
19653            rsize_t s1max,
19654            const wchar_t * restrict s2,
19655            rsize_t n);
19656       errno_t wmemmove_s(wchar_t *s1, rsize_t s1max,
19657            const wchar_t *s2, rsize_t n);
19658       errno_t wcscat_s(wchar_t * restrict s1,
19659            rsize_t s1max,
19660            const wchar_t * restrict s2);
19661       errno_t wcsncat_s(wchar_t * restrict s1,
19662            rsize_t s1max,
19663            const wchar_t * restrict s2,
19664            rsize_t n);
19665       wchar_t *wcstok_s(wchar_t * restrict s1,
19666            rsize_t * restrict s1max,
19667            const wchar_t * restrict s2,
19668            wchar_t ** restrict ptr);
19669       size_t wcsnlen_s(const wchar_t *s, size_t maxsize);
19670       errno_t wcrtomb_s(size_t * restrict retval,
19671            char * restrict s, rsize_t smax,
19672            wchar_t wc, mbstate_t * restrict ps);
19673       errno_t mbsrtowcs_s(size_t * restrict retval,
19674            wchar_t * restrict dst, rsize_t dstmax,
19675            const char ** restrict src, rsize_t len,
19676            mbstate_t * restrict ps);
19677
19678
19679
19680
19681 [<a name="#p496" href="p496">page 496</a>] (<a href="#Contents">Contents</a>)
19682
19683         errno_t wcsrtombs_s(size_t * restrict retval,
19684              char * restrict dst, rsize_t dstmax,
19685              const wchar_t ** restrict src, rsize_t len,
19686              mbstate_t * restrict ps);
19687 <a name="B.28" href="#B.28"><b>B.28 Wide character classification and mapping utilities &lt;wctype.h&gt;</b></a>
19688         wint_t       wctrans_t         wctype_t         WEOF
19689         int iswalnum(wint_t wc);
19690         int iswalpha(wint_t wc);
19691         int iswblank(wint_t wc);
19692         int iswcntrl(wint_t wc);
19693         int iswdigit(wint_t wc);
19694         int iswgraph(wint_t wc);
19695         int iswlower(wint_t wc);
19696         int iswprint(wint_t wc);
19697         int iswpunct(wint_t wc);
19698         int iswspace(wint_t wc);
19699         int iswupper(wint_t wc);
19700         int iswxdigit(wint_t wc);
19701         int iswctype(wint_t wc, wctype_t desc);
19702         wctype_t wctype(const char *property);
19703         wint_t towlower(wint_t wc);
19704         wint_t towupper(wint_t wc);
19705         wint_t towctrans(wint_t wc, wctrans_t desc);
19706         wctrans_t wctrans(const char *property);
19707
19708
19709
19710
19711 [<a name="#p497" href="p497">page 497</a>] (<a href="#Contents">Contents</a>)
19712
19713 <a name="C" href="#C"><b>                                          Annex C</b></a>
19714                                         (informative)
19715                                       Sequence points
19716 1   The following are the sequence points described in <a href="#5.1.2.3">5.1.2.3</a>:
19717     -- Between the evaluations of the function designator and actual arguments in a function
19718       call and the actual call. (<a href="#6.5.2.2">6.5.2.2</a>).
19719     -- Between the evaluations of the first and second operands of the following operators:
19720       logical AND &amp;&amp; (<a href="#6.5.13">6.5.13</a>); logical OR || (<a href="#6.5.14">6.5.14</a>); comma , (<a href="#6.5.17">6.5.17</a>).
19721     -- Between the evaluations of the first operand of the conditional ? : operator and
19722       whichever of the second and third operands is evaluated (<a href="#6.5.15">6.5.15</a>).
19723     -- The end of a full declarator: declarators (<a href="#6.7.6">6.7.6</a>);
19724     -- Between the evaluation of a full expression and the next full expression to be
19725       evaluated. The following are full expressions: an initializer that is not part of a
19726       compound literal (<a href="#6.7.9">6.7.9</a>); the expression in an expression statement (<a href="#6.8.3">6.8.3</a>); the
19727       controlling expression of a selection statement (if or switch) (<a href="#6.8.4">6.8.4</a>); the
19728       controlling expression of a while or do statement (<a href="#6.8.5">6.8.5</a>); each of the (optional)
19729       expressions of a for statement (<a href="#6.8.5.3">6.8.5.3</a>); the (optional) expression in a return
19730       statement (<a href="#6.8.6.4">6.8.6.4</a>).
19731     -- Immediately before a library function returns (<a href="#7.1.4">7.1.4</a>).
19732     -- After the actions associated with each formatted input/output function conversion
19733       specifier (<a href="#7.21.6">7.21.6</a>, <a href="#7.28.2">7.28.2</a>).
19734     -- Immediately before and immediately after each call to a comparison function, and
19735       also between any call to a comparison function and any movement of the objects
19736       passed as arguments to that call (<a href="#7.22.5">7.22.5</a>).
19737
19738
19739
19740
19741 [<a name="#p498" href="p498">page 498</a>] (<a href="#Contents">Contents</a>)
19742
19743 <a name="D" href="#D"><b>                                         Annex D</b></a>
19744                                         (normative)
19745                    Universal character names for identifiers
19746 1   This clause lists the hexadecimal code values that are valid in universal character names
19747     in identifiers.
19748 2   This table is reproduced unchanged from ISO/IEC TR 10176:1998, produced by ISO/IEC
19749     JTC 1/SC 22/WG 20, except for the omission of ranges that are part of the basic character
19750     sets.
19751     Latin:            00AA, 00BA, 00C0-00D6, 00D8-00F6, 00F8-01F5, 01FA-0217,
19752                       0250-02A8, 1E00-1E9B, 1EA0-1EF9, 207F
19753     Greek:            0386, 0388-038A, 038C, 038E-03A1, 03A3-03CE, 03D0-03D6,
19754                       03DA, 03DC, 03DE, 03E0, 03E2-03F3, 1F00-1F15, 1F18-1F1D,
19755                       1F20-1F45, 1F48-1F4D, 1F50-1F57, 1F59, 1F5B, 1F5D,
19756                       1F5F-1F7D, 1F80-1FB4, 1FB6-1FBC, 1FC2-1FC4, 1FC6-1FCC,
19757                       1FD0-1FD3, 1FD6-1FDB, 1FE0-1FEC, 1FF2-1FF4, 1FF6-1FFC
19758     Cyrillic:         0401-040C, 040E-044F, 0451-045C, 045E-0481, 0490-04C4,
19759                       04C7-04C8, 04CB-04CC, 04D0-04EB, 04EE-04F5, 04F8-04F9
19760     Armenian:         0531-0556, 0561-0587
19761     Hebrew:           05B0-05B9,      05BB-05BD,       05BF,   05C1-05C2,      05D0-05EA,
19762                       05F0-05F2
19763     Arabic:           0621-063A, 0640-0652, 0670-06B7, 06BA-06BE, 06C0-06CE,
19764                       06D0-06DC, 06E5-06E8, 06EA-06ED
19765     Devanagari:       0901-0903, 0905-0939, 093E-094D, 0950-0952, 0958-0963
19766     Bengali:          0981-0983, 0985-098C, 098F-0990, 0993-09A8, 09AA-09B0,
19767                       09B2, 09B6-09B9, 09BE-09C4, 09C7-09C8, 09CB-09CD,
19768                       09DC-09DD, 09DF-09E3, 09F0-09F1
19769     Gurmukhi:         0A02, 0A05-0A0A, 0A0F-0A10, 0A13-0A28, 0A2A-0A30,
19770                       0A32-0A33, 0A35-0A36, 0A38-0A39, 0A3E-0A42, 0A47-0A48,
19771                       0A4B-0A4D, 0A59-0A5C, 0A5E, 0A74
19772     Gujarati:         0A81-0A83, 0A85-0A8B, 0A8D, 0A8F-0A91, 0A93-0AA8,
19773                       0AAA-0AB0,    0AB2-0AB3,     0AB5-0AB9, 0ABD-0AC5,
19774                       0AC7-0AC9, 0ACB-0ACD, 0AD0, 0AE0
19775     Oriya:            0B01-0B03, 0B05-0B0C, 0B0F-0B10, 0B13-0B28, 0B2A-0B30,
19776                       0B32-0B33, 0B36-0B39, 0B3E-0B43, 0B47-0B48, 0B4B-0B4D,
19777 [<a name="#p499" href="p499">page 499</a>] (<a href="#Contents">Contents</a>)
19778
19779                 0B5C-0B5D, 0B5F-0B61
19780 Tamil:          0B82-0B83, 0B85-0B8A, 0B8E-0B90, 0B92-0B95, 0B99-0B9A,
19781                 0B9C, 0B9E-0B9F, 0BA3-0BA4, 0BA8-0BAA, 0BAE-0BB5,
19782                 0BB7-0BB9, 0BBE-0BC2, 0BC6-0BC8, 0BCA-0BCD
19783 Telugu:         0C01-0C03, 0C05-0C0C, 0C0E-0C10, 0C12-0C28, 0C2A-0C33,
19784                 0C35-0C39, 0C3E-0C44, 0C46-0C48, 0C4A-0C4D, 0C60-0C61
19785 Kannada:        0C82-0C83, 0C85-0C8C, 0C8E-0C90, 0C92-0CA8, 0CAA-0CB3,
19786                 0CB5-0CB9, 0CBE-0CC4, 0CC6-0CC8, 0CCA-0CCD, 0CDE,
19787                 0CE0-0CE1
19788 Malayalam:      0D02-0D03, 0D05-0D0C, 0D0E-0D10, 0D12-0D28, 0D2A-0D39,
19789                 0D3E-0D43, 0D46-0D48, 0D4A-0D4D, 0D60-0D61
19790 Thai:           0E01-0E3A, 0E40-0E5B
19791 Lao:            0E81-0E82, 0E84, 0E87-0E88, 0E8A, 0E8D, 0E94-0E97,
19792                 0E99-0E9F,   0EA1-0EA3,  0EA5,  0EA7,  0EAA-0EAB,
19793                 0EAD-0EAE, 0EB0-0EB9, 0EBB-0EBD, 0EC0-0EC4, 0EC6,
19794                 0EC8-0ECD, 0EDC-0EDD
19795 Tibetan:        0F00, 0F18-0F19, 0F35, 0F37, 0F39, 0F3E-0F47, 0F49-0F69,
19796                 0F71-0F84, 0F86-0F8B, 0F90-0F95, 0F97, 0F99-0FAD,
19797                 0FB1-0FB7, 0FB9
19798 Georgian:       10A0-10C5, 10D0-10F6
19799 Hiragana:       3041-3093, 309B-309C
19800 Katakana:       30A1-30F6, 30FB-30FC
19801 Bopomofo:       3105-312C
19802 CJK Unified Ideographs: 4E00-9FA5
19803 Hangul:         AC00-D7A3
19804 Digits:         0660-0669, 06F0-06F9, 0966-096F, 09E6-09EF, 0A66-0A6F,
19805                 0AE6-0AEF, 0B66-0B6F, 0BE7-0BEF, 0C66-0C6F, 0CE6-0CEF,
19806                 0D66-0D6F, 0E50-0E59, 0ED0-0ED9, 0F20-0F33
19807 Special characters: 00B5, 00B7, 02B0-02B8, 02BB, 02BD-02C1, 02D0-02D1,
19808                    02E0-02E4, 037A, 0559, 093D, 0B3D, 1FBE, 203F-2040, 2102,
19809                    2107, 210A-2113, 2115, 2118-211D, 2124, 2126, 2128, 212A-2131,
19810                    2133-2138, 2160-2182, 3005-3007, 3021-3029
19811
19812
19813
19814
19815 [<a name="#p500" href="p500">page 500</a>] (<a href="#Contents">Contents</a>)
19816
19817 <a name="E" href="#E"><b>                                         Annex E</b></a>
19818                                        (informative)
19819                                 Implementation limits
19820 1   The contents of the header <a href="#7.10">&lt;limits.h&gt;</a> are given below, in alphabetical order. The
19821     minimum magnitudes shown shall be replaced by implementation-defined magnitudes
19822     with the same sign. The values shall all be constant expressions suitable for use in #if
19823     preprocessing directives. The components are described further in <a href="#5.2.4.2.1">5.2.4.2.1</a>.
19824             #define    CHAR_BIT                               8
19825             #define    CHAR_MAX          UCHAR_MAX or SCHAR_MAX
19826             #define    CHAR_MIN                  0 or SCHAR_MIN
19827             #define    INT_MAX                           +32767
19828             #define    INT_MIN                           -32767
19829             #define    LONG_MAX                     +2147483647
19830             #define    LONG_MIN                     -2147483647
19831             #define    LLONG_MAX           +9223372036854775807
19832             #define    LLONG_MIN           -9223372036854775807
19833             #define    MB_LEN_MAX                             1
19834             #define    SCHAR_MAX                           +127
19835             #define    SCHAR_MIN                           -127
19836             #define    SHRT_MAX                          +32767
19837             #define    SHRT_MIN                          -32767
19838             #define    UCHAR_MAX                            255
19839             #define    USHRT_MAX                          65535
19840             #define    UINT_MAX                           65535
19841             #define    ULONG_MAX                     4294967295
19842             #define    ULLONG_MAX          18446744073709551615
19843 2   The contents of the header <a href="#7.7">&lt;float.h&gt;</a> are given below. All integer values, except
19844     FLT_ROUNDS, shall be constant expressions suitable for use in #if preprocessing
19845     directives; all floating values shall be constant expressions. The components are
19846     described further in <a href="#5.2.4.2.2">5.2.4.2.2</a>.
19847 3   The values given in the following list shall be replaced by implementation-defined
19848     expressions:
19849             #define FLT_EVAL_METHOD
19850             #define FLT_ROUNDS
19851 4   The values given in the following list shall be replaced by implementation-defined
19852     constant expressions that are greater or equal in magnitude (absolute value) to those
19853     shown, with the same sign:
19854 [<a name="#p501" href="p501">page 501</a>] (<a href="#Contents">Contents</a>)
19855
19856            #define    DLB_DECIMAL_DIG                                10
19857            #define    DBL_DIG                                        10
19858            #define    DBL_MANT_DIG
19859            #define    DBL_MAX_10_EXP                               +37
19860            #define    DBL_MAX_EXP
19861            #define    DBL_MIN_10_EXP                               -37
19862            #define    DBL_MIN_EXP
19863            #define    DECIMAL_DIG                                    10
19864            #define    FLT_DECIMAL_DIG                                 6
19865            #define    FLT_DIG                                         6
19866            #define    FLT_MANT_DIG
19867            #define    FLT_MAX_10_EXP                               +37
19868            #define    FLT_MAX_EXP
19869            #define    FLT_MIN_10_EXP                               -37
19870            #define    FLT_MIN_EXP
19871            #define    FLT_RADIX                                       2
19872            #define    LDLB_DECIMAL_DIG                               10
19873            #define    LDBL_DIG                                       10
19874            #define    LDBL_MANT_DIG
19875            #define    LDBL_MAX_10_EXP                              +37
19876            #define    LDBL_MAX_EXP
19877            #define    LDBL_MIN_10_EXP                              -37
19878            #define    LDBL_MIN_EXP
19879 5   The values given in the following list shall be replaced by implementation-defined
19880     constant expressions with values that are greater than or equal to those shown:
19881            #define DBL_MAX                                      1E+37
19882            #define FLT_MAX                                      1E+37
19883            #define LDBL_MAX                                     1E+37
19884 6   The values given in the following list shall be replaced by implementation-defined
19885     constant expressions with (positive) values that are less than or equal to those shown:
19886            #define    DBL_EPSILON                                1E-9
19887            #define    DBL_MIN                                   1E-37
19888            #define    FLT_EPSILON                                1E-5
19889            #define    FLT_MIN                                   1E-37
19890            #define    LDBL_EPSILON                               1E-9
19891            #define    LDBL_MIN                                  1E-37
19892
19893
19894
19895
19896 [<a name="#p502" href="p502">page 502</a>] (<a href="#Contents">Contents</a>)
19897
19898 <a name="F" href="#F"><b>                                               Annex F</b></a>
19899                                               (normative)
19900                           IEC 60559 floating-point arithmetic
19901 <a name="F.1" href="#F.1"><b>    F.1 Introduction</b></a>
19902 1   This annex specifies C language support for the IEC 60559 floating-point standard. The
19903     IEC 60559 floating-point standard is specifically Binary floating-point arithmetic for
19904     microprocessor systems, second edition (IEC 60559:1989), previously designated
19905     IEC 559:1989 and as IEEE Standard for Binary Floating-Point Arithmetic
19906     (ANSI/IEEE 754-1985). IEEE Standard for Radix-Independent Floating-Point
19907     Arithmetic (ANSI/IEEE 854-1987) generalizes the binary standard to remove
19908     dependencies on radix and word length. IEC 60559 generally refers to the floating-point
19909     standard, as in IEC 60559 operation, IEC 60559 format, etc. An implementation that
19910     defines __STDC_IEC_559__ shall conform to the specifications in this annex.339)
19911     Where a binding between the C language and IEC 60559 is indicated, the
19912     IEC 60559-specified behavior is adopted by reference, unless stated otherwise. Since
19913     negative and positive infinity are representable in IEC 60559 formats, all real numbers lie
19914     within the range of representable values.
19915 <a name="F.2" href="#F.2"><b>    F.2 Types</b></a>
19916 1   The C floating types match the IEC 60559 formats as follows:
19917     -- The float type matches the IEC 60559 single format.
19918     -- The double type matches the IEC 60559 double format.
19919     -- The long double type matches an IEC 60559 extended format,340) else a
19920       non-IEC 60559 extended format, else the IEC 60559 double format.
19921     Any non-IEC 60559 extended format used for the long double type shall have more
19922     precision than IEC 60559 double and at least the range of IEC 60559 double.341)
19923
19924
19925
19926
19927     339) Implementations that do not define __STDC_IEC_559__ are not required to conform to these
19928          specifications.
19929     340) ''Extended'' is IEC 60559's double-extended data format. Extended refers to both the common 80-bit
19930          and quadruple 128-bit IEC 60559 formats.
19931     341) A non-IEC 60559 long double type is required to provide infinity and NaNs, as its values include
19932          all double values.
19933
19934 [<a name="#p503" href="p503">page 503</a>] (<a href="#Contents">Contents</a>)
19935
19936     Recommended practice
19937 2   The long double type should match an IEC 60559 extended format.
19938 <a name="F.2.1" href="#F.2.1"><b>    F.2.1 Infinities, signed zeros, and NaNs</b></a>
19939 1   This specification does not define the behavior of signaling NaNs.342) It generally uses
19940     the term NaN to denote quiet NaNs. The NAN and INFINITY macros and the nan
19941     functions in <a href="#7.12">&lt;math.h&gt;</a> provide designations for IEC 60559 NaNs and infinities.
19942 <a name="F.3" href="#F.3"><b>    F.3 Operators and functions</b></a>
19943 1   C operators and functions provide IEC 60559 required and recommended facilities as
19944     listed below.
19945     -- The +, -, *, and / operators provide the IEC 60559 add, subtract, multiply, and
19946       divide operations.
19947     -- The sqrt functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 square root operation.
19948     -- The remainder functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 remainder
19949       operation. The remquo functions in <a href="#7.12">&lt;math.h&gt;</a> provide the same operation but
19950       with additional information.
19951     -- The rint functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559 operation that rounds a
19952       floating-point number to an integer value (in the same precision). The nearbyint
19953       functions in <a href="#7.12">&lt;math.h&gt;</a> provide the nearbyinteger function recommended in the
19954       Appendix to ANSI/IEEE 854.
19955     -- The conversions for floating types provide the IEC 60559 conversions between
19956       floating-point precisions.
19957     -- The conversions from integer to floating types provide the IEC 60559 conversions
19958       from integer to floating point.
19959     -- The conversions from floating to integer types provide IEC 60559-like conversions
19960       but always round toward zero.
19961     -- The lrint and llrint functions in <a href="#7.12">&lt;math.h&gt;</a> provide the IEC 60559
19962       conversions, which honor the directed rounding mode, from floating point to the
19963       long int and long long int integer formats. The lrint and llrint
19964       functions can be used to implement IEC 60559 conversions from floating to other
19965       integer formats.
19966     -- The translation time conversion of floating constants and the strtod, strtof,
19967       strtold, fprintf, fscanf, and related library functions in <a href="#7.22">&lt;stdlib.h&gt;</a>,
19968
19969
19970     342) Since NaNs created by IEC 60559 operations are always quiet, quiet NaNs (along with infinities) are
19971          sufficient for closure of the arithmetic.
19972
19973 [<a name="#p504" href="p504">page 504</a>] (<a href="#Contents">Contents</a>)
19974
19975    <a href="#7.21">&lt;stdio.h&gt;</a>, and <a href="#7.28">&lt;wchar.h&gt;</a> provide IEC 60559 binary-decimal conversions. The
19976    strtold function in <a href="#7.22">&lt;stdlib.h&gt;</a> provides the conv function recommended in the
19977    Appendix to ANSI/IEEE 854.
19978 -- The relational and equality operators provide IEC 60559 comparisons. IEC 60559
19979   identifies a need for additional comparison predicates to facilitate writing code that
19980   accounts for NaNs. The comparison macros (isgreater, isgreaterequal,
19981   isless, islessequal, islessgreater, and isunordered) in <a href="#7.12">&lt;math.h&gt;</a>
19982   supplement the language operators to address this need. The islessgreater and
19983   isunordered macros provide respectively a quiet version of the &lt;&gt; predicate and
19984   the unordered predicate recommended in the Appendix to IEC 60559.
19985 -- The feclearexcept, feraiseexcept, and fetestexcept functions in
19986   <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility to test and alter the IEC 60559 floating-point
19987   exception status flags. The fegetexceptflag and fesetexceptflag
19988   functions in <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility to save and restore all five status flags at
19989   one time. These functions are used in conjunction with the type fexcept_t and the
19990   floating-point     exception      macros      (FE_INEXACT,         FE_DIVBYZERO,
19991   FE_UNDERFLOW, FE_OVERFLOW, FE_INVALID) also in <a href="#7.6">&lt;fenv.h&gt;</a>.
19992 -- The fegetround and fesetround functions in <a href="#7.6">&lt;fenv.h&gt;</a> provide the facility
19993   to select among the IEC 60559 directed rounding modes represented by the rounding
19994   direction macros in <a href="#7.6">&lt;fenv.h&gt;</a> (FE_TONEAREST, FE_UPWARD, FE_DOWNWARD,
19995   FE_TOWARDZERO) and the values 0, 1, 2, and 3 of FLT_ROUNDS are the
19996   IEC 60559 directed rounding modes.
19997 -- The fegetenv, feholdexcept, fesetenv, and feupdateenv functions in
19998   <a href="#7.6">&lt;fenv.h&gt;</a> provide a facility to manage the floating-point environment, comprising
19999   the IEC 60559 status flags and control modes.
20000 -- The copysign functions in <a href="#7.12">&lt;math.h&gt;</a> provide the copysign function
20001   recommended in the Appendix to IEC 60559.
20002 -- The fabs functions in <a href="#7.12">&lt;math.h&gt;</a> provide the abs function recommended in the
20003   Appendix to IEC 60559.
20004 -- The unary minus (-) operator provides the unary minus (-) operation recommended
20005   in the Appendix to IEC 60559.
20006 -- The scalbn and scalbln functions in <a href="#7.12">&lt;math.h&gt;</a> provide the scalb function
20007   recommended in the Appendix to IEC 60559.
20008 -- The logb functions in <a href="#7.12">&lt;math.h&gt;</a> provide the logb function recommended in the
20009   Appendix to IEC 60559, but following the newer specifications in ANSI/IEEE 854.
20010 -- The nextafter and nexttoward functions in <a href="#7.12">&lt;math.h&gt;</a> provide the nextafter
20011   function recommended in the Appendix to IEC 60559 (but with a minor change to
20012
20013 [<a name="#p505" href="p505">page 505</a>] (<a href="#Contents">Contents</a>)
20014
20015         better handle signed zeros).
20016     -- The isfinite macro in <a href="#7.12">&lt;math.h&gt;</a> provides the finite function recommended in
20017       the Appendix to IEC 60559.
20018     -- The isnan macro in <a href="#7.12">&lt;math.h&gt;</a> provides the isnan function recommended in the
20019       Appendix to IEC 60559.
20020     -- The signbit macro and the fpclassify macro in <a href="#7.12">&lt;math.h&gt;</a>, used in
20021       conjunction with the number classification macros (FP_NAN, FP_INFINITE,
20022       FP_NORMAL, FP_SUBNORMAL, FP_ZERO), provide the facility of the class
20023       function recommended in the Appendix to IEC 60559 (except that the classification
20024       macros defined in <a href="#7.12.3">7.12.3</a> do not distinguish signaling from quiet NaNs).
20025 <a name="F.4" href="#F.4"><b>    F.4 Floating to integer conversion</b></a>
20026 1   If the integer type is _Bool, <a href="#6.3.1.2">6.3.1.2</a> applies and no floating-point exceptions are raised
20027     (even for NaN). Otherwise, if the floating value is infinite or NaN or if the integral part
20028     of the floating value exceeds the range of the integer type, then the ''invalid'' floating-
20029     point exception is raised and the resulting value is unspecified. Otherwise, the resulting
20030     value is determined by <a href="#6.3.1.4">6.3.1.4</a>. Conversion of an integral floating value that does not
20031     exceed the range of the integer type raises no floating-point exceptions; whether
20032     conversion of a non-integral floating value raises the ''inexact'' floating-point exception is
20033     unspecified.343)
20034 <a name="F.5" href="#F.5"><b>    F.5 Binary-decimal conversion</b></a>
20035 1   Conversion from the widest supported IEC 60559 format to decimal with
20036     DECIMAL_DIG digits and back is the identity function.344)
20037 2   Conversions involving IEC 60559 formats follow all pertinent recommended practice. In
20038     particular, conversion between any supported IEC 60559 format and decimal with
20039     DECIMAL_DIG or fewer significant digits is correctly rounded (honoring the current
20040     rounding mode), which assures that conversion from the widest supported IEC 60559
20041     format to decimal with DECIMAL_DIG digits and back is the identity function.
20042
20043
20044
20045     343) ANSI/IEEE 854, but not IEC 60559 (ANSI/IEEE 754), directly specifies that floating-to-integer
20046          conversions raise the ''inexact'' floating-point exception for non-integer in-range values. In those
20047          cases where it matters, library functions can be used to effect such conversions with or without raising
20048          the ''inexact'' floating-point exception. See rint, lrint, llrint, and nearbyint in
20049          <a href="#7.12">&lt;math.h&gt;</a>.
20050     344) If the minimum-width IEC 60559 extended format (64 bits of precision) is supported,
20051          DECIMAL_DIG shall be at least 21. If IEC 60559 double (53 bits of precision) is the widest
20052          IEC 60559 format supported, then DECIMAL_DIG shall be at least 17. (By contrast, LDBL_DIG and
20053          DBL_DIG are 18 and 15, respectively, for these formats.)
20054
20055 [<a name="#p506" href="p506">page 506</a>] (<a href="#Contents">Contents</a>)
20056
20057 3   Functions such as strtod that convert character sequences to floating types honor the
20058     rounding direction. Hence, if the rounding direction might be upward or downward, the
20059     implementation cannot convert a minus-signed sequence by negating the converted
20060     unsigned sequence.
20061 <a name="F.6" href="#F.6"><b>    F.6 The return statement</b></a>
20062     If the return expression is evaluated in a floating-point format different from the return
20063     type, the expression is converted to the return type of the function and the resulting value
20064     is returned to the caller.
20065 <a name="F.7" href="#F.7"><b>    F.7 Contracted expressions</b></a>
20066 1   A contracted expression is correctly rounded (once) and treats infinities, NaNs, signed
20067     zeros, subnormals, and the rounding directions in a manner consistent with the basic
20068     arithmetic operations covered by IEC 60559.
20069     Recommended practice
20070 2   A contracted expression should raise floating-point exceptions in a manner generally
20071     consistent with the basic arithmetic operations.
20072 <a name="F.8" href="#F.8"><b>    F.8 Floating-point environment</b></a>
20073 1   The floating-point environment defined in <a href="#7.6">&lt;fenv.h&gt;</a> includes the IEC 60559 floating-
20074     point exception status flags and directed-rounding control modes. It includes also
20075     IEC 60559 dynamic rounding precision and trap enablement modes, if the
20076     implementation supports them.345)
20077 <a name="F.8.1" href="#F.8.1"><b>    F.8.1 Environment management</b></a>
20078 1   IEC 60559 requires that floating-point operations implicitly raise floating-point exception
20079     status flags, and that rounding control modes can be set explicitly to affect result values of
20080     floating-point operations. When the state for the FENV_ACCESS pragma (defined in
20081     <a href="#7.6">&lt;fenv.h&gt;</a>) is ''on'', these changes to the floating-point state are treated as side effects
20082     which respect sequence points.346)
20083
20084
20085
20086
20087     345) This specification does not require dynamic rounding precision nor trap enablement modes.
20088     346) If the state for the FENV_ACCESS pragma is ''off'', the implementation is free to assume the floating-
20089          point control modes will be the default ones and the floating-point status flags will not be tested,
20090          which allows certain optimizations (see <a href="#F.9">F.9</a>).
20091
20092 [<a name="#p507" href="p507">page 507</a>] (<a href="#Contents">Contents</a>)
20093
20094 <a name="F.8.2" href="#F.8.2"><b>    F.8.2 Translation</b></a>
20095 1   During translation the IEC 60559 default modes are in effect:
20096     -- The rounding direction mode is rounding to nearest.
20097     -- The rounding precision mode (if supported) is set so that results are not shortened.
20098     -- Trapping or stopping (if supported) is disabled on all floating-point exceptions.
20099     Recommended practice
20100 2   The implementation should produce a diagnostic message for each translation-time
20101     floating-point exception, other than ''inexact'';347) the implementation should then
20102     proceed with the translation of the program.
20103 <a name="F.8.3" href="#F.8.3"><b>    F.8.3 Execution</b></a>
20104 1   At program startup the floating-point environment is initialized as prescribed by
20105     IEC 60559:
20106     -- All floating-point exception status flags are cleared.
20107     -- The rounding direction mode is rounding to nearest.
20108     -- The dynamic rounding precision mode (if supported) is set so that results are not
20109       shortened.
20110     -- Trapping or stopping (if supported) is disabled on all floating-point exceptions.
20111 <a name="F.8.4" href="#F.8.4"><b>    F.8.4 Constant expressions</b></a>
20112 1   An arithmetic constant expression of floating type, other than one in an initializer for an
20113     object that has static or thread storage duration, is evaluated (as if) during execution; thus,
20114     it is affected by any operative floating-point control modes and raises floating-point
20115     exceptions as required by IEC 60559 (provided the state for the FENV_ACCESS pragma
20116     is ''on'').348)
20117 2   EXAMPLE
20118
20119
20120
20121     347) As floating constants are converted to appropriate internal representations at translation time, their
20122          conversion is subject to default rounding modes and raises no execution-time floating-point exceptions
20123          (even where the state of the FENV_ACCESS pragma is ''on''). Library functions, for example
20124          strtod, provide execution-time conversion of numeric strings.
20125     348) Where the state for the FENV_ACCESS pragma is ''on'', results of inexact expressions like <a href="#1.0">1.0</a>/3.0
20126          are affected by rounding modes set at execution time, and expressions such as 0.0/0.0 and
20127          <a href="#1.0">1.0</a>/0.0 generate execution-time floating-point exceptions. The programmer can achieve the
20128          efficiency of translation-time evaluation through static initialization, such as
20129                   const static double one_third = <a href="#1.0">1.0</a>/3.0;
20130
20131
20132 [<a name="#p508" href="p508">page 508</a>] (<a href="#Contents">Contents</a>)
20133
20134              #include <a href="#7.6">&lt;fenv.h&gt;</a>
20135              #pragma STDC FENV_ACCESS ON
20136              void f(void)
20137              {
20138                    float w[] = { 0.0/0.0 };                  //   raises an exception
20139                    static float x = 0.0/0.0;                 //   does not raise an exception
20140                    float y = 0.0/0.0;                        //   raises an exception
20141                    double z = 0.0/0.0;                       //   raises an exception
20142                    /* ... */
20143              }
20144 3   For the static initialization, the division is done at translation time, raising no (execution-time) floating-
20145     point exceptions. On the other hand, for the three automatic initializations the invalid division occurs at
20146     execution time.
20147
20148 <a name="F.8.5" href="#F.8.5"><b>    F.8.5 Initialization</b></a>
20149 1   All computation for automatic initialization is done (as if) at execution time; thus, it is
20150     affected by any operative modes and raises floating-point exceptions as required by
20151     IEC 60559 (provided the state for the FENV_ACCESS pragma is ''on''). All computation
20152     for initialization of objects that have static or thread storage duration is done (as if) at
20153     translation time.
20154 2   EXAMPLE
20155              #include <a href="#7.6">&lt;fenv.h&gt;</a>
20156              #pragma STDC FENV_ACCESS ON
20157              void f(void)
20158              {
20159                    float u[] = { 1.1e75 };                  //   raises exceptions
20160                    static float v = 1.1e75;                 //   does not raise exceptions
20161                    float w = 1.1e75;                        //   raises exceptions
20162                    double x = 1.1e75;                       //   may raise exceptions
20163                    float y = 1.1e75f;                       //   may raise exceptions
20164                    long double z = 1.1e75;                  //   does not raise exceptions
20165                    /* ... */
20166              }
20167 3   The static initialization of v raises no (execution-time) floating-point exceptions because its computation is
20168     done at translation time. The automatic initialization of u and w require an execution-time conversion to
20169     float of the wider value 1.1e75, which raises floating-point exceptions. The automatic initializations
20170     of x and y entail execution-time conversion; however, in some expression evaluation methods, the
20171     conversions is not to a narrower format, in which case no floating-point exception is raised.349) The
20172     automatic initialization of z entails execution-time conversion, but not to a narrower format, so no floating-
20173     point exception is raised. Note that the conversions of the floating constants 1.1e75 and 1.1e75f to
20174
20175
20176
20177     349) Use of float_t and double_t variables increases the likelihood of translation-time computation.
20178          For example, the automatic initialization
20179                   double_t x = 1.1e75;
20180          could be done at translation time, regardless of the expression evaluation method.
20181
20182 [<a name="#p509" href="p509">page 509</a>] (<a href="#Contents">Contents</a>)
20183
20184     their internal representations occur at translation time in all cases.
20185
20186 <a name="F.8.6" href="#F.8.6"><b>    F.8.6 Changing the environment</b></a>
20187 1   Operations defined in <a href="#6.5">6.5</a> and functions and macros defined for the standard libraries
20188     change floating-point status flags and control modes just as indicated by their
20189     specifications (including conformance to IEC 60559). They do not change flags or modes
20190     (so as to be detectable by the user) in any other cases.
20191 2   If the argument to the feraiseexcept function in <a href="#7.6">&lt;fenv.h&gt;</a> represents IEC 60559
20192     valid coincident floating-point exceptions for atomic operations (namely ''overflow'' and
20193     ''inexact'', or ''underflow'' and ''inexact''), then ''overflow'' or ''underflow'' is raised
20194     before ''inexact''.
20195 <a name="F.9" href="#F.9"><b>    F.9 Optimization</b></a>
20196 1   This section identifies code transformations that might subvert IEC 60559-specified
20197     behavior, and others that do not.
20198 <a name="F.9.1" href="#F.9.1"><b>    F.9.1 Global transformations</b></a>
20199 1   Floating-point arithmetic operations and external function calls may entail side effects
20200     which optimization shall honor, at least where the state of the FENV_ACCESS pragma is
20201     ''on''. The flags and modes in the floating-point environment may be regarded as global
20202     variables; floating-point operations (+, *, etc.) implicitly read the modes and write the
20203     flags.
20204 2   Concern about side effects may inhibit code motion and removal of seemingly useless
20205     code. For example, in
20206              #include <a href="#7.6">&lt;fenv.h&gt;</a>
20207              #pragma STDC FENV_ACCESS ON
20208              void f(double x)
20209              {
20210                   /* ... */
20211                   for (i = 0; i &lt; n; i++) x + 1;
20212                   /* ... */
20213              }
20214     x + 1 might raise floating-point exceptions, so cannot be removed. And since the loop
20215     body might not execute (maybe 0 &gt;= n), x + 1 cannot be moved out of the loop. (Of
20216     course these optimizations are valid if the implementation can rule out the nettlesome
20217     cases.)
20218 3   This specification does not require support for trap handlers that maintain information
20219     about the order or count of floating-point exceptions. Therefore, between function calls,
20220     floating-point exceptions need not be precise: the actual order and number of occurrences
20221     of floating-point exceptions (&gt; 1) may vary from what the source code expresses. Thus,
20222 [<a name="#p510" href="p510">page 510</a>] (<a href="#Contents">Contents</a>)
20223
20224     the preceding loop could be treated as
20225              if (0 &lt; n) x + 1;
20226 <a name="F.9.2" href="#F.9.2"><b>    F.9.2 Expression transformations</b></a>
20227 1   x/2 (&lt;-&gt;) x x 0.5          Although similar transformations involving inexact constants
20228                            generally do not yield numerically equivalent expressions, if the
20229                            constants are exact then such transformations can be made on
20230                            IEC 60559 machines and others that round perfectly.
20231     1 x x and x/1 (-&gt;) x The expressions 1 x x, x/1, and x are equivalent (on IEC 60559
20232                       machines, among others).350)
20233     x/x (-&gt;) <a href="#1.0">1.0</a>             The expressions x/x and <a href="#1.0">1.0</a> are not equivalent if x can be zero,
20234                            infinite, or NaN.
20235     x - y (&lt;-&gt;) x + (-y)       The expressions x - y, x + (-y), and (-y) + x are equivalent (on
20236                            IEC 60559 machines, among others).
20237     x - y (&lt;-&gt;) -(y - x)       The expressions x - y and -(y - x) are not equivalent because 1 - 1
20238                            is +0 but -(1 - 1) is -0 (in the default rounding direction).351)
20239     x - x (-&gt;) 0.0           The expressions x - x and 0.0 are not equivalent if x is a NaN or
20240                            infinite.
20241     0 x x (-&gt;) 0.0           The expressions 0 x x and 0.0 are not equivalent if x is a NaN,
20242                            infinite, or -0.
20243     x+0(-&gt;) x                 The expressions x + 0 and x are not equivalent if x is -0, because
20244                            (-0) + (+0) yields +0 (in the default rounding direction), not -0.
20245     x-0(-&gt;) x                 (+0) - (+0) yields -0 when rounding is downward (toward -(inf)), but
20246                            +0 otherwise, and (-0) - (+0) always yields -0; so, if the state of the
20247                            FENV_ACCESS pragma is ''off'', promising default rounding, then
20248                            the implementation can replace x - 0 by x, even if x might be zero.
20249     -x (&lt;-&gt;) 0 - x             The expressions -x and 0 - x are not equivalent if x is +0, because
20250                            -(+0) yields -0, but 0 - (+0) yields +0 (unless rounding is
20251                            downward).
20252
20253     350) Strict support for signaling NaNs -- not required by this specification -- would invalidate these and
20254          other transformations that remove arithmetic operators.
20255     351) IEC 60559 prescribes a signed zero to preserve mathematical identities across certain discontinuities.
20256          Examples include:
20257             1/(1/ (+-) (inf)) is (+-) (inf)
20258          and
20259             conj(csqrt(z)) is csqrt(conj(z)),
20260          for complex z.
20261
20262 [<a name="#p511" href="p511">page 511</a>] (<a href="#Contents">Contents</a>)
20263
20264 <a name="F.9.3" href="#F.9.3"><b>    F.9.3 Relational operators</b></a>
20265 1   x != x (-&gt;) false           The expression x != x is true if x is a NaN.
20266     x = x (-&gt;) true            The expression x = x is false if x is a NaN.
20267     x &lt; y (-&gt;) isless(x,y) (and similarly for &lt;=, &gt;, &gt;=) Though numerically equal, these
20268                    expressions are not equivalent because of side effects when x or y is a
20269                    NaN and the state of the FENV_ACCESS pragma is ''on''. This
20270                    transformation, which would be desirable if extra code were required
20271                    to cause the ''invalid'' floating-point exception for unordered cases,
20272                    could be performed provided the state of the FENV_ACCESS pragma
20273                    is ''off''.
20274     The sense of relational operators shall be maintained. This includes handling unordered
20275     cases as expressed by the source code.
20276 2   EXAMPLE
20277              // calls g and raises ''invalid'' if a and b are unordered
20278              if (a &lt; b)
20279                      f();
20280              else
20281                      g();
20282     is not equivalent to
20283              // calls f and raises ''invalid'' if a and b are unordered
20284              if (a &gt;= b)
20285                      g();
20286              else
20287                      f();
20288     nor to
20289              // calls f without raising ''invalid'' if a and b are unordered
20290              if (isgreaterequal(a,b))
20291                      g();
20292              else
20293                      f();
20294     nor, unless the state of the FENV_ACCESS pragma is ''off'', to
20295              // calls g without raising ''invalid'' if a and b are unordered
20296              if (isless(a,b))
20297                      f();
20298              else
20299                      g();
20300     but is equivalent to
20301
20302
20303
20304
20305 [<a name="#p512" href="p512">page 512</a>] (<a href="#Contents">Contents</a>)
20306
20307             if (!(a &lt; b))
20308                   g();
20309             else
20310                   f();
20311
20312 <a name="F.9.4" href="#F.9.4"><b>    F.9.4 Constant arithmetic</b></a>
20313 1   The implementation shall honor floating-point exceptions raised by execution-time
20314     constant arithmetic wherever the state of the FENV_ACCESS pragma is ''on''. (See <a href="#F.8.4">F.8.4</a>
20315     and <a href="#F.8.5">F.8.5</a>.) An operation on constants that raises no floating-point exception can be
20316     folded during translation, except, if the state of the FENV_ACCESS pragma is ''on'', a
20317     further check is required to assure that changing the rounding direction to downward does
20318     not alter the sign of the result,352) and implementations that support dynamic rounding
20319     precision modes shall assure further that the result of the operation raises no floating-
20320     point exception when converted to the semantic type of the operation.
20321 <a name="F.10" href="#F.10"><b>    F.10 Mathematics &lt;math.h&gt;</b></a>
20322 1   This subclause contains specifications of <a href="#7.12">&lt;math.h&gt;</a> facilities that are particularly suited
20323     for IEC 60559 implementations.
20324 2   The Standard C macro HUGE_VAL and its float and long double analogs,
20325     HUGE_VALF and HUGE_VALL, expand to expressions whose values are positive
20326     infinities.
20327 3   Special cases for functions in <a href="#7.12">&lt;math.h&gt;</a> are covered directly or indirectly by
20328     IEC 60559. The functions that IEC 60559 specifies directly are identified in <a href="#F.3">F.3</a>. The
20329     other functions in <a href="#7.12">&lt;math.h&gt;</a> treat infinities, NaNs, signed zeros, subnormals, and
20330     (provided the state of the FENV_ACCESS pragma is ''on'') the floating-point status flags
20331     in a manner consistent with the basic arithmetic operations covered by IEC 60559.
20332 4   The expression math_errhandling &amp; MATH_ERREXCEPT shall evaluate to a
20333     nonzero value.
20334 5   The ''invalid'' and ''divide-by-zero'' floating-point exceptions are raised as specified in
20335     subsequent subclauses of this annex.
20336 6   The ''overflow'' floating-point exception is raised whenever an infinity -- or, because of
20337     rounding direction, a maximal-magnitude finite number -- is returned in lieu of a value
20338     whose magnitude is too large.
20339 7   The ''underflow'' floating-point exception is raised whenever a result is tiny (essentially
20340     subnormal or zero) and suffers loss of accuracy.353)
20341
20342
20343     352) 0 - 0 yields -0 instead of +0 just when the rounding direction is downward.
20344     353) IEC 60559 allows different definitions of underflow. They all result in the same values, but differ on
20345          when the floating-point exception is raised.
20346
20347 [<a name="#p513" href="p513">page 513</a>] (<a href="#Contents">Contents</a>)
20348
20349 8    Whether or when library functions raise the ''inexact'' floating-point exception is
20350      unspecified, unless explicitly specified otherwise.
20351 9    Whether or when library functions raise an undeserved ''underflow'' floating-point
20352      exception is unspecified.354) Otherwise, as implied by <a href="#F.8.6">F.8.6</a>, the <a href="#7.12">&lt;math.h&gt;</a> functions do
20353      not raise spurious floating-point exceptions (detectable by the user), other than the
20354      ''inexact'' floating-point exception.
20355 10   Whether the functions honor the rounding direction mode is implementation-defined,
20356      unless explicitly specified otherwise.
20357 11   Functions with a NaN argument return a NaN result and raise no floating-point exception,
20358      except where stated otherwise.
20359 12   The specifications in the following subclauses append to the definitions in <a href="#7.12">&lt;math.h&gt;</a>.
20360      For families of functions, the specifications apply to all of the functions even though only
20361      the principal function is shown. Unless otherwise specified, where the symbol ''(+-)''
20362      occurs in both an argument and the result, the result has the same sign as the argument.
20363      Recommended practice
20364 13   If a function with one or more NaN arguments returns a NaN result, the result should be
20365      the same as one of the NaN arguments (after possible type conversion), except perhaps
20366      for the sign.
20367 <a name="F.10.1" href="#F.10.1"><b>     F.10.1 Trigonometric functions</b></a>
20368 <a name="F.10.1.1" href="#F.10.1.1"><b>     F.10.1.1 The acos functions</b></a>
20369 1    -- acos(1) returns +0.
20370      -- acos(x) returns a NaN and raises the ''invalid'' floating-point exception for
20371        | x | &gt; 1.
20372 <a name="F.10.1.2" href="#F.10.1.2"><b>     F.10.1.2 The asin functions</b></a>
20373 1    -- asin((+-)0) returns (+-)0.
20374      -- asin(x) returns a NaN and raises the ''invalid'' floating-point exception for
20375        | x | &gt; 1.
20376
20377
20378
20379
20380      354) It is intended that undeserved ''underflow'' and ''inexact'' floating-point exceptions are raised only if
20381           avoiding them would be too costly.
20382
20383 [<a name="#p514" href="p514">page 514</a>] (<a href="#Contents">Contents</a>)
20384
20385 <a name="F.10.1.3" href="#F.10.1.3"><b>    F.10.1.3 The atan functions</b></a>
20386 1   -- atan((+-)0) returns (+-)0.
20387     -- atan((+-)(inf)) returns (+-)pi /2.
20388 <a name="F.10.1.4" href="#F.10.1.4"><b>    F.10.1.4 The atan2 functions</b></a>
20389 1   -- atan2((+-)0, -0) returns (+-)pi .355)
20390     -- atan2((+-)0, +0) returns (+-)0.
20391     -- atan2((+-)0, x) returns (+-)pi for x &lt; 0.
20392     -- atan2((+-)0, x) returns (+-)0 for x &gt; 0.
20393     -- atan2(y, (+-)0) returns -pi /2 for y &lt; 0.
20394     -- atan2(y, (+-)0) returns pi /2 for y &gt; 0.
20395     -- atan2((+-)y, -(inf)) returns (+-)pi for finite y &gt; 0.
20396     -- atan2((+-)y, +(inf)) returns (+-)0 for finite y &gt; 0.
20397     -- atan2((+-)(inf), x) returns (+-)pi /2 for finite x.
20398     -- atan2((+-)(inf), -(inf)) returns (+-)3pi /4.
20399     -- atan2((+-)(inf), +(inf)) returns (+-)pi /4.
20400 <a name="F.10.1.5" href="#F.10.1.5"><b>    F.10.1.5 The cos functions</b></a>
20401 1   -- cos((+-)0) returns 1.
20402     -- cos((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
20403 <a name="F.10.1.6" href="#F.10.1.6"><b>    F.10.1.6 The sin functions</b></a>
20404 1   -- sin((+-)0) returns (+-)0.
20405     -- sin((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
20406 <a name="F.10.1.7" href="#F.10.1.7"><b>    F.10.1.7 The tan functions</b></a>
20407 1   -- tan((+-)0) returns (+-)0.
20408     -- tan((+-)(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
20409
20410
20411
20412
20413     355) atan2(0, 0) does not raise the ''invalid'' floating-point exception, nor does atan2( y , 0) raise
20414          the ''divide-by-zero'' floating-point exception.
20415
20416 [<a name="#p515" href="p515">page 515</a>] (<a href="#Contents">Contents</a>)
20417
20418 <a name="F.10.2" href="#F.10.2"><b>    F.10.2 Hyperbolic functions</b></a>
20419 <a name="F.10.2.1" href="#F.10.2.1"><b>    F.10.2.1 The acosh functions</b></a>
20420 1   -- acosh(1) returns +0.
20421     -- acosh(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 1.
20422     -- acosh(+(inf)) returns +(inf).
20423 <a name="F.10.2.2" href="#F.10.2.2"><b>    F.10.2.2 The asinh functions</b></a>
20424 1   -- asinh((+-)0) returns (+-)0.
20425     -- asinh((+-)(inf)) returns (+-)(inf).
20426 <a name="F.10.2.3" href="#F.10.2.3"><b>    F.10.2.3 The atanh functions</b></a>
20427 1   -- atanh((+-)0) returns (+-)0.
20428     -- atanh((+-)1) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception.
20429     -- atanh(x) returns a NaN and raises the ''invalid'' floating-point exception for
20430       | x | &gt; 1.
20431 <a name="F.10.2.4" href="#F.10.2.4"><b>    F.10.2.4 The cosh functions</b></a>
20432 1   -- cosh((+-)0) returns 1.
20433     -- cosh((+-)(inf)) returns +(inf).
20434 <a name="F.10.2.5" href="#F.10.2.5"><b>    F.10.2.5 The sinh functions</b></a>
20435 1   -- sinh((+-)0) returns (+-)0.
20436     -- sinh((+-)(inf)) returns (+-)(inf).
20437 <a name="F.10.2.6" href="#F.10.2.6"><b>    F.10.2.6 The tanh functions</b></a>
20438 1   -- tanh((+-)0) returns (+-)0.
20439     -- tanh((+-)(inf)) returns (+-)1.
20440 <a name="F.10.3" href="#F.10.3"><b>    F.10.3 Exponential and logarithmic functions</b></a>
20441 <a name="F.10.3.1" href="#F.10.3.1"><b>    F.10.3.1 The exp functions</b></a>
20442 1   -- exp((+-)0) returns 1.
20443     -- exp(-(inf)) returns +0.
20444     -- exp(+(inf)) returns +(inf).
20445
20446
20447
20448
20449 [<a name="#p516" href="p516">page 516</a>] (<a href="#Contents">Contents</a>)
20450
20451 <a name="F.10.3.2" href="#F.10.3.2"><b>    F.10.3.2 The exp2 functions</b></a>
20452 1   -- exp2((+-)0) returns 1.
20453     -- exp2(-(inf)) returns +0.
20454     -- exp2(+(inf)) returns +(inf).
20455 <a name="F.10.3.3" href="#F.10.3.3"><b>    F.10.3.3 The expm1 functions</b></a>
20456 1   -- expm1((+-)0) returns (+-)0.
20457     -- expm1(-(inf)) returns -1.
20458     -- expm1(+(inf)) returns +(inf).
20459 <a name="F.10.3.4" href="#F.10.3.4"><b>    F.10.3.4 The frexp functions</b></a>
20460 1   -- frexp((+-)0, exp) returns (+-)0, and stores 0 in the object pointed to by exp.
20461     -- frexp((+-)(inf), exp) returns (+-)(inf), and stores an unspecified value in the object
20462       pointed to by exp.
20463     -- frexp(NaN, exp) stores an unspecified value in the object pointed to by exp
20464       (and returns a NaN).
20465 2   frexp raises no floating-point exceptions.
20466 3   When the radix of the argument is a power of 2, the returned value is exact and is
20467     independent of the current rounding direction mode.
20468 4   On a binary system, the body of the frexp function might be
20469             {
20470                    *exp = (value == 0) ? 0 : (int)(1 + logb(value));
20471                    return scalbn(value, -(*exp));
20472             }
20473 <a name="F.10.3.5" href="#F.10.3.5"><b>    F.10.3.5 The ilogb functions</b></a>
20474 1   When the correct result is representable in the range of the return type, the returned value
20475     is exact and is independent of the current rounding direction mode.
20476 2   If the correct result is outside the range of the return type, the numeric result is
20477     unspecified and the ''invalid'' floating-point exception is raised.
20478
20479
20480
20481
20482 [<a name="#p517" href="p517">page 517</a>] (<a href="#Contents">Contents</a>)
20483
20484 <a name="F.10.3.6" href="#F.10.3.6"><b>    F.10.3.6 The ldexp functions</b></a>
20485 1   On a binary system, ldexp(x, exp) is equivalent to scalbn(x, exp).
20486 <a name="F.10.3.7" href="#F.10.3.7"><b>    F.10.3.7 The log functions</b></a>
20487 1   -- log((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
20488     -- log(1) returns +0.
20489     -- log(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
20490     -- log(+(inf)) returns +(inf).
20491 <a name="F.10.3.8" href="#F.10.3.8"><b>    F.10.3.8 The log10 functions</b></a>
20492 1   -- log10((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
20493     -- log10(1) returns +0.
20494     -- log10(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
20495     -- log10(+(inf)) returns +(inf).
20496 <a name="F.10.3.9" href="#F.10.3.9"><b>    F.10.3.9 The log1p functions</b></a>
20497 1   -- log1p((+-)0) returns (+-)0.
20498     -- log1p(-1) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
20499     -- log1p(x) returns a NaN and raises the ''invalid'' floating-point exception for
20500       x &lt; -1.
20501     -- log1p(+(inf)) returns +(inf).
20502 <a name="F.10.3.10" href="#F.10.3.10"><b>    F.10.3.10 The log2 functions</b></a>
20503 1   -- log2((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
20504     -- log2(1) returns +0.
20505     -- log2(x) returns a NaN and raises the ''invalid'' floating-point exception for x &lt; 0.
20506     -- log2(+(inf)) returns +(inf).
20507 <a name="F.10.3.11" href="#F.10.3.11"><b>    F.10.3.11 The logb functions</b></a>
20508 1   -- logb((+-)0) returns -(inf) and raises the ''divide-by-zero'' floating-point exception.
20509     -- logb((+-)(inf)) returns +(inf).
20510 2   The returned value is exact and is independent of the current rounding direction mode.
20511
20512
20513
20514
20515 [<a name="#p518" href="p518">page 518</a>] (<a href="#Contents">Contents</a>)
20516
20517 <a name="F.10.3.12" href="#F.10.3.12"><b>    F.10.3.12 The modf functions</b></a>
20518 1   -- modf((+-)x, iptr) returns a result with the same sign as x.
20519     -- modf((+-)(inf), iptr) returns (+-)0 and stores (+-)(inf) in the object pointed to by iptr.
20520     -- modf(NaN, iptr) stores a NaN in the object pointed to by iptr (and returns a
20521       NaN).
20522 2   The returned values are exact and are independent of the current rounding direction
20523     mode.
20524 3   modf behaves as though implemented by
20525             #include <a href="#7.12">&lt;math.h&gt;</a>
20526             #include <a href="#7.6">&lt;fenv.h&gt;</a>
20527             #pragma STDC FENV_ACCESS ON
20528             double modf(double value, double *iptr)
20529             {
20530                  int save_round = fegetround();
20531                  fesetround(FE_TOWARDZERO);
20532                  *iptr = nearbyint(value);
20533                  fesetround(save_round);
20534                  return copysign(
20535                       isinf(value) ? 0.0 :
20536                            value - (*iptr), value);
20537             }
20538 <a name="F.10.3.13" href="#F.10.3.13"><b>    F.10.3.13 The scalbn and scalbln functions</b></a>
20539 1   -- scalbn((+-)0, n) returns (+-)0.
20540     -- scalbn(x, 0) returns x.
20541     -- scalbn((+-)(inf), n) returns (+-)(inf).
20542 <a name="F.10.4" href="#F.10.4"><b>    F.10.4 Power and absolute value functions</b></a>
20543 <a name="F.10.4.1" href="#F.10.4.1"><b>    F.10.4.1 The cbrt functions</b></a>
20544 1   -- cbrt((+-)0) returns (+-)0.
20545     -- cbrt((+-)(inf)) returns (+-)(inf).
20546
20547
20548
20549
20550 [<a name="#p519" href="p519">page 519</a>] (<a href="#Contents">Contents</a>)
20551
20552 <a name="F.10.4.2" href="#F.10.4.2"><b>    F.10.4.2 The fabs functions</b></a>
20553 1   -- fabs((+-)0) returns +0.
20554     -- fabs((+-)(inf)) returns +(inf).
20555 2   The returned value is exact and is independent of the current rounding direction mode.
20556 <a name="F.10.4.3" href="#F.10.4.3"><b>    F.10.4.3 The hypot functions</b></a>
20557 1   -- hypot(x, y), hypot(y, x), and hypot(x, -y) are equivalent.
20558     -- hypot(x, (+-)0) is equivalent to fabs(x).
20559     -- hypot((+-)(inf), y) returns +(inf), even if y is a NaN.
20560 <a name="F.10.4.4" href="#F.10.4.4"><b>    F.10.4.4 The pow functions</b></a>
20561 1   -- pow((+-)0, y) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception
20562       for y an odd integer &lt; 0.
20563     -- pow((+-)0, y) returns +(inf) and raises the ''divide-by-zero'' floating-point exception
20564       for y &lt; 0 and not an odd integer.
20565     -- pow((+-)0, y) returns (+-)0 for y an odd integer &gt; 0.
20566     -- pow((+-)0, y) returns +0 for y &gt; 0 and not an odd integer.
20567     -- pow(-1, (+-)(inf)) returns 1.
20568     -- pow(+1, y) returns 1 for any y, even a NaN.
20569     -- pow(x, (+-)0) returns 1 for any x, even a NaN.
20570     -- pow(x, y) returns a NaN and raises the ''invalid'' floating-point exception for
20571       finite x &lt; 0 and finite non-integer y.
20572     -- pow(x, -(inf)) returns +(inf) for | x | &lt; 1.
20573     -- pow(x, -(inf)) returns +0 for | x | &gt; 1.
20574     -- pow(x, +(inf)) returns +0 for | x | &lt; 1.
20575     -- pow(x, +(inf)) returns +(inf) for | x | &gt; 1.
20576     -- pow(-(inf), y) returns -0 for y an odd integer &lt; 0.
20577     -- pow(-(inf), y) returns +0 for y &lt; 0 and not an odd integer.
20578     -- pow(-(inf), y) returns -(inf) for y an odd integer &gt; 0.
20579     -- pow(-(inf), y) returns +(inf) for y &gt; 0 and not an odd integer.
20580     -- pow(+(inf), y) returns +0 for y &lt; 0.
20581     -- pow(+(inf), y) returns +(inf) for y &gt; 0.
20582
20583
20584 [<a name="#p520" href="p520">page 520</a>] (<a href="#Contents">Contents</a>)
20585
20586 <a name="F.10.4.5" href="#F.10.4.5"><b>    F.10.4.5 The sqrt functions</b></a>
20587 1   sqrt is fully specified as a basic arithmetic operation in IEC 60559. The returned value
20588     is dependent on the current rounding direction mode.
20589 <a name="F.10.5" href="#F.10.5"><b>    F.10.5 Error and gamma functions</b></a>
20590 <a name="F.10.5.1" href="#F.10.5.1"><b>    F.10.5.1 The erf functions</b></a>
20591 1   -- erf((+-)0) returns (+-)0.
20592     -- erf((+-)(inf)) returns (+-)1.
20593 <a name="F.10.5.2" href="#F.10.5.2"><b>    F.10.5.2 The erfc functions</b></a>
20594 1   -- erfc(-(inf)) returns 2.
20595     -- erfc(+(inf)) returns +0.
20596 <a name="F.10.5.3" href="#F.10.5.3"><b>    F.10.5.3 The lgamma functions</b></a>
20597 1   -- lgamma(1) returns +0.
20598     -- lgamma(2) returns +0.
20599     -- lgamma(x) returns +(inf) and raises the ''divide-by-zero'' floating-point exception for
20600       x a negative integer or zero.
20601     -- lgamma(-(inf)) returns +(inf).
20602     -- lgamma(+(inf)) returns +(inf).
20603 <a name="F.10.5.4" href="#F.10.5.4"><b>    F.10.5.4 The tgamma functions</b></a>
20604 1   -- tgamma((+-)0) returns (+-)(inf) and raises the ''divide-by-zero'' floating-point exception.
20605     -- tgamma(x) returns a NaN and raises the ''invalid'' floating-point exception for x a
20606       negative integer.
20607     -- tgamma(-(inf)) returns a NaN and raises the ''invalid'' floating-point exception.
20608     -- tgamma(+(inf)) returns +(inf).
20609 <a name="F.10.6" href="#F.10.6"><b>    F.10.6 Nearest integer functions</b></a>
20610 <a name="F.10.6.1" href="#F.10.6.1"><b>    F.10.6.1 The ceil functions</b></a>
20611 1   -- ceil((+-)0) returns (+-)0.
20612     -- ceil((+-)(inf)) returns (+-)(inf).
20613 2   The returned value is exact and is independent of the current rounding direction mode.
20614 3   The double version of ceil behaves as though implemented by
20615
20616
20617
20618 [<a name="#p521" href="p521">page 521</a>] (<a href="#Contents">Contents</a>)
20619
20620            #include <a href="#7.12">&lt;math.h&gt;</a>
20621            #include <a href="#7.6">&lt;fenv.h&gt;</a>
20622            #pragma STDC FENV_ACCESS ON
20623            double ceil(double x)
20624            {
20625                 double result;
20626                 int save_round = fegetround();
20627                 fesetround(FE_UPWARD);
20628                 result = rint(x); // or nearbyint instead of rint
20629                 fesetround(save_round);
20630                 return result;
20631            }
20632 <a name="F.10.6.2" href="#F.10.6.2"><b>    F.10.6.2 The floor functions</b></a>
20633 1   -- floor((+-)0) returns (+-)0.
20634     -- floor((+-)(inf)) returns (+-)(inf).
20635 2   The returned value is exact and is independent of the current rounding direction mode.
20636 3   See the sample implementation for ceil in <a href="#F.10.6.1">F.10.6.1</a>.
20637 <a name="F.10.6.3" href="#F.10.6.3"><b>    F.10.6.3 The nearbyint functions</b></a>
20638 1   The nearbyint functions use IEC 60559 rounding according to the current rounding
20639     direction. They do not raise the ''inexact'' floating-point exception if the result differs in
20640     value from the argument.
20641     -- nearbyint((+-)0) returns (+-)0 (for all rounding directions).
20642     -- nearbyint((+-)(inf)) returns (+-)(inf) (for all rounding directions).
20643 <a name="F.10.6.4" href="#F.10.6.4"><b>    F.10.6.4 The rint functions</b></a>
20644 1   The rint functions differ from the nearbyint functions only in that they do raise the
20645     ''inexact'' floating-point exception if the result differs in value from the argument.
20646 <a name="F.10.6.5" href="#F.10.6.5"><b>    F.10.6.5 The lrint and llrint functions</b></a>
20647 1   The lrint and llrint functions provide floating-to-integer conversion as prescribed
20648     by IEC 60559. They round according to the current rounding direction. If the rounded
20649     value is outside the range of the return type, the numeric result is unspecified and the
20650     ''invalid'' floating-point exception is raised. When they raise no other floating-point
20651     exception and the result differs from the argument, they raise the ''inexact'' floating-point
20652     exception.
20653
20654
20655
20656
20657 [<a name="#p522" href="p522">page 522</a>] (<a href="#Contents">Contents</a>)
20658
20659 <a name="F.10.6.6" href="#F.10.6.6"><b>    F.10.6.6 The round functions</b></a>
20660 1   -- round((+-)0) returns (+-)0.
20661     -- round((+-)(inf)) returns (+-)(inf).
20662 2   The double version of round behaves as though implemented by
20663             #include <a href="#7.12">&lt;math.h&gt;</a>
20664             #include <a href="#7.6">&lt;fenv.h&gt;</a>
20665             #pragma STDC FENV_ACCESS ON
20666             double round(double x)
20667             {
20668                  double result;
20669                  fenv_t save_env;
20670                  feholdexcept(&amp;save_env);
20671                  result = rint(x);
20672                  if (fetestexcept(FE_INEXACT)) {
20673                       fesetround(FE_TOWARDZERO);
20674                       result = rint(copysign(0.5 + fabs(x), x));
20675                  }
20676                  feupdateenv(&amp;save_env);
20677                  return result;
20678             }
20679     The round functions may, but are not required to, raise the ''inexact'' floating-point
20680     exception for non-integer numeric arguments, as this implementation does.
20681 <a name="F.10.6.7" href="#F.10.6.7"><b>    F.10.6.7 The lround and llround functions</b></a>
20682 1   The lround and llround functions differ from the lrint and llrint functions
20683     with the default rounding direction just in that the lround and llround functions
20684     round halfway cases away from zero and need not raise the ''inexact'' floating-point
20685     exception for non-integer arguments that round to within the range of the return type.
20686 <a name="F.10.6.8" href="#F.10.6.8"><b>    F.10.6.8 The trunc functions</b></a>
20687 1   The trunc functions use IEC 60559 rounding toward zero (regardless of the current
20688     rounding direction). The returned value is exact.
20689     -- trunc((+-)0) returns (+-)0.
20690     -- trunc((+-)(inf)) returns (+-)(inf).
20691
20692
20693
20694
20695 [<a name="#p523" href="p523">page 523</a>] (<a href="#Contents">Contents</a>)
20696
20697 <a name="F.10.7" href="#F.10.7"><b>    F.10.7 Remainder functions</b></a>
20698 <a name="F.10.7.1" href="#F.10.7.1"><b>    F.10.7.1 The fmod functions</b></a>
20699 1   -- fmod((+-)0, y) returns (+-)0 for y not zero.
20700     -- fmod(x, y) returns a NaN and raises the ''invalid'' floating-point exception for x
20701       infinite or y zero.
20702     -- fmod(x, (+-)(inf)) returns x for x not infinite.
20703 2   When subnormal results are supported, the returned value is exact and is independent of
20704     the current rounding direction mode.
20705 3   The double version of fmod behaves as though implemented by
20706            #include <a href="#7.12">&lt;math.h&gt;</a>
20707            #include <a href="#7.6">&lt;fenv.h&gt;</a>
20708            #pragma STDC FENV_ACCESS ON
20709            double fmod(double x, double y)
20710            {
20711                 double result;
20712                 result = remainder(fabs(x), (y = fabs(y)));
20713                 if (signbit(result)) result += y;
20714                 return copysign(result, x);
20715            }
20716 <a name="F.10.7.2" href="#F.10.7.2"><b>    F.10.7.2 The remainder functions</b></a>
20717 1   The remainder functions are fully specified as a basic arithmetic operation in
20718     IEC 60559.
20719 2   When subnormal results are supported, the returned value is exact and is independent of
20720     the current rounding direction mode.
20721 <a name="F.10.7.3" href="#F.10.7.3"><b>    F.10.7.3 The remquo functions</b></a>
20722 1   The remquo functions follow the specifications for the remainder functions. They
20723     have no further specifications special to IEC 60559 implementations.
20724 2   When subnormal results are supported, the returned value is exact and is independent of
20725     the current rounding direction mode.
20726
20727
20728
20729
20730 [<a name="#p524" href="p524">page 524</a>] (<a href="#Contents">Contents</a>)
20731
20732 <a name="F.10.8" href="#F.10.8"><b>    F.10.8 Manipulation functions</b></a>
20733 <a name="F.10.8.1" href="#F.10.8.1"><b>    F.10.8.1 The copysign functions</b></a>
20734 1   copysign is specified in the Appendix to IEC 60559.
20735 2   The returned value is exact and is independent of the current rounding direction mode.
20736 <a name="F.10.8.2" href="#F.10.8.2"><b>    F.10.8.2 The nan functions</b></a>
20737 1   All IEC 60559 implementations support quiet NaNs, in all floating formats.
20738 2   The returned value is exact and is independent of the current rounding direction mode.
20739 <a name="F.10.8.3" href="#F.10.8.3"><b>    F.10.8.3 The nextafter functions</b></a>
20740 1   -- nextafter(x, y) raises the ''overflow'' and ''inexact'' floating-point exceptions
20741       for x finite and the function value infinite.
20742     -- nextafter(x, y) raises the ''underflow'' and ''inexact'' floating-point
20743       exceptions for the function value subnormal or zero and x != y.
20744 2   Even though underflow or overflow can occur, the returned value is independent of the
20745     current rounding direction mode.
20746 <a name="F.10.8.4" href="#F.10.8.4"><b>    F.10.8.4 The nexttoward functions</b></a>
20747 1   No additional requirements beyond those on nextafter.
20748 2   Even though underflow or overflow can occur, the returned value is independent of the
20749     current rounding direction mode.
20750 <a name="F.10.9" href="#F.10.9"><b>    F.10.9 Maximum, minimum, and positive difference functions</b></a>
20751 <a name="F.10.9.1" href="#F.10.9.1"><b>    F.10.9.1 The fdim functions</b></a>
20752 1   No additional requirements.
20753 <a name="F.10.9.2" href="#F.10.9.2"><b>    F.10.9.2 The fmax functions</b></a>
20754 1   If just one argument is a NaN, the fmax functions return the other argument (if both
20755     arguments are NaNs, the functions return a NaN).
20756 2   The returned value is exact and is independent of the current rounding direction mode.
20757 3   The body of the fmax function might be356)
20758             { return (isgreaterequal(x, y) ||
20759                  isnan(y)) ? x : y; }
20760
20761
20762
20763     356) Ideally, fmax would be sensitive to the sign of zero, for example fmax(-0.0, +0.0) would
20764          return +0; however, implementation in software might be impractical.
20765
20766 [<a name="#p525" href="p525">page 525</a>] (<a href="#Contents">Contents</a>)
20767
20768 <a name="F.10.9.3" href="#F.10.9.3"><b>    F.10.9.3 The fmin functions</b></a>
20769 1   The fmin functions are analogous to the fmax functions (see <a href="#F.10.9.2">F.10.9.2</a>).
20770 2   The returned value is exact and is independent of the current rounding direction mode.
20771 <a name="F.10.10" href="#F.10.10"><b>    F.10.10 Floating multiply-add</b></a>
20772 <a name="F.10.10.1" href="#F.10.10.1"><b>    F.10.10.1 The fma functions</b></a>
20773 1   -- fma(x, y, z) computes xy + z, correctly rounded once.
20774     -- fma(x, y, z) returns a NaN and optionally raises the ''invalid'' floating-point
20775       exception if one of x and y is infinite, the other is zero, and z is a NaN.
20776     -- fma(x, y, z) returns a NaN and raises the ''invalid'' floating-point exception if
20777       one of x and y is infinite, the other is zero, and z is not a NaN.
20778     -- fma(x, y, z) returns a NaN and raises the ''invalid'' floating-point exception if x
20779       times y is an exact infinity and z is also an infinity but with the opposite sign.
20780 <a name="F.10.11" href="#F.10.11"><b>    F.10.11 Comparison macros</b></a>
20781 1   Relational operators and their corresponding comparison macros (<a href="#7.12.14">7.12.14</a>) produce
20782     equivalent result values, even if argument values are represented in wider formats. Thus,
20783     comparison macro arguments represented in formats wider than their semantic types are
20784     not converted to the semantic types, unless the wide evaluation method converts operands
20785     of relational operators to their semantic types. The standard wide evaluation methods
20786     characterized by FLT_EVAL_METHOD equal to 1 or 2 (<a href="#5.2.4.2.2">5.2.4.2.2</a>), do not convert
20787     operands of relational operators to their semantic types.
20788
20789
20790
20791
20792 [<a name="#p526" href="p526">page 526</a>] (<a href="#Contents">Contents</a>)
20793
20794 <a name="G" href="#G"><b>                                          Annex G</b></a>
20795                                         (informative)
20796                   IEC 60559-compatible complex arithmetic
20797 <a name="G.1" href="#G.1"><b>    G.1 Introduction</b></a>
20798 1   This annex supplements <a href="#F">annex F</a> to specify complex arithmetic for compatibility with
20799     IEC 60559 real floating-point arithmetic. Although these specifications have been
20800     carefully designed, there is little existing practice to validate the design decisions.
20801     Therefore, these specifications are not normative, but should be viewed more as
20802     recommended          practice.       An         implementation        that     defines
20803     __STDC_IEC_559_COMPLEX__ should conform to the specifications in this annex.
20804 <a name="G.2" href="#G.2"><b>    G.2 Types</b></a>
20805 1   There is a new keyword _Imaginary, which is used to specify imaginary types. It is
20806     used as a type specifier within declaration specifiers in the same way as _Complex is
20807     (thus, _Imaginary float is a valid type name).
20808 2   There are three imaginary types, designated as float _Imaginary, double
20809     _Imaginary, and long double _Imaginary. The imaginary types (along with
20810     the real floating and complex types) are floating types.
20811 3   For imaginary types, the corresponding real type is given by deleting the keyword
20812     _Imaginary from the type name.
20813 4   Each imaginary type has the same representation and alignment requirements as the
20814     corresponding real type. The value of an object of imaginary type is the value of the real
20815     representation times the imaginary unit.
20816 5   The imaginary type domain comprises the imaginary types.
20817 <a name="G.3" href="#G.3"><b>    G.3 Conventions</b></a>
20818 1   A complex or imaginary value with at least one infinite part is regarded as an infinity
20819     (even if its other part is a NaN). A complex or imaginary value is a finite number if each
20820     of its parts is a finite number (neither infinite nor NaN). A complex or imaginary value is
20821     a zero if each of its parts is a zero.
20822
20823
20824
20825
20826 [<a name="#p527" href="p527">page 527</a>] (<a href="#Contents">Contents</a>)
20827
20828 <a name="G.4" href="#G.4"><b>    G.4 Conversions</b></a>
20829 <a name="G.4.1" href="#G.4.1"><b>    G.4.1 Imaginary types</b></a>
20830 1   Conversions among imaginary types follow rules analogous to those for real floating
20831     types.
20832 <a name="G.4.2" href="#G.4.2"><b>    G.4.2 Real and imaginary</b></a>
20833 1   When a value of imaginary type is converted to a real type other than _Bool,357) the
20834     result is a positive zero.
20835 2   When a value of real type is converted to an imaginary type, the result is a positive
20836     imaginary zero.
20837 <a name="G.4.3" href="#G.4.3"><b>    G.4.3 Imaginary and complex</b></a>
20838 1   When a value of imaginary type is converted to a complex type, the real part of the
20839     complex result value is a positive zero and the imaginary part of the complex result value
20840     is determined by the conversion rules for the corresponding real types.
20841 2   When a value of complex type is converted to an imaginary type, the real part of the
20842     complex value is discarded and the value of the imaginary part is converted according to
20843     the conversion rules for the corresponding real types.
20844 <a name="G.5" href="#G.5"><b>    G.5 Binary operators</b></a>
20845 1   The following subclauses supplement <a href="#6.5">6.5</a> in order to specify the type of the result for an
20846     operation with an imaginary operand.
20847 2   For most operand types, the value of the result of a binary operator with an imaginary or
20848     complex operand is completely determined, with reference to real arithmetic, by the usual
20849     mathematical formula. For some operand types, the usual mathematical formula is
20850     problematic because of its treatment of infinities and because of undue overflow or
20851     underflow; in these cases the result satisfies certain properties (specified in <a href="#G.5.1">G.5.1</a>), but is
20852     not completely determined.
20853
20854
20855
20856
20857     357) See <a href="#6.3.1.2">6.3.1.2</a>.
20858
20859 [<a name="#p528" href="p528">page 528</a>] (<a href="#Contents">Contents</a>)
20860
20861 <a name="G.5.1" href="#G.5.1"><b>    G.5.1 Multiplicative operators</b></a>
20862     Semantics
20863 1   If one operand has real type and the other operand has imaginary type, then the result has
20864     imaginary type. If both operands have imaginary type, then the result has real type. (If
20865     either operand has complex type, then the result has complex type.)
20866 2   If the operands are not both complex, then the result and floating-point exception
20867     behavior of the * operator is defined by the usual mathematical formula:
20868            *                  u                   iv                 u + iv
20869
20870            x                  xu                i(xv)            (xu) + i(xv)
20871
20872            iy               i(yu)                -yv            (-yv) + i(yu)
20873
20874            x + iy       (xu) + i(yu)        (-yv) + i(xv)
20875 3   If the second operand is not complex, then the result and floating-point exception
20876     behavior of the / operator is defined by the usual mathematical formula:
20877            /                   u                       iv
20878
20879            x                  x/u                 i(-x/v)
20880
20881            iy               i(y/u)                     y/v
20882
20883            x + iy       (x/u) + i(y/u)        (y/v) + i(-x/v)
20884 4   The * and / operators satisfy the following infinity properties for all real, imaginary, and
20885     complex operands:358)
20886     -- if one operand is an infinity and the other operand is a nonzero finite number or an
20887       infinity, then the result of the * operator is an infinity;
20888     -- if the first operand is an infinity and the second operand is a finite number, then the
20889       result of the / operator is an infinity;
20890     -- if the first operand is a finite number and the second operand is an infinity, then the
20891       result of the / operator is a zero;
20892
20893
20894
20895
20896     358) These properties are already implied for those cases covered in the tables, but are required for all cases
20897          (at least where the state for CX_LIMITED_RANGE is ''off'').
20898
20899 [<a name="#p529" href="p529">page 529</a>] (<a href="#Contents">Contents</a>)
20900
20901     -- if the first operand is a nonzero finite number or an infinity and the second operand is
20902       a zero, then the result of the / operator is an infinity.
20903 5   If both operands of the * operator are complex or if the second operand of the / operator
20904     is complex, the operator raises floating-point exceptions if appropriate for the calculation
20905     of the parts of the result, and may raise spurious floating-point exceptions.
20906 6   EXAMPLE 1 Multiplication of double _Complex operands could be implemented as follows. Note
20907     that the imaginary unit I has imaginary type (see <a href="#G.6">G.6</a>).
20908            #include <a href="#7.12">&lt;math.h&gt;</a>
20909            #include <a href="#7.3">&lt;complex.h&gt;</a>
20910            /* Multiply z * w ... */
20911            double complex _Cmultd(double complex z, double complex w)
20912            {
20913                   #pragma STDC FP_CONTRACT OFF
20914                   double a, b, c, d, ac, bd, ad, bc, x, y;
20915                   a = creal(z); b = cimag(z);
20916                   c = creal(w); d = cimag(w);
20917                   ac = a * c;       bd = b * d;
20918                   ad = a * d;       bc = b * c;
20919                   x = ac - bd; y = ad + bc;
20920                   if (isnan(x) &amp;&amp; isnan(y)) {
20921                           /* Recover infinities that computed as NaN+iNaN ... */
20922                           int recalc = 0;
20923                           if ( isinf(a) || isinf(b) ) { // z is infinite
20924                                   /* "Box" the infinity and change NaNs in the other factor to 0 */
20925                                   a = copysign(isinf(a) ? <a href="#1.0">1.0</a> : 0.0, a);
20926                                   b = copysign(isinf(b) ? <a href="#1.0">1.0</a> : 0.0, b);
20927                                   if (isnan(c)) c = copysign(0.0, c);
20928                                   if (isnan(d)) d = copysign(0.0, d);
20929                                   recalc = 1;
20930                           }
20931                           if ( isinf(c) || isinf(d) ) { // w is infinite
20932                                   /* "Box" the infinity and change NaNs in the other factor to 0 */
20933                                   c = copysign(isinf(c) ? <a href="#1.0">1.0</a> : 0.0, c);
20934                                   d = copysign(isinf(d) ? <a href="#1.0">1.0</a> : 0.0, d);
20935                                   if (isnan(a)) a = copysign(0.0, a);
20936                                   if (isnan(b)) b = copysign(0.0, b);
20937                                   recalc = 1;
20938                           }
20939                           if (!recalc &amp;&amp; (isinf(ac) || isinf(bd) ||
20940                                                  isinf(ad) || isinf(bc))) {
20941                                   /* Recover infinities from overflow by changing NaNs to 0 ... */
20942                                   if (isnan(a)) a = copysign(0.0, a);
20943                                   if (isnan(b)) b = copysign(0.0, b);
20944                                   if (isnan(c)) c = copysign(0.0, c);
20945                                   if (isnan(d)) d = copysign(0.0, d);
20946                                   recalc = 1;
20947                           }
20948                           if (recalc) {
20949
20950 [<a name="#p530" href="p530">page 530</a>] (<a href="#Contents">Contents</a>)
20951
20952                                       x = INFINITY * ( a * c - b * d );
20953                                       y = INFINITY * ( a * d + b * c );
20954                            }
20955                      }
20956                      return x + I * y;
20957              }
20958 7   This implementation achieves the required treatment of infinities at the cost of only one isnan test in
20959     ordinary (finite) cases. It is less than ideal in that undue overflow and underflow may occur.
20960
20961 8   EXAMPLE 2      Division of two double _Complex operands could be implemented as follows.
20962              #include <a href="#7.12">&lt;math.h&gt;</a>
20963              #include <a href="#7.3">&lt;complex.h&gt;</a>
20964              /* Divide z / w ... */
20965              double complex _Cdivd(double complex z, double complex w)
20966              {
20967                     #pragma STDC FP_CONTRACT OFF
20968                     double a, b, c, d, logbw, denom, x, y;
20969                     int ilogbw = 0;
20970                     a = creal(z); b = cimag(z);
20971                     c = creal(w); d = cimag(w);
20972                     logbw = logb(fmax(fabs(c), fabs(d)));
20973                     if (isfinite(logbw)) {
20974                            ilogbw = (int)logbw;
20975                            c = scalbn(c, -ilogbw); d = scalbn(d, -ilogbw);
20976                     }
20977                     denom = c * c + d * d;
20978                     x = scalbn((a * c + b * d) / denom, -ilogbw);
20979                     y = scalbn((b * c - a * d) / denom, -ilogbw);
20980                      /* Recover infinities and zeros that computed as NaN+iNaN;                 */
20981                      /* the only cases are nonzero/zero, infinite/finite, and finite/infinite, ... */
20982                      if (isnan(x) &amp;&amp; isnan(y)) {
20983                            if ((denom == 0.0) &amp;&amp;
20984                                  (!isnan(a) || !isnan(b))) {
20985                                  x = copysign(INFINITY, c) * a;
20986                                  y = copysign(INFINITY, c) * b;
20987                            }
20988                            else if ((isinf(a) || isinf(b)) &amp;&amp;
20989                                  isfinite(c) &amp;&amp; isfinite(d)) {
20990                                  a = copysign(isinf(a) ? <a href="#1.0">1.0</a> : 0.0,                        a);
20991                                  b = copysign(isinf(b) ? <a href="#1.0">1.0</a> : 0.0,                        b);
20992                                  x = INFINITY * ( a * c + b * d );
20993                                  y = INFINITY * ( b * c - a * d );
20994                            }
20995                            else if (isinf(logbw) &amp;&amp;
20996                                  isfinite(a) &amp;&amp; isfinite(b)) {
20997                                  c = copysign(isinf(c) ? <a href="#1.0">1.0</a> : 0.0,                        c);
20998                                  d = copysign(isinf(d) ? <a href="#1.0">1.0</a> : 0.0,                        d);
20999                                  x = 0.0 * ( a * c + b * d );
21000                                  y = 0.0 * ( b * c - a * d );
21001
21002 [<a name="#p531" href="p531">page 531</a>] (<a href="#Contents">Contents</a>)
21003
21004                            }
21005                      }
21006                      return x + I * y;
21007             }
21008 9   Scaling the denominator alleviates the main overflow and underflow problem, which is more serious than
21009     for multiplication. In the spirit of the multiplication example above, this code does not defend against
21010     overflow and underflow in the calculation of the numerator. Scaling with the scalbn function, instead of
21011     with division, provides better roundoff characteristics.
21012
21013 <a name="G.5.2" href="#G.5.2"><b>    G.5.2 Additive operators</b></a>
21014     Semantics
21015 1   If both operands have imaginary type, then the result has imaginary type. (If one operand
21016     has real type and the other operand has imaginary type, or if either operand has complex
21017     type, then the result has complex type.)
21018 2   In all cases the result and floating-point exception behavior of a + or - operator is defined
21019     by the usual mathematical formula:
21020            + or -              u                       iv                    u + iv
21021
21022            x                 x(+-)u                     x (+-) iv              (x (+-) u) (+-) iv
21023
21024            iy               (+-)u + iy                 i(y (+-) v)             (+-)u + i(y (+-) v)
21025
21026            x + iy         (x (+-) u) + iy            x + i(y (+-) v)        (x (+-) u) + i(y (+-) v)
21027 <a name="G.6" href="#G.6"><b>    G.6 Complex arithmetic &lt;complex.h&gt;</b></a>
21028 1   The macros
21029             imaginary
21030     and
21031             _Imaginary_I
21032     are defined, respectively, as _Imaginary and a constant expression of type const
21033     float _Imaginary with the value of the imaginary unit. The macro
21034             I
21035     is defined to be _Imaginary_I (not _Complex_I as stated in <a href="#7.3">7.3</a>). Notwithstanding
21036     the provisions of <a href="#7.1.3">7.1.3</a>, a program may undefine and then perhaps redefine the macro
21037     imaginary.
21038 2   This subclause contains specifications for the <a href="#7.3">&lt;complex.h&gt;</a> functions that are
21039     particularly suited to IEC 60559 implementations. For families of functions, the
21040     specifications apply to all of the functions even though only the principal function is
21041
21042 [<a name="#p532" href="p532">page 532</a>] (<a href="#Contents">Contents</a>)
21043
21044     shown. Unless otherwise specified, where the symbol ''(+-)'' occurs in both an argument
21045     and the result, the result has the same sign as the argument.
21046 3   The functions are continuous onto both sides of their branch cuts, taking into account the
21047     sign of zero. For example, csqrt(-2 (+-) i0) = (+-)isqrt:2.  -
21048 4   Since complex and imaginary values are composed of real values, each function may be
21049     regarded as computing real values from real values. Except as noted, the functions treat
21050     real infinities, NaNs, signed zeros, subnormals, and the floating-point exception flags in a
21051     manner consistent with the specifications for real functions in F.10.359)
21052 5   The functions cimag, conj, cproj, and creal are fully specified for all
21053     implementations, including IEC 60559 ones, in <a href="#7.3.9">7.3.9</a>. These functions raise no floating-
21054     point exceptions.
21055 6   Each of the functions cabs and carg is specified by a formula in terms of a real
21056     function (whose special cases are covered in <a href="#F">annex F</a>):
21057             cabs(x + iy) = hypot(x, y)
21058             carg(x + iy) = atan2(y, x)
21059 7   Each of the functions casin, catan, ccos, csin, and ctan is specified implicitly by
21060     a formula in terms of other complex functions (whose special cases are specified below):
21061             casin(z)        =   -i casinh(iz)
21062             catan(z)        =   -i catanh(iz)
21063             ccos(z)         =   ccosh(iz)
21064             csin(z)         =   -i csinh(iz)
21065             ctan(z)         =   -i ctanh(iz)
21066 8   For the other functions, the following subclauses specify behavior for special cases,
21067     including treatment of the ''invalid'' and ''divide-by-zero'' floating-point exceptions. For
21068     families of functions, the specifications apply to all of the functions even though only the
21069     principal function is shown. For a function f satisfying f (conj(z)) = conj( f (z)), the
21070     specifications for the upper half-plane imply the specifications for the lower half-plane; if
21071     the function f is also either even, f (-z) = f (z), or odd, f (-z) = - f (z), then the
21072     specifications for the first quadrant imply the specifications for the other three quadrants.
21073 9   In the following subclauses, cis(y) is defined as cos(y) + i sin(y).
21074
21075
21076
21077
21078     359) 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
21079          other part is a NaN.
21080
21081 [<a name="#p533" href="p533">page 533</a>] (<a href="#Contents">Contents</a>)
21082
21083 <a name="G.6.1" href="#G.6.1"><b>    G.6.1 Trigonometric functions</b></a>
21084 <a name="G.6.1.1" href="#G.6.1.1"><b>    G.6.1.1 The cacos functions</b></a>
21085 1   -- cacos(conj(z)) = conj(cacos(z)).
21086     -- cacos((+-)0 + i0) returns pi /2 - i0.
21087     -- cacos((+-)0 + iNaN) returns pi /2 + iNaN.
21088     -- cacos(x + i (inf)) returns pi /2 - i (inf), for finite x.
21089     -- cacos(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21090       point exception, for nonzero finite x.
21091     -- cacos(-(inf) + iy) returns pi - i (inf), for positive-signed finite y.
21092     -- cacos(+(inf) + iy) returns +0 - i (inf), for positive-signed finite y.
21093     -- cacos(-(inf) + i (inf)) returns 3pi /4 - i (inf).
21094     -- cacos(+(inf) + i (inf)) returns pi /4 - i (inf).
21095     -- cacos((+-)(inf) + iNaN) returns NaN (+-) i (inf) (where the sign of the imaginary part of the
21096       result is unspecified).
21097     -- cacos(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21098       point exception, for finite y.
21099     -- cacos(NaN + i (inf)) returns NaN - i (inf).
21100     -- cacos(NaN + iNaN) returns NaN + iNaN.
21101 <a name="G.6.2" href="#G.6.2"><b>    G.6.2 Hyperbolic functions</b></a>
21102 <a name="G.6.2.1" href="#G.6.2.1"><b>    G.6.2.1 The cacosh functions</b></a>
21103 1   -- cacosh(conj(z)) = conj(cacosh(z)).
21104     -- cacosh((+-)0 + i0) returns +0 + ipi /2.
21105     -- cacosh(x + i (inf)) returns +(inf) + ipi /2, for finite x.
21106     -- cacosh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
21107       floating-point exception, for finite x.
21108     -- cacosh(-(inf) + iy) returns +(inf) + ipi , for positive-signed finite y.
21109     -- cacosh(+(inf) + iy) returns +(inf) + i0, for positive-signed finite y.
21110     -- cacosh(-(inf) + i (inf)) returns +(inf) + i3pi /4.
21111     -- cacosh(+(inf) + i (inf)) returns +(inf) + ipi /4.
21112     -- cacosh((+-)(inf) + iNaN) returns +(inf) + iNaN.
21113
21114
21115 [<a name="#p534" href="p534">page 534</a>] (<a href="#Contents">Contents</a>)
21116
21117     -- cacosh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
21118       floating-point exception, for finite y.
21119     -- cacosh(NaN + i (inf)) returns +(inf) + iNaN.
21120     -- cacosh(NaN + iNaN) returns NaN + iNaN.
21121 <a name="G.6.2.2" href="#G.6.2.2"><b>    G.6.2.2 The casinh functions</b></a>
21122 1   -- casinh(conj(z)) = conj(casinh(z)) and casinh is odd.
21123     -- casinh(+0 + i0) returns 0 + i0.
21124     -- casinh(x + i (inf)) returns +(inf) + ipi /2 for positive-signed finite x.
21125     -- casinh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
21126       floating-point exception, for finite x.
21127     -- casinh(+(inf) + iy) returns +(inf) + i0 for positive-signed finite y.
21128     -- casinh(+(inf) + i (inf)) returns +(inf) + ipi /4.
21129     -- casinh(+(inf) + iNaN) returns +(inf) + iNaN.
21130     -- casinh(NaN + i0) returns NaN + i0.
21131     -- casinh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
21132       floating-point exception, for finite nonzero y.
21133     -- casinh(NaN + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result
21134       is unspecified).
21135     -- casinh(NaN + iNaN) returns NaN + iNaN.
21136 <a name="G.6.2.3" href="#G.6.2.3"><b>    G.6.2.3 The catanh functions</b></a>
21137 1   -- catanh(conj(z)) = conj(catanh(z)) and catanh is odd.
21138     -- catanh(+0 + i0) returns +0 + i0.
21139     -- catanh(+0 + iNaN) returns +0 + iNaN.
21140     -- catanh(+1 + i0) returns +(inf) + i0 and raises the ''divide-by-zero'' floating-point
21141       exception.
21142     -- catanh(x + i (inf)) returns +0 + ipi /2, for finite positive-signed x.
21143     -- catanh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid''
21144       floating-point exception, for nonzero finite x.
21145     -- catanh(+(inf) + iy) returns +0 + ipi /2, for finite positive-signed y.
21146     -- catanh(+(inf) + i (inf)) returns +0 + ipi /2.
21147     -- catanh(+(inf) + iNaN) returns +0 + iNaN.
21148
21149 [<a name="#p535" href="p535">page 535</a>] (<a href="#Contents">Contents</a>)
21150
21151     -- catanh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid''
21152       floating-point exception, for finite y.
21153     -- catanh(NaN + i (inf)) returns (+-)0 + ipi /2 (where the sign of the real part of the result is
21154       unspecified).
21155     -- catanh(NaN + iNaN) returns NaN + iNaN.
21156 <a name="G.6.2.4" href="#G.6.2.4"><b>    G.6.2.4 The ccosh functions</b></a>
21157 1   -- ccosh(conj(z)) = conj(ccosh(z)) and ccosh is even.
21158     -- ccosh(+0 + i0) returns 1 + i0.
21159     -- ccosh(+0 + i (inf)) returns NaN (+-) i0 (where the sign of the imaginary part of the
21160       result is unspecified) and raises the ''invalid'' floating-point exception.
21161     -- ccosh(+0 + iNaN) returns NaN (+-) i0 (where the sign of the imaginary part of the
21162       result is unspecified).
21163     -- ccosh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
21164       exception, for finite nonzero x.
21165     -- ccosh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21166       point exception, for finite nonzero x.
21167     -- ccosh(+(inf) + i0) returns +(inf) + i0.
21168     -- ccosh(+(inf) + iy) returns +(inf) cis(y), for finite nonzero y.
21169     -- ccosh(+(inf) + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result is
21170       unspecified) and raises the ''invalid'' floating-point exception.
21171     -- ccosh(+(inf) + iNaN) returns +(inf) + iNaN.
21172     -- ccosh(NaN + i0) returns NaN (+-) i0 (where the sign of the imaginary part of the
21173       result is unspecified).
21174     -- ccosh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21175       point exception, for all nonzero numbers y.
21176     -- ccosh(NaN + iNaN) returns NaN + iNaN.
21177 <a name="G.6.2.5" href="#G.6.2.5"><b>    G.6.2.5 The csinh functions</b></a>
21178 1   -- csinh(conj(z)) = conj(csinh(z)) and csinh is odd.
21179     -- csinh(+0 + i0) returns +0 + i0.
21180     -- csinh(+0 + i (inf)) returns (+-)0 + iNaN (where the sign of the real part of the result is
21181       unspecified) and raises the ''invalid'' floating-point exception.
21182     -- csinh(+0 + iNaN) returns (+-)0 + iNaN (where the sign of the real part of the result is
21183       unspecified).
21184 [<a name="#p536" href="p536">page 536</a>] (<a href="#Contents">Contents</a>)
21185
21186     -- csinh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
21187       exception, for positive finite x.
21188     -- csinh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21189       point exception, for finite nonzero x.
21190     -- csinh(+(inf) + i0) returns +(inf) + i0.
21191     -- csinh(+(inf) + iy) returns +(inf) cis(y), for positive finite y.
21192     -- csinh(+(inf) + i (inf)) returns (+-)(inf) + iNaN (where the sign of the real part of the result is
21193       unspecified) and raises the ''invalid'' floating-point exception.
21194     -- csinh(+(inf) + iNaN) returns (+-)(inf) + iNaN (where the sign of the real part of the result
21195       is unspecified).
21196     -- csinh(NaN + i0) returns NaN + i0.
21197     -- csinh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21198       point exception, for all nonzero numbers y.
21199     -- csinh(NaN + iNaN) returns NaN + iNaN.
21200 <a name="G.6.2.6" href="#G.6.2.6"><b>    G.6.2.6 The ctanh functions</b></a>
21201 1   -- ctanh(conj(z)) = conj(ctanh(z))and ctanh is odd.
21202     -- ctanh(+0 + i0) returns +0 + i0.
21203     -- ctanh(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
21204       exception, for finite x.
21205     -- ctanh(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21206       point exception, for finite x.
21207     -- ctanh(+(inf) + iy) returns 1 + i0 sin(2y), for positive-signed finite y.
21208     -- ctanh(+(inf) + i (inf)) returns 1 (+-) i0 (where the sign of the imaginary part of the result
21209       is unspecified).
21210     -- ctanh(+(inf) + iNaN) returns 1 (+-) i0 (where the sign of the imaginary part of the
21211       result is unspecified).
21212     -- ctanh(NaN + i0) returns NaN + i0.
21213     -- ctanh(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21214       point exception, for all nonzero numbers y.
21215     -- ctanh(NaN + iNaN) returns NaN + iNaN.
21216
21217
21218
21219
21220 [<a name="#p537" href="p537">page 537</a>] (<a href="#Contents">Contents</a>)
21221
21222 <a name="G.6.3" href="#G.6.3"><b>    G.6.3 Exponential and logarithmic functions</b></a>
21223 <a name="G.6.3.1" href="#G.6.3.1"><b>    G.6.3.1 The cexp functions</b></a>
21224 1   -- cexp(conj(z)) = conj(cexp(z)).
21225     -- cexp((+-)0 + i0) returns 1 + i0.
21226     -- cexp(x + i (inf)) returns NaN + iNaN and raises the ''invalid'' floating-point
21227       exception, for finite x.
21228     -- cexp(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21229       point exception, for finite x.
21230     -- cexp(+(inf) + i0) returns +(inf) + i0.
21231     -- cexp(-(inf) + iy) returns +0 cis(y), for finite y.
21232     -- cexp(+(inf) + iy) returns +(inf) cis(y), for finite nonzero y.
21233     -- cexp(-(inf) + i (inf)) returns (+-)0 (+-) i0 (where the signs of the real and imaginary parts of
21234       the result are unspecified).
21235     -- cexp(+(inf) + i (inf)) returns (+-)(inf) + iNaN and raises the ''invalid'' floating-point
21236       exception (where the sign of the real part of the result is unspecified).
21237     -- cexp(-(inf) + iNaN) returns (+-)0 (+-) i0 (where the signs of the real and imaginary parts
21238       of the result are unspecified).
21239     -- cexp(+(inf) + iNaN) returns (+-)(inf) + iNaN (where the sign of the real part of the result
21240       is unspecified).
21241     -- cexp(NaN + i0) returns NaN + i0.
21242     -- cexp(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21243       point exception, for all nonzero numbers y.
21244     -- cexp(NaN + iNaN) returns NaN + iNaN.
21245 <a name="G.6.3.2" href="#G.6.3.2"><b>    G.6.3.2 The clog functions</b></a>
21246 1   -- clog(conj(z)) = conj(clog(z)).
21247     -- clog(-0 + i0) returns -(inf) + ipi and raises the ''divide-by-zero'' floating-point
21248       exception.
21249     -- clog(+0 + i0) returns -(inf) + i0 and raises the ''divide-by-zero'' floating-point
21250       exception.
21251     -- clog(x + i (inf)) returns +(inf) + ipi /2, for finite x.
21252     -- clog(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21253       point exception, for finite x.
21254
21255 [<a name="#p538" href="p538">page 538</a>] (<a href="#Contents">Contents</a>)
21256
21257     -- clog(-(inf) + iy) returns +(inf) + ipi , for finite positive-signed y.
21258     -- clog(+(inf) + iy) returns +(inf) + i0, for finite positive-signed y.
21259     -- clog(-(inf) + i (inf)) returns +(inf) + i3pi /4.
21260     -- clog(+(inf) + i (inf)) returns +(inf) + ipi /4.
21261     -- clog((+-)(inf) + iNaN) returns +(inf) + iNaN.
21262     -- clog(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21263       point exception, for finite y.
21264     -- clog(NaN + i (inf)) returns +(inf) + iNaN.
21265     -- clog(NaN + iNaN) returns NaN + iNaN.
21266 <a name="G.6.4" href="#G.6.4"><b>    G.6.4 Power and absolute-value functions</b></a>
21267 <a name="G.6.4.1" href="#G.6.4.1"><b>    G.6.4.1 The cpow functions</b></a>
21268 1   The cpow functions raise floating-point exceptions if appropriate for the calculation of
21269     the parts of the result, and may raise spurious exceptions.360)
21270 <a name="G.6.4.2" href="#G.6.4.2"><b>    G.6.4.2 The csqrt functions</b></a>
21271 1   -- csqrt(conj(z)) = conj(csqrt(z)).
21272     -- csqrt((+-)0 + i0) returns +0 + i0.
21273     -- csqrt(x + i (inf)) returns +(inf) + i (inf), for all x (including NaN).
21274     -- csqrt(x + iNaN) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21275       point exception, for finite x.
21276     -- csqrt(-(inf) + iy) returns +0 + i (inf), for finite positive-signed y.
21277     -- csqrt(+(inf) + iy) returns +(inf) + i0, for finite positive-signed y.
21278     -- csqrt(-(inf) + iNaN) returns NaN (+-) i (inf) (where the sign of the imaginary part of the
21279       result is unspecified).
21280     -- csqrt(+(inf) + iNaN) returns +(inf) + iNaN.
21281     -- csqrt(NaN + iy) returns NaN + iNaN and optionally raises the ''invalid'' floating-
21282       point exception, for finite y.
21283     -- csqrt(NaN + iNaN) returns NaN + iNaN.
21284
21285
21286
21287
21288     360) This allows cpow( z , c ) to be implemented as cexp(c      clog( z )) without precluding
21289          implementations that treat special cases more carefully.
21290
21291 [<a name="#p539" href="p539">page 539</a>] (<a href="#Contents">Contents</a>)
21292
21293 <a name="G.7" href="#G.7"><b>    G.7 Type-generic math &lt;tgmath.h&gt;</b></a>
21294 1   Type-generic macros that accept complex arguments also accept imaginary arguments. If
21295     an argument is imaginary, the macro expands to an expression whose type is real,
21296     imaginary, or complex, as appropriate for the particular function: if the argument is
21297     imaginary, then the types of cos, cosh, fabs, carg, cimag, and creal are real; the
21298     types of sin, tan, sinh, tanh, asin, atan, asinh, and atanh are imaginary; and
21299     the types of the others are complex.
21300 2   Given an imaginary argument, each of the type-generic macros cos, sin, tan, cosh,
21301     sinh, tanh, asin, atan, asinh, atanh is specified by a formula in terms of real
21302     functions:
21303            cos(iy)      =   cosh(y)
21304            sin(iy)      =   i sinh(y)
21305            tan(iy)      =   i tanh(y)
21306            cosh(iy)     =   cos(y)
21307            sinh(iy)     =   i sin(y)
21308            tanh(iy)     =   i tan(y)
21309            asin(iy)     =   i asinh(y)
21310            atan(iy)     =   i atanh(y)
21311            asinh(iy)    =   i asin(y)
21312            atanh(iy)    =   i atan(y)
21313
21314
21315
21316
21317 [<a name="#p540" href="p540">page 540</a>] (<a href="#Contents">Contents</a>)
21318
21319 <a name="H" href="#H"><b>                                          Annex H</b></a>
21320                                         (informative)
21321                         Language independent arithmetic
21322 <a name="H.1" href="#H.1"><b>    H.1 Introduction</b></a>
21323 1   This annex documents the extent to which the C language supports the ISO/IEC 10967-1
21324     standard for language-independent arithmetic (LIA-1). LIA-1 is more general than
21325     IEC 60559 (<a href="#F">annex F</a>) in that it covers integer and diverse floating-point arithmetics.
21326 <a name="H.2" href="#H.2"><b>    H.2 Types</b></a>
21327 1   The relevant C arithmetic types meet the requirements of LIA-1 types if an
21328     implementation adds notification of exceptional arithmetic operations and meets the 1
21329     unit in the last place (ULP) accuracy requirement (LIA-1 subclause <a href="#5.2.8">5.2.8</a>).
21330 <a name="H.2.1" href="#H.2.1"><b>    H.2.1 Boolean type</b></a>
21331 1   The LIA-1 data type Boolean is implemented by the C data type bool with values of
21332     true and false, all from <a href="#7.18">&lt;stdbool.h&gt;</a>.
21333 <a name="H.2.2" href="#H.2.2"><b>    H.2.2 Integer types</b></a>
21334 1   The signed C integer types int, long int, long long int, and the corresponding
21335     unsigned types are compatible with LIA-1. If an implementation adds support for the
21336     LIA-1 exceptional values ''integer_overflow'' and ''undefined'', then those types are
21337     LIA-1 conformant types. C's unsigned integer types are ''modulo'' in the LIA-1 sense
21338     in that overflows or out-of-bounds results silently wrap. An implementation that defines
21339     signed integer types as also being modulo need not detect integer overflow, in which case,
21340     only integer divide-by-zero need be detected.
21341 2   The parameters for the integer data types can be accessed by the following:
21342     maxint        INT_MAX, LONG_MAX, LLONG_MAX, UINT_MAX, ULONG_MAX,
21343                   ULLONG_MAX
21344     minint        INT_MIN, LONG_MIN, LLONG_MIN
21345 3   The parameter ''bounded'' is always true, and is not provided. The parameter ''minint''
21346     is always 0 for the unsigned types, and is not provided for those types.
21347
21348
21349
21350
21351 [<a name="#p541" href="p541">page 541</a>] (<a href="#Contents">Contents</a>)
21352
21353 <a name="H.2.2.1" href="#H.2.2.1"><b>    H.2.2.1 Integer operations</b></a>
21354 1   The integer operations on integer types are the following:
21355     addI           x + y
21356     subI           x - y
21357     mulI           x * y
21358     divI, divtI    x / y
21359     remI, remtI    x % y
21360     negI           -x
21361     absI           abs(x), labs(x), llabs(x)
21362     eqI            x == y
21363     neqI           x != y
21364     lssI           x &lt; y
21365     leqI           x &lt;= y
21366     gtrI           x &gt; y
21367     geqI           x &gt;= y
21368     where x and y are expressions of the same integer type.
21369 <a name="H.2.3" href="#H.2.3"><b>    H.2.3 Floating-point types</b></a>
21370 1   The C floating-point types float, double, and long double are compatible with
21371     LIA-1. If an implementation adds support for the LIA-1 exceptional values
21372     ''underflow'', ''floating_overflow'', and ''"undefined'', then those types are conformant
21373     with LIA-1. An implementation that uses IEC 60559 floating-point formats and
21374     operations (see <a href="#F">annex F</a>) along with IEC 60559 status flags and traps has LIA-1
21375     conformant types.
21376 <a name="H.2.3.1" href="#H.2.3.1"><b>    H.2.3.1 Floating-point parameters</b></a>
21377 1   The parameters for a floating point data type can be accessed by the following:
21378     r              FLT_RADIX
21379     p              FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG
21380     emax           FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP
21381     emin           FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP
21382 2   The derived constants for the floating point types are accessed by the following:
21383
21384
21385 [<a name="#p542" href="p542">page 542</a>] (<a href="#Contents">Contents</a>)
21386
21387     fmax          FLT_MAX, DBL_MAX, LDBL_MAX
21388     fminN         FLT_MIN, DBL_MIN, LDBL_MIN
21389     epsilon       FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON
21390     rnd_style     FLT_ROUNDS
21391 <a name="H.2.3.2" href="#H.2.3.2"><b>    H.2.3.2 Floating-point operations</b></a>
21392 1   The floating-point operations on floating-point types are the following:
21393     addF          x + y
21394     subF          x - y
21395     mulF          x * y
21396     divF          x / y
21397     negF          -x
21398     absF          fabsf(x), fabs(x), fabsl(x)
21399     exponentF     1.f+logbf(x), <a href="#1.0">1.0</a>+logb(x), 1.L+logbl(x)
21400     scaleF        scalbnf(x, n), scalbn(x, n), scalbnl(x, n),
21401                   scalblnf(x, li), scalbln(x, li), scalblnl(x, li)
21402     intpartF      modff(x, &amp;y), modf(x, &amp;y), modfl(x, &amp;y)
21403     fractpartF    modff(x, &amp;y), modf(x, &amp;y), modfl(x, &amp;y)
21404     eqF           x == y
21405     neqF          x != y
21406     lssF          x &lt; y
21407     leqF          x &lt;= y
21408     gtrF          x &gt; y
21409     geqF          x &gt;= y
21410     where x and y are expressions of the same floating point type, n is of type int, and li
21411     is of type long int.
21412 <a name="H.2.3.3" href="#H.2.3.3"><b>    H.2.3.3 Rounding styles</b></a>
21413 1   The C Standard requires all floating types to use the same radix and rounding style, so
21414     that only one identifier for each is provided to map to LIA-1.
21415 2   The FLT_ROUNDS parameter can be used to indicate the LIA-1 rounding styles:
21416     truncate      FLT_ROUNDS == 0
21417
21418
21419 [<a name="#p543" href="p543">page 543</a>] (<a href="#Contents">Contents</a>)
21420
21421     nearest       FLT_ROUNDS == 1
21422     other         FLT_ROUNDS != 0 &amp;&amp; FLT_ROUNDS != 1
21423     provided that an implementation extends FLT_ROUNDS to cover the rounding style used
21424     in all relevant LIA-1 operations, not just addition as in C.
21425 <a name="H.2.4" href="#H.2.4"><b>    H.2.4 Type conversions</b></a>
21426 1   The LIA-1 type conversions are the following type casts:
21427     cvtI' (-&gt;) I     (int)i, (long int)i, (long long int)i,
21428                   (unsigned int)i, (unsigned long int)i,
21429                   (unsigned long long int)i
21430     cvtF (-&gt;) I      (int)x, (long int)x, (long long int)x,
21431                   (unsigned int)x, (unsigned long int)x,
21432                   (unsigned long long int)x
21433     cvtI (-&gt;) F      (float)i, (double)i, (long double)i
21434     cvtF' (-&gt;) F     (float)x, (double)x, (long double)x
21435 2   In the above conversions from floating to integer, the use of (cast)x can be replaced with
21436     (cast)round(x), (cast)rint(x), (cast)nearbyint(x), (cast)trunc(x),
21437     (cast)ceil(x), or (cast)floor(x). In addition, C's floating-point to integer
21438     conversion functions, lrint(), llrint(), lround(), and llround(), can be
21439     used. They all meet LIA-1's requirements on floating to integer rounding for in-range
21440     values. For out-of-range values, the conversions shall silently wrap for the modulo types.
21441 3   The fmod() function is useful for doing silent wrapping to unsigned integer types, e.g.,
21442     fmod( fabs(rint(x)), 65536.0 ) or (0.0 &lt;= (y = fmod( rint(x),
21443     65536.0 )) ? y : 65536.0 + y) will compute an integer value in the range 0.0
21444     to 65535.0 which can then be cast to unsigned short int. But, the
21445     remainder() function is not useful for doing silent wrapping to signed integer types,
21446     e.g., remainder( rint(x), 65536.0 ) will compute an integer value in the
21447     range -32767.0 to +32768.0 which is not, in general, in the range of signed short
21448     int.
21449 4   C's conversions (casts) from floating-point to floating-point can meet LIA-1
21450     requirements if an implementation uses round-to-nearest (IEC 60559 default).
21451 5   C's conversions (casts) from integer to floating-point can meet LIA-1 requirements if an
21452     implementation uses round-to-nearest.
21453
21454
21455
21456
21457 [<a name="#p544" href="p544">page 544</a>] (<a href="#Contents">Contents</a>)
21458
21459 <a name="H.3" href="#H.3"><b>    H.3 Notification</b></a>
21460 1   Notification is the process by which a user or program is informed that an exceptional
21461     arithmetic operation has occurred. C's operations are compatible with LIA-1 in that C
21462     allows an implementation to cause a notification to occur when any arithmetic operation
21463     returns an exceptional value as defined in LIA-1 clause 5.
21464 <a name="H.3.1" href="#H.3.1"><b>    H.3.1 Notification alternatives</b></a>
21465 1   LIA-1 requires at least the following two alternatives for handling of notifications:
21466     setting indicators or trap-and-terminate. LIA-1 allows a third alternative: trap-and-
21467     resume.
21468 2   An implementation need only support a given notification alternative for the entire
21469     program. An implementation may support the ability to switch between notification
21470     alternatives during execution, but is not required to do so. An implementation can
21471     provide separate selection for each kind of notification, but this is not required.
21472 3   C allows an implementation to provide notification. C's SIGFPE (for traps) and
21473     FE_INVALID, FE_DIVBYZERO, FE_OVERFLOW, FE_UNDERFLOW (for indicators)
21474     can provide LIA-1 notification.
21475 4   C's signal handlers are compatible with LIA-1. Default handling of SIGFPE can
21476     provide trap-and-terminate behavior, except for those LIA-1 operations implemented by
21477     math library function calls. User-provided signal handlers for SIGFPE allow for trap-
21478     and-resume behavior with the same constraint.
21479 <a name="H.3.1.1" href="#H.3.1.1"><b>    H.3.1.1 Indicators</b></a>
21480 1   C's <a href="#7.6">&lt;fenv.h&gt;</a> status flags are compatible with the LIA-1 indicators.
21481 2   The following mapping is for floating-point types:
21482     undefined                FE_INVALID, FE_DIVBYZERO
21483     floating_overflow         FE_OVERFLOW
21484     underflow                FE_UNDERFLOW
21485 3   The floating-point indicator interrogation and manipulation operations are:
21486     set_indicators          feraiseexcept(i)
21487     clear_indicators        feclearexcept(i)
21488     test_indicators         fetestexcept(i)
21489     current_indicators      fetestexcept(FE_ALL_EXCEPT)
21490     where i is an expression of type int representing a subset of the LIA-1 indicators.
21491 4   C allows an implementation to provide the following LIA-1 required behavior: at
21492     program termination if any indicator is set the implementation shall send an unambiguous
21493 [<a name="#p545" href="p545">page 545</a>] (<a href="#Contents">Contents</a>)
21494
21495     and ''hard to ignore'' message (see LIA-1 subclause <a href="#6.1.2">6.1.2</a>)
21496 5   LIA-1 does not make the distinction between floating-point and integer for ''undefined''.
21497     This documentation makes that distinction because <a href="#7.6">&lt;fenv.h&gt;</a> covers only the floating-
21498     point indicators.
21499 <a name="H.3.1.2" href="#H.3.1.2"><b>    H.3.1.2 Traps</b></a>
21500 1   C is compatible with LIA-1's trap requirements for arithmetic operations, but not for
21501     math library functions (which are not permitted to invoke a user's signal handler for
21502     SIGFPE). An implementation can provide an alternative of notification through
21503     termination with a ''hard-to-ignore'' message (see LIA-1 subclause <a href="#6.1.3">6.1.3</a>).
21504 2   LIA-1 does not require that traps be precise.
21505 3   C does require that SIGFPE be the signal corresponding to arithmetic exceptions, if there
21506     is any signal raised for them.
21507 4   C supports signal handlers for SIGFPE and allows trapping of arithmetic exceptions.
21508     When arithmetic exceptions do trap, C's signal-handler mechanism allows trap-and-
21509     terminate (either default implementation behavior or user replacement for it) or trap-and-
21510     resume, at the programmer's option.
21511
21512
21513
21514
21515 [<a name="#p546" href="p546">page 546</a>] (<a href="#Contents">Contents</a>)
21516
21517 <a name="I" href="#I"><b>                                           Annex I</b></a>
21518                                         (informative)
21519                                    Common warnings
21520 1   An implementation may generate warnings in many situations, none of which are
21521     specified as part of this International Standard. The following are a few of the more
21522     common situations.
21523 2   -- 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>).
21524     -- A block with initialization of an object that has automatic storage duration is jumped
21525       into (<a href="#6.2.4">6.2.4</a>).
21526     -- An implicit narrowing conversion is encountered, such as the assignment of a long
21527       int or a double to an int, or a pointer to void to a pointer to any type other than
21528       a character type (<a href="#6.3">6.3</a>).
21529     -- A hexadecimal floating constant cannot be represented exactly in its evaluation format
21530       (<a href="#6.4.4.2">6.4.4.2</a>).
21531     -- An integer character constant includes more than one character or a wide character
21532       constant includes more than one multibyte character (<a href="#6.4.4.4">6.4.4.4</a>).
21533     -- The characters /* are found in a comment (<a href="#6.4.7">6.4.7</a>).
21534     -- An ''unordered'' binary operator (not comma, &amp;&amp;, or ||) contains a side effect to an
21535       lvalue in one operand, and a side effect to, or an access to the value of, the identical
21536       lvalue in the other operand (<a href="#6.5">6.5</a>).
21537     -- A function is called but no prototype has been supplied (<a href="#6.5.2.2">6.5.2.2</a>).
21538     -- The arguments in a function call do not agree in number and type with those of the
21539       parameters in a function definition that is not a prototype (<a href="#6.5.2.2">6.5.2.2</a>).
21540     -- An object is defined but not used (<a href="#6.7">6.7</a>).
21541     -- A value is given to an object of an enumerated type other than by assignment of an
21542       enumeration constant that is a member of that type, or an enumeration object that has
21543       the same type, or the value of a function that returns the same enumerated type
21544       (<a href="#6.7.2.2">6.7.2.2</a>).
21545     -- An aggregate has a partly bracketed initialization (<a href="#6.7.8">6.7.8</a>).
21546     -- A statement cannot be reached (<a href="#6.8">6.8</a>).
21547     -- A statement with no apparent effect is encountered (<a href="#6.8">6.8</a>).
21548     -- A constant expression is used as the controlling expression of a selection statement
21549       (<a href="#6.8.4">6.8.4</a>).
21550 [<a name="#p547" href="p547">page 547</a>] (<a href="#Contents">Contents</a>)
21551
21552 -- An incorrectly formed preprocessing group is encountered while skipping a
21553   preprocessing group (<a href="#6.10.1">6.10.1</a>).
21554 -- An unrecognized #pragma directive is encountered (<a href="#6.10.6">6.10.6</a>).
21555
21556
21557
21558
21559 [<a name="#p548" href="p548">page 548</a>] (<a href="#Contents">Contents</a>)
21560
21561 <a name="J" href="#J"><b>                                            Annex J</b></a>
21562                                          (informative)
21563                                       Portability issues
21564 1   This annex collects some information about portability that appears in this International
21565     Standard.
21566 <a name="J.1" href="#J.1"><b>    J.1 Unspecified behavior</b></a>
21567 1   The following are unspecified:
21568     -- The manner and timing of static initialization (<a href="#5.1.2">5.1.2</a>).
21569     -- The termination status returned to the hosted environment if the return type of main
21570       is not compatible with int (<a href="#5.1.2.2.3">5.1.2.2.3</a>).
21571     -- The behavior of the display device if a printing character is written when the active
21572       position is at the final position of a line (<a href="#5.2.2">5.2.2</a>).
21573     -- The behavior of the display device if a backspace character is written when the active
21574       position is at the initial position of a line (<a href="#5.2.2">5.2.2</a>).
21575     -- The behavior of the display device if a horizontal tab character is written when the
21576       active position is at or past the last defined horizontal tabulation position (<a href="#5.2.2">5.2.2</a>).
21577     -- The behavior of the display device if a vertical tab character is written when the active
21578       position is at or past the last defined vertical tabulation position (<a href="#5.2.2">5.2.2</a>).
21579     -- How an extended source character that does not correspond to a universal character
21580       name counts toward the significant initial characters in an external identifier (<a href="#5.2.4.1">5.2.4.1</a>).
21581     -- Many aspects of the representations of types (<a href="#6.2.6">6.2.6</a>).
21582     -- The value of padding bytes when storing values in structures or unions (<a href="#6.2.6.1">6.2.6.1</a>).
21583     -- The values of bytes that correspond to union members other than the one last stored
21584       into (<a href="#6.2.6.1">6.2.6.1</a>).
21585     -- The representation used when storing a value in an object that has more than one
21586       object representation for that value (<a href="#6.2.6.1">6.2.6.1</a>).
21587     -- The values of any padding bits in integer representations (<a href="#6.2.6.2">6.2.6.2</a>).
21588     -- Whether certain operators can generate negative zeros and whether a negative zero
21589       becomes a normal zero when stored in an object (<a href="#6.2.6.2">6.2.6.2</a>).
21590     -- Whether two string literals result in distinct arrays (<a href="#6.4.5">6.4.5</a>).
21591     -- The order in which subexpressions are evaluated and the order in which side effects
21592       take place, except as specified for the function-call (), &amp;&amp;, ||, ? :, and comma
21593 [<a name="#p549" href="p549">page 549</a>] (<a href="#Contents">Contents</a>)
21594
21595       operators (<a href="#6.5">6.5</a>).
21596 -- The order in which the function designator, arguments, and subexpressions within the
21597   arguments are evaluated in a function call (<a href="#6.5.2.2">6.5.2.2</a>).
21598 -- The order of side effects among compound literal initialization list expressions
21599   (<a href="#6.5.2.5">6.5.2.5</a>).
21600 -- The order in which the operands of an assignment operator are evaluated (<a href="#6.5.16">6.5.16</a>).
21601 -- The alignment of the addressable storage unit allocated to hold a bit-field (<a href="#6.7.2.1">6.7.2.1</a>).
21602 -- Whether a call to an inline function uses the inline definition or the external definition
21603   of the function (<a href="#6.7.4">6.7.4</a>).
21604 -- Whether or not a size expression is evaluated when it is part of the operand of a
21605   sizeof operator and changing the value of the size expression would not affect the
21606   result of the operator (<a href="#6.7.6.2">6.7.6.2</a>).
21607 -- The order in which any side effects occur among the initialization list expressions in
21608   an initializer (<a href="#6.7.9">6.7.9</a>).
21609 -- The layout of storage for function parameters (<a href="#6.9.1">6.9.1</a>).
21610 -- When a fully expanded macro replacement list contains a function-like macro name
21611   as its last preprocessing token and the next preprocessing token from the source file is
21612   a (, and the fully expanded replacement of that macro ends with the name of the first
21613   macro and the next preprocessing token from the source file is again a (, whether that
21614   is considered a nested replacement (<a href="#6.10.3">6.10.3</a>).
21615 -- The order in which # and ## operations are evaluated during macro substitution
21616   (<a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.3.3">6.10.3.3</a>).
21617 -- The state of the floating-point status flags when execution passes from a part of the
21618   program translated with FENV_ACCESS ''off'' to a part translated with
21619   FENV_ACCESS ''on'' (<a href="#7.6.1">7.6.1</a>).
21620 -- The order in which feraiseexcept raises floating-point exceptions, except as
21621   stated in <a href="#F.8.6">F.8.6</a> (<a href="#7.6.2.3">7.6.2.3</a>).
21622 -- Whether math_errhandling is a macro or an identifier with external linkage
21623   (<a href="#7.12">7.12</a>).
21624 -- The results of the frexp functions when the specified value is not a floating-point
21625   number (<a href="#7.12.6.4">7.12.6.4</a>).
21626 -- The numeric result of the ilogb functions when the correct value is outside the
21627   range of the return type (<a href="#7.12.6.5">7.12.6.5</a>, <a href="#F.10.3.5">F.10.3.5</a>).
21628 -- The result of rounding when the value is out of range (<a href="#7.12.9.5">7.12.9.5</a>, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.10.6.5">F.10.6.5</a>).
21629
21630
21631 [<a name="#p550" href="p550">page 550</a>] (<a href="#Contents">Contents</a>)
21632
21633 -- The value stored by the remquo functions in the object pointed to by quo when y is
21634   zero (<a href="#7.12.10.3">7.12.10.3</a>).
21635 -- Whether a comparison macro argument that is represented in a format wider than its
21636   semantic type is converted to the semantic type (<a href="#7.12.14">7.12.14</a>).
21637 -- Whether setjmp is a macro or an identifier with external linkage (<a href="#7.13">7.13</a>).
21638 -- Whether va_copy and va_end are macros or identifiers with external linkage
21639   (<a href="#7.16.1">7.16.1</a>).
21640 -- The hexadecimal digit before the decimal point when a non-normalized floating-point
21641   number is printed with an a or A conversion specifier (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
21642 -- The value of the file position indicator after a successful call to the ungetc function
21643   for a text stream, or the ungetwc function for any stream, until all pushed-back
21644   characters are read or discarded (<a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.28.3.10">7.28.3.10</a>).
21645 -- The details of the value stored by the fgetpos function (<a href="#7.21.9.1">7.21.9.1</a>).
21646 -- The details of the value returned by the ftell function for a text stream (<a href="#7.21.9.4">7.21.9.4</a>).
21647 -- Whether the strtod, strtof, strtold, wcstod, wcstof, and wcstold
21648   functions convert a minus-signed sequence to a negative number directly or by
21649   negating the value resulting from converting the corresponding unsigned sequence
21650   (<a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>).
21651 -- The order and contiguity of storage allocated by successive calls to the calloc,
21652   malloc, and realloc functions (<a href="#7.22.3">7.22.3</a>).
21653 -- The amount of storage allocated by a successful call to the calloc, malloc, or
21654   realloc function when 0 bytes was requested (<a href="#7.22.3">7.22.3</a>).
21655 -- Which of two elements that compare as equal is matched by the bsearch function
21656   (<a href="#7.22.5.1">7.22.5.1</a>).
21657 -- The order of two elements that compare as equal in an array sorted by the qsort
21658   function (<a href="#7.22.5.2">7.22.5.2</a>).
21659 -- The encoding of the calendar time returned by the time function (<a href="#7.26.2.4">7.26.2.4</a>).
21660 -- The characters stored by the strftime or wcsftime function if any of the time
21661   values being converted is outside the normal range (<a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.5.1">7.28.5.1</a>).
21662 -- The conversion state after an encoding error occurs (<a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>,
21663   <a href="#7.28.6.4.2">7.28.6.4.2</a>,
21664 -- The resulting value when the ''invalid'' floating-point exception is raised during
21665   IEC 60559 floating to integer conversion (<a href="#F.4">F.4</a>).
21666
21667
21668
21669 [<a name="#p551" href="p551">page 551</a>] (<a href="#Contents">Contents</a>)
21670
21671     -- Whether conversion of non-integer IEC 60559 floating values to integer raises the
21672       ''inexact'' floating-point exception (<a href="#F.4">F.4</a>).
21673     -- Whether or when library functions in <a href="#7.12">&lt;math.h&gt;</a> raise the ''inexact'' floating-point
21674       exception in an IEC 60559 conformant implementation (<a href="#F.10">F.10</a>).
21675     -- Whether or when library functions in <a href="#7.12">&lt;math.h&gt;</a> raise an undeserved ''underflow''
21676       floating-point exception in an IEC 60559 conformant implementation (<a href="#F.10">F.10</a>).
21677     -- The exponent value stored by frexp for a NaN or infinity (<a href="#F.10.3.4">F.10.3.4</a>).
21678     -- The numeric result returned by the lrint, llrint, lround, and llround
21679       functions if the rounded value is outside the range of the return type (<a href="#F.10.6.5">F.10.6.5</a>,
21680       <a href="#F.10.6.7">F.10.6.7</a>).
21681     -- The sign of one part of the complex result of several math functions for certain
21682       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>,
21683       <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>).
21684 <a name="J.2" href="#J.2"><b>    J.2 Undefined behavior</b></a>
21685 1   The behavior is undefined in the following circumstances:
21686     -- A ''shall'' or ''shall not'' requirement that appears outside of a constraint is violated
21687       (clause 4).
21688     -- A nonempty source file does not end in a new-line character which is not immediately
21689       preceded by a backslash character or ends in a partial preprocessing token or
21690       comment (<a href="#5.1.1.2">5.1.1.2</a>).
21691     -- Token concatenation produces a character sequence matching the syntax of a
21692       universal character name (<a href="#5.1.1.2">5.1.1.2</a>).
21693     -- A program in a hosted environment does not define a function named main using one
21694       of the specified forms (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
21695     -- The execution of a program contains a data race (<a href="#5.1.2.4">5.1.2.4</a>).
21696     -- A character not in the basic source character set is encountered in a source file, except
21697       in an identifier, a character constant, a string literal, a header name, a comment, or a
21698       preprocessing token that is never converted to a token (<a href="#5.2.1">5.2.1</a>).
21699     -- An identifier, comment, string literal, character constant, or header name contains an
21700       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>).
21701     -- The same identifier has both internal and external linkage in the same translation unit
21702       (<a href="#6.2.2">6.2.2</a>).
21703     -- An object is referred to outside of its lifetime (<a href="#6.2.4">6.2.4</a>).
21704
21705
21706
21707 [<a name="#p552" href="p552">page 552</a>] (<a href="#Contents">Contents</a>)
21708
21709 -- The value of a pointer to an object whose lifetime has ended is used (<a href="#6.2.4">6.2.4</a>).
21710 -- The value of an object with automatic storage duration is used while it is
21711   indeterminate (<a href="#6.2.4">6.2.4</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.8">6.8</a>).
21712 -- A trap representation is read by an lvalue expression that does not have character type
21713   (<a href="#6.2.6.1">6.2.6.1</a>).
21714 -- A trap representation is produced by a side effect that modifies any part of the object
21715   using an lvalue expression that does not have character type (<a href="#6.2.6.1">6.2.6.1</a>).
21716 -- The operands to certain operators are such that they could produce a negative zero
21717   result, but the implementation does not support negative zeros (<a href="#6.2.6.2">6.2.6.2</a>).
21718 -- Two declarations of the same object or function specify types that are not compatible
21719   (<a href="#6.2.7">6.2.7</a>).
21720 -- A program requires the formation of a composite type from a variable length array
21721   type whose size is specified by an expression that is not evaluated (<a href="#6.2.7">6.2.7</a>).
21722 -- Conversion to or from an integer type produces a value outside the range that can be
21723   represented (<a href="#6.3.1.4">6.3.1.4</a>).
21724 -- Demotion of one real floating type to another produces a value outside the range that
21725   can be represented (<a href="#6.3.1.5">6.3.1.5</a>).
21726 -- An lvalue does not designate an object when evaluated (<a href="#6.3.2.1">6.3.2.1</a>).
21727 -- A non-array lvalue with an incomplete type is used in a context that requires the value
21728   of the designated object (<a href="#6.3.2.1">6.3.2.1</a>).
21729 -- An lvalue designating an object of automatic storage duration that could have been
21730   declared with the register storage class is used in a context that requires the value
21731   of the designated object, but the object is uninitialized. (<a href="#6.3.2.1">6.3.2.1</a>).
21732 -- An lvalue having array type is converted to a pointer to the initial element of the
21733   array, and the array object has register storage class (<a href="#6.3.2.1">6.3.2.1</a>).
21734 -- An attempt is made to use the value of a void expression, or an implicit or explicit
21735   conversion (except to void) is applied to a void expression (<a href="#6.3.2.2">6.3.2.2</a>).
21736 -- Conversion of a pointer to an integer type produces a value outside the range that can
21737   be represented (<a href="#6.3.2.3">6.3.2.3</a>).
21738 -- Conversion between two pointer types produces a result that is incorrectly aligned
21739   (<a href="#6.3.2.3">6.3.2.3</a>).
21740 -- A pointer is used to call a function whose type is not compatible with the referenced
21741   type (<a href="#6.3.2.3">6.3.2.3</a>).
21742
21743
21744
21745 [<a name="#p553" href="p553">page 553</a>] (<a href="#Contents">Contents</a>)
21746
21747 -- An unmatched ' or " character is encountered on a logical source line during
21748   tokenization (<a href="#6.4">6.4</a>).
21749 -- A reserved keyword token is used in translation phase 7 or 8 for some purpose other
21750   than as a keyword (<a href="#6.4.1">6.4.1</a>).
21751 -- A universal character name in an identifier does not designate a character whose
21752   encoding falls into one of the specified ranges (<a href="#6.4.2.1">6.4.2.1</a>).
21753 -- The initial character of an identifier is a universal character name designating a digit
21754   (<a href="#6.4.2.1">6.4.2.1</a>).
21755 -- Two identifiers differ only in nonsignificant characters (<a href="#6.4.2.1">6.4.2.1</a>).
21756 -- The identifier __func__ is explicitly declared (<a href="#6.4.2.2">6.4.2.2</a>).
21757 -- The program attempts to modify a string literal (<a href="#6.4.5">6.4.5</a>).
21758 -- The characters ', \, ", //, or /* occur in the sequence between the &lt; and &gt;
21759   delimiters, or the characters ', \, //, or /* occur in the sequence between the "
21760   delimiters, in a header name preprocessing token (<a href="#6.4.7">6.4.7</a>).
21761 -- A side effect on a scalar object is unsequenced relative to either a different side effect
21762   on the same scalar object or a value computation using the value of the same scalar
21763   object (<a href="#6.5">6.5</a>).
21764 -- An exceptional condition occurs during the evaluation of an expression (<a href="#6.5">6.5</a>).
21765 -- An object has its stored value accessed other than by an lvalue of an allowable type
21766   (<a href="#6.5">6.5</a>).
21767 -- For a call to a function without a function prototype in scope, the number of
21768   arguments does not equal the number of parameters (<a href="#6.5.2.2">6.5.2.2</a>).
21769 -- For call to a function without a function prototype in scope where the function is
21770   defined with a function prototype, either the prototype ends with an ellipsis or the
21771   types of the arguments after promotion are not compatible with the types of the
21772   parameters (<a href="#6.5.2.2">6.5.2.2</a>).
21773 -- For a call to a function without a function prototype in scope where the function is not
21774   defined with a function prototype, the types of the arguments after promotion are not
21775   compatible with those of the parameters after promotion (with certain exceptions)
21776   (<a href="#6.5.2.2">6.5.2.2</a>).
21777 -- A function is defined with a type that is not compatible with the type (of the
21778   expression) pointed to by the expression that denotes the called function (<a href="#6.5.2.2">6.5.2.2</a>).
21779 -- A member of an _Atomic-qualified structure or union is accessed (<a href="#6.5.2.3">6.5.2.3</a>).
21780 -- The operand of the unary * operator has an invalid value (<a href="#6.5.3.2">6.5.3.2</a>).
21781
21782
21783 [<a name="#p554" href="p554">page 554</a>] (<a href="#Contents">Contents</a>)
21784
21785 -- A pointer is converted to other than an integer or pointer type (<a href="#6.5.4">6.5.4</a>).
21786 -- The value of the second operand of the / or % operator is zero (<a href="#6.5.5">6.5.5</a>).
21787 -- Addition or subtraction of a pointer into, or just beyond, an array object and an
21788   integer type produces a result that does not point into, or just beyond, the same array
21789   object (<a href="#6.5.6">6.5.6</a>).
21790 -- Addition or subtraction of a pointer into, or just beyond, an array object and an
21791   integer type produces a result that points just beyond the array object and is used as
21792   the operand of a unary * operator that is evaluated (<a href="#6.5.6">6.5.6</a>).
21793 -- Pointers that do not point into, or just beyond, the same array object are subtracted
21794   (<a href="#6.5.6">6.5.6</a>).
21795 -- An array subscript is out of range, even if an object is apparently accessible with the
21796   given subscript (as in the lvalue expression a[1][7] given the declaration int
21797   a[4][5]) (<a href="#6.5.6">6.5.6</a>).
21798 -- The result of subtracting two pointers is not representable in an object of type
21799   ptrdiff_t (<a href="#6.5.6">6.5.6</a>).
21800 -- An expression is shifted by a negative number or by an amount greater than or equal
21801   to the width of the promoted expression (<a href="#6.5.7">6.5.7</a>).
21802 -- An expression having signed promoted type is left-shifted and either the value of the
21803   expression is negative or the result of shifting would be not be representable in the
21804   promoted type (<a href="#6.5.7">6.5.7</a>).
21805 -- Pointers that do not point to the same aggregate or union (nor just beyond the same
21806   array object) are compared using relational operators (<a href="#6.5.8">6.5.8</a>).
21807 -- An object is assigned to an inexactly overlapping object or to an exactly overlapping
21808   object with incompatible type (<a href="#6.5.16.1">6.5.16.1</a>).
21809 -- An expression that is required to be an integer constant expression does not have an
21810   integer type; has operands that are not integer constants, enumeration constants,
21811   character constants, sizeof expressions whose results are integer constants, or
21812   immediately-cast floating constants; or contains casts (outside operands to sizeof
21813   operators) other than conversions of arithmetic types to integer types (<a href="#6.6">6.6</a>).
21814 -- A constant expression in an initializer is not, or does not evaluate to, one of the
21815   following: an arithmetic constant expression, a null pointer constant, an address
21816   constant, or an address constant for a complete object type plus or minus an integer
21817   constant expression (<a href="#6.6">6.6</a>).
21818 -- An arithmetic constant expression does not have arithmetic type; has operands that
21819   are not integer constants, floating constants, enumeration constants, character
21820   constants, or sizeof expressions; or contains casts (outside operands to sizeof
21821
21822 [<a name="#p555" href="p555">page 555</a>] (<a href="#Contents">Contents</a>)
21823
21824    operators) other than conversions of arithmetic types to arithmetic types (<a href="#6.6">6.6</a>).
21825 -- The value of an object is accessed by an array-subscript [], member-access . or -&gt;,
21826   address &amp;, or indirection * operator or a pointer cast in creating an address constant
21827   (<a href="#6.6">6.6</a>).
21828 -- An identifier for an object is declared with no linkage and the type of the object is
21829   incomplete after its declarator, or after its init-declarator if it has an initializer (<a href="#6.7">6.7</a>).
21830 -- A function is declared at block scope with an explicit storage-class specifier other
21831   than extern (<a href="#6.7.1">6.7.1</a>).
21832 -- A structure or union is defined as containing no named members, no anonymous
21833   structures, and no anonymous unions (<a href="#6.7.2.1">6.7.2.1</a>).
21834 -- An attempt is made to access, or generate a pointer to just past, a flexible array
21835   member of a structure when the referenced object provides no elements for that array
21836   (<a href="#6.7.2.1">6.7.2.1</a>).
21837 -- When the complete type is needed, an incomplete structure or union type is not
21838   completed in the same scope by another declaration of the tag that defines the content
21839   (<a href="#6.7.2.3">6.7.2.3</a>).
21840 -- An attempt is made to modify an object defined with a const-qualified type through
21841   use of an lvalue with non-const-qualified type (<a href="#6.7.3">6.7.3</a>).
21842 -- An attempt is made to refer to an object defined with a volatile-qualified type through
21843   use of an lvalue with non-volatile-qualified type (<a href="#6.7.3">6.7.3</a>).
21844 -- An attempt is made to refer to an object defined with an _Atomic-qualified type
21845   through use of an lvalue with non-_Atomic-qualified type (<a href="#6.7.3">6.7.3</a>).
21846 -- The specification of a function type includes any type qualifiers (<a href="#6.7.3">6.7.3</a>).
21847 -- Two qualified types that are required to be compatible do not have the identically
21848   qualified version of a compatible type (<a href="#6.7.3">6.7.3</a>).
21849 -- An object which has been modified is accessed through a restrict-qualified pointer to
21850   a const-qualified type, or through a restrict-qualified pointer and another pointer that
21851   are not both based on the same object (<a href="#6.7.3.1">6.7.3.1</a>).
21852 -- A restrict-qualified pointer is assigned a value based on another restricted pointer
21853   whose associated block neither began execution before the block associated with this
21854   pointer, nor ended before the assignment (<a href="#6.7.3.1">6.7.3.1</a>).
21855 -- A function with external linkage is declared with an inline function specifier, but is
21856   not also defined in the same translation unit (<a href="#6.7.4">6.7.4</a>).
21857 -- A function declared with a _Noreturn function specifier returns to its caller (<a href="#6.7.4">6.7.4</a>).
21858
21859
21860 [<a name="#p556" href="p556">page 556</a>] (<a href="#Contents">Contents</a>)
21861
21862 -- The definition of an object has an alignment specifier and another declaration of that
21863   object has a different alignment specifier (<a href="#6.7.5">6.7.5</a>).
21864 -- Declarations of an object in different translation units have different alignment
21865   specifiers (<a href="#6.7.5">6.7.5</a>).
21866 -- Two pointer types that are required to be compatible are not identically qualified, or
21867   are not pointers to compatible types (<a href="#6.7.6.1">6.7.6.1</a>).
21868 -- The size expression in an array declaration is not a constant expression and evaluates
21869   at program execution time to a nonpositive value (<a href="#6.7.6.2">6.7.6.2</a>).
21870 -- In a context requiring two array types to be compatible, they do not have compatible
21871   element types, or their size specifiers evaluate to unequal values (<a href="#6.7.6.2">6.7.6.2</a>).
21872 -- A declaration of an array parameter includes the keyword static within the [ and
21873   ] and the corresponding argument does not provide access to the first element of an
21874   array with at least the specified number of elements (<a href="#6.7.6.3">6.7.6.3</a>).
21875 -- A storage-class specifier or type qualifier modifies the keyword void as a function
21876   parameter type list (<a href="#6.7.6.3">6.7.6.3</a>).
21877 -- In a context requiring two function types to be compatible, they do not have
21878   compatible return types, or their parameters disagree in use of the ellipsis terminator
21879   or the number and type of parameters (after default argument promotion, when there
21880   is no parameter type list or when one type is specified by a function definition with an
21881   identifier list) (<a href="#6.7.6.3">6.7.6.3</a>).
21882 -- The value of an unnamed member of a structure or union is used (<a href="#6.7.9">6.7.9</a>).
21883 -- The initializer for a scalar is neither a single expression nor a single expression
21884   enclosed in braces (<a href="#6.7.9">6.7.9</a>).
21885 -- The initializer for a structure or union object that has automatic storage duration is
21886   neither an initializer list nor a single expression that has compatible structure or union
21887   type (<a href="#6.7.9">6.7.9</a>).
21888 -- The initializer for an aggregate or union, other than an array initialized by a string
21889   literal, is not a brace-enclosed list of initializers for its elements or members (<a href="#6.7.9">6.7.9</a>).
21890 -- An identifier with external linkage is used, but in the program there does not exist
21891   exactly one external definition for the identifier, or the identifier is not used and there
21892   exist multiple external definitions for the identifier (<a href="#6.9">6.9</a>).
21893 -- A function definition includes an identifier list, but the types of the parameters are not
21894   declared in a following declaration list (<a href="#6.9.1">6.9.1</a>).
21895 -- An adjusted parameter type in a function definition is not a complete object type
21896   (<a href="#6.9.1">6.9.1</a>).
21897
21898 [<a name="#p557" href="p557">page 557</a>] (<a href="#Contents">Contents</a>)
21899
21900 -- A function that accepts a variable number of arguments is defined without a
21901   parameter type list that ends with the ellipsis notation (<a href="#6.9.1">6.9.1</a>).
21902 -- The } that terminates a function is reached, and the value of the function call is used
21903   by the caller (<a href="#6.9.1">6.9.1</a>).
21904 -- An identifier for an object with internal linkage and an incomplete type is declared
21905   with a tentative definition (<a href="#6.9.2">6.9.2</a>).
21906 -- The token defined is generated during the expansion of a #if or #elif
21907   preprocessing directive, or the use of the defined unary operator does not match
21908   one of the two specified forms prior to macro replacement (<a href="#6.10.1">6.10.1</a>).
21909 -- The #include preprocessing directive that results after expansion does not match
21910   one of the two header name forms (<a href="#6.10.2">6.10.2</a>).
21911 -- The character sequence in an #include preprocessing directive does not start with a
21912   letter (<a href="#6.10.2">6.10.2</a>).
21913 -- There are sequences of preprocessing tokens within the list of macro arguments that
21914   would otherwise act as preprocessing directives (<a href="#6.10.3">6.10.3</a>).
21915 -- The result of the preprocessing operator # is not a valid character string literal
21916   (<a href="#6.10.3.2">6.10.3.2</a>).
21917 -- The result of the preprocessing operator ## is not a valid preprocessing token
21918   (<a href="#6.10.3.3">6.10.3.3</a>).
21919 -- The #line preprocessing directive that results after expansion does not match one of
21920   the two well-defined forms, or its digit sequence specifies zero or a number greater
21921   than 2147483647 (<a href="#6.10.4">6.10.4</a>).
21922 -- A non-STDC #pragma preprocessing directive that is documented as causing
21923   translation failure or some other form of undefined behavior is encountered (<a href="#6.10.6">6.10.6</a>).
21924 -- A #pragma STDC preprocessing directive does not match one of the well-defined
21925   forms (<a href="#6.10.6">6.10.6</a>).
21926 -- The name of a predefined macro, or the identifier defined, is the subject of a
21927   #define or #undef preprocessing directive (<a href="#6.10.8">6.10.8</a>).
21928 -- An attempt is made to copy an object to an overlapping object by use of a library
21929   function, other than as explicitly allowed (e.g., memmove) (clause 7).
21930 -- A file with the same name as one of the standard headers, not provided as part of the
21931   implementation, is placed in any of the standard places that are searched for included
21932   source files (<a href="#7.1.2">7.1.2</a>).
21933 -- A header is included within an external declaration or definition (<a href="#7.1.2">7.1.2</a>).
21934
21935
21936 [<a name="#p558" href="p558">page 558</a>] (<a href="#Contents">Contents</a>)
21937
21938 -- A function, object, type, or macro that is specified as being declared or defined by
21939   some standard header is used before any header that declares or defines it is included
21940   (<a href="#7.1.2">7.1.2</a>).
21941 -- A standard header is included while a macro is defined with the same name as a
21942   keyword (<a href="#7.1.2">7.1.2</a>).
21943 -- The program attempts to declare a library function itself, rather than via a standard
21944   header, but the declaration does not have external linkage (<a href="#7.1.2">7.1.2</a>).
21945 -- The program declares or defines a reserved identifier, other than as allowed by <a href="#7.1.4">7.1.4</a>
21946   (<a href="#7.1.3">7.1.3</a>).
21947 -- The program removes the definition of a macro whose name begins with an
21948   underscore and either an uppercase letter or another underscore (<a href="#7.1.3">7.1.3</a>).
21949 -- An argument to a library function has an invalid value or a type not expected by a
21950   function with variable number of arguments (<a href="#7.1.4">7.1.4</a>).
21951 -- The pointer passed to a library function array parameter does not have a value such
21952   that all address computations and object accesses are valid (<a href="#7.1.4">7.1.4</a>).
21953 -- The macro definition of assert is suppressed in order to access an actual function
21954   (<a href="#7.2">7.2</a>).
21955 -- The argument to the assert macro does not have a scalar type (<a href="#7.2">7.2</a>).
21956 -- The CX_LIMITED_RANGE, FENV_ACCESS, or FP_CONTRACT pragma is used in
21957   any context other than outside all external declarations or preceding all explicit
21958   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>).
21959 -- The value of an argument to a character handling function is neither equal to the value
21960   of EOF nor representable as an unsigned char (<a href="#7.4">7.4</a>).
21961 -- A macro definition of errno is suppressed in order to access an actual object, or the
21962   program defines an identifier with the name errno (<a href="#7.5">7.5</a>).
21963 -- Part of the program tests floating-point status flags, sets floating-point control modes,
21964   or runs under non-default mode settings, but was translated with the state for the
21965   FENV_ACCESS pragma ''off'' (<a href="#7.6.1">7.6.1</a>).
21966 -- The exception-mask argument for one of the functions that provide access to the
21967   floating-point status flags has a nonzero value not obtained by bitwise OR of the
21968   floating-point exception macros (<a href="#7.6.2">7.6.2</a>).
21969 -- The fesetexceptflag function is used to set floating-point status flags that were
21970   not specified in the call to the fegetexceptflag function that provided the value
21971   of the corresponding fexcept_t object (<a href="#7.6.2.4">7.6.2.4</a>).
21972
21973
21974
21975 [<a name="#p559" href="p559">page 559</a>] (<a href="#Contents">Contents</a>)
21976
21977 -- The argument to fesetenv or feupdateenv is neither an object set by a call to
21978   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>).
21979 -- The value of the result of an integer arithmetic or conversion function cannot be
21980   represented (<a href="#7.8.2.1">7.8.2.1</a>, <a href="#7.8.2.2">7.8.2.2</a>, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.22.6.1">7.22.6.1</a>, <a href="#7.22.6.2">7.22.6.2</a>, <a href="#7.22.1">7.22.1</a>).
21981 -- The program modifies the string pointed to by the value returned by the setlocale
21982   function (<a href="#7.11.1.1">7.11.1.1</a>).
21983 -- The program modifies the structure pointed to by the value returned by the
21984   localeconv function (<a href="#7.11.2.1">7.11.2.1</a>).
21985 -- A macro definition of math_errhandling is suppressed or the program defines
21986   an identifier with the name math_errhandling (<a href="#7.12">7.12</a>).
21987 -- An argument to a floating-point classification or comparison macro is not of real
21988   floating type (<a href="#7.12.3">7.12.3</a>, <a href="#7.12.14">7.12.14</a>).
21989 -- A macro definition of setjmp is suppressed in order to access an actual function, or
21990   the program defines an external identifier with the name setjmp (<a href="#7.13">7.13</a>).
21991 -- An invocation of the setjmp macro occurs other than in an allowed context
21992   (<a href="#7.13.2.1">7.13.2.1</a>).
21993 -- The longjmp function is invoked to restore a nonexistent environment (<a href="#7.13.2.1">7.13.2.1</a>).
21994 -- After a longjmp, there is an attempt to access the value of an object of automatic
21995   storage duration that does not have volatile-qualified type, local to the function
21996   containing the invocation of the corresponding setjmp macro, that was changed
21997   between the setjmp invocation and longjmp call (<a href="#7.13.2.1">7.13.2.1</a>).
21998 -- The program specifies an invalid pointer to a signal handler function (<a href="#7.14.1.1">7.14.1.1</a>).
21999 -- A signal handler returns when the signal corresponded to a computational exception
22000   (<a href="#7.14.1.1">7.14.1.1</a>).
22001 -- A signal occurs as the result of calling the abort or raise function, and the signal
22002   handler calls the raise function (<a href="#7.14.1.1">7.14.1.1</a>).
22003 -- A signal occurs other than as the result of calling the abort or raise function, and
22004   the signal handler refers to an object with static storage duration other than by
22005   assigning a value to an object declared as volatile sig_atomic_t, or calls any
22006   function in the standard library other than the abort function, the _Exit function,
22007   the quick_exit function, or the signal function (for the same signal number)
22008   (<a href="#7.14.1.1">7.14.1.1</a>).
22009 -- The value of errno is referred to after a signal occurred other than as the result of
22010   calling the abort or raise function and the corresponding signal handler obtained
22011   a SIG_ERR return from a call to the signal function (<a href="#7.14.1.1">7.14.1.1</a>).
22012
22013 [<a name="#p560" href="p560">page 560</a>] (<a href="#Contents">Contents</a>)
22014
22015 -- A signal is generated by an asynchronous signal handler (<a href="#7.14.1.1">7.14.1.1</a>).
22016 -- A function with a variable number of arguments attempts to access its varying
22017   arguments other than through a properly declared and initialized va_list object, or
22018   before the va_start macro is invoked (<a href="#7.16">7.16</a>, <a href="#7.16.1.1">7.16.1.1</a>, <a href="#7.16.1.4">7.16.1.4</a>).
22019 -- The macro va_arg is invoked using the parameter ap that was passed to a function
22020   that invoked the macro va_arg with the same parameter (<a href="#7.16">7.16</a>).
22021 -- A macro definition of va_start, va_arg, va_copy, or va_end is suppressed in
22022   order to access an actual function, or the program defines an external identifier with
22023   the name va_copy or va_end (<a href="#7.16.1">7.16.1</a>).
22024 -- The va_start or va_copy macro is invoked without a corresponding invocation
22025   of the va_end macro in the same function, or vice versa (<a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.3">7.16.1.3</a>,
22026   <a href="#7.16.1.4">7.16.1.4</a>).
22027 -- The type parameter to the va_arg macro is not such that a pointer to an object of
22028   that type can be obtained simply by postfixing a * (<a href="#7.16.1.1">7.16.1.1</a>).
22029 -- The va_arg macro is invoked when there is no actual next argument, or with a
22030   specified type that is not compatible with the promoted type of the actual next
22031   argument, with certain exceptions (<a href="#7.16.1.1">7.16.1.1</a>).
22032 -- The va_copy or va_start macro is called to initialize a va_list that was
22033   previously initialized by either macro without an intervening invocation of the
22034   va_end macro for the same va_list (<a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.4">7.16.1.4</a>).
22035 -- The parameter parmN of a va_start macro is declared with the register
22036   storage class, with a function or array type, or with a type that is not compatible with
22037   the type that results after application of the default argument promotions (<a href="#7.16.1.4">7.16.1.4</a>).
22038 -- The member designator parameter of an offsetof macro is an invalid right
22039   operand of the . operator for the type parameter, or designates a bit-field (<a href="#7.19">7.19</a>).
22040 -- The argument in an instance of one of the integer-constant macros is not a decimal,
22041   octal, or hexadecimal constant, or it has a value that exceeds the limits for the
22042   corresponding type (<a href="#7.20.4">7.20.4</a>).
22043 -- A byte input/output function is applied to a wide-oriented stream, or a wide character
22044   input/output function is applied to a byte-oriented stream (<a href="#7.21.2">7.21.2</a>).
22045 -- Use is made of any portion of a file beyond the most recent wide character written to
22046   a wide-oriented stream (<a href="#7.21.2">7.21.2</a>).
22047 -- The value of a pointer to a FILE object is used after the associated file is closed
22048   (<a href="#7.21.3">7.21.3</a>).
22049 -- The stream for the fflush function points to an input stream or to an update stream
22050     in which the most recent operation was input (<a href="#7.21.5.2">7.21.5.2</a>).
22051 [<a name="#p561" href="p561">page 561</a>] (<a href="#Contents">Contents</a>)
22052
22053 -- The string pointed to by the mode argument in a call to the fopen function does not
22054   exactly match one of the specified character sequences (<a href="#7.21.5.3">7.21.5.3</a>).
22055 -- An output operation on an update stream is followed by an input operation without an
22056   intervening call to the fflush function or a file positioning function, or an input
22057   operation on an update stream is followed by an output operation with an intervening
22058   call to a file positioning function (<a href="#7.21.5.3">7.21.5.3</a>).
22059 -- An attempt is made to use the contents of the array that was supplied in a call to the
22060   setvbuf function (<a href="#7.21.5.6">7.21.5.6</a>).
22061 -- There are insufficient arguments for the format in a call to one of the formatted
22062   input/output functions, or an argument does not have an appropriate type (<a href="#7.21.6.1">7.21.6.1</a>,
22063   <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22064 -- The format in a call to one of the formatted input/output functions or to the
22065   strftime or wcsftime function is not a valid multibyte character sequence that
22066   begins and ends in its initial shift state (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>,
22067   <a href="#7.28.5.1">7.28.5.1</a>).
22068 -- In a call to one of the formatted output functions, a precision appears with a
22069   conversion specifier other than those described (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
22070 -- A conversion specification for a formatted output function uses an asterisk to denote
22071   an argument-supplied field width or precision, but the corresponding argument is not
22072   provided (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
22073 -- A conversion specification for a formatted output function uses a # or 0 flag with a
22074   conversion specifier other than those described (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
22075 -- A conversion specification for one of the formatted input/output functions uses a
22076   length modifier with a conversion specifier other than those described (<a href="#7.21.6.1">7.21.6.1</a>,
22077   <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22078 -- An s conversion specifier is encountered by one of the formatted output functions,
22079   and the argument is missing the null terminator (unless a precision is specified that
22080   does not require null termination) (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
22081 -- An n conversion specification for one of the formatted input/output functions includes
22082   any flags, an assignment-suppressing character, a field width, or a precision (<a href="#7.21.6.1">7.21.6.1</a>,
22083   <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22084 -- A % conversion specifier is encountered by one of the formatted input/output
22085   functions, but the complete conversion specification is not exactly %% (<a href="#7.21.6.1">7.21.6.1</a>,
22086   <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22087 -- An invalid conversion specification is found in the format for one of the formatted
22088   input/output functions, or the strftime or wcsftime function (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
22089
22090 [<a name="#p562" href="p562">page 562</a>] (<a href="#Contents">Contents</a>)
22091
22092    <a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.5.1">7.28.5.1</a>).
22093 -- The number of characters transmitted by a formatted output function is greater than
22094   INT_MAX (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.3">7.21.6.3</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.10">7.21.6.10</a>).
22095 -- The result of a conversion by one of the formatted input functions cannot be
22096   represented in the corresponding object, or the receiving object does not have an
22097   appropriate type (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22098 -- A c, s, or [ conversion specifier is encountered by one of the formatted input
22099   functions, and the array pointed to by the corresponding argument is not large enough
22100   to accept the input sequence (and a null terminator if the conversion specifier is s or
22101   [) (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22102 -- A c, s, or [ conversion specifier with an l qualifier is encountered by one of the
22103   formatted input functions, but the input is not a valid multibyte character sequence
22104   that begins in the initial shift state (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22105 -- The input item for a %p conversion by one of the formatted input functions is not a
22106   value converted earlier during the same program execution (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22107 -- The vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf,
22108   vsscanf, vfwprintf, vfwscanf, vswprintf, vswscanf, vwprintf, or
22109   vwscanf function is called with an improperly initialized va_list argument, or
22110   the argument is used (other than in an invocation of va_end) after the function
22111   returns (<a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>, <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>,
22112   <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>).
22113 -- The contents of the array supplied in a call to the fgets or fgetws function are
22114   used after a read error occurred (<a href="#7.21.7.2">7.21.7.2</a>, <a href="#7.28.3.2">7.28.3.2</a>).
22115 -- The file position indicator for a binary stream is used after a call to the ungetc
22116   function where its value was zero before the call (<a href="#7.21.7.10">7.21.7.10</a>).
22117 -- The file position indicator for a stream is used after an error occurred during a call to
22118   the fread or fwrite function (<a href="#7.21.8.1">7.21.8.1</a>, <a href="#7.21.8.2">7.21.8.2</a>).
22119 -- A partial element read by a call to the fread function is used (<a href="#7.21.8.1">7.21.8.1</a>).
22120 -- The fseek function is called for a text stream with a nonzero offset and either the
22121   offset was not returned by a previous successful call to the ftell function on a
22122   stream associated with the same file or whence is not SEEK_SET (<a href="#7.21.9.2">7.21.9.2</a>).
22123 -- The fsetpos function is called to set a position that was not returned by a previous
22124   successful call to the fgetpos function on a stream associated with the same file
22125   (<a href="#7.21.9.3">7.21.9.3</a>).
22126 -- A non-null pointer returned by a call to the calloc, malloc, or realloc function
22127   with a zero requested size is used to access an object (<a href="#7.22.3">7.22.3</a>).
22128
22129 [<a name="#p563" href="p563">page 563</a>] (<a href="#Contents">Contents</a>)
22130
22131 -- The value of a pointer that refers to space deallocated by a call to the free or
22132   realloc function is used (<a href="#7.22.3">7.22.3</a>).
22133 -- The alignment requested of the aligned_alloc function is not valid or not
22134   supported by the implementation, or the size requested is not an integral multiple of
22135   the alignment (<a href="#7.22.3.1">7.22.3.1</a>).
22136 -- The pointer argument to the free or realloc function does not match a pointer
22137   earlier returned by a memory management function, or the space has been deallocated
22138   by a call to free or realloc (<a href="#7.22.3.3">7.22.3.3</a>, <a href="#7.22.3.5">7.22.3.5</a>).
22139 -- The value of the object allocated by the malloc function is used (<a href="#7.22.3.4">7.22.3.4</a>).
22140 -- The value of any bytes in a new object allocated by the realloc function beyond
22141   the size of the old object are used (<a href="#7.22.3.5">7.22.3.5</a>).
22142 -- The program calls the exit or quick_exit function more than once, or calls both
22143   functions (<a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.7">7.22.4.7</a>).
22144 -- During the call to a function registered with the atexit or at_quick_exit
22145   function, a call is made to the longjmp function that would terminate the call to the
22146   registered function (<a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.7">7.22.4.7</a>).
22147 -- The string set up by the getenv or strerror function is modified by the program
22148   (<a href="#7.22.4.6">7.22.4.6</a>, <a href="#7.23.6.2">7.23.6.2</a>).
22149 -- A command is executed through the system function in a way that is documented as
22150   causing termination or some other form of undefined behavior (<a href="#7.22.4.8">7.22.4.8</a>).
22151 -- A searching or sorting utility function is called with an invalid pointer argument, even
22152   if the number of elements is zero (<a href="#7.22.5">7.22.5</a>).
22153 -- The comparison function called by a searching or sorting utility function alters the
22154   contents of the array being searched or sorted, or returns ordering values
22155   inconsistently (<a href="#7.22.5">7.22.5</a>).
22156 -- The array being searched by the bsearch function does not have its elements in
22157   proper order (<a href="#7.22.5.1">7.22.5.1</a>).
22158 -- The current conversion state is used by a multibyte/wide character conversion
22159   function after changing the LC_CTYPE category (<a href="#7.22.7">7.22.7</a>).
22160 -- A string or wide string utility function is instructed to access an array beyond the end
22161   of an object (<a href="#7.23.1">7.23.1</a>, <a href="#7.28.4">7.28.4</a>).
22162 -- A string or wide string utility function is called with an invalid pointer argument, even
22163   if the length is zero (<a href="#7.23.1">7.23.1</a>, <a href="#7.28.4">7.28.4</a>).
22164 -- The contents of the destination array are used after a call to the strxfrm,
22165   strftime, wcsxfrm, or wcsftime function in which the specified length was
22166
22167 [<a name="#p564" href="p564">page 564</a>] (<a href="#Contents">Contents</a>)
22168
22169    too small to hold the entire null-terminated result (<a href="#7.23.4.5">7.23.4.5</a>, <a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.4.4.4">7.28.4.4.4</a>,
22170    <a href="#7.28.5.1">7.28.5.1</a>).
22171 -- The first argument in the very first call to the strtok or wcstok is a null pointer
22172   (<a href="#7.23.5.8">7.23.5.8</a>, <a href="#7.28.4.5.7">7.28.4.5.7</a>).
22173 -- The type of an argument to a type-generic macro is not compatible with the type of
22174   the corresponding parameter of the selected function (<a href="#7.24">7.24</a>).
22175 -- A complex argument is supplied for a generic parameter of a type-generic macro that
22176   has no corresponding complex function (<a href="#7.24">7.24</a>).
22177 -- At least one field of the broken-down time passed to asctime contains a value
22178   outside its normal range, or the calculated year exceeds four digits or is less than the
22179   year 1000 (<a href="#7.26.3.1">7.26.3.1</a>).
22180 -- The argument corresponding to an s specifier without an l qualifier in a call to the
22181   fwprintf function does not point to a valid multibyte character sequence that
22182   begins in the initial shift state (<a href="#7.28.2.11">7.28.2.11</a>).
22183 -- In a call to the wcstok function, the object pointed to by ptr does not have the
22184   value stored by the previous call for the same wide string (<a href="#7.28.4.5.7">7.28.4.5.7</a>).
22185 -- An mbstate_t object is used inappropriately (<a href="#7.28.6">7.28.6</a>).
22186 -- The value of an argument of type wint_t to a wide character classification or case
22187   mapping function is neither equal to the value of WEOF nor representable as a
22188   wchar_t (<a href="#7.29.1">7.29.1</a>).
22189 -- The iswctype function is called using a different LC_CTYPE category from the
22190   one in effect for the call to the wctype function that returned the description
22191   (<a href="#7.29.2.2.1">7.29.2.2.1</a>).
22192 -- The towctrans function is called using a different LC_CTYPE category from the
22193   one in effect for the call to the wctrans function that returned the description
22194   (<a href="#7.29.3.2.1">7.29.3.2.1</a>).
22195
22196
22197
22198
22199 [<a name="#p565" href="p565">page 565</a>] (<a href="#Contents">Contents</a>)
22200
22201 <a name="J.3" href="#J.3"><b>    J.3 Implementation-defined behavior</b></a>
22202 1   A conforming implementation is required to document its choice of behavior in each of
22203     the areas listed in this subclause. The following are implementation-defined:
22204 <a name="J.3.1" href="#J.3.1"><b>    J.3.1 Translation</b></a>
22205 1   -- How a diagnostic is identified (<a href="#3.10">3.10</a>, <a href="#5.1.1.3">5.1.1.3</a>).
22206     -- Whether each nonempty sequence of white-space characters other than new-line is
22207       retained or replaced by one space character in translation phase 3 (<a href="#5.1.1.2">5.1.1.2</a>).
22208 <a name="J.3.2" href="#J.3.2"><b>    J.3.2 Environment</b></a>
22209 1   -- The mapping between physical source file multibyte characters and the source
22210       character set in translation phase 1 (<a href="#5.1.1.2">5.1.1.2</a>).
22211     -- The name and type of the function called at program startup in a freestanding
22212       environment (<a href="#5.1.2.1">5.1.2.1</a>).
22213     -- The effect of program termination in a freestanding environment (<a href="#5.1.2.1">5.1.2.1</a>).
22214     -- An alternative manner in which the main function may be defined (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
22215     -- 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>).
22216     -- What constitutes an interactive device (<a href="#5.1.2.3">5.1.2.3</a>).
22217     -- Whether a program can have more than one thread of execution in a freestanding
22218       environment (<a href="#5.1.2.4">5.1.2.4</a>).
22219     -- The set of signals, their semantics, and their default handling (<a href="#7.14">7.14</a>).
22220     -- Signal values other than SIGFPE, SIGILL, and SIGSEGV that correspond to a
22221       computational exception (<a href="#7.14.1.1">7.14.1.1</a>).
22222     -- Signals for which the equivalent of signal(sig, SIG_IGN); is executed at
22223       program startup (<a href="#7.14.1.1">7.14.1.1</a>).
22224     -- The set of environment names and the method for altering the environment list used
22225       by the getenv function (<a href="#7.22.4.6">7.22.4.6</a>).
22226     -- The manner of execution of the string by the system function (<a href="#7.22.4.8">7.22.4.8</a>).
22227
22228
22229
22230
22231 [<a name="#p566" href="p566">page 566</a>] (<a href="#Contents">Contents</a>)
22232
22233 <a name="J.3.3" href="#J.3.3"><b>    J.3.3 Identifiers</b></a>
22234 1   -- Which additional multibyte characters may appear in identifiers and their
22235       correspondence to universal character names (<a href="#6.4.2">6.4.2</a>).
22236     -- 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>).
22237 <a name="J.3.4" href="#J.3.4"><b>    J.3.4 Characters</b></a>
22238 1   -- The number of bits in a byte (<a href="#3.6">3.6</a>).
22239     -- The values of the members of the execution character set (<a href="#5.2.1">5.2.1</a>).
22240     -- The unique value of the member of the execution character set produced for each of
22241       the standard alphabetic escape sequences (<a href="#5.2.2">5.2.2</a>).
22242     -- The value of a char object into which has been stored any character other than a
22243       member of the basic execution character set (<a href="#6.2.5">6.2.5</a>).
22244     -- Which of signed char or unsigned char has the same range, representation,
22245       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>).
22246     -- The mapping of members of the source character set (in character constants and string
22247       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>).
22248     -- The value of an integer character constant containing more than one character or
22249       containing a character or escape sequence that does not map to a single-byte
22250       execution character (<a href="#6.4.4.4">6.4.4.4</a>).
22251     -- The value of a wide character constant containing more than one multibyte character
22252       or a single multibyte character that maps to multiple members of the extended
22253       execution character set, or containing a multibyte character or escape sequence not
22254       represented in the extended execution character set (<a href="#6.4.4.4">6.4.4.4</a>).
22255     -- The current locale used to convert a wide character constant consisting of a single
22256       multibyte character that maps to a member of the extended execution character set
22257       into a corresponding wide character code (<a href="#6.4.4.4">6.4.4.4</a>).
22258     -- Whether differently-prefixed wide string literal tokens can be concatenated and, if so,
22259       the treatment of the resulting multibyte character sequence (<a href="#6.4.5">6.4.5</a>).
22260     -- The current locale used to convert a wide string literal into corresponding wide
22261       character codes (<a href="#6.4.5">6.4.5</a>).
22262     -- The value of a string literal containing a multibyte character or escape sequence not
22263       represented in the execution character set (<a href="#6.4.5">6.4.5</a>).
22264     -- The encoding of any of wchar_t, char16_t, and char32_t where the
22265       corresponding  standard   encoding macro      (__STDC_ISO_10646__,
22266       __STDC_UTF_16__, or __STDC_UTF_32__) is not defined (<a href="#6.10.8.2">6.10.8.2</a>).
22267
22268 [<a name="#p567" href="p567">page 567</a>] (<a href="#Contents">Contents</a>)
22269
22270 <a name="J.3.5" href="#J.3.5"><b>    J.3.5 Integers</b></a>
22271 1   -- Any extended integer types that exist in the implementation (<a href="#6.2.5">6.2.5</a>).
22272     -- Whether signed integer types are represented using sign and magnitude, two's
22273       complement, or ones' complement, and whether the extraordinary value is a trap
22274       representation or an ordinary value (<a href="#6.2.6.2">6.2.6.2</a>).
22275     -- The rank of any extended integer type relative to another extended integer type with
22276       the same precision (<a href="#6.3.1.1">6.3.1.1</a>).
22277     -- The result of, or the signal raised by, converting an integer to a signed integer type
22278       when the value cannot be represented in an object of that type (<a href="#6.3.1.3">6.3.1.3</a>).
22279     -- The results of some bitwise operations on signed integers (<a href="#6.5">6.5</a>).
22280 <a name="J.3.6" href="#J.3.6"><b>    J.3.6 Floating point</b></a>
22281 1   -- The accuracy of the floating-point operations and of the library functions in
22282       <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>).
22283     -- The accuracy of the conversions between floating-point internal representations and
22284       string representations performed by the library functions in <a href="#7.21">&lt;stdio.h&gt;</a>,
22285       <a href="#7.22">&lt;stdlib.h&gt;</a>, and <a href="#7.28">&lt;wchar.h&gt;</a> (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
22286     -- The rounding behaviors characterized by non-standard values of FLT_ROUNDS
22287       (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
22288     -- The evaluation methods characterized by non-standard negative values of
22289       FLT_EVAL_METHOD (<a href="#5.2.4.2.2">5.2.4.2.2</a>).
22290     -- The direction of rounding when an integer is converted to a floating-point number that
22291       cannot exactly represent the original value (<a href="#6.3.1.4">6.3.1.4</a>).
22292     -- The direction of rounding when a floating-point number is converted to a narrower
22293       floating-point number (<a href="#6.3.1.5">6.3.1.5</a>).
22294     -- How the nearest representable value or the larger or smaller representable value
22295       immediately adjacent to the nearest representable value is chosen for certain floating
22296       constants (<a href="#6.4.4.2">6.4.4.2</a>).
22297     -- Whether and how floating expressions are contracted when not disallowed by the
22298       FP_CONTRACT pragma (<a href="#6.5">6.5</a>).
22299     -- The default state for the FENV_ACCESS pragma (<a href="#7.6.1">7.6.1</a>).
22300     -- Additional floating-point exceptions, rounding           modes,     environments,     and
22301       classifications, and their macro names (<a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>).
22302     -- The default state for the FP_CONTRACT pragma (<a href="#7.12.2">7.12.2</a>).
22303
22304
22305 [<a name="#p568" href="p568">page 568</a>] (<a href="#Contents">Contents</a>)
22306
22307 <a name="J.3.7" href="#J.3.7"><b>    J.3.7 Arrays and pointers</b></a>
22308 1   -- The result of converting a pointer to an integer or vice versa (<a href="#6.3.2.3">6.3.2.3</a>).
22309     -- The size of the result of subtracting two pointers to elements of the same array
22310       (<a href="#6.5.6">6.5.6</a>).
22311 <a name="J.3.8" href="#J.3.8"><b>    J.3.8 Hints</b></a>
22312 1   -- The extent to which suggestions made by using the register storage-class
22313       specifier are effective (<a href="#6.7.1">6.7.1</a>).
22314     -- The extent to which suggestions made by using the inline function specifier are
22315       effective (<a href="#6.7.4">6.7.4</a>).
22316 <a name="J.3.9" href="#J.3.9"><b>    J.3.9 Structures, unions, enumerations, and bit-fields</b></a>
22317 1   -- Whether a ''plain'' int bit-field is treated as a signed int bit-field or as an
22318       unsigned int bit-field (<a href="#6.7.2">6.7.2</a>, <a href="#6.7.2.1">6.7.2.1</a>).
22319     -- Allowable bit-field types other than _Bool, signed int, and unsigned int
22320       (<a href="#6.7.2.1">6.7.2.1</a>).
22321     -- Whether a bit-field can straddle a storage-unit boundary (<a href="#6.7.2.1">6.7.2.1</a>).
22322     -- The order of allocation of bit-fields within a unit (<a href="#6.7.2.1">6.7.2.1</a>).
22323     -- The alignment of non-bit-field members of structures (<a href="#6.7.2.1">6.7.2.1</a>). This should present
22324       no problem unless binary data written by one implementation is read by another.
22325     -- The integer type compatible with each enumerated type (<a href="#6.7.2.2">6.7.2.2</a>).
22326 <a name="J.3.10" href="#J.3.10"><b>    J.3.10 Qualifiers</b></a>
22327 1   -- What constitutes an access to an object that has volatile-qualified type (<a href="#6.7.3">6.7.3</a>).
22328 <a name="J.3.11" href="#J.3.11"><b>    J.3.11 Preprocessing directives</b></a>
22329 1   -- The locations within #pragma directives where header name preprocessing tokens
22330       are recognized (<a href="#6.4">6.4</a>, <a href="#6.4.7">6.4.7</a>).
22331     -- How sequences in both forms of header names are mapped to headers or external
22332       source file names (<a href="#6.4.7">6.4.7</a>).
22333     -- Whether the value of a character constant in a constant expression that controls
22334       conditional inclusion matches the value of the same character constant in the
22335       execution character set (<a href="#6.10.1">6.10.1</a>).
22336     -- Whether the value of a single-character character constant in a constant expression
22337       that controls conditional inclusion may have a negative value (<a href="#6.10.1">6.10.1</a>).
22338     -- The places that are searched for an included &lt; &gt; delimited header, and how the places
22339       are specified or the header is identified (<a href="#6.10.2">6.10.2</a>).
22340 [<a name="#p569" href="p569">page 569</a>] (<a href="#Contents">Contents</a>)
22341
22342     -- How the named source file is searched for in an included " " delimited header
22343       (<a href="#6.10.2">6.10.2</a>).
22344     -- The method by which preprocessing tokens (possibly resulting from macro
22345       expansion) in a #include directive are combined into a header name (<a href="#6.10.2">6.10.2</a>).
22346     -- The nesting limit for #include processing (<a href="#6.10.2">6.10.2</a>).
22347     -- Whether the # operator inserts a \ character before the \ character that begins a
22348       universal character name in a character constant or string literal (<a href="#6.10.3.2">6.10.3.2</a>).
22349     -- The behavior on each recognized non-STDC #pragma directive (<a href="#6.10.6">6.10.6</a>).
22350     -- The definitions for __DATE__ and __TIME__ when respectively, the date and
22351       time of translation are not available (<a href="#6.10.8.1">6.10.8.1</a>).
22352 <a name="J.3.12" href="#J.3.12"><b>    J.3.12 Library functions</b></a>
22353 1   -- Any library facilities available to a freestanding program, other than the minimal set
22354       required by clause 4 (<a href="#5.1.2.1">5.1.2.1</a>).
22355     -- The format of the diagnostic printed by the assert macro (<a href="#7.2.1.1">7.2.1.1</a>).
22356     -- The representation of the floating-point               status   flags   stored   by   the
22357       fegetexceptflag function (<a href="#7.6.2.2">7.6.2.2</a>).
22358     -- Whether the feraiseexcept function raises the ''inexact'' floating-point
22359       exception in addition to the ''overflow'' or ''underflow'' floating-point exception
22360       (<a href="#7.6.2.3">7.6.2.3</a>).
22361     -- Strings other than "C" and "" that may be passed as the second argument to the
22362       setlocale function (<a href="#7.11.1.1">7.11.1.1</a>).
22363     -- The types defined for float_t and double_t when the value of the
22364       FLT_EVAL_METHOD macro is less than 0 (<a href="#7.12">7.12</a>).
22365     -- Domain errors for the mathematics functions, other than those required by this
22366       International Standard (<a href="#7.12.1">7.12.1</a>).
22367     -- The values returned by the mathematics functions on domain errors or pole errors
22368       (<a href="#7.12.1">7.12.1</a>).
22369     -- The values returned by the mathematics functions on underflow range errors, whether
22370       errno is set to the value of the macro ERANGE when the integer expression
22371       math_errhandling &amp; MATH_ERRNO is nonzero, and whether the ''underflow''
22372       floating-point exception is raised when the integer expression math_errhandling
22373       &amp; MATH_ERREXCEPT is nonzero. (<a href="#7.12.1">7.12.1</a>).
22374     -- Whether a domain error occurs or zero is returned when an fmod function has a
22375       second argument of zero (<a href="#7.12.10.1">7.12.10.1</a>).
22376
22377 [<a name="#p570" href="p570">page 570</a>] (<a href="#Contents">Contents</a>)
22378
22379 -- Whether a domain error occurs or zero is returned when a remainder function has
22380   a second argument of zero (<a href="#7.12.10.2">7.12.10.2</a>).
22381 -- The base-2 logarithm of the modulus used by the remquo functions in reducing the
22382   quotient (<a href="#7.12.10.3">7.12.10.3</a>).
22383 -- Whether a domain error occurs or zero is returned when a remquo function has a
22384   second argument of zero (<a href="#7.12.10.3">7.12.10.3</a>).
22385 -- Whether the equivalent of signal(sig, SIG_DFL); is executed prior to the call
22386   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>).
22387 -- The null pointer constant to which the macro NULL expands (<a href="#7.19">7.19</a>).
22388 -- Whether the last line of a text stream requires a terminating new-line character
22389   (<a href="#7.21.2">7.21.2</a>).
22390 -- Whether space characters that are written out to a text stream immediately before a
22391   new-line character appear when read in (<a href="#7.21.2">7.21.2</a>).
22392 -- The number of null characters that may be appended to data written to a binary
22393   stream (<a href="#7.21.2">7.21.2</a>).
22394 -- Whether the file position indicator of an append-mode stream is initially positioned at
22395   the beginning or end of the file (<a href="#7.21.3">7.21.3</a>).
22396 -- Whether a write on a text stream causes the associated file to be truncated beyond that
22397   point (<a href="#7.21.3">7.21.3</a>).
22398 -- The characteristics of file buffering (<a href="#7.21.3">7.21.3</a>).
22399 -- Whether a zero-length file actually exists (<a href="#7.21.3">7.21.3</a>).
22400 -- The rules for composing valid file names (<a href="#7.21.3">7.21.3</a>).
22401 -- Whether the same file can be simultaneously open multiple times (<a href="#7.21.3">7.21.3</a>).
22402 -- The nature and choice of encodings used for multibyte characters in files (<a href="#7.21.3">7.21.3</a>).
22403 -- The effect of the remove function on an open file (<a href="#7.21.4.1">7.21.4.1</a>).
22404 -- The effect if a file with the new name exists prior to a call to the rename function
22405   (<a href="#7.21.4.2">7.21.4.2</a>).
22406 -- Whether an open temporary file is removed upon abnormal program termination
22407   (<a href="#7.21.4.3">7.21.4.3</a>).
22408 -- Which changes of mode are permitted (if any), and under what circumstances
22409   (<a href="#7.21.5.4">7.21.5.4</a>).
22410 -- The style used to print an infinity or NaN, and the meaning of any n-char or n-wchar
22411   sequence printed for a NaN (<a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>).
22412
22413 [<a name="#p571" href="p571">page 571</a>] (<a href="#Contents">Contents</a>)
22414
22415 -- The output for %p conversion in the fprintf or fwprintf function (<a href="#7.21.6.1">7.21.6.1</a>,
22416   <a href="#7.28.2.1">7.28.2.1</a>).
22417 -- The interpretation of a - character that is neither the first nor the last character, nor
22418   the second where a ^ character is the first, in the scanlist for %[ conversion in the
22419   fscanf or fwscanf function (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>).
22420 -- The set of sequences matched by a %p conversion and the interpretation of the
22421   corresponding input item in the fscanf or fwscanf function (<a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>).
22422 -- The value to which the macro errno is set by the fgetpos, fsetpos, or ftell
22423   functions on failure (<a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.9.4">7.21.9.4</a>).
22424 -- The meaning of any n-char or n-wchar sequence in a string representing a NaN that is
22425   converted by the strtod, strtof, strtold, wcstod, wcstof, or wcstold
22426   function (<a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>).
22427 -- Whether or not the strtod, strtof, strtold, wcstod, wcstof, or wcstold
22428   function sets errno to ERANGE when underflow occurs (<a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>).
22429 -- Whether the calloc, malloc, and realloc functions return a null pointer or a
22430   pointer to an allocated object when the size requested is zero (<a href="#7.22.3">7.22.3</a>).
22431 -- Whether open streams with unwritten buffered data are flushed, open streams are
22432   closed, or temporary files are removed when the abort or _Exit function is called
22433   (<a href="#7.22.4.1">7.22.4.1</a>, <a href="#7.22.4.5">7.22.4.5</a>).
22434 -- The termination status returned to the host environment by the abort, exit,
22435   _Exit, or quick_exit function (<a href="#7.22.4.1">7.22.4.1</a>, <a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>).
22436 -- The value returned by the system function when its argument is not a null pointer
22437   (<a href="#7.22.4.8">7.22.4.8</a>).
22438 -- The local time zone and Daylight Saving Time (<a href="#7.26.1">7.26.1</a>).
22439 -- The range and precision of times representable in clock_t and time_t (<a href="#7.26">7.26</a>).
22440 -- The era for the clock function (<a href="#7.26.2.1">7.26.2.1</a>).
22441 -- The replacement string for the %Z specifier to the strftime, and wcsftime
22442   functions in the "C" locale (<a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.5.1">7.28.5.1</a>).
22443 -- Whether the functions in <a href="#7.12">&lt;math.h&gt;</a> honor the rounding direction mode in an
22444   IEC 60559 conformant implementation, unless explicitly specified otherwise (<a href="#F.10">F.10</a>).
22445
22446
22447
22448
22449 [<a name="#p572" href="p572">page 572</a>] (<a href="#Contents">Contents</a>)
22450
22451 <a name="J.3.13" href="#J.3.13"><b>    J.3.13 Architecture</b></a>
22452 1   -- The values or expressions assigned to the macros specified in the headers
22453       <a href="#7.7">&lt;float.h&gt;</a>, <a href="#7.10">&lt;limits.h&gt;</a>, and <a href="#7.20">&lt;stdint.h&gt;</a> (<a href="#5.2.4.2">5.2.4.2</a>, <a href="#7.20.2">7.20.2</a>, <a href="#7.20.3">7.20.3</a>).
22454     -- The result of attempting to indirectly access an object with automatic or thread
22455       storage duration from a thread other than the one with which it is associated (<a href="#6.2.4">6.2.4</a>).
22456     -- The number, order, and encoding of bytes in any object (when not explicitly specified
22457       in this International Standard) (<a href="#6.2.6.1">6.2.6.1</a>).
22458     -- Whether any extended alignments are supported and the contexts in which they are
22459       supported (<a href="#6.2.8">6.2.8</a>).
22460     -- Valid alignment values other than those returned by an alignof expression for
22461       fundamental types, if any (<a href="#6.2.8">6.2.8</a>).
22462     -- The value of the result of the sizeof and alignof operators (<a href="#6.5.3.4">6.5.3.4</a>).
22463 <a name="J.4" href="#J.4"><b>    J.4 Locale-specific behavior</b></a>
22464 1   The following characteristics of a hosted environment are locale-specific and are required
22465     to be documented by the implementation:
22466     -- Additional members of the source and execution character sets beyond the basic
22467       character set (<a href="#5.2.1">5.2.1</a>).
22468     -- The presence, meaning, and representation of additional multibyte characters in the
22469       execution character set beyond the basic character set (<a href="#5.2.1.2">5.2.1.2</a>).
22470     -- The shift states used for the encoding of multibyte characters (<a href="#5.2.1.2">5.2.1.2</a>).
22471     -- The direction of writing of successive printing characters (<a href="#5.2.2">5.2.2</a>).
22472     -- The decimal-point character (<a href="#7.1.1">7.1.1</a>).
22473     -- The set of printing characters (<a href="#7.4">7.4</a>, <a href="#7.29.2">7.29.2</a>).
22474     -- The set of control characters (<a href="#7.4">7.4</a>, <a href="#7.29.2">7.29.2</a>).
22475     -- The sets of characters tested for by the isalpha, isblank, islower, ispunct,
22476       isspace, isupper, iswalpha, iswblank, iswlower, iswpunct,
22477       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>,
22478       <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>, <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>, <a href="#7.29.2.1.10">7.29.2.1.10</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>).
22479     -- The native environment (<a href="#7.11.1.1">7.11.1.1</a>).
22480     -- Additional subject sequences accepted by the numeric conversion functions (<a href="#7.22.1">7.22.1</a>,
22481       <a href="#7.28.4.1">7.28.4.1</a>).
22482     -- The collation sequence of the execution character set (<a href="#7.23.4.3">7.23.4.3</a>, <a href="#7.28.4.4.2">7.28.4.4.2</a>).
22483
22484
22485 [<a name="#p573" href="p573">page 573</a>] (<a href="#Contents">Contents</a>)
22486
22487     -- The contents of the error message strings set up by the strerror function
22488       (<a href="#7.23.6.2">7.23.6.2</a>).
22489     -- The formats for time and date (<a href="#7.26.3.5">7.26.3.5</a>, <a href="#7.28.5.1">7.28.5.1</a>).
22490     -- Character mappings that are supported by the towctrans function (<a href="#7.29.1">7.29.1</a>).
22491     -- Character classifications that are supported by the iswctype function (<a href="#7.29.1">7.29.1</a>).
22492 <a name="J.5" href="#J.5"><b>    J.5 Common extensions</b></a>
22493 1   The following extensions are widely used in many systems, but are not portable to all
22494     implementations. The inclusion of any extension that may cause a strictly conforming
22495     program to become invalid renders an implementation nonconforming. Examples of such
22496     extensions are new keywords, extra library functions declared in standard headers, or
22497     predefined macros with names that do not begin with an underscore.
22498 <a name="J.5.1" href="#J.5.1"><b>    J.5.1 Environment arguments</b></a>
22499 1   In a hosted environment, the main function receives a third argument, char *envp[],
22500     that points to a null-terminated array of pointers to char, each of which points to a string
22501     that provides information about the environment for this execution of the program
22502     (<a href="#5.1.2.2.1">5.1.2.2.1</a>).
22503 <a name="J.5.2" href="#J.5.2"><b>    J.5.2 Specialized identifiers</b></a>
22504 1   Characters other than the underscore _, letters, and digits, that are not part of the basic
22505     source character set (such as the dollar sign $, or characters in national character sets)
22506     may appear in an identifier (<a href="#6.4.2">6.4.2</a>).
22507 <a name="J.5.3" href="#J.5.3"><b>    J.5.3 Lengths and cases of identifiers</b></a>
22508 1   All characters in identifiers (with or without external linkage) are significant (<a href="#6.4.2">6.4.2</a>).
22509 <a name="J.5.4" href="#J.5.4"><b>    J.5.4 Scopes of identifiers</b></a>
22510 1   A function identifier, or the identifier of an object the declaration of which contains the
22511     keyword extern, has file scope (<a href="#6.2.1">6.2.1</a>).
22512 <a name="J.5.5" href="#J.5.5"><b>    J.5.5 Writable string literals</b></a>
22513 1   String literals are modifiable (in which case, identical string literals should denote distinct
22514     objects) (<a href="#6.4.5">6.4.5</a>).
22515
22516
22517
22518
22519 [<a name="#p574" href="p574">page 574</a>] (<a href="#Contents">Contents</a>)
22520
22521 <a name="J.5.6" href="#J.5.6"><b>    J.5.6 Other arithmetic types</b></a>
22522 1   Additional arithmetic types, such as __int128 or double double, and their
22523     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
22524     more range or precision than long double, may be used for evaluating expressions of
22525     other floating types, and may be used to define float_t or double_t.
22526 <a name="J.5.7" href="#J.5.7"><b>    J.5.7 Function pointer casts</b></a>
22527 1   A pointer to an object or to void may be cast to a pointer to a function, allowing data to
22528     be invoked as a function (<a href="#6.5.4">6.5.4</a>).
22529 2   A pointer to a function may be cast to a pointer to an object or to void, allowing a
22530     function to be inspected or modified (for example, by a debugger) (<a href="#6.5.4">6.5.4</a>).
22531 <a name="J.5.8" href="#J.5.8"><b>    J.5.8 Extended bit-field types</b></a>
22532 1   A bit-field may be declared with a type other than _Bool, unsigned int, or
22533     signed int, with an appropriate maximum width (<a href="#6.7.2.1">6.7.2.1</a>).
22534 <a name="J.5.9" href="#J.5.9"><b>    J.5.9 The fortran keyword</b></a>
22535 1   The fortran function specifier may be used in a function declaration to indicate that
22536     calls suitable for FORTRAN should be generated, or that a different representation for the
22537     external name is to be generated (<a href="#6.7.4">6.7.4</a>).
22538 <a name="J.5.10" href="#J.5.10"><b>    J.5.10 The asm keyword</b></a>
22539 1   The asm keyword may be used to insert assembly language directly into the translator
22540     output (<a href="#6.8">6.8</a>). The most common implementation is via a statement of the form:
22541               asm ( character-string-literal );
22542 <a name="J.5.11" href="#J.5.11"><b>    J.5.11 Multiple external definitions</b></a>
22543 1   There may be more than one external definition for the identifier of an object, with or
22544     without the explicit use of the keyword extern; if the definitions disagree, or more than
22545     one is initialized, the behavior is undefined (<a href="#6.9.2">6.9.2</a>).
22546 <a name="J.5.12" href="#J.5.12"><b>    J.5.12 Predefined macro names</b></a>
22547 1   Macro names that do not begin with an underscore, describing the translation and
22548     execution environments, are defined by the implementation before translation begins
22549     (<a href="#6.10.8">6.10.8</a>).
22550
22551
22552
22553
22554 [<a name="#p575" href="p575">page 575</a>] (<a href="#Contents">Contents</a>)
22555
22556 <a name="J.5.13" href="#J.5.13"><b>    J.5.13 Floating-point status flags</b></a>
22557 1   If any floating-point status flags are set on normal termination after all calls to functions
22558     registered by the atexit function have been made (see <a href="#7.22.4.4">7.22.4.4</a>), the implementation
22559     writes some diagnostics indicating the fact to the stderr stream, if it is still open,
22560 <a name="J.5.14" href="#J.5.14"><b>    J.5.14 Extra arguments for signal handlers</b></a>
22561 1   Handlers for specific signals are called with extra arguments in addition to the signal
22562     number (<a href="#7.14.1.1">7.14.1.1</a>).
22563 <a name="J.5.15" href="#J.5.15"><b>    J.5.15 Additional stream types and file-opening modes</b></a>
22564 1   Additional mappings from files to streams are supported (<a href="#7.21.2">7.21.2</a>).
22565 2   Additional file-opening modes may be specified by characters appended to the mode
22566     argument of the fopen function (<a href="#7.21.5.3">7.21.5.3</a>).
22567 <a name="J.5.16" href="#J.5.16"><b>    J.5.16 Defined file position indicator</b></a>
22568 1   The file position indicator is decremented by each successful call to the ungetc or
22569     ungetwc function for a text stream, except if its value was zero before a call (<a href="#7.21.7.10">7.21.7.10</a>,
22570 <a name="7.28.3.10)" href="#7.28.3.10)"><b>    7.28.3.10).</b></a>
22571 <a name="J.5.17" href="#J.5.17"><b>    J.5.17 Math error reporting</b></a>
22572 1   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
22573     instead of, or in addition to, setting errno or raising floating-point exceptions (<a href="#7.3">7.3</a>,
22574 <a name="7.12)" href="#7.12)"><b>    7.12).</b></a>
22575
22576
22577
22578
22579 [<a name="#p576" href="p576">page 576</a>] (<a href="#Contents">Contents</a>)
22580
22581 <a name="K" href="#K"><b>                                           Annex K</b></a>
22582                                           (normative)
22583                               Bounds-checking interfaces
22584 <a name="K.1" href="#K.1"><b>    K.1 Background</b></a>
22585 1   Traditionally, the C Library has contained many functions that trust the programmer to
22586     provide output character arrays big enough to hold the result being produced. Not only
22587     do these functions not check that the arrays are big enough, they frequently lack the
22588     information needed to perform such checks. While it is possible to write safe, robust, and
22589     error-free code using the existing library, the library tends to promote programming styles
22590     that lead to mysterious failures if a result is too big for the provided array.
22591 2   A common programming style is to declare character arrays large enough to handle most
22592     practical cases. However, if these arrays are not large enough to handle the resulting
22593     strings, data can be written past the end of the array overwriting other data and program
22594     structures. The program never gets any indication that a problem exists, and so never has
22595     a chance to recover or to fail gracefully.
22596 3   Worse, this style of programming has compromised the security of computers and
22597     networks. Buffer overflows can often be exploited to run arbitrary code with the
22598     permissions of the vulnerable (defective) program.
22599 4   If the programmer writes runtime checks to verify lengths before calling library
22600     functions, then those runtime checks frequently duplicate work done inside the library
22601     functions, which discover string lengths as a side effect of doing their job.
22602 5   This annex provides alternative library functions that promote safer, more secure
22603     programming. The alternative functions verify that output buffers are large enough for
22604     the intended result and return a failure indicator if they are not. Data is never written past
22605     the end of an array. All string results are null terminated.
22606 6   This annex also addresses another problem that complicates writing robust code:
22607     functions that are not reentrant because they return pointers to static objects owned by the
22608     function. Such functions can be troublesome since a previously returned result can
22609     change if the function is called again, perhaps by another thread.
22610
22611
22612
22613
22614 [<a name="#p577" href="p577">page 577</a>] (<a href="#Contents">Contents</a>)
22615
22616 <a name="K.2" href="#K.2"><b>    K.2 Scope</b></a>
22617 1   This annex specifies a series of optional extensions that can be useful in the mitigation of
22618     security vulnerabilities in programs, and comprise new functions, macros, and types
22619     declared or defined in existing standard headers.
22620 2   An implementation that defines __STDC_LIB_EXT1__ shall conform to the
22621     specifications in this annex.361)
22622 3   Subclause <a href="#K.3">K.3</a> should be read as if it were merged into the parallel structure of named
22623     subclauses of clause 7.
22624 <a name="K.3" href="#K.3"><b>    K.3 Library</b></a>
22625 <a name="K.3.1" href="#K.3.1"><b>    K.3.1 Introduction</b></a>
22626 <a name="K.3.1.1" href="#K.3.1.1"><b>    K.3.1.1 Standard headers</b></a>
22627 1   The functions, macros, and types declared or defined in <a href="#K.3">K.3</a> and its subclauses are not
22628     declared or defined by their respective headers if __STDC_WANT_LIB_EXT1__ is
22629     defined as a macro which expands to the integer constant 0 at the point in the source file
22630     where the appropriate header is first included.
22631 2   The functions, macros, and types declared or defined in <a href="#K.3">K.3</a> and its subclauses are
22632     declared and defined by their respective headers if __STDC_WANT_LIB_EXT1__ is
22633     defined as a macro which expands to the integer constant 1 at the point in the source file
22634     where the appropriate header is first included.362)
22635 3   It is implementation-defined whether the functions, macros, and types declared or defined
22636     in <a href="#K.3">K.3</a> and its subclauses are declared or defined by their respective headers if
22637     __STDC_WANT_LIB_EXT1__ is not defined as a macro at the point in the source file
22638     where the appropriate header is first included.363)
22639 4   Within a preprocessing translation unit, __STDC_WANT_LIB_EXT1__ shall be
22640     defined identically for all inclusions of any headers from subclause <a href="#K.3">K.3</a>. If
22641     __STDC_WANT_LIB_EXT1__ is defined differently for any such inclusion, the
22642     implementation shall issue a diagnostic as if a preprocessor error directive were used.
22643
22644
22645     361) Implementations that do not define __STDC_LIB_EXT1__ are not required to conform to these
22646          specifications.
22647     362) Future revisions of this International Standard may define meanings for other values of
22648          __STDC_WANT_LIB_EXT1__.
22649     363) Subclause <a href="#7.1.3">7.1.3</a> reserves certain names and patterns of names that an implementation may use in
22650          headers. All other names are not reserved, and a conforming implementation is not permitted to use
22651          them. While some of the names defined in <a href="#K.3">K.3</a> and its subclauses are reserved, others are not. If an
22652          unreserved name is defined in a header when __STDC_WANT_LIB_EXT1__ is defined as 0, the
22653          implementation is not conforming.
22654
22655 [<a name="#p578" href="p578">page 578</a>] (<a href="#Contents">Contents</a>)
22656
22657 <a name="K.3.1.2" href="#K.3.1.2"><b>    K.3.1.2 Reserved identifiers</b></a>
22658 1   Each macro name in any of the following subclauses is reserved for use as specified if it
22659     is defined by any of its associated headers when included; unless explicitly stated
22660     otherwise (see <a href="#7.1.4">7.1.4</a>).
22661 2   All identifiers with external linkage in any of the following subclauses are reserved for
22662     use as identifiers with external linkage if any of them are used by the program. None of
22663     them are reserved if none of them are used.
22664 3   Each identifier with file scope listed in any of the following subclauses is reserved for use
22665     as a macro name and as an identifier with file scope in the same name space if it is
22666     defined by any of its associated headers when included.
22667 <a name="K.3.1.3" href="#K.3.1.3"><b>    K.3.1.3 Use of errno</b></a>
22668 1   An implementation may set errno for the functions defined in this annex, but is not
22669     required to.
22670 <a name="K.3.1.4" href="#K.3.1.4"><b>    K.3.1.4 Runtime-constraint violations</b></a>
22671 1   Most functions in this annex include as part of their specification a list of runtime-
22672     constraints. These runtime-constraints are requirements on the program using the
22673     library.364)
22674 2   Implementations shall verify that the runtime-constraints for a function are not violated
22675     by the program. If a runtime-constraint is violated, the implementation shall call the
22676     currently registered runtime-constraint handler (see set_constraint_handler_s
22677     in <a href="#7.22">&lt;stdlib.h&gt;</a>). Multiple runtime-constraint violations in the same call to a library
22678     function result in only one call to the runtime-constraint handler. It is unspecified which
22679     one of the multiple runtime-constraint violations cause the handler to be called.
22680 3   If the runtime-constraints section for a function states an action to be performed when a
22681     runtime-constraint violation occurs, the function shall perform the action before calling
22682     the runtime-constraint handler. If the runtime-constraints section lists actions that are
22683     prohibited when a runtime-constraint violation occurs, then such actions are prohibited to
22684     the function both before calling the handler and after the handler returns.
22685 4   The runtime-constraint handler might not return. If the handler does return, the library
22686     function whose runtime-constraint was violated shall return some indication of failure as
22687     given by the returns section in the function's specification.
22688
22689
22690
22691     364) Although runtime-constraints replace many cases of undefined behavior, undefined behavior still
22692          exists in this annex. Implementations are free to detect any case of undefined behavior and treat it as a
22693          runtime-constraint violation by calling the runtime-constraint handler. This license comes directly
22694          from the definition of undefined behavior.
22695
22696 [<a name="#p579" href="p579">page 579</a>] (<a href="#Contents">Contents</a>)
22697
22698 <a name="K.3.2" href="#K.3.2"><b>    K.3.2 Errors &lt;errno.h&gt;</b></a>
22699 1   The header <a href="#7.5">&lt;errno.h&gt;</a> defines a type.
22700 2   The type is
22701             errno_t
22702     which is type int.365)
22703 <a name="K.3.3" href="#K.3.3"><b>    K.3.3 Common definitions &lt;stddef.h&gt;</b></a>
22704 1   The header <a href="#7.19">&lt;stddef.h&gt;</a> defines a type.
22705 2   The type is
22706             rsize_t
22707     which is the type size_t.366)
22708 <a name="K.3.4" href="#K.3.4"><b>    K.3.4 Integer types &lt;stdint.h&gt;</b></a>
22709 1   The header <a href="#7.20">&lt;stdint.h&gt;</a> defines a macro.
22710 2   The macro is
22711             RSIZE_MAX
22712     which expands to a value367) of type size_t. Functions that have parameters of type
22713     rsize_t consider it a runtime-constraint violation if the values of those parameters are
22714     greater than RSIZE_MAX.
22715     Recommended practice
22716 3   Extremely large object sizes are frequently a sign that an object's size was calculated
22717     incorrectly. For example, negative numbers appear as very large positive numbers when
22718     converted to an unsigned type like size_t. Also, some implementations do not support
22719     objects as large as the maximum value that can be represented by type size_t.
22720 4   For those reasons, it is sometimes beneficial to restrict the range of object sizes to detect
22721     programming errors. For implementations targeting machines with large address spaces,
22722     it is recommended that RSIZE_MAX be defined as the smaller of the size of the largest
22723     object supported or (SIZE_MAX &gt;&gt; 1), even if this limit is smaller than the size of
22724     some legitimate, but very large, objects. Implementations targeting machines with small
22725     address spaces may wish to define RSIZE_MAX as SIZE_MAX, which means that there
22726
22727     365) As a matter of programming style, errno_t may be used as the type of something that deals only
22728          with the values that might be found in errno. For example, a function which returns the value of
22729          errno might be declared as having the return type errno_t.
22730     366) See the description of the RSIZE_MAX macro in <a href="#7.20">&lt;stdint.h&gt;</a>.
22731     367) The macro RSIZE_MAX need not expand to a constant expression.
22732
22733 [<a name="#p580" href="p580">page 580</a>] (<a href="#Contents">Contents</a>)
22734
22735     is no object size that is considered a runtime-constraint violation.
22736 <a name="K.3.5" href="#K.3.5"><b>    K.3.5 Input/output &lt;stdio.h&gt;</b></a>
22737 1   The header <a href="#7.21">&lt;stdio.h&gt;</a> defines several macros and two types.
22738 2   The macros are
22739             L_tmpnam_s
22740     which expands to an integer constant expression that is the size needed for an array of
22741     char large enough to hold a temporary file name string generated by the tmpnam_s
22742     function;
22743             TMP_MAX_S
22744     which expands to an integer constant expression that is the maximum number of unique
22745     file names that can be generated by the tmpnam_s function.
22746 3   The types are
22747             errno_t
22748     which is type int; and
22749             rsize_t
22750     which is the type size_t.
22751 <a name="K.3.5.1" href="#K.3.5.1"><b>    K.3.5.1 Operations on files</b></a>
22752 <a name="K.3.5.1.1" href="#K.3.5.1.1"><b>    K.3.5.1.1 The tmpfile_s function</b></a>
22753     Synopsis
22754 1           #define __STDC_WANT_LIB_EXT1__ 1
22755             #include <a href="#7.21">&lt;stdio.h&gt;</a>
22756             errno_t tmpfile_s(FILE * restrict * restrict streamptr);
22757     Runtime-constraints
22758 2   streamptr shall not be a null pointer.
22759 3   If there is a runtime-constraint violation, tmpfile_s does not attempt to create a file.
22760     Description
22761 4   The tmpfile_s function creates a temporary binary file that is different from any other
22762     existing file and that will automatically be removed when it is closed or at program
22763     termination. If the program terminates abnormally, whether an open temporary file is
22764     removed is implementation-defined. The file is opened for update with "wb+" mode
22765     with the meaning that mode has in the fopen_s function (including the mode's effect
22766     on exclusive access and file permissions).
22767
22768
22769 [<a name="#p581" href="p581">page 581</a>] (<a href="#Contents">Contents</a>)
22770
22771 5   If the file was created successfully, then the pointer to FILE pointed to by streamptr
22772     will be set to the pointer to the object controlling the opened file. Otherwise, the pointer
22773     to FILE pointed to by streamptr will be set to a null pointer.
22774     Recommended practice
22775     It should be possible to open at least TMP_MAX_S temporary files during the lifetime of
22776     the program (this limit may be shared with tmpnam_s) and there should be no limit on
22777     the number simultaneously open other than this limit and any limit on the number of open
22778     files (FOPEN_MAX).
22779     Returns
22780 6   The tmpfile_s function returns zero if it created the file. If it did not create the file or
22781     there was a runtime-constraint violation, tmpfile_s returns a nonzero value.
22782 <a name="K.3.5.1.2" href="#K.3.5.1.2"><b>    K.3.5.1.2 The tmpnam_s function</b></a>
22783     Synopsis
22784 1           #define __STDC_WANT_LIB_EXT1__ 1
22785             #include <a href="#7.21">&lt;stdio.h&gt;</a>
22786             errno_t tmpnam_s(char *s, rsize_t maxsize);
22787     Runtime-constraints
22788 2   s shall not be a null pointer. maxsize shall be less than or equal to RSIZE_MAX.
22789     maxsize shall be greater than the length of the generated file name string.
22790     Description
22791 3   The tmpnam_s function generates a string that is a valid file name and that is not the
22792     same as the name of an existing file.368) The function is potentially capable of generating
22793     TMP_MAX_S different strings, but any or all of them may already be in use by existing
22794     files and thus not be suitable return values. The lengths of these strings shall be less than
22795     the value of the L_tmpnam_s macro.
22796 4   The tmpnam_s function generates a different string each time it is called.
22797 5   It is assumed that s points to an array of at least maxsize characters. This array will be
22798     set to generated string, as specified below.
22799
22800
22801
22802     368) Files created using strings generated by the tmpnam_s function are temporary only in the sense that
22803          their names should not collide with those generated by conventional naming rules for the
22804          implementation. It is still necessary to use the remove function to remove such files when their use
22805          is ended, and before program termination. Implementations should take care in choosing the patterns
22806          used for names returned by tmpnam_s. For example, making a thread id part of the names avoids the
22807          race condition and possible conflict when multiple programs run simultaneously by the same user
22808          generate the same temporary file names.
22809
22810 [<a name="#p582" href="p582">page 582</a>] (<a href="#Contents">Contents</a>)
22811
22812 6    The implementation shall behave as if no library function except tmpnam calls the
22813      tmpnam_s function.369)
22814      Recommended practice
22815 7    After a program obtains a file name using the tmpnam_s function and before the
22816      program creates a file with that name, the possibility exists that someone else may create
22817      a file with that same name. To avoid this race condition, the tmpfile_s function
22818      should be used instead of tmpnam_s when possible. One situation that requires the use
22819      of the tmpnam_s function is when the program needs to create a temporary directory
22820      rather than a temporary file.
22821      Returns
22822 8    If no suitable string can be generated, or if there is a runtime-constraint violation, the
22823      tmpnam_s function writes a null character to s[0] (only if s is not null and maxsize
22824      is greater than zero) and returns a nonzero value.
22825 9    Otherwise, the tmpnam_s function writes the string in the array pointed to by s and
22826      returns zero.
22827      Environmental limits
22828 10   The value of the macro TMP_MAX_S shall be at least 25.
22829 <a name="K.3.5.2" href="#K.3.5.2"><b>     K.3.5.2 File access functions</b></a>
22830 <a name="K.3.5.2.1" href="#K.3.5.2.1"><b>     K.3.5.2.1 The fopen_s function</b></a>
22831      Synopsis
22832 1            #define __STDC_WANT_LIB_EXT1__ 1
22833              #include <a href="#7.21">&lt;stdio.h&gt;</a>
22834              errno_t fopen_s(FILE * restrict * restrict streamptr,
22835                   const char * restrict filename,
22836                   const char * restrict mode);
22837      Runtime-constraints
22838 2    None of streamptr, filename, or mode shall be a null pointer.
22839 3    If there is a runtime-constraint violation, fopen_s does not attempt to open a file.
22840      Furthermore, if streamptr is not a null pointer, fopen_s sets *streamptr to the
22841      null pointer.
22842
22843
22844
22845
22846      369) An implementation may have tmpnam call tmpnam_s (perhaps so there is only one naming
22847           convention for temporary files), but this is not required.
22848
22849 [<a name="#p583" href="p583">page 583</a>] (<a href="#Contents">Contents</a>)
22850
22851     Description
22852 4   The fopen_s function opens the file whose name is the string pointed to by
22853     filename, and associates a stream with it.
22854 5   The mode string shall be as described for fopen, with the addition that modes starting
22855     with the character 'w' or 'a' may be preceded by the character 'u', see below:
22856     uw             truncate to zero length or create text file for writing, default
22857                    permissions
22858     uwx            create text file for writing, default permissions
22859     ua             append; open or create text file for writing at end-of-file, default
22860                    permissions
22861     uwb            truncate to zero length or create binary file for writing, default
22862                    permissions
22863     uwbx           create binary file for writing, default permissions
22864     uab            append; open or create binary file for writing at end-of-file, default
22865                    permissions
22866     uw+            truncate to zero length or create text file for update, default
22867                    permissions
22868     uw+x           create text file for update, default permissions
22869     ua+            append; open or create text file for update, writing at end-of-file,
22870                    default permissions
22871     uw+b or uwb+   truncate to zero length or create binary file for update, default
22872                    permissions
22873     uw+bx or uwb+x create binary file for update, default permissions
22874     ua+b or uab+   append; open or create binary file for update, writing at end-of-file,
22875                    default permissions
22876 6   Opening a file with exclusive mode ('x' as the last character in the mode argument)
22877     fails if the file already exists or cannot be created.
22878 7   To the extent that the underlying system supports the concepts, files opened for writing
22879     shall be opened with exclusive (also known as non-shared) access. If the file is being
22880     created, and the first character of the mode string is not 'u', to the extent that the
22881     underlying system supports it, the file shall have a file permission that prevents other
22882     users on the system from accessing the file. If the file is being created and first character
22883     of the mode string is 'u', then by the time the file has been closed, it shall have the
22884     system default file access permissions.370)
22885 8   If the file was opened successfully, then the pointer to FILE pointed to by streamptr
22886     will be set to the pointer to the object controlling the opened file. Otherwise, the pointer
22887
22888
22889     370) These are the same permissions that the file would have been created with by fopen.
22890
22891 [<a name="#p584" href="p584">page 584</a>] (<a href="#Contents">Contents</a>)
22892
22893     to FILE pointed to by streamptr will be set to a null pointer.
22894     Returns
22895 9   The fopen_s function returns zero if it opened the file. If it did not open the file or if
22896     there was a runtime-constraint violation, fopen_s returns a nonzero value.
22897 <a name="K.3.5.2.2" href="#K.3.5.2.2"><b>    K.3.5.2.2 The freopen_s function</b></a>
22898     Synopsis
22899 1           #define __STDC_WANT_LIB_EXT1__ 1
22900             #include <a href="#7.21">&lt;stdio.h&gt;</a>
22901             errno_t freopen_s(FILE * restrict * restrict newstreamptr,
22902                  const char * restrict filename,
22903                  const char * restrict mode,
22904                  FILE * restrict stream);
22905     Runtime-constraints
22906 2   None of newstreamptr, mode, and stream shall be a null pointer.
22907 3   If there is a runtime-constraint violation, freopen_s neither attempts to close any file
22908     associated with stream nor attempts to open a file. Furthermore, if newstreamptr is
22909     not a null pointer, fopen_s sets *newstreamptr to the null pointer.
22910     Description
22911 4   The freopen_s function opens the file whose name is the string pointed to by
22912     filename and associates the stream pointed to by stream with it. The mode
22913     argument has the same meaning as in the fopen_s function (including the mode's effect
22914     on exclusive access and file permissions).
22915 5   If filename is a null pointer, the freopen_s function attempts to change the mode of
22916     the stream to that specified by mode, as if the name of the file currently associated with
22917     the stream had been used. It is implementation-defined which changes of mode are
22918     permitted (if any), and under what circumstances.
22919 6   The freopen_s function first attempts to close any file that is associated with stream.
22920     Failure to close the file is ignored. The error and end-of-file indicators for the stream are
22921     cleared.
22922 7   If the file was opened successfully, then the pointer to FILE pointed to by
22923     newstreamptr will be set to the value of stream. Otherwise, the pointer to FILE
22924     pointed to by newstreamptr will be set to a null pointer.
22925     Returns
22926 8   The freopen_s function returns zero if it opened the file. If it did not open the file or
22927     there was a runtime-constraint violation, freopen_s returns a nonzero value.
22928
22929 [<a name="#p585" href="p585">page 585</a>] (<a href="#Contents">Contents</a>)
22930
22931 <a name="K.3.5.3" href="#K.3.5.3"><b>    K.3.5.3 Formatted input/output functions</b></a>
22932 1   Unless explicitly stated otherwise, if the execution of a function described in this
22933     subclause causes copying to take place between objects that overlap, the objects take on
22934     unspecified values.
22935 <a name="K.3.5.3.1" href="#K.3.5.3.1"><b>    K.3.5.3.1 The fprintf_s function</b></a>
22936     Synopsis
22937 1            #define __STDC_WANT_LIB_EXT1__ 1
22938              #include <a href="#7.21">&lt;stdio.h&gt;</a>
22939              int fprintf_s(FILE * restrict stream,
22940                   const char * restrict format, ...);
22941     Runtime-constraints
22942 2   Neither stream nor format shall be a null pointer. The %n specifier371) (modified or
22943     not by flags, field width, or precision) shall not appear in the string pointed to by
22944     format. Any argument to fprintf_s corresponding to a %s specifier shall not be a
22945     null pointer.
22946 3   If there is a runtime-constraint violation,372) the fprintf_s function does not attempt
22947     to produce further output, and it is unspecified to what extent fprintf_s produced
22948     output before discovering the runtime-constraint violation.
22949     Description
22950 4   The fprintf_s function is equivalent to the fprintf function except for the explicit
22951     runtime-constraints listed above.
22952     Returns
22953 5   The fprintf_s function returns the number of characters transmitted, or a negative
22954     value if an output error, encoding error, or runtime-constraint violation occurred.
22955
22956
22957
22958
22959     371) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
22960          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
22961          format string was %%n.
22962     372) Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
22963          implementation may treat any unsupported specifiers in the string pointed to by format as a runtime-
22964          constraint violation.
22965
22966 [<a name="#p586" href="p586">page 586</a>] (<a href="#Contents">Contents</a>)
22967
22968 <a name="K.3.5.3.2" href="#K.3.5.3.2"><b>    K.3.5.3.2 The fscanf_s function</b></a>
22969     Synopsis
22970 1           #define __STDC_WANT_LIB_EXT1__ 1
22971             #include <a href="#7.21">&lt;stdio.h&gt;</a>
22972             int fscanf_s(FILE * restrict stream,
22973                  const char * restrict format, ...);
22974     Runtime-constraints
22975 2   Neither stream nor format shall be a null pointer. Any argument indirected though in
22976     order to store converted input shall not be a null pointer.
22977 3   If there is a runtime-constraint violation,373) the fscanf_s function does not attempt to
22978     perform further input, and it is unspecified to what extent fscanf_s performed input
22979     before discovering the runtime-constraint violation.
22980     Description
22981 4   The fscanf_s function is equivalent to fscanf except that the c, s, and [ conversion
22982     specifiers apply to a pair of arguments (unless assignment suppression is indicated by a
22983     *). The first of these arguments is the same as for fscanf. That argument is
22984     immediately followed in the argument list by the second argument, which has type
22985     rsize_t and gives the number of elements in the array pointed to by the first argument
22986     of the pair. If the first argument points to a scalar object, it is considered to be an array of
22987     one element.374)
22988 5   A matching failure occurs if the number of elements in a receiving object is insufficient to
22989     hold the converted input (including any trailing null character).
22990     Returns
22991 6   The fscanf_s function returns the value of the macro EOF if an input failure occurs
22992     before any conversion or if there is a runtime-constraint violation. Otherwise, the
22993
22994     373) Because an implementation may treat any undefined behavior as a runtime-constraint violation, an
22995          implementation may treat any unsupported specifiers in the string pointed to by format as a runtime-
22996          constraint violation.
22997     374) If the format is known at translation time, an implementation may issue a diagnostic for any argument
22998          used to store the result from a c, s, or [ conversion specifier if that argument is not followed by an
22999          argument of a type compatible with rsize_t. A limited amount of checking may be done if even if
23000          the format is not known at translation time. For example, an implementation may issue a diagnostic
23001          for each argument after format that has of type pointer to one of char, signed char,
23002          unsigned char, or void that is not followed by an argument of a type compatible with
23003          rsize_t. The diagnostic could warn that unless the pointer is being used with a conversion specifier
23004          using the hh length modifier, a length argument must follow the pointer argument. Another useful
23005          diagnostic could flag any non-pointer argument following format that did not have a type
23006          compatible with rsize_t.
23007
23008 [<a name="#p587" href="p587">page 587</a>] (<a href="#Contents">Contents</a>)
23009
23010     fscanf_s function returns the number of input items assigned, which can be fewer than
23011     provided for, or even zero, in the event of an early matching failure.
23012 7   EXAMPLE 1        The call:
23013              #define __STDC_WANT_LIB_EXT1__ 1
23014              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23015              /* ... */
23016              int n, i; float x; char name[50];
23017              n = fscanf_s(stdin, "%d%f%s", &amp;i, &amp;x, name, (rsize_t) 50);
23018     with the input line:
23019              25 54.32E-1 thompson
23020     will assign to n the value 3, to i the value 25, to x the value 5.432, and to name the sequence
23021     thompson\0.
23022
23023 8   EXAMPLE 2        The call:
23024              #define __STDC_WANT_LIB_EXT1__ 1
23025              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23026              /* ... */
23027              int n; char s[5];
23028              n = fscanf_s(stdin, "%s", s, sizeof s);
23029     with the input line:
23030              hello
23031     will assign to n the value 0 since a matching failure occurred because the sequence hello\0 requires an
23032     array of six characters to store it.
23033
23034 <a name="K.3.5.3.3" href="#K.3.5.3.3"><b>    K.3.5.3.3 The printf_s function</b></a>
23035     Synopsis
23036 1            #define __STDC_WANT_LIB_EXT1__ 1
23037              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23038              int printf_s(const char * restrict format, ...);
23039     Runtime-constraints
23040 2   format shall not be a null pointer. The %n specifier375) (modified or not by flags, field
23041     width, or precision) shall not appear in the string pointed to by format. Any argument
23042     to printf_s corresponding to a %s specifier shall not be a null pointer.
23043 3   If there is a runtime-constraint violation, the printf_s function does not attempt to
23044     produce further output, and it is unspecified to what extent printf_s produced output
23045     before discovering the runtime-constraint violation.
23046
23047
23048     375) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
23049          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
23050          format string was %%n.
23051
23052 [<a name="#p588" href="p588">page 588</a>] (<a href="#Contents">Contents</a>)
23053
23054     Description
23055 4   The printf_s function is equivalent to the printf function except for the explicit
23056     runtime-constraints listed above.
23057     Returns
23058 5   The printf_s function returns the number of characters transmitted, or a negative
23059     value if an output error, encoding error, or runtime-constraint violation occurred.
23060 <a name="K.3.5.3.4" href="#K.3.5.3.4"><b>    K.3.5.3.4 The scanf_s function</b></a>
23061     Synopsis
23062 1           #define __STDC_WANT_LIB_EXT1__ 1
23063             #include <a href="#7.21">&lt;stdio.h&gt;</a>
23064             int scanf_s(const char * restrict format, ...);
23065     Runtime-constraints
23066 2   format shall not be a null pointer. Any argument indirected though in order to store
23067     converted input shall not be a null pointer.
23068 3   If there is a runtime-constraint violation, the scanf_s function does not attempt to
23069     perform further input, and it is unspecified to what extent scanf_s performed input
23070     before discovering the runtime-constraint violation.
23071     Description
23072 4   The scanf_s function is equivalent to fscanf_s with the argument stdin
23073     interposed before the arguments to scanf_s.
23074     Returns
23075 5   The scanf_s function returns the value of the macro EOF if an input failure occurs
23076     before any conversion or if there is a runtime-constraint violation. Otherwise, the
23077     scanf_s function returns the number of input items assigned, which can be fewer than
23078     provided for, or even zero, in the event of an early matching failure.
23079 <a name="K.3.5.3.5" href="#K.3.5.3.5"><b>    K.3.5.3.5 The snprintf_s function</b></a>
23080     Synopsis
23081 1           #define __STDC_WANT_LIB_EXT1__ 1
23082             #include <a href="#7.21">&lt;stdio.h&gt;</a>
23083             int snprintf_s(char * restrict s, rsize_t n,
23084                  const char * restrict format, ...);
23085     Runtime-constraints
23086 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
23087     than RSIZE_MAX. The %n specifier376) (modified or not by flags, field width, or
23088     precision) shall not appear in the string pointed to by format. Any argument to
23089 [<a name="#p589" href="p589">page 589</a>] (<a href="#Contents">Contents</a>)
23090
23091     snprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
23092     error shall occur.
23093 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
23094     than zero and less than RSIZE_MAX, then the snprintf_s function sets s[0] to the
23095     null character.
23096     Description
23097 4   The snprintf_s function is equivalent to the snprintf function except for the
23098     explicit runtime-constraints listed above.
23099 5   The snprintf_s function, unlike sprintf_s, will truncate the result to fit within the
23100     array pointed to by s.
23101     Returns
23102 6   The snprintf_s function returns the number of characters that would have been
23103     written had n been sufficiently large, not counting the terminating null character, or a
23104     negative value if a runtime-constraint violation occurred. Thus, the null-terminated
23105     output has been completely written if and only if the returned value is nonnegative and
23106     less than n.
23107 <a name="K.3.5.3.6" href="#K.3.5.3.6"><b>    K.3.5.3.6 The sprintf_s function</b></a>
23108     Synopsis
23109 1            #define __STDC_WANT_LIB_EXT1__ 1
23110              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23111              int sprintf_s(char * restrict s, rsize_t n,
23112                   const char * restrict format, ...);
23113     Runtime-constraints
23114 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
23115     than RSIZE_MAX. The number of characters (including the trailing null) required for the
23116     result to be written to the array pointed to by s shall not be greater than n. The %n
23117     specifier377) (modified or not by flags, field width, or precision) shall not appear in the
23118     string pointed to by format. Any argument to sprintf_s corresponding to a %s
23119     specifier shall not be a null pointer. No encoding error shall occur.
23120
23121
23122
23123     376) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
23124          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
23125          format string was %%n.
23126     377) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
23127          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
23128          format string was %%n.
23129
23130 [<a name="#p590" href="p590">page 590</a>] (<a href="#Contents">Contents</a>)
23131
23132 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
23133     than zero and less than RSIZE_MAX, then the sprintf_s function sets s[0] to the
23134     null character.
23135     Description
23136 4   The sprintf_s function is equivalent to the sprintf function except for the
23137     parameter n and the explicit runtime-constraints listed above.
23138 5   The sprintf_s function, unlike snprintf_s, treats a result too big for the array
23139     pointed to by s as a runtime-constraint violation.
23140     Returns
23141 6   If no runtime-constraint violation occurred, the sprintf_s function returns the number
23142     of characters written in the array, not counting the terminating null character. If an
23143     encoding error occurred, sprintf_s returns a negative value. If any other runtime-
23144     constraint violation occurred, sprintf_s returns zero.
23145 <a name="K.3.5.3.7" href="#K.3.5.3.7"><b>    K.3.5.3.7 The sscanf_s function</b></a>
23146     Synopsis
23147 1           #define __STDC_WANT_LIB_EXT1__ 1
23148             #include <a href="#7.21">&lt;stdio.h&gt;</a>
23149             int sscanf_s(const char * restrict s,
23150                  const char * restrict format, ...);
23151     Runtime-constraints
23152 2   Neither s nor format shall be a null pointer. Any argument indirected though in order
23153     to store converted input shall not be a null pointer.
23154 3   If there is a runtime-constraint violation, the sscanf_s function does not attempt to
23155     perform further input, and it is unspecified to what extent sscanf_s performed input
23156     before discovering the runtime-constraint violation.
23157     Description
23158 4   The sscanf_s function is equivalent to fscanf_s, except that input is obtained from
23159     a string (specified by the argument s) rather than from a stream. Reaching the end of the
23160     string is equivalent to encountering end-of-file for the fscanf_s function. If copying
23161     takes place between objects that overlap, the objects take on unspecified values.
23162     Returns
23163 5   The sscanf_s function returns the value of the macro EOF if an input failure occurs
23164     before any conversion or if there is a runtime-constraint violation. Otherwise, the
23165     sscanf_s function returns the number of input items assigned, which can be fewer than
23166     provided for, or even zero, in the event of an early matching failure.
23167
23168 [<a name="#p591" href="p591">page 591</a>] (<a href="#Contents">Contents</a>)
23169
23170 <a name="K.3.5.3.8" href="#K.3.5.3.8"><b>    K.3.5.3.8 The vfprintf_s function</b></a>
23171     Synopsis
23172 1            #define __STDC_WANT_LIB_EXT1__ 1
23173              #include <a href="#7.16">&lt;stdarg.h&gt;</a>
23174              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23175              int vfprintf_s(FILE * restrict stream,
23176                   const char * restrict format,
23177                   va_list arg);
23178     Runtime-constraints
23179 2   Neither stream nor format shall be a null pointer. The %n specifier378) (modified or
23180     not by flags, field width, or precision) shall not appear in the string pointed to by
23181     format. Any argument to vfprintf_s corresponding to a %s specifier shall not be a
23182     null pointer.
23183 3   If there is a runtime-constraint violation, the vfprintf_s function does not attempt to
23184     produce further output, and it is unspecified to what extent vfprintf_s produced
23185     output before discovering the runtime-constraint violation.
23186     Description
23187 4   The vfprintf_s function is equivalent to the vfprintf function except for the
23188     explicit runtime-constraints listed above.
23189     Returns
23190 5   The vfprintf_s function returns the number of characters transmitted, or a negative
23191     value if an output error, encoding error, or runtime-constraint violation occurred.
23192 <a name="K.3.5.3.9" href="#K.3.5.3.9"><b>    K.3.5.3.9 The vfscanf_s function</b></a>
23193     Synopsis
23194 1            #define __STDC_WANT_LIB_EXT1__ 1
23195              #include <a href="#7.16">&lt;stdarg.h&gt;</a>
23196              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23197              int vfscanf_s(FILE * restrict stream,
23198                   const char * restrict format,
23199                   va_list arg);
23200
23201
23202
23203
23204     378) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
23205          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
23206          format string was %%n.
23207
23208 [<a name="#p592" href="p592">page 592</a>] (<a href="#Contents">Contents</a>)
23209
23210     Runtime-constraints
23211 2   Neither stream nor format shall be a null pointer. Any argument indirected though in
23212     order to store converted input shall not be a null pointer.
23213 3   If there is a runtime-constraint violation, the vfscanf_s function does not attempt to
23214     perform further input, and it is unspecified to what extent vfscanf_s performed input
23215     before discovering the runtime-constraint violation.
23216     Description
23217 4   The vfscanf_s function is equivalent to fscanf_s, with the variable argument list
23218     replaced by arg, which shall have been initialized by the va_start macro (and
23219     possibly subsequent va_arg calls). The vfscanf_s function does not invoke the
23220     va_end macro.379)
23221     Returns
23222 5   The vfscanf_s function returns the value of the macro EOF if an input failure occurs
23223     before any conversion or if there is a runtime-constraint violation. Otherwise, the
23224     vfscanf_s function returns the number of input items assigned, which can be fewer
23225     than provided for, or even zero, in the event of an early matching failure.
23226 <a name="K.3.5.3.10" href="#K.3.5.3.10"><b>    K.3.5.3.10 The vprintf_s function</b></a>
23227     Synopsis
23228 1            #define __STDC_WANT_LIB_EXT1__ 1
23229              #include <a href="#7.16">&lt;stdarg.h&gt;</a>
23230              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23231              int vprintf_s(const char * restrict format,
23232                   va_list arg);
23233     Runtime-constraints
23234 2   format shall not be a null pointer. The %n specifier380) (modified or not by flags, field
23235     width, or precision) shall not appear in the string pointed to by format. Any argument
23236     to vprintf_s corresponding to a %s specifier shall not be a null pointer.
23237 3   If there is a runtime-constraint violation, the vprintf_s function does not attempt to
23238     produce further output, and it is unspecified to what extent vprintf_s produced output
23239     before discovering the runtime-constraint violation.
23240
23241     379) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
23242          vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
23243          indeterminate.
23244     380) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
23245          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
23246          format string was %%n.
23247
23248 [<a name="#p593" href="p593">page 593</a>] (<a href="#Contents">Contents</a>)
23249
23250     Description
23251 4   The vprintf_s function is equivalent to the vprintf function except for the explicit
23252     runtime-constraints listed above.
23253     Returns
23254 5   The vprintf_s function returns the number of characters transmitted, or a negative
23255     value if an output error, encoding error, or runtime-constraint violation occurred.
23256 <a name="K.3.5.3.11" href="#K.3.5.3.11"><b>    K.3.5.3.11 The vscanf_s function</b></a>
23257     Synopsis
23258 1          #define __STDC_WANT_LIB_EXT1__ 1
23259            #include <a href="#7.16">&lt;stdarg.h&gt;</a>
23260            #include <a href="#7.21">&lt;stdio.h&gt;</a>
23261            int vscanf_s(const char * restrict format,
23262                 va_list arg);
23263     Runtime-constraints
23264 2   format shall not be a null pointer. Any argument indirected though in order to store
23265     converted input shall not be a null pointer.
23266 3   If there is a runtime-constraint violation, the vscanf_s function does not attempt to
23267     perform further input, and it is unspecified to what extent vscanf_s performed input
23268     before discovering the runtime-constraint violation.
23269     Description
23270 4   The vscanf_s function is equivalent to scanf_s, with the variable argument list
23271     replaced by arg, which shall have been initialized by the va_start macro (and
23272     possibly subsequent va_arg calls). The vscanf_s function does not invoke the
23273     va_end macro.381)
23274     Returns
23275 5   The vscanf_s function returns the value of the macro EOF if an input failure occurs
23276     before any conversion or if there is a runtime-constraint violation. Otherwise, the
23277     vscanf_s function returns the number of input items assigned, which can be fewer than
23278     provided for, or even zero, in the event of an early matching failure.
23279
23280
23281
23282
23283     381) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
23284          vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
23285          indeterminate.
23286
23287 [<a name="#p594" href="p594">page 594</a>] (<a href="#Contents">Contents</a>)
23288
23289 <a name="K.3.5.3.12" href="#K.3.5.3.12"><b>    K.3.5.3.12 The vsnprintf_s function</b></a>
23290     Synopsis
23291 1            #define __STDC_WANT_LIB_EXT1__ 1
23292              #include <a href="#7.16">&lt;stdarg.h&gt;</a>
23293              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23294              int vsnprintf_s(char * restrict s, rsize_t n,
23295                   const char * restrict format,
23296                   va_list arg);
23297     Runtime-constraints
23298 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
23299     than RSIZE_MAX. The %n specifier382) (modified or not by flags, field width, or
23300     precision) shall not appear in the string pointed to by format. Any argument to
23301     vsnprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
23302     error shall occur.
23303 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
23304     than zero and less than RSIZE_MAX, then the vsnprintf_s function sets s[0] to the
23305     null character.
23306     Description
23307 4   The vsnprintf_s function is equivalent to the vsnprintf function except for the
23308     explicit runtime-constraints listed above.
23309 5   The vsnprintf_s function, unlike vsprintf_s, will truncate the result to fit within
23310     the array pointed to by s.
23311     Returns
23312 6   The vsnprintf_s function returns the number of characters that would have been
23313     written had n been sufficiently large, not counting the terminating null character, or a
23314     negative value if a runtime-constraint violation occurred. Thus, the null-terminated
23315     output has been completely written if and only if the returned value is nonnegative and
23316     less than n.
23317
23318
23319
23320
23321     382) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
23322          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
23323          format string was %%n.
23324
23325 [<a name="#p595" href="p595">page 595</a>] (<a href="#Contents">Contents</a>)
23326
23327 <a name="K.3.5.3.13" href="#K.3.5.3.13"><b>    K.3.5.3.13 The vsprintf_s function</b></a>
23328     Synopsis
23329 1            #define __STDC_WANT_LIB_EXT1__ 1
23330              #include <a href="#7.16">&lt;stdarg.h&gt;</a>
23331              #include <a href="#7.21">&lt;stdio.h&gt;</a>
23332              int vsprintf_s(char * restrict s, rsize_t n,
23333                   const char * restrict format,
23334                   va_list arg);
23335     Runtime-constraints
23336 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
23337     than RSIZE_MAX. The number of characters (including the trailing null) required for the
23338     result to be written to the array pointed to by s shall not be greater than n. The %n
23339     specifier383) (modified or not by flags, field width, or precision) shall not appear in the
23340     string pointed to by format. Any argument to vsprintf_s corresponding to a %s
23341     specifier shall not be a null pointer. No encoding error shall occur.
23342 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
23343     than zero and less than RSIZE_MAX, then the vsprintf_s function sets s[0] to the
23344     null character.
23345     Description
23346 4   The vsprintf_s function is equivalent to the vsprintf function except for the
23347     parameter n and the explicit runtime-constraints listed above.
23348 5   The vsprintf_s function, unlike vsnprintf_s, treats a result too big for the array
23349     pointed to by s as a runtime-constraint violation.
23350     Returns
23351 6   If no runtime-constraint violation occurred, the vsprintf_s function returns the
23352     number of characters written in the array, not counting the terminating null character. If
23353     an encoding error occurred, vsprintf_s returns a negative value. If any other
23354     runtime-constraint violation occurred, vsprintf_s returns zero.
23355
23356
23357
23358
23359     383) It is not a runtime-constraint violation for the characters %n to appear in sequence in the string pointed
23360          at by format when those characters are not a interpreted as a %n specifier. For example, if the entire
23361          format string was %%n.
23362
23363 [<a name="#p596" href="p596">page 596</a>] (<a href="#Contents">Contents</a>)
23364
23365 <a name="K.3.5.3.14" href="#K.3.5.3.14"><b>    K.3.5.3.14 The vsscanf_s function</b></a>
23366     Synopsis
23367 1           #define __STDC_WANT_LIB_EXT1__ 1
23368             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
23369             #include <a href="#7.21">&lt;stdio.h&gt;</a>
23370             int vsscanf_s(const char * restrict s,
23371                  const char * restrict format,
23372                  va_list arg);
23373     Runtime-constraints
23374 2   Neither s nor format shall be a null pointer. Any argument indirected though in order
23375     to store converted input shall not be a null pointer.
23376 3   If there is a runtime-constraint violation, the vsscanf_s function does not attempt to
23377     perform further input, and it is unspecified to what extent vsscanf_s performed input
23378     before discovering the runtime-constraint violation.
23379     Description
23380 4   The vsscanf_s function is equivalent to sscanf_s, with the variable argument list
23381     replaced by arg, which shall have been initialized by the va_start macro (and
23382     possibly subsequent va_arg calls). The vsscanf_s function does not invoke the
23383     va_end macro.384)
23384     Returns
23385 5   The vsscanf_s function returns the value of the macro EOF if an input failure occurs
23386     before any conversion or if there is a runtime-constraint violation. Otherwise, the
23387     vscanf_s function returns the number of input items assigned, which can be fewer than
23388     provided for, or even zero, in the event of an early matching failure.
23389 <a name="K.3.5.4" href="#K.3.5.4"><b>    K.3.5.4 Character input/output functions</b></a>
23390 <a name="K.3.5.4.1" href="#K.3.5.4.1"><b>    K.3.5.4.1 The gets_s function</b></a>
23391     Synopsis
23392 1           #define __STDC_WANT_LIB_EXT1__ 1
23393             #include <a href="#7.21">&lt;stdio.h&gt;</a>
23394             char *gets_s(char *s, rsize_t n);
23395
23396
23397
23398
23399     384) As the functions vfprintf_s, vfscanf_s, vprintf_s, vscanf_s, vsnprintf_s,
23400          vsprintf_s, and vsscanf_s invoke the va_arg macro, the value of arg after the return is
23401          indeterminate.
23402
23403 [<a name="#p597" href="p597">page 597</a>] (<a href="#Contents">Contents</a>)
23404
23405     Runtime-constraints
23406 2   s shall not be a null pointer. n shall neither be equal to zero nor be greater than
23407     RSIZE_MAX. A new-line character, end-of-file, or read error shall occur within reading
23408     n-1 characters from stdin.385)
23409 3   If there is a runtime-constraint violation, s[0] is set to the null character, and characters
23410     are read and discarded from stdin until a new-line character is read, or end-of-file or a
23411     read error occurs.
23412     Description
23413 4   The gets_s function reads at most one less than the number of characters specified by n
23414     from the stream pointed to by stdin, into the array pointed to by s. No additional
23415     characters are read after a new-line character (which is discarded) or after end-of-file.
23416     The discarded new-line character does not count towards number of characters read. A
23417     null character is written immediately after the last character read into the array.
23418 5   If end-of-file is encountered and no characters have been read into the array, or if a read
23419     error occurs during the operation, then s[0] is set to the null character, and the other
23420     elements of s take unspecified values.
23421     Recommended practice
23422 6   The fgets function allows properly-written programs to safely process input lines too
23423     long to store in the result array. In general this requires that callers of fgets pay
23424     attention to the presence or absence of a new-line character in the result array. Consider
23425     using fgets (along with any needed processing based on new-line characters) instead of
23426     gets_s.
23427     Returns
23428 7   The gets_s function returns s if successful. If there was a runtime-constraint violation,
23429     or if end-of-file is encountered and no characters have been read into the array, or if a
23430     read error occurs during the operation, then a null pointer is returned.
23431
23432
23433
23434
23435     385) The gets_s function, unlike the historical gets function, makes it a runtime-constraint violation for
23436          a line of input to overflow the buffer to store it. Unlike the fgets function, gets_s maintains a
23437          one-to-one relationship between input lines and successful calls to gets_s. Programs that use gets
23438          expect such a relationship.
23439
23440 [<a name="#p598" href="p598">page 598</a>] (<a href="#Contents">Contents</a>)
23441
23442 <a name="K.3.6" href="#K.3.6"><b>    K.3.6 General utilities &lt;stdlib.h&gt;</b></a>
23443 1   The header <a href="#7.22">&lt;stdlib.h&gt;</a> defines three types.
23444 2   The types are
23445             errno_t
23446     which is type int; and
23447             rsize_t
23448     which is the type size_t; and
23449             constraint_handler_t
23450     which has the following definition
23451             typedef void (*constraint_handler_t)(
23452                  const char * restrict msg,
23453                  void * restrict ptr,
23454                  errno_t error);
23455 <a name="K.3.6.1" href="#K.3.6.1"><b>    K.3.6.1 Runtime-constraint handling</b></a>
23456 <a name="K.3.6.1.1" href="#K.3.6.1.1"><b>    K.3.6.1.1 The set_constraint_handler_s function</b></a>
23457     Synopsis
23458 1           #define __STDC_WANT_LIB_EXT1__ 1
23459             #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23460             constraint_handler_t set_constraint_handler_s(
23461                  constraint_handler_t handler);
23462     Description
23463 2   The set_constraint_handler_s function sets the runtime-constraint handler to
23464     be handler. The runtime-constraint handler is the function to be called when a library
23465     function detects a runtime-constraint violation. Only the most recent handler registered
23466     with set_constraint_handler_s is called when a runtime-constraint violation
23467     occurs.
23468 3   When the handler is called, it is passed the following arguments in the following order:
23469        1.   A pointer to a character string describing the runtime-constraint violation.
23470        2.   A null pointer or a pointer to an implementation defined object.
23471        3.   If the function calling the handler has a return type declared as errno_t, the
23472             return value of the function is passed. Otherwise, a positive value of type
23473             errno_t is passed.
23474
23475
23476
23477 [<a name="#p599" href="p599">page 599</a>] (<a href="#Contents">Contents</a>)
23478
23479 4   The implementation has a default constraint handler that is used if no calls to the
23480     set_constraint_handler_s function have been made. The behavior of the
23481     default handler is implementation-defined, and it may cause the program to exit or abort.
23482 5   If the handler argument to set_constraint_handler_s is a null pointer, the
23483     implementation default handler becomes the current constraint handler.
23484     Returns
23485 6   The set_constraint_handler_s function returns a pointer to the previously
23486     registered handler.386)
23487 <a name="K.3.6.1.2" href="#K.3.6.1.2"><b>    K.3.6.1.2 The abort_handler_s function</b></a>
23488     Synopsis
23489 1           #define __STDC_WANT_LIB_EXT1__ 1
23490             #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23491             void abort_handler_s(
23492                  const char * restrict msg,
23493                  void * restrict ptr,
23494                  errno_t error);
23495     Description
23496 2   A pointer to the abort_handler_s function shall be a suitable argument to the
23497     set_constraint_handler_s function.
23498 3   The abort_handler_s function writes a message on the standard error stream in an
23499     implementation-defined format. The message shall include the string pointed to by msg.
23500     The abort_handler_s function then calls the abort function.387)
23501     Returns
23502 4   The abort_handler_s function does not return to its caller.
23503
23504
23505
23506
23507     386) If the previous handler was registered by calling set_constraint_handler_s with a null
23508          pointer argument, a pointer to the implementation default handler is returned (not NULL).
23509     387) Many implementations invoke a debugger when the abort function is called.
23510
23511 [<a name="#p600" href="p600">page 600</a>] (<a href="#Contents">Contents</a>)
23512
23513 <a name="K.3.6.1.3" href="#K.3.6.1.3"><b>    K.3.6.1.3 The ignore_handler_s function</b></a>
23514     Synopsis
23515 1            #define __STDC_WANT_LIB_EXT1__ 1
23516              #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23517              void ignore_handler_s(
23518                   const char * restrict msg,
23519                   void * restrict ptr,
23520                   errno_t error);
23521     Description
23522 2   A pointer to the ignore_handler_s function shall be a suitable argument to the
23523     set_constraint_handler_s function.
23524 3   The ignore_handler_s function simply returns to its caller.388)
23525     Returns
23526 4   The ignore_handler_s function returns no value.
23527 <a name="K.3.6.2" href="#K.3.6.2"><b>    K.3.6.2 Communication with the environment</b></a>
23528 <a name="K.3.6.2.1" href="#K.3.6.2.1"><b>    K.3.6.2.1 The getenv_s function</b></a>
23529     Synopsis
23530 1            #define __STDC_WANT_LIB_EXT1__ 1
23531              #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23532              errno_t getenv_s(size_t * restrict len,
23533                         char * restrict value, rsize_t maxsize,
23534                         const char * restrict name);
23535     Runtime-constraints
23536 2   name shall not be a null pointer. maxsize shall neither equal zero nor be greater than
23537     RSIZE_MAX. If maxsize is not equal to zero, then value shall not be a null pointer.
23538 3   If there is a runtime-constraint violation, the integer pointed to by len is set to 0 (if len
23539     is not null), and the environment list is not searched.
23540     Description
23541 4   The getenv_s function searches an environment list, provided by the host environment,
23542     for a string that matches the string pointed to by name.
23543
23544
23545     388) If the runtime-constraint handler is set to the ignore_handler_s function, any library function in
23546          which a runtime-constraint violation occurs will return to its caller. The caller can determine whether
23547          a runtime-constraint violation occurred based on the library function's specification (usually, the
23548          library function returns a nonzero errno_t).
23549
23550 [<a name="#p601" href="p601">page 601</a>] (<a href="#Contents">Contents</a>)
23551
23552 5   If that name is found then getenv_s performs the following actions. If len is not a
23553     null pointer, the length of the string associated with the matched list member is stored in
23554     the integer pointed to by len. If the length of the associated string is less than maxsize,
23555     then the associated string is copied to the array pointed to by value.
23556 6   If that name is not found then getenv_s performs the following actions. If len is not
23557     a null pointer, zero is stored in the integer pointed to by len. If maxsize is greater than
23558     zero, then value[0] is set to the null character.
23559 7   The set of environment names and the method for altering the environment list are
23560     implementation-defined.
23561     Returns
23562 8   The getenv_s function returns zero if the specified name is found and the associated
23563     string was successfully stored in value. Otherwise, a nonzero value is returned.
23564 <a name="K.3.6.3" href="#K.3.6.3"><b>    K.3.6.3 Searching and sorting utilities</b></a>
23565 1   These utilities make use of a comparison function to search or sort arrays of unspecified
23566     type. Where an argument declared as size_t nmemb specifies the length of the array
23567     for a function, if nmemb has the value zero on a call to that function, then the comparison
23568     function is not called, a search finds no matching element, sorting performs no
23569     rearrangement, and the pointer to the array may be null.
23570 2   The implementation shall ensure that the second argument of the comparison function
23571     (when called from bsearch_s), or both arguments (when called from qsort_s), are
23572     pointers to elements of the array.389) The first argument when called from bsearch_s
23573     shall equal key.
23574 3   The comparison function shall not alter the contents of either the array or search key. The
23575     implementation may reorder elements of the array between calls to the comparison
23576     function, but shall not otherwise alter the contents of any individual element.
23577 4   When the same objects (consisting of size bytes, irrespective of their current positions
23578     in the array) are passed more than once to the comparison function, the results shall be
23579     consistent with one another. That is, for qsort_s they shall define a total ordering on
23580     the array, and for bsearch_s the same object shall always compare the same way with
23581     the key.
23582
23583
23584
23585
23586     389) That is, if the value passed is p, then the following expressions are always valid and nonzero:
23587                   ((char *)p - (char *)base) % size == 0
23588                   (char *)p &gt;= (char *)base
23589                   (char *)p &lt; (char *)base + nmemb * size
23590
23591
23592 [<a name="#p602" href="p602">page 602</a>] (<a href="#Contents">Contents</a>)
23593
23594 5   A sequence point occurs immediately before and immediately after each call to the
23595     comparison function, and also between any call to the comparison function and any
23596     movement of the objects passed as arguments to that call.
23597 <a name="K.3.6.3.1" href="#K.3.6.3.1"><b>    K.3.6.3.1 The bsearch_s function</b></a>
23598     Synopsis
23599 1            #define __STDC_WANT_LIB_EXT1__ 1
23600              #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23601              void *bsearch_s(const void *key, const void *base,
23602                   rsize_t nmemb, rsize_t size,
23603                   int (*compar)(const void *k, const void *y,
23604                                   void *context),
23605                   void *context);
23606     Runtime-constraints
23607 2   Neither nmemb nor size shall be greater than RSIZE_MAX. If nmemb is not equal to
23608     zero, then none of key, base, or compar shall be a null pointer.
23609 3   If there is a runtime-constraint violation, the bsearch_s function does not search the
23610     array.
23611     Description
23612 4   The bsearch_s function searches an array of nmemb objects, the initial element of
23613     which is pointed to by base, for an element that matches the object pointed to by key.
23614     The size of each element of the array is specified by size.
23615 5   The comparison function pointed to by compar is called with three arguments. The first
23616     two point to the key object and to an array element, in that order. The function shall
23617     return an integer less than, equal to, or greater than zero if the key object is considered,
23618     respectively, to be less than, to match, or to be greater than the array element. The array
23619     shall consist of: all the elements that compare less than, all the elements that compare
23620     equal to, and all the elements that compare greater than the key object, in that order.390)
23621     The third argument to the comparison function is the context argument passed to
23622     bsearch_s. The sole use of context by bsearch_s is to pass it to the comparison
23623     function.391)
23624
23625
23626
23627
23628     390) In practice, this means that the entire array has been sorted according to the comparison function.
23629     391) The context argument is for the use of the comparison function in performing its duties. For
23630          example, it might specify a collating sequence used by the comparison function.
23631
23632 [<a name="#p603" href="p603">page 603</a>] (<a href="#Contents">Contents</a>)
23633
23634     Returns
23635 6   The bsearch_s function returns a pointer to a matching element of the array, or a null
23636     pointer if no match is found or there is a runtime-constraint violation. If two elements
23637     compare as equal, which element is matched is unspecified.
23638 <a name="K.3.6.3.2" href="#K.3.6.3.2"><b>    K.3.6.3.2 The qsort_s function</b></a>
23639     Synopsis
23640 1           #define __STDC_WANT_LIB_EXT1__ 1
23641             #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23642             errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size,
23643                  int (*compar)(const void *x, const void *y,
23644                                  void *context),
23645                  void *context);
23646     Runtime-constraints
23647 2   Neither nmemb nor size shall be greater than RSIZE_MAX. If nmemb is not equal to
23648     zero, then neither base nor compar shall be a null pointer.
23649 3   If there is a runtime-constraint violation, the qsort_s function does not sort the array.
23650     Description
23651 4   The qsort_s function sorts an array of nmemb objects, the initial element of which is
23652     pointed to by base. The size of each object is specified by size.
23653 5   The contents of the array are sorted into ascending order according to a comparison
23654     function pointed to by compar, which is called with three arguments. The first two
23655     point to the objects being compared. The function shall return an integer less than, equal
23656     to, or greater than zero if the first argument is considered to be respectively less than,
23657     equal to, or greater than the second. The third argument to the comparison function is the
23658     context argument passed to qsort_s. The sole use of context by qsort_s is to
23659     pass it to the comparison function.392)
23660 6   If two elements compare as equal, their relative order in the resulting sorted array is
23661     unspecified.
23662     Returns
23663 7   The qsort_s function returns zero if there was no runtime-constraint violation.
23664     Otherwise, a nonzero value is returned.
23665
23666
23667
23668
23669     392) The context argument is for the use of the comparison function in performing its duties. For
23670          example, it might specify a collating sequence used by the comparison function.
23671
23672 [<a name="#p604" href="p604">page 604</a>] (<a href="#Contents">Contents</a>)
23673
23674 <a name="K.3.6.4" href="#K.3.6.4"><b>    K.3.6.4 Multibyte/wide character conversion functions</b></a>
23675 1   The behavior of the multibyte character functions is affected by the LC_CTYPE category
23676     of the current locale. For a state-dependent encoding, each function is placed into its
23677     initial conversion state by a call for which its character pointer argument, s, is a null
23678     pointer. Subsequent calls with s as other than a null pointer cause the internal conversion
23679     state of the function to be altered as necessary. A call with s as a null pointer causes
23680     these functions to set the int pointed to by their status argument to a nonzero value if
23681     encodings have state dependency, and zero otherwise.393) Changing the LC_CTYPE
23682     category causes the conversion state of these functions to be indeterminate.
23683 <a name="K.3.6.4.1" href="#K.3.6.4.1"><b>    K.3.6.4.1 The wctomb_s function</b></a>
23684     Synopsis
23685 1           #define __STDC_WANT_LIB_EXT1__ 1
23686             #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23687             errno_t wctomb_s(int * restrict status,
23688                  char * restrict s,
23689                  rsize_t smax,
23690                  wchar_t wc);
23691     Runtime-constraints
23692 2   Let n denote the number of bytes needed to represent the multibyte character
23693     corresponding to the wide character given by wc (including any shift sequences).
23694 3   If s is not a null pointer, then smax shall not be less than n, and smax shall not be
23695     greater than RSIZE_MAX. If s is a null pointer, then smax shall equal zero.
23696 4   If there is a runtime-constraint violation, wctomb_s does not modify the int pointed to
23697     by status, and if s is not a null pointer, no more than smax elements in the array
23698     pointed to by s will be accessed.
23699     Description
23700 5   The wctomb_s function determines n and stores the multibyte character representation
23701     of wc in the array whose first element is pointed to by s (if s is not a null pointer). The
23702     number of characters stored never exceeds MB_CUR_MAX or smax. If wc is a null wide
23703     character, a null byte is stored, preceded by any shift sequence needed to restore the
23704     initial shift state, and the function is left in the initial conversion state.
23705 6   The implementation shall behave as if no library function calls the wctomb_s function.
23706
23707
23708
23709     393) If the locale employs special bytes to change the shift state, these bytes do not produce separate wide
23710          character codes, but are grouped with an adjacent multibyte character.
23711
23712 [<a name="#p605" href="p605">page 605</a>] (<a href="#Contents">Contents</a>)
23713
23714 7    If s is a null pointer, the wctomb_s function stores into the int pointed to by status a
23715      nonzero or zero value, if multibyte character encodings, respectively, do or do not have
23716      state-dependent encodings.
23717 8    If s is not a null pointer, the wctomb_s function stores into the int pointed to by
23718      status either n or -1 if wc, respectively, does or does not correspond to a valid
23719      multibyte character.
23720 9    In no case will the int pointed to by status be set to a value greater than the
23721      MB_CUR_MAX macro.
23722      Returns
23723 10   The wctomb_s function returns zero if successful, and a nonzero value if there was a
23724      runtime-constraint violation or wc did not correspond to a valid multibyte character.
23725 <a name="K.3.6.5" href="#K.3.6.5"><b>     K.3.6.5 Multibyte/wide string conversion functions</b></a>
23726 1    The behavior of the multibyte string functions is affected by the LC_CTYPE category of
23727      the current locale.
23728 <a name="K.3.6.5.1" href="#K.3.6.5.1"><b>     K.3.6.5.1 The mbstowcs_s function</b></a>
23729      Synopsis
23730 1           #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23731             errno_t mbstowcs_s(size_t * restrict retval,
23732                  wchar_t * restrict dst, rsize_t dstmax,
23733                  const char * restrict src, rsize_t len);
23734      Runtime-constraints
23735 2    Neither retval nor src shall be a null pointer. If dst is not a null pointer, then
23736      neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null pointer,
23737      then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall not equal
23738      zero. If dst is not a null pointer and len is not less than dstmax, then a null character
23739      shall occur within the first dstmax multibyte characters of the array pointed to by src.
23740 3    If there is a runtime-constraint violation, then mbstowcs_s does the following. If
23741      retval is not a null pointer, then mbstowcs_s sets *retval to (size_t)(-1). If
23742      dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
23743      then mbstowcs_s sets dst[0] to the null wide character.
23744      Description
23745 4    The mbstowcs_s function converts a sequence of multibyte characters that begins in
23746      the initial shift state from the array pointed to by src into a sequence of corresponding
23747      wide characters. If dst is not a null pointer, the converted characters are stored into the
23748      array pointed to by dst. Conversion continues up to and including a terminating null
23749      character, which is also stored. Conversion stops earlier in two cases: when a sequence of
23750 [<a name="#p606" href="p606">page 606</a>] (<a href="#Contents">Contents</a>)
23751
23752     bytes is encountered that does not form a valid multibyte character, or (if dst is not a
23753     null pointer) when len wide characters have been stored into the array pointed to by
23754     dst.394) If dst is not a null pointer and no null wide character was stored into the array
23755     pointed to by dst, then dst[len] is set to the null wide character. Each conversion
23756     takes place as if by a call to the mbrtowc function.
23757 5   Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
23758     sequence of bytes that do not form a valid multibyte character, an encoding error occurs:
23759     the mbstowcs_s function stores the value (size_t)(-1) into *retval.
23760     Otherwise, the mbstowcs_s function stores into *retval the number of multibyte
23761     characters successfully converted, not including the terminating null character (if any).
23762 6   All elements following the terminating null wide character (if any) written by
23763     mbstowcs_s in the array of dstmax wide characters pointed to by dst take
23764     unspecified values when mbstowcs_s returns.395)
23765 7   If copying takes place between objects that overlap, the objects take on unspecified
23766     values.
23767     Returns
23768 8   The mbstowcs_s function returns zero if no runtime-constraint violation and no
23769     encoding error occurred. Otherwise, a nonzero value is returned.
23770 <a name="K.3.6.5.2" href="#K.3.6.5.2"><b>    K.3.6.5.2 The wcstombs_s function</b></a>
23771     Synopsis
23772 1            #include <a href="#7.22">&lt;stdlib.h&gt;</a>
23773              errno_t wcstombs_s(size_t * restrict retval,
23774                   char * restrict dst, rsize_t dstmax,
23775                   const wchar_t * restrict src, rsize_t len);
23776     Runtime-constraints
23777 2   Neither retval nor src shall be a null pointer. If dst is not a null pointer, then
23778     neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null pointer,
23779     then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall not equal
23780     zero. If dst is not a null pointer and len is not less than dstmax, then the conversion
23781     shall have been stopped (see below) because a terminating null wide character was
23782     reached or because an encoding error occurred.
23783
23784
23785
23786
23787     394) Thus, the value of len is ignored if dst is a null pointer.
23788     395) This allows an implementation to attempt converting the multibyte string before discovering a
23789          terminating null character did not occur where required.
23790
23791 [<a name="#p607" href="p607">page 607</a>] (<a href="#Contents">Contents</a>)
23792
23793 3   If there is a runtime-constraint violation, then wcstombs_s does the following. If
23794     retval is not a null pointer, then wcstombs_s sets *retval to (size_t)(-1). If
23795     dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
23796     then wcstombs_s sets dst[0] to the null character.
23797     Description
23798 4   The wcstombs_s function converts a sequence of wide characters from the array
23799     pointed to by src into a sequence of corresponding multibyte characters that begins in
23800     the initial shift state. If dst is not a null pointer, the converted characters are then stored
23801     into the array pointed to by dst. Conversion continues up to and including a terminating
23802     null wide character, which is also stored. Conversion stops earlier in two cases:
23803     -- when a wide character is reached that does not correspond to a valid multibyte
23804       character;
23805     -- (if dst is not a null pointer) when the next multibyte character would exceed the
23806         limit of n total bytes to be stored into the array pointed to by dst. If the wide
23807         character being converted is the null wide character, then n is the lesser of len or
23808         dstmax. Otherwise, n is the lesser of len or dstmax-1.
23809     If the conversion stops without converting a null wide character and dst is not a null
23810     pointer, then a null character is stored into the array pointed to by dst immediately
23811     following any multibyte characters already stored. Each conversion takes place as if by a
23812     call to the wcrtomb function.396)
23813 5   Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
23814     wide character that does not correspond to a valid multibyte character, an encoding error
23815     occurs: the wcstombs_s function stores the value (size_t)(-1) into *retval.
23816     Otherwise, the wcstombs_s function stores into *retval the number of bytes in the
23817     resulting multibyte character sequence, not including the terminating null character (if
23818     any).
23819 6   All elements following the terminating null character (if any) written by wcstombs_s
23820     in the array of dstmax elements pointed to by dst take unspecified values when
23821     wcstombs_s returns.397)
23822 7   If copying takes place between objects that overlap, the objects take on unspecified
23823     values.
23824
23825
23826     396) If conversion stops because a terminating null wide character has been reached, the bytes stored
23827          include those necessary to reach the initial shift state immediately before the null byte. However, if
23828          the conversion stops before a terminating null wide character has been reached, the result will be null
23829          terminated, but might not end in the initial shift state.
23830     397) When len is not less than dstmax, the implementation might fill the array before discovering a
23831          runtime-constraint violation.
23832
23833 [<a name="#p608" href="p608">page 608</a>] (<a href="#Contents">Contents</a>)
23834
23835     Returns
23836 8   The wcstombs_s function returns zero if no runtime-constraint violation and no
23837     encoding error occurred. Otherwise, a nonzero value is returned.
23838 <a name="K.3.7" href="#K.3.7"><b>    K.3.7 String handling &lt;string.h&gt;</b></a>
23839 1   The header <a href="#7.23">&lt;string.h&gt;</a> defines two types.
23840 2   The types are
23841             errno_t
23842     which is type int; and
23843             rsize_t
23844     which is the type size_t.
23845 <a name="K.3.7.1" href="#K.3.7.1"><b>    K.3.7.1 Copying functions</b></a>
23846 <a name="K.3.7.1.1" href="#K.3.7.1.1"><b>    K.3.7.1.1 The memcpy_s function</b></a>
23847     Synopsis
23848 1           #define __STDC_WANT_LIB_EXT1__ 1
23849             #include <a href="#7.23">&lt;string.h&gt;</a>
23850             errno_t memcpy_s(void * restrict s1, rsize_t s1max,
23851                  const void * restrict s2, rsize_t n);
23852     Runtime-constraints
23853 2   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
23854     RSIZE_MAX. n shall not be greater than s1max. Copying shall not take place between
23855     objects that overlap.
23856 3   If there is a runtime-constraint violation, the memcpy_s function stores zeros in the first
23857     s1max characters of the object pointed to by s1 if s1 is not a null pointer and s1max is
23858     not greater than RSIZE_MAX.
23859     Description
23860 4   The memcpy_s function copies n characters from the object pointed to by s2 into the
23861     object pointed to by s1.
23862     Returns
23863 5   The memcpy_s function returns zero if there was no runtime-constraint violation.
23864     Otherwise, a nonzero value is returned.
23865
23866
23867
23868
23869 [<a name="#p609" href="p609">page 609</a>] (<a href="#Contents">Contents</a>)
23870
23871 <a name="K.3.7.1.2" href="#K.3.7.1.2"><b>    K.3.7.1.2 The memmove_s function</b></a>
23872     Synopsis
23873 1          #define __STDC_WANT_LIB_EXT1__ 1
23874            #include <a href="#7.23">&lt;string.h&gt;</a>
23875            errno_t memmove_s(void *s1, rsize_t s1max,
23876                 const void *s2, rsize_t n);
23877     Runtime-constraints
23878 2   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
23879     RSIZE_MAX. n shall not be greater than s1max.
23880 3   If there is a runtime-constraint violation, the memmove_s function stores zeros in the
23881     first s1max characters of the object pointed to by s1 if s1 is not a null pointer and
23882     s1max is not greater than RSIZE_MAX.
23883     Description
23884 4   The memmove_s function copies n characters from the object pointed to by s2 into the
23885     object pointed to by s1. This copying takes place as if the n characters from the object
23886     pointed to by s2 are first copied into a temporary array of n characters that does not
23887     overlap the objects pointed to by s1 or s2, and then the n characters from the temporary
23888     array are copied into the object pointed to by s1.
23889     Returns
23890 5   The memmove_s function returns zero if there was no runtime-constraint violation.
23891     Otherwise, a nonzero value is returned.
23892 <a name="K.3.7.1.3" href="#K.3.7.1.3"><b>    K.3.7.1.3 The strcpy_s function</b></a>
23893     Synopsis
23894 1          #define __STDC_WANT_LIB_EXT1__ 1
23895            #include <a href="#7.23">&lt;string.h&gt;</a>
23896            errno_t strcpy_s(char * restrict s1,
23897                 rsize_t s1max,
23898                 const char * restrict s2);
23899     Runtime-constraints
23900 2   Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
23901     s1max shall not equal zero. s1max shall be greater than strnlen_s(s2, s1max).
23902     Copying shall not take place between objects that overlap.
23903 3   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
23904     greater than zero and not greater than RSIZE_MAX, then strcpy_s sets s1[0] to the
23905     null character.
23906
23907 [<a name="#p610" href="p610">page 610</a>] (<a href="#Contents">Contents</a>)
23908
23909     Description
23910 4   The strcpy_s function copies the string pointed to by s2 (including the terminating
23911     null character) into the array pointed to by s1.
23912 5   All elements following the terminating null character (if any) written by strcpy_s in
23913     the array of s1max characters pointed to by s1 take unspecified values when
23914     strcpy_s returns.398)
23915     Returns
23916 6   The strcpy_s function returns zero399) if there was no runtime-constraint violation.
23917     Otherwise, a nonzero value is returned.
23918 <a name="K.3.7.1.4" href="#K.3.7.1.4"><b>    K.3.7.1.4 The strncpy_s function</b></a>
23919     Synopsis
23920 1           #define __STDC_WANT_LIB_EXT1__ 1
23921             #include <a href="#7.23">&lt;string.h&gt;</a>
23922             errno_t strncpy_s(char * restrict s1,
23923                  rsize_t s1max,
23924                  const char * restrict s2,
23925                  rsize_t n);
23926     Runtime-constraints
23927 2   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
23928     RSIZE_MAX. s1max shall not equal zero. If n is not less than s1max, then s1max
23929     shall be greater than strnlen_s(s2, s1max). Copying shall not take place between
23930     objects that overlap.
23931 3   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
23932     greater than zero and not greater than RSIZE_MAX, then strncpy_s sets s1[0] to the
23933     null character.
23934     Description
23935 4   The strncpy_s function copies not more than n successive characters (characters that
23936     follow a null character are not copied) from the array pointed to by s2 to the array
23937     pointed to by s1. If no null character was copied from s2, then s1[n] is set to a null
23938     character.
23939
23940
23941     398) This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
23942          any of those characters are null. Such an approach might write a character to every element of s1
23943          before discovering that the first element should be set to the null character.
23944     399) A zero return value implies that all of the requested characters from the string pointed to by s2 fit
23945          within the array pointed to by s1 and that the result in s1 is null terminated.
23946
23947 [<a name="#p611" href="p611">page 611</a>] (<a href="#Contents">Contents</a>)
23948
23949 5   All elements following the terminating null character (if any) written by strncpy_s in
23950     the array of s1max characters pointed to by s1 take unspecified values when
23951     strncpy_s returns.400)
23952     Returns
23953 6   The strncpy_s function returns zero401) if there was no runtime-constraint violation.
23954     Otherwise, a nonzero value is returned.
23955 7   EXAMPLE 1 The strncpy_s function can be used to copy a string without the danger that the result
23956     will not be null terminated or that characters will be written past the end of the destination array.
23957             #define __STDC_WANT_LIB_EXT1__ 1
23958             #include <a href="#7.23">&lt;string.h&gt;</a>
23959             /* ... */
23960             char src1[100] = "hello";
23961             char src2[7] = {'g', 'o', 'o', 'd', 'b', 'y', 'e'};
23962             char dst1[6], dst2[5], dst3[5];
23963             int r1, r2, r3;
23964             r1 = strncpy_s(dst1, 6, src1, 100);
23965             r2 = strncpy_s(dst2, 5, src2, 7);
23966             r3 = strncpy_s(dst3, 5, src2, 4);
23967     The first call will assign to r1 the value zero and to dst1 the sequence hello\0.
23968     The second call will assign to r2 a nonzero value and to dst2 the sequence \0.
23969     The third call will assign to r3 the value zero and to dst3 the sequence good\0.
23970
23971 <a name="K.3.7.2" href="#K.3.7.2"><b>    K.3.7.2 Concatenation functions</b></a>
23972 <a name="K.3.7.2.1" href="#K.3.7.2.1"><b>    K.3.7.2.1 The strcat_s function</b></a>
23973     Synopsis
23974 1           #define __STDC_WANT_LIB_EXT1__ 1
23975             #include <a href="#7.23">&lt;string.h&gt;</a>
23976             errno_t strcat_s(char * restrict s1,
23977                  rsize_t s1max,
23978                  const char * restrict s2);
23979     Runtime-constraints
23980 2   Let m denote the value s1max - strnlen_s(s1, s1max) upon entry to
23981     strcat_s.
23982
23983
23984
23985
23986     400) This allows an implementation to copy characters from s2 to s1 while simultaneously checking if
23987          any of those characters are null. Such an approach might write a character to every element of s1
23988          before discovering that the first element should be set to the null character.
23989     401) A zero return value implies that all of the requested characters from the string pointed to by s2 fit
23990          within the array pointed to by s1 and that the result in s1 is null terminated.
23991
23992 [<a name="#p612" href="p612">page 612</a>] (<a href="#Contents">Contents</a>)
23993
23994 3   Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
23995     s1max shall not equal zero. m shall not equal zero.402) m shall be greater than
23996     strnlen_s(s2, m). Copying shall not take place between objects that overlap.
23997 4   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
23998     greater than zero and not greater than RSIZE_MAX, then strcat_s sets s1[0] to the
23999     null character.
24000     Description
24001 5   The strcat_s function appends a copy of the string pointed to by s2 (including the
24002     terminating null character) to the end of the string pointed to by s1. The initial character
24003     from s2 overwrites the null character at the end of s1.
24004 6   All elements following the terminating null character (if any) written by strcat_s in
24005     the array of s1max characters pointed to by s1 take unspecified values when
24006     strcat_s returns.403)
24007     Returns
24008 7   The strcat_s function returns zero404) if there was no runtime-constraint violation.
24009     Otherwise, a nonzero value is returned.
24010 <a name="K.3.7.2.2" href="#K.3.7.2.2"><b>    K.3.7.2.2 The strncat_s function</b></a>
24011     Synopsis
24012 1           #define __STDC_WANT_LIB_EXT1__ 1
24013             #include <a href="#7.23">&lt;string.h&gt;</a>
24014             errno_t strncat_s(char * restrict s1,
24015                  rsize_t s1max,
24016                  const char * restrict s2,
24017                  rsize_t n);
24018     Runtime-constraints
24019 2   Let m denote the value s1max - strnlen_s(s1, s1max) upon entry to
24020     strncat_s.
24021 3   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
24022     RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.405) If n is not less
24023
24024
24025     402) Zero means that s1 was not null terminated upon entry to strcat_s.
24026     403) This allows an implementation to append characters from s2 to s1 while simultaneously checking if
24027          any of those characters are null. Such an approach might write a character to every element of s1
24028          before discovering that the first element should be set to the null character.
24029     404) A zero return value implies that all of the requested characters from the string pointed to by s2 were
24030          appended to the string pointed to by s1 and that the result in s1 is null terminated.
24031
24032 [<a name="#p613" href="p613">page 613</a>] (<a href="#Contents">Contents</a>)
24033
24034     than m, then m shall be greater than strnlen_s(s2, m). Copying shall not take
24035     place between objects that overlap.
24036 4   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
24037     greater than zero and not greater than RSIZE_MAX, then strncat_s sets s1[0] to the
24038     null character.
24039     Description
24040 5   The strncat_s function appends not more than n successive characters (characters
24041     that follow a null character are not copied) from the array pointed to by s2 to the end of
24042     the string pointed to by s1. The initial character from s2 overwrites the null character at
24043     the end of s1. If no null character was copied from s2, then s1[s1max-m+n] is set to
24044     a null character.
24045 6   All elements following the terminating null character (if any) written by strncat_s in
24046     the array of s1max characters pointed to by s1 take unspecified values when
24047     strncat_s returns.406)
24048     Returns
24049 7   The strncat_s function returns zero407) if there was no runtime-constraint violation.
24050     Otherwise, a nonzero value is returned.
24051 8   EXAMPLE 1 The strncat_s function can be used to copy a string without the danger that the result
24052     will not be null terminated or that characters will be written past the end of the destination array.
24053             #define __STDC_WANT_LIB_EXT1__ 1
24054             #include <a href="#7.23">&lt;string.h&gt;</a>
24055             /* ... */
24056             char s1[100] = "good";
24057             char s2[6] = "hello";
24058             char s3[6] = "hello";
24059             char s4[7] = "abc";
24060             char s5[1000] = "bye";
24061             int r1, r2, r3, r4;
24062             r1 = strncat_s(s1, 100, s5, 1000);
24063             r2 = strncat_s(s2, 6, "", 1);
24064             r3 = strncat_s(s3, 6, "X", 2);
24065             r4 = strncat_s(s4, 7, "defghijklmn", 3);
24066     After the first call r1 will have the value zero and s1 will contain the sequence goodbye\0.
24067
24068
24069
24070     405) Zero means that s1 was not null terminated upon entry to strncat_s.
24071     406) This allows an implementation to append characters from s2 to s1 while simultaneously checking if
24072          any of those characters are null. Such an approach might write a character to every element of s1
24073          before discovering that the first element should be set to the null character.
24074     407) A zero return value implies that all of the requested characters from the string pointed to by s2 were
24075          appended to the string pointed to by s1 and that the result in s1 is null terminated.
24076
24077 [<a name="#p614" href="p614">page 614</a>] (<a href="#Contents">Contents</a>)
24078
24079     After the second call r2 will have the value zero and s2 will contain the sequence hello\0.
24080     After the third call r3 will have a nonzero value and s3 will contain the sequence \0.
24081     After the fourth call r4 will have the value zero and s4 will contain the sequence abcdef\0.
24082
24083 <a name="K.3.7.3" href="#K.3.7.3"><b>    K.3.7.3 Search functions</b></a>
24084 <a name="K.3.7.3.1" href="#K.3.7.3.1"><b>    K.3.7.3.1 The strtok_s function</b></a>
24085     Synopsis
24086 1           #define __STDC_WANT_LIB_EXT1__ 1
24087             #include <a href="#7.23">&lt;string.h&gt;</a>
24088             char *strtok_s(char * restrict s1,
24089                  rsize_t * restrict s1max,
24090                  const char * restrict s2,
24091                  char ** restrict ptr);
24092     Runtime-constraints
24093 2   None of s1max, s2, or ptr shall be a null pointer. If s1 is a null pointer, then *ptr
24094     shall not be a null pointer. The value of *s1max shall not be greater than RSIZE_MAX.
24095     The end of the token found shall occur within the first *s1max characters of s1 for the
24096     first call, and shall occur within the first *s1max characters of where searching resumes
24097     on subsequent calls.
24098 3   If there is a runtime-constraint violation, the strtok_s function does not indirect
24099     through the s1 or s2 pointers, and does not store a value in the object pointed to by ptr.
24100     Description
24101 4   A sequence of calls to the strtok_s function breaks the string pointed to by s1 into a
24102     sequence of tokens, each of which is delimited by a character from the string pointed to
24103     by s2. The fourth argument points to a caller-provided char pointer into which the
24104     strtok_s function stores information necessary for it to continue scanning the same
24105     string.
24106 5   The first call in a sequence has a non-null first argument and s1max points to an object
24107     whose value is the number of elements in the character array pointed to by the first
24108     argument. The first call stores an initial value in the object pointed to by ptr and
24109     updates the value pointed to by s1max to reflect the number of elements that remain in
24110     relation to ptr. Subsequent calls in the sequence have a null first argument and the
24111     objects pointed to by s1max and ptr are required to have the values stored by the
24112     previous call in the sequence, which are then updated. The separator string pointed to by
24113     s2 may be different from call to call.
24114 6   The first call in the sequence searches the string pointed to by s1 for the first character
24115     that is not contained in the current separator string pointed to by s2. If no such character
24116     is found, then there are no tokens in the string pointed to by s1 and the strtok_s
24117     function returns a null pointer. If such a character is found, it is the start of the first token.
24118 [<a name="#p615" href="p615">page 615</a>] (<a href="#Contents">Contents</a>)
24119
24120 7    The strtok_s function then searches from there for the first character in s1 that is
24121      contained in the current separator string. If no such character is found, the current token
24122      extends to the end of the string pointed to by s1, and subsequent searches in the same
24123      string for a token return a null pointer. If such a character is found, it is overwritten by a
24124      null character, which terminates the current token.
24125 8    In all cases, the strtok_s function stores sufficient information in the pointer pointed
24126      to by ptr so that subsequent calls, with a null pointer for s1 and the unmodified pointer
24127      value for ptr, shall start searching just past the element overwritten by a null character
24128      (if any).
24129      Returns
24130 9    The strtok_s function returns a pointer to the first character of a token, or a null
24131      pointer if there is no token or there is a runtime-constraint violation.
24132 10   EXAMPLE
24133             #define __STDC_WANT_LIB_EXT1__ 1
24134             #include <a href="#7.23">&lt;string.h&gt;</a>
24135             static char str1[] = "?a???b,,,#c";
24136             static char str2[] = "\t \t";
24137             char *t, *ptr1, *ptr2;
24138             rsize_t max1 = sizeof(str1);
24139             rsize_t max2 = sizeof(str2);
24140             t   =   strtok_s(str1,   &amp;max1,   "?", &amp;ptr1);         //   t   points to the token "a"
24141             t   =   strtok_s(NULL,   &amp;max1,   ",", &amp;ptr1);         //   t   points to the token "??b"
24142             t   =   strtok_s(str2,   &amp;max2,   " \t", &amp;ptr2);       //   t   is a null pointer
24143             t   =   strtok_s(NULL,   &amp;max1,   "#,", &amp;ptr1);        //   t   points to the token "c"
24144             t   =   strtok_s(NULL,   &amp;max1,   "?", &amp;ptr1);         //   t   is a null pointer
24145
24146 <a name="K.3.7.4" href="#K.3.7.4"><b>     K.3.7.4 Miscellaneous functions</b></a>
24147 <a name="K.3.7.4.1" href="#K.3.7.4.1"><b>     K.3.7.4.1 The memset_s function</b></a>
24148      Synopsis
24149 1           #define __STDC_WANT_LIB_EXT1__ 1
24150             #include <a href="#7.23">&lt;string.h&gt;</a>
24151             errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n)
24152      Runtime-constraints
24153 2    s shall not be a null pointer. Neither smax nor n shall be greater than RSIZE_MAX. n
24154      shall not be greater than smax.
24155 3    If there is a runtime-constraint violation, then if s is not a null pointer and smax is not
24156      greater than RSIZE_MAX, the memset_s function stores the value of c (converted to an
24157      unsigned char) into each of the first smax characters of the object pointed to by s.
24158
24159
24160
24161 [<a name="#p616" href="p616">page 616</a>] (<a href="#Contents">Contents</a>)
24162
24163     Description
24164 4   The memset_s function copies the value of c (converted to an unsigned char) into
24165     each of the first n characters of the object pointed to by s. Unlike memset, any call to
24166     the memset_s function shall be evaluated strictly according to the rules of the abstract
24167     machine as described in (<a href="#5.1.2.3">5.1.2.3</a>). That is, any call to the memset_s function shall
24168     assume that the memory indicated by s and n may be accessible in the future and thus
24169     must contain the values indicated by c.
24170     Returns
24171 5   The memset_s function returns zero if there was no runtime-constraint violation.
24172     Otherwise, a nonzero value is returned.
24173 <a name="K.3.7.4.2" href="#K.3.7.4.2"><b>    K.3.7.4.2 The strerror_s function</b></a>
24174     Synopsis
24175 1           #define __STDC_WANT_LIB_EXT1__ 1
24176             #include <a href="#7.23">&lt;string.h&gt;</a>
24177             errno_t strerror_s(char *s, rsize_t maxsize,
24178                  errno_t errnum);
24179     Runtime-constraints
24180 2   s shall not be a null pointer. maxsize shall not be greater than RSIZE_MAX.
24181     maxsize shall not equal zero.
24182 3   If there is a runtime-constraint violation, then the array (if any) pointed to by s is not
24183     modified.
24184     Description
24185 4   The strerror_s function maps the number in errnum to a locale-specific message
24186     string. Typically, the values for errnum come from errno, but strerror_s shall
24187     map any value of type int to a message.
24188 5   If the length of the desired string is less than maxsize, then the string is copied to the
24189     array pointed to by s.
24190 6   Otherwise, if maxsize is greater than zero, then maxsize-1 characters are copied
24191     from the string to the array pointed to by s and then s[maxsize-1] is set to the null
24192     character. Then, if maxsize is greater than 3, then s[maxsize-2],
24193     s[maxsize-3], and s[maxsize-4] are set to the character period (.).
24194     Returns
24195 7   The strerror_s function returns zero if the length of the desired string was less than
24196     maxsize and there was no runtime-constraint violation. Otherwise, the strerror_s
24197     function returns a nonzero value.
24198
24199 [<a name="#p617" href="p617">page 617</a>] (<a href="#Contents">Contents</a>)
24200
24201 <a name="K.3.7.4.3" href="#K.3.7.4.3"><b>    K.3.7.4.3 The strerrorlen_s function</b></a>
24202     Synopsis
24203 1           #define __STDC_WANT_LIB_EXT1__ 1
24204             #include <a href="#7.23">&lt;string.h&gt;</a>
24205             size_t strerrorlen_s(errno_t errnum);
24206     Description
24207 2   The strerrorlen_s function calculates the length of the (untruncated) locale-specific
24208     message string that the strerror_s function maps to errnum.
24209     Returns
24210 3   The strerrorlen_s function returns the number of characters (not including the null
24211     character) in the full message string.
24212 <a name="K.3.7.4.4" href="#K.3.7.4.4"><b>    K.3.7.4.4 The strnlen_s function</b></a>
24213     Synopsis
24214 1           #define __STDC_WANT_LIB_EXT1__ 1
24215             #include <a href="#7.23">&lt;string.h&gt;</a>
24216             size_t strnlen_s(const char *s, size_t maxsize);
24217     Description
24218 2   The strnlen_s function computes the length of the string pointed to by s.
24219     Returns
24220 3   If s is a null pointer,408) then the strnlen_s function returns zero.
24221 4   Otherwise, the strnlen_s function returns the number of characters that precede the
24222     terminating null character. If there is no null character in the first maxsize characters of
24223     s then strnlen_s returns maxsize. At most the first maxsize characters of s shall
24224     be accessed by strnlen_s.
24225
24226
24227
24228
24229     408) Note that the strnlen_s function has no runtime-constraints. This lack of runtime-constraints
24230          along with the values returned for a null pointer or an unterminated string argument make
24231          strnlen_s useful in algorithms that gracefully handle such exceptional data.
24232
24233 [<a name="#p618" href="p618">page 618</a>] (<a href="#Contents">Contents</a>)
24234
24235 <a name="K.3.8" href="#K.3.8"><b>    K.3.8 Date and time &lt;time.h&gt;</b></a>
24236 1   The header <a href="#7.26">&lt;time.h&gt;</a> defines two types.
24237 2   The types are
24238             errno_t
24239     which is type int; and
24240             rsize_t
24241     which is the type size_t.
24242 <a name="K.3.8.1" href="#K.3.8.1"><b>    K.3.8.1 Components of time</b></a>
24243 1   A broken-down time is normalized if the values of the members of the tm structure are in
24244     their normal rages.409)
24245 <a name="K.3.8.2" href="#K.3.8.2"><b>    K.3.8.2 Time conversion functions</b></a>
24246 1   Like the strftime function, the asctime_s and ctime_s functions do not return a
24247     pointer to a static object, and other library functions are permitted to call them.
24248 <a name="K.3.8.2.1" href="#K.3.8.2.1"><b>    K.3.8.2.1 The asctime_s function</b></a>
24249     Synopsis
24250 1           #define __STDC_WANT_LIB_EXT1__ 1
24251             #include <a href="#7.26">&lt;time.h&gt;</a>
24252             errno_t asctime_s(char *s, rsize_t maxsize,
24253                  const struct tm *timeptr);
24254     Runtime-constraints
24255 2   Neither s nor timeptr shall be a null pointer. maxsize shall not be less than 26 and
24256     shall not be greater than RSIZE_MAX. The broken-down time pointed to by timeptr
24257     shall be normalized. The calendar year represented by the broken-down time pointed to
24258     by timeptr shall not be less than calendar year 0 and shall not be greater than calendar
24259     year 9999.
24260 3   If there is a runtime-constraint violation, there is no attempt to convert the time, and
24261     s[0] is set to a null character if s is not a null pointer and maxsize is not zero and is
24262     not greater than RSIZE_MAX.
24263     Description
24264 4   The asctime_s function converts the normalized broken-down time in the structure
24265     pointed to by timeptr into a 26 character (including the null character) string in the
24266
24267
24268     409) The normal ranges are defined in <a href="#7.26.1">7.26.1</a>.
24269
24270 [<a name="#p619" href="p619">page 619</a>] (<a href="#Contents">Contents</a>)
24271
24272     form
24273             Sun Sep 16 01:03:52 1973\n\0
24274     The fields making up this string are (in order):
24275        1.   The name of the day of the week represented by timeptr-&gt;tm_wday using the
24276             following three character weekday names: Sun, Mon, Tue, Wed, Thu, Fri, and Sat.
24277        2.   The character space.
24278        3. The name of the month represented by timeptr-&gt;tm_mon using the following
24279           three character month names: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct,
24280           Nov, and Dec.
24281        4.   The character space.
24282        5.   The value of timeptr-&gt;tm_mday as if printed using the fprintf format
24283             "%2d".
24284        6.   The character space.
24285        7.   The value of timeptr-&gt;tm_hour as if printed using the fprintf format
24286             "%.2d".
24287        8.   The character colon.
24288        9.   The value of timeptr-&gt;tm_min as if printed using the fprintf format
24289             "%.2d".
24290      10.    The character colon.
24291      11.    The value of timeptr-&gt;tm_sec as if printed using the fprintf format
24292             "%.2d".
24293      12.    The character space.
24294      13.    The value of timeptr-&gt;tm_year + 1900 as if printed using the fprintf
24295             format "%4d".
24296      14.    The character new line.
24297      15.    The null character.
24298     Recommended practice
24299     The strftime function allows more flexible formatting and supports locale-specific
24300     behavior. If you do not require the exact form of the result string produced by the
24301     asctime_s function, consider using the strftime function instead.
24302     Returns
24303 5   The asctime_s function returns zero if the time was successfully converted and stored
24304     into the array pointed to by s. Otherwise, it returns a nonzero value.
24305 [<a name="#p620" href="p620">page 620</a>] (<a href="#Contents">Contents</a>)
24306
24307 <a name="K.3.8.2.2" href="#K.3.8.2.2"><b>    K.3.8.2.2 The ctime_s function</b></a>
24308     Synopsis
24309 1           #define __STDC_WANT_LIB_EXT1__ 1
24310             #include <a href="#7.26">&lt;time.h&gt;</a>
24311             errno_t ctime_s(char *s, rsize_t maxsize,
24312                  const time_t *timer);
24313     Runtime-constraints
24314 2   Neither s nor timer shall be a null pointer. maxsize shall not be less than 26 and
24315     shall not be greater than RSIZE_MAX.
24316 3   If there is a runtime-constraint violation, s[0] is set to a null character if s is not a null
24317     pointer and maxsize is not equal zero and is not greater than RSIZE_MAX.
24318     Description
24319 4   The ctime_s function converts the calendar time pointed to by timer to local time in
24320     the form of a string. It is equivalent to
24321             asctime_s(s, maxsize, localtime_s(timer))
24322     Recommended practice
24323     The strftime function allows more flexible formatting and supports locale-specific
24324     behavior. If you do not require the exact form of the result string produced by the
24325     ctime_s function, consider using the strftime function instead.
24326     Returns
24327 5   The ctime_s function returns zero if the time was successfully converted and stored
24328     into the array pointed to by s. Otherwise, it returns a nonzero value.
24329 <a name="K.3.8.2.3" href="#K.3.8.2.3"><b>    K.3.8.2.3 The gmtime_s function</b></a>
24330     Synopsis
24331 1           #define __STDC_WANT_LIB_EXT1__ 1
24332             #include <a href="#7.26">&lt;time.h&gt;</a>
24333             struct tm *gmtime_s(const time_t * restrict timer,
24334                  struct tm * restrict result);
24335     Runtime-constraints
24336 2   Neither timer nor result shall be a null pointer.
24337 3   If there is a runtime-constraint violation, there is no attempt to convert the time.
24338     Description
24339 4   The gmtime_s function converts the calendar time pointed to by timer into a broken-
24340     down time, expressed as UTC. The broken-down time is stored in the structure pointed
24341 [<a name="#p621" href="p621">page 621</a>] (<a href="#Contents">Contents</a>)
24342
24343     to by result.
24344     Returns
24345 5   The gmtime_s function returns result, or a null pointer if the specified time cannot
24346     be converted to UTC or there is a runtime-constraint violation.
24347 <a name="K.3.8.2.4" href="#K.3.8.2.4"><b>    K.3.8.2.4 The localtime_s function</b></a>
24348     Synopsis
24349 1          #define __STDC_WANT_LIB_EXT1__ 1
24350            #include <a href="#7.26">&lt;time.h&gt;</a>
24351            struct tm *localtime_s(const time_t * restrict timer,
24352                 struct tm * restrict result);
24353     Runtime-constraints
24354 2   Neither timer nor result shall be a null pointer.
24355 3   If there is a runtime-constraint violation, there is no attempt to convert the time.
24356     Description
24357 4   The localtime_s function converts the calendar time pointed to by timer into a
24358     broken-down time, expressed as local time. The broken-down time is stored in the
24359     structure pointed to by result.
24360     Returns
24361 5   The localtime_s function returns result, or a null pointer if the specified time
24362     cannot be converted to local time or there is a runtime-constraint violation.
24363 <a name="K.3.9" href="#K.3.9"><b>    K.3.9 Extended multibyte and wide character utilities &lt;wchar.h&gt;</b></a>
24364 1   The header <a href="#7.28">&lt;wchar.h&gt;</a> defines two types.
24365 2   The types are
24366            errno_t
24367     which is type int; and
24368            rsize_t
24369     which is the type size_t.
24370 3   Unless explicitly stated otherwise, if the execution of a function described in this
24371     subclause causes copying to take place between objects that overlap, the objects take on
24372     unspecified values.
24373
24374
24375
24376
24377 [<a name="#p622" href="p622">page 622</a>] (<a href="#Contents">Contents</a>)
24378
24379 <a name="K.3.9.1" href="#K.3.9.1"><b>    K.3.9.1 Formatted wide character input/output functions</b></a>
24380 <a name="K.3.9.1.1" href="#K.3.9.1.1"><b>    K.3.9.1.1 The fwprintf_s function</b></a>
24381     Synopsis
24382 1           #define __STDC_WANT_LIB_EXT1__ 1
24383             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24384             int fwprintf_s(FILE * restrict stream,
24385                  const wchar_t * restrict format, ...);
24386     Runtime-constraints
24387 2   Neither stream nor format shall be a null pointer. The %n specifier410) (modified or
24388     not by flags, field width, or precision) shall not appear in the wide string pointed to by
24389     format. Any argument to fwprintf_s corresponding to a %s specifier shall not be a
24390     null pointer.
24391 3   If there is a runtime-constraint violation, the fwprintf_s function does not attempt to
24392     produce further output, and it is unspecified to what extent fwprintf_s produced
24393     output before discovering the runtime-constraint violation.
24394     Description
24395 4   The fwprintf_s function is equivalent to the fwprintf function except for the
24396     explicit runtime-constraints listed above.
24397     Returns
24398 5   The fwprintf_s function returns the number of wide characters transmitted, or a
24399     negative value if an output error, encoding error, or runtime-constraint violation occurred.
24400 <a name="K.3.9.1.2" href="#K.3.9.1.2"><b>    K.3.9.1.2 The fwscanf_s function</b></a>
24401     Synopsis
24402 1           #define __STDC_WANT_LIB_EXT1__ 1
24403             #include <a href="#7.21">&lt;stdio.h&gt;</a>
24404             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24405             int fwscanf_s(FILE * restrict stream,
24406                  const wchar_t * restrict format, ...);
24407     Runtime-constraints
24408 2   Neither stream nor format shall be a null pointer. Any argument indirected though in
24409     order to store converted input shall not be a null pointer.
24410
24411
24412     410) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24413          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24414          example, if the entire format string was L"%%n".
24415
24416 [<a name="#p623" href="p623">page 623</a>] (<a href="#Contents">Contents</a>)
24417
24418 3   If there is a runtime-constraint violation, the fwscanf_s function does not attempt to
24419     perform further input, and it is unspecified to what extent fwscanf_s performed input
24420     before discovering the runtime-constraint violation.
24421     Description
24422 4   The fwscanf_s function is equivalent to fwscanf except that the c, s, and [
24423     conversion specifiers apply to a pair of arguments (unless assignment suppression is
24424     indicated by a *). The first of these arguments is the same as for fwscanf. That
24425     argument is immediately followed in the argument list by the second argument, which has
24426     type size_t and gives the number of elements in the array pointed to by the first
24427     argument of the pair. If the first argument points to a scalar object, it is considered to be
24428     an array of one element.411)
24429 5   A matching failure occurs if the number of elements in a receiving object is insufficient to
24430     hold the converted input (including any trailing null character).
24431     Returns
24432 6   The fwscanf_s function returns the value of the macro EOF if an input failure occurs
24433     before any conversion or if there is a runtime-constraint violation. Otherwise, the
24434     fwscanf_s function returns the number of input items assigned, which can be fewer
24435     than provided for, or even zero, in the event of an early matching failure.
24436 <a name="K.3.9.1.3" href="#K.3.9.1.3"><b>    K.3.9.1.3 The snwprintf_s function</b></a>
24437     Synopsis
24438 1           #define __STDC_WANT_LIB_EXT1__ 1
24439             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24440             int snwprintf_s(wchar_t * restrict s,
24441                  rsize_t n,
24442                  const wchar_t * restrict format, ...);
24443     Runtime-constraints
24444 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
24445     than RSIZE_MAX. The %n specifier412) (modified or not by flags, field width, or
24446
24447     411) If the format is known at translation time, an implementation may issue a diagnostic for any argument
24448          used to store the result from a c, s, or [ conversion specifier if that argument is not followed by an
24449          argument of a type compatible with rsize_t. A limited amount of checking may be done if even if
24450          the format is not known at translation time. For example, an implementation may issue a diagnostic
24451          for each argument after format that has of type pointer to one of char, signed char,
24452          unsigned char, or void that is not followed by an argument of a type compatible with
24453          rsize_t. The diagnostic could warn that unless the pointer is being used with a conversion specifier
24454          using the hh length modifier, a length argument must follow the pointer argument. Another useful
24455          diagnostic could flag any non-pointer argument following format that did not have a type
24456          compatible with rsize_t.
24457
24458 [<a name="#p624" href="p624">page 624</a>] (<a href="#Contents">Contents</a>)
24459
24460     precision) shall not appear in the wide string pointed to by format. Any argument to
24461     snwprintf_s corresponding to a %s specifier shall not be a null pointer. No encoding
24462     error shall occur.
24463 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
24464     than zero and less than RSIZE_MAX, then the snwprintf_s function sets s[0] to the
24465     null wide character.
24466     Description
24467 4   The snwprintf_s function is equivalent to the swprintf function except for the
24468     explicit runtime-constraints listed above.
24469 5   The snwprintf_s function, unlike swprintf_s, will truncate the result to fit within
24470     the array pointed to by s.
24471     Returns
24472 6   The snwprintf_s function returns the number of wide characters that would have
24473     been written had n been sufficiently large, not counting the terminating wide null
24474     character, or a negative value if a runtime-constraint violation occurred. Thus, the null-
24475     terminated output has been completely written if and only if the returned value is
24476     nonnegative and less than n.
24477 <a name="K.3.9.1.4" href="#K.3.9.1.4"><b>    K.3.9.1.4 The swprintf_s function</b></a>
24478     Synopsis
24479 1           #define __STDC_WANT_LIB_EXT1__ 1
24480             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24481             int swprintf_s(wchar_t * restrict s, rsize_t n,
24482                  const wchar_t * restrict format, ...);
24483     Runtime-constraints
24484 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
24485     than RSIZE_MAX. The number of wide characters (including the trailing null) required
24486     for the result to be written to the array pointed to by s shall not be greater than n. The %n
24487     specifier413) (modified or not by flags, field width, or precision) shall not appear in the
24488     wide string pointed to by format. Any argument to swprintf_s corresponding to a
24489     %s specifier shall not be a null pointer. No encoding error shall occur.
24490
24491
24492     412) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24493          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24494          example, if the entire format string was L"%%n".
24495     413) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24496          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24497          example, if the entire format string was L"%%n".
24498
24499 [<a name="#p625" href="p625">page 625</a>] (<a href="#Contents">Contents</a>)
24500
24501 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
24502     than zero and less than RSIZE_MAX, then the swprintf_s function sets s[0] to the
24503     null wide character.
24504     Description
24505 4   The swprintf_s function is equivalent to the swprintf function except for the
24506     explicit runtime-constraints listed above.
24507 5   The swprintf_s function, unlike snwprintf_s, treats a result too big for the array
24508     pointed to by s as a runtime-constraint violation.
24509     Returns
24510 6   If no runtime-constraint violation occurred, the swprintf_s function returns the
24511     number of wide characters written in the array, not counting the terminating null wide
24512     character. If an encoding error occurred or if n or more wide characters are requested to
24513     be written, swprintf_s returns a negative value. If any other runtime-constraint
24514     violation occurred, swprintf_s returns zero.
24515 <a name="K.3.9.1.5" href="#K.3.9.1.5"><b>    K.3.9.1.5 The swscanf_s function</b></a>
24516     Synopsis
24517 1          #define __STDC_WANT_LIB_EXT1__ 1
24518            #include <a href="#7.28">&lt;wchar.h&gt;</a>
24519            int swscanf_s(const wchar_t * restrict s,
24520                 const wchar_t * restrict format, ...);
24521     Runtime-constraints
24522 2   Neither s nor format shall be a null pointer. Any argument indirected though in order
24523     to store converted input shall not be a null pointer.
24524 3   If there is a runtime-constraint violation, the swscanf_s function does not attempt to
24525     perform further input, and it is unspecified to what extent swscanf_s performed input
24526     before discovering the runtime-constraint violation.
24527     Description
24528 4   The swscanf_s function is equivalent to fwscanf_s, except that the argument s
24529     specifies a wide string from which the input is to be obtained, rather than from a stream.
24530     Reaching the end of the wide string is equivalent to encountering end-of-file for the
24531     fwscanf_s function.
24532     Returns
24533 5   The swscanf_s function returns the value of the macro EOF if an input failure occurs
24534     before any conversion or if there is a runtime-constraint violation. Otherwise, the
24535     swscanf_s function returns the number of input items assigned, which can be fewer
24536     than provided for, or even zero, in the event of an early matching failure.
24537 [<a name="#p626" href="p626">page 626</a>] (<a href="#Contents">Contents</a>)
24538
24539 <a name="K.3.9.1.6" href="#K.3.9.1.6"><b>    K.3.9.1.6 The vfwprintf_s function</b></a>
24540     Synopsis
24541 1           #define __STDC_WANT_LIB_EXT1__ 1
24542             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
24543             #include <a href="#7.21">&lt;stdio.h&gt;</a>
24544             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24545             int vfwprintf_s(FILE * restrict stream,
24546                  const wchar_t * restrict format,
24547                  va_list arg);
24548     Runtime-constraints
24549 2   Neither stream nor format shall be a null pointer. The %n specifier414) (modified or
24550     not by flags, field width, or precision) shall not appear in the wide string pointed to by
24551     format. Any argument to vfwprintf_s corresponding to a %s specifier shall not be
24552     a null pointer.
24553 3   If there is a runtime-constraint violation, the vfwprintf_s function does not attempt
24554     to produce further output, and it is unspecified to what extent vfwprintf_s produced
24555     output before discovering the runtime-constraint violation.
24556     Description
24557 4   The vfwprintf_s function is equivalent to the vfwprintf function except for the
24558     explicit runtime-constraints listed above.
24559     Returns
24560 5   The vfwprintf_s function returns the number of wide characters transmitted, or a
24561     negative value if an output error, encoding error, or runtime-constraint violation occurred.
24562 <a name="K.3.9.1.7" href="#K.3.9.1.7"><b>    K.3.9.1.7 The vfwscanf_s function</b></a>
24563     Synopsis
24564 1           #define __STDC_WANT_LIB_EXT1__ 1
24565             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
24566             #include <a href="#7.21">&lt;stdio.h&gt;</a>
24567             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24568             int vfwscanf_s(FILE * restrict stream,
24569                  const wchar_t * restrict format, va_list arg);
24570
24571
24572
24573     414) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24574          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24575          example, if the entire format string was L"%%n".
24576
24577 [<a name="#p627" href="p627">page 627</a>] (<a href="#Contents">Contents</a>)
24578
24579     Runtime-constraints
24580 2   Neither stream nor format shall be a null pointer. Any argument indirected though in
24581     order to store converted input shall not be a null pointer.
24582 3   If there is a runtime-constraint violation, the vfwscanf_s function does not attempt to
24583     perform further input, and it is unspecified to what extent vfwscanf_s performed input
24584     before discovering the runtime-constraint violation.
24585     Description
24586 4   The vfwscanf_s function is equivalent to fwscanf_s, with the variable argument
24587     list replaced by arg, which shall have been initialized by the va_start macro (and
24588     possibly subsequent va_arg calls). The vfwscanf_s function does not invoke the
24589     va_end macro.415)
24590     Returns
24591 5   The vfwscanf_s function returns the value of the macro EOF if an input failure occurs
24592     before any conversion or if there is a runtime-constraint violation. Otherwise, the
24593     vfwscanf_s function returns the number of input items assigned, which can be fewer
24594     than provided for, or even zero, in the event of an early matching failure.
24595 <a name="K.3.9.1.8" href="#K.3.9.1.8"><b>    K.3.9.1.8 The vsnwprintf_s function</b></a>
24596     Synopsis
24597 1           #define __STDC_WANT_LIB_EXT1__ 1
24598             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
24599             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24600             int vsnwprintf_s(wchar_t * restrict s,
24601                  rsize_t n,
24602                  const wchar_t * restrict format,
24603                  va_list arg);
24604     Runtime-constraints
24605 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
24606     than RSIZE_MAX. The %n specifier416) (modified or not by flags, field width, or
24607     precision) shall not appear in the wide string pointed to by format. Any argument to
24608     vsnwprintf_s corresponding to a %s specifier shall not be a null pointer. No
24609     encoding error shall occur.
24610
24611     415) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
24612          value of arg after the return is indeterminate.
24613     416) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24614          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24615          example, if the entire format string was L"%%n".
24616
24617 [<a name="#p628" href="p628">page 628</a>] (<a href="#Contents">Contents</a>)
24618
24619 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
24620     than zero and less than RSIZE_MAX, then the vsnwprintf_s function sets s[0] to
24621     the null wide character.
24622     Description
24623 4   The vsnwprintf_s function is equivalent to the vswprintf function except for the
24624     explicit runtime-constraints listed above.
24625 5   The vsnwprintf_s function, unlike vswprintf_s, will truncate the result to fit
24626     within the array pointed to by s.
24627     Returns
24628 6   The vsnwprintf_s function returns the number of wide characters that would have
24629     been written had n been sufficiently large, not counting the terminating null character, or
24630     a negative value if a runtime-constraint violation occurred. Thus, the null-terminated
24631     output has been completely written if and only if the returned value is nonnegative and
24632     less than n.
24633 <a name="K.3.9.1.9" href="#K.3.9.1.9"><b>    K.3.9.1.9 The vswprintf_s function</b></a>
24634     Synopsis
24635 1           #define __STDC_WANT_LIB_EXT1__ 1
24636             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
24637             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24638             int vswprintf_s(wchar_t * restrict s,
24639                  rsize_t n,
24640                  const wchar_t * restrict format,
24641                  va_list arg);
24642     Runtime-constraints
24643 2   Neither s nor format shall be a null pointer. n shall neither equal zero nor be greater
24644     than RSIZE_MAX. The number of wide characters (including the trailing null) required
24645     for the result to be written to the array pointed to by s shall not be greater than n. The %n
24646     specifier417) (modified or not by flags, field width, or precision) shall not appear in the
24647     wide string pointed to by format. Any argument to vswprintf_s corresponding to a
24648     %s specifier shall not be a null pointer. No encoding error shall occur.
24649 3   If there is a runtime-constraint violation, then if s is not a null pointer and n is greater
24650     than zero and less than RSIZE_MAX, then the vswprintf_s function sets s[0] to the
24651     null wide character.
24652
24653     417) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24654          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24655          example, if the entire format string was L"%%n".
24656
24657 [<a name="#p629" href="p629">page 629</a>] (<a href="#Contents">Contents</a>)
24658
24659     Description
24660 4   The vswprintf_s function is equivalent to the vswprintf function except for the
24661     explicit runtime-constraints listed above.
24662 5   The vswprintf_s function, unlike vsnwprintf_s, treats a result too big for the
24663     array pointed to by s as a runtime-constraint violation.
24664     Returns
24665 6   If no runtime-constraint violation occurred, the vswprintf_s function returns the
24666     number of wide characters written in the array, not counting the terminating null wide
24667     character. If an encoding error occurred or if n or more wide characters are requested to
24668     be written, vswprintf_s returns a negative value. If any other runtime-constraint
24669     violation occurred, vswprintf_s returns zero.
24670 <a name="K.3.9.1.10" href="#K.3.9.1.10"><b>    K.3.9.1.10 The vswscanf_s function</b></a>
24671     Synopsis
24672 1          #define __STDC_WANT_LIB_EXT1__ 1
24673            #include <a href="#7.16">&lt;stdarg.h&gt;</a>
24674            #include <a href="#7.28">&lt;wchar.h&gt;</a>
24675            int vswscanf_s(const wchar_t * restrict s,
24676                 const wchar_t * restrict format,
24677                 va_list arg);
24678     Runtime-constraints
24679 2   Neither s nor format shall be a null pointer. Any argument indirected though in order
24680     to store converted input shall not be a null pointer.
24681 3   If there is a runtime-constraint violation, the vswscanf_s function does not attempt to
24682     perform further input, and it is unspecified to what extent vswscanf_s performed input
24683     before discovering the runtime-constraint violation.
24684     Description
24685 4   The vswscanf_s function is equivalent to swscanf_s, with the variable argument
24686     list replaced by arg, which shall have been initialized by the va_start macro (and
24687     possibly subsequent va_arg calls). The vswscanf_s function does not invoke the
24688     va_end macro.418)
24689
24690
24691
24692
24693     418) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
24694          value of arg after the return is indeterminate.
24695
24696 [<a name="#p630" href="p630">page 630</a>] (<a href="#Contents">Contents</a>)
24697
24698     Returns
24699 5   The vswscanf_s function returns the value of the macro EOF if an input failure occurs
24700     before any conversion or if there is a runtime-constraint violation. Otherwise, the
24701     vswscanf_s function returns the number of input items assigned, which can be fewer
24702     than provided for, or even zero, in the event of an early matching failure.
24703 <a name="K.3.9.1.11" href="#K.3.9.1.11"><b>    K.3.9.1.11 The vwprintf_s function</b></a>
24704     Synopsis
24705 1           #define __STDC_WANT_LIB_EXT1__ 1
24706             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
24707             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24708             int vwprintf_s(const wchar_t * restrict format,
24709                  va_list arg);
24710     Runtime-constraints
24711 2   format shall not be a null pointer. The %n specifier419) (modified or not by flags, field
24712     width, or precision) shall not appear in the wide string pointed to by format. Any
24713     argument to vwprintf_s corresponding to a %s specifier shall not be a null pointer.
24714 3   If there is a runtime-constraint violation, the vwprintf_s function does not attempt to
24715     produce further output, and it is unspecified to what extent vwprintf_s produced
24716     output before discovering the runtime-constraint violation.
24717     Description
24718 4   The vwprintf_s function is equivalent to the vwprintf function except for the
24719     explicit runtime-constraints listed above.
24720     Returns
24721 5   The vwprintf_s function returns the number of wide characters transmitted, or a
24722     negative value if an output error, encoding error, or runtime-constraint violation occurred.
24723
24724
24725
24726
24727     419) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24728          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24729          example, if the entire format string was L"%%n".
24730
24731 [<a name="#p631" href="p631">page 631</a>] (<a href="#Contents">Contents</a>)
24732
24733 <a name="K.3.9.1.12" href="#K.3.9.1.12"><b>    K.3.9.1.12 The vwscanf_s function</b></a>
24734     Synopsis
24735 1           #define __STDC_WANT_LIB_EXT1__ 1
24736             #include <a href="#7.16">&lt;stdarg.h&gt;</a>
24737             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24738             int vwscanf_s(const wchar_t * restrict format,
24739                  va_list arg);
24740     Runtime-constraints
24741 2   format shall not be a null pointer. Any argument indirected though in order to store
24742     converted input shall not be a null pointer.
24743 3   If there is a runtime-constraint violation, the vwscanf_s function does not attempt to
24744     perform further input, and it is unspecified to what extent vwscanf_s performed input
24745     before discovering the runtime-constraint violation.
24746     Description
24747 4   The vwscanf_s function is equivalent to wscanf_s, with the variable argument list
24748     replaced by arg, which shall have been initialized by the va_start macro (and
24749     possibly subsequent va_arg calls). The vwscanf_s function does not invoke the
24750     va_end macro.420)
24751     Returns
24752 5   The vwscanf_s function returns the value of the macro EOF if an input failure occurs
24753     before any conversion or if there is a runtime-constraint violation. Otherwise, the
24754     vwscanf_s function returns the number of input items assigned, which can be fewer
24755     than provided for, or even zero, in the event of an early matching failure.
24756 <a name="K.3.9.1.13" href="#K.3.9.1.13"><b>    K.3.9.1.13 The wprintf_s function</b></a>
24757     Synopsis
24758 1           #define __STDC_WANT_LIB_EXT1__ 1
24759             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24760             int wprintf_s(const wchar_t * restrict format, ...);
24761     Runtime-constraints
24762 2   format shall not be a null pointer. The %n specifier421) (modified or not by flags, field
24763
24764     420) As the functions vfwscanf_s, vwscanf_s, and vswscanf_s invoke the va_arg macro, the
24765          value of arg after the return is indeterminate.
24766     421) It is not a runtime-constraint violation for the wide characters %n to appear in sequence in the wide
24767          string pointed at by format when those wide characters are not a interpreted as a %n specifier. For
24768          example, if the entire format string was L"%%n".
24769
24770 [<a name="#p632" href="p632">page 632</a>] (<a href="#Contents">Contents</a>)
24771
24772     width, or precision) shall not appear in the wide string pointed to by format. Any
24773     argument to wprintf_s corresponding to a %s specifier shall not be a null pointer.
24774 3   If there is a runtime-constraint violation, the wprintf_s function does not attempt to
24775     produce further output, and it is unspecified to what extent wprintf_s produced output
24776     before discovering the runtime-constraint violation.
24777     Description
24778 4   The wprintf_s function is equivalent to the wprintf function except for the explicit
24779     runtime-constraints listed above.
24780     Returns
24781 5   The wprintf_s function returns the number of wide characters transmitted, or a
24782     negative value if an output error, encoding error, or runtime-constraint violation occurred.
24783 <a name="K.3.9.1.14" href="#K.3.9.1.14"><b>    K.3.9.1.14 The wscanf_s function</b></a>
24784     Synopsis
24785 1           #define __STDC_WANT_LIB_EXT1__ 1
24786             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24787             int wscanf_s(const wchar_t * restrict format, ...);
24788     Runtime-constraints
24789 2   format shall not be a null pointer. Any argument indirected though in order to store
24790     converted input shall not be a null pointer.
24791 3   If there is a runtime-constraint violation, the wscanf_s function does not attempt to
24792     perform further input, and it is unspecified to what extent wscanf_s performed input
24793     before discovering the runtime-constraint violation.
24794     Description
24795 4   The wscanf_s function is equivalent to fwscanf_s with the argument stdin
24796     interposed before the arguments to wscanf_s.
24797     Returns
24798 5   The wscanf_s function returns the value of the macro EOF if an input failure occurs
24799     before any conversion or if there is a runtime-constraint violation. Otherwise, the
24800     wscanf_s function returns the number of input items assigned, which can be fewer than
24801     provided for, or even zero, in the event of an early matching failure.
24802
24803
24804
24805
24806 [<a name="#p633" href="p633">page 633</a>] (<a href="#Contents">Contents</a>)
24807
24808 <a name="K.3.9.2" href="#K.3.9.2"><b>    K.3.9.2 General wide string utilities</b></a>
24809 <a name="K.3.9.2.1" href="#K.3.9.2.1"><b>    K.3.9.2.1 Wide string copying functions</b></a>
24810 <a name="K.3.9.2.1.1" href="#K.3.9.2.1.1"><b>    K.3.9.2.1.1 The wcscpy_s function</b></a>
24811     Synopsis
24812 1           #define __STDC_WANT_LIB_EXT1__ 1
24813             #include <a href="#7.28">&lt;wchar.h&gt;</a>
24814             errno_t wcscpy_s(wchar_t * restrict s1,
24815                  rsize_t s1max,
24816                  const wchar_t * restrict s2);
24817     Runtime-constraints
24818 2   Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
24819     s1max shall not equal zero. s1max shall be greater than wcsnlen_s(s2, s1max).
24820     Copying shall not take place between objects that overlap.
24821 3   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
24822     greater than zero and not greater than RSIZE_MAX, then wcscpy_s sets s1[0] to the
24823     null wide character.
24824     Description
24825 4   The wcscpy_s function copies the wide string pointed to by s2 (including the
24826     terminating null wide character) into the array pointed to by s1.
24827 5   All elements following the terminating null wide character (if any) written by
24828     wcscpy_s in the array of s1max wide characters pointed to by s1 take unspecified
24829     values when wcscpy_s returns.422)
24830     Returns
24831 6   The wcscpy_s function returns zero423) if there was no runtime-constraint violation.
24832     Otherwise, a nonzero value is returned.
24833
24834
24835
24836
24837     422) This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
24838          if any of those wide characters are null. Such an approach might write a wide character to every
24839          element of s1 before discovering that the first element should be set to the null wide character.
24840     423) A zero return value implies that all of the requested wide characters from the string pointed to by s2
24841          fit within the array pointed to by s1 and that the result in s1 is null terminated.
24842
24843 [<a name="#p634" href="p634">page 634</a>] (<a href="#Contents">Contents</a>)
24844
24845 <a name="K.3.9.2.1.2" href="#K.3.9.2.1.2"><b>     K.3.9.2.1.2 The wcsncpy_s function</b></a>
24846      Synopsis
24847 7            #define __STDC_WANT_LIB_EXT1__ 1
24848              #include <a href="#7.28">&lt;wchar.h&gt;</a>
24849              errno_t wcsncpy_s(wchar_t * restrict s1,
24850                   rsize_t s1max,
24851                   const wchar_t * restrict s2,
24852                   rsize_t n);
24853      Runtime-constraints
24854 8    Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
24855      RSIZE_MAX. s1max shall not equal zero. If n is not less than s1max, then s1max
24856      shall be greater than wcsnlen_s(s2, s1max). Copying shall not take place between
24857      objects that overlap.
24858 9    If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
24859      greater than zero and not greater than RSIZE_MAX, then wcsncpy_s sets s1[0] to the
24860      null wide character.
24861      Description
24862 10   The wcsncpy_s function copies not more than n successive wide characters (wide
24863      characters that follow a null wide character are not copied) from the array pointed to by
24864      s2 to the array pointed to by s1. If no null wide character was copied from s2, then
24865      s1[n] is set to a null wide character.
24866 11   All elements following the terminating null wide character (if any) written by
24867      wcsncpy_s in the array of s1max wide characters pointed to by s1 take unspecified
24868      values when wcsncpy_s returns.424)
24869      Returns
24870 12   The wcsncpy_s function returns zero425) if there was no runtime-constraint violation.
24871      Otherwise, a nonzero value is returned.
24872 13   EXAMPLE 1 The wcsncpy_s function can be used to copy a wide string without the danger that the
24873      result will not be null terminated or that wide characters will be written past the end of the destination
24874      array.
24875
24876
24877
24878
24879      424) This allows an implementation to copy wide characters from s2 to s1 while simultaneously checking
24880           if any of those wide characters are null. Such an approach might write a wide character to every
24881           element of s1 before discovering that the first element should be set to the null wide character.
24882      425) A zero return value implies that all of the requested wide characters from the string pointed to by s2
24883           fit within the array pointed to by s1 and that the result in s1 is null terminated.
24884
24885 [<a name="#p635" href="p635">page 635</a>] (<a href="#Contents">Contents</a>)
24886
24887              #define __STDC_WANT_LIB_EXT1__ 1
24888              #include <a href="#7.28">&lt;wchar.h&gt;</a>
24889              /* ... */
24890              wchar_t src1[100] = L"hello";
24891              wchar_t src2[7] = {L'g', L'o', L'o', L'd', L'b', L'y', L'e'};
24892              wchar_t dst1[6], dst2[5], dst3[5];
24893              int r1, r2, r3;
24894              r1 = wcsncpy_s(dst1, 6, src1, 100);
24895              r2 = wcsncpy_s(dst2, 5, src2, 7);
24896              r3 = wcsncpy_s(dst3, 5, src2, 4);
24897      The first call will assign to r1 the value zero and to dst1 the sequence of wide characters hello\0.
24898      The second call will assign to r2 a nonzero value and to dst2 the sequence of wide characters \0.
24899      The third call will assign to r3 the value zero and to dst3 the sequence of wide characters good\0.
24900
24901 <a name="K.3.9.2.1.3" href="#K.3.9.2.1.3"><b>     K.3.9.2.1.3 The wmemcpy_s function</b></a>
24902      Synopsis
24903 14           #define __STDC_WANT_LIB_EXT1__ 1
24904              #include <a href="#7.28">&lt;wchar.h&gt;</a>
24905              errno_t wmemcpy_s(wchar_t * restrict s1,
24906                   rsize_t s1max,
24907                   const wchar_t * restrict s2,
24908                   rsize_t n);
24909      Runtime-constraints
24910 15   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
24911      RSIZE_MAX. n shall not be greater than s1max. Copying shall not take place between
24912      objects that overlap.
24913 16   If there is a runtime-constraint violation, the wmemcpy_s function stores zeros in the
24914      first s1max wide characters of the object pointed to by s1 if s1 is not a null pointer and
24915      s1max is not greater than RSIZE_MAX.
24916      Description
24917 17   The wmemcpy_s function copies n successive wide characters from the object pointed
24918      to by s2 into the object pointed to by s1.
24919      Returns
24920 18   The wmemcpy_s function returns zero if there was no runtime-constraint violation.
24921      Otherwise, a nonzero value is returned.
24922
24923
24924
24925
24926 [<a name="#p636" href="p636">page 636</a>] (<a href="#Contents">Contents</a>)
24927
24928 <a name="K.3.9.2.1.4" href="#K.3.9.2.1.4"><b>     K.3.9.2.1.4 The wmemmove_s function</b></a>
24929      Synopsis
24930 19           #define __STDC_WANT_LIB_EXT1__ 1
24931              #include <a href="#7.28">&lt;wchar.h&gt;</a>
24932              errno_t wmemmove_s(wchar_t *s1, rsize_t s1max,
24933                   const wchar_t *s2, rsize_t n);
24934      Runtime-constraints
24935 20   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
24936      RSIZE_MAX. n shall not be greater than s1max.
24937 21   If there is a runtime-constraint violation, the wmemmove_s function stores zeros in the
24938      first s1max wide characters of the object pointed to by s1 if s1 is not a null pointer and
24939      s1max is not greater than RSIZE_MAX.
24940      Description
24941 22   The wmemmove_s function copies n successive wide characters from the object pointed
24942      to by s2 into the object pointed to by s1. This copying takes place as if the n wide
24943      characters from the object pointed to by s2 are first copied into a temporary array of n
24944      wide characters that does not overlap the objects pointed to by s1 or s2, and then the n
24945      wide characters from the temporary array are copied into the object pointed to by s1.
24946      Returns
24947 23   The wmemmove_s function returns zero if there was no runtime-constraint violation.
24948      Otherwise, a nonzero value is returned.
24949 <a name="K.3.9.2.2" href="#K.3.9.2.2"><b>     K.3.9.2.2 Wide string concatenation functions</b></a>
24950 <a name="K.3.9.2.2.1" href="#K.3.9.2.2.1"><b>     K.3.9.2.2.1 The wcscat_s function</b></a>
24951      Synopsis
24952 1            #define __STDC_WANT_LIB_EXT1__ 1
24953              #include <a href="#7.28">&lt;wchar.h&gt;</a>
24954              errno_t wcscat_s(wchar_t * restrict s1,
24955                   rsize_t s1max,
24956                   const wchar_t * restrict s2);
24957      Runtime-constraints
24958 2    Let m denote the value s1max - wcsnlen_s(s1, s1max) upon entry to
24959      wcscat_s.
24960 3    Neither s1 nor s2 shall be a null pointer. s1max shall not be greater than RSIZE_MAX.
24961      s1max shall not equal zero. m shall not equal zero.426) m shall be greater than
24962      wcsnlen_s(s2, m). Copying shall not take place between objects that overlap.
24963
24964 [<a name="#p637" href="p637">page 637</a>] (<a href="#Contents">Contents</a>)
24965
24966 4    If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
24967      greater than zero and not greater than RSIZE_MAX, then wcscat_s sets s1[0] to the
24968      null wide character.
24969      Description
24970 5    The wcscat_s function appends a copy of the wide string pointed to by s2 (including
24971      the terminating null wide character) to the end of the wide string pointed to by s1. The
24972      initial wide character from s2 overwrites the null wide character at the end of s1.
24973 6    All elements following the terminating null wide character (if any) written by
24974      wcscat_s in the array of s1max wide characters pointed to by s1 take unspecified
24975      values when wcscat_s returns.427)
24976      Returns
24977 7    The wcscat_s function returns zero428) if there was no runtime-constraint violation.
24978      Otherwise, a nonzero value is returned.
24979 <a name="K.3.9.2.2.2" href="#K.3.9.2.2.2"><b>     K.3.9.2.2.2 The wcsncat_s function</b></a>
24980      Synopsis
24981 8             #define __STDC_WANT_LIB_EXT1__ 1
24982               #include <a href="#7.28">&lt;wchar.h&gt;</a>
24983               errno_t wcsncat_s(wchar_t * restrict s1,
24984                    rsize_t s1max,
24985                    const wchar_t * restrict s2,
24986                    rsize_t n);
24987      Runtime-constraints
24988 9    Let m denote the value s1max - wcsnlen_s(s1, s1max) upon entry to
24989      wcsncat_s.
24990 10   Neither s1 nor s2 shall be a null pointer. Neither s1max nor n shall be greater than
24991      RSIZE_MAX. s1max shall not equal zero. m shall not equal zero.429) If n is not less
24992      than m, then m shall be greater than wcsnlen_s(s2, m). Copying shall not take
24993      place between objects that overlap.
24994
24995
24996      426) Zero means that s1 was not null terminated upon entry to wcscat_s.
24997      427) This allows an implementation to append wide characters from s2 to s1 while simultaneously
24998           checking if any of those wide characters are null. Such an approach might write a wide character to
24999           every element of s1 before discovering that the first element should be set to the null wide character.
25000      428) A zero return value implies that all of the requested wide characters from the wide string pointed to by
25001           s2 were appended to the wide string pointed to by s1 and that the result in s1 is null terminated.
25002      429) Zero means that s1 was not null terminated upon entry to wcsncat_s.
25003
25004 [<a name="#p638" href="p638">page 638</a>] (<a href="#Contents">Contents</a>)
25005
25006 11   If there is a runtime-constraint violation, then if s1 is not a null pointer and s1max is
25007      greater than zero and not greater than RSIZE_MAX, then wcsncat_s sets s1[0] to the
25008      null wide character.
25009      Description
25010 12   The wcsncat_s function appends not more than n successive wide characters (wide
25011      characters that follow a null wide character are not copied) from the array pointed to by
25012      s2 to the end of the wide string pointed to by s1. The initial wide character from s2
25013      overwrites the null wide character at the end of s1. If no null wide character was copied
25014      from s2, then s1[s1max-m+n] is set to a null wide character.
25015 13   All elements following the terminating null wide character (if any) written by
25016      wcsncat_s in the array of s1max wide characters pointed to by s1 take unspecified
25017      values when wcsncat_s returns.430)
25018      Returns
25019 14   The wcsncat_s function returns zero431) if there was no runtime-constraint violation.
25020      Otherwise, a nonzero value is returned.
25021 15   EXAMPLE 1 The wcsncat_s function can be used to copy a wide string without the danger that the
25022      result will not be null terminated or that wide characters will be written past the end of the destination
25023      array.
25024               #define __STDC_WANT_LIB_EXT1__ 1
25025               #include <a href="#7.28">&lt;wchar.h&gt;</a>
25026               /* ... */
25027               wchar_t s1[100] = L"good";
25028               wchar_t s2[6] = L"hello";
25029               wchar_t s3[6] = L"hello";
25030               wchar_t s4[7] = L"abc";
25031               wchar_t s5[1000] = L"bye";
25032               int r1, r2, r3, r4;
25033               r1 = wcsncat_s(s1, 100, s5, 1000);
25034               r2 = wcsncat_s(s2, 6, L"", 1);
25035               r3 = wcsncat_s(s3, 6, L"X", 2);
25036               r4 = wcsncat_s(s4, 7, L"defghijklmn", 3);
25037      After the first call r1 will have the value zero and s1 will be the wide character sequence goodbye\0.
25038      After the second call r2 will have the value zero and s2 will be the wide character sequence hello\0.
25039      After the third call r3 will have a nonzero value and s3 will be the wide character sequence \0.
25040      After the fourth call r4 will have the value zero and s4 will be the wide character sequence abcdef\0.
25041
25042
25043
25044
25045      430) This allows an implementation to append wide characters from s2 to s1 while simultaneously
25046           checking if any of those wide characters are null. Such an approach might write a wide character to
25047           every element of s1 before discovering that the first element should be set to the null wide character.
25048      431) A zero return value implies that all of the requested wide characters from the wide string pointed to by
25049           s2 were appended to the wide string pointed to by s1 and that the result in s1 is null terminated.
25050
25051 [<a name="#p639" href="p639">page 639</a>] (<a href="#Contents">Contents</a>)
25052
25053 <a name="K.3.9.2.3" href="#K.3.9.2.3"><b>    K.3.9.2.3 Wide string search functions</b></a>
25054 <a name="K.3.9.2.3.1" href="#K.3.9.2.3.1"><b>    K.3.9.2.3.1 The wcstok_s function</b></a>
25055     Synopsis
25056 1          #define __STDC_WANT_LIB_EXT1__ 1
25057            #include <a href="#7.28">&lt;wchar.h&gt;</a>
25058            wchar_t *wcstok_s(wchar_t * restrict s1,
25059                 rsize_t * restrict s1max,
25060                 const wchar_t * restrict s2,
25061                 wchar_t ** restrict ptr);
25062     Runtime-constraints
25063 2   None of s1max, s2, or ptr shall be a null pointer. If s1 is a null pointer, then *ptr
25064     shall not be a null pointer. The value of *s1max shall not be greater than RSIZE_MAX.
25065     The end of the token found shall occur within the first *s1max wide characters of s1 for
25066     the first call, and shall occur within the first *s1max wide characters of where searching
25067     resumes on subsequent calls.
25068 3   If there is a runtime-constraint violation, the wcstok_s function does not indirect
25069     through the s1 or s2 pointers, and does not store a value in the object pointed to by ptr.
25070     Description
25071 4   A sequence of calls to the wcstok_s function breaks the wide string pointed to by s1
25072     into a sequence of tokens, each of which is delimited by a wide character from the wide
25073     string pointed to by s2. The fourth argument points to a caller-provided wchar_t
25074     pointer into which the wcstok_s function stores information necessary for it to
25075     continue scanning the same wide string.
25076 5   The first call in a sequence has a non-null first argument and s1max points to an object
25077     whose value is the number of elements in the wide character array pointed to by the first
25078     argument. The first call stores an initial value in the object pointed to by ptr and
25079     updates the value pointed to by s1max to reflect the number of elements that remain in
25080     relation to ptr. Subsequent calls in the sequence have a null first argument and the
25081     objects pointed to by s1max and ptr are required to have the values stored by the
25082     previous call in the sequence, which are then updated. The separator wide string pointed
25083     to by s2 may be different from call to call.
25084 6   The first call in the sequence searches the wide string pointed to by s1 for the first wide
25085     character that is not contained in the current separator wide string pointed to by s2. If no
25086     such wide character is found, then there are no tokens in the wide string pointed to by s1
25087     and the wcstok_s function returns a null pointer. If such a wide character is found, it is
25088     the start of the first token.
25089
25090
25091 [<a name="#p640" href="p640">page 640</a>] (<a href="#Contents">Contents</a>)
25092
25093 7    The wcstok_s function then searches from there for the first wide character in s1 that
25094      is contained in the current separator wide string. If no such wide character is found, the
25095      current token extends to the end of the wide string pointed to by s1, and subsequent
25096      searches in the same wide string for a token return a null pointer. If such a wide character
25097      is found, it is overwritten by a null wide character, which terminates the current token.
25098 8    In all cases, the wcstok_s function stores sufficient information in the pointer pointed
25099      to by ptr so that subsequent calls, with a null pointer for s1 and the unmodified pointer
25100      value for ptr, shall start searching just past the element overwritten by a null wide
25101      character (if any).
25102      Returns
25103 9    The wcstok_s function returns a pointer to the first wide character of a token, or a null
25104      pointer if there is no token or there is a runtime-constraint violation.
25105 10   EXAMPLE
25106              #define __STDC_WANT_LIB_EXT1__ 1
25107              #include <a href="#7.28">&lt;wchar.h&gt;</a>
25108              static wchar_t str1[] = L"?a???b,,,#c";
25109              static wchar_t str2[] = L"\t \t";
25110              wchar_t *t, *ptr1, *ptr2;
25111              rsize_t max1 = wcslen(str1)+1;
25112              rsize_t max2 = wcslen(str2)+1;
25113              t   =   wcstok_s(str1,   &amp;max1,   "?", &amp;ptr1);        //   t   points to the token "a"
25114              t   =   wcstok_s(NULL,   &amp;max1,   ",", &amp;ptr1);        //   t   points to the token "??b"
25115              t   =   wcstok_s(str2,   &amp;max2,   " \t", &amp;ptr2);      //   t   is a null pointer
25116              t   =   wcstok_s(NULL,   &amp;max1,   "#,", &amp;ptr1);       //   t   points to the token "c"
25117              t   =   wcstok_s(NULL,   &amp;max1,   "?", &amp;ptr1);        //   t   is a null pointer
25118
25119 <a name="K.3.9.2.4" href="#K.3.9.2.4"><b>     K.3.9.2.4 Miscellaneous functions</b></a>
25120 <a name="K.3.9.2.4.1" href="#K.3.9.2.4.1"><b>     K.3.9.2.4.1 The wcsnlen_s function</b></a>
25121      Synopsis
25122 1            #define __STDC_WANT_LIB_EXT1__ 1
25123              #include <a href="#7.28">&lt;wchar.h&gt;</a>
25124              size_t wcsnlen_s(const wchar_t *s, size_t maxsize);
25125      Description
25126 2    The wcsnlen_s function computes the length of the wide string pointed to by s.
25127      Returns
25128 3    If s is a null pointer,432) then the wcsnlen_s function returns zero.
25129 4    Otherwise, the wcsnlen_s function returns the number of wide characters that precede
25130      the terminating null wide character. If there is no null wide character in the first
25131      maxsize wide characters of s then wcsnlen_s returns maxsize. At most the first
25132
25133 [<a name="#p641" href="p641">page 641</a>] (<a href="#Contents">Contents</a>)
25134
25135     maxsize wide characters of s shall be accessed by wcsnlen_s.
25136 <a name="K.3.9.3" href="#K.3.9.3"><b>    K.3.9.3 Extended multibyte/wide character conversion utilities</b></a>
25137 <a name="K.3.9.3.1" href="#K.3.9.3.1"><b>    K.3.9.3.1 Restartable multibyte/wide character conversion functions</b></a>
25138 1   Unlike wcrtomb, wcrtomb_s does not permit the ps parameter (the pointer to the
25139     conversion state) to be a null pointer.
25140 <a name="K.3.9.3.1.1" href="#K.3.9.3.1.1"><b>    K.3.9.3.1.1 The wcrtomb_s function</b></a>
25141     Synopsis
25142 2           #include <a href="#7.28">&lt;wchar.h&gt;</a>
25143             errno_t wcrtomb_s(size_t * restrict retval,
25144                  char * restrict s, rsize_t smax,
25145                  wchar_t wc, mbstate_t * restrict ps);
25146     Runtime-constraints
25147 3   Neither retval nor ps shall be a null pointer. If s is not a null pointer, then smax
25148     shall not equal zero and shall not be greater than RSIZE_MAX. If s is not a null pointer,
25149     then smax shall be not be less than the number of bytes to be stored in the array pointed
25150     to by s. If s is a null pointer, then smax shall equal zero.
25151 4   If there is a runtime-constraint violation, then wcrtomb_s does the following. If s is
25152     not a null pointer and smax is greater than zero and not greater than RSIZE_MAX, then
25153     wcrtomb_s sets s[0] to the null character. If retval is not a null pointer, then
25154     wcrtomb_s sets *retval to (size_t)(-1).
25155     Description
25156 5   If s is a null pointer, the wcrtomb_s function is equivalent to the call
25157                     wcrtomb_s(&amp;retval, buf, sizeof buf, L'\0', ps)
25158     where retval and buf are internal variables of the appropriate types, and the size of
25159     buf is greater than MB_CUR_MAX.
25160 6   If s is not a null pointer, the wcrtomb_s function determines the number of bytes
25161     needed to represent the multibyte character that corresponds to the wide character given
25162     by wc (including any shift sequences), and stores the multibyte character representation
25163     in the array whose first element is pointed to by s. At most MB_CUR_MAX bytes are
25164     stored. If wc is a null wide character, a null byte is stored, preceded by any shift
25165     sequence needed to restore the initial shift state; the resulting state described is the initial
25166     conversion state.
25167
25168     432) Note that the wcsnlen_s function has no runtime-constraints. This lack of runtime-constraints
25169          along with the values returned for a null pointer or an unterminated wide string argument make
25170          wcsnlen_s useful in algorithms that gracefully handle such exceptional data.
25171
25172 [<a name="#p642" href="p642">page 642</a>] (<a href="#Contents">Contents</a>)
25173
25174 7   If wc does not correspond to a valid multibyte character, an encoding error occurs: the
25175     wcrtomb_s function stores the value (size_t)(-1) into *retval and the
25176     conversion state is unspecified. Otherwise, the wcrtomb_s function stores into
25177     *retval the number of bytes (including any shift sequences) stored in the array pointed
25178     to by s.
25179     Returns
25180 8   The wcrtomb_s function returns zero if no runtime-constraint violation and no
25181     encoding error occurred. Otherwise, a nonzero value is returned.
25182 <a name="K.3.9.3.2" href="#K.3.9.3.2"><b>    K.3.9.3.2 Restartable multibyte/wide string conversion functions</b></a>
25183 1   Unlike mbsrtowcs and wcsrtombs, mbsrtowcs_s and wcsrtombs_s do not
25184     permit the ps parameter (the pointer to the conversion state) to be a null pointer.
25185 <a name="K.3.9.3.2.1" href="#K.3.9.3.2.1"><b>    K.3.9.3.2.1 The mbsrtowcs_s function</b></a>
25186     Synopsis
25187 2           #include <a href="#7.28">&lt;wchar.h&gt;</a>
25188             errno_t mbsrtowcs_s(size_t * restrict retval,
25189                  wchar_t * restrict dst, rsize_t dstmax,
25190                  const char ** restrict src, rsize_t len,
25191                  mbstate_t * restrict ps);
25192     Runtime-constraints
25193 3   None of retval, src, *src, or ps shall be null pointers. If dst is not a null pointer,
25194     then neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null
25195     pointer, then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall
25196     not equal zero. If dst is not a null pointer and len is not less than dstmax, then a null
25197     character shall occur within the first dstmax multibyte characters of the array pointed to
25198     by *src.
25199 4   If there is a runtime-constraint violation, then mbsrtowcs_s does the following. If
25200     retval is not a null pointer, then mbsrtowcs_s sets *retval to (size_t)(-1).
25201     If dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
25202     then mbsrtowcs_s sets dst[0] to the null wide character.
25203     Description
25204 5   The mbsrtowcs_s function converts a sequence of multibyte characters that begins in
25205     the conversion state described by the object pointed to by ps, from the array indirectly
25206     pointed to by src into a sequence of corresponding wide characters. If dst is not a null
25207     pointer, the converted characters are stored into the array pointed to by dst. Conversion
25208     continues up to and including a terminating null character, which is also stored.
25209     Conversion stops earlier in two cases: when a sequence of bytes is encountered that does
25210     not form a valid multibyte character, or (if dst is not a null pointer) when len wide
25211 [<a name="#p643" href="p643">page 643</a>] (<a href="#Contents">Contents</a>)
25212
25213      characters have been stored into the array pointed to by dst.433) If dst is not a null
25214      pointer and no null wide character was stored into the array pointed to by dst, then
25215      dst[len] is set to the null wide character. Each conversion takes place as if by a call
25216      to the mbrtowc function.
25217 6    If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
25218      pointer (if conversion stopped due to reaching a terminating null character) or the address
25219      just past the last multibyte character converted (if any). If conversion stopped due to
25220      reaching a terminating null character and if dst is not a null pointer, the resulting state
25221      described is the initial conversion state.
25222 7    Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
25223      sequence of bytes that do not form a valid multibyte character, an encoding error occurs:
25224      the mbsrtowcs_s function stores the value (size_t)(-1) into *retval and the
25225      conversion state is unspecified. Otherwise, the mbsrtowcs_s function stores into
25226      *retval the number of multibyte characters successfully converted, not including the
25227      terminating null character (if any).
25228 8    All elements following the terminating null wide character (if any) written by
25229      mbsrtowcs_s in the array of dstmax wide characters pointed to by dst take
25230      unspecified values when mbsrtowcs_s returns.434)
25231 9    If copying takes place between objects that overlap, the objects take on unspecified
25232      values.
25233      Returns
25234 10   The mbsrtowcs_s function returns zero if no runtime-constraint violation and no
25235      encoding error occurred. Otherwise, a nonzero value is returned.
25236 <a name="K.3.9.3.2.2" href="#K.3.9.3.2.2"><b>     K.3.9.3.2.2 The wcsrtombs_s function</b></a>
25237      Synopsis
25238 11            #include <a href="#7.28">&lt;wchar.h&gt;</a>
25239               errno_t wcsrtombs_s(size_t * restrict retval,
25240                    char * restrict dst, rsize_t dstmax,
25241                    const wchar_t ** restrict src, rsize_t len,
25242                    mbstate_t * restrict ps);
25243
25244
25245
25246
25247      433) Thus, the value of len is ignored if dst is a null pointer.
25248      434) This allows an implementation to attempt converting the multibyte string before discovering a
25249           terminating null character did not occur where required.
25250
25251 [<a name="#p644" href="p644">page 644</a>] (<a href="#Contents">Contents</a>)
25252
25253      Runtime-constraints
25254 12   None of retval, src, *src, or ps shall be null pointers. If dst is not a null pointer,
25255      then neither len nor dstmax shall be greater than RSIZE_MAX. If dst is a null
25256      pointer, then dstmax shall equal zero. If dst is not a null pointer, then dstmax shall
25257      not equal zero. If dst is not a null pointer and len is not less than dstmax, then the
25258      conversion shall have been stopped (see below) because a terminating null wide character
25259      was reached or because an encoding error occurred.
25260 13   If there is a runtime-constraint violation, then wcsrtombs_s does the following. If
25261      retval is not a null pointer, then wcsrtombs_s sets *retval to (size_t)(-1).
25262      If dst is not a null pointer and dstmax is greater than zero and less than RSIZE_MAX,
25263      then wcsrtombs_s sets dst[0] to the null character.
25264      Description
25265 14   The wcsrtombs_s function converts a sequence of wide characters from the array
25266      indirectly pointed to by src into a sequence of corresponding multibyte characters that
25267      begins in the conversion state described by the object pointed to by ps. If dst is not a
25268      null pointer, the converted characters are then stored into the array pointed to by dst.
25269      Conversion continues up to and including a terminating null wide character, which is also
25270      stored. Conversion stops earlier in two cases:
25271      -- when a wide character is reached that does not correspond to a valid multibyte
25272        character;
25273      -- (if dst is not a null pointer) when the next multibyte character would exceed the
25274          limit of n total bytes to be stored into the array pointed to by dst. If the wide
25275          character being converted is the null wide character, then n is the lesser of len or
25276          dstmax. Otherwise, n is the lesser of len or dstmax-1.
25277      If the conversion stops without converting a null wide character and dst is not a null
25278      pointer, then a null character is stored into the array pointed to by dst immediately
25279      following any multibyte characters already stored. Each conversion takes place as if by a
25280      call to the wcrtomb function.435)
25281 15   If dst is not a null pointer, the pointer object pointed to by src is assigned either a null
25282      pointer (if conversion stopped due to reaching a terminating null wide character) or the
25283      address just past the last wide character converted (if any). If conversion stopped due to
25284      reaching a terminating null wide character, the resulting state described is the initial
25285      conversion state.
25286
25287
25288      435) If conversion stops because a terminating null wide character has been reached, the bytes stored
25289           include those necessary to reach the initial shift state immediately before the null byte. However, if
25290           the conversion stops before a terminating null wide character has been reached, the result will be null
25291           terminated, but might not end in the initial shift state.
25292
25293 [<a name="#p645" href="p645">page 645</a>] (<a href="#Contents">Contents</a>)
25294
25295 16   Regardless of whether dst is or is not a null pointer, if the input conversion encounters a
25296      wide character that does not correspond to a valid multibyte character, an encoding error
25297      occurs: the wcsrtombs_s function stores the value (size_t)(-1) into *retval
25298      and the conversion state is unspecified. Otherwise, the wcsrtombs_s function stores
25299      into *retval the number of bytes in the resulting multibyte character sequence, not
25300      including the terminating null character (if any).
25301 17   All elements following the terminating null character (if any) written by wcsrtombs_s
25302      in the array of dstmax elements pointed to by dst take unspecified values when
25303      wcsrtombs_s returns.436)
25304 18   If copying takes place between objects that overlap, the objects take on unspecified
25305      values.
25306      Returns
25307 19   The wcsrtombs_s function returns zero if no runtime-constraint violation and no
25308      encoding error occurred. Otherwise, a nonzero value is returned.
25309
25310
25311
25312
25313      436) When len is not less than dstmax, the implementation might fill the array before discovering a
25314           runtime-constraint violation.
25315
25316 [<a name="#p646" href="p646">page 646</a>] (<a href="#Contents">Contents</a>)
25317
25318 <a name="L" href="#L"><b>                                                Annex L</b></a>
25319                                                (normative)
25320                                             Analyzability
25321 <a name="L.1" href="#L.1"><b>    L.1 Scope</b></a>
25322 1   This annex specifies optional behavior that can aid in the analyzability of C programs.
25323 2   An implementation that defines __STDC_ANALYZABLE__ shall conform to the
25324     specifications in this annex.437)
25325 <a name="L.2" href="#L.2"><b>    L.2 Definitions</b></a>
25326 <a name="L.2.1" href="#L.2.1"><b>    L.2.1</b></a>
25327 1   out-of-bounds store
25328     an (attempted) access (<a href="#3.1">3.1</a>) that, at run time, for a given computational state, would
25329     modify (or, for an object declared volatile, fetch) one or more bytes that lie outside
25330     the bounds permitted by this Standard.
25331 <a name="L.2.2" href="#L.2.2"><b>    L.2.2</b></a>
25332 1   bounded undefined behavior
25333     undefined behavior (<a href="#3.4.3">3.4.3</a>) that does not perform an out-of-bounds store.
25334 2   NOTE 1    The behavior might perform a trap.
25335
25336 3   NOTE 2    Any values produced or stored might be indeterminate values.
25337
25338 <a name="L.2.3" href="#L.2.3"><b>    L.2.3</b></a>
25339 1   critical undefined behavior
25340     undefined behavior that is not bounded undefined behavior.
25341 2   NOTE     The behavior might perform an out-of-bounds store or perform a trap.
25342
25343
25344
25345
25346     437) Implementations that do not define __STDC_ANALYZABLE__ are not required to conform to these
25347          specifications.
25348
25349 [<a name="#p647" href="p647">page 647</a>] (<a href="#Contents">Contents</a>)
25350
25351 <a name="L.3" href="#L.3"><b>    L.3 Requirements</b></a>
25352 1   If the program performs a trap (<a href="#3.19.5">3.19.5</a>), the implementation is permitted to invoke a
25353     runtime-constraint handler. Any such semantics are implementation-defined.
25354 2   All undefined behavior shall be limited to bounded undefined behavior, except for the
25355     following which are permitted to result in critical undefined behavior:
25356     -- An object is referred to outside of its lifetime (<a href="#6.2.4">6.2.4</a>).
25357     -- An lvalue does not designate an object when evaluated (<a href="#6.3.2.1">6.3.2.1</a>).
25358     -- A pointer is used to call a function whose type is not compatible with the referenced
25359       type (<a href="#6.3.2.3">6.3.2.3</a>).
25360     -- The operand of the unary * operator has an invalid value (<a href="#6.5.3.2">6.5.3.2</a>).
25361     -- Addition or subtraction of a pointer into, or just beyond, an array object and an
25362       integer type produces a result that points just beyond the array object and is used as
25363       the operand of a unary * operator that is evaluated (<a href="#6.5.6">6.5.6</a>).
25364     -- An argument to a library function has an invalid value or a type not expected by a
25365       function with variable number of arguments (<a href="#7.1.4">7.1.4</a>).
25366     -- The value of a pointer that refers to space deallocated by a call to the free or realloc
25367       function is used (<a href="#7.22.3">7.22.3</a>).
25368     -- A string or wide string utility function is instructed to access an array beyond the end
25369       of an object (<a href="#7.23.1">7.23.1</a>, <a href="#7.28.4">7.28.4</a>).
25370
25371
25372
25373
25374 [<a name="#p648" href="p648">page 648</a>] (<a href="#Contents">Contents</a>)
25375
25376
25377 <a name="Bibliography" href="#Bibliography"><b>                                   Bibliography</b></a>
25378   1.    ''The C Reference Manual'' by Dennis M. Ritchie, a version of which was
25379         published in The C Programming Language by Brian W. Kernighan and Dennis
25380         M. Ritchie, Prentice-Hall, Inc., (1978). Copyright owned by AT&amp;T.
25381   2.    1984 /usr/group Standard by the /usr/group Standards Committee, Santa Clara,
25382         California, USA, November 1984.
25383   3.    ANSI X3/TR-1-82 (1982), American National Dictionary for Information
25384         Processing Systems, Information Processing Systems Technical Report.
25385   4.    ANSI/IEEE 754-1985, American National Standard for Binary Floating-Point
25386         Arithmetic.
25387   5.    ANSI/IEEE 854-1988, American National Standard for Radix-Independent
25388         Floating-Point Arithmetic.
25389   6.    IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems,
25390         second edition (previously designated IEC 559:1989).
25391   7.    ISO 31-11:1992, Quantities and units -- Part 11: Mathematical signs and
25392         symbols for use in the physical sciences and technology.
25393   8.    ISO/IEC 646:1991, Information technology -- ISO 7-bit coded character set for
25394         information interchange.
25395   9.    ISO/IEC 2382-1:1993, Information technology -- Vocabulary -- Part 1:
25396         Fundamental terms.
25397  10.    ISO 4217:1995, Codes for the representation of currencies and funds.
25398  11.    ISO 8601:1988, Data elements and interchange formats -- Information
25399         interchange -- Representation of dates and times.
25400  12.    ISO/IEC 9899:1990, Programming languages -- C.
25401  13.    ISO/IEC 9899/COR1:1994, Technical Corrigendum 1.
25402  14.    ISO/IEC 9899/COR2:1996, Technical Corrigendum 2.
25403  15.    ISO/IEC 9899/AMD1:1995, Amendment 1 to ISO/IEC 9899:1990 C Integrity.
25404  16.    ISO/IEC 9899:1999, Programming languages -- C.
25405  17.    ISO/IEC 9899:1999/Cor.1:2001, Technical Corrigendum 1.
25406  18.    ISO/IEC 9899:1999/Cor.2:2004, Technical Corrigendum 2.
25407  19.    ISO/IEC 9899:1999/Cor.3:2007, Technical Corrigendum 3.
25408
25409
25410
25411 [<a name="#p649" href="p649">page 649</a>] (<a href="#Contents">Contents</a>)
25412
25413  20.   ISO/IEC 9945-2:1993, Information technology -- Portable Operating System
25414        Interface (POSIX) -- Part 2: Shell and Utilities.
25415  21.   ISO/IEC TR 10176:1998, Information technology -- Guidelines for the
25416        preparation of programming language standards.
25417  22.   ISO/IEC 10646-1:1993, Information technology -- Universal Multiple-Octet
25418        Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane.
25419  23.   ISO/IEC 10646-1/COR1:1996,         Technical       Corrigendum       1      to
25420        ISO/IEC 10646-1:1993.
25421  24.   ISO/IEC 10646-1/COR2:1998,         Technical       Corrigendum       2      to
25422        ISO/IEC 10646-1:1993.
25423  25.   ISO/IEC 10646-1/AMD1:1996, Amendment 1 to ISO/IEC 10646-1:1993
25424        Transformation Format for 16 planes of group 00 (UTF-16).
25425  26.   ISO/IEC 10646-1/AMD2:1996, Amendment 2 to ISO/IEC 10646-1:1993 UCS
25426        Transformation Format 8 (UTF-8).
25427  27.   ISO/IEC 10646-1/AMD3:1996, Amendment 3 to ISO/IEC 10646-1:1993.
25428  28.   ISO/IEC 10646-1/AMD4:1996, Amendment 4 to ISO/IEC 10646-1:1993.
25429  29.   ISO/IEC 10646-1/AMD5:1998, Amendment 5 to ISO/IEC 10646-1:1993 Hangul
25430        syllables.
25431  30.   ISO/IEC 10646-1/AMD6:1997,       Amendment     6   to   ISO/IEC 10646-1:1993
25432        Tibetan.
25433  31.   ISO/IEC 10646-1/AMD7:1997, Amendment 7 to ISO/IEC 10646-1:1993 33
25434        additional characters.
25435  32.   ISO/IEC 10646-1/AMD8:1997, Amendment 8 to ISO/IEC 10646-1:1993.
25436  33.   ISO/IEC 10646-1/AMD9:1997,       Amendment     9   to   ISO/IEC 10646-1:1993
25437        Identifiers for characters.
25438  34.   ISO/IEC 10646-1/AMD10:1998, Amendment 10 to ISO/IEC 10646-1:1993
25439        Ethiopic.
25440  35.   ISO/IEC 10646-1/AMD11:1998, Amendment 11 to ISO/IEC 10646-1:1993
25441        Unified Canadian Aboriginal Syllabics.
25442  36.   ISO/IEC 10646-1/AMD12:1998, Amendment 12 to ISO/IEC 10646-1:1993
25443        Cherokee.
25444  37.   ISO/IEC 10967-1:1994, Information technology -- Language independent
25445        arithmetic -- Part 1: Integer and floating point arithmetic.
25446
25447
25448 [<a name="#p650" href="p650">page 650</a>] (<a href="#Contents">Contents</a>)
25449
25450  38.    ISO/IEC TR 19769:2004, Information technology -- Programming languages,
25451         their environments and system software interfaces -- Extensions for the
25452         programming language C to support new character data types.
25453  39.    ISO/IEC TR 24731-1:2007, Information technology -- Programming languages,
25454         their environments and system software interfaces -- Extensions to the C library
25455         -- Part 1: Bounds-checking interfaces.
25456
25457
25458
25459
25460 [<a name="#p651" href="p651">page 651</a>] (<a href="#Contents">Contents</a>)
25461
25462
25463
25464 [<a name="#p652" href="p652">page 652</a>] (<a href="#Contents">Contents</a>)
25465
25466
25467 <a name="Index" href="#Index"><b>Index</b></a>
25468 [^ x ^], <a href="#3.20">3.20</a>                                                    , (comma operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.17">6.5.17</a>
25469                                                                , (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>,
25470 [_ x _], <a href="#3.21">3.21</a>                                                         <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>
25471 ! (logical negation operator), <a href="#6.5.3.3">6.5.3.3</a>                         - (subtraction operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>
25472 != (inequality operator), <a href="#6.5.9">6.5.9</a>                                - (unary minus operator), <a href="#6.5.3.3">6.5.3.3</a>, <a href="#F.3">F.3</a>
25473 # operator, <a href="#6.10.3.2">6.10.3.2</a>                                           -- (postfix decrement operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>
25474 # preprocessing directive, <a href="#6.10.7">6.10.7</a>                              -- (prefix decrement operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.1">6.5.3.1</a>
25475 # punctuator, <a href="#6.10">6.10</a>                                             -= (subtraction assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
25476 ## operator, <a href="#6.10.3.3">6.10.3.3</a>                                          -&gt; (structure/union pointer operator), <a href="#6.5.2.3">6.5.2.3</a>
25477 #define preprocessing directive, <a href="#6.10.3">6.10.3</a>                        . (structure/union member operator), <a href="#6.3.2.1">6.3.2.1</a>,
25478 #elif preprocessing directive, <a href="#6.10.1">6.10.1</a>                               <a href="#6.5.2.3">6.5.2.3</a>
25479 #else preprocessing directive, <a href="#6.10.1">6.10.1</a>                          . punctuator, <a href="#6.7.9">6.7.9</a>
25480 #endif preprocessing directive, <a href="#6.10.1">6.10.1</a>                         ... (ellipsis punctuator), <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.10.3">6.10.3</a>
25481 #error preprocessing directive, <a href="#4">4</a>, <a href="#6.10.5">6.10.5</a>                      / (division operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>, <a href="#G.5.1">G.5.1</a>
25482 #if preprocessing directive, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>,             /* */ (comment delimiters), <a href="#6.4.9">6.4.9</a>
25483      <a href="#6.10.1">6.10.1</a>, <a href="#7.1.4">7.1.4</a>                                             // (comment delimiter), <a href="#6.4.9">6.4.9</a>
25484 #ifdef preprocessing directive, <a href="#6.10.1">6.10.1</a>                         /= (division assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
25485 #ifndef preprocessing directive, <a href="#6.10.1">6.10.1</a>                        : (colon punctuator), <a href="#6.7.2.1">6.7.2.1</a>
25486 #include preprocessing directive, <a href="#5.1.1.2">5.1.1.2</a>,                     :&gt; (alternative spelling of ]), <a href="#6.4.6">6.4.6</a>
25487      <a href="#6.10.2">6.10.2</a>                                                    ; (semicolon punctuator), <a href="#6.7">6.7</a>, <a href="#6.7.2.1">6.7.2.1</a>, <a href="#6.8.3">6.8.3</a>,
25488 #line preprocessing directive, <a href="#6.10.4">6.10.4</a>                               <a href="#6.8.5">6.8.5</a>, <a href="#6.8.6">6.8.6</a>
25489 #pragma preprocessing directive, <a href="#6.10.6">6.10.6</a>                        &lt; (less-than operator), <a href="#6.5.8">6.5.8</a>
25490 #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>
25491      <a href="#7.1.4">7.1.4</a>                                                     &lt;: (alternative spelling of [), <a href="#6.4.6">6.4.6</a>
25492 % (remainder operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>                         &lt;&lt; (left-shift operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
25493 %: (alternative spelling of #), <a href="#6.4.6">6.4.6</a>                          &lt;&lt;= (left-shift assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
25494 %:%: (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>
25495 %= (remainder assignment operator), <a href="#6.5.16.2">6.5.16.2</a>                   <a href="#7.2">&lt;assert.h&gt;</a> header, <a href="#7.2">7.2</a>
25496 %&gt; (alternative spelling of }), <a href="#6.4.6">6.4.6</a>                          <a href="#7.3">&lt;complex.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>,
25497 &amp; (address operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                              <a href="#7.3">7.3</a>, <a href="#7.24">7.24</a>, <a href="#7.30.1">7.30.1</a>, <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>
25498 &amp; (bitwise AND operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.10">6.5.10</a>                      <a href="#7.4">&lt;ctype.h&gt;</a> header, <a href="#7.4">7.4</a>, <a href="#7.30.2">7.30.2</a>
25499 &amp;&amp; (logical AND operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.13">6.5.13</a>                     <a href="#7.5">&lt;errno.h&gt;</a> header, <a href="#7.5">7.5</a>, <a href="#7.30.3">7.30.3</a>, <a href="#K.3.2">K.3.2</a>
25500 &amp;= (bitwise AND assignment operator), <a href="#6.5.16.2">6.5.16.2</a>                 <a href="#7.6">&lt;fenv.h&gt;</a> header, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F">F</a>,
25501 ' ' (space character), <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>, <a href="#7.4.1.3">7.4.1.3</a>,                <a href="#H">H</a>
25502      <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>                                      <a href="#7.7">&lt;float.h&gt;</a> header, <a href="#4">4</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.7">7.7</a>, <a href="#7.22.1.3">7.22.1.3</a>,
25503 ( ) (cast operator), <a href="#6.5.4">6.5.4</a>                                          <a href="#7.28.4.1.1">7.28.4.1.1</a>
25504 ( ) (function-call operator), <a href="#6.5.2.2">6.5.2.2</a>                          <a href="#7.8">&lt;inttypes.h&gt;</a> header, <a href="#7.8">7.8</a>, <a href="#7.30.4">7.30.4</a>
25505 ( ) (parentheses punctuator), <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.5</a>            <a href="#7.9">&lt;iso646.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.9">7.9</a>
25506 ( ){ } (compound-literal operator), <a href="#6.5.2.5">6.5.2.5</a>                    <a href="#7.10">&lt;limits.h&gt;</a> header, <a href="#4">4</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.2.5">6.2.5</a>, <a href="#7.10">7.10</a>
25507 * (asterisk punctuator), <a href="#6.7.6.1">6.7.6.1</a>, <a href="#6.7.6.2">6.7.6.2</a>                      <a href="#7.11">&lt;locale.h&gt;</a> header, <a href="#7.11">7.11</a>, <a href="#7.30.5">7.30.5</a>
25508 * (indirection operator), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                     <a href="#7.12">&lt;math.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#7.12">7.12</a>, <a href="#7.24">7.24</a>, <a href="#F">F</a>,
25509 * (multiplication operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>,                   <a href="#F.10">F.10</a>, <a href="#J.5.17">J.5.17</a>
25510      <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>
25511 *= (multiplication assignment operator), <a href="#6.5.16.2">6.5.16.2</a>              <a href="#7.14">&lt;signal.h&gt;</a> header, <a href="#7.14">7.14</a>, <a href="#7.30.6">7.30.6</a>
25512 + (addition operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>,              <a href="#7.15">&lt;stdalign.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.15">7.15</a>
25513      <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>                                         <a href="#7.16">&lt;stdarg.h&gt;</a> header, <a href="#4">4</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#7.16">7.16</a>
25514 + (unary plus operator), <a href="#6.5.3.3">6.5.3.3</a>                               <a href="#7.17">&lt;stdatomic.h&gt;</a> header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.17">7.17</a>
25515 ++ (postfix increment operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>               <a href="#7.18">&lt;stdbool.h&gt;</a> header, <a href="#4">4</a>, <a href="#7.18">7.18</a>, <a href="#7.30.7">7.30.7</a>, <a href="#H">H</a>
25516 ++ (prefix increment operator), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.1">6.5.3.1</a>                <a href="#7.19">&lt;stddef.h&gt;</a> header, <a href="#4">4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.4.4.4">6.4.4.4</a>,
25517 += (addition assignment operator), <a href="#6.5.16.2">6.5.16.2</a>
25518 [<a name="#p653" href="p653">page 653</a>] (<a href="#Contents">Contents</a>)
25519
25520      <a href="#6.4.5">6.4.5</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#6.5.6">6.5.6</a>, <a href="#7.19">7.19</a>, <a href="#K.3.3">K.3.3</a>                      \x hexadecimal digits (hexadecimal-character
25521 <a href="#7.20">&lt;stdint.h&gt;</a> header, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.10.1">6.10.1</a>, <a href="#7.8">7.8</a>,                       escape sequence), <a href="#6.4.4.4">6.4.4.4</a>
25522      <a href="#7.20">7.20</a>, <a href="#7.30.8">7.30.8</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>                              ^ (bitwise exclusive OR operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>
25523 <a href="#7.21">&lt;stdio.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21">7.21</a>, <a href="#7.30.9">7.30.9</a>, <a href="#F">F</a>,                ^= (bitwise exclusive OR assignment operator),
25524      <a href="#K.3.5">K.3.5</a>                                                        <a href="#6.5.16.2">6.5.16.2</a>
25525 <a href="#7.22">&lt;stdlib.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.22">7.22</a>, <a href="#7.30.10">7.30.10</a>, <a href="#F">F</a>,              __alignas_is_defined macro, <a href="#7.15">7.15</a>
25526      <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6">K.3.6</a>                                          __bool_true_false_are_defined
25527 <a href="#7.23">&lt;string.h&gt;</a> header, <a href="#7.23">7.23</a>, <a href="#7.30.11">7.30.11</a>, <a href="#K.3.7">K.3.7</a>                           macro, <a href="#7.18">7.18</a>
25528 <a href="#7.24">&lt;tgmath.h&gt;</a> header, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                 __cplusplus macro, <a href="#6.10.8">6.10.8</a>
25529 <a href="#7.25">&lt;threads.h&gt;</a> header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.25">7.25</a>                    __DATE__ macro, <a href="#6.10.8.1">6.10.8.1</a>
25530 <a href="#7.26">&lt;time.h&gt;</a> header, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>                                 __FILE__ macro, <a href="#6.10.8.1">6.10.8.1</a>, <a href="#7.2.1.1">7.2.1.1</a>
25531 <a href="#7.27">&lt;uchar.h&gt;</a> header, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27">7.27</a>                       __func__ identifier, <a href="#6.4.2.2">6.4.2.2</a>, <a href="#7.2.1.1">7.2.1.1</a>
25532 <a href="#7.28">&lt;wchar.h&gt;</a> header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28">7.28</a>,                   __LINE__ macro, <a href="#6.10.8.1">6.10.8.1</a>, <a href="#7.2.1.1">7.2.1.1</a>
25533      <a href="#7.30.12">7.30.12</a>, <a href="#F">F</a>, <a href="#K.3.9">K.3.9</a>                                       __STDC_, <a href="#6.11.9">6.11.9</a>
25534 <a href="#7.29">&lt;wctype.h&gt;</a> header, <a href="#7.29">7.29</a>, <a href="#7.30.13">7.30.13</a>                             __STDC__ macro, <a href="#6.10.8.1">6.10.8.1</a>
25535 = (equal-sign punctuator), <a href="#6.7">6.7</a>, <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.9">6.7.9</a>               __STDC_ANALYZABLE__ macro, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#L.1">L.1</a>
25536 = (simple assignment operator), <a href="#6.5.16.1">6.5.16.1</a>                     __STDC_HOSTED__ macro, <a href="#6.10.8.1">6.10.8.1</a>
25537 == (equality operator), <a href="#6.5.9">6.5.9</a>                                __STDC_IEC_559__ macro, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#F.1">F.1</a>
25538 &gt; (greater-than operator), <a href="#6.5.8">6.5.8</a>                             __STDC_IEC_559_COMPLEX__ macro,
25539 &gt;= (greater-than-or-equal-to operator), <a href="#6.5.8">6.5.8</a>                     <a href="#6.10.8.3">6.10.8.3</a>, <a href="#G.1">G.1</a>
25540 &gt;&gt; (right-shift operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>                    __STDC_ISO_10646__ macro, <a href="#6.10.8.2">6.10.8.2</a>
25541 &gt;&gt;= (right-shift assignment operator), <a href="#6.5.16.2">6.5.16.2</a>              __STDC_LIB_EXT1__ macro, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#K.2">K.2</a>
25542 ? : (conditional operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.15">6.5.15</a>                  __STDC_MB_MIGHT_NEQ_WC__ macro,
25543 ?? (trigraph sequences), <a href="#5.2.1.1">5.2.1.1</a>                                  <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.19">7.19</a>
25544 [ ] (array subscript operator), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>             __STDC_NO_COMPLEX__ macro, <a href="#6.10.8.3">6.10.8.3</a>,
25545 [ ] (brackets punctuator), <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.9">6.7.9</a>                         <a href="#7.3.1">7.3.1</a>
25546 \ (backslash character), <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>             __STDC_NO_THREADS__ macro, <a href="#6.10.8.3">6.10.8.3</a>,
25547 \ (escape character), <a href="#6.4.4.4">6.4.4.4</a>                                     <a href="#7.17.1">7.17.1</a>, <a href="#7.25.1">7.25.1</a>
25548 \" (double-quote escape sequence), <a href="#6.4.4.4">6.4.4.4</a>,                  __STDC_NO_VLA__ macro, <a href="#6.10.8.3">6.10.8.3</a>
25549      <a href="#6.4.5">6.4.5</a>, <a href="#6.10.9">6.10.9</a>                                           __STDC_UTF_16__ macro, <a href="#6.10.8.2">6.10.8.2</a>
25550 \\ (backslash escape sequence), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.10.9">6.10.9</a>              __STDC_UTF_32__ macro, <a href="#6.10.8.2">6.10.8.2</a>
25551 \' (single-quote escape sequence), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>            __STDC_VERSION__ macro, <a href="#6.10.8.1">6.10.8.1</a>
25552 \0 (null character), <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>                   __STDC_WANT_LIB_EXT1__ macro, <a href="#K.3.1.1">K.3.1.1</a>
25553   padding of binary stream, <a href="#7.21.2">7.21.2</a>                           __TIME__ macro, <a href="#6.10.8.1">6.10.8.1</a>
25554 \? (question-mark escape sequence), <a href="#6.4.4.4">6.4.4.4</a>                  __VA_ARGS__ identifier, <a href="#6.10.3">6.10.3</a>, <a href="#6.10.3.1">6.10.3.1</a>
25555 \a (alert escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                   _Alignas, <a href="#6.7.5">6.7.5</a>
25556 \b (backspace escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>               _Atomic type qualifier, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.3">6.7.3</a>
25557 \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>,              _Atomic-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.5.2.3">6.5.2.3</a>,
25558      <a href="#7.4.1.10">7.4.1.10</a>                                                     <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.16.2">6.5.16.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.3">6.7.3</a>
25559 \n (new-line escape sequence), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,               _Bool type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.2">6.3.1.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.17.1">7.17.1</a>,
25560      <a href="#7.4.1.10">7.4.1.10</a>                                                     <a href="#F.4">F.4</a>
25561 \octal digits (octal-character escape sequence),             _Bool type conversions, <a href="#6.3.1.2">6.3.1.2</a>
25562      <a href="#6.4.4.4">6.4.4.4</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>
25563 \r (carriage-return escape sequence), <a href="#5.2.2">5.2.2</a>,                 _Complex_I macro, <a href="#7.3.1">7.3.1</a>
25564      <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.10">7.4.1.10</a>                                       _Exit function, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>
25565 \t (horizontal-tab escape sequence), <a href="#5.2.2">5.2.2</a>,                  _Imaginary keyword, <a href="#G.2">G.2</a>
25566      <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.3">7.4.1.3</a>, <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>                  _Imaginary types, <a href="#7.3.1">7.3.1</a>, <a href="#G">G</a>
25567 \U (universal character names), <a href="#6.4.3">6.4.3</a>                        _Imaginary_I macro, <a href="#7.3.1">7.3.1</a>, <a href="#G.6">G.6</a>
25568 \u (universal character names), <a href="#6.4.3">6.4.3</a>                        _IOFBF macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.5">7.21.5.5</a>, <a href="#7.21.5.6">7.21.5.6</a>
25569 \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>,           _IOLBF macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.6">7.21.5.6</a>
25570      <a href="#7.4.1.10">7.4.1.10</a>                                                _IONBF macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.5">7.21.5.5</a>, <a href="#7.21.5.6">7.21.5.6</a>
25571
25572 [<a name="#p654" href="p654">page 654</a>] (<a href="#Contents">Contents</a>)
25573
25574 _Noreturn, <a href="#6.7.4">6.7.4</a>                                             alignment specifier, <a href="#6.7.5">6.7.5</a>
25575 _Pragma operator, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.9">6.10.9</a>                            alignof operator, <a href="#6.5.3">6.5.3</a>, <a href="#6.5.3.4">6.5.3.4</a>
25576 _Static_assert, <a href="#6.7.10">6.7.10</a>, <a href="#7.2">7.2</a>                                  allocated storage, order and contiguity, <a href="#7.22.3">7.22.3</a>
25577 _Thread_local storage-class specifier, <a href="#6.2.4">6.2.4</a>,                 and macro, <a href="#7.9">7.9</a>
25578      <a href="#6.7.1">6.7.1</a>                                                   AND operators
25579 { } (braces punctuator), <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>,               bitwise (&amp;), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.10">6.5.10</a>
25580      <a href="#6.8.2">6.8.2</a>                                                      bitwise assignment (&amp;=), <a href="#6.5.16.2">6.5.16.2</a>
25581 { } (compound-literal operator), <a href="#6.5.2.5">6.5.2.5</a>                        logical (&amp;&amp;), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.13">6.5.13</a>
25582 | (bitwise inclusive OR operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>           and_eq macro, <a href="#7.9">7.9</a>
25583 |= (bitwise inclusive OR assignment operator),               anonymous structure, <a href="#6.7.2.1">6.7.2.1</a>
25584      <a href="#6.5.16.2">6.5.16.2</a>                                                anonymous union, <a href="#6.7.2.1">6.7.2.1</a>
25585 || (logical OR operator), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.14">6.5.14</a>                    ANSI/IEEE 754, <a href="#F.1">F.1</a>
25586 ~ (bitwise complement operator), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>            ANSI/IEEE 854, <a href="#F.1">F.1</a>
25587                                                              argc (main function parameter), <a href="#5.1.2.2.1">5.1.2.2.1</a>
25588 abort function, <a href="#7.2.1.1">7.2.1.1</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.21.3">7.21.3</a>,                   argument, <a href="#3.3">3.3</a>
25589       <a href="#7.22.4.1">7.22.4.1</a>, <a href="#7.25.3.6">7.25.3.6</a>, <a href="#K.3.6.1.2">K.3.6.1.2</a>                             array, <a href="#6.9.1">6.9.1</a>
25590 abort_handler_s function, <a href="#K.3.6.1.2">K.3.6.1.2</a>                             default promotions, <a href="#6.5.2.2">6.5.2.2</a>
25591 abs function, <a href="#7.22.6.1">7.22.6.1</a>                                          function, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>
25592 absolute-value functions                                        macro, substitution, <a href="#6.10.3.1">6.10.3.1</a>
25593    complex, <a href="#7.3.8">7.3.8</a>, <a href="#G.6.4">G.6.4</a>                                     argument, complex, <a href="#7.3.9.1">7.3.9.1</a>
25594    integer, <a href="#7.8.2.1">7.8.2.1</a>, <a href="#7.22.6.1">7.22.6.1</a>                                argv (main function parameter), <a href="#5.1.2.2.1">5.1.2.2.1</a>
25595    real, <a href="#7.12.7">7.12.7</a>, <a href="#F.10.4">F.10.4</a>                                      arithmetic constant expression, <a href="#6.6">6.6</a>
25596 abstract declarator, <a href="#6.7.7">6.7.7</a>                                   arithmetic conversions, usual, see usual arithmetic
25597 abstract machine, <a href="#5.1.2.3">5.1.2.3</a>                                          conversions
25598 access, <a href="#3.1">3.1</a>, <a href="#6.7.3">6.7.3</a>, <a href="#L.2.1">L.2.1</a>                                    arithmetic operators
25599 accuracy, see floating-point accuracy                            additive, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>, <a href="#G.5.2">G.5.2</a>
25600 acos functions, <a href="#7.12.4.1">7.12.4.1</a>, <a href="#F.10.1.1">F.10.1.1</a>                              bitwise, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>, <a href="#6.5.10">6.5.10</a>, <a href="#6.5.11">6.5.11</a>, <a href="#6.5.12">6.5.12</a>
25601 acos type-generic macro, <a href="#7.24">7.24</a>                                   increment and decrement, <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.3.1">6.5.3.1</a>
25602 acosh functions, <a href="#7.12.5.1">7.12.5.1</a>, <a href="#F.10.2.1">F.10.2.1</a>                             multiplicative, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
25603 acosh type-generic macro, <a href="#7.24">7.24</a>                                  shift, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
25604 acquire fence, <a href="#7.17.4">7.17.4</a>                                           unary, <a href="#6.5.3.3">6.5.3.3</a>
25605 acquire operation, <a href="#5.1.2.4">5.1.2.4</a>                                   arithmetic types, <a href="#6.2.5">6.2.5</a>
25606 active position, <a href="#5.2.2">5.2.2</a>                                       arithmetic, pointer, <a href="#6.5.6">6.5.6</a>
25607 actual argument, <a href="#3.3">3.3</a>                                         array
25608 actual parameter (deprecated), <a href="#3.3">3.3</a>                              argument, <a href="#6.9.1">6.9.1</a>
25609 addition assignment operator (+=), <a href="#6.5.16.2">6.5.16.2</a>                     declarator, <a href="#6.7.6.2">6.7.6.2</a>
25610 addition operator (+), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>,               initialization, <a href="#6.7.9">6.7.9</a>
25611       <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>                                         multidimensional, <a href="#6.5.2.1">6.5.2.1</a>
25612 additive expressions, <a href="#6.5.6">6.5.6</a>, <a href="#G.5.2">G.5.2</a>                              parameter, <a href="#6.9.1">6.9.1</a>
25613 address constant, <a href="#6.6">6.6</a>                                           storage order, <a href="#6.5.2.1">6.5.2.1</a>
25614 address operator (&amp;), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>                          subscript operator ([ ]), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>
25615 address-free, <a href="#7.17.5">7.17.5</a>                                            subscripting, <a href="#6.5.2.1">6.5.2.1</a>
25616 aggregate initialization, <a href="#6.7.9">6.7.9</a>                                 type, <a href="#6.2.5">6.2.5</a>
25617 aggregate types, <a href="#6.2.5">6.2.5</a>                                          type conversion, <a href="#6.3.2.1">6.3.2.1</a>
25618 alert escape sequence (\a), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                      variable length, <a href="#6.7.6">6.7.6</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>
25619 aliasing, <a href="#6.5">6.5</a>                                                arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
25620 alignas macro, <a href="#7.15">7.15</a>                                          as-if rule, <a href="#5.1.2.3">5.1.2.3</a>
25621 aligned_alloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.1">7.22.3.1</a>                     ASCII code set, <a href="#5.2.1.1">5.2.1.1</a>
25622 alignment, <a href="#3.2">3.2</a>, <a href="#6.2.8">6.2.8</a>, <a href="#7.22.3.1">7.22.3.1</a>                              asctime function, <a href="#7.26.3.1">7.26.3.1</a>
25623    pointer, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.2.3">6.3.2.3</a>                                   asctime_s function, <a href="#K.3.8.2">K.3.8.2</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>
25624    structure/union member, <a href="#6.7.2.1">6.7.2.1</a>                           asin functions, <a href="#7.12.4.2">7.12.4.2</a>, <a href="#F.10.1.2">F.10.1.2</a>
25625
25626 [<a name="#p655" href="p655">page 655</a>] (<a href="#Contents">Contents</a>)
25627
25628 asin type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                       atomic_is_lock_free generic function,
25629 asinh functions, <a href="#7.12.5.2">7.12.5.2</a>, <a href="#F.10.2.2">F.10.2.2</a>                          <a href="#7.17.5.1">7.17.5.1</a>
25630 asinh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                      ATOMIC_LLONG_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
25631 asm keyword, <a href="#J.5.10">J.5.10</a>                                      atomic_load generic functions, <a href="#7.17.7.2">7.17.7.2</a>
25632 assert macro, <a href="#7.2.1.1">7.2.1.1</a>                                    ATOMIC_LONG_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
25633 assert.h header, <a href="#7.2">7.2</a>                                     ATOMIC_SHORT_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
25634 assignment                                               atomic_signal_fence function, <a href="#7.17.4.2">7.17.4.2</a>
25635    compound, <a href="#6.5.16.2">6.5.16.2</a>                                    atomic_store generic functions, <a href="#7.17.7.1">7.17.7.1</a>
25636    conversion, <a href="#6.5.16.1">6.5.16.1</a>                                  atomic_thread_fence function, <a href="#7.17.4.1">7.17.4.1</a>
25637    expression, <a href="#6.5.16">6.5.16</a>                                    ATOMIC_VAR_INIT macro, <a href="#7.17.2.1">7.17.2.1</a>
25638    operators, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.16">6.5.16</a>                            ATOMIC_WCHAR_T_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>
25639    simple, <a href="#6.5.16.1">6.5.16.1</a>                                      atomics header, <a href="#7.17">7.17</a>
25640 associativity of operators, <a href="#6.5">6.5</a>                          auto storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.9">6.9</a>
25641 asterisk punctuator (*), <a href="#6.7.6.1">6.7.6.1</a>, <a href="#6.7.6.2">6.7.6.2</a>                automatic storage duration, <a href="#5.2.3">5.2.3</a>, <a href="#6.2.4">6.2.4</a>
25642 at_quick_exit function, <a href="#7.22.4.2">7.22.4.2</a>, <a href="#7.22.4.3">7.22.4.3</a>,
25643      <a href="#7.22.4.4">7.22.4.4</a>, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>                        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>
25644 atan functions, <a href="#7.12.4.3">7.12.4.3</a>, <a href="#F.10.1.3">F.10.1.3</a>                       backslash escape sequence (\\), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.10.9">6.10.9</a>
25645 atan type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</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>
25646 atan2 functions, <a href="#7.12.4.4">7.12.4.4</a>, <a href="#F.10.1.4">F.10.1.4</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>
25647 atan2 type-generic macro, <a href="#7.24">7.24</a>                           basic types, <a href="#6.2.5">6.2.5</a>
25648 atanh functions, <a href="#7.12.5.3">7.12.5.3</a>, <a href="#F.10.2.3">F.10.2.3</a>                      behavior, <a href="#3.4">3.4</a>
25649 atanh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                      binary streams, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>,
25650 atexit function, <a href="#7.22.4.2">7.22.4.2</a>, <a href="#7.22.4.3">7.22.4.3</a>, <a href="#7.22.4.4">7.22.4.4</a>,                 <a href="#7.21.9.4">7.21.9.4</a>
25651      <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>, <a href="#J.5.13">J.5.13</a>                          bit, <a href="#3.5">3.5</a>
25652 atof function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.1">7.22.1.1</a>                             high order, <a href="#3.6">3.6</a>
25653 atoi function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.2">7.22.1.2</a>                             low order, <a href="#3.6">3.6</a>
25654 atol function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.2">7.22.1.2</a>                          bit-field, <a href="#6.7.2.1">6.7.2.1</a>
25655 atoll function, <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.2">7.22.1.2</a>                         bitand macro, <a href="#7.9">7.9</a>
25656 atomic lock-free macros, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.5">7.17.5</a>                  bitor macro, <a href="#7.9">7.9</a>
25657 atomic operations, <a href="#5.1.2.4">5.1.2.4</a>                               bitwise operators, <a href="#6.5">6.5</a>
25658 atomic types, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.17.6">7.17.6</a>                     AND, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.10">6.5.10</a>
25659 atomic_address type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.6">7.17.6</a>                         AND assignment (&amp;=), <a href="#6.5.16.2">6.5.16.2</a>
25660 ATOMIC_ADDRESS_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>                      complement (~), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>
25661 atomic_bool type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.6">7.17.6</a>                            exclusive OR, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>
25662 ATOMIC_CHAR16_T_LOCK_FREE macro,                            exclusive OR assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>
25663      <a href="#7.17.1">7.17.1</a>                                                 inclusive OR, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>
25664 ATOMIC_CHAR32_T_LOCK_FREE macro,                            inclusive OR assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>
25665      <a href="#7.17.1">7.17.1</a>                                                 shift, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
25666 ATOMIC_CHAR_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>                      blank character, <a href="#7.4.1.3">7.4.1.3</a>
25667 atomic_compare_exchange generic                          block, <a href="#6.8">6.8</a>, <a href="#6.8.2">6.8.2</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.5</a>
25668      functions, <a href="#7.17.7.4">7.17.7.4</a>                                 block scope, <a href="#6.2.1">6.2.1</a>
25669 atomic_exchange generic functions, <a href="#7.17.7.3">7.17.7.3</a>              block structure, <a href="#6.2.1">6.2.1</a>
25670 atomic_fetch and modify generic functions,               bold type convention, <a href="#6.1">6.1</a>
25671      <a href="#7.17.7.5">7.17.7.5</a>                                            bool macro, <a href="#7.18">7.18</a>
25672 atomic_flag type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.8">7.17.8</a>                         boolean type, <a href="#6.3.1.2">6.3.1.2</a>
25673 atomic_flag_clear functions, <a href="#7.17.8.2">7.17.8.2</a>                    boolean type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.2">6.3.1.2</a>
25674 ATOMIC_FLAG_INIT macro, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.8">7.17.8</a>                   bounded undefined behavior, <a href="#L.2.2">L.2.2</a>
25675 atomic_flag_test_and_set functions,                      braces punctuator ({ }), <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>,
25676      <a href="#7.17.8.1">7.17.8.1</a>                                                  <a href="#6.8.2">6.8.2</a>
25677 atomic_init generic function, <a href="#7.17.2.2">7.17.2.2</a>                   brackets operator ([ ]), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>
25678 ATOMIC_INT_LOCK_FREE macro, <a href="#7.17.1">7.17.1</a>                       brackets punctuator ([ ]), <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.9">6.7.9</a>
25679
25680 [<a name="#p656" href="p656">page 656</a>] (<a href="#Contents">Contents</a>)
25681
25682 branch cuts, <a href="#7.3.3">7.3.3</a>                                                type-generic macro for, <a href="#7.24">7.24</a>
25683 break statement, <a href="#6.8.6.3">6.8.6.3</a>                                       ccosh functions, <a href="#7.3.6.4">7.3.6.4</a>, <a href="#G.6.2.4">G.6.2.4</a>
25684 broken-down time, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.3">7.26.3</a>,                       type-generic macro for, <a href="#7.24">7.24</a>
25685      <a href="#7.26.3.1">7.26.3.1</a>, <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#7.26.3.5">7.26.3.5</a>,                   ceil functions, <a href="#7.12.9.1">7.12.9.1</a>, <a href="#F.10.6.1">F.10.6.1</a>
25686      <a href="#K.3.8.2.1">K.3.8.2.1</a>, <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                           ceil type-generic macro, <a href="#7.24">7.24</a>
25687 bsearch function, <a href="#7.22.5">7.22.5</a>, <a href="#7.22.5.1">7.22.5.1</a>                             cerf function, <a href="#7.30.1">7.30.1</a>
25688 bsearch_s function, <a href="#K.3.6.3">K.3.6.3</a>, <a href="#K.3.6.3.1">K.3.6.3.1</a>                         cerfc function, <a href="#7.30.1">7.30.1</a>
25689 btowc function, <a href="#7.28.6.1.1">7.28.6.1.1</a>                                     cexp functions, <a href="#7.3.7.1">7.3.7.1</a>, <a href="#G.6.3.1">G.6.3.1</a>
25690 BUFSIZ macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.5.5">7.21.5.5</a>                            type-generic macro for, <a href="#7.24">7.24</a>
25691 byte, <a href="#3.6">3.6</a>, <a href="#6.5.3.4">6.5.3.4</a>                                             cexp2 function, <a href="#7.30.1">7.30.1</a>
25692 byte input/output functions, <a href="#7.21.1">7.21.1</a>                            cexpm1 function, <a href="#7.30.1">7.30.1</a>
25693 byte-oriented stream, <a href="#7.21.2">7.21.2</a>                                   char type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>,
25694                                                                      <a href="#K.3.9.1.2">K.3.9.1.2</a>
25695 C program, <a href="#5.1.1.1">5.1.1.1</a>                                             char type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>,
25696 c16rtomb function, <a href="#7.27.1.2">7.27.1.2</a>                                          <a href="#6.3.1.8">6.3.1.8</a>
25697 c32rtomb function, <a href="#7.27.1.4">7.27.1.4</a>                                    char16_t type, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.27">7.27</a>
25698 cabs functions, <a href="#7.3.8.1">7.3.8.1</a>, <a href="#G.6">G.6</a>                                   char32_t type, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.27">7.27</a>
25699   type-generic macro for, <a href="#7.24">7.24</a>                                 CHAR_BIT macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.7.2.1">6.7.2.1</a>
25700 cacos functions, <a href="#7.3.5.1">7.3.5.1</a>, <a href="#G.6.1.1">G.6.1.1</a>                              CHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
25701   type-generic macro for, <a href="#7.24">7.24</a>                                 CHAR_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
25702 cacosh functions, <a href="#7.3.6.1">7.3.6.1</a>, <a href="#G.6.2.1">G.6.2.1</a>                             character, <a href="#3.7">3.7</a>, <a href="#3.7.1">3.7.1</a>
25703   type-generic macro for, <a href="#7.24">7.24</a>                                 character array initialization, <a href="#6.7.9">6.7.9</a>
25704 calendar time, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.2">7.26.2.2</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.2.4">7.26.2.4</a>,           character case mapping functions, <a href="#7.4.2">7.4.2</a>
25705       <a href="#7.26.3.2">7.26.3.2</a>, <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>,                    wide character, <a href="#7.29.3.1">7.29.3.1</a>
25706       <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                                           extensible, <a href="#7.29.3.2">7.29.3.2</a>
25707 call by value, <a href="#6.5.2.2">6.5.2.2</a>                                         character classification functions, <a href="#7.4.1">7.4.1</a>
25708 call_once function, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.2.1">7.25.2.1</a>                              wide character, <a href="#7.29.2.1">7.29.2.1</a>
25709 calloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.2">7.22.3.2</a>                                    extensible, <a href="#7.29.2.2">7.29.2.2</a>
25710 carg functions, <a href="#7.3.9.1">7.3.9.1</a>, <a href="#G.6">G.6</a>                                   character constant, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>
25711 carg type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                             character display semantics, <a href="#5.2.2">5.2.2</a>
25712 carriage-return escape sequence (\r), <a href="#5.2.2">5.2.2</a>,                   character handling header, <a href="#7.4">7.4</a>, <a href="#7.11.1.1">7.11.1.1</a>
25713       <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.10">7.4.1.10</a>                                        character input/output functions, <a href="#7.21.7">7.21.7</a>, <a href="#K.3.5.4">K.3.5.4</a>
25714 carries a dependency, <a href="#5.1.2.4">5.1.2.4</a>                                     wide character, <a href="#7.28.3">7.28.3</a>
25715 case label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>                                     character sets, <a href="#5.2.1">5.2.1</a>
25716 case mapping functions                                         character string literal, see string literal
25717   character, <a href="#7.4.2">7.4.2</a>                                             character type conversion, <a href="#6.3.1.1">6.3.1.1</a>
25718   wide character, <a href="#7.29.3.1">7.29.3.1</a>                                     character types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.9">6.7.9</a>
25719       extensible, <a href="#7.29.3.2">7.29.3.2</a>                                     cimag functions, <a href="#7.3.9.2">7.3.9.2</a>, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#G.6">G.6</a>
25720 casin functions, <a href="#7.3.5.2">7.3.5.2</a>, <a href="#G.6">G.6</a>                                  cimag type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
25721   type-generic macro for, <a href="#7.24">7.24</a>                                 cis function, <a href="#G.6">G.6</a>
25722 casinh functions, <a href="#7.3.6.2">7.3.6.2</a>, <a href="#G.6.2.2">G.6.2.2</a>                             classification functions
25723   type-generic macro for, <a href="#7.24">7.24</a>                                    character, <a href="#7.4.1">7.4.1</a>
25724 cast expression, <a href="#6.5.4">6.5.4</a>                                            floating-point, <a href="#7.12.3">7.12.3</a>
25725 cast operator (( )), <a href="#6.5.4">6.5.4</a>                                        wide character, <a href="#7.29.2.1">7.29.2.1</a>
25726 catan functions, <a href="#7.3.5.3">7.3.5.3</a>, <a href="#G.6">G.6</a>                                        extensible, <a href="#7.29.2.2">7.29.2.2</a>
25727   type-generic macro for, <a href="#7.24">7.24</a>                                 clearerr function, <a href="#7.21.10.1">7.21.10.1</a>
25728 catanh functions, <a href="#7.3.6.3">7.3.6.3</a>, <a href="#G.6.2.3">G.6.2.3</a>                             clgamma function, <a href="#7.30.1">7.30.1</a>
25729   type-generic macro for, <a href="#7.24">7.24</a>                                 clock function, <a href="#7.26.2.1">7.26.2.1</a>
25730 cbrt functions, <a href="#7.12.7.1">7.12.7.1</a>, <a href="#F.10.4.1">F.10.4.1</a>                             clock_t type, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.1">7.26.2.1</a>
25731 cbrt type-generic macro, <a href="#7.24">7.24</a>                                  CLOCKS_PER_SEC macro, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.1">7.26.2.1</a>
25732 ccos functions, <a href="#7.3.5.4">7.3.5.4</a>, <a href="#G.6">G.6</a>                                   clog functions, <a href="#7.3.7.2">7.3.7.2</a>, <a href="#G.6.3.2">G.6.3.2</a>
25733
25734 [<a name="#p657" href="p657">page 657</a>] (<a href="#Contents">Contents</a>)
25735
25736   type-generic macro for, <a href="#7.24">7.24</a>                                  string, <a href="#7.23.3">7.23.3</a>, <a href="#K.3.7.2">K.3.7.2</a>
25737 clog10 function, <a href="#7.30.1">7.30.1</a>                                         wide string, <a href="#7.28.4.3">7.28.4.3</a>, <a href="#K.3.9.2.2">K.3.9.2.2</a>
25738 clog1p function, <a href="#7.30.1">7.30.1</a>                                       concatenation, preprocessing, see preprocessing
25739 clog2 function, <a href="#7.30.1">7.30.1</a>                                             concatenation
25740 CMPLX macros, <a href="#7.3.9.3">7.3.9.3</a>                                         conceptual models, <a href="#5.1">5.1</a>
25741 cnd_broadcast function, <a href="#7.25.3.1">7.25.3.1</a>, <a href="#7.25.3.5">7.25.3.5</a>,                   conditional features, <a href="#4">4</a>, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>,
25742      <a href="#7.25.3.6">7.25.3.6</a>                                                      <a href="#7.1.2">7.1.2</a>, <a href="#F.1">F.1</a>, <a href="#G.1">G.1</a>, <a href="#K.2">K.2</a>, <a href="#L.1">L.1</a>
25743 cnd_destroy function, <a href="#7.25.3.2">7.25.3.2</a>                                conditional inclusion, <a href="#6.10.1">6.10.1</a>
25744 cnd_init function, <a href="#7.25.3.3">7.25.3.3</a>                                   conditional operator (? :), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.15">6.5.15</a>
25745 cnd_signal function, <a href="#7.25.3.4">7.25.3.4</a>, <a href="#7.25.3.5">7.25.3.5</a>,                      conflict, <a href="#5.1.2.4">5.1.2.4</a>
25746      <a href="#7.25.3.6">7.25.3.6</a>                                                 conformance, <a href="#4">4</a>
25747 cnd_t type, <a href="#7.25.1">7.25.1</a>                                            conj functions, <a href="#7.3.9.4">7.3.9.4</a>, <a href="#G.6">G.6</a>
25748 cnd_timedwait function, <a href="#7.25.3.5">7.25.3.5</a>                              conj type-generic macro, <a href="#7.24">7.24</a>
25749 cnd_wait function, <a href="#7.25.3.3">7.25.3.3</a>, <a href="#7.25.3.6">7.25.3.6</a>                         const type qualifier, <a href="#6.7.3">6.7.3</a>
25750 collating sequences, <a href="#5.2.1">5.2.1</a>                                    const-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.7.3">6.7.3</a>
25751 colon punctuator (:), <a href="#6.7.2.1">6.7.2.1</a>                                 constant expression, <a href="#6.6">6.6</a>, <a href="#F.8.4">F.8.4</a>
25752 comma operator (,), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.17">6.5.17</a>                           constants, <a href="#6.4.4">6.4.4</a>
25753 comma punctuator (,), <a href="#6.5.2">6.5.2</a>, <a href="#6.7">6.7</a>, <a href="#6.7.2.1">6.7.2.1</a>, <a href="#6.7.2.2">6.7.2.2</a>,             as primary expression, <a href="#6.5.1">6.5.1</a>
25754      <a href="#6.7.2.3">6.7.2.3</a>, <a href="#6.7.9">6.7.9</a>                                             character, <a href="#6.4.4.4">6.4.4.4</a>
25755 command processor, <a href="#7.22.4.8">7.22.4.8</a>                                     enumeration, <a href="#6.2.1">6.2.1</a>, <a href="#6.4.4.3">6.4.4.3</a>
25756 comment delimiters (/* */ and //), <a href="#6.4.9">6.4.9</a>                        floating, <a href="#6.4.4.2">6.4.4.2</a>
25757 comments, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, <a href="#6.4.9">6.4.9</a>                                   hexadecimal, <a href="#6.4.4.1">6.4.4.1</a>
25758 common extensions, <a href="#J.5">J.5</a>                                          integer, <a href="#6.4.4.1">6.4.4.1</a>
25759 common initial sequence, <a href="#6.5.2.3">6.5.2.3</a>                                octal, <a href="#6.4.4.1">6.4.4.1</a>
25760 common real type, <a href="#6.3.1.8">6.3.1.8</a>                                     constraint, <a href="#3.8">3.8</a>, <a href="#4">4</a>
25761 common warnings, <a href="#I">I</a>                                            constraint_handler_t type, <a href="#K.3.6">K.3.6</a>
25762 comparison functions, <a href="#7.22.5">7.22.5</a>, <a href="#7.22.5.1">7.22.5.1</a>, <a href="#7.22.5.2">7.22.5.2</a>,             consume operation, <a href="#5.1.2.4">5.1.2.4</a>
25763      <a href="#K.3.6.3">K.3.6.3</a>, <a href="#K.3.6.3.1">K.3.6.3.1</a>, <a href="#K.3.6.3.2">K.3.6.3.2</a>                            content of structure/union/enumeration, <a href="#6.7.2.3">6.7.2.3</a>
25764   string, <a href="#7.23.4">7.23.4</a>                                              contiguity of allocated storage, <a href="#7.22.3">7.22.3</a>
25765   wide string, <a href="#7.28.4.4">7.28.4.4</a>                                       continue statement, <a href="#6.8.6.2">6.8.6.2</a>
25766 comparison macros, <a href="#7.12.14">7.12.14</a>                                    contracted expression, <a href="#6.5">6.5</a>, <a href="#7.12.2">7.12.2</a>, <a href="#F.7">F.7</a>
25767 comparison, pointer, <a href="#6.5.8">6.5.8</a>                                    control character, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>
25768 compatible type, <a href="#6.2.7">6.2.7</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.6">6.7.6</a>                   control wide character, <a href="#7.29.2">7.29.2</a>
25769 compl macro, <a href="#7.9">7.9</a>                                              conversion, <a href="#6.3">6.3</a>
25770 complement operator (~), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.3.3">6.5.3.3</a>                       arithmetic operands, <a href="#6.3.1">6.3.1</a>
25771 complete type, <a href="#6.2.5">6.2.5</a>                                            array argument, <a href="#6.9.1">6.9.1</a>
25772 complex macro, <a href="#7.3.1">7.3.1</a>                                            array parameter, <a href="#6.9.1">6.9.1</a>
25773 complex numbers, <a href="#6.2.5">6.2.5</a>, <a href="#G">G</a>                                       arrays, <a href="#6.3.2.1">6.3.2.1</a>
25774 complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>, <a href="#6.3.1.7">6.3.1.7</a>                       boolean, <a href="#6.3.1.2">6.3.1.2</a>
25775 complex type domain, <a href="#6.2.5">6.2.5</a>                                      boolean, characters, and integers, <a href="#6.3.1.1">6.3.1.1</a>
25776 complex types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#G">G</a>                        by assignment, <a href="#6.5.16.1">6.5.16.1</a>
25777 complex.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>,                   by return statement, <a href="#6.8.6.4">6.8.6.4</a>
25778      <a href="#7.3">7.3</a>, <a href="#7.24">7.24</a>, <a href="#7.30.1">7.30.1</a>, <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>                             complex types, <a href="#6.3.1.6">6.3.1.6</a>
25779 compliance, see conformance                                     explicit, <a href="#6.3">6.3</a>
25780 components of time, <a href="#7.26.1">7.26.1</a>, <a href="#K.3.8.1">K.3.8.1</a>                             function, <a href="#6.3.2.1">6.3.2.1</a>
25781 composite type, <a href="#6.2.7">6.2.7</a>                                           function argument, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>
25782 compound assignment, <a href="#6.5.16.2">6.5.16.2</a>                                   function designators, <a href="#6.3.2.1">6.3.2.1</a>
25783 compound literals, <a href="#6.5.2.5">6.5.2.5</a>                                      function parameter, <a href="#6.9.1">6.9.1</a>
25784 compound statement, <a href="#6.8.2">6.8.2</a>                                       imaginary, <a href="#G.4.1">G.4.1</a>
25785 compound-literal operator (( ){ }), <a href="#6.5.2.5">6.5.2.5</a>                     imaginary and complex, <a href="#G.4.3">G.4.3</a>
25786 concatenation functions                                         implicit, <a href="#6.3">6.3</a>
25787
25788 [<a name="#p658" href="p658">page 658</a>] (<a href="#Contents">Contents</a>)
25789
25790    lvalues, <a href="#6.3.2.1">6.3.2.1</a>                                             csinh functions, <a href="#7.3.6.5">7.3.6.5</a>, <a href="#G.6.2.5">G.6.2.5</a>
25791    pointer, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>                                      type-generic macro for, <a href="#7.24">7.24</a>
25792    real and complex, <a href="#6.3.1.7">6.3.1.7</a>                                    csqrt functions, <a href="#7.3.8.3">7.3.8.3</a>, <a href="#G.6.4.2">G.6.4.2</a>
25793    real and imaginary, <a href="#G.4.2">G.4.2</a>                                      type-generic macro for, <a href="#7.24">7.24</a>
25794    real floating and integer, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>                  ctan functions, <a href="#7.3.5.6">7.3.5.6</a>, <a href="#G.6">G.6</a>
25795    real floating types, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#F.3">F.3</a>                               type-generic macro for, <a href="#7.24">7.24</a>
25796    signed and unsigned integers, <a href="#6.3.1.3">6.3.1.3</a>                        ctanh functions, <a href="#7.3.6.6">7.3.6.6</a>, <a href="#G.6.2.6">G.6.2.6</a>
25797    usual arithmetic, see usual arithmetic                         type-generic macro for, <a href="#7.24">7.24</a>
25798          conversions                                            ctgamma function, <a href="#7.30.1">7.30.1</a>
25799    void type, <a href="#6.3.2.2">6.3.2.2</a>                                           ctime function, <a href="#7.26.3.2">7.26.3.2</a>
25800 conversion functions                                            ctime_s function, <a href="#K.3.8.2">K.3.8.2</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>
25801    multibyte/wide character, <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>                    ctype.h header, <a href="#7.4">7.4</a>, <a href="#7.30.2">7.30.2</a>
25802       extended, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>                                 current object, <a href="#6.7.9">6.7.9</a>
25803       restartable, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>                  CX_LIMITED_RANGE pragma, <a href="#6.10.6">6.10.6</a>, <a href="#7.3.4">7.3.4</a>
25804    multibyte/wide string, <a href="#7.22.8">7.22.8</a>, <a href="#K.3.6.5">K.3.6.5</a>
25805       restartable, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>                          data race, <a href="#5.1.2.4">5.1.2.4</a>, <a href="#7.1.4">7.1.4</a>, <a href="#7.22.2.1">7.22.2.1</a>, <a href="#7.22.4.6">7.22.4.6</a>,
25806    numeric, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1">7.22.1</a>                                          <a href="#7.23.5.8">7.23.5.8</a>, <a href="#7.23.6.2">7.23.6.2</a>, <a href="#7.26.3">7.26.3</a>, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>,
25807       wide string, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1">7.28.4.1</a>                                 <a href="#7.28.6.4">7.28.6.4</a>
25808    single byte/wide character, <a href="#7.28.6.1">7.28.6.1</a>                         data stream, see streams
25809    time, <a href="#7.26.3">7.26.3</a>, <a href="#K.3.8.2">K.3.8.2</a>                                        date and time header, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>
25810       wide character, <a href="#7.28.5">7.28.5</a>                                    Daylight Saving Time, <a href="#7.26.1">7.26.1</a>
25811 conversion specifier, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>,              DBL_DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25812       <a href="#7.28.2.2">7.28.2.2</a>                                                  DBL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25813 conversion state, <a href="#7.22.7">7.22.7</a>, <a href="#7.27.1">7.27.1</a>, <a href="#7.27.1.1">7.27.1.1</a>,                     DBL_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25814       <a href="#7.27.1.2">7.27.1.2</a>, <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.6">7.28.6</a>,                     DBL_HAS_SUBNORM macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25815       <a href="#7.28.6.2.1">7.28.6.2.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>,             DBL_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25816       <a href="#7.28.6.4">7.28.6.4</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#K.3.6.4">K.3.6.4</a>,                DBL_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25817       <a href="#K.3.9.3.1">K.3.9.3.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>,           DBL_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25818       <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>                                               DBL_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25819 conversion state functions, <a href="#7.28.6.2">7.28.6.2</a>                            DBL_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25820 copying functions                                               DBL_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25821    string, <a href="#7.23.2">7.23.2</a>, <a href="#K.3.7.1">K.3.7.1</a>                                      DBL_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25822    wide string, <a href="#7.28.4.2">7.28.4.2</a>, <a href="#K.3.9.2.1">K.3.9.2.1</a>                             DBL_TRUE_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25823 copysign functions, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#7.12.11.1">7.12.11.1</a>, <a href="#F.3">F.3</a>,                    decimal constant, <a href="#6.4.4.1">6.4.4.1</a>
25824       <a href="#F.10.8.1">F.10.8.1</a>                                                  decimal digit, <a href="#5.2.1">5.2.1</a>
25825 copysign type-generic macro, <a href="#7.24">7.24</a>                               decimal-point character, <a href="#7.1.1">7.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
25826 correctly rounded result, <a href="#3.9">3.9</a>                                   DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.6.1">7.21.6.1</a>,
25827 corresponding real type, <a href="#6.2.5">6.2.5</a>                                       <a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.5">F.5</a>
25828 cos functions, <a href="#7.12.4.5">7.12.4.5</a>, <a href="#F.10.1.5">F.10.1.5</a>                               declaration specifiers, <a href="#6.7">6.7</a>
25829 cos type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                               declarations, <a href="#6.7">6.7</a>
25830 cosh functions, <a href="#7.12.5.4">7.12.5.4</a>, <a href="#F.10.2.4">F.10.2.4</a>                                function, <a href="#6.7.6.3">6.7.6.3</a>
25831 cosh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                pointer, <a href="#6.7.6.1">6.7.6.1</a>
25832 cpow functions, <a href="#7.3.8.2">7.3.8.2</a>, <a href="#G.6.4.1">G.6.4.1</a>                                  structure/union, <a href="#6.7.2.1">6.7.2.1</a>
25833    type-generic macro for, <a href="#7.24">7.24</a>                                   typedef, <a href="#6.7.8">6.7.8</a>
25834 cproj functions, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#G.6">G.6</a>                                   declarator, <a href="#6.7.6">6.7.6</a>
25835 cproj type-generic macro, <a href="#7.24">7.24</a>                                    abstract, <a href="#6.7.7">6.7.7</a>
25836 creal functions, <a href="#7.3.9.6">7.3.9.6</a>, <a href="#G.6">G.6</a>                                   declarator type derivation, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.6">6.7.6</a>
25837 creal type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                             decrement operators, see arithmetic operators,
25838 critical undefined behavior, <a href="#L.2.3">L.2.3</a>                                    increment and decrement
25839 csin functions, <a href="#7.3.5.5">7.3.5.5</a>, <a href="#G.6">G.6</a>                                    default argument promotions, <a href="#6.5.2.2">6.5.2.2</a>
25840    type-generic macro for, <a href="#7.24">7.24</a>                                 default initialization, <a href="#6.7.9">6.7.9</a>
25841
25842 [<a name="#p659" href="p659">page 659</a>] (<a href="#Contents">Contents</a>)
25843
25844 default label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>                                  elif preprocessing directive, <a href="#6.10.1">6.10.1</a>
25845 define preprocessing directive, <a href="#6.10.3">6.10.3</a>                         ellipsis punctuator (...), <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.10.3">6.10.3</a>
25846 defined operator, <a href="#6.10.1">6.10.1</a>, <a href="#6.10.8">6.10.8</a>                               else preprocessing directive, <a href="#6.10.1">6.10.1</a>
25847 definition, <a href="#6.7">6.7</a>                                                 else statement, <a href="#6.8.4.1">6.8.4.1</a>
25848    function, <a href="#6.9.1">6.9.1</a>                                             empty statement, <a href="#6.8.3">6.8.3</a>
25849 dependency-ordered before, <a href="#5.1.2.4">5.1.2.4</a>                             encoding error, <a href="#7.21.3">7.21.3</a>, <a href="#7.27.1.1">7.27.1.1</a>, <a href="#7.27.1.2">7.27.1.2</a>,
25850 derived declarator types, <a href="#6.2.5">6.2.5</a>                                      <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>,
25851 derived types, <a href="#6.2.5">6.2.5</a>                                                 <a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>,
25852 designated initializer, <a href="#6.7.9">6.7.9</a>                                        <a href="#K.3.6.5.1">K.3.6.5.1</a>, <a href="#K.3.6.5.2">K.3.6.5.2</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>,
25853 destringizing, <a href="#6.10.9">6.10.9</a>                                                <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
25854 device input/output, <a href="#5.1.2.3">5.1.2.3</a>                                   end-of-file, <a href="#7.28.1">7.28.1</a>
25855 diagnostic message, <a href="#3.10">3.10</a>, <a href="#5.1.1.3">5.1.1.3</a>                              end-of-file indicator, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.1">7.21.7.1</a>,
25856 diagnostics, <a href="#5.1.1.3">5.1.1.3</a>                                                 <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>,
25857 diagnostics header, <a href="#7.2">7.2</a>                                              <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.10.1">7.21.10.1</a>, <a href="#7.21.10.2">7.21.10.2</a>, <a href="#7.28.3.1">7.28.3.1</a>,
25858 difftime function, <a href="#7.26.2.2">7.26.2.2</a>                                          <a href="#7.28.3.10">7.28.3.10</a>
25859 digit, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>                                              end-of-file macro, see EOF macro
25860 digraphs, <a href="#6.4.6">6.4.6</a>                                                end-of-line indicator, <a href="#5.2.1">5.2.1</a>
25861 direct input/output functions, <a href="#7.21.8">7.21.8</a>                          endif preprocessing directive, <a href="#6.10.1">6.10.1</a>
25862 display device, <a href="#5.2.2">5.2.2</a>                                          enum type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.2.2">6.7.2.2</a>
25863 div function, <a href="#7.22.6.2">7.22.6.2</a>                                         enumerated type, <a href="#6.2.5">6.2.5</a>
25864 div_t type, <a href="#7.22">7.22</a>                                               enumeration, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.2">6.7.2.2</a>
25865 division assignment operator (/=), <a href="#6.5.16.2">6.5.16.2</a>                    enumeration constant, <a href="#6.2.1">6.2.1</a>, <a href="#6.4.4.3">6.4.4.3</a>
25866 division operator (/), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>, <a href="#G.5.1">G.5.1</a>              enumeration content, <a href="#6.7.2.3">6.7.2.3</a>
25867 do statement, <a href="#6.8.5.2">6.8.5.2</a>                                          enumeration members, <a href="#6.7.2.2">6.7.2.2</a>
25868 documentation of implementation, <a href="#4">4</a>                             enumeration specifiers, <a href="#6.7.2.2">6.7.2.2</a>
25869 domain error, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.4.1">7.12.4.1</a>, <a href="#7.12.4.2">7.12.4.2</a>, <a href="#7.12.4.4">7.12.4.4</a>,            enumeration tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>
25870       <a href="#7.12.5.1">7.12.5.1</a>, <a href="#7.12.5.3">7.12.5.3</a>, <a href="#7.12.6.5">7.12.6.5</a>, <a href="#7.12.6.7">7.12.6.7</a>,                  enumerator, <a href="#6.7.2.2">6.7.2.2</a>
25871       <a href="#7.12.6.8">7.12.6.8</a>, <a href="#7.12.6.9">7.12.6.9</a>, <a href="#7.12.6.10">7.12.6.10</a>, <a href="#7.12.6.11">7.12.6.11</a>,                environment, <a href="#5">5</a>
25872       <a href="#7.12.7.4">7.12.7.4</a>, <a href="#7.12.7.5">7.12.7.5</a>, <a href="#7.12.8.4">7.12.8.4</a>, <a href="#7.12.9.5">7.12.9.5</a>,                  environment functions, <a href="#7.22.4">7.22.4</a>, <a href="#K.3.6.2">K.3.6.2</a>
25873       <a href="#7.12.9.7">7.12.9.7</a>, <a href="#7.12.10.1">7.12.10.1</a>, <a href="#7.12.10.2">7.12.10.2</a>, <a href="#7.12.10.3">7.12.10.3</a>                environment list, <a href="#7.22.4.6">7.22.4.6</a>, <a href="#K.3.6.2.1">K.3.6.2.1</a>
25874 dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>                                      environmental considerations, <a href="#5.2">5.2</a>
25875 double _Complex type, <a href="#6.2.5">6.2.5</a>                                    environmental limits, <a href="#5.2.4">5.2.4</a>, <a href="#7.13.1.1">7.13.1.1</a>, <a href="#7.21.2">7.21.2</a>,
25876 double _Complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>,                            <a href="#7.21.3">7.21.3</a>, <a href="#7.21.4.4">7.21.4.4</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.22.2.1">7.22.2.1</a>, <a href="#7.22.4.2">7.22.4.2</a>,
25877       <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>                                               <a href="#7.22.4.3">7.22.4.3</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>
25878 double _Imaginary type, <a href="#G.2">G.2</a>                                    EOF macro, <a href="#7.4">7.4</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.1">7.21.5.1</a>, <a href="#7.21.5.2">7.21.5.2</a>,
25879 double type, <a href="#6.2.5">6.2.5</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.2">7.21.6.2</a>,                        <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.21.6.7">7.21.6.7</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.11">7.21.6.11</a>,
25880       <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.2">F.2</a>                                                  <a href="#7.21.6.14">7.21.6.14</a>, <a href="#7.21.7.1">7.21.7.1</a>, <a href="#7.21.7.3">7.21.7.3</a>, <a href="#7.21.7.4">7.21.7.4</a>,
25881 double type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.7">6.3.1.7</a>,                   <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.21.7.8">7.21.7.8</a>, <a href="#7.21.7.9">7.21.7.9</a>,
25882       <a href="#6.3.1.8">6.3.1.8</a>                                                        <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.2.4">7.28.2.4</a>,
25883 double-precision arithmetic, <a href="#5.1.2.3">5.1.2.3</a>                                 <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#7.28.2.12">7.28.2.12</a>,
25884 double-quote escape sequence (\"), <a href="#6.4.4.4">6.4.4.4</a>,                          <a href="#7.28.3.4">7.28.3.4</a>, <a href="#7.28.6.1.1">7.28.6.1.1</a>, <a href="#7.28.6.1.2">7.28.6.1.2</a>, <a href="#K.3.5.3.7">K.3.5.3.7</a>,
25885       <a href="#6.4.5">6.4.5</a>, <a href="#6.10.9">6.10.9</a>                                                  <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>,
25886 double_t type, <a href="#7.12">7.12</a>, <a href="#J.5.6">J.5.6</a>                                           <a href="#K.3.9.1.5">K.3.9.1.5</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>,
25887                                                                      <a href="#K.3.9.1.14">K.3.9.1.14</a>
25888 EDOM macro, <a href="#7.5">7.5</a>, <a href="#7.12.1">7.12.1</a>, see also domain error                 equal-sign punctuator (=), <a href="#6.7">6.7</a>, <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.9">6.7.9</a>
25889 effective type, <a href="#6.5">6.5</a>                                            equal-to operator, see equality operator
25890 EILSEQ macro, <a href="#7.5">7.5</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.27.1.1">7.27.1.1</a>, <a href="#7.27.1.2">7.27.1.2</a>,                 equality expressions, <a href="#6.5.9">6.5.9</a>
25891      <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>,                   equality operator (==), <a href="#6.5.9">6.5.9</a>
25892      <a href="#7.28.6.3.2">7.28.6.3.2</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>,           ERANGE macro, <a href="#7.5">7.5</a>, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.12.1">7.12.1</a>,
25893      see also encoding error                                         <a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>, see
25894 element type, <a href="#6.2.5">6.2.5</a>                                                  also range error, pole error
25895
25896 [<a name="#p660" href="p660">page 660</a>] (<a href="#Contents">Contents</a>)
25897
25898 erf functions, <a href="#7.12.8.1">7.12.8.1</a>, <a href="#F.10.5.1">F.10.5.1</a>                               exp type-generic macro, <a href="#7.24">7.24</a>
25899 erf type-generic macro, <a href="#7.24">7.24</a>                                    exp2 functions, <a href="#7.12.6.2">7.12.6.2</a>, <a href="#F.10.3.2">F.10.3.2</a>
25900 erfc functions, <a href="#7.12.8.2">7.12.8.2</a>, <a href="#F.10.5.2">F.10.5.2</a>                              exp2 type-generic macro, <a href="#7.24">7.24</a>
25901 erfc type-generic macro, <a href="#7.24">7.24</a>                                   explicit conversion, <a href="#6.3">6.3</a>
25902 errno macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.3.2">7.3.2</a>, <a href="#7.5">7.5</a>, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>,               expm1 functions, <a href="#7.12.6.3">7.12.6.3</a>, <a href="#F.10.3.3">F.10.3.3</a>
25903       <a href="#7.12.1">7.12.1</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.10.4">7.21.10.4</a>,            expm1 type-generic macro, <a href="#7.24">7.24</a>
25904       <a href="#7.22.1">7.22.1</a>, <a href="#7.22.1.3">7.22.1.3</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.23.6.2">7.23.6.2</a>, <a href="#7.27.1.1">7.27.1.1</a>,           exponent part, <a href="#6.4.4.2">6.4.4.2</a>
25905       <a href="#7.27.1.2">7.27.1.2</a>, <a href="#7.27.1.3">7.27.1.3</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.3.1">7.28.3.1</a>,                   exponential functions
25906       <a href="#7.28.3.3">7.28.3.3</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>, <a href="#7.28.6.3.2">7.28.6.3.2</a>,               complex, <a href="#7.3.7">7.3.7</a>, <a href="#G.6.3">G.6.3</a>
25907       <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#J.5.17">J.5.17</a>,                 real, <a href="#7.12.6">7.12.6</a>, <a href="#F.10.3">F.10.3</a>
25908       <a href="#K.3.1.3">K.3.1.3</a>, <a href="#K.3.7.4.2">K.3.7.4.2</a>                                        expression, <a href="#6.5">6.5</a>
25909 errno.h header, <a href="#7.5">7.5</a>, <a href="#7.30.3">7.30.3</a>, <a href="#K.3.2">K.3.2</a>                                assignment, <a href="#6.5.16">6.5.16</a>
25910 errno_t type, <a href="#K.3.2">K.3.2</a>, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.6">K.3.6</a>, <a href="#K.3.6.1.1">K.3.6.1.1</a>,                     cast, <a href="#6.5.4">6.5.4</a>
25911       <a href="#K.3.7">K.3.7</a>, <a href="#K.3.8">K.3.8</a>, <a href="#K.3.9">K.3.9</a>                                         constant, <a href="#6.6">6.6</a>
25912 error                                                             evaluation, <a href="#5.1.2.3">5.1.2.3</a>
25913    domain, see domain error                                       full, <a href="#6.8">6.8</a>
25914    encoding, see encoding error                                   order of evaluation, see order of evaluation
25915    pole, see pole error                                           parenthesized, <a href="#6.5.1">6.5.1</a>
25916    range, see range error                                         primary, <a href="#6.5.1">6.5.1</a>
25917 error conditions, <a href="#7.12.1">7.12.1</a>                                          unary, <a href="#6.5.3">6.5.3</a>
25918 error functions, <a href="#7.12.8">7.12.8</a>, <a href="#F.10.5">F.10.5</a>                                 expression statement, <a href="#6.8.3">6.8.3</a>
25919 error indicator, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.1">7.21.7.1</a>,                    extended alignment, <a href="#6.2.8">6.2.8</a>
25920       <a href="#7.21.7.3">7.21.7.3</a>, <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.21.7.7">7.21.7.7</a>,                   extended 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>
25921       <a href="#7.21.7.8">7.21.7.8</a>, <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.10.1">7.21.10.1</a>, <a href="#7.21.10.3">7.21.10.3</a>,                 extended characters, <a href="#5.2.1">5.2.1</a>
25922       <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>                                        extended integer types, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.4.4.1">6.4.4.1</a>,
25923 error preprocessing directive, <a href="#4">4</a>, <a href="#6.10.5">6.10.5</a>                             <a href="#7.20">7.20</a>
25924 error-handling functions, <a href="#7.21.10">7.21.10</a>, <a href="#7.23.6.2">7.23.6.2</a>,                    extended multibyte/wide character conversion
25925       <a href="#K.3.7.4.2">K.3.7.4.2</a>, <a href="#K.3.7.4.3">K.3.7.4.3</a>                                           utilities, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>
25926 escape character (\), <a href="#6.4.4.4">6.4.4.4</a>                                   extensible wide character case mapping functions,
25927 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>                      <a href="#7.29.3.2">7.29.3.2</a>
25928 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>                     extensible wide character classification functions,
25929 evaluation method, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#F.8.5">F.8.5</a>                             <a href="#7.29.2.2">7.29.2.2</a>
25930 evaluation of expression, <a href="#5.1.2.3">5.1.2.3</a>                               extern storage-class specifier, <a href="#6.2.2">6.2.2</a>, <a href="#6.7.1">6.7.1</a>
25931 evaluation order, see order of evaluation                       external definition, <a href="#6.9">6.9</a>
25932 exceptional condition, <a href="#6.5">6.5</a>                                      external identifiers, underscore, <a href="#7.1.3">7.1.3</a>
25933 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 linkage, <a href="#6.2.2">6.2.2</a>
25934       <a href="#6.8.6.4">6.8.6.4</a>                                                   external name, <a href="#6.4.2.1">6.4.2.1</a>
25935 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>              external object definitions, <a href="#6.9.2">6.9.2</a>
25936 exclusive OR operators
25937    bitwise (^), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>                                 fabs functions, <a href="#7.12.7.2">7.12.7.2</a>, <a href="#F.3">F.3</a>, <a href="#F.10.4.2">F.10.4.2</a>
25938    bitwise assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>                            fabs type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
25939 executable program, <a href="#5.1.1.1">5.1.1.1</a>                                     false macro, <a href="#7.18">7.18</a>
25940 execution character set, <a href="#5.2.1">5.2.1</a>                                  fclose function, <a href="#7.21.5.1">7.21.5.1</a>
25941 execution environment, <a href="#5">5</a>, <a href="#5.1.2">5.1.2</a>, see also                       fdim functions, <a href="#7.12.12.1">7.12.12.1</a>, <a href="#F.10.9.1">F.10.9.1</a>
25942       environmental limits                                      fdim type-generic macro, <a href="#7.24">7.24</a>
25943 execution sequence, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.8">6.8</a>                                FE_ALL_EXCEPT macro, <a href="#7.6">7.6</a>
25944 exit function, <a href="#5.1.2.2.3">5.1.2.2.3</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.22">7.22</a>, <a href="#7.22.4.4">7.22.4.4</a>,               FE_DFL_ENV macro, <a href="#7.6">7.6</a>
25945       <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>                                        FE_DIVBYZERO macro, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
25946 EXIT_FAILURE macro, <a href="#7.22">7.22</a>, <a href="#7.22.4.4">7.22.4.4</a>                              FE_DOWNWARD macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
25947 EXIT_SUCCESS macro, <a href="#7.22">7.22</a>, <a href="#7.22.4.4">7.22.4.4</a>                              FE_INEXACT macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
25948 exp functions, <a href="#7.12.6.1">7.12.6.1</a>, <a href="#F.10.3.1">F.10.3.1</a>                               FE_INVALID macro, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>
25949
25950 [<a name="#p661" href="p661">page 661</a>] (<a href="#Contents">Contents</a>)
25951
25952 FE_OVERFLOW macro, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                            float _Complex type, <a href="#6.2.5">6.2.5</a>
25953 FE_TONEAREST macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                 float _Complex type conversion, <a href="#6.3.1.6">6.3.1.6</a>,
25954 FE_TOWARDZERO macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                     <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>
25955 FE_UNDERFLOW macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                 float _Imaginary type, <a href="#G.2">G.2</a>
25956 FE_UPWARD macro, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                    float type, <a href="#6.2.5">6.2.5</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#F.2">F.2</a>
25957 feclearexcept function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.1">7.6.2.1</a>, <a href="#F.3">F.3</a>                  float type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.7">6.3.1.7</a>,
25958 fegetenv function, <a href="#7.6.4.1">7.6.4.1</a>, <a href="#7.6.4.3">7.6.4.3</a>, <a href="#7.6.4.4">7.6.4.4</a>, <a href="#F.3">F.3</a>                 <a href="#6.3.1.8">6.3.1.8</a>
25959 fegetexceptflag function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.2">7.6.2.2</a>, <a href="#F.3">F.3</a>                float.h header, <a href="#4">4</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.7">7.7</a>, <a href="#7.22.1.3">7.22.1.3</a>,
25960 fegetround function, <a href="#7.6">7.6</a>, <a href="#7.6.3.1">7.6.3.1</a>, <a href="#F.3">F.3</a>                            <a href="#7.28.4.1.1">7.28.4.1.1</a>
25961 feholdexcept function, <a href="#7.6.4.2">7.6.4.2</a>, <a href="#7.6.4.3">7.6.4.3</a>,                     float_t type, <a href="#7.12">7.12</a>, <a href="#J.5.6">J.5.6</a>
25962      <a href="#7.6.4.4">7.6.4.4</a>, <a href="#F.3">F.3</a>                                            floating constant, <a href="#6.4.4.2">6.4.4.2</a>
25963 fence, <a href="#5.1.2.4">5.1.2.4</a>                                               floating suffix, f or <a href="#F">F</a>, <a href="#6.4.4.2">6.4.4.2</a>
25964 fences, <a href="#7.17.4">7.17.4</a>                                               floating type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>, <a href="#6.3.1.7">6.3.1.7</a>,
25965 fenv.h header, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F">F</a>, <a href="#H">H</a>                <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>
25966 FENV_ACCESS pragma, <a href="#6.10.6">6.10.6</a>, <a href="#7.6.1">7.6.1</a>, <a href="#F.8">F.8</a>, <a href="#F.9">F.9</a>,                 floating types, <a href="#6.2.5">6.2.5</a>, <a href="#6.11.1">6.11.1</a>
25967      <a href="#F.10">F.10</a>                                                    floating-point accuracy, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.5">6.5</a>,
25968 fenv_t type, <a href="#7.6">7.6</a>                                                  <a href="#7.22.1.3">7.22.1.3</a>, <a href="#F.5">F.5</a>, see also contracted expression
25969 feof function, <a href="#7.21.10.2">7.21.10.2</a>                                     floating-point arithmetic functions, <a href="#7.12">7.12</a>, <a href="#F.10">F.10</a>
25970 feraiseexcept function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.3">7.6.2.3</a>, <a href="#F.3">F.3</a>                  floating-point classification functions, <a href="#7.12.3">7.12.3</a>
25971 ferror function, <a href="#7.21.10.3">7.21.10.3</a>                                   floating-point control mode, <a href="#7.6">7.6</a>, <a href="#F.8.6">F.8.6</a>
25972 fesetenv function, <a href="#7.6.4.3">7.6.4.3</a>, <a href="#F.3">F.3</a>                              floating-point environment, <a href="#7.6">7.6</a>, <a href="#F.8">F.8</a>, <a href="#F.8.6">F.8.6</a>
25973 fesetexceptflag function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.4">7.6.2.4</a>, <a href="#F.3">F.3</a>                floating-point exception, <a href="#7.6">7.6</a>, <a href="#7.6.2">7.6.2</a>, <a href="#F.10">F.10</a>
25974 fesetround function, <a href="#7.6">7.6</a>, <a href="#7.6.3.2">7.6.3.2</a>, <a href="#F.3">F.3</a>                       floating-point number, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.2.5">6.2.5</a>
25975 fetestexcept function, <a href="#7.6.2">7.6.2</a>, <a href="#7.6.2.5">7.6.2.5</a>, <a href="#F.3">F.3</a>                   floating-point rounding mode, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25976 feupdateenv function, <a href="#7.6.4.2">7.6.4.2</a>, <a href="#7.6.4.4">7.6.4.4</a>, <a href="#F.3">F.3</a>                  floating-point status flag, <a href="#7.6">7.6</a>, <a href="#F.8.6">F.8.6</a>
25977 fexcept_t type, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>                                     floor functions, <a href="#7.12.9.2">7.12.9.2</a>, <a href="#F.10.6.2">F.10.6.2</a>
25978 fflush function, <a href="#7.21.5.2">7.21.5.2</a>, <a href="#7.21.5.3">7.21.5.3</a>                          floor type-generic macro, <a href="#7.24">7.24</a>
25979 fgetc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.7.1">7.21.7.1</a>,                    FLT_DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25980      <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.8.1">7.21.8.1</a>                                      FLT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25981 fgetpos function, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.3">7.21.9.3</a>                 FLT_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25982 fgets function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.2">7.21.7.2</a>, <a href="#K.3.5.4.1">K.3.5.4.1</a>                  FLT_EVAL_METHOD macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.6">6.6</a>, <a href="#7.12">7.12</a>,
25983 fgetwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.28.3.1">7.28.3.1</a>,                        <a href="#F.10.11">F.10.11</a>
25984      <a href="#7.28.3.6">7.28.3.6</a>                                                FLT_HAS_SUBNORM macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25985 fgetws function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.2">7.28.3.2</a>                            FLT_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25986 field width, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>                               FLT_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25987 file, <a href="#7.21.3">7.21.3</a>                                                  FLT_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25988   access functions, <a href="#7.21.5">7.21.5</a>, <a href="#K.3.5.2">K.3.5.2</a>                          FLT_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25989   name, <a href="#7.21.3">7.21.3</a>                                               FLT_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25990   operations, <a href="#7.21.4">7.21.4</a>, <a href="#K.3.5.1">K.3.5.1</a>                                FLT_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25991   position indicator, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>,                FLT_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25992         <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.1">7.21.7.1</a>, <a href="#7.21.7.3">7.21.7.3</a>, <a href="#7.21.7.10">7.21.7.10</a>,             FLT_RADIX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,
25993         <a href="#7.21.8.1">7.21.8.1</a>, <a href="#7.21.8.2">7.21.8.2</a>, <a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.2">7.21.9.2</a>,                   <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.4.1.1">7.28.4.1.1</a>
25994         <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.21.9.4">7.21.9.4</a>, <a href="#7.21.9.5">7.21.9.5</a>, <a href="#7.28.3.1">7.28.3.1</a>,              FLT_ROUNDS macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#F.3">F.3</a>
25995         <a href="#7.28.3.3">7.28.3.3</a>, <a href="#7.28.3.10">7.28.3.10</a>                                  FLT_TRUE_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
25996   positioning functions, <a href="#7.21.9">7.21.9</a>                              fma functions, <a href="#7.12">7.12</a>, <a href="#7.12.13.1">7.12.13.1</a>, <a href="#F.10.10.1">F.10.10.1</a>
25997 file scope, <a href="#6.2.1">6.2.1</a>, <a href="#6.9">6.9</a>                                        fma type-generic macro, <a href="#7.24">7.24</a>
25998 FILE type, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                    fmax functions, <a href="#7.12.12.2">7.12.12.2</a>, <a href="#F.10.9.2">F.10.9.2</a>
25999 FILENAME_MAX macro, <a href="#7.21.1">7.21.1</a>                                   fmax type-generic macro, <a href="#7.24">7.24</a>
26000 flags, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>, see also floating-point             fmin functions, <a href="#7.12.12.3">7.12.12.3</a>, <a href="#F.10.9.3">F.10.9.3</a>
26001      status flag                                              fmin type-generic macro, <a href="#7.24">7.24</a>
26002 flexible array member, <a href="#6.7.2.1">6.7.2.1</a>                                fmod functions, <a href="#7.12.10.1">7.12.10.1</a>, <a href="#F.10.7.1">F.10.7.1</a>
26003
26004 [<a name="#p662" href="p662">page 662</a>] (<a href="#Contents">Contents</a>)
26005
26006 fmod type-generic macro, <a href="#7.24">7.24</a>                                 fscanf_s function, <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.5.3.4">K.3.5.3.4</a>,
26007 fopen function, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.5.4">7.21.5.4</a>, <a href="#K.3.5.2.1">K.3.5.2.1</a>                       <a href="#K.3.5.3.7">K.3.5.3.7</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>
26008 FOPEN_MAX macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.4.3">7.21.4.3</a>,                    fseek function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.10">7.21.7.10</a>,
26009      <a href="#K.3.5.1.1">K.3.5.1.1</a>                                                      <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.9.4">7.21.9.4</a>, <a href="#7.21.9.5">7.21.9.5</a>, <a href="#7.28.3.10">7.28.3.10</a>
26010 fopen_s function, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.2.1">K.3.5.2.1</a>,                       fsetpos function, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.10">7.21.7.10</a>,
26011      <a href="#K.3.5.2.2">K.3.5.2.2</a>                                                      <a href="#7.21.9.1">7.21.9.1</a>, <a href="#7.21.9.3">7.21.9.3</a>, <a href="#7.28.3.10">7.28.3.10</a>
26012 for statement, <a href="#6.8.5">6.8.5</a>, <a href="#6.8.5.3">6.8.5.3</a>                                 ftell function, <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.9.4">7.21.9.4</a>
26013 form-feed character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>                               full declarator, <a href="#6.7.6">6.7.6</a>
26014 form-feed escape sequence (\f), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,               full expression, <a href="#6.8">6.8</a>
26015      <a href="#7.4.1.10">7.4.1.10</a>                                                 fully buffered stream, <a href="#7.21.3">7.21.3</a>
26016 formal argument (deprecated), <a href="#3.16">3.16</a>                            function
26017 formal parameter, <a href="#3.16">3.16</a>                                           argument, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.9.1">6.9.1</a>
26018 formatted input/output functions, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.21.6">7.21.6</a>,              body, <a href="#6.9.1">6.9.1</a>
26019      <a href="#K.3.5.3">K.3.5.3</a>                                                     call, <a href="#6.5.2.2">6.5.2.2</a>
26020    wide character, <a href="#7.28.2">7.28.2</a>, <a href="#K.3.9.1">K.3.9.1</a>                                  library, <a href="#7.1.4">7.1.4</a>
26021 fortran keyword, <a href="#J.5.9">J.5.9</a>                                           declarator, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.11.6">6.11.6</a>
26022 forward reference, <a href="#3.11">3.11</a>                                          definition, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.9.1">6.9.1</a>, <a href="#6.11.7">6.11.7</a>
26023 FP_CONTRACT pragma, <a href="#6.5">6.5</a>, <a href="#6.10.6">6.10.6</a>, <a href="#7.12.2">7.12.2</a>, see                     designator, <a href="#6.3.2.1">6.3.2.1</a>
26024      also contracted expression                                  image, <a href="#5.2.3">5.2.3</a>
26025 FP_FAST_FMA macro, <a href="#7.12">7.12</a>                                          inline, <a href="#6.7.4">6.7.4</a>
26026 FP_FAST_FMAF macro, <a href="#7.12">7.12</a>                                         library, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7.1.4">7.1.4</a>
26027 FP_FAST_FMAL macro, <a href="#7.12">7.12</a>                                         name length, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
26028 FP_ILOGB0 macro, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>                                  no-return, <a href="#6.7.4">6.7.4</a>
26029 FP_ILOGBNAN macro, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>                                parameter, <a href="#5.1.2.2.1">5.1.2.2.1</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7">6.7</a>, <a href="#6.9.1">6.9.1</a>
26030 FP_INFINITE macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                     prototype, <a href="#5.1.2.2.1">5.1.2.2.1</a>, <a href="#6.2.1">6.2.1</a>, <a href="#6.2.7">6.2.7</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7">6.7</a>,
26031 FP_NAN macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                                <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.9.1">6.9.1</a>, <a href="#6.11.6">6.11.6</a>, <a href="#6.11.7">6.11.7</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.12">7.12</a>
26032 FP_NORMAL macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                       prototype scope, <a href="#6.2.1">6.2.1</a>, <a href="#6.7.6.2">6.7.6.2</a>
26033 FP_SUBNORMAL macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                    recursive call, <a href="#6.5.2.2">6.5.2.2</a>
26034 FP_ZERO macro, <a href="#7.12">7.12</a>, <a href="#F.3">F.3</a>                                         return, <a href="#6.8.6.4">6.8.6.4</a>, <a href="#F.6">F.6</a>
26035 fpclassify macro, <a href="#7.12.3.1">7.12.3.1</a>, <a href="#F.3">F.3</a>                                  scope, <a href="#6.2.1">6.2.1</a>
26036 fpos_t type, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>                                      type, <a href="#6.2.5">6.2.5</a>
26037 fprintf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.1">7.21.6.1</a>,                       type conversion, <a href="#6.3.2.1">6.3.2.1</a>
26038      <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.21.6.3">7.21.6.3</a>, <a href="#7.21.6.5">7.21.6.5</a>, <a href="#7.21.6.6">7.21.6.6</a>,                  function specifiers, <a href="#6.7.4">6.7.4</a>
26039      <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.3">F.3</a>, <a href="#K.3.5.3.1">K.3.5.3.1</a>                       function type, <a href="#6.2.5">6.2.5</a>
26040 fprintf_s function, <a href="#K.3.5.3.1">K.3.5.3.1</a>                                 function-call operator (( )), <a href="#6.5.2.2">6.5.2.2</a>
26041 fputc function, <a href="#5.2.2">5.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.7.3">7.21.7.3</a>,              function-like macro, <a href="#6.10.3">6.10.3</a>
26042      <a href="#7.21.7.7">7.21.7.7</a>, <a href="#7.21.8.2">7.21.8.2</a>                                       fundamental alignment, <a href="#6.2.8">6.2.8</a>
26043 fputs function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.4">7.21.7.4</a>                              future directions
26044 fputwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.28.3.3">7.28.3.3</a>,                       language, <a href="#6.11">6.11</a>
26045      <a href="#7.28.3.8">7.28.3.8</a>                                                    library, <a href="#7.30">7.30</a>
26046 fputws function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.4">7.28.3.4</a>                             fwide function, <a href="#7.21.2">7.21.2</a>, <a href="#7.28.3.5">7.28.3.5</a>
26047 fread function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.8.1">7.21.8.1</a>                              fwprintf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
26048 free function, <a href="#7.22.3.3">7.22.3.3</a>, <a href="#7.22.3.5">7.22.3.5</a>                                   <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.2.3">7.28.2.3</a>, <a href="#7.28.2.5">7.28.2.5</a>,
26049 freestanding execution environment, <a href="#4">4</a>, <a href="#5.1.2">5.1.2</a>,                       <a href="#7.28.2.11">7.28.2.11</a>, <a href="#K.3.9.1.1">K.3.9.1.1</a>
26050      <a href="#5.1.2.1">5.1.2.1</a>                                                  fwprintf_s function, <a href="#K.3.9.1.1">K.3.9.1.1</a>
26051 freopen function, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.5.4">7.21.5.4</a>                            fwrite function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.8.2">7.21.8.2</a>
26052 freopen_s function, <a href="#K.3.5.2.2">K.3.5.2.2</a>                                 fwscanf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.2">7.28.2.2</a>,
26053 frexp functions, <a href="#7.12.6.4">7.12.6.4</a>, <a href="#F.10.3.4">F.10.3.4</a>                                 <a href="#7.28.2.4">7.28.2.4</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.12">7.28.2.12</a>, <a href="#7.28.3.10">7.28.3.10</a>,
26054 frexp type-generic macro, <a href="#7.24">7.24</a>                                      <a href="#K.3.9.1.2">K.3.9.1.2</a>
26055 fscanf function, <a href="#7.8.1">7.8.1</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,                     fwscanf_s function, <a href="#K.3.9.1.2">K.3.9.1.2</a>, <a href="#K.3.9.1.5">K.3.9.1.5</a>,
26056      <a href="#7.21.6.4">7.21.6.4</a>, <a href="#7.21.6.7">7.21.6.7</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#F.3">F.3</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>                   <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>
26057
26058 [<a name="#p663" href="p663">page 663</a>] (<a href="#Contents">Contents</a>)
26059
26060 gamma functions, <a href="#7.12.8">7.12.8</a>, <a href="#F.10.5">F.10.5</a>                                name spaces, <a href="#6.2.3">6.2.3</a>
26061 general utilities, <a href="#7.22">7.22</a>, <a href="#K.3.6">K.3.6</a>                                 reserved, <a href="#6.4.1">6.4.1</a>, <a href="#7.1.3">7.1.3</a>, <a href="#K.3.1.2">K.3.1.2</a>
26062   wide string, <a href="#7.28.4">7.28.4</a>, <a href="#K.3.9.2">K.3.9.2</a>                                 scope, <a href="#6.2.1">6.2.1</a>
26063 general wide string utilities, <a href="#7.28.4">7.28.4</a>, <a href="#K.3.9.2">K.3.9.2</a>                 type, <a href="#6.2.5">6.2.5</a>
26064 generic parameters, <a href="#7.24">7.24</a>                                    identifier list, <a href="#6.7.6">6.7.6</a>
26065 generic selection, <a href="#6.5.1.1">6.5.1.1</a>                                  identifier nondigit, <a href="#6.4.2.1">6.4.2.1</a>
26066 getc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.5">7.21.7.5</a>, <a href="#7.21.7.6">7.21.7.6</a>                   IEC 559, <a href="#F.1">F.1</a>
26067 getchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.6">7.21.7.6</a>                          IEC 60559, <a href="#2">2</a>, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.3.3">7.3.3</a>,
26068 getenv function, <a href="#7.22.4.6">7.22.4.6</a>                                         <a href="#7.6">7.6</a>, <a href="#7.6.4.2">7.6.4.2</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.10.2">7.12.10.2</a>, <a href="#7.12.14">7.12.14</a>, <a href="#F">F</a>, <a href="#G">G</a>,
26069 getenv_s function, <a href="#K.3.6.2.1">K.3.6.2.1</a>                                      <a href="#H.1">H.1</a>
26070 gets function, <a href="#K.3.5.4.1">K.3.5.4.1</a>                                    IEEE 754, <a href="#F.1">F.1</a>
26071 gets_s function, <a href="#K.3.5.4.1">K.3.5.4.1</a>                                  IEEE 854, <a href="#F.1">F.1</a>
26072 getwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.6">7.28.3.6</a>, <a href="#7.28.3.7">7.28.3.7</a>                  IEEE floating-point arithmetic standard, see
26073 getwchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.7">7.28.3.7</a>                               IEC 60559, ANSI/IEEE 754,
26074 gmtime function, <a href="#7.26.3.3">7.26.3.3</a>                                         ANSI/IEEE 854
26075 gmtime_s function, <a href="#K.3.8.2.3">K.3.8.2.3</a>                                if preprocessing directive, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>,
26076 goto statement, <a href="#6.2.1">6.2.1</a>, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.6.1">6.8.6.1</a>                             <a href="#6.10.1">6.10.1</a>, <a href="#7.1.4">7.1.4</a>
26077 graphic characters, <a href="#5.2.1">5.2.1</a>                                   if statement, <a href="#6.8.4.1">6.8.4.1</a>
26078 greater-than operator (&gt;), <a href="#6.5.8">6.5.8</a>                            ifdef preprocessing directive, <a href="#6.10.1">6.10.1</a>
26079 greater-than-or-equal-to operator (&gt;=), <a href="#6.5.8">6.5.8</a>               ifndef preprocessing directive, <a href="#6.10.1">6.10.1</a>
26080                                                             ignore_handler_s function, <a href="#K.3.6.1.3">K.3.6.1.3</a>
26081 happens before, <a href="#5.1.2.4">5.1.2.4</a>                                     ilogb functions, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>, <a href="#F.10.3.5">F.10.3.5</a>
26082 header, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7.1.2">7.1.2</a>, see also standard headers           ilogb type-generic macro, <a href="#7.24">7.24</a>
26083 header names, <a href="#6.4">6.4</a>, <a href="#6.4.7">6.4.7</a>, <a href="#6.10.2">6.10.2</a>                            imaginary macro, <a href="#7.3.1">7.3.1</a>, <a href="#G.6">G.6</a>
26084 hexadecimal constant, <a href="#6.4.4.1">6.4.4.1</a>                               imaginary numbers, <a href="#G">G</a>
26085 hexadecimal digit, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                imaginary type domain, <a href="#G.2">G.2</a>
26086 hexadecimal prefix, <a href="#6.4.4.1">6.4.4.1</a>                                  imaginary types, <a href="#G">G</a>
26087 hexadecimal-character escape sequence                       imaxabs function, <a href="#7.8.2.1">7.8.2.1</a>
26088      (\x hexadecimal digits), <a href="#6.4.4.4">6.4.4.4</a>                       imaxdiv function, <a href="#7.8">7.8</a>, <a href="#7.8.2.2">7.8.2.2</a>
26089 high-order bit, <a href="#3.6">3.6</a>                                         imaxdiv_t type, <a href="#7.8">7.8</a>
26090 horizontal-tab character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>                        implementation, <a href="#3.12">3.12</a>
26091 horizontal-tab escape sequence (\r), <a href="#7.29.2.1.3">7.29.2.1.3</a>             implementation limit, <a href="#3.13">3.13</a>, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.4.2.1">6.4.2.1</a>,
26092 horizontal-tab escape sequence (\t), <a href="#5.2.2">5.2.2</a>,                       <a href="#6.7.6">6.7.6</a>, <a href="#6.8.4.2">6.8.4.2</a>, <a href="#E">E</a>, see also environmental
26093      <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.4.1.3">7.4.1.3</a>, <a href="#7.4.1.10">7.4.1.10</a>                                   limits
26094 hosted execution environment, <a href="#4">4</a>, <a href="#5.1.2">5.1.2</a>, <a href="#5.1.2.2">5.1.2.2</a>             implementation-defined behavior, <a href="#3.4.1">3.4.1</a>, <a href="#4">4</a>, <a href="#J.3">J.3</a>
26095 HUGE_VAL macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,                     implementation-defined value, <a href="#3.19.1">3.19.1</a>
26096      <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.10">F.10</a>                                       implicit conversion, <a href="#6.3">6.3</a>
26097 HUGE_VALF macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,                    implicit initialization, <a href="#6.7.9">6.7.9</a>
26098      <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.10">F.10</a>                                       include preprocessing directive, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.2">6.10.2</a>
26099 HUGE_VALL macro, <a href="#7.12">7.12</a>, <a href="#7.12.1">7.12.1</a>, <a href="#7.22.1.3">7.22.1.3</a>,                    inclusive OR operators
26100      <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#F.10">F.10</a>                                          bitwise (|), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>
26101 hyperbolic functions                                           bitwise assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>
26102   complex, <a href="#7.3.6">7.3.6</a>, <a href="#G.6.2">G.6.2</a>                                     incomplete type, <a href="#6.2.5">6.2.5</a>
26103   real, <a href="#7.12.5">7.12.5</a>, <a href="#F.10.2">F.10.2</a>                                      increment operators, see arithmetic operators,
26104 hypot functions, <a href="#7.12.7.3">7.12.7.3</a>, <a href="#F.10.4.3">F.10.4.3</a>                               increment and decrement
26105 hypot type-generic macro, <a href="#7.24">7.24</a>                              indeterminate value, <a href="#3.19.2">3.19.2</a>
26106                                                             indeterminately sequenced, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5.2.2">6.5.2.2</a>,
26107 I macro, <a href="#7.3.1">7.3.1</a>, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#G.6">G.6</a>                                      <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.16.2">6.5.16.2</a>, see also sequenced before,
26108 identifier, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.5.1">6.5.1</a>                                         unsequenced
26109    linkage, see linkage                                     indirection operator (*), <a href="#6.5.2.1">6.5.2.1</a>, <a href="#6.5.3.2">6.5.3.2</a>
26110    maximum length, <a href="#6.4.2.1">6.4.2.1</a>                                  inequality operator (!=), <a href="#6.5.9">6.5.9</a>
26111
26112 [<a name="#p664" href="p664">page 664</a>] (<a href="#Contents">Contents</a>)
26113
26114 infinitary, <a href="#7.12.1">7.12.1</a>                                                    extended, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#7.20">7.20</a>
26115 INFINITY macro, <a href="#7.3.9.5">7.3.9.5</a>, <a href="#7.12">7.12</a>, <a href="#F.2.1">F.2.1</a>                              inter-thread happens before, <a href="#5.1.2.4">5.1.2.4</a>
26116 initial position, <a href="#5.2.2">5.2.2</a>                                           interactive device, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.3">7.21.5.3</a>
26117 initial shift state, <a href="#5.2.1.2">5.2.1.2</a>                                      internal linkage, <a href="#6.2.2">6.2.2</a>
26118 initialization, <a href="#5.1.2">5.1.2</a>, <a href="#6.2.4">6.2.4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.5">6.5.2.5</a>, <a href="#6.7.9">6.7.9</a>,            internal name, <a href="#6.4.2.1">6.4.2.1</a>
26119       <a href="#F.8.5">F.8.5</a>                                                       interrupt, <a href="#5.2.3">5.2.3</a>
26120    in blocks, <a href="#6.8">6.8</a>                                                 INTMAX_C macro, <a href="#7.20.4.2">7.20.4.2</a>
26121 initializer, <a href="#6.7.9">6.7.9</a>                                                INTMAX_MAX macro, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.20.2.5">7.20.2.5</a>
26122    permitted form, <a href="#6.6">6.6</a>                                            INTMAX_MIN macro, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.20.2.5">7.20.2.5</a>
26123    string literal, <a href="#6.3.2.1">6.3.2.1</a>                                        intmax_t type, <a href="#7.20.1.5">7.20.1.5</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
26124 inline, <a href="#6.7.4">6.7.4</a>                                                           <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
26125 inner scope, <a href="#6.2.1">6.2.1</a>                                                INTN_C macros, <a href="#7.20.4.1">7.20.4.1</a>
26126 input failure, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.10">7.28.2.10</a>,                     INTN_MAX macros, <a href="#7.20.2.1">7.20.2.1</a>
26127       <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.5.3.4">K.3.5.3.4</a>, <a href="#K.3.5.3.7">K.3.5.3.7</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>,                 INTN_MIN macros, <a href="#7.20.2.1">7.20.2.1</a>
26128       <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>, <a href="#K.3.9.1.5">K.3.9.1.5</a>,               intN_t types, <a href="#7.20.1.1">7.20.1.1</a>
26129       <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>               INTPTR_MAX macro, <a href="#7.20.2.4">7.20.2.4</a>
26130 input/output functions                                            INTPTR_MIN macro, <a href="#7.20.2.4">7.20.2.4</a>
26131    character, <a href="#7.21.7">7.21.7</a>, <a href="#K.3.5.4">K.3.5.4</a>                                     intptr_t type, <a href="#7.20.1.4">7.20.1.4</a>
26132    direct, <a href="#7.21.8">7.21.8</a>                                                 inttypes.h header, <a href="#7.8">7.8</a>, <a href="#7.30.4">7.30.4</a>
26133    formatted, <a href="#7.21.6">7.21.6</a>, <a href="#K.3.5.3">K.3.5.3</a>                                     isalnum function, <a href="#7.4.1.1">7.4.1.1</a>, <a href="#7.4.1.9">7.4.1.9</a>, <a href="#7.4.1.10">7.4.1.10</a>
26134       wide character, <a href="#7.28.2">7.28.2</a>, <a href="#K.3.9.1">K.3.9.1</a>                             isalpha function, <a href="#7.4.1.1">7.4.1.1</a>, <a href="#7.4.1.2">7.4.1.2</a>
26135    wide character, <a href="#7.28.3">7.28.3</a>                                         isblank function, <a href="#7.4.1.3">7.4.1.3</a>
26136       formatted, <a href="#7.28.2">7.28.2</a>, <a href="#K.3.9.1">K.3.9.1</a>                                  iscntrl function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.4">7.4.1.4</a>, <a href="#7.4.1.7">7.4.1.7</a>,
26137 input/output header, <a href="#7.21">7.21</a>, <a href="#K.3.5">K.3.5</a>                                        <a href="#7.4.1.11">7.4.1.11</a>
26138 input/output, device, <a href="#5.1.2.3">5.1.2.3</a>                                     isdigit function, <a href="#7.4.1.1">7.4.1.1</a>, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.5">7.4.1.5</a>,
26139 int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#6.7.2">6.7.2</a>                       <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.11.1.1">7.11.1.1</a>
26140 int type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>,                   isfinite macro, <a href="#7.12.3.2">7.12.3.2</a>, <a href="#F.3">F.3</a>
26141       <a href="#6.3.1.8">6.3.1.8</a>                                                     isgraph function, <a href="#7.4.1.6">7.4.1.6</a>
26142 INT_FASTN_MAX macros, <a href="#7.20.2.3">7.20.2.3</a>                                    isgreater macro, <a href="#7.12.14.1">7.12.14.1</a>, <a href="#F.3">F.3</a>
26143 INT_FASTN_MIN macros, <a href="#7.20.2.3">7.20.2.3</a>                                    isgreaterequal macro, <a href="#7.12.14.2">7.12.14.2</a>, <a href="#F.3">F.3</a>
26144 int_fastN_t types, <a href="#7.20.1.3">7.20.1.3</a>                                       isinf macro, <a href="#7.12.3.3">7.12.3.3</a>
26145 INT_LEASTN_MAX macros, <a href="#7.20.2.2">7.20.2.2</a>                                   isless macro, <a href="#7.12.14.3">7.12.14.3</a>, <a href="#F.3">F.3</a>
26146 INT_LEASTN_MIN macros, <a href="#7.20.2.2">7.20.2.2</a>                                   islessequal macro, <a href="#7.12.14.4">7.12.14.4</a>, <a href="#F.3">F.3</a>
26147 int_leastN_t types, <a href="#7.20.1.2">7.20.1.2</a>                                      islessgreater macro, <a href="#7.12.14.5">7.12.14.5</a>, <a href="#F.3">F.3</a>
26148 INT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.12">7.12</a>, <a href="#7.12.6.5">7.12.6.5</a>                          islower function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.2.1">7.4.2.1</a>,
26149 INT_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.12">7.12</a>                                          <a href="#7.4.2.2">7.4.2.2</a>
26150 integer arithmetic functions, <a href="#7.8.2.1">7.8.2.1</a>, <a href="#7.8.2.2">7.8.2.2</a>,                   isnan macro, <a href="#7.12.3.4">7.12.3.4</a>, <a href="#F.3">F.3</a>
26151       <a href="#7.22.6">7.22.6</a>                                                      isnormal macro, <a href="#7.12.3.5">7.12.3.5</a>
26152 integer character constant, <a href="#6.4.4.4">6.4.4.4</a>                               ISO 31-11, <a href="#2">2</a>, <a href="#3">3</a>
26153 integer constant, <a href="#6.4.4.1">6.4.4.1</a>                                         ISO 4217, <a href="#2">2</a>, <a href="#7.11.2.1">7.11.2.1</a>
26154 integer constant expression, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.6">6.6</a>, <a href="#6.7.2.1">6.7.2.1</a>,               ISO 8601, <a href="#2">2</a>, <a href="#7.26.3.5">7.26.3.5</a>
26155       <a href="#6.7.2.2">6.7.2.2</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.7.10">6.7.10</a>, <a href="#6.8.4.2">6.8.4.2</a>, <a href="#6.10.1">6.10.1</a>,           ISO/IEC 10646, <a href="#2">2</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.4.3">6.4.3</a>, <a href="#6.10.8.2">6.10.8.2</a>
26156       <a href="#7.1.4">7.1.4</a>                                                       ISO/IEC 10976-1, <a href="#H.1">H.1</a>
26157 integer conversion rank, <a href="#6.3.1.1">6.3.1.1</a>                                  ISO/IEC 2382-1, <a href="#2">2</a>, <a href="#3">3</a>
26158 integer promotions, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.3.1.1">6.3.1.1</a>,                  ISO/IEC 646, <a href="#2">2</a>, <a href="#5.2.1.1">5.2.1.1</a>
26159       <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.5.3.3">6.5.3.3</a>, <a href="#6.5.7">6.5.7</a>, <a href="#6.8.4.2">6.8.4.2</a>, <a href="#7.20.2">7.20.2</a>, <a href="#7.20.3">7.20.3</a>,           ISO/IEC 9945-2, <a href="#7.11">7.11</a>
26160       <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>                                          ISO/IEC TR 10176, <a href="#D">D</a>
26161 integer suffix, <a href="#6.4.4.1">6.4.4.1</a>                                            iso646.h header, <a href="#4">4</a>, <a href="#7.9">7.9</a>
26162 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>,               isprint function, <a href="#5.2.2">5.2.2</a>, <a href="#7.4.1.8">7.4.1.8</a>
26163       <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>                                                    ispunct function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.7">7.4.1.7</a>, <a href="#7.4.1.9">7.4.1.9</a>,
26164 integer types, <a href="#6.2.5">6.2.5</a>, <a href="#7.20">7.20</a>                                              <a href="#7.4.1.11">7.4.1.11</a>
26165
26166 [<a name="#p665" href="p665">page 665</a>] (<a href="#Contents">Contents</a>)
26167
26168 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>,                    Latin alphabet, <a href="#5.2.1">5.2.1</a>, <a href="#6.4.2.1">6.4.2.1</a>
26169       <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.3">7.22.1.3</a>,                   LC_ALL macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
26170       <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.2.2">7.28.2.2</a>                                        LC_COLLATE macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.23.4.3">7.23.4.3</a>,
26171 isunordered macro, <a href="#7.12.14.6">7.12.14.6</a>, <a href="#F.3">F.3</a>                                     <a href="#7.28.4.4.2">7.28.4.4.2</a>
26172 isupper function, <a href="#7.4.1.2">7.4.1.2</a>, <a href="#7.4.1.11">7.4.1.11</a>, <a href="#7.4.2.1">7.4.2.1</a>,                   LC_CTYPE macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.22">7.22</a>, <a href="#7.22.7">7.22.7</a>,
26173       <a href="#7.4.2.2">7.4.2.2</a>                                                         <a href="#7.22.8">7.22.8</a>, <a href="#7.28.6">7.28.6</a>, <a href="#7.29.1">7.29.1</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>,
26174 iswalnum function, <a href="#7.29.2.1.1">7.29.2.1.1</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>,                            <a href="#7.29.3.2.1">7.29.3.2.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>, <a href="#K.3.6.4">K.3.6.4</a>, <a href="#K.3.6.5">K.3.6.5</a>
26175       <a href="#7.29.2.1.10">7.29.2.1.10</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   LC_MONETARY macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
26176 iswalpha function, <a href="#7.29.2.1.1">7.29.2.1.1</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>,                      LC_NUMERIC macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>
26177       <a href="#7.29.2.2.1">7.29.2.2.1</a>                                                LC_TIME macro, <a href="#7.11">7.11</a>, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.26.3.5">7.26.3.5</a>
26178 iswblank function, <a href="#7.29.2.1.3">7.29.2.1.3</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                       lconv structure type, <a href="#7.11">7.11</a>
26179 iswcntrl function, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.4">7.29.2.1.4</a>,                      LDBL_DECIMAL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26180       <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                       LDBL_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26181 iswctype function, <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>                       LDBL_EPSILON macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26182 iswdigit function, <a href="#7.29.2.1.1">7.29.2.1.1</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>,                      LDBL_HAS_SUBNORM macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26183       <a href="#7.29.2.1.5">7.29.2.1.5</a>, <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>           LDBL_MANT_DIG macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26184 iswgraph function, <a href="#7.29.2.1">7.29.2.1</a>, <a href="#7.29.2.1.6">7.29.2.1.6</a>,                        LDBL_MAX macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26185       <a href="#7.29.2.1.10">7.29.2.1.10</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   LDBL_MAX_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26186 iswlower function, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.7">7.29.2.1.7</a>,                      LDBL_MAX_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26187       <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.3.1.1">7.29.3.1.1</a>, <a href="#7.29.3.1.2">7.29.3.1.2</a>                        LDBL_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26188 iswprint function, <a href="#7.29.2.1.6">7.29.2.1.6</a>, <a href="#7.29.2.1.8">7.29.2.1.8</a>,                      LDBL_MIN_10_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26189       <a href="#7.29.2.2.1">7.29.2.2.1</a>                                                LDBL_MIN_EXP macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26190 iswpunct function, <a href="#7.29.2.1">7.29.2.1</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>,                        LDBL_TRUE_MIN macro, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26191       <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>, <a href="#7.29.2.1.10">7.29.2.1.10</a>,                      ldexp functions, <a href="#7.12.6.6">7.12.6.6</a>, <a href="#F.10.3.6">F.10.3.6</a>
26192       <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   ldexp type-generic macro, <a href="#7.24">7.24</a>
26193 iswspace function, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,                          ldiv function, <a href="#7.22.6.2">7.22.6.2</a>
26194       <a href="#7.28.4.1.1">7.28.4.1.1</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.6">7.29.2.1.6</a>,           ldiv_t type, <a href="#7.22">7.22</a>
26195       <a href="#7.29.2.1.7">7.29.2.1.7</a>, <a href="#7.29.2.1.9">7.29.2.1.9</a>, <a href="#7.29.2.1.10">7.29.2.1.10</a>,                      leading underscore in identifiers, <a href="#7.1.3">7.1.3</a>
26196       <a href="#7.29.2.1.11">7.29.2.1.11</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                                   left-shift assignment operator (&lt;&lt;=), <a href="#6.5.16.2">6.5.16.2</a>
26197 iswupper function, <a href="#7.29.2.1.2">7.29.2.1.2</a>, <a href="#7.29.2.1.11">7.29.2.1.11</a>,                     left-shift operator (&lt;&lt;), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
26198       <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.3.1.1">7.29.3.1.1</a>, <a href="#7.29.3.1.2">7.29.3.1.2</a>                        length
26199 iswxdigit function, <a href="#7.29.2.1.12">7.29.2.1.12</a>, <a href="#7.29.2.2.1">7.29.2.2.1</a>                        external name, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
26200 isxdigit function, <a href="#7.4.1.12">7.4.1.12</a>, <a href="#7.11.1.1">7.11.1.1</a>                              function name, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
26201 italic type convention, <a href="#3">3</a>, <a href="#6.1">6.1</a>                                     identifier, <a href="#6.4.2.1">6.4.2.1</a>
26202 iteration statements, <a href="#6.8.5">6.8.5</a>                                        internal name, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>
26203                                                                 length function, <a href="#7.22.7.1">7.22.7.1</a>, <a href="#7.23.6.3">7.23.6.3</a>, <a href="#7.28.4.6.1">7.28.4.6.1</a>,
26204 jmp_buf type, <a href="#7.13">7.13</a>                                                    <a href="#7.28.6.3.1">7.28.6.3.1</a>, <a href="#K.3.7.4.4">K.3.7.4.4</a>, <a href="#K.3.9.2.4.1">K.3.9.2.4.1</a>
26205 jump statements, <a href="#6.8.6">6.8.6</a>                                          length modifier, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>,
26206                                                                       <a href="#7.28.2.2">7.28.2.2</a>
26207 keywords, <a href="#6.4.1">6.4.1</a>, <a href="#G.2">G.2</a>, <a href="#J.5.9">J.5.9</a>, <a href="#J.5.10">J.5.10</a>                             less-than operator (&lt;), <a href="#6.5.8">6.5.8</a>
26208 kill_dependency macro, <a href="#5.1.2.4">5.1.2.4</a>, <a href="#7.17.3.1">7.17.3.1</a>                        less-than-or-equal-to operator (&lt;=), <a href="#6.5.8">6.5.8</a>
26209 known constant size, <a href="#6.2.5">6.2.5</a>                                      letter, <a href="#5.2.1">5.2.1</a>, <a href="#7.4">7.4</a>
26210                                                                 lexical elements, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>
26211 L_tmpnam macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.4.4">7.21.4.4</a>                                lgamma functions, <a href="#7.12.8.3">7.12.8.3</a>, <a href="#F.10.5.3">F.10.5.3</a>
26212 L_tmpnam_s macro, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                              lgamma type-generic macro, <a href="#7.24">7.24</a>
26213 label name, <a href="#6.2.1">6.2.1</a>, <a href="#6.2.3">6.2.3</a>                                        library, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#7">7</a>, <a href="#K.3">K.3</a>
26214 labeled statement, <a href="#6.8.1">6.8.1</a>                                           future directions, <a href="#7.30">7.30</a>
26215 labs function, <a href="#7.22.6.1">7.22.6.1</a>                                            summary, <a href="#B">B</a>
26216 language, <a href="#6">6</a>                                                        terms, <a href="#7.1.1">7.1.1</a>
26217    future directions, <a href="#6.11">6.11</a>                                         use of functions, <a href="#7.1.4">7.1.4</a>
26218    syntax summary, <a href="#A">A</a>                                            lifetime, <a href="#6.2.4">6.2.4</a>
26219
26220 [<a name="#p666" href="p666">page 666</a>] (<a href="#Contents">Contents</a>)
26221
26222 limits                                                     long double _Complex type conversion,
26223    environmental, see environmental limits                      <a href="#6.3.1.6">6.3.1.6</a>, <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>
26224    implementation, see implementation limits               long double _Imaginary type, <a href="#G.2">G.2</a>
26225    numerical, see numerical limits                         long double suffix, l or <a href="#L">L</a>, <a href="#6.4.4.2">6.4.4.2</a>
26226    translation, see translation limits                     long double type, <a href="#6.2.5">6.2.5</a>, <a href="#6.4.4.2">6.4.4.2</a>, <a href="#6.7.2">6.7.2</a>,
26227 limits.h header, <a href="#4">4</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.2.5">6.2.5</a>, <a href="#7.10">7.10</a>                      <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.2">F.2</a>
26228 line buffered stream, <a href="#7.21.3">7.21.3</a>                               long double type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>,
26229 line number, <a href="#6.10.4">6.10.4</a>, <a href="#6.10.8.1">6.10.8.1</a>                                   <a href="#6.3.1.7">6.3.1.7</a>, <a href="#6.3.1.8">6.3.1.8</a>
26230 line preprocessing directive, <a href="#6.10.4">6.10.4</a>                       long int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.1">7.21.6.1</a>,
26231 lines, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#7.21.2">7.21.2</a>                                          <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
26232    preprocessing directive, <a href="#6.10">6.10</a>                           long int type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>,
26233 linkage, <a href="#6.2.2">6.2.2</a>, <a href="#6.7">6.7</a>, <a href="#6.7.4">6.7.4</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.9">6.9</a>, <a href="#6.9.2">6.9.2</a>,                <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
26234       <a href="#6.11.2">6.11.2</a>                                               long integer suffix, l or <a href="#L">L</a>, <a href="#6.4.4.1">6.4.4.1</a>
26235 llabs function, <a href="#7.22.6.1">7.22.6.1</a>                                   long long int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>,
26236 lldiv function, <a href="#7.22.6.2">7.22.6.2</a>                                        <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
26237 lldiv_t type, <a href="#7.22">7.22</a>                                         long long int type conversion, <a href="#6.3.1.1">6.3.1.1</a>,
26238 LLONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                           <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
26239       <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           long long integer suffix, ll or LL, <a href="#6.4.4.1">6.4.4.1</a>
26240 LLONG_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                      LONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>
26241       <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           LONG_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>
26242 llrint functions, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#F.3">F.3</a>, <a href="#F.10.6.5">F.10.6.5</a>                  longjmp function, <a href="#7.13.1.1">7.13.1.1</a>, <a href="#7.13.2.1">7.13.2.1</a>, <a href="#7.22.4.4">7.22.4.4</a>,
26243 llrint type-generic macro, <a href="#7.24">7.24</a>                                 <a href="#7.22.4.7">7.22.4.7</a>
26244 llround functions, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.10.6.7">F.10.6.7</a>                      loop body, <a href="#6.8.5">6.8.5</a>
26245 llround type-generic macro, <a href="#7.24">7.24</a>                           low-order bit, <a href="#3.6">3.6</a>
26246 local time, <a href="#7.26.1">7.26.1</a>                                         lowercase letter, <a href="#5.2.1">5.2.1</a>
26247 locale, <a href="#3.4.2">3.4.2</a>                                              lrint functions, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#F.3">F.3</a>, <a href="#F.10.6.5">F.10.6.5</a>
26248 locale-specific behavior, <a href="#3.4.2">3.4.2</a>, <a href="#J.4">J.4</a>                        lrint type-generic macro, <a href="#7.24">7.24</a>
26249 locale.h header, <a href="#7.11">7.11</a>, <a href="#7.30.5">7.30.5</a>                              lround functions, <a href="#7.12.9.7">7.12.9.7</a>, <a href="#F.10.6.7">F.10.6.7</a>
26250 localeconv function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>                    lround type-generic macro, <a href="#7.24">7.24</a>
26251 localization, <a href="#7.11">7.11</a>                                         lvalue, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.1">6.5.1</a>, <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.3.1">6.5.3.1</a>, <a href="#6.5.16">6.5.16</a>
26252 localtime function, <a href="#7.26.3.4">7.26.3.4</a>
26253 localtime_s function, <a href="#K.3.8.2.4">K.3.8.2.4</a>                            macro argument substitution, <a href="#6.10.3.1">6.10.3.1</a>
26254 log functions, <a href="#7.12.6.7">7.12.6.7</a>, <a href="#F.10.3.7">F.10.3.7</a>                          macro definition
26255 log type-generic macro, <a href="#7.24">7.24</a>                                 library function, <a href="#7.1.4">7.1.4</a>
26256 log10 functions, <a href="#7.12.6.8">7.12.6.8</a>, <a href="#F.10.3.8">F.10.3.8</a>                        macro invocation, <a href="#6.10.3">6.10.3</a>
26257 log10 type-generic macro, <a href="#7.24">7.24</a>                             macro name, <a href="#6.10.3">6.10.3</a>
26258 log1p functions, <a href="#7.12.6.9">7.12.6.9</a>, <a href="#F.10.3.9">F.10.3.9</a>                          length, <a href="#5.2.4.1">5.2.4.1</a>
26259 log1p type-generic macro, <a href="#7.24">7.24</a>                               predefined, <a href="#6.10.8">6.10.8</a>, <a href="#6.11.9">6.11.9</a>
26260 log2 functions, <a href="#7.12.6.10">7.12.6.10</a>, <a href="#F.10.3.10">F.10.3.10</a>                         redefinition, <a href="#6.10.3">6.10.3</a>
26261 log2 type-generic macro, <a href="#7.24">7.24</a>                                scope, <a href="#6.10.3.5">6.10.3.5</a>
26262 logarithmic functions                                      macro parameter, <a href="#6.10.3">6.10.3</a>
26263    complex, <a href="#7.3.7">7.3.7</a>, <a href="#G.6.3">G.6.3</a>                                   macro preprocessor, <a href="#6.10">6.10</a>
26264    real, <a href="#7.12.6">7.12.6</a>, <a href="#F.10.3">F.10.3</a>                                    macro replacement, <a href="#6.10.3">6.10.3</a>
26265 logb functions, <a href="#7.12.6.11">7.12.6.11</a>, <a href="#F.3">F.3</a>, <a href="#F.10.3.11">F.10.3.11</a>                  magnitude, complex, <a href="#7.3.8.1">7.3.8.1</a>
26266 logb type-generic macro, <a href="#7.24">7.24</a>                              main function, <a href="#5.1.2.2.1">5.1.2.2.1</a>, <a href="#5.1.2.2.3">5.1.2.2.3</a>, <a href="#6.7.3.1">6.7.3.1</a>, <a href="#6.7.4">6.7.4</a>,
26267 logical operators                                               <a href="#7.21.3">7.21.3</a>
26268    AND (&amp;&amp;), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.13">6.5.13</a>                               malloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.4">7.22.3.4</a>, <a href="#7.22.3.5">7.22.3.5</a>
26269    negation (!), <a href="#6.5.3.3">6.5.3.3</a>                                   manipulation functions
26270    OR (||), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.14">6.5.14</a>                                  complex, <a href="#7.3.9">7.3.9</a>
26271 logical source lines, <a href="#5.1.1.2">5.1.1.2</a>                                real, <a href="#7.12.11">7.12.11</a>, <a href="#F.10.8">F.10.8</a>
26272 long double _Complex type, <a href="#6.2.5">6.2.5</a>                           matching failure, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.10">7.28.2.10</a>,
26273
26274 [<a name="#p667" href="p667">page 667</a>] (<a href="#Contents">Contents</a>)
26275
26276      <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>                     modification order, <a href="#5.1.2.4">5.1.2.4</a>
26277 math.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#7.12">7.12</a>, <a href="#7.24">7.24</a>, <a href="#F">F</a>,              modulus functions, <a href="#7.12.6.12">7.12.6.12</a>
26278      <a href="#F.10">F.10</a>, <a href="#J.5.17">J.5.17</a>                                          modulus, complex, <a href="#7.3.8.1">7.3.8.1</a>
26279 MATH_ERREXCEPT macro, <a href="#7.12">7.12</a>, <a href="#F.10">F.10</a>                           mtx_destroy function, <a href="#7.25.4.1">7.25.4.1</a>
26280 math_errhandling macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.12">7.12</a>, <a href="#F.10">F.10</a>                  mtx_init function, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.4.2">7.25.4.2</a>
26281 MATH_ERRNO macro, <a href="#7.12">7.12</a>                                     mtx_lock function, <a href="#7.25.4.3">7.25.4.3</a>
26282 max_align_t type, <a href="#7.19">7.19</a>                                     mtx_t type, <a href="#7.25.1">7.25.1</a>
26283 maximum functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.10.9">F.10.9</a>                         mtx_timedlock function, <a href="#7.25.4.4">7.25.4.4</a>
26284 MB_CUR_MAX macro, <a href="#7.1.1">7.1.1</a>, <a href="#7.22">7.22</a>, <a href="#7.22.7.2">7.22.7.2</a>,                   mtx_trylock function, <a href="#7.25.4.5">7.25.4.5</a>
26285      <a href="#7.22.7.3">7.22.7.3</a>, <a href="#7.27.1.2">7.27.1.2</a>, <a href="#7.27.1.4">7.27.1.4</a>, <a href="#7.28.6.3.3">7.28.6.3.3</a>,             mtx_unlock function, <a href="#7.25.4.3">7.25.4.3</a>, <a href="#7.25.4.4">7.25.4.4</a>,
26286      <a href="#K.3.6.4.1">K.3.6.4.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>                                     <a href="#7.25.4.5">7.25.4.5</a>, <a href="#7.25.4.6">7.25.4.6</a>
26287 MB_LEN_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.1.1">7.1.1</a>, <a href="#7.22">7.22</a>                   multibyte character, <a href="#3.7.2">3.7.2</a>, <a href="#5.2.1.2">5.2.1.2</a>, <a href="#6.4.4.4">6.4.4.4</a>
26288 mblen function, <a href="#7.22.7.1">7.22.7.1</a>, <a href="#7.28.6.3">7.28.6.3</a>                         multibyte conversion functions
26289 mbrlen function, <a href="#7.28.6.3.1">7.28.6.3.1</a>                                  wide character, <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>
26290 mbrtoc16 function, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27.1.1">7.27.1.1</a>                     extended, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>
26291 mbrtoc32 function, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27.1.3">7.27.1.3</a>                     restartable, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>
26292 mbrtowc function, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,                wide string, <a href="#7.22.8">7.22.8</a>, <a href="#K.3.6.5">K.3.6.5</a>
26293      <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.6.3.1">7.28.6.3.1</a>, <a href="#7.28.6.3.2">7.28.6.3.2</a>,                restartable, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>
26294      <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#K.3.6.5.1">K.3.6.5.1</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>                    multibyte string, <a href="#7.1.1">7.1.1</a>
26295 mbsinit function, <a href="#7.28.6.2.1">7.28.6.2.1</a>                               multibyte/wide character conversion functions,
26296 mbsrtowcs function, <a href="#7.28.6.4.1">7.28.6.4.1</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>                       <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>
26297 mbsrtowcs_s function, <a href="#K.3.9.3.2">K.3.9.3.2</a>, <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>                 extended, <a href="#7.28.6">7.28.6</a>, <a href="#K.3.9.3">K.3.9.3</a>
26298 mbstate_t type, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.1">7.21.6.1</a>,                    restartable, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>
26299      <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.27">7.27</a>, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.1">7.28.2.1</a>,             multibyte/wide string conversion functions,
26300      <a href="#7.28.2.2">7.28.2.2</a>, <a href="#7.28.6">7.28.6</a>, <a href="#7.28.6.2.1">7.28.6.2.1</a>, <a href="#7.28.6.3">7.28.6.3</a>,                    <a href="#7.22.8">7.22.8</a>, <a href="#K.3.6.5">K.3.6.5</a>
26301      <a href="#7.28.6.3.1">7.28.6.3.1</a>, <a href="#7.28.6.4">7.28.6.4</a>                                    restartable, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>
26302 mbstowcs function, <a href="#6.4.5">6.4.5</a>, <a href="#7.22.8.1">7.22.8.1</a>, <a href="#7.28.6.4">7.28.6.4</a>               multidimensional array, <a href="#6.5.2.1">6.5.2.1</a>
26303 mbstowcs_s function, <a href="#K.3.6.5.1">K.3.6.5.1</a>                             multiplication assignment operator (*=), <a href="#6.5.16.2">6.5.16.2</a>
26304 mbtowc function, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#7.22.7.1">7.22.7.1</a>, <a href="#7.22.7.2">7.22.7.2</a>,              multiplication operator (*), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#F.3">F.3</a>,
26305      <a href="#7.22.8.1">7.22.8.1</a>, <a href="#7.28.6.3">7.28.6.3</a>                                         <a href="#G.5.1">G.5.1</a>
26306 member access operators (. and -&gt;), <a href="#6.5.2.3">6.5.2.3</a>                multiplicative expressions, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
26307 member alignment, <a href="#6.7.2.1">6.7.2.1</a>
26308 memchr function, <a href="#7.23.5.1">7.23.5.1</a>                                  n-char sequence, <a href="#7.22.1.3">7.22.1.3</a>
26309 memcmp function, <a href="#7.23.4">7.23.4</a>, <a href="#7.23.4.1">7.23.4.1</a>                          n-wchar sequence, <a href="#7.28.4.1.1">7.28.4.1.1</a>
26310 memcpy function, <a href="#7.23.2.1">7.23.2.1</a>                                  name
26311 memcpy_s function, <a href="#K.3.7.1.1">K.3.7.1.1</a>                                 external, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>, <a href="#6.11.3">6.11.3</a>
26312 memmove function, <a href="#7.23.2.2">7.23.2.2</a>                                   file, <a href="#7.21.3">7.21.3</a>
26313 memmove_s function, <a href="#K.3.7.1.2">K.3.7.1.2</a>                                internal, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.2.1">6.4.2.1</a>
26314 memory location, <a href="#3.14">3.14</a>                                        label, <a href="#6.2.3">6.2.3</a>
26315 memory management functions, <a href="#7.22.3">7.22.3</a>                          structure/union member, <a href="#6.2.3">6.2.3</a>
26316 memory_order type, <a href="#7.17.1">7.17.1</a>, <a href="#7.17.3">7.17.3</a>                          name spaces, <a href="#6.2.3">6.2.3</a>
26317 memset function, <a href="#7.23.6.1">7.23.6.1</a>, <a href="#K.3.7.4.1">K.3.7.4.1</a>                       named label, <a href="#6.8.1">6.8.1</a>
26318 memset_s function, <a href="#K.3.7.4.1">K.3.7.4.1</a>                               NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26319 minimum functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.10.9">F.10.9</a>                         nan functions, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#F.2.1">F.2.1</a>, <a href="#F.10.8.2">F.10.8.2</a>
26320 minus operator, unary, <a href="#6.5.3.3">6.5.3.3</a>                             NAN macro, <a href="#7.12">7.12</a>, <a href="#F.2.1">F.2.1</a>
26321 miscellaneous functions                                    NDEBUG macro, <a href="#7.2">7.2</a>
26322   string, <a href="#7.23.6">7.23.6</a>, <a href="#K.3.7.4">K.3.7.4</a>                                  nearbyint functions, <a href="#7.12.9.3">7.12.9.3</a>, <a href="#7.12.9.4">7.12.9.4</a>, <a href="#F.3">F.3</a>,
26323   wide string, <a href="#7.28.4.6">7.28.4.6</a>, <a href="#K.3.9.2.4">K.3.9.2.4</a>                              <a href="#F.10.6.3">F.10.6.3</a>
26324 mktime function, <a href="#7.26.2.3">7.26.2.3</a>                                  nearbyint type-generic macro, <a href="#7.24">7.24</a>
26325 modf functions, <a href="#7.12.6.12">7.12.6.12</a>, <a href="#F.10.3.12">F.10.3.12</a>                       nearest integer functions, <a href="#7.12.9">7.12.9</a>, <a href="#F.10.6">F.10.6</a>
26326 modifiable lvalue, <a href="#6.3.2.1">6.3.2.1</a>                                  negation operator (!), <a href="#6.5.3.3">6.5.3.3</a>
26327
26328 [<a name="#p668" href="p668">page 668</a>] (<a href="#Contents">Contents</a>)
26329
26330 negative zero, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.12.11.1">7.12.11.1</a>                               operator, <a href="#6.4.6">6.4.6</a>
26331 new-line character, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>, <a href="#6.10">6.10</a>, <a href="#6.10.4">6.10.4</a>           operators, <a href="#6.5">6.5</a>
26332 new-line escape sequence (\n), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,                     additive, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>
26333      <a href="#7.4.1.10">7.4.1.10</a>                                                      alignof, <a href="#6.5.3.4">6.5.3.4</a>
26334 nextafter functions, <a href="#7.12.11.3">7.12.11.3</a>, <a href="#7.12.11.4">7.12.11.4</a>, <a href="#F.3">F.3</a>,                    assignment, <a href="#6.5.16">6.5.16</a>
26335      <a href="#F.10.8.3">F.10.8.3</a>                                                      associativity, <a href="#6.5">6.5</a>
26336 nextafter type-generic macro, <a href="#7.24">7.24</a>                                 equality, <a href="#6.5.9">6.5.9</a>
26337 nexttoward functions, <a href="#7.12.11.4">7.12.11.4</a>, <a href="#F.3">F.3</a>, <a href="#F.10.8.4">F.10.8.4</a>                     multiplicative, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>, <a href="#G.5.1">G.5.1</a>
26338 nexttoward type-generic macro, <a href="#7.24">7.24</a>                                postfix, <a href="#6.5.2">6.5.2</a>
26339 no linkage, <a href="#6.2.2">6.2.2</a>                                                  precedence, <a href="#6.5">6.5</a>
26340 no-return function, <a href="#6.7.4">6.7.4</a>                                          preprocessing, <a href="#6.10.1">6.10.1</a>, <a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.3.3">6.10.3.3</a>, <a href="#6.10.9">6.10.9</a>
26341 non-stop floating-point control mode, <a href="#7.6.4.2">7.6.4.2</a>                       relational, <a href="#6.5.8">6.5.8</a>
26342 nongraphic characters, <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>                              shift, <a href="#6.5.7">6.5.7</a>
26343 nonlocal jumps header, <a href="#7.13">7.13</a>                                        sizeof, <a href="#6.5.3.4">6.5.3.4</a>
26344 norm, complex, <a href="#7.3.8.1">7.3.8.1</a>                                             unary, <a href="#6.5.3">6.5.3</a>
26345 normalized broken-down time, <a href="#K.3.8.1">K.3.8.1</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>                    unary arithmetic, <a href="#6.5.3.3">6.5.3.3</a>
26346 not macro, <a href="#7.9">7.9</a>                                                  optional features, see conditional features
26347 not-equal-to operator, see inequality operator                  or macro, <a href="#7.9">7.9</a>
26348 not_eq macro, <a href="#7.9">7.9</a>                                               OR operators
26349 null character (\0), <a href="#5.2.1">5.2.1</a>, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>                         bitwise exclusive (^), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.11">6.5.11</a>
26350   padding of binary stream, <a href="#7.21.2">7.21.2</a>                                 bitwise exclusive assignment (^=), <a href="#6.5.16.2">6.5.16.2</a>
26351 NULL macro, <a href="#7.11">7.11</a>, <a href="#7.19">7.19</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.22">7.22</a>, <a href="#7.23.1">7.23.1</a>,                      bitwise inclusive (|), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.12">6.5.12</a>
26352      <a href="#7.26.1">7.26.1</a>, <a href="#7.28.1">7.28.1</a>                                                bitwise inclusive assignment (|=), <a href="#6.5.16.2">6.5.16.2</a>
26353 null pointer, <a href="#6.3.2.3">6.3.2.3</a>                                              logical (||), <a href="#5.1.2.4">5.1.2.4</a>, <a href="#6.5.14">6.5.14</a>
26354 null pointer constant, <a href="#6.3.2.3">6.3.2.3</a>                                  or_eq macro, <a href="#7.9">7.9</a>
26355 null preprocessing directive, <a href="#6.10.7">6.10.7</a>                            order of allocated storage, <a href="#7.22.3">7.22.3</a>
26356 null statement, <a href="#6.8.3">6.8.3</a>                                           order of evaluation, <a href="#6.5">6.5</a>, <a href="#6.5.16">6.5.16</a>, <a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.3.3">6.10.3.3</a>,
26357 null wide character, <a href="#7.1.1">7.1.1</a>                                            see also sequence points
26358 number classification macros, <a href="#7.12">7.12</a>, <a href="#7.12.3.1">7.12.3.1</a>                     ordinary identifier name space, <a href="#6.2.3">6.2.3</a>
26359 numeric conversion functions, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1">7.22.1</a>                   orientation of stream, <a href="#7.21.2">7.21.2</a>, <a href="#7.28.3.5">7.28.3.5</a>
26360   wide string, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1">7.28.4.1</a>                                out-of-bounds store, <a href="#L.2.1">L.2.1</a>
26361 numerical limits, <a href="#5.2.4.2">5.2.4.2</a>                                       outer scope, <a href="#6.2.1">6.2.1</a>
26362                                                                 over-aligned, <a href="#6.2.8">6.2.8</a>
26363 object, <a href="#3.15">3.15</a>
26364 object representation, <a href="#6.2.6.1">6.2.6.1</a>                                  padding
26365 object type, <a href="#6.2.5">6.2.5</a>                                                binary stream, <a href="#7.21.2">7.21.2</a>
26366 object-like macro, <a href="#6.10.3">6.10.3</a>                                         bits, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.20.1.1">7.20.1.1</a>
26367 observable behavior, <a href="#5.1.2.3">5.1.2.3</a>                                      structure/union, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.7.2.1">6.7.2.1</a>
26368 obsolescence, <a href="#6.11">6.11</a>, <a href="#7.30">7.30</a>                                        parameter, <a href="#3.16">3.16</a>
26369 octal constant, <a href="#6.4.4.1">6.4.4.1</a>                                           array, <a href="#6.9.1">6.9.1</a>
26370 octal digit, <a href="#6.4.4.1">6.4.4.1</a>, <a href="#6.4.4.4">6.4.4.4</a>                                     ellipsis, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.10.3">6.10.3</a>
26371 octal-character escape sequence (\octal digits),                  function, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.7">6.7</a>, <a href="#6.9.1">6.9.1</a>
26372      <a href="#6.4.4.4">6.4.4.4</a>                                                      macro, <a href="#6.10.3">6.10.3</a>
26373 offsetof macro, <a href="#7.19">7.19</a>                                              main function, <a href="#5.1.2.2.1">5.1.2.2.1</a>
26374 on-off switch, <a href="#6.10.6">6.10.6</a>                                             program, <a href="#5.1.2.2.1">5.1.2.2.1</a>
26375 once_flag type, <a href="#7.25.1">7.25.1</a>                                          parameter type list, <a href="#6.7.6.3">6.7.6.3</a>
26376 ONCE_FLAG_INIT macro, <a href="#7.25.1">7.25.1</a>                                    parentheses punctuator (( )), <a href="#6.7.6.3">6.7.6.3</a>, <a href="#6.8.4">6.8.4</a>, <a href="#6.8.5">6.8.5</a>
26377 ones' complement, <a href="#6.2.6.2">6.2.6.2</a>                                       parenthesized expression, <a href="#6.5.1">6.5.1</a>
26378 operand, <a href="#6.4.6">6.4.6</a>, <a href="#6.5">6.5</a>                                             parse state, <a href="#7.21.2">7.21.2</a>
26379 operating system, <a href="#5.1.2.1">5.1.2.1</a>, <a href="#7.22.4.8">7.22.4.8</a>                             perform a trap, <a href="#3.19.5">3.19.5</a>
26380 operations on files, <a href="#7.21.4">7.21.4</a>, <a href="#K.3.5.1">K.3.5.1</a>                             permitted form of initializer, <a href="#6.6">6.6</a>
26381
26382 [<a name="#p669" href="p669">page 669</a>] (<a href="#Contents">Contents</a>)
26383
26384 perror function, <a href="#7.21.10.4">7.21.10.4</a>                                    PRIcLEASTN macros, <a href="#7.8.1">7.8.1</a>
26385 phase angle, complex, <a href="#7.3.9.1">7.3.9.1</a>                                 PRIcMAX macros, <a href="#7.8.1">7.8.1</a>
26386 physical source lines, <a href="#5.1.1.2">5.1.1.2</a>                                PRIcN macros, <a href="#7.8.1">7.8.1</a>
26387 placemarker, <a href="#6.10.3.3">6.10.3.3</a>                                         PRIcPTR macros, <a href="#7.8.1">7.8.1</a>
26388 plus operator, unary, <a href="#6.5.3.3">6.5.3.3</a>                                 primary expression, <a href="#6.5.1">6.5.1</a>
26389 pointer arithmetic, <a href="#6.5.6">6.5.6</a>                                     printf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.3">7.21.6.3</a>, <a href="#7.21.6.10">7.21.6.10</a>,
26390 pointer comparison, <a href="#6.5.8">6.5.8</a>                                           <a href="#K.3.5.3.3">K.3.5.3.3</a>
26391 pointer declarator, <a href="#6.7.6.1">6.7.6.1</a>                                   printf_s function, <a href="#K.3.5.3.3">K.3.5.3.3</a>
26392 pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                                printing character, <a href="#5.2.2">5.2.2</a>, <a href="#7.4">7.4</a>, <a href="#7.4.1.8">7.4.1.8</a>
26393 pointer to function, <a href="#6.5.2.2">6.5.2.2</a>                                  printing wide character, <a href="#7.29.2">7.29.2</a>
26394 pointer type, <a href="#6.2.5">6.2.5</a>                                           program diagnostics, <a href="#7.2.1">7.2.1</a>
26395 pointer type conversion, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>                     program execution, <a href="#5.1.2.2.2">5.1.2.2.2</a>, <a href="#5.1.2.3">5.1.2.3</a>
26396 pointer, null, <a href="#6.3.2.3">6.3.2.3</a>                                        program file, <a href="#5.1.1.1">5.1.1.1</a>
26397 pole error, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.5.3">7.12.5.3</a>, <a href="#7.12.6.7">7.12.6.7</a>, <a href="#7.12.6.8">7.12.6.8</a>,             program image, <a href="#5.1.1.2">5.1.1.2</a>
26398      <a href="#7.12.6.9">7.12.6.9</a>, <a href="#7.12.6.10">7.12.6.10</a>, <a href="#7.12.6.11">7.12.6.11</a>, <a href="#7.12.7.4">7.12.7.4</a>,                program name (argv[0]), <a href="#5.1.2.2.1">5.1.2.2.1</a>
26399      <a href="#7.12.8.3">7.12.8.3</a>, <a href="#7.12.8.4">7.12.8.4</a>                                       program parameters, <a href="#5.1.2.2.1">5.1.2.2.1</a>
26400 portability, <a href="#4">4</a>, <a href="#J">J</a>                                             program startup, <a href="#5.1.2">5.1.2</a>, <a href="#5.1.2.1">5.1.2.1</a>, <a href="#5.1.2.2.1">5.1.2.2.1</a>
26401 position indicator, file, see file position indicator           program structure, <a href="#5.1.1.1">5.1.1.1</a>
26402 positive difference, <a href="#7.12.12.1">7.12.12.1</a>                                program termination, <a href="#5.1.2">5.1.2</a>, <a href="#5.1.2.1">5.1.2.1</a>, <a href="#5.1.2.2.3">5.1.2.2.3</a>,
26403 positive difference functions, <a href="#7.12.12">7.12.12</a>, <a href="#F.10.9">F.10.9</a>                      <a href="#5.1.2.3">5.1.2.3</a>
26404 postfix decrement operator (--), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>              program, conforming, <a href="#4">4</a>
26405 postfix expressions, <a href="#6.5.2">6.5.2</a>                                     program, strictly conforming, <a href="#4">4</a>
26406 postfix increment operator (++), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.4">6.5.2.4</a>              promotions
26407 pow functions, <a href="#7.12.7.4">7.12.7.4</a>, <a href="#F.10.4.4">F.10.4.4</a>                                default argument, <a href="#6.5.2.2">6.5.2.2</a>
26408 pow type-generic macro, <a href="#7.24">7.24</a>                                     integer, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.3.1.1">6.3.1.1</a>
26409 power functions                                               prototype, see function prototype
26410   complex, <a href="#7.3.8">7.3.8</a>, <a href="#G.6.4">G.6.4</a>                                       pseudo-random sequence functions, <a href="#7.22.2">7.22.2</a>
26411   real, <a href="#7.12.7">7.12.7</a>, <a href="#F.10.4">F.10.4</a>                                        PTRDIFF_MAX macro, <a href="#7.20.3">7.20.3</a>
26412 pp-number, <a href="#6.4.8">6.4.8</a>                                              PTRDIFF_MIN macro, <a href="#7.20.3">7.20.3</a>
26413 pragma operator, <a href="#6.10.9">6.10.9</a>                                       ptrdiff_t type, <a href="#7.17.1">7.17.1</a>, <a href="#7.19">7.19</a>, <a href="#7.20.3">7.20.3</a>, <a href="#7.21.6.1">7.21.6.1</a>,
26414 pragma preprocessing directive, <a href="#6.10.6">6.10.6</a>, <a href="#6.11.8">6.11.8</a>                      <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
26415 precedence of operators, <a href="#6.5">6.5</a>                                  punctuators, <a href="#6.4.6">6.4.6</a>
26416 precedence of syntax rules, <a href="#5.1.1.2">5.1.1.2</a>                           putc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.7">7.21.7.7</a>, <a href="#7.21.7.8">7.21.7.8</a>
26417 precision, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.2.1">7.28.2.1</a>               putchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.8">7.21.7.8</a>
26418   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>                puts function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.9">7.21.7.9</a>
26419 predefined macro names, <a href="#6.10.8">6.10.8</a>, <a href="#6.11.9">6.11.9</a>                         putwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.8">7.28.3.8</a>, <a href="#7.28.3.9">7.28.3.9</a>
26420 prefix decrement operator (--), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3.1">6.5.3.1</a>               putwchar function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.9">7.28.3.9</a>
26421 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>
26422 preprocessing concatenation, <a href="#6.10.3.3">6.10.3.3</a>                         qsort function, <a href="#7.22.5">7.22.5</a>, <a href="#7.22.5.2">7.22.5.2</a>
26423 preprocessing directives, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10">6.10</a>                       qsort_s function, <a href="#K.3.6.3">K.3.6.3</a>, <a href="#K.3.6.3.2">K.3.6.3.2</a>
26424 preprocessing file, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#6.10">6.10</a>                              qualified types, <a href="#6.2.5">6.2.5</a>
26425 preprocessing numbers, <a href="#6.4">6.4</a>, <a href="#6.4.8">6.4.8</a>                             qualified version of type, <a href="#6.2.5">6.2.5</a>
26426 preprocessing operators                                       question-mark escape sequence (\?), <a href="#6.4.4.4">6.4.4.4</a>
26427   #, <a href="#6.10.3.2">6.10.3.2</a>                                                 quick_exit function, <a href="#7.22.4.3">7.22.4.3</a>, <a href="#7.22.4.4">7.22.4.4</a>,
26428   ##, <a href="#6.10.3.3">6.10.3.3</a>                                                     <a href="#7.22.4.7">7.22.4.7</a>
26429   _Pragma, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.10.9">6.10.9</a>                                    quiet NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26430   defined, <a href="#6.10.1">6.10.1</a>
26431 preprocessing tokens, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, <a href="#6.10">6.10</a>                      raise function, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.14.2.1">7.14.2.1</a>, <a href="#7.22.4.1">7.22.4.1</a>
26432 preprocessing translation unit, <a href="#5.1.1.1">5.1.1.1</a>                       rand function, <a href="#7.22">7.22</a>, <a href="#7.22.2.1">7.22.2.1</a>, <a href="#7.22.2.2">7.22.2.2</a>
26433 preprocessor, <a href="#6.10">6.10</a>                                            RAND_MAX macro, <a href="#7.22">7.22</a>, <a href="#7.22.2.1">7.22.2.1</a>
26434 PRIcFASTN macros, <a href="#7.8.1">7.8.1</a>                                       range
26435
26436 [<a name="#p670" href="p670">page 670</a>] (<a href="#Contents">Contents</a>)
26437
26438    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>              rewind function, <a href="#7.21.5.3">7.21.5.3</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.5">7.21.9.5</a>,
26439 range error, <a href="#7.12.1">7.12.1</a>, <a href="#7.12.5.4">7.12.5.4</a>, <a href="#7.12.5.5">7.12.5.5</a>, <a href="#7.12.6.1">7.12.6.1</a>,                <a href="#7.28.3.10">7.28.3.10</a>
26440       <a href="#7.12.6.2">7.12.6.2</a>, <a href="#7.12.6.3">7.12.6.3</a>, <a href="#7.12.6.5">7.12.6.5</a>, <a href="#7.12.6.6">7.12.6.6</a>,                right-shift assignment operator (&gt;&gt;=), <a href="#6.5.16.2">6.5.16.2</a>
26441       <a href="#7.12.6.13">7.12.6.13</a>, <a href="#7.12.7.3">7.12.7.3</a>, <a href="#7.12.7.4">7.12.7.4</a>, <a href="#7.12.8.2">7.12.8.2</a>,               right-shift operator (&gt;&gt;), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.7">6.5.7</a>
26442       <a href="#7.12.8.3">7.12.8.3</a>, <a href="#7.12.8.4">7.12.8.4</a>, <a href="#7.12.9.5">7.12.9.5</a>, <a href="#7.12.9.7">7.12.9.7</a>,                rint functions, <a href="#7.12.9.4">7.12.9.4</a>, <a href="#F.3">F.3</a>, <a href="#F.10.6.4">F.10.6.4</a>
26443       <a href="#7.12.11.3">7.12.11.3</a>, <a href="#7.12.12.1">7.12.12.1</a>, <a href="#7.12.13.1">7.12.13.1</a>                        rint type-generic macro, <a href="#7.24">7.24</a>
26444 rank, see integer conversion rank                            round functions, <a href="#7.12.9.6">7.12.9.6</a>, <a href="#F.10.6.6">F.10.6.6</a>
26445 read-modify-write operations, <a href="#5.1.2.4">5.1.2.4</a>                        round type-generic macro, <a href="#7.24">7.24</a>
26446 real floating type conversion, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.5">6.3.1.5</a>,              rounding mode, floating point, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26447       <a href="#6.3.1.7">6.3.1.7</a>, <a href="#F.3">F.3</a>, <a href="#F.4">F.4</a>                                      RSIZE_MAX macro, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>,
26448 real floating types, <a href="#6.2.5">6.2.5</a>                                         <a href="#K.3.5.3.5">K.3.5.3.5</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>, <a href="#K.3.5.3.12">K.3.5.3.12</a>, <a href="#K.3.5.3.13">K.3.5.3.13</a>,
26449 real type domain, <a href="#6.2.5">6.2.5</a>                                           <a href="#K.3.5.4.1">K.3.5.4.1</a>, <a href="#K.3.6.2.1">K.3.6.2.1</a>, <a href="#K.3.6.3.1">K.3.6.3.1</a>, <a href="#K.3.6.3.2">K.3.6.3.2</a>,
26450 real types, <a href="#6.2.5">6.2.5</a>                                                 <a href="#K.3.6.4.1">K.3.6.4.1</a>, <a href="#K.3.6.5.1">K.3.6.5.1</a>, <a href="#K.3.6.5.2">K.3.6.5.2</a>, <a href="#K.3.7.1.1">K.3.7.1.1</a>,
26451 real-floating, <a href="#7.12.3">7.12.3</a>                                              <a href="#K.3.7.1.2">K.3.7.1.2</a>, <a href="#K.3.7.1.3">K.3.7.1.3</a>, <a href="#K.3.7.1.4">K.3.7.1.4</a>, <a href="#K.3.7.2.1">K.3.7.2.1</a>,
26452 realloc function, <a href="#7.22.3">7.22.3</a>, <a href="#7.22.3.5">7.22.3.5</a>                                <a href="#K.3.7.2.2">K.3.7.2.2</a>, <a href="#K.3.7.3.1">K.3.7.3.1</a>, <a href="#K.3.7.4.1">K.3.7.4.1</a>, <a href="#K.3.7.4.2">K.3.7.4.2</a>,
26453 recommended practice, <a href="#3.17">3.17</a>                                        <a href="#K.3.8.2.1">K.3.8.2.1</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>, <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>,
26454 recursion, <a href="#6.5.2.2">6.5.2.2</a>                                                <a href="#K.3.9.1.8">K.3.9.1.8</a>, <a href="#K.3.9.1.9">K.3.9.1.9</a>, <a href="#K.3.9.2.1.1">K.3.9.2.1.1</a>, <a href="#K.3.9.2.1.2">K.3.9.2.1.2</a>,
26455 recursive function call, <a href="#6.5.2.2">6.5.2.2</a>                                  <a href="#K.3.9.2.1.3">K.3.9.2.1.3</a>, <a href="#K.3.9.2.1.4">K.3.9.2.1.4</a>, <a href="#K.3.9.2.2.1">K.3.9.2.2.1</a>,
26456 redefinition of macro, <a href="#6.10.3">6.10.3</a>                                      <a href="#K.3.9.2.2.2">K.3.9.2.2.2</a>, <a href="#K.3.9.2.3.1">K.3.9.2.3.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>,
26457 reentrancy, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.3">5.2.3</a>                                        <a href="#K.3.9.3.2.1">K.3.9.3.2.1</a>, <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
26458    library functions, <a href="#7.1.4">7.1.4</a>                                  rsize_t type, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>,
26459 referenced type, <a href="#6.2.5">6.2.5</a>                                            <a href="#K.3.6">K.3.6</a>, <a href="#K.3.7">K.3.7</a>, <a href="#K.3.8">K.3.8</a>, <a href="#K.3.9">K.3.9</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
26460 register storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.9">6.9</a>                  runtime-constraint, <a href="#3.18">3.18</a>
26461 relational expressions, <a href="#6.5.8">6.5.8</a>                                Runtime-constraint handling functions, <a href="#K.3.6.1">K.3.6.1</a>
26462 relaxed atomic operations, <a href="#5.1.2.4">5.1.2.4</a>                           rvalue, <a href="#6.3.2.1">6.3.2.1</a>
26463 release fence, <a href="#7.17.4">7.17.4</a>
26464 release operation, <a href="#5.1.2.4">5.1.2.4</a>                                   same scope, <a href="#6.2.1">6.2.1</a>
26465 release sequence, <a href="#5.1.2.4">5.1.2.4</a>                                    save calling environment function, <a href="#7.13.1">7.13.1</a>
26466 reliability of data, interrupted, <a href="#5.1.2.3">5.1.2.3</a>                    scalar types, <a href="#6.2.5">6.2.5</a>
26467 remainder assignment operator (%=), <a href="#6.5.16.2">6.5.16.2</a>                 scalbln function, <a href="#7.12.6.13">7.12.6.13</a>, <a href="#F.3">F.3</a>, <a href="#F.10.3.13">F.10.3.13</a>
26468 remainder functions, <a href="#7.12.10">7.12.10</a>, <a href="#F.10.7">F.10.7</a>                         scalbln type-generic macro, <a href="#7.24">7.24</a>
26469 remainder functions, <a href="#7.12.10.2">7.12.10.2</a>, <a href="#7.12.10.3">7.12.10.3</a>, <a href="#F.3">F.3</a>,              scalbn function, <a href="#7.12.6.13">7.12.6.13</a>, <a href="#F.3">F.3</a>, <a href="#F.10.3.13">F.10.3.13</a>
26470       <a href="#F.10.7.2">F.10.7.2</a>                                               scalbn type-generic macro, <a href="#7.24">7.24</a>
26471 remainder operator (%), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.5">6.5.5</a>                       scanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.4">7.21.6.4</a>, <a href="#7.21.6.11">7.21.6.11</a>
26472 remainder type-generic macro, <a href="#7.24">7.24</a>                           scanf_s function, <a href="#K.3.5.3.4">K.3.5.3.4</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>
26473 remove function, <a href="#7.21.4.1">7.21.4.1</a>, <a href="#7.21.4.4">7.21.4.4</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>               scanlist, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>
26474 remquo functions, <a href="#7.12.10.3">7.12.10.3</a>, <a href="#F.3">F.3</a>, <a href="#F.10.7.3">F.10.7.3</a>                   scanset, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>
26475 remquo type-generic macro, <a href="#7.24">7.24</a>                              SCHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
26476 rename function, <a href="#7.21.4.2">7.21.4.2</a>                                    SCHAR_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
26477 representations of types, <a href="#6.2.6">6.2.6</a>                              SCNcFASTN macros, <a href="#7.8.1">7.8.1</a>
26478    pointer, <a href="#6.2.5">6.2.5</a>                                            SCNcLEASTN macros, <a href="#7.8.1">7.8.1</a>
26479 rescanning and replacement, <a href="#6.10.3.4">6.10.3.4</a>                         SCNcMAX macros, <a href="#7.8.1">7.8.1</a>
26480 reserved identifiers, <a href="#6.4.1">6.4.1</a>, <a href="#7.1.3">7.1.3</a>, <a href="#K.3.1.2">K.3.1.2</a>                   SCNcN macros, <a href="#7.8.1">7.8.1</a>
26481 restartable multibyte/wide character conversion              SCNcPTR macros, <a href="#7.8.1">7.8.1</a>
26482       functions, <a href="#7.27.1">7.27.1</a>, <a href="#7.28.6.3">7.28.6.3</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>                 scope of identifier, <a href="#6.2.1">6.2.1</a>, <a href="#6.9.2">6.9.2</a>
26483 restartable multibyte/wide string conversion                 search functions
26484       functions, <a href="#7.28.6.4">7.28.6.4</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>                           string, <a href="#7.23.5">7.23.5</a>, <a href="#K.3.7.3">K.3.7.3</a>
26485 restore calling environment function, <a href="#7.13.2">7.13.2</a>                   utility, <a href="#7.22.5">7.22.5</a>, <a href="#K.3.6.3">K.3.6.3</a>
26486 restrict type qualifier, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.3.1">6.7.3.1</a>                         wide string, <a href="#7.28.4.5">7.28.4.5</a>, <a href="#K.3.9.2.3">K.3.9.2.3</a>
26487 restrict-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.3">6.7.3</a>                         SEEK_CUR macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.9.2">7.21.9.2</a>
26488 return statement, <a href="#6.8.6.4">6.8.6.4</a>, <a href="#F.6">F.6</a>                               SEEK_END macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.9.2">7.21.9.2</a>
26489
26490 [<a name="#p671" href="p671">page 671</a>] (<a href="#Contents">Contents</a>)
26491
26492 SEEK_SET macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.9.2">7.21.9.2</a>                                 signal function, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.22.4.5">7.22.4.5</a>, <a href="#7.22.4.7">7.22.4.7</a>
26493 selection statements, <a href="#6.8.4">6.8.4</a>                                      signal handler, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.3">5.2.3</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#7.14.2.1">7.14.2.1</a>
26494 self-referential structure, <a href="#6.7.2.3">6.7.2.3</a>                              signal handling functions, <a href="#7.14.1">7.14.1</a>
26495 semicolon punctuator (;), <a href="#6.7">6.7</a>, <a href="#6.7.2.1">6.7.2.1</a>, <a href="#6.8.3">6.8.3</a>,                   signal.h header, <a href="#7.14">7.14</a>, <a href="#7.30.6">7.30.6</a>
26496       <a href="#6.8.5">6.8.5</a>, <a href="#6.8.6">6.8.6</a>                                               signaling NaN, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#F.2.1">F.2.1</a>
26497 separate compilation, <a href="#5.1.1.1">5.1.1.1</a>                                    signals, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.3">5.2.3</a>, <a href="#7.14.1">7.14.1</a>
26498 separate translation, <a href="#5.1.1.1">5.1.1.1</a>                                    signbit macro, <a href="#7.12.3.6">7.12.3.6</a>, <a href="#F.3">F.3</a>
26499 sequence points, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.5.13">6.5.13</a>, <a href="#6.5.14">6.5.14</a>,               signed char type, <a href="#6.2.5">6.2.5</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
26500       <a href="#6.5.15">6.5.15</a>, <a href="#6.5.17">6.5.17</a>, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.3.1">6.7.3.1</a>, <a href="#6.7.6">6.7.6</a>, <a href="#6.8">6.8</a>,                     <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
26501       <a href="#7.1.4">7.1.4</a>, <a href="#7.21.6">7.21.6</a>, <a href="#7.22.5">7.22.5</a>, <a href="#7.28.2">7.28.2</a>, <a href="#C">C</a>, <a href="#K.3.6.3">K.3.6.3</a>                  signed character, <a href="#6.3.1.1">6.3.1.1</a>
26502 sequenced after, see sequenced before                            signed integer types, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.4.4.1">6.4.4.1</a>
26503 sequenced before, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5">6.5</a>, <a href="#6.5.2.2">6.5.2.2</a>, <a href="#6.5.2.4">6.5.2.4</a>,                signed type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.3.1.4">6.3.1.4</a>,
26504       <a href="#6.5.16">6.5.16</a>, see also indeterminately sequenced,                     <a href="#6.3.1.8">6.3.1.8</a>
26505       unsequenced                                                signed types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>
26506 sequencing of statements, <a href="#6.8">6.8</a>                                    significand part, <a href="#6.4.4.2">6.4.4.2</a>
26507 set_constraint_handler_s function,                               SIGSEGV macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>
26508       <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6.1.1">K.3.6.1.1</a>, <a href="#K.3.6.1.2">K.3.6.1.2</a>, <a href="#K.3.6.1.3">K.3.6.1.3</a>                   SIGTERM macro, <a href="#7.14">7.14</a>
26509 setbuf function, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.1">7.21.5.1</a>, <a href="#7.21.5.5">7.21.5.5</a>                      simple assignment operator (=), <a href="#6.5.16.1">6.5.16.1</a>
26510 setjmp macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.13.1.1">7.13.1.1</a>, <a href="#7.13.2.1">7.13.2.1</a>                          sin functions, <a href="#7.12.4.6">7.12.4.6</a>, <a href="#F.10.1.6">F.10.1.6</a>
26511 setjmp.h header, <a href="#7.13">7.13</a>                                            sin type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
26512 setlocale function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.11.2.1">7.11.2.1</a>                           single-byte character, <a href="#3.7.1">3.7.1</a>, <a href="#5.2.1.2">5.2.1.2</a>
26513 setvbuf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.1">7.21.5.1</a>,                      single-byte/wide character conversion functions,
26514       <a href="#7.21.5.5">7.21.5.5</a>, <a href="#7.21.5.6">7.21.5.6</a>                                              <a href="#7.28.6.1">7.28.6.1</a>
26515 shall, <a href="#4">4</a>                                                         single-precision arithmetic, <a href="#5.1.2.3">5.1.2.3</a>
26516 shift expressions, <a href="#6.5.7">6.5.7</a>                                         single-quote escape sequence (\'), <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>
26517 shift sequence, <a href="#7.1.1">7.1.1</a>                                            singularity, <a href="#7.12.1">7.12.1</a>
26518 shift states, <a href="#5.2.1.2">5.2.1.2</a>                                            sinh functions, <a href="#7.12.5.5">7.12.5.5</a>, <a href="#F.10.2.5">F.10.2.5</a>
26519 short identifier, character, <a href="#5.2.4.1">5.2.4.1</a>, <a href="#6.4.3">6.4.3</a>                       sinh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
26520 short int type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.1">7.21.6.1</a>,                 SIZE_MAX macro, <a href="#7.20.3">7.20.3</a>
26521       <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>                               size_t type, <a href="#6.2.8">6.2.8</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#7.19">7.19</a>, <a href="#7.20.3">7.20.3</a>, <a href="#7.21.1">7.21.1</a>,
26522 short int type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>,                          <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22">7.22</a>, <a href="#7.23.1">7.23.1</a>, <a href="#7.26.1">7.26.1</a>, <a href="#7.27">7.27</a>,
26523       <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>                                                <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>,
26524 SHRT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                             <a href="#K.3.5">K.3.5</a>, <a href="#K.3.6">K.3.6</a>, <a href="#K.3.7">K.3.7</a>, <a href="#K.3.8">K.3.8</a>, <a href="#K.3.9">K.3.9</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
26525 SHRT_MIN macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                        sizeof operator, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.3">6.5.3</a>, <a href="#6.5.3.4">6.5.3.4</a>
26526 side effects, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.3.2.2">6.3.2.2</a>, <a href="#6.5">6.5</a>, <a href="#6.5.2.4">6.5.2.4</a>,           snprintf function, <a href="#7.21.6.5">7.21.6.5</a>, <a href="#7.21.6.12">7.21.6.12</a>,
26527       <a href="#6.5.16">6.5.16</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.8.3">6.8.3</a>, <a href="#7.6">7.6</a>, <a href="#7.6.1">7.6.1</a>, <a href="#7.21.7.5">7.21.7.5</a>,                     <a href="#K.3.5.3.5">K.3.5.3.5</a>
26528       <a href="#7.21.7.7">7.21.7.7</a>, <a href="#7.28.3.6">7.28.3.6</a>, <a href="#7.28.3.8">7.28.3.8</a>, <a href="#F.8.1">F.8.1</a>, <a href="#F.9.1">F.9.1</a>,                snprintf_s function, <a href="#K.3.5.3.5">K.3.5.3.5</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>
26529       <a href="#F.9.3">F.9.3</a>                                                      snwprintf_s function, <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>
26530 SIG_ATOMIC_MAX macro, <a href="#7.20.3">7.20.3</a>                                     sorting utility functions, <a href="#7.22.5">7.22.5</a>, <a href="#K.3.6.3">K.3.6.3</a>
26531 SIG_ATOMIC_MIN macro, <a href="#7.20.3">7.20.3</a>                                     source character set, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>
26532 sig_atomic_t type, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>,                      source file, <a href="#5.1.1.1">5.1.1.1</a>
26533       <a href="#7.20.3">7.20.3</a>                                                        name, <a href="#6.10.4">6.10.4</a>, <a href="#6.10.8.1">6.10.8.1</a>
26534 SIG_DFL macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                    source file inclusion, <a href="#6.10.2">6.10.2</a>
26535 SIG_ERR macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                    source lines, <a href="#5.1.1.2">5.1.1.2</a>
26536 SIG_IGN macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                    source text, <a href="#5.1.1.2">5.1.1.2</a>
26537 SIGABRT macro, <a href="#7.14">7.14</a>, <a href="#7.22.4.1">7.22.4.1</a>                                    space character (' '), <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>, <a href="#7.4.1.3">7.4.1.3</a>,
26538 SIGFPE macro, <a href="#7.12.1">7.12.1</a>, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>, <a href="#J.5.17">J.5.17</a>                          <a href="#7.4.1.10">7.4.1.10</a>, <a href="#7.29.2.1.3">7.29.2.1.3</a>
26539 SIGILL macro, <a href="#7.14">7.14</a>, <a href="#7.14.1.1">7.14.1.1</a>                                     sprintf function, <a href="#7.21.6.6">7.21.6.6</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>
26540 SIGINT macro, <a href="#7.14">7.14</a>                                               sprintf_s function, <a href="#K.3.5.3.5">K.3.5.3.5</a>, <a href="#K.3.5.3.6">K.3.5.3.6</a>
26541 sign and magnitude, <a href="#6.2.6.2">6.2.6.2</a>                                      sqrt functions, <a href="#7.12.7.5">7.12.7.5</a>, <a href="#F.3">F.3</a>, <a href="#F.10.4.5">F.10.4.5</a>
26542 sign bit, <a href="#6.2.6.2">6.2.6.2</a>                                                sqrt type-generic macro, <a href="#7.24">7.24</a>
26543
26544 [<a name="#p672" href="p672">page 672</a>] (<a href="#Contents">Contents</a>)
26545
26546 srand function, <a href="#7.22.2.2">7.22.2.2</a>                                        expression, <a href="#6.8.3">6.8.3</a>
26547 sscanf function, <a href="#7.21.6.7">7.21.6.7</a>, <a href="#7.21.6.14">7.21.6.14</a>                            for, <a href="#6.8.5.3">6.8.5.3</a>
26548 sscanf_s function, <a href="#K.3.5.3.7">K.3.5.3.7</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                        goto, <a href="#6.8.6.1">6.8.6.1</a>
26549 standard error stream, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.10.4">7.21.10.4</a>                if, <a href="#6.8.4.1">6.8.4.1</a>
26550 standard headers, <a href="#4">4</a>, <a href="#7.1.2">7.1.2</a>                                      iteration, <a href="#6.8.5">6.8.5</a>
26551    <a href="#7.2">&lt;assert.h&gt;</a>, <a href="#7.2">7.2</a>                                              jump, <a href="#6.8.6">6.8.6</a>
26552    <a href="#7.3">&lt;complex.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.3">7.3</a>,                labeled, <a href="#6.8.1">6.8.1</a>
26553         <a href="#7.24">7.24</a>, <a href="#7.30.1">7.30.1</a>, <a href="#G.6">G.6</a>, <a href="#J.5.17">J.5.17</a>                               null, <a href="#6.8.3">6.8.3</a>
26554    <a href="#7.4">&lt;ctype.h&gt;</a>, <a href="#7.4">7.4</a>, <a href="#7.30.2">7.30.2</a>                                       return, <a href="#6.8.6.4">6.8.6.4</a>, <a href="#F.6">F.6</a>
26555    <a href="#7.5">&lt;errno.h&gt;</a>, <a href="#7.5">7.5</a>, <a href="#7.30.3">7.30.3</a>, <a href="#K.3.2">K.3.2</a>                                selection, <a href="#6.8.4">6.8.4</a>
26556    <a href="#7.6">&lt;fenv.h&gt;</a>, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.6">7.6</a>, <a href="#7.12">7.12</a>, <a href="#F">F</a>, <a href="#H">H</a>                sequencing, <a href="#6.8">6.8</a>
26557    <a href="#7.7">&lt;float.h&gt;</a>, <a href="#4">4</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.7">7.7</a>, <a href="#7.22.1.3">7.22.1.3</a>,                      switch, <a href="#6.8.4.2">6.8.4.2</a>
26558         <a href="#7.28.4.1.1">7.28.4.1.1</a>                                              while, <a href="#6.8.5.1">6.8.5.1</a>
26559    <a href="#7.8">&lt;inttypes.h&gt;</a>, <a href="#7.8">7.8</a>, <a href="#7.30.4">7.30.4</a>                                 static assertions, <a href="#6.7.10">6.7.10</a>
26560    <a href="#7.9">&lt;iso646.h&gt;</a>, <a href="#4">4</a>, <a href="#7.9">7.9</a>                                        static storage duration, <a href="#6.2.4">6.2.4</a>
26561    <a href="#7.10">&lt;limits.h&gt;</a>, <a href="#4">4</a>, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#6.2.5">6.2.5</a>, <a href="#7.10">7.10</a>                     static storage-class specifier, <a href="#6.2.2">6.2.2</a>, <a href="#6.2.4">6.2.4</a>, <a href="#6.7.1">6.7.1</a>
26562    <a href="#7.11">&lt;locale.h&gt;</a>, <a href="#7.11">7.11</a>, <a href="#7.30.5">7.30.5</a>                                  static, in array declarators, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.7.6.3">6.7.6.3</a>
26563    <a href="#7.12">&lt;math.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#6.5">6.5</a>, <a href="#7.12">7.12</a>, <a href="#7.24">7.24</a>, <a href="#F">F</a>, <a href="#F.10">F.10</a>,            static_assert declaration, <a href="#6.7.10">6.7.10</a>
26564         <a href="#J.5.17">J.5.17</a>                                               static_assert macro, <a href="#7.2">7.2</a>
26565    <a href="#7.13">&lt;setjmp.h&gt;</a>, <a href="#7.13">7.13</a>                                          stdalign.h header, <a href="#4">4</a>, <a href="#7.15">7.15</a>
26566    <a href="#7.14">&lt;signal.h&gt;</a>, <a href="#7.14">7.14</a>, <a href="#7.30.6">7.30.6</a>                                  stdarg.h header, <a href="#4">4</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#7.16">7.16</a>
26567    <a href="#7.15">&lt;stdalign.h&gt;</a>, <a href="#4">4</a>, <a href="#7.15">7.15</a>                                     stdatomic.h header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.17">7.17</a>
26568    <a href="#7.16">&lt;stdarg.h&gt;</a>, <a href="#4">4</a>, <a href="#6.7.6.3">6.7.6.3</a>, <a href="#7.16">7.16</a>                              stdbool.h header, <a href="#4">4</a>, <a href="#7.18">7.18</a>, <a href="#7.30.7">7.30.7</a>, <a href="#H">H</a>
26569    <a href="#7.17">&lt;stdatomic.h&gt;</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.17">7.17</a>                      STDC, <a href="#6.10.6">6.10.6</a>, <a href="#6.11.8">6.11.8</a>
26570    <a href="#7.18">&lt;stdbool.h&gt;</a>, <a href="#4">4</a>, <a href="#7.18">7.18</a>, <a href="#7.30.7">7.30.7</a>, <a href="#H">H</a>                           stddef.h header, <a href="#4">4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.4.4.4">6.4.4.4</a>,
26571    <a href="#7.19">&lt;stddef.h&gt;</a>, <a href="#4">4</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.4.4.4">6.4.4.4</a>,                       <a href="#6.4.5">6.4.5</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#6.5.6">6.5.6</a>, <a href="#7.19">7.19</a>, <a href="#K.3.3">K.3.3</a>
26572         <a href="#6.4.5">6.4.5</a>, <a href="#6.5.3.4">6.5.3.4</a>, <a href="#6.5.6">6.5.6</a>, <a href="#7.19">7.19</a>, <a href="#K.3.3">K.3.3</a>                   stderr macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>
26573    <a href="#7.20">&lt;stdint.h&gt;</a>, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.10.1">6.10.1</a>, <a href="#7.8">7.8</a>, <a href="#7.20">7.20</a>,                stdin macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.4">7.21.6.4</a>,
26574         <a href="#7.30.8">7.30.8</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>                                       <a href="#7.21.7.6">7.21.7.6</a>, <a href="#7.28.2.12">7.28.2.12</a>, <a href="#7.28.3.7">7.28.3.7</a>, <a href="#K.3.5.3.4">K.3.5.3.4</a>,
26575    <a href="#7.21">&lt;stdio.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21">7.21</a>, <a href="#7.30.9">7.30.9</a>, <a href="#F">F</a>, <a href="#K.3.5">K.3.5</a>                    <a href="#K.3.5.4.1">K.3.5.4.1</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>
26576    <a href="#7.22">&lt;stdlib.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.22">7.22</a>, <a href="#7.30.10">7.30.10</a>, <a href="#F">F</a>,                  stdint.h header, <a href="#4">4</a>, <a href="#5.2.4.2">5.2.4.2</a>, <a href="#6.10.1">6.10.1</a>, <a href="#7.8">7.8</a>, <a href="#7.20">7.20</a>,
26577         <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6">K.3.6</a>                                             <a href="#7.30.8">7.30.8</a>, <a href="#K.3.3">K.3.3</a>, <a href="#K.3.4">K.3.4</a>
26578    <a href="#7.23">&lt;string.h&gt;</a>, <a href="#7.23">7.23</a>, <a href="#7.30.11">7.30.11</a>, <a href="#K.3.7">K.3.7</a>                          stdio.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21">7.21</a>, <a href="#7.30.9">7.30.9</a>, <a href="#F">F</a>, <a href="#K.3.5">K.3.5</a>
26579    <a href="#7.24">&lt;tgmath.h&gt;</a>, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                     stdlib.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.22">7.22</a>, <a href="#7.30.10">7.30.10</a>, <a href="#F">F</a>,
26580    <a href="#7.25">&lt;threads.h&gt;</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.25">7.25</a>                              <a href="#K.3.1.4">K.3.1.4</a>, <a href="#K.3.6">K.3.6</a>
26581    <a href="#7.26">&lt;time.h&gt;</a>, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>                                     stdout macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.3">7.21.6.3</a>,
26582    <a href="#7.27">&lt;uchar.h&gt;</a>, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27">7.27</a>                                 <a href="#7.21.7.8">7.21.7.8</a>, <a href="#7.21.7.9">7.21.7.9</a>, <a href="#7.28.2.11">7.28.2.11</a>, <a href="#7.28.3.9">7.28.3.9</a>
26583    <a href="#7.28">&lt;wchar.h&gt;</a>, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28">7.28</a>, <a href="#7.30.12">7.30.12</a>,              storage duration, <a href="#6.2.4">6.2.4</a>
26584         <a href="#F">F</a>, <a href="#K.3.9">K.3.9</a>                                             storage order of array, <a href="#6.5.2.1">6.5.2.1</a>
26585    <a href="#7.29">&lt;wctype.h&gt;</a>, <a href="#7.29">7.29</a>, <a href="#7.30.13">7.30.13</a>                                 storage unit (bit-field), <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.7.2.1">6.7.2.1</a>
26586 standard input stream, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                        storage-class specifiers, <a href="#6.7.1">6.7.1</a>, <a href="#6.11.5">6.11.5</a>
26587 standard integer types, <a href="#6.2.5">6.2.5</a>                                strcat function, <a href="#7.23.3.1">7.23.3.1</a>
26588 standard output stream, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                       strcat_s function, <a href="#K.3.7.2.1">K.3.7.2.1</a>
26589 standard signed integer types, <a href="#6.2.5">6.2.5</a>                         strchr function, <a href="#7.23.5.2">7.23.5.2</a>
26590 state-dependent encoding, <a href="#5.2.1.2">5.2.1.2</a>, <a href="#7.22.7">7.22.7</a>, <a href="#K.3.6.4">K.3.6.4</a>           strcmp function, <a href="#7.23.4">7.23.4</a>, <a href="#7.23.4.2">7.23.4.2</a>
26591 statements, <a href="#6.8">6.8</a>                                              strcoll function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.23.4.3">7.23.4.3</a>, <a href="#7.23.4.5">7.23.4.5</a>
26592    break, <a href="#6.8.6.3">6.8.6.3</a>                                            strcpy function, <a href="#7.23.2.3">7.23.2.3</a>
26593    compound, <a href="#6.8.2">6.8.2</a>                                           strcpy_s function, <a href="#K.3.7.1.3">K.3.7.1.3</a>
26594    continue, <a href="#6.8.6.2">6.8.6.2</a>                                         strcspn function, <a href="#7.23.5.3">7.23.5.3</a>
26595    do, <a href="#6.8.5.2">6.8.5.2</a>                                               streams, <a href="#7.21.2">7.21.2</a>, <a href="#7.22.4.4">7.22.4.4</a>
26596    else, <a href="#6.8.4.1">6.8.4.1</a>                                                fully buffered, <a href="#7.21.3">7.21.3</a>
26597
26598 [<a name="#p673" href="p673">page 673</a>] (<a href="#Contents">Contents</a>)
26599
26600    line buffered, <a href="#7.21.3">7.21.3</a>                                           strtoumax function, <a href="#7.8.2.3">7.8.2.3</a>
26601    orientation, <a href="#7.21.2">7.21.2</a>                                             struct hack, see flexible array member
26602    standard error, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                  struct lconv, <a href="#7.11">7.11</a>
26603    standard input, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                  struct tm, <a href="#7.26.1">7.26.1</a>
26604    standard output, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.3">7.21.3</a>                                 structure
26605    unbuffered, <a href="#7.21.3">7.21.3</a>                                                 arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
26606 strerror function, <a href="#7.21.10.4">7.21.10.4</a>, <a href="#7.23.6.2">7.23.6.2</a>                                content, <a href="#6.7.2.3">6.7.2.3</a>
26607 strerror_s function, <a href="#K.3.7.4.2">K.3.7.4.2</a>, <a href="#K.3.7.4.3">K.3.7.4.3</a>                             dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>
26608 strerrorlen_s function, <a href="#K.3.7.4.3">K.3.7.4.3</a>                                     initialization, <a href="#6.7.9">6.7.9</a>
26609 strftime function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.26.3">7.26.3</a>, <a href="#7.26.3.5">7.26.3.5</a>,                        member alignment, <a href="#6.7.2.1">6.7.2.1</a>
26610       <a href="#7.28.5.1">7.28.5.1</a>, <a href="#K.3.8.2">K.3.8.2</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>                         member name space, <a href="#6.2.3">6.2.3</a>
26611 stricter, <a href="#6.2.8">6.2.8</a>                                                       member operator (.), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.3">6.5.2.3</a>
26612 strictly conforming program, <a href="#4">4</a>                                        pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>
26613 string, <a href="#7.1.1">7.1.1</a>                                                         specifier, <a href="#6.7.2.1">6.7.2.1</a>
26614    comparison functions, <a href="#7.23.4">7.23.4</a>                                       tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>
26615    concatenation functions, <a href="#7.23.3">7.23.3</a>, <a href="#K.3.7.2">K.3.7.2</a>                           type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.1">6.7.2.1</a>
26616    conversion functions, <a href="#7.11.1.1">7.11.1.1</a>                                  strxfrm function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.23.4.5">7.23.4.5</a>
26617    copying functions, <a href="#7.23.2">7.23.2</a>, <a href="#K.3.7.1">K.3.7.1</a>                              subnormal floating-point numbers, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26618    library function conventions, <a href="#7.23.1">7.23.1</a>                            subscripting, <a href="#6.5.2.1">6.5.2.1</a>
26619    literal, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1">5.2.1</a>, <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.5.1">6.5.1</a>, <a href="#6.7.9">6.7.9</a>           subtraction assignment operator (-=), <a href="#6.5.16.2">6.5.16.2</a>
26620    miscellaneous functions, <a href="#7.23.6">7.23.6</a>, <a href="#K.3.7.4">K.3.7.4</a>                        subtraction operator (-), <a href="#6.2.6.2">6.2.6.2</a>, <a href="#6.5.6">6.5.6</a>, <a href="#F.3">F.3</a>, <a href="#G.5.2">G.5.2</a>
26621    numeric conversion functions, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1">7.22.1</a>                   suffix
26622    search functions, <a href="#7.23.5">7.23.5</a>, <a href="#K.3.7.3">K.3.7.3</a>                                  floating constant, <a href="#6.4.4.2">6.4.4.2</a>
26623 string handling header, <a href="#7.23">7.23</a>, <a href="#K.3.7">K.3.7</a>                                   integer constant, <a href="#6.4.4.1">6.4.4.1</a>
26624 string.h header, <a href="#7.23">7.23</a>, <a href="#7.30.11">7.30.11</a>, <a href="#K.3.7">K.3.7</a>                              switch body, <a href="#6.8.4.2">6.8.4.2</a>
26625 stringizing, <a href="#6.10.3.2">6.10.3.2</a>, <a href="#6.10.9">6.10.9</a>                                      switch case label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
26626 strlen function, <a href="#7.23.6.3">7.23.6.3</a>                                          switch default label, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
26627 strncat function, <a href="#7.23.3.2">7.23.3.2</a>                                         switch statement, <a href="#6.8.1">6.8.1</a>, <a href="#6.8.4.2">6.8.4.2</a>
26628 strncat_s function, <a href="#K.3.7.2.2">K.3.7.2.2</a>                                      swprintf function, <a href="#7.28.2.3">7.28.2.3</a>, <a href="#7.28.2.7">7.28.2.7</a>,
26629 strncmp function, <a href="#7.23.4">7.23.4</a>, <a href="#7.23.4.4">7.23.4.4</a>                                       <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>
26630 strncpy function, <a href="#7.23.2.4">7.23.2.4</a>                                         swprintf_s function, <a href="#K.3.9.1.3">K.3.9.1.3</a>, <a href="#K.3.9.1.4">K.3.9.1.4</a>
26631 strncpy_s function, <a href="#K.3.7.1.4">K.3.7.1.4</a>                                      swscanf function, <a href="#7.28.2.4">7.28.2.4</a>, <a href="#7.28.2.8">7.28.2.8</a>
26632 strnlen_s function, <a href="#K.3.7.4.4">K.3.7.4.4</a>                                      swscanf_s function, <a href="#K.3.9.1.5">K.3.9.1.5</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>
26633 stronger, <a href="#6.2.8">6.2.8</a>                                                    symbols, <a href="#3">3</a>
26634 strpbrk function, <a href="#7.23.5.4">7.23.5.4</a>                                         synchronization operation, <a href="#5.1.2.4">5.1.2.4</a>
26635 strrchr function, <a href="#7.23.5.5">7.23.5.5</a>                                         synchronize with, <a href="#5.1.2.4">5.1.2.4</a>
26636 strspn function, <a href="#7.23.5.6">7.23.5.6</a>                                          syntactic categories, <a href="#6.1">6.1</a>
26637 strstr function, <a href="#7.23.5.7">7.23.5.7</a>                                          syntax notation, <a href="#6.1">6.1</a>
26638 strtod function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.3">7.22.1.3</a>,                    syntax rule precedence, <a href="#5.1.1.2">5.1.1.2</a>
26639       <a href="#7.28.2.2">7.28.2.2</a>, <a href="#F.3">F.3</a>                                                syntax summary, language, <a href="#A">A</a>
26640 strtof function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.22.1.3">7.22.1.3</a>, <a href="#F.3">F.3</a>                          system function, <a href="#7.22.4.8">7.22.4.8</a>
26641 strtoimax function, <a href="#7.8.2.3">7.8.2.3</a>
26642 strtok function, <a href="#7.23.5.8">7.23.5.8</a>                                          tab characters, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>
26643 strtok_s function, <a href="#K.3.7.3.1">K.3.7.3.1</a>                                       tag compatibility, <a href="#6.2.7">6.2.7</a>
26644 strtol function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.2">7.22.1.2</a>,                      tag name space, <a href="#6.2.3">6.2.3</a>
26645       <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.2.2">7.28.2.2</a>                                           tags, <a href="#6.7.2.3">6.7.2.3</a>
26646 strtold function, <a href="#7.12.11.2">7.12.11.2</a>, <a href="#7.22.1.3">7.22.1.3</a>, <a href="#F.3">F.3</a>                         tan functions, <a href="#7.12.4.7">7.12.4.7</a>, <a href="#F.10.1.7">F.10.1.7</a>
26647 strtoll function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1.2">7.22.1.2</a>, <a href="#7.22.1.4">7.22.1.4</a>                      tan type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
26648 strtoul function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22.1.2">7.22.1.2</a>,                     tanh functions, <a href="#7.12.5.6">7.12.5.6</a>, <a href="#F.10.2.6">F.10.2.6</a>
26649       <a href="#7.22.1.4">7.22.1.4</a>, <a href="#7.28.2.2">7.28.2.2</a>                                           tanh type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
26650 strtoull function, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.22.1.2">7.22.1.2</a>, <a href="#7.22.1.4">7.22.1.4</a>                     temporary lifetime, <a href="#6.2.4">6.2.4</a>
26651
26652 [<a name="#p674" href="p674">page 674</a>] (<a href="#Contents">Contents</a>)
26653
26654 tentative definition, <a href="#6.9.2">6.9.2</a>                                    towlower function, <a href="#7.29.3.1.1">7.29.3.1.1</a>, <a href="#7.29.3.2.1">7.29.3.2.1</a>
26655 terms, <a href="#3">3</a>                                                      towupper function, <a href="#7.29.3.1.2">7.29.3.1.2</a>, <a href="#7.29.3.2.1">7.29.3.2.1</a>
26656 text streams, <a href="#7.21.2">7.21.2</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>, <a href="#7.21.9.4">7.21.9.4</a>           translation environment, <a href="#5">5</a>, <a href="#5.1.1">5.1.1</a>
26657 tgamma functions, <a href="#7.12.8.4">7.12.8.4</a>, <a href="#F.10.5.4">F.10.5.4</a>                          translation limits, <a href="#5.2.4.1">5.2.4.1</a>
26658 tgamma type-generic macro, <a href="#7.24">7.24</a>                               translation phases, <a href="#5.1.1.2">5.1.1.2</a>
26659 tgmath.h header, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>                                    translation unit, <a href="#5.1.1.1">5.1.1.1</a>, <a href="#6.9">6.9</a>
26660 thrd_create function, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.5.1">7.25.5.1</a>                        trap, see perform a trap
26661 thrd_current function, <a href="#7.25.5.2">7.25.5.2</a>                               trap representation, <a href="#3.19.4">3.19.4</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.2.6.2">6.2.6.2</a>,
26662 thrd_detach function, <a href="#7.25.5.3">7.25.5.3</a>, <a href="#7.25.5.6">7.25.5.6</a>                            <a href="#6.3.2.3">6.3.2.3</a>, <a href="#6.5.2.3">6.5.2.3</a>
26663 thrd_equal function, <a href="#7.25.5.4">7.25.5.4</a>                                 trigonometric functions
26664 thrd_exit function, <a href="#7.25.5.5">7.25.5.5</a>                                     complex, <a href="#7.3.5">7.3.5</a>, <a href="#G.6.1">G.6.1</a>
26665 thrd_join function, <a href="#7.25.5.3">7.25.5.3</a>, <a href="#7.25.5.6">7.25.5.6</a>                           real, <a href="#7.12.4">7.12.4</a>, <a href="#F.10.1">F.10.1</a>
26666 thrd_sleep function, <a href="#7.25.5.7">7.25.5.7</a>                                 trigraph sequences, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#5.2.1.1">5.2.1.1</a>
26667 thrd_start_t type, <a href="#7.25.1">7.25.1</a>                                     true macro, <a href="#7.18">7.18</a>
26668 thrd_t type, <a href="#7.25.1">7.25.1</a>                                           trunc functions, <a href="#7.12.9.8">7.12.9.8</a>, <a href="#F.10.6.8">F.10.6.8</a>
26669 thrd_yield function, <a href="#7.25.5.8">7.25.5.8</a>                                 trunc type-generic macro, <a href="#7.24">7.24</a>
26670 thread of execution, <a href="#5.1.2.4">5.1.2.4</a>, <a href="#7.1.4">7.1.4</a>, <a href="#7.6">7.6</a>, <a href="#7.22.4.6">7.22.4.6</a>            truncation, <a href="#6.3.1.4">6.3.1.4</a>, <a href="#7.12.9.8">7.12.9.8</a>, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.5.3">7.21.5.3</a>
26671 thread storage duration, <a href="#6.2.4">6.2.4</a>, <a href="#7.6">7.6</a>                           truncation toward zero, <a href="#6.5.5">6.5.5</a>
26672 threads header, <a href="#7.25">7.25</a>                                          tss_create function, <a href="#7.25.6.1">7.25.6.1</a>
26673 threads.h header, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.1.2">7.1.2</a>, <a href="#7.25">7.25</a>                       tss_delete function, <a href="#7.25.6.2">7.25.6.2</a>
26674 time                                                          TSS_DTOR_ITERATIONS macro, <a href="#7.25.1">7.25.1</a>
26675    broken down, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.3">7.26.3</a>, <a href="#7.26.3.1">7.26.3.1</a>,           tss_dtor_t type, <a href="#7.25.1">7.25.1</a>
26676          <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#7.26.3.5">7.26.3.5</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>,             tss_get function, <a href="#7.25.6.3">7.25.6.3</a>
26677          <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                                 tss_set function, <a href="#7.25.6.4">7.25.6.4</a>
26678    calendar, <a href="#7.26.1">7.26.1</a>, <a href="#7.26.2.2">7.26.2.2</a>, <a href="#7.26.2.3">7.26.2.3</a>, <a href="#7.26.2.4">7.26.2.4</a>,            tss_t type, <a href="#7.25.1">7.25.1</a>
26679          <a href="#7.26.3.2">7.26.3.2</a>, <a href="#7.26.3.3">7.26.3.3</a>, <a href="#7.26.3.4">7.26.3.4</a>, <a href="#K.3.8.2.2">K.3.8.2.2</a>,             two's complement, <a href="#6.2.6.2">6.2.6.2</a>, <a href="#7.20.1.1">7.20.1.1</a>
26680          <a href="#K.3.8.2.3">K.3.8.2.3</a>, <a href="#K.3.8.2.4">K.3.8.2.4</a>                                 type category, <a href="#6.2.5">6.2.5</a>
26681    components, <a href="#7.26.1">7.26.1</a>, <a href="#K.3.8.1">K.3.8.1</a>                                type conversion, <a href="#6.3">6.3</a>
26682    conversion functions, <a href="#7.26.3">7.26.3</a>, <a href="#K.3.8.2">K.3.8.2</a>                      type definitions, <a href="#6.7.8">6.7.8</a>
26683       wide character, <a href="#7.28.5">7.28.5</a>                                  type domain, <a href="#6.2.5">6.2.5</a>, <a href="#G.2">G.2</a>
26684    local, <a href="#7.26.1">7.26.1</a>                                              type names, <a href="#6.7.7">6.7.7</a>
26685    manipulation functions, <a href="#7.26.2">7.26.2</a>                             type punning, <a href="#6.5.2.3">6.5.2.3</a>
26686    normalized broken down, <a href="#K.3.8.1">K.3.8.1</a>, <a href="#K.3.8.2.1">K.3.8.2.1</a>                 type qualifiers, <a href="#6.7.3">6.7.3</a>
26687 time function, <a href="#7.26.2.4">7.26.2.4</a>                                       type specifiers, <a href="#6.7.2">6.7.2</a>
26688 time.h header, <a href="#7.26">7.26</a>, <a href="#K.3.8">K.3.8</a>                                    type-generic macro, <a href="#7.24">7.24</a>, <a href="#G.7">G.7</a>
26689 time_t type, <a href="#7.26.1">7.26.1</a>                                           typedef declaration, <a href="#6.7.8">6.7.8</a>
26690 TIME_UTC macro, <a href="#7.25.7.1">7.25.7.1</a>                                      typedef storage-class specifier, <a href="#6.7.1">6.7.1</a>, <a href="#6.7.8">6.7.8</a>
26691 tm structure type, <a href="#7.26.1">7.26.1</a>, <a href="#7.28.1">7.28.1</a>, <a href="#K.3.8.1">K.3.8.1</a>                    types, <a href="#6.2.5">6.2.5</a>
26692 TMP_MAX macro, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.21.4.4">7.21.4.4</a>                        _Atomic qualified, <a href="#6.2.5">6.2.5</a>, <a href="#6.2.6.1">6.2.6.1</a>, <a href="#6.5.2.3">6.5.2.3</a>,
26693 TMP_MAX_S macro, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                           <a href="#6.5.2.4">6.5.2.4</a>, <a href="#6.5.16.2">6.5.16.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.3">6.7.3</a>
26694 tmpfile function, <a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.22.4.4">7.22.4.4</a>                             atomic, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.10.8.3">6.10.8.3</a>, <a href="#7.17.6">7.17.6</a>
26695 tmpfile_s function, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                         character, <a href="#6.7.9">6.7.9</a>
26696 tmpnam function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.4.3">7.21.4.3</a>, <a href="#7.21.4.4">7.21.4.4</a>,                     compatible, <a href="#6.2.7">6.2.7</a>, <a href="#6.7.2">6.7.2</a>, <a href="#6.7.3">6.7.3</a>, <a href="#6.7.6">6.7.6</a>
26697       <a href="#K.3.5.1.2">K.3.5.1.2</a>                                                  complex, <a href="#6.2.5">6.2.5</a>, <a href="#G">G</a>
26698 tmpnam_s function, <a href="#K.3.5">K.3.5</a>, <a href="#K.3.5.1.1">K.3.5.1.1</a>, <a href="#K.3.5.1.2">K.3.5.1.2</a>                   composite, <a href="#6.2.7">6.2.7</a>
26699 token, <a href="#5.1.1.2">5.1.1.2</a>, <a href="#6.4">6.4</a>, see also preprocessing tokens               const qualified, <a href="#6.7.3">6.7.3</a>
26700 token concatenation, <a href="#6.10.3.3">6.10.3.3</a>                                    conversions, <a href="#6.3">6.3</a>
26701 token pasting, <a href="#6.10.3.3">6.10.3.3</a>                                          imaginary, <a href="#G">G</a>
26702 tolower function, <a href="#7.4.2.1">7.4.2.1</a>                                        restrict qualified, <a href="#6.7.3">6.7.3</a>
26703 toupper function, <a href="#7.4.2.2">7.4.2.2</a>                                        volatile qualified, <a href="#6.7.3">6.7.3</a>
26704 towctrans function, <a href="#7.29.3.2.1">7.29.3.2.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>
26705
26706 [<a name="#p675" href="p675">page 675</a>] (<a href="#Contents">Contents</a>)
26707
26708 uchar.h header, <a href="#6.4.4.4">6.4.4.4</a>, <a href="#6.4.5">6.4.5</a>, <a href="#7.27">7.27</a>                      universal character name, <a href="#6.4.3">6.4.3</a>
26709 UCHAR_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                unnormalized floating-point numbers, <a href="#5.2.4.2.2">5.2.4.2.2</a>
26710 UINT_FASTN_MAX macros, <a href="#7.20.2.3">7.20.2.3</a>                           unqualified type, <a href="#6.2.5">6.2.5</a>
26711 uint_fastN_t types, <a href="#7.20.1.3">7.20.1.3</a>                              unqualified version of type, <a href="#6.2.5">6.2.5</a>
26712 uint_least16_t type, <a href="#7.27">7.27</a>                                 unsequenced, <a href="#5.1.2.3">5.1.2.3</a>, <a href="#6.5">6.5</a>, <a href="#6.5.16">6.5.16</a>, see also
26713 uint_least32_t type, <a href="#7.27">7.27</a>                                       indeterminately sequenced, sequenced
26714 UINT_LEASTN_MAX macros, <a href="#7.20.2.2">7.20.2.2</a>                                before
26715 uint_leastN_t types, <a href="#7.20.1.2">7.20.1.2</a>                             unsigned char type, <a href="#K.3.5.3.2">K.3.5.3.2</a>, <a href="#K.3.9.1.2">K.3.9.1.2</a>
26716 UINT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>                                 unsigned integer suffix, u or <a href="#U">U</a>, <a href="#6.4.4.1">6.4.4.1</a>
26717 UINTMAX_C macro, <a href="#7.20.4.2">7.20.4.2</a>                                 unsigned integer types, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.1.3">6.3.1.3</a>, <a href="#6.4.4.1">6.4.4.1</a>
26718 UINTMAX_MAX macro, <a href="#7.8.2.3">7.8.2.3</a>, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.20.2.5">7.20.2.5</a>             unsigned type conversion, <a href="#6.3.1.1">6.3.1.1</a>, <a href="#6.3.1.3">6.3.1.3</a>,
26719 uintmax_t type, <a href="#7.20.1.5">7.20.1.5</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,                   <a href="#6.3.1.4">6.3.1.4</a>, <a href="#6.3.1.8">6.3.1.8</a>
26720      <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>                                   unsigned types, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2">6.7.2</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>,
26721 UINTN_C macros, <a href="#7.20.4.1">7.20.4.1</a>                                        <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
26722 UINTN_MAX macros, <a href="#7.20.2.1">7.20.2.1</a>                                unspecified behavior, <a href="#3.4.4">3.4.4</a>, <a href="#4">4</a>, <a href="#J.1">J.1</a>
26723 uintN_t types, <a href="#7.20.1.1">7.20.1.1</a>                                   unspecified value, <a href="#3.19.3">3.19.3</a>
26724 UINTPTR_MAX macro, <a href="#7.20.2.4">7.20.2.4</a>                               uppercase letter, <a href="#5.2.1">5.2.1</a>
26725 uintptr_t type, <a href="#7.20.1.4">7.20.1.4</a>                                  use of library functions, <a href="#7.1.4">7.1.4</a>
26726 ULLONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                    USHRT_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>
26727      <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           usual arithmetic conversions, <a href="#6.3.1.8">6.3.1.8</a>, <a href="#6.5.5">6.5.5</a>, <a href="#6.5.6">6.5.6</a>,
26728 ULONG_MAX macro, <a href="#5.2.4.2.1">5.2.4.2.1</a>, <a href="#7.22.1.4">7.22.1.4</a>,                           <a href="#6.5.8">6.5.8</a>, <a href="#6.5.9">6.5.9</a>, <a href="#6.5.10">6.5.10</a>, <a href="#6.5.11">6.5.11</a>, <a href="#6.5.12">6.5.12</a>, <a href="#6.5.15">6.5.15</a>
26729      <a href="#7.28.4.1.2">7.28.4.1.2</a>                                           UTF-16, <a href="#6.10.8.2">6.10.8.2</a>
26730 unary arithmetic operators, <a href="#6.5.3.3">6.5.3.3</a>                       UTF-32, <a href="#6.10.8.2">6.10.8.2</a>
26731 unary expression, <a href="#6.5.3">6.5.3</a>                                   UTF-8 string literal, see string literal
26732 unary minus operator (-), <a href="#6.5.3.3">6.5.3.3</a>, <a href="#F.3">F.3</a>                    utilities, general, <a href="#7.22">7.22</a>, <a href="#K.3.6">K.3.6</a>
26733 unary operators, <a href="#6.5.3">6.5.3</a>                                       wide string, <a href="#7.28.4">7.28.4</a>, <a href="#K.3.9.2">K.3.9.2</a>
26734 unary plus operator (+), <a href="#6.5.3.3">6.5.3.3</a>
26735 unbuffered stream, <a href="#7.21.3">7.21.3</a>                                 va_arg macro, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.1">7.16.1.1</a>, <a href="#7.16.1.2">7.16.1.2</a>,
26736 undef preprocessing directive, <a href="#6.10.3.5">6.10.3.5</a>, <a href="#7.1.3">7.1.3</a>,                <a href="#7.16.1.4">7.16.1.4</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>,
26737      <a href="#7.1.4">7.1.4</a>                                                     <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>,
26738 undefined behavior, <a href="#3.4.3">3.4.3</a>, <a href="#4">4</a>, <a href="#J.2">J.2</a>                               <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>,
26739 underscore character, <a href="#6.4.2.1">6.4.2.1</a>                                  <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,
26740 underscore, leading, in identifier, <a href="#7.1.3">7.1.3</a>                       <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>
26741 ungetc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.7.10">7.21.7.10</a>, <a href="#7.21.9.2">7.21.9.2</a>,             va_copy macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.1">7.16.1.1</a>,
26742      <a href="#7.21.9.3">7.21.9.3</a>                                                  <a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.3">7.16.1.3</a>
26743 ungetwc function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3.10">7.28.3.10</a>                       va_end macro, <a href="#7.1.3">7.1.3</a>, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.3">7.16.1.3</a>,
26744 Unicode, <a href="#7.27">7.27</a>, see also char16_t type,                         <a href="#7.16.1.4">7.16.1.4</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>,
26745      char32_t type, wchar_t type                               <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>, <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>,
26746 Unicode required set, <a href="#6.10.8.2">6.10.8.2</a>                                 <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>,
26747 union                                                          <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,
26748   arrow operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                                 <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>, <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>
26749   content, <a href="#6.7.2.3">6.7.2.3</a>                                        va_list type, <a href="#7.16">7.16</a>, <a href="#7.16.1.3">7.16.1.3</a>
26750   dot operator (.), <a href="#6.5.2.3">6.5.2.3</a>                               va_start macro, <a href="#7.16">7.16</a>, <a href="#7.16.1">7.16.1</a>, <a href="#7.16.1.1">7.16.1.1</a>,
26751   initialization, <a href="#6.7.9">6.7.9</a>                                        <a href="#7.16.1.2">7.16.1.2</a>, <a href="#7.16.1.3">7.16.1.3</a>, <a href="#7.16.1.4">7.16.1.4</a>, <a href="#7.21.6.8">7.21.6.8</a>,
26752   member alignment, <a href="#6.7.2.1">6.7.2.1</a>                                    <a href="#7.21.6.9">7.21.6.9</a>, <a href="#7.21.6.10">7.21.6.10</a>, <a href="#7.21.6.11">7.21.6.11</a>, <a href="#7.21.6.12">7.21.6.12</a>,
26753   member name space, <a href="#6.2.3">6.2.3</a>                                     <a href="#7.21.6.13">7.21.6.13</a>, <a href="#7.21.6.14">7.21.6.14</a>, <a href="#7.28.2.5">7.28.2.5</a>, <a href="#7.28.2.6">7.28.2.6</a>,
26754   member operator (.), <a href="#6.3.2.1">6.3.2.1</a>, <a href="#6.5.2.3">6.5.2.3</a>                        <a href="#7.28.2.7">7.28.2.7</a>, <a href="#7.28.2.8">7.28.2.8</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.10">7.28.2.10</a>,
26755   pointer operator (-&gt;), <a href="#6.5.2.3">6.5.2.3</a>                               <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>, <a href="#K.3.9.1.7">K.3.9.1.7</a>,
26756   specifier, <a href="#6.7.2.1">6.7.2.1</a>                                            <a href="#K.3.9.1.10">K.3.9.1.10</a>, <a href="#K.3.9.1.12">K.3.9.1.12</a>
26757   tag, <a href="#6.2.3">6.2.3</a>, <a href="#6.7.2.3">6.7.2.3</a>                                     value, <a href="#3.19">3.19</a>
26758   type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.2.1">6.7.2.1</a>                                    value bits, <a href="#6.2.6.2">6.2.6.2</a>
26759
26760 [<a name="#p676" href="p676">page 676</a>] (<a href="#Contents">Contents</a>)
26761
26762 variable arguments, <a href="#6.10.3">6.10.3</a>, <a href="#7.16">7.16</a>                             vswscanf function, <a href="#7.28.2.8">7.28.2.8</a>
26763 variable arguments header, <a href="#7.16">7.16</a>                              vswscanf_s function, <a href="#K.3.9.1.10">K.3.9.1.10</a>
26764 variable length array, <a href="#6.7.6">6.7.6</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>              vwprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#K.3.9.1.11">K.3.9.1.11</a>
26765 variably modified type, <a href="#6.7.6">6.7.6</a>, <a href="#6.7.6.2">6.7.6.2</a>, <a href="#6.10.8.3">6.10.8.3</a>              vwprintf_s function, <a href="#K.3.9.1.11">K.3.9.1.11</a>
26766 vertical-tab character, <a href="#5.2.1">5.2.1</a>, <a href="#6.4">6.4</a>                           vwscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#7.28.3.10">7.28.3.10</a>
26767 vertical-tab escape sequence (\v), <a href="#5.2.2">5.2.2</a>, <a href="#6.4.4.4">6.4.4.4</a>,           vwscanf_s function, <a href="#K.3.9.1.12">K.3.9.1.12</a>
26768      <a href="#7.4.1.10">7.4.1.10</a>
26769 vfprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#K.3.5.3.8">K.3.5.3.8</a>               warnings, <a href="#I">I</a>
26770 vfprintf_s function, <a href="#K.3.5.3.8">K.3.5.3.8</a>, <a href="#K.3.5.3.9">K.3.5.3.9</a>,                   wchar.h header, <a href="#5.2.4.2.2">5.2.4.2.2</a>, <a href="#7.21.1">7.21.1</a>, <a href="#7.28">7.28</a>, <a href="#7.30.12">7.30.12</a>,
26771      <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                                      <a href="#F">F</a>, <a href="#K.3.9">K.3.9</a>
26772 vfscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.9">7.21.6.9</a>                 WCHAR_MAX macro, <a href="#7.20.3">7.20.3</a>, <a href="#7.28.1">7.28.1</a>
26773 vfscanf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                   WCHAR_MIN macro, <a href="#7.20.3">7.20.3</a>, <a href="#7.28.1">7.28.1</a>
26774      <a href="#K.3.5.3.14">K.3.5.3.14</a>                                              wchar_t type, <a href="#3.7.3">3.7.3</a>, <a href="#6.4.5">6.4.5</a>, <a href="#6.7.9">6.7.9</a>, <a href="#6.10.8.2">6.10.8.2</a>, <a href="#7.19">7.19</a>,
26775 vfwprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.5">7.28.2.5</a>, <a href="#K.3.9.1.6">K.3.9.1.6</a>                  <a href="#7.20.3">7.20.3</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.22">7.22</a>, <a href="#7.28.1">7.28.1</a>,
26776 vfwprintf_s function, <a href="#K.3.9.1.6">K.3.9.1.6</a>                                  <a href="#7.28.2.1">7.28.2.1</a>, <a href="#7.28.2.2">7.28.2.2</a>
26777 vfwscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.6">7.28.2.6</a>, <a href="#7.28.3.10">7.28.3.10</a>               wcrtomb function, <a href="#7.21.3">7.21.3</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,
26778 vfwscanf_s function, <a href="#K.3.9.1.7">K.3.9.1.7</a>                                   <a href="#7.28.6.3.3">7.28.6.3.3</a>, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#K.3.6.5.2">K.3.6.5.2</a>, <a href="#K.3.9.3.1">K.3.9.3.1</a>,
26779 visibility of identifier, <a href="#6.2.1">6.2.1</a>                                   <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
26780 visible sequence of side effects, <a href="#5.1.2.4">5.1.2.4</a>                    wcrtomb_s function, <a href="#K.3.9.3.1">K.3.9.3.1</a>, <a href="#K.3.9.3.1.1">K.3.9.3.1.1</a>
26781 visible side effect, <a href="#5.1.2.4">5.1.2.4</a>                                 wcscat function, <a href="#7.28.4.3.1">7.28.4.3.1</a>
26782 VLA, see variable length array                               wcscat_s function, <a href="#K.3.9.2.2.1">K.3.9.2.2.1</a>
26783 void expression, <a href="#6.3.2.2">6.3.2.2</a>                                     wcschr function, <a href="#7.28.4.5.1">7.28.4.5.1</a>
26784 void function parameter, <a href="#6.7.6.3">6.7.6.3</a>                             wcscmp function, <a href="#7.28.4.4.1">7.28.4.4.1</a>, <a href="#7.28.4.4.4">7.28.4.4.4</a>
26785 void type, <a href="#6.2.5">6.2.5</a>, <a href="#6.3.2.2">6.3.2.2</a>, <a href="#6.7.2">6.7.2</a>, <a href="#K.3.5.3.2">K.3.5.3.2</a>,                 wcscoll function, <a href="#7.28.4.4.2">7.28.4.4.2</a>, <a href="#7.28.4.4.4">7.28.4.4.4</a>
26786      <a href="#K.3.9.1.2">K.3.9.1.2</a>                                               wcscpy function, <a href="#7.28.4.2.1">7.28.4.2.1</a>
26787 void type conversion, <a href="#6.3.2.2">6.3.2.2</a>                                wcscpy_s function, <a href="#K.3.9.2.1.1">K.3.9.2.1.1</a>
26788 volatile storage, <a href="#5.1.2.3">5.1.2.3</a>                                    wcscspn function, <a href="#7.28.4.5.2">7.28.4.5.2</a>
26789 volatile type qualifier, <a href="#6.7.3">6.7.3</a>                                wcsftime function, <a href="#7.11.1.1">7.11.1.1</a>, <a href="#7.28.5.1">7.28.5.1</a>
26790 volatile-qualified type, <a href="#6.2.5">6.2.5</a>, <a href="#6.7.3">6.7.3</a>                         wcslen function, <a href="#7.28.4.6.1">7.28.4.6.1</a>
26791 vprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.10">7.21.6.10</a>,               wcsncat function, <a href="#7.28.4.3.2">7.28.4.3.2</a>
26792      <a href="#K.3.5.3.10">K.3.5.3.10</a>                                              wcsncat_s function, <a href="#K.3.9.2.2.2">K.3.9.2.2.2</a>
26793 vprintf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.10">K.3.5.3.10</a>,                   wcsncmp function, <a href="#7.28.4.4.3">7.28.4.4.3</a>
26794      <a href="#K.3.5.3.11">K.3.5.3.11</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                                  wcsncpy function, <a href="#7.28.4.2.2">7.28.4.2.2</a>
26795 vscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.11">7.21.6.11</a>                 wcsncpy_s function, <a href="#K.3.9.2.1.2">K.3.9.2.1.2</a>
26796 vscanf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                    wcsnlen_s function, <a href="#K.3.9.2.4.1">K.3.9.2.4.1</a>
26797      <a href="#K.3.5.3.14">K.3.5.3.14</a>                                              wcspbrk function, <a href="#7.28.4.5.3">7.28.4.5.3</a>
26798 vsnprintf function, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.12">7.21.6.12</a>,                     wcsrchr function, <a href="#7.28.4.5.4">7.28.4.5.4</a>
26799      <a href="#K.3.5.3.12">K.3.5.3.12</a>                                              wcsrtombs function, <a href="#7.28.6.4.2">7.28.6.4.2</a>, <a href="#K.3.9.3.2">K.3.9.3.2</a>
26800 vsnprintf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                 wcsrtombs_s function, <a href="#K.3.9.3.2">K.3.9.3.2</a>, <a href="#K.3.9.3.2.2">K.3.9.3.2.2</a>
26801      <a href="#K.3.5.3.12">K.3.5.3.12</a>, <a href="#K.3.5.3.13">K.3.5.3.13</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                      wcsspn function, <a href="#7.28.4.5.5">7.28.4.5.5</a>
26802 vsnwprintf_s function, <a href="#K.3.9.1.8">K.3.9.1.8</a>, <a href="#K.3.9.1.9">K.3.9.1.9</a>                  wcsstr function, <a href="#7.28.4.5.6">7.28.4.5.6</a>
26803 vsprintf function, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.13">7.21.6.13</a>,                      wcstod function, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>
26804      <a href="#K.3.5.3.13">K.3.5.3.13</a>                                              wcstod function, <a href="#7.28.4.1.1">7.28.4.1.1</a>
26805 vsprintf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                  wcstof function, <a href="#7.28.4.1.1">7.28.4.1.1</a>
26806      <a href="#K.3.5.3.12">K.3.5.3.12</a>, <a href="#K.3.5.3.13">K.3.5.3.13</a>, <a href="#K.3.5.3.14">K.3.5.3.14</a>                      wcstoimax function, <a href="#7.8.2.4">7.8.2.4</a>
26807 vsscanf function, <a href="#7.21.6.8">7.21.6.8</a>, <a href="#7.21.6.14">7.21.6.14</a>                        wcstok function, <a href="#7.28.4.5.7">7.28.4.5.7</a>
26808 vsscanf_s function, <a href="#K.3.5.3.9">K.3.5.3.9</a>, <a href="#K.3.5.3.11">K.3.5.3.11</a>,                   wcstok_s function, <a href="#K.3.9.2.3.1">K.3.9.2.3.1</a>
26809      <a href="#K.3.5.3.14">K.3.5.3.14</a>                                              wcstol function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,
26810 vswprintf function, <a href="#7.28.2.7">7.28.2.7</a>, <a href="#K.3.9.1.8">K.3.9.1.8</a>,                         <a href="#7.28.4.1.2">7.28.4.1.2</a>
26811      <a href="#K.3.9.1.9">K.3.9.1.9</a>                                               wcstold function, <a href="#7.28.4.1.1">7.28.4.1.1</a>
26812 vswprintf_s function, <a href="#K.3.9.1.8">K.3.9.1.8</a>, <a href="#K.3.9.1.9">K.3.9.1.9</a>                   wcstoll function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>
26813
26814 [<a name="#p677" href="p677">page 677</a>] (<a href="#Contents">Contents</a>)
26815
26816 wcstombs function, <a href="#7.22.8.2">7.22.8.2</a>, <a href="#7.28.6.4">7.28.6.4</a>                           <a href="#7.29.1">7.29.1</a>
26817 wcstombs_s function, <a href="#K.3.6.5.2">K.3.6.5.2</a>                               wmemchr function, <a href="#7.28.4.5.8">7.28.4.5.8</a>
26818 wcstoul function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.21.6.2">7.21.6.2</a>, <a href="#7.28.2.2">7.28.2.2</a>,               wmemcmp function, <a href="#7.28.4.4.5">7.28.4.4.5</a>
26819      <a href="#7.28.4.1.2">7.28.4.1.2</a>                                              wmemcpy function, <a href="#7.28.4.2.3">7.28.4.2.3</a>
26820 wcstoull function, <a href="#7.8.2.4">7.8.2.4</a>, <a href="#7.28.4.1.2">7.28.4.1.2</a>                       wmemcpy_s function, <a href="#K.3.9.2.1.3">K.3.9.2.1.3</a>
26821 wcstoumax function, <a href="#7.8.2.4">7.8.2.4</a>                                  wmemmove function, <a href="#7.28.4.2.4">7.28.4.2.4</a>
26822 wcsxfrm function, <a href="#7.28.4.4.4">7.28.4.4.4</a>                                 wmemmove_s function, <a href="#K.3.9.2.1.4">K.3.9.2.1.4</a>
26823 wctob function, <a href="#7.28.6.1.2">7.28.6.1.2</a>, <a href="#7.29.2.1">7.29.2.1</a>                         wmemset function, <a href="#7.28.4.6.2">7.28.4.6.2</a>
26824 wctomb function, <a href="#7.22.7.3">7.22.7.3</a>, <a href="#7.22.8.2">7.22.8.2</a>, <a href="#7.28.6.3">7.28.6.3</a>                wprintf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.9">7.28.2.9</a>, <a href="#7.28.2.11">7.28.2.11</a>,
26825 wctomb_s function, <a href="#K.3.6.4.1">K.3.6.4.1</a>                                    <a href="#K.3.9.1.13">K.3.9.1.13</a>
26826 wctrans function, <a href="#7.29.3.2.1">7.29.3.2.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>                     wprintf_s function, <a href="#K.3.9.1.13">K.3.9.1.13</a>
26827 wctrans_t type, <a href="#7.29.1">7.29.1</a>, <a href="#7.29.3.2.2">7.29.3.2.2</a>                           wscanf function, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.2.10">7.28.2.10</a>, <a href="#7.28.2.12">7.28.2.12</a>,
26828 wctype function, <a href="#7.29.2.2.1">7.29.2.2.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>                         <a href="#7.28.3.10">7.28.3.10</a>
26829 wctype.h header, <a href="#7.29">7.29</a>, <a href="#7.30.13">7.30.13</a>                               wscanf_s function, <a href="#K.3.9.1.12">K.3.9.1.12</a>, <a href="#K.3.9.1.14">K.3.9.1.14</a>
26830 wctype_t type, <a href="#7.29.1">7.29.1</a>, <a href="#7.29.2.2.2">7.29.2.2.2</a>
26831 weaker, <a href="#6.2.8">6.2.8</a>                                                xor macro, <a href="#7.9">7.9</a>
26832 WEOF macro, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.3.1">7.28.3.1</a>, <a href="#7.28.3.3">7.28.3.3</a>, <a href="#7.28.3.6">7.28.3.6</a>,            xor_eq macro, <a href="#7.9">7.9</a>
26833      <a href="#7.28.3.7">7.28.3.7</a>, <a href="#7.28.3.8">7.28.3.8</a>, <a href="#7.28.3.9">7.28.3.9</a>, <a href="#7.28.3.10">7.28.3.10</a>,                xtime type, <a href="#7.25.1">7.25.1</a>, <a href="#7.25.3.5">7.25.3.5</a>, <a href="#7.25.4.4">7.25.4.4</a>, <a href="#7.25.5.7">7.25.5.7</a>,
26834      <a href="#7.28.6.1.1">7.28.6.1.1</a>, <a href="#7.29.1">7.29.1</a>                                          <a href="#7.25.7.1">7.25.7.1</a>
26835 while statement, <a href="#6.8.5.1">6.8.5.1</a>                                     xtime_get function, <a href="#7.25.7.1">7.25.7.1</a>
26836 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>,
26837      <a href="#7.29.2.1.10">7.29.2.1.10</a>
26838 white-space characters, <a href="#6.4">6.4</a>
26839 wide character, <a href="#3.7.3">3.7.3</a>
26840   case mapping functions, <a href="#7.29.3.1">7.29.3.1</a>
26841      extensible, <a href="#7.29.3.2">7.29.3.2</a>
26842   classification functions, <a href="#7.29.2.1">7.29.2.1</a>
26843      extensible, <a href="#7.29.2.2">7.29.2.2</a>
26844   constant, <a href="#6.4.4.4">6.4.4.4</a>
26845   formatted input/output functions, <a href="#7.28.2">7.28.2</a>,
26846         <a href="#K.3.9.1">K.3.9.1</a>
26847   input functions, <a href="#7.21.1">7.21.1</a>
26848   input/output functions, <a href="#7.21.1">7.21.1</a>, <a href="#7.28.3">7.28.3</a>
26849   output functions, <a href="#7.21.1">7.21.1</a>
26850   single-byte conversion functions, <a href="#7.28.6.1">7.28.6.1</a>
26851 wide string, <a href="#7.1.1">7.1.1</a>
26852 wide string comparison functions, <a href="#7.28.4.4">7.28.4.4</a>
26853 wide string concatenation functions, <a href="#7.28.4.3">7.28.4.3</a>,
26854      <a href="#K.3.9.2.2">K.3.9.2.2</a>
26855 wide string copying functions, <a href="#7.28.4.2">7.28.4.2</a>, <a href="#K.3.9.2.1">K.3.9.2.1</a>
26856 wide string literal, see string literal
26857 wide string miscellaneous functions, <a href="#7.28.4.6">7.28.4.6</a>,
26858      <a href="#K.3.9.2.4">K.3.9.2.4</a>
26859 wide string numeric conversion functions, <a href="#7.8.2.4">7.8.2.4</a>,
26860      <a href="#7.28.4.1">7.28.4.1</a>
26861 wide string search functions, <a href="#7.28.4.5">7.28.4.5</a>, <a href="#K.3.9.2.3">K.3.9.2.3</a>
26862 wide-oriented stream, <a href="#7.21.2">7.21.2</a>
26863 width, <a href="#6.2.6.2">6.2.6.2</a>
26864 WINT_MAX macro, <a href="#7.20.3">7.20.3</a>
26865 WINT_MIN macro, <a href="#7.20.3">7.20.3</a>
26866 wint_t type, <a href="#7.20.3">7.20.3</a>, <a href="#7.21.6.1">7.21.6.1</a>, <a href="#7.28.1">7.28.1</a>, <a href="#7.28.2.1">7.28.2.1</a>,
26867
26868 [<a name="#p678" href="p678">page 678</a>] (<a href="#Contents">Contents</a>)
26869 </pre></body></html>