Другими словами, согласно стандарту C , этот код безопасен? (Предположим, что uint8_t
- один байт)
void detectEndianness(void){
union {
uint16_t w;
uint8_t b;
} a;
a.w = 0x00FFU;
if (a.b == 0xFFU) {
puts("Little endian.");
}
else if (a.b == 0U) {
puts("Big endian.");
}
else {
puts("Qaru endian.");
}
}
Что, если я изменю это на это? Обратите внимание на третий случай if
, о котором я знаю.
a.w = 1U;
if (a.b == 1U) { puts("Little endian."); }
else if (a.b == 0U) { puts ("Big endian."); }
else if (a.b == 0x80U) { /* Special potential */ }
else { puts("Qaru endian."); }