[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A conforming implementation of ISO C is required to document its choice of behavior in each of the areas that are designated "implementation defined." The following lists all such areas, along with the section number from the ISO/IEC 9899:1999 standard.
Diagnostics consist of all the output sent to stderr by GCC.
The behavior of these points are dependent on the implementation of the C library, and are not defined by GCC itself.
For internal names, all characters are significant. For external names, the number of significant characters are defined by the linker; for almost all targets, all characters are significant.
char
object into which has been stored any
character other than a member of the basic execution character set (6.2.5).
signed char
or unsigned char
has the same range,
representation, and behavior as "plain" char
(6.2.5, 6.3.1.1).
GCC supports only two's complement integer types, and all bit patterns are ordinary values.
<math.h>
and <complex.h>
that return floating-point
results (5.2.4.2.2).
FLT_ROUNDS
(5.2.4.2.2).
FLT_EVAL_METHOD
(5.2.4.2.2).
FP_CONTRACT
pragma (6.5).
FENV_ACCESS
pragma (7.6.1).
FP_CONTRACT
pragma (7.12.2).
A cast from pointer to integer discards most-significant bits if the pointer representation is larger than the integer type, sign-extends(2) if the pointer representation is smaller than the integer type, otherwise the bits are unchanged.
A cast from integer to pointer discards most-significant bits if the pointer representation is smaller than the integer type, extends according to the signedness of the integer type if the pointer representation is larger than the integer type, otherwise the bits are unchanged.
When casting from pointer to integer and back again, the resulting pointer must reference the same object as the original pointer, otherwise the behavior is undefined. That is, one may not use integer arithmetic to avoid the undefined behavior of pointer arithmetic as proscribed in 6.5.6/8.
register
storage-class specifier are effective (6.7.1).
The register
specifier affects code generation only in these ways:
register
storage-class specifier; if register
is specified, the variable
may have a shorter lifespan than the code would indicate and may never
be placed in memory.
setjmp
doesn't save the registers in
all circumstances. In those cases, GCC doesn't allocate any variables
in registers unless they are marked register
.
GCC will not inline any functions if the `-fno-inline' option is used or if `-O0' is used. Otherwise, GCC may still be unable to inline a function for many reasons; the `-Winline' option may be used to determine if a function has not been inlined and why not.
signed int
bit-field or as an unsigned int
bit-field (6.7.2, 6.7.2.1).
_Bool
, signed int
,
and unsigned int
(6.7.2.1).
#include
directive are combined into a header
name (6.10.2).
#include
processing (6.10.2).
GCC imposes a limit of 200 nested #include
s.
STDC #pragma
directive (6.10.6).
__DATE__
and __TIME__
when
respectively, the date and time of translation are not available (6.10.8).
If the date and time are not available, __DATE__
expands to
"??? ?? ????"
and __TIME__
expands to
"??:??:??"
.
The behavior of these points are dependent on the implementation of the C library, and are not defined by GCC itself.
<float.h>
, <limits.h>
, and <stdint.h>
(5.2.4.2, 7.18.2, 7.18.3).
The behavior of these points are dependent on the implementation of the C library, and are not defined by GCC itself.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |