请考虑以下代码段:
typedef struct
{
float x;
} str_t;
unsigned char data[4] = {0xFF,0xFF,0xFF,0xFF};
str_t st = *(str_t*)data;
str_t.x
中的值等于NaN
。
你们中的任何一个人都可以详细说明,为什么这种铸造被认为是未定义的?
假设: float的长度等于4个字节
编辑:
如上所述,NaN不是“C”定义的东西,结果是在GCC + GDB下获得的。 str_t.x
的确切结果是相等的(根据Eclipse GDP插件)-nan(0x7fffff)