Ros*_*oss 7 c++ qt-creator c++14
我的 C++ 程序中有 uint64_t 常量(QtCreator 4.6.1 中的 clang 6.0.1)。
\n\n例如:
\n\nuint64_t a = 0xffffffffffffffffULL;\nRun Code Online (Sandbox Code Playgroud)\n\n问题是,我在 IDE 中收到以下警告:
\n\nWarning: implicit conversion from \'unsigned long long\' to \'uint64_t\' (aka \'unsigned long\')\nRun Code Online (Sandbox Code Playgroud)\n\n我也尝试将其更改为以下内容但没有成功:
\n\nuint64_t a = UINT64_C(0xffffffffffffffff);\nuint64_t a = 0xffffffffffffffffUL;\nRun Code Online (Sandbox Code Playgroud)\n\n我可以选择使用 C++14 标准和选项进行计算:-Wconstant-conversion
检查类型大小:
\n\nstd::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;\nRun Code Online (Sandbox Code Playgroud)\n\n结果:
\n\nuint64_t 8 \nunsigned long 8\nunsigned long long 8\nRun Code Online (Sandbox Code Playgroud)\n\n知道如何解决这个问题以及为什么 IDE 认为正在发生大小转换吗?
\n\n编辑:我刚刚检查了宏扩展:
\n\ndefine UINT64_C(c) c ## UL\nRun Code Online (Sandbox Code Playgroud)\n\n这意味着提供的示例应该可以工作,但它不能\xe2\x80\x99t:
\n\nuint64_t a = 0xffffffffffffffffUL;\nRun Code Online (Sandbox Code Playgroud)\n
感谢 @hvd 评论,此警告已得到解决。
检查了所有包含的头文件。由于某种原因, 和stdint.h都cstdint被包括在内。我只留下了cstdint. 它们可能来自不同的平台并具有不同的定义。
工作示例:
uint64_t v0 = UINT64_C(0x736f6d6570736575);
Run Code Online (Sandbox Code Playgroud)