5

次のように、大きな整数リテラルを使用するコードがあります。

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

これは 32 ビット プラットフォーム、MinGW-w64 (gcc 5.1.0) を搭載した Windows であることに言及する必要があります。最初の警告は私の 64 ビット Linux システムでは表示されないようですが、2 番目の警告 (llサフィックス付き) は両方で表示されます。

4

1 に答える 1