Gcc FreeBSD下的奇怪转换警告

Gcc FreeBSD下的奇怪转换警告,gcc,warnings,freebsd,endianness,Gcc,Warnings,Freebsd,Endianness,我有这样的代码: #include <sys/endian.h> int main(){ uint64_t a = 100; be64toh(a); } 为什么??有什么办法可以避免吗 我应该使用sys/endian.h以外的其他库吗。be64toh是内联函数结果在多个强制转换64->32->16中的叠加。我想gcc想告知这种转换 (__builtin_constant_p(( a )) ? (((__uint64_t)(__builtin_co

我有这样的代码:

#include <sys/endian.h>

int main(){
    uint64_t a = 100;
    be64toh(a);
}
为什么??有什么办法可以避免吗

我应该使用sys/endian.h以外的其他库吗。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
   )))
(内置常数)((
A.
))((((uuuu uint64)t)((uuuu uint64)t)((uuuu uint64)t)((
A.
)))&0xFFFFFF)((((uuuuUINT32)t)((uuuuUINT16)t)((uuuuuUINT32)t)((uuuuuuuuUINT64)t)((
A.
)))&0xFFFFFF)&0xffff);((((()((
A.
)))&0xFFFFFF)&0xffff)>8:\uuuBSWAP16\uVAR((((uuuuUINT32\uT)((uuuuuUINT64\uT)((
A.
)))&0xFFFFFF)&0xffff)>16((
A.
)))&0xFFFFFF))>>16”)>>16”)>>8:((((((()((
A.
)))&0xffffffff))>>16]:uu bswap32_var(((uuu uint64_t)((
A.
)))&0xFFFFFF))>32)?((((()((
A.
)))>>32)和0xffff((
A.
)))>>32)和0xffff()>32)和0xffff()>>8):\uuuuBSWAP16\uVAR((((((((()((
A.
)))>>32)&0xffff)>32)>>16)?这是一个很好的例子((
A.
)))>>32]>>16]>>32]>>16]>>8]:((((((()((
A.
)))>>32]>>16]:uuuuuBSWAP32_var(((uuuuUINT64_t)((
A.
)))):uu bswap64_var((
A.
)))

提示:使用clang;)

我发现bswap()本身就给出了警告。奇怪的是,在linux下它工作正常,但不确定C库是否相同。
   (__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
   )))