我在我的C++程序中有uint64_t常量(使用QtCreator 4.6.1中的clang 6.0.1)。
例如:
问题是,我在IDE中收到以下警告:
我也试图将其更改为以下内容,但没有成功:
我有使用 C++14 标准和选项
检查类型大小:
有任何想法如何修复这个问题和为什么IDE认为正在进行大小转换?
编辑:我刚检查了宏展开:
这意味着提供的示例应该可以工作,但实际上并没有。
例如:
uint64_t a = 0xffffffffffffffffULL;
问题是,我在IDE中收到以下警告:
Warning: implicit conversion from 'unsigned long long' to 'uint64_t' (aka 'unsigned long')
我也试图将其更改为以下内容,但没有成功:
uint64_t a = UINT64_C(0xffffffffffffffff);
uint64_t a = 0xffffffffffffffffUL;
我有使用 C++14 标准和选项
-Wconstant-conversion
进行计算的选择。检查类型大小:
std::cout << "uint64_t " << sizeof (uint64_t) << std::endl;
std::cout << "unsigned long " << sizeof (unsigned long) << std::endl;
std::cout << "unsigned long long " << sizeof (unsigned long long) << std::endl;
结果:
uint64_t 8
unsigned long 8
unsigned long long 8
有任何想法如何修复这个问题和为什么IDE认为正在进行大小转换?
编辑:我刚检查了宏展开:
define UINT64_C(c) c ## UL
这意味着提供的示例应该可以工作,但实际上并没有。
uint64_t a = 0xffffffffffffffffUL;
0xffffffffffffffffUL
视为unsigned long long
常量(因为你说错误仍然是“从'unsigned long long'转换”),那么你的unsigned long
类型不具有64位。如果您的头文件仍将uint64_t
定义为unsigned long
,则可能存在严重问题。您是否无意中使用了另一个平台的头文件?但这与测试程序的输出不符。 - user743382