次のように、大きな整数リテラルを使用するコードがあります。
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
サフィックス付き) は両方で表示されます。