0
|
1 @c Copyright (C) 2001, 2002, 2003, 2004, 2006, 2008
|
|
2 @c Free Software Foundation, Inc.
|
|
3 @c This is part of the GCC manual.
|
|
4 @c For copying conditions, see the file gcc.texi.
|
|
5
|
|
6 @node C Implementation
|
|
7 @chapter C Implementation-defined behavior
|
|
8 @cindex implementation-defined behavior, C language
|
|
9
|
|
10 A conforming implementation of ISO C is required to document its
|
|
11 choice of behavior in each of the areas that are designated
|
|
12 ``implementation defined''. The following lists all such areas,
|
|
13 along with the section numbers from the ISO/IEC 9899:1990 and ISO/IEC
|
|
14 9899:1999 standards. Some areas are only implementation-defined in
|
|
15 one version of the standard.
|
|
16
|
|
17 Some choices depend on the externally determined ABI for the platform
|
|
18 (including standard character encodings) which GCC follows; these are
|
|
19 listed as ``determined by ABI'' below. @xref{Compatibility, , Binary
|
|
20 Compatibility}, and @uref{http://gcc.gnu.org/readings.html}. Some
|
|
21 choices are documented in the preprocessor manual.
|
|
22 @xref{Implementation-defined behavior, , Implementation-defined
|
|
23 behavior, cpp, The C Preprocessor}. Some choices are made by the
|
|
24 library and operating system (or other environment when compiling for
|
|
25 a freestanding environment); refer to their documentation for details.
|
|
26
|
|
27 @menu
|
|
28 * Translation implementation::
|
|
29 * Environment implementation::
|
|
30 * Identifiers implementation::
|
|
31 * Characters implementation::
|
|
32 * Integers implementation::
|
|
33 * Floating point implementation::
|
|
34 * Arrays and pointers implementation::
|
|
35 * Hints implementation::
|
|
36 * Structures unions enumerations and bit-fields implementation::
|
|
37 * Qualifiers implementation::
|
|
38 * Declarators implementation::
|
|
39 * Statements implementation::
|
|
40 * Preprocessing directives implementation::
|
|
41 * Library functions implementation::
|
|
42 * Architecture implementation::
|
|
43 * Locale-specific behavior implementation::
|
|
44 @end menu
|
|
45
|
|
46 @node Translation implementation
|
|
47 @section Translation
|
|
48
|
|
49 @itemize @bullet
|
|
50 @item
|
|
51 @cite{How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99 5.1.1.3).}
|
|
52
|
|
53 Diagnostics consist of all the output sent to stderr by GCC@.
|
|
54
|
|
55 @item
|
|
56 @cite{Whether each nonempty sequence of white-space characters other than
|
|
57 new-line is retained or replaced by one space character in translation
|
|
58 phase 3 (C90 and C99 5.1.1.2).}
|
|
59
|
|
60 @xref{Implementation-defined behavior, , Implementation-defined
|
|
61 behavior, cpp, The C Preprocessor}.
|
|
62
|
|
63 @end itemize
|
|
64
|
|
65 @node Environment implementation
|
|
66 @section Environment
|
|
67
|
|
68 The behavior of most of these points are dependent on the implementation
|
|
69 of the C library, and are not defined by GCC itself.
|
|
70
|
|
71 @itemize @bullet
|
|
72 @item
|
|
73 @cite{The mapping between physical source file multibyte characters
|
|
74 and the source character set in translation phase 1 (C90 and C99 5.1.1.2).}
|
|
75
|
|
76 @xref{Implementation-defined behavior, , Implementation-defined
|
|
77 behavior, cpp, The C Preprocessor}.
|
|
78
|
|
79 @end itemize
|
|
80
|
|
81 @node Identifiers implementation
|
|
82 @section Identifiers
|
|
83
|
|
84 @itemize @bullet
|
|
85 @item
|
|
86 @cite{Which additional multibyte characters may appear in identifiers
|
|
87 and their correspondence to universal character names (C99 6.4.2).}
|
|
88
|
|
89 @xref{Implementation-defined behavior, , Implementation-defined
|
|
90 behavior, cpp, The C Preprocessor}.
|
|
91
|
|
92 @item
|
|
93 @cite{The number of significant initial characters in an identifier
|
|
94 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).}
|
|
95
|
|
96 For internal names, all characters are significant. For external names,
|
|
97 the number of significant characters are defined by the linker; for
|
|
98 almost all targets, all characters are significant.
|
|
99
|
|
100 @item
|
|
101 @cite{Whether case distinctions are significant in an identifier with
|
|
102 external linkage (C90 6.1.2).}
|
|
103
|
|
104 This is a property of the linker. C99 requires that case distinctions
|
|
105 are always significant in identifiers with external linkage and
|
|
106 systems without this property are not supported by GCC@.
|
|
107
|
|
108 @end itemize
|
|
109
|
|
110 @node Characters implementation
|
|
111 @section Characters
|
|
112
|
|
113 @itemize @bullet
|
|
114 @item
|
|
115 @cite{The number of bits in a byte (C90 3.4, C99 3.6).}
|
|
116
|
|
117 Determined by ABI@.
|
|
118
|
|
119 @item
|
|
120 @cite{The values of the members of the execution character set (C90
|
|
121 and C99 5.2.1).}
|
|
122
|
|
123 Determined by ABI@.
|
|
124
|
|
125 @item
|
|
126 @cite{The unique value of the member of the execution character set produced
|
|
127 for each of the standard alphabetic escape sequences (C90 and C99 5.2.2).}
|
|
128
|
|
129 Determined by ABI@.
|
|
130
|
|
131 @item
|
|
132 @cite{The value of a @code{char} object into which has been stored any
|
|
133 character other than a member of the basic execution character set
|
|
134 (C90 6.1.2.5, C99 6.2.5).}
|
|
135
|
|
136 Determined by ABI@.
|
|
137
|
|
138 @item
|
|
139 @cite{Which of @code{signed char} or @code{unsigned char} has the same
|
|
140 range, representation, and behavior as ``plain'' @code{char} (C90
|
|
141 6.1.2.5, C90 6.2.1.1, C99 6.2.5, C99 6.3.1.1).}
|
|
142
|
|
143 @opindex fsigned-char
|
|
144 @opindex funsigned-char
|
|
145 Determined by ABI@. The options @option{-funsigned-char} and
|
|
146 @option{-fsigned-char} change the default. @xref{C Dialect Options, ,
|
|
147 Options Controlling C Dialect}.
|
|
148
|
|
149 @item
|
|
150 @cite{The mapping of members of the source character set (in character
|
|
151 constants and string literals) to members of the execution character
|
|
152 set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).}
|
|
153
|
|
154 Determined by ABI@.
|
|
155
|
|
156 @item
|
|
157 @cite{The value of an integer character constant containing more than one
|
|
158 character or containing a character or escape sequence that does not map
|
|
159 to a single-byte execution character (C90 6.1.3.4, C99 6.4.4.4).}
|
|
160
|
|
161 @xref{Implementation-defined behavior, , Implementation-defined
|
|
162 behavior, cpp, The C Preprocessor}.
|
|
163
|
|
164 @item
|
|
165 @cite{The value of a wide character constant containing more than one
|
|
166 multibyte character, or containing a multibyte character or escape
|
|
167 sequence not represented in the extended execution character set (C90
|
|
168 6.1.3.4, C99 6.4.4.4).}
|
|
169
|
|
170 @xref{Implementation-defined behavior, , Implementation-defined
|
|
171 behavior, cpp, The C Preprocessor}.
|
|
172
|
|
173 @item
|
|
174 @cite{The current locale used to convert a wide character constant consisting
|
|
175 of a single multibyte character that maps to a member of the extended
|
|
176 execution character set into a corresponding wide character code (C90
|
|
177 6.1.3.4, C99 6.4.4.4).}
|
|
178
|
|
179 @xref{Implementation-defined behavior, , Implementation-defined
|
|
180 behavior, cpp, The C Preprocessor}.
|
|
181
|
|
182 @item
|
|
183 @cite{The current locale used to convert a wide string literal into
|
|
184 corresponding wide character codes (C90 6.1.4, C99 6.4.5).}
|
|
185
|
|
186 @xref{Implementation-defined behavior, , Implementation-defined
|
|
187 behavior, cpp, The C Preprocessor}.
|
|
188
|
|
189 @item
|
|
190 @cite{The value of a string literal containing a multibyte character or escape
|
|
191 sequence not represented in the execution character set (C90 6.1.4, C99 6.4.5).}
|
|
192
|
|
193 @xref{Implementation-defined behavior, , Implementation-defined
|
|
194 behavior, cpp, The C Preprocessor}.
|
|
195 @end itemize
|
|
196
|
|
197 @node Integers implementation
|
|
198 @section Integers
|
|
199
|
|
200 @itemize @bullet
|
|
201 @item
|
|
202 @cite{Any extended integer types that exist in the implementation (C99 6.2.5).}
|
|
203
|
|
204 GCC does not support any extended integer types.
|
|
205 @c The __mode__ attribute might create types of precisions not
|
|
206 @c otherwise supported, but the syntax isn't right for use everywhere
|
|
207 @c the standard type names might be used. Predefined typedefs should
|
|
208 @c be used if any extended integer types are to be defined. The
|
|
209 @c __int128_t and __uint128_t typedefs are not extended integer types
|
|
210 @c as they are generally longer than the ABI-specified intmax_t.
|
|
211
|
|
212 @item
|
|
213 @cite{Whether signed integer types are represented using sign and magnitude,
|
|
214 two's complement, or one's complement, and whether the extraordinary value
|
|
215 is a trap representation or an ordinary value (C99 6.2.6.2).}
|
|
216
|
|
217 GCC supports only two's complement integer types, and all bit patterns
|
|
218 are ordinary values.
|
|
219
|
|
220 @item
|
|
221 @cite{The rank of any extended integer type relative to another extended
|
|
222 integer type with the same precision (C99 6.3.1.1).}
|
|
223
|
|
224 GCC does not support any extended integer types.
|
|
225 @c If it did, there would only be one of each precision and signedness.
|
|
226
|
|
227 @item
|
|
228 @cite{The result of, or the signal raised by, converting an integer to a
|
|
229 signed integer type when the value cannot be represented in an object of
|
|
230 that type (C90 6.2.1.2, C99 6.3.1.3).}
|
|
231
|
|
232 For conversion to a type of width @math{N}, the value is reduced
|
|
233 modulo @math{2^N} to be within range of the type; no signal is raised.
|
|
234
|
|
235 @item
|
|
236 @cite{The results of some bitwise operations on signed integers (C90
|
|
237 6.3, C99 6.5).}
|
|
238
|
|
239 Bitwise operators act on the representation of the value including
|
|
240 both the sign and value bits, where the sign bit is considered
|
|
241 immediately above the highest-value value bit. Signed @samp{>>} acts
|
|
242 on negative numbers by sign extension.
|
|
243
|
|
244 GCC does not use the latitude given in C99 only to treat certain
|
|
245 aspects of signed @samp{<<} as undefined, but this is subject to
|
|
246 change.
|
|
247
|
|
248 @item
|
|
249 @cite{The sign of the remainder on integer division (C90 6.3.5).}
|
|
250
|
|
251 GCC always follows the C99 requirement that the result of division is
|
|
252 truncated towards zero.
|
|
253
|
|
254 @end itemize
|
|
255
|
|
256 @node Floating point implementation
|
|
257 @section Floating point
|
|
258
|
|
259 @itemize @bullet
|
|
260 @item
|
|
261 @cite{The accuracy of the floating-point operations and of the library
|
|
262 functions in @code{<math.h>} and @code{<complex.h>} that return floating-point
|
|
263 results (C90 and C99 5.2.4.2.2).}
|
|
264
|
|
265 The accuracy is unknown.
|
|
266
|
|
267 @item
|
|
268 @cite{The rounding behaviors characterized by non-standard values
|
|
269 of @code{FLT_ROUNDS} @gol
|
|
270 (C90 and C99 5.2.4.2.2).}
|
|
271
|
|
272 GCC does not use such values.
|
|
273
|
|
274 @item
|
|
275 @cite{The evaluation methods characterized by non-standard negative
|
|
276 values of @code{FLT_EVAL_METHOD} (C99 5.2.4.2.2).}
|
|
277
|
|
278 GCC does not use such values.
|
|
279
|
|
280 @item
|
|
281 @cite{The direction of rounding when an integer is converted to a
|
|
282 floating-point number that cannot exactly represent the original
|
|
283 value (C90 6.2.1.3, C99 6.3.1.4).}
|
|
284
|
|
285 C99 Annex F is followed.
|
|
286
|
|
287 @item
|
|
288 @cite{The direction of rounding when a floating-point number is
|
|
289 converted to a narrower floating-point number (C90 6.2.1.4, C99
|
|
290 6.3.1.5).}
|
|
291
|
|
292 C99 Annex F is followed.
|
|
293
|
|
294 @item
|
|
295 @cite{How the nearest representable value or the larger or smaller
|
|
296 representable value immediately adjacent to the nearest representable
|
|
297 value is chosen for certain floating constants (C90 6.1.3.1, C99
|
|
298 6.4.4.2).}
|
|
299
|
|
300 C99 Annex F is followed.
|
|
301
|
|
302 @item
|
|
303 @cite{Whether and how floating expressions are contracted when not
|
|
304 disallowed by the @code{FP_CONTRACT} pragma (C99 6.5).}
|
|
305
|
|
306 Expressions are currently only contracted if
|
|
307 @option{-funsafe-math-optimizations} or @option{-ffast-math} are used.
|
|
308 This is subject to change.
|
|
309
|
|
310 @item
|
|
311 @cite{The default state for the @code{FENV_ACCESS} pragma (C99 7.6.1).}
|
|
312
|
|
313 This pragma is not implemented, but the default is to ``off'' unless
|
|
314 @option{-frounding-math} is used in which case it is ``on''.
|
|
315
|
|
316 @item
|
|
317 @cite{Additional floating-point exceptions, rounding modes, environments,
|
|
318 and classifications, and their macro names (C99 7.6, C99 7.12).}
|
|
319
|
|
320 This is dependent on the implementation of the C library, and is not
|
|
321 defined by GCC itself.
|
|
322
|
|
323 @item
|
|
324 @cite{The default state for the @code{FP_CONTRACT} pragma (C99 7.12.2).}
|
|
325
|
|
326 This pragma is not implemented. Expressions are currently only
|
|
327 contracted if @option{-funsafe-math-optimizations} or
|
|
328 @option{-ffast-math} are used. This is subject to change.
|
|
329
|
|
330 @item
|
|
331 @cite{Whether the ``inexact'' floating-point exception can be raised
|
|
332 when the rounded result actually does equal the mathematical result
|
|
333 in an IEC 60559 conformant implementation (C99 F.9).}
|
|
334
|
|
335 This is dependent on the implementation of the C library, and is not
|
|
336 defined by GCC itself.
|
|
337
|
|
338 @item
|
|
339 @cite{Whether the ``underflow'' (and ``inexact'') floating-point
|
|
340 exception can be raised when a result is tiny but not inexact in an
|
|
341 IEC 60559 conformant implementation (C99 F.9).}
|
|
342
|
|
343 This is dependent on the implementation of the C library, and is not
|
|
344 defined by GCC itself.
|
|
345
|
|
346 @end itemize
|
|
347
|
|
348 @node Arrays and pointers implementation
|
|
349 @section Arrays and pointers
|
|
350
|
|
351 @itemize @bullet
|
|
352 @item
|
|
353 @cite{The result of converting a pointer to an integer or
|
|
354 vice versa (C90 6.3.4, C99 6.3.2.3).}
|
|
355
|
|
356 A cast from pointer to integer discards most-significant bits if the
|
|
357 pointer representation is larger than the integer type,
|
|
358 sign-extends@footnote{Future versions of GCC may zero-extend, or use
|
|
359 a target-defined @code{ptr_extend} pattern. Do not rely on sign extension.}
|
|
360 if the pointer representation is smaller than the integer type, otherwise
|
|
361 the bits are unchanged.
|
|
362 @c ??? We've always claimed that pointers were unsigned entities.
|
|
363 @c Shouldn't we therefore be doing zero-extension? If so, the bug
|
|
364 @c is in convert_to_integer, where we call type_for_size and request
|
|
365 @c a signed integral type. On the other hand, it might be most useful
|
|
366 @c for the target if we extend according to POINTERS_EXTEND_UNSIGNED.
|
|
367
|
|
368 A cast from integer to pointer discards most-significant bits if the
|
|
369 pointer representation is smaller than the integer type, extends according
|
|
370 to the signedness of the integer type if the pointer representation
|
|
371 is larger than the integer type, otherwise the bits are unchanged.
|
|
372
|
|
373 When casting from pointer to integer and back again, the resulting
|
|
374 pointer must reference the same object as the original pointer, otherwise
|
|
375 the behavior is undefined. That is, one may not use integer arithmetic to
|
|
376 avoid the undefined behavior of pointer arithmetic as proscribed in
|
|
377 C99 6.5.6/8.
|
|
378
|
|
379 @item
|
|
380 @cite{The size of the result of subtracting two pointers to elements
|
|
381 of the same array (C90 6.3.6, C99 6.5.6).}
|
|
382
|
|
383 The value is as specified in the standard and the type is determined
|
|
384 by the ABI@.
|
|
385
|
|
386 @end itemize
|
|
387
|
|
388 @node Hints implementation
|
|
389 @section Hints
|
|
390
|
|
391 @itemize @bullet
|
|
392 @item
|
|
393 @cite{The extent to which suggestions made by using the @code{register}
|
|
394 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).}
|
|
395
|
|
396 The @code{register} specifier affects code generation only in these ways:
|
|
397
|
|
398 @itemize @bullet
|
|
399 @item
|
|
400 When used as part of the register variable extension, see
|
|
401 @ref{Explicit Reg Vars}.
|
|
402
|
|
403 @item
|
|
404 When @option{-O0} is in use, the compiler allocates distinct stack
|
|
405 memory for all variables that do not have the @code{register}
|
|
406 storage-class specifier; if @code{register} is specified, the variable
|
|
407 may have a shorter lifespan than the code would indicate and may never
|
|
408 be placed in memory.
|
|
409
|
|
410 @item
|
|
411 On some rare x86 targets, @code{setjmp} doesn't save the registers in
|
|
412 all circumstances. In those cases, GCC doesn't allocate any variables
|
|
413 in registers unless they are marked @code{register}.
|
|
414
|
|
415 @end itemize
|
|
416
|
|
417 @item
|
|
418 @cite{The extent to which suggestions made by using the inline function
|
|
419 specifier are effective (C99 6.7.4).}
|
|
420
|
|
421 GCC will not inline any functions if the @option{-fno-inline} option is
|
|
422 used or if @option{-O0} is used. Otherwise, GCC may still be unable to
|
|
423 inline a function for many reasons; the @option{-Winline} option may be
|
|
424 used to determine if a function has not been inlined and why not.
|
|
425
|
|
426 @end itemize
|
|
427
|
|
428 @node Structures unions enumerations and bit-fields implementation
|
|
429 @section Structures, unions, enumerations, and bit-fields
|
|
430
|
|
431 @itemize @bullet
|
|
432 @item
|
|
433 @cite{A member of a union object is accessed using a member of a
|
|
434 different type (C90 6.3.2.3).}
|
|
435
|
|
436 The relevant bytes of the representation of the object are treated as
|
|
437 an object of the type used for the access. @xref{Type-punning}. This
|
|
438 may be a trap representation.
|
|
439
|
|
440 @item
|
|
441 @cite{Whether a ``plain'' @code{int} bit-field is treated as a
|
|
442 @code{signed int} bit-field or as an @code{unsigned int} bit-field
|
|
443 (C90 6.5.2, C90 6.5.2.1, C99 6.7.2, C99 6.7.2.1).}
|
|
444
|
|
445 @opindex funsigned-bitfields
|
|
446 By default it is treated as @code{signed int} but this may be changed
|
|
447 by the @option{-funsigned-bitfields} option.
|
|
448
|
|
449 @item
|
|
450 @cite{Allowable bit-field types other than @code{_Bool}, @code{signed int},
|
|
451 and @code{unsigned int} (C99 6.7.2.1).}
|
|
452
|
|
453 No other types are permitted in strictly conforming mode.
|
|
454 @c Would it be better to restrict the pedwarn for other types to C90
|
|
455 @c mode and document the other types for C99 mode?
|
|
456
|
|
457 @item
|
|
458 @cite{Whether a bit-field can straddle a storage-unit boundary (C90
|
|
459 6.5.2.1, C99 6.7.2.1).}
|
|
460
|
|
461 Determined by ABI@.
|
|
462
|
|
463 @item
|
|
464 @cite{The order of allocation of bit-fields within a unit (C90
|
|
465 6.5.2.1, C99 6.7.2.1).}
|
|
466
|
|
467 Determined by ABI@.
|
|
468
|
|
469 @item
|
|
470 @cite{The alignment of non-bit-field members of structures (C90
|
|
471 6.5.2.1, C99 6.7.2.1).}
|
|
472
|
|
473 Determined by ABI@.
|
|
474
|
|
475 @item
|
|
476 @cite{The integer type compatible with each enumerated type (C90
|
|
477 6.5.2.2, C99 6.7.2.2).}
|
|
478
|
|
479 @opindex fshort-enums
|
|
480 Normally, the type is @code{unsigned int} if there are no negative
|
|
481 values in the enumeration, otherwise @code{int}. If
|
|
482 @option{-fshort-enums} is specified, then if there are negative values
|
|
483 it is the first of @code{signed char}, @code{short} and @code{int}
|
|
484 that can represent all the values, otherwise it is the first of
|
|
485 @code{unsigned char}, @code{unsigned short} and @code{unsigned int}
|
|
486 that can represent all the values.
|
|
487 @c On a few unusual targets with 64-bit int, this doesn't agree with
|
|
488 @c the code and one of the types accessed via mode attributes (which
|
|
489 @c are not currently considered extended integer types) may be used.
|
|
490 @c If these types are made extended integer types, it would still be
|
|
491 @c the case that -fshort-enums stops the implementation from
|
|
492 @c conforming to C90 on those targets.
|
|
493
|
|
494 On some targets, @option{-fshort-enums} is the default; this is
|
|
495 determined by the ABI@.
|
|
496
|
|
497 @end itemize
|
|
498
|
|
499 @node Qualifiers implementation
|
|
500 @section Qualifiers
|
|
501
|
|
502 @itemize @bullet
|
|
503 @item
|
|
504 @cite{What constitutes an access to an object that has volatile-qualified
|
|
505 type (C90 6.5.3, C99 6.7.3).}
|
|
506
|
|
507 Such an object is normally accessed by pointers and used for accessing
|
|
508 hardware. In most expressions, it is intuitively obvious what is a read
|
|
509 and what is a write. For example
|
|
510
|
|
511 @smallexample
|
|
512 volatile int *dst = @var{somevalue};
|
|
513 volatile int *src = @var{someothervalue};
|
|
514 *dst = *src;
|
|
515 @end smallexample
|
|
516
|
|
517 @noindent
|
|
518 will cause a read of the volatile object pointed to by @var{src} and store the
|
|
519 value into the volatile object pointed to by @var{dst}. There is no
|
|
520 guarantee that these reads and writes are atomic, especially for objects
|
|
521 larger than @code{int}.
|
|
522
|
|
523 However, if the volatile storage is not being modified, and the value of
|
|
524 the volatile storage is not used, then the situation is less obvious.
|
|
525 For example
|
|
526
|
|
527 @smallexample
|
|
528 volatile int *src = @var{somevalue};
|
|
529 *src;
|
|
530 @end smallexample
|
|
531
|
|
532 According to the C standard, such an expression is an rvalue whose type
|
|
533 is the unqualified version of its original type, i.e. @code{int}. Whether
|
|
534 GCC interprets this as a read of the volatile object being pointed to or
|
|
535 only as a request to evaluate the expression for its side-effects depends
|
|
536 on this type.
|
|
537
|
|
538 If it is a scalar type, or on most targets an aggregate type whose only
|
|
539 member object is of a scalar type, or a union type whose member objects
|
|
540 are of scalar types, the expression is interpreted by GCC as a read of
|
|
541 the volatile object; in the other cases, the expression is only evaluated
|
|
542 for its side-effects.
|
|
543
|
|
544 @end itemize
|
|
545
|
|
546 @node Declarators implementation
|
|
547 @section Declarators
|
|
548
|
|
549 @itemize @bullet
|
|
550 @item
|
|
551 @cite{The maximum number of declarators that may modify an arithmetic,
|
|
552 structure or union type (C90 6.5.4).}
|
|
553
|
|
554 GCC is only limited by available memory.
|
|
555
|
|
556 @end itemize
|
|
557
|
|
558 @node Statements implementation
|
|
559 @section Statements
|
|
560
|
|
561 @itemize @bullet
|
|
562 @item
|
|
563 @cite{The maximum number of @code{case} values in a @code{switch}
|
|
564 statement (C90 6.6.4.2).}
|
|
565
|
|
566 GCC is only limited by available memory.
|
|
567
|
|
568 @end itemize
|
|
569
|
|
570 @node Preprocessing directives implementation
|
|
571 @section Preprocessing directives
|
|
572
|
|
573 @xref{Implementation-defined behavior, , Implementation-defined
|
|
574 behavior, cpp, The C Preprocessor}, for details of these aspects of
|
|
575 implementation-defined behavior.
|
|
576
|
|
577 @itemize @bullet
|
|
578 @item
|
|
579 @cite{How sequences in both forms of header names are mapped to headers
|
|
580 or external source file names (C90 6.1.7, C99 6.4.7).}
|
|
581
|
|
582 @item
|
|
583 @cite{Whether the value of a character constant in a constant expression
|
|
584 that controls conditional inclusion matches the value of the same character
|
|
585 constant in the execution character set (C90 6.8.1, C99 6.10.1).}
|
|
586
|
|
587 @item
|
|
588 @cite{Whether the value of a single-character character constant in a
|
|
589 constant expression that controls conditional inclusion may have a
|
|
590 negative value (C90 6.8.1, C99 6.10.1).}
|
|
591
|
|
592 @item
|
|
593 @cite{The places that are searched for an included @samp{<>} delimited
|
|
594 header, and how the places are specified or the header is
|
|
595 identified (C90 6.8.2, C99 6.10.2).}
|
|
596
|
|
597 @item
|
|
598 @cite{How the named source file is searched for in an included @samp{""}
|
|
599 delimited header (C90 6.8.2, C99 6.10.2).}
|
|
600
|
|
601 @item
|
|
602 @cite{The method by which preprocessing tokens (possibly resulting from
|
|
603 macro expansion) in a @code{#include} directive are combined into a header
|
|
604 name (C90 6.8.2, C99 6.10.2).}
|
|
605
|
|
606 @item
|
|
607 @cite{The nesting limit for @code{#include} processing (C90 6.8.2, C99
|
|
608 6.10.2).}
|
|
609
|
|
610 @item
|
|
611 @cite{Whether the @samp{#} operator inserts a @samp{\} character before
|
|
612 the @samp{\} character that begins a universal character name in a
|
|
613 character constant or string literal (C99 6.10.3.2).}
|
|
614
|
|
615 @item
|
|
616 @cite{The behavior on each recognized non-@code{STDC #pragma}
|
|
617 directive (C90 6.8.6, C99 6.10.6).}
|
|
618
|
|
619 @xref{Pragmas, , Pragmas, cpp, The C Preprocessor}, for details of
|
|
620 pragmas accepted by GCC on all targets. @xref{Pragmas, , Pragmas
|
|
621 Accepted by GCC}, for details of target-specific pragmas.
|
|
622
|
|
623 @item
|
|
624 @cite{The definitions for @code{__DATE__} and @code{__TIME__} when
|
|
625 respectively, the date and time of translation are not available (C90
|
|
626 6.8.8, C99 6.10.8).}
|
|
627
|
|
628 @end itemize
|
|
629
|
|
630 @node Library functions implementation
|
|
631 @section Library functions
|
|
632
|
|
633 The behavior of most of these points are dependent on the implementation
|
|
634 of the C library, and are not defined by GCC itself.
|
|
635
|
|
636 @itemize @bullet
|
|
637 @item
|
|
638 @cite{The null pointer constant to which the macro @code{NULL} expands
|
|
639 (C90 7.1.6, C99 7.17).}
|
|
640
|
|
641 In @code{<stddef.h>}, @code{NULL} expands to @code{((void *)0)}. GCC
|
|
642 does not provide the other headers which define @code{NULL} and some
|
|
643 library implementations may use other definitions in those headers.
|
|
644
|
|
645 @end itemize
|
|
646
|
|
647 @node Architecture implementation
|
|
648 @section Architecture
|
|
649
|
|
650 @itemize @bullet
|
|
651 @item
|
|
652 @cite{The values or expressions assigned to the macros specified in the
|
|
653 headers @code{<float.h>}, @code{<limits.h>}, and @code{<stdint.h>}
|
|
654 (C90 and C99 5.2.4.2, C99 7.18.2, C99 7.18.3).}
|
|
655
|
|
656 Determined by ABI@.
|
|
657
|
|
658 @item
|
|
659 @cite{The number, order, and encoding of bytes in any object
|
|
660 (when not explicitly specified in this International Standard) (C99 6.2.6.1).}
|
|
661
|
|
662 Determined by ABI@.
|
|
663
|
|
664 @item
|
|
665 @cite{The value of the result of the @code{sizeof} operator (C90
|
|
666 6.3.3.4, C99 6.5.3.4).}
|
|
667
|
|
668 Determined by ABI@.
|
|
669
|
|
670 @end itemize
|
|
671
|
|
672 @node Locale-specific behavior implementation
|
|
673 @section Locale-specific behavior
|
|
674
|
|
675 The behavior of these points are dependent on the implementation
|
|
676 of the C library, and are not defined by GCC itself.
|