Domanda

Durante lo sviluppo di un'applicazione C ++, ho dovuto utilizzare una libreria di terze parti che ha prodotto una quantità enorme di avvisi relativi alla direttiva innocua #pragma in uso.

../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
                 from ../File3.hpp:57,
                 from File4.h:49,

È possibile disabilitare questo tipo di avvisi quando si utilizza il compilatore GNU C ++?

È stato utile?

Soluzione

Credo che tu possa compilare con

-Wno-unknown-pragmas

per sopprimerli.

Altri suggerimenti

In GCC, compilare con -Wno-unknown-pragmas

In MS Visual Studio 2005 (questa domanda non è taggata con gcc, quindi lo sto aggiungendo come riferimento), puoi disabilitarla globalmente in Impostazioni progetto - > C / C ++ - > Avanzate. Inserisci 4068 in " Disabilita avvisi specifici "

oppure puoi aggiungerlo a qualsiasi file per disabilitare gli avvisi localmente

#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */

Forse vedi GCC Diagnostic Pragmas ? In alternativa, in questo caso è possibile utilizzare la combinazione di opzioni che -Wall abilita, escluso -Wunknown-pragmas .

Grazie a tutti per il suggerimento. Nel mio caso, lavoro con Qt Mingw. Devo impostare la bandiera in un altro modo, nel mio file .PRO:

QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas

So che la domanda riguarda GCC, ma per le persone che vogliono farlo nel modo più portabile possibile:

La maggior parte dei compilatori che possono emettere questo avviso hanno un modo per disabilitare l'avviso dalla riga di comando (eccezione: IGP) o nel codice (eccezione: DMC):

  • GCC: -Wno-unknown-pragmas / #pragma Diagnostica GCC ignorata " -Wunknown-pragmas "
  • clang: -Wno-unknown-pragmas / #pragma clang diagnostics ignorato " -Wunknown-pragmas "
  • Compilatore Intel C / C ++: -diag-disable 161 / #pragma warning (disabilita: 161)
  • IGP: #pragma diag_suppress 1675
  • MSVC: -wd4068 / #pragma warning (disabilita: 4068)
  • TI: --diag_suppress, -pds = 163 / #pragma diag_suppress 163
  • Compilatore IAR C / C ++: --diag_suppress Pe161 / #pragma diag_suppress = Pe161
  • Compilatore Digital Mars C / C ++: -w17

Puoi combinare la maggior parte di questo in un'unica macro da utilizzare nel tuo codice, che è quello che ho fatto per HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS nella macro Hedley :

#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif

Nota che Hedley potrebbe avere informazioni più complete di questa risposta poiché probabilmente dimenticherò di aggiornare questa risposta, quindi se non vuoi usare solo Hedley (è una singola intestazione C / C ++ di dominio pubblico puoi facilmente rilasciare nel tuo progetto) potresti voler usare Hedley come guida invece delle informazioni sopra.

I controlli di versione sono probabilmente eccessivamente pessimisti, ma a volte è difficile ottenere buone informazioni sulle versioni obsolete di compilatori proprietari e preferirei essere al sicuro che dispiaciuto. Ancora una volta, le informazioni di Hedley potrebbero essere migliori.

Molti compilatori possono anche inserire / inserire avvisi in uno stack, quindi puoi spingerli, quindi disabilitarli prima di includere il codice che non controlli, quindi pop in modo che il tuo attiverà comunque l'avviso in domanda (così puoi ripulirlo). Ci sono macro anche a Hedley: HEDLEY_DIAGNOSTIC_PUSH / HEDLEY_DIAGNOSTIC_POP .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top