У меня есть некоторый код, с помощью больших целочисленных литералов следующим образом:Как долго молчать длинное целое постоянное предупреждение от 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]
.
Я бы хотел отключить это предупреждение только для этой строки, но без отключения - долгое время или использование -Wno-long-long для всего проекта. Я попытался окружить его:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
...
#pragma GCC diagnostic pop
, но это не работает здесь с этим предупреждением. Есть ли что-то еще, что я могу попробовать?
Я строю с -std=gnu++1z
.
Edit: минимальный пример для комментариев:
#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-битной платформе, Windows с MinGW-w64 (GCC 5.1.0) - первое предупреждение, похоже, не появляется на моих 64-битных Linux-системах, но второе (с суффиксом ll
) появляется на обоих.
Я не могу воспроизвести это предупреждение, и это также не имеет смысла, потому что почему бы не использовать возможности C++ 11 с помощью '-std = gnu ++ 1z'? Можете ли вы показать минимальный рабочий пример и дать точную версию и флаги компилятора, которые вы используете? – 5gon12eder
'длинные наносекунды = 10; if (nanoseconds <1000000000000ll) std :: cout << 1000000000000ll; 'работает для меня в' gcc5.2' с опцией '-std = gnu ++ 1z' – gjha
Я обновил вопрос с минимального примера и командной строки для воспроизведения , Я согласен, что нет смысла предупреждать об использовании возможностей C++ 11 в этой ситуации. – Riot