__X86_64__架构下long long位宽?typedef定义冲突咨询
问题解答
关于long long的位宽问题
在x86_64架构下使用-m64参数编译时,long long类型仍然是64位,不是128位。
你看到的__extension__ typedef unsigned long long __u64;这段代码,恰恰是因为unsigned long long在64位编译环境下是标准的64位无符号类型,才会被用来定义__u64这个64位类型别名。
128位整数类型在GCC等编译器中是通过扩展类型__int128(无符号版本为unsigned __int128)来支持的,和long long没有关系。
关于typedef uint64_t __u64;的定义冲突问题
这个报错是因为__u64已经被int-ll64.h中的代码提前定义过了,你再次用uint64_t去定义同一个类型别名,属于重复定义,编译器会直接抛出冲突错误。
解决思路:
- 检查代码中是否同时包含了
int-ll64.h和自定义的typedef uint64_t __u64;,移除其中一处重复定义即可。 - 如果是第三方头文件导致的冲突,可以用条件编译来避免重复定义,示例代码:
#ifndef __u64 typedef uint64_t __u64; #endif
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

