是的,“gcc-E”带来了答案。be64toh是内联函数的叠加,导致多个强制转换64->32->16.我想gcc希望告知此类转换。
(__builtin_constant_p((
a
)) ? (((__uint64_t)(__builtin_constant_p(((__uint64_t)((
a
))) & 0xffffffff) ? (((__uint32_t)((__uint16_t)(__builtin_constant_p(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) & 0xffff) ? (__uint16_t)(((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) & 0xffff)) << 8 | ((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) & 0xffff)) >> 8) : __bswap16_var(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) & 0xffff))) << 16) | ((__uint16_t)(__builtin_constant_p(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) >> 16) ? (__uint16_t)(((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) >> 16)) << 8 | ((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) >> 16)) >> 8) : __bswap16_var(((__uint32_t)(((__uint64_t)((
a
))) & 0xffffffff)) >> 16)))) : __bswap32_var(((__uint64_t)((
a
))) & 0xffffffff)) << 32) | (__builtin_constant_p(((__uint64_t)((
a
))) >> 32) ? (((__uint32_t)((__uint16_t)(__builtin_constant_p(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) & 0xffff) ? (__uint16_t)(((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) & 0xffff)) << 8 | ((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) & 0xffff)) >> 8) : __bswap16_var(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) & 0xffff))) << 16) | ((__uint16_t)(__builtin_constant_p(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) >> 16) ? (__uint16_t)(((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) >> 16)) << 8 | ((__uint16_t)(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) >> 16)) >> 8) : __bswap16_var(((__uint32_t)(((__uint64_t)((
a
))) >> 32)) >> 16)))) : __bswap32_var(((__uint64_t)((
a
))) >> 32))) : __bswap64_var((
a
)))