如果我有以下代码:
#include <stdint.h>
union data_t {
int8_t sbyte;
uint8_t ubyte;
int16_t sint;
uint16_t uint;
int32_t slong;
uint32_t ulong;
int64_t sint64;
uint64_t uint64;
float qsingle;
double qdouble;
long double qfloat;
};
union data_t *data;
data = malloc(sizeof(union data_t));
data.uint = 2534;
在这里,我将 uint16_t 类型分配为 42,我可以安全地访问比我分配的数据类型更小的数据类型(例如 uint8_t),并安全地进行类型转换(到 230)?这个答案(Accessing inactive union member and undefined behavior?)似乎说它在C11中是允许的,但我不确定这在C99中是否合法。