2015-11-11 10 views
5

Ich habe einige Code unter Verwendung der großen Ganzzahlliterale wie folgt:Wie lange lange Integer-Konstante Warnung von GCC zum Schweigen

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

Dies gibt der Compiler integer constant is too large for 'long' type [-Wlong-long] warnen. wenn ich es aber leider zu:

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

... ich stattdessen die Warnung use of C++11 long long integer constant [-Wlong-long] bekommen.

Ich möchte diese Warnung nur für diese Zeile deaktivieren, aber ohne Deaktivieren -Well-lang oder -Wno-Long-Long für das gesamte Projekt verwenden. Ich habe versucht, es mit zu umgeben:

aber das scheint hier mit dieser Warnung nicht zu arbeiten. Gibt es noch etwas, das ich ausprobieren kann?

Ich baue mit -std=gnu++1z.

Edit: minimal Beispiel für die Kommentare:

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

Gebäude mit g++ -std=gnu++1z -Wlong-long test.cpp gibt test.cpp:6:20: warning: use of C++11 long long integer constant [-Wlong-long]

sollte ich erwähnen, das auf einem 32-Bit-Plattform ist Windows mit MinGW-w64 (gcc 5.1.0) - Die erste Warnung scheint auf meinen 64-Bit-Linux-Systemen nicht zu erscheinen, aber die zweite (mit dem Suffix ll) erscheint auf beiden.

+1

ich diese Warnung nicht reproduzieren kann und es auch macht keinen Sinn, warum sollten C++ 11-Features nicht mit '-std = gnu ++ 1z' ​​verfügbar sein? Können Sie ein minimales Arbeitsbeispiel zeigen und Ihre genaue Compiler-Version und die verwendeten Flags angeben? – 5gon12eder

+0

'lange lange Nanosekunden = 10; if (nanoseconds <1000000000000ll) std :: cout << 1000000000000ll; 'funktioniert für mich in' gcc5.2' mit der Option '-std = gnu ++ 1z' ​​ – gjha

+0

Ich habe die Frage mit einem minimalen Beispiel und einer Befehlszeile aktualisiert . Ich stimme zu, dass es keinen Sinn macht, vor der Verwendung von C++ 11-Funktionen in dieser Situation zu warnen. – Riot

Antwort

3

Es scheint, dass die C++ 11 Warnung bei Verwendung des ll Suffix a gcc bug sein kann. (Danke @praetorian)

Eine Abhilfe (inspiriert von @ nate-eldredge Kommentar) ist die wörtliche zu vermeiden, mit und habe es bei der Kompilierung mit constexpr hergestellt:

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