In C, a trap representation refers to a bit pattern that fits within the memory allocation of a data type but triggers undefined behavior when interpreted as a value of that type.
One common example of a trap representation is a signaling NaN (Not a Number) in floating-point types. The C99 standard explicitly defines the behavior of signaling NaNs as undefined, even though their behavior is well-specified in other standards.
Trap representations are also applicable to C . However, it's important to note that C introduces additional type safety mechanisms that may prevent some operations that would result in undefined behavior in C.
In the code snippet provided:
float f = 3.5; int *pi = (int*)&f;
Assuming sizeof(int) == sizeof(float), f and *pi do not have the same binary representation. The conversion from a float to an int using a pointer cast results in undefined behavior due to pointer-aliasing rules. To correctly extract the integer representation of a float, the following approach should be used:
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
While this code has unspecified behavior in C99, it still produces a valid integer value that is not a trap representation.
The above is the detailed content of What are Trap Representations in C and How Do They Differ in C ?. For more information, please follow other related articles on the PHP Chinese website!