gpt4 book ai didi

c++ - 如何消除来自 GCC 的长整型常量警告

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:37 26 4
gpt4 key购买 nike

我有一些使用大整数文字的代码如下:

if(nanoseconds < 1'000'000'000'000)

这会向编译器发出警告 integer constant is too large for 'long' type [-Wlong-long]。但是,如果我将其更改为:

if(nanoseconds < 1'000'000'000'000ll)

...我反而收到警告 use of C++11 long long integer constant [-Wlong-long]

我想仅针对这一行禁用此警告,但不禁用 -Wlong-long 或对整个项目使用 -Wno-long-long。我试过用它包围它:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
...
#pragma GCC diagnostic pop

但这似乎不适用于此警告。还有什么我可以尝试的吗?

我正在使用 -std=gnu++1z 构建。

编辑:评论的最小示例:

#include <iostream>
auto main()->int {
double nanoseconds = 10.0;
if(nanoseconds < 1'000'000'000'000ll) {
std::cout << "hello" << std::endl;
}
return EXIT_SUCCESS;
}

使用 g++ -std=gnu++1z -Wlong-long test.cpp 生成 test.cpp:6:20: warning: use of C++11 long long integer常数 [-Wlong-long]

我应该提到这是在 32 位平台上,Windows 与 MinGW-w64 (gcc 5.1.0) - 第一个警告似乎没有出现在我的 64 位 Linux 系统上,但第二个(使用 ll 后缀) 出现在两者上。

最佳答案

看来使用ll后缀时的C++11警告可能是a gcc bug . (感谢@praetorian)

解决方法(受@nate-eldredge 的评论启发)是避免使用文字并在编译时使用 constexpr 生成它:

int64_t constexpr const trillion = int64_t(1'000'000) * int64_t(1'000'000);
if(nanoseconds < trillion) ...

关于c++ - 如何消除来自 GCC 的长整型常量警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33644412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com