Ho qualche codice con grandi letterali interi come segue:Come lungo silenzio lungo avvertimento costante intero da GCC
if(nanoseconds < 1'000'000'000'000)
Questo dà l'avviso del compilatore integer constant is too large for 'long' type [-Wlong-long]
. Tuttavia, se cambio a:
if(nanoseconds < 1'000'000'000'000ll)
... io invece ottengo l'avvertimento use of C++11 long long integer constant [-Wlong-long]
.
Vorrei disattivare questo avviso solo per questa riga, ma senza disabilitare -Lungo-lungo o utilizzando -Wno-long-long per l'intero progetto. Ho provato a circondarlo con:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wlong-long"
...
#pragma GCC diagnostic pop
ma questo non sembra funzionare qui con questo avviso. C'è qualcos'altro che posso provare?
Sto costruendo con -std=gnu++1z
.
Edit: esempio minimo per i commenti:
#include <iostream>
auto main()->int {
double nanoseconds = 10.0;
if(nanoseconds < 1'000'000'000'000ll) {
std::cout << "hello" << std::endl;
}
return EXIT_SUCCESS;
}
Edificio con g++ -std=gnu++1z -Wlong-long test.cpp
dà test.cpp:6:20: warning: use of C++11 long long integer constant [-Wlong-long]
devo dire questo è su una piattaforma a 32 bit, Windows con MinGW-W64 (gcc 5.1.0) - il primo avvertimento non sembra apparire sui miei sistemi Linux a 64 bit, ma il secondo (con il suffisso ll
) appare su entrambi.
non riesco a riprodurre questo avviso e anche non ha senso perché perché le caratteristiche del C++ 11 non dovrebbero essere disponibili con '-std = gnu ++ 1z'? Puoi mostrare un esempio di lavoro minimo e dare la tua esatta versione del compilatore e le bandiere che usi? – 5gon12eder
'lunghi nanosecondi = 10; if (nanosecondi <1000000000000ll) std :: cout << 1000000000000ll; 'funziona per me in' gcc5.2' con opzione '-std = gnu ++ 1z' – gjha
Ho aggiornato la domanda con un esempio minimo e una riga di comando da riprodurre . Sono d'accordo che non ha senso essere avvertimento sull'utilizzo di funzionalità C++ 11 in questa situazione. – Riot