如何使GCC的长整型常量警告静音



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

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。我试过用来包围它

#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 constant [-Wlong-long]

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

似乎使用ll后缀时的C++11警告可能是gcc错误。(感谢@pratorian)

一个变通方法(灵感来自@nate-eldredge的评论)是避免使用文字,并在编译时使用constexpr:生成它

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

相关内容

  • 没有找到相关文章

最新更新