TODO
Whether each nonempty sequence of white-space characters other than new-line is retained or replaced by one space character in translation phase 3 (5.1.1.2).
non-newline whitespace is replaced by the space ' '
8bits
Which of signed char or unsigned char has the same range, representation, and behavior as "plain" char
char is an unsigned type.
None exist currently.
Whether signed integer types are represented using sign and magnitude, two’s complement, or ones’ complement, and whether the extraordinary value is a trap representation or an ordinary value (6.2.6.2).
Two's complement with no trap values.
The rank of any extended integer type relative to another extended integer type with the same precision (6.3.1.1).
No extended integers exist.
The result of, or the signal raised by, converting an integer to a signed integer type when the value cannot be represented in an object of that type (6.3.1.3).
No signal is raised (TODO)
Right shift on a signed integer type will result in an Arithmatic shift where the sign bit has it's position preserved.
TODO
The bit patterns are preserved.
Internal types of size_t, uintptr_t:
unsigned intfor 32bit target.unsigned longfor 64bit posix-based target.unsigned long longfor 64bit windows-based target.
Internal types of ptrdiff_t, intptr_t:
intfor 32bit target.longfor 64bit posix-based target.long longfor 64bit windows-based target.
Whether a "plain" int bit-field is treated as a signed int bit-field or as an unsigned int bit-field (6.7.2, 6.7.2.1).
By default, unsigned int.
signed long, signed long long, unsigned long, unsigned long long
No.
No.
Enumerated types are all int.
The load and store cannot be split or replicated, unions and structs cannot be volatile.
char *envp[] is allowed in main
Dollar sign $ is allowed anywhere in an identifier
All characters in identifiers (with or without external linkage) are significant.
A function identifier, or the identifier of an object the declaration of which contains the keyword extern, has file scope.
string literals are immutable and thus are allowed to alias if they match.
No additional arithmatic types.
A pointer to an object or to void may be cast to a pointer to a function, allowing data to be invoked as a function (6.5.4).
A pointer to a function may be cast to a pointer to an object or to void, allowing a function to be inspected or modified (for example, by a debugger) (6.5.4).
There may be more than one external definition for the identifier of an object, with or without the explicit use of the keyword extern; if the definitions disagree, or more than one is initialized, this compilation will fail.
1 Macro names that do not begin with an underscore, describing the translation and execution environments, are defined by the implementation before translation begins (6.10.8).