如何定义uint64_t常量?

Ros*_*oss 7 c++ qt-creator c++14

我的 C++ 程序中有 uint64_t 常量(QtCreator 4.6.1 中的 clang 6.0.1)。

\n\n

例如:

\n\n
uint64_t a = 0xffffffffffffffffULL;\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是,我在 IDE 中收到以下警告:

\n\n
Warning: implicit conversion from \'unsigned long long\' to \'uint64_t\' (aka \'unsigned long\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

我也尝试将其更改为以下内容但没有成功:

\n\n
uint64_t a = UINT64_C(0xffffffffffffffff);\nuint64_t a = 0xffffffffffffffffUL;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以选择使用 C++14 标准和选项进行计算:-Wconstant-conversion

\n\n

检查类型大小:

\n\n
std::cout << "uint64_t " << sizeof (uint64_t) << std::endl; \nstd::cout << "unsigned long " << sizeof (unsigned long) << std::endl;\nstd::cout << "unsigned long long " << sizeof (unsigned long long) << std::endl;\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果:

\n\n
uint64_t 8  \nunsigned long 8\nunsigned long long 8\n
Run Code Online (Sandbox Code Playgroud)\n\n

知道如何解决这个问题以及为什么 IDE 认为正在发生大小转换吗?

\n\n

编辑:我刚刚检查了宏扩展:

\n\n
define UINT64_C(c)  c ## UL\n
Run Code Online (Sandbox Code Playgroud)\n\n

这意味着提供的示例应该可以工作,但它不能\xe2\x80\x99t:

\n\n
uint64_t a = 0xffffffffffffffffUL;\n
Run Code Online (Sandbox Code Playgroud)\n

Ros*_*oss 3

感谢 @hvd 评论,此警告已得到解决。

检查了所有包含的头文件。由于某种原因, 和stdint.hcstdint被包括在内。我只留下了cstdint. 它们可能来自不同的平台并具有不同的定义。

工作示例:

uint64_t v0 = UINT64_C(0x736f6d6570736575);
Run Code Online (Sandbox Code Playgroud)