Condividi tramite


warning pragma

Abilita la modifica selettiva del comportamento dei messaggi di avviso del compilatore.

Sintassi

#pragma warning(
 [ ]
  [ ... ]
[ n ]
#pragma warning( pop )

Osservazioni

Sono disponibili i parametri warning-specifier seguenti.

Identificatore di avviso Significato
, , Applicare il livello specificato agli avvisi specificati. Ad esempio: disattiva l'avviso 5033 (normalmente un avviso di livello 1) a meno che il livello di avviso non sia impostato su o superiore. Può anche essere utilizzato per attivare un avviso specificato che è disattivato per impostazione predefinita.
default Reimpostare il comportamento di avviso sul valore predefinito. Attiva anche un avviso specificato disattivato per impostazione predefinita. L'avviso verrà generato al livello predefinito, documentato, .

Per altre informazioni, vedere avvisi del compilatore disattivati per impostazione predefinita.
disable Non emettere i messaggi di avviso specificati. La proprietà facoltativa è consentita.
error Segnalare gli avvisi specificati come errori.
once Visualizzare i messaggi specificati una sola volta.
suppress Inserisce lo stato corrente del nello stack, disabilita l'avviso specificato per la riga successiva e quindi apre lo stack di avvisi in modo che lo stato venga reimpostato.
justification Stringa facoltativa che descrive il motivo della disabilitazione o dell'eliminazione dell'avviso. Introdotto in Visual Studio 2022 versione 17.14.

L'istruzione di codice seguente illustra che un parametro può contenere più numeri di avviso e che è possibile specificare più parametri nella stessa direttiva .

#pragma warning( disable : 4507 4034; once : 4385; error : 164 )

Tuttavia, quando il campo è presente, è possibile specificare un solo numero di avviso. Nell'istruzione di codice seguente viene illustrato l'utilizzo del campo.

#pragma warning( disable : 4507, justification : "This warning is disabled" )

Usare il campo per spiegare il motivo per cui un avviso viene disabilitato o eliminato. Il campo è supportato solo per e . La giustificazione viene visualizzata nell'output SARIF (Static Analysis Results Interchange Format) quando viene specificata l'opzione . Il suo valore è un letterale stringa stretta codificato UTF-8. Per generare un file SARIF, usare l'opzione del compilatore.

Questa direttiva è funzionalmente equivalente al codice seguente:

// Disable warning messages 4507 and 4034.
#pragma warning(disable : 4507 4034)

// Issue warning C4385 only once.
#pragma warning(once : 4385)

// Report warning C4164 as an error.
#pragma warning(error : 164)

Il compilatore aggiunge 4000 a qualsiasi numero di avviso compreso tra 0 e 999.

I numeri di avviso nell'intervallo 4700-4999 sono associati alla generazione di codice. Per questi avvisi, lo stato dell'avviso in vigore quando il compilatore raggiunge la definizione della funzione rimane in vigore per il resto della funzione. L'uso del nella funzione per modificare lo stato di un numero di avviso maggiore di 4699 diventa effettivo solo dopo la fine della funzione. Nell'esempio seguente viene illustrato il posizionamento corretto di un per disabilitare un messaggio di avviso di generazione del codice e quindi ripristinarlo.

// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test()
{
   int x;
   int y = x; // no C4700 here
   #pragma warning(default:4700)   // C4700 enabled after compiling Test()
}

int main()
{
   int x;
   int y = x; // C4700
}

Si noti che in tutto il corpo di una funzione, l'ultima impostazione del sarà attiva per l'intera funzione.

Push e pop

Il supporta anche la sintassi seguente, in cui il parametro facoltativo n rappresenta un livello di avviso (da 1 a 4).

#pragma warning( push [ , n ] )

#pragma warning( pop )

Il archivia lo stato di avviso corrente per ogni avviso. Il archivia lo stato corrente per ogni avviso e imposta il livello di avviso globale su n.

Il visualizza l'ultimo stato di avviso inserito nello stack. Tutte le modifiche apportate allo stato di avviso tra e vengono annullate. Si consideri questo esempio:

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )

Alla fine di questo codice, ripristina lo stato di ogni avviso (include 4705, 4706 e 4707) a quello che era all'inizio del codice.

Quando si scrivono file di intestazione, è possibile usare e per garantire che le modifiche dello stato di avviso apportate da un utente non impediscano la corretta compilazione delle intestazioni. Usare all'inizio dell'intestazione e alla fine. Ad esempio, potrebbe essere disponibile un'intestazione che non viene compilata correttamente al livello di avviso 4. Il codice seguente modifica il livello di avviso su 3 e quindi ripristina il livello di avviso originale alla fine dell'intestazione.

#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )

Scelta tra e

Sia che offrono un controllo granulare sull'eliminazione degli avvisi:

  • [[gsl::suppress]] elimina solo gli avvisi generati dal Code Analysis Microsoft C++. Usarlo con i controlli delle linee guida di base di C++, che possono essere applicati a un ambito o a una dichiarazione specifica.
  • può essere usato per qualsiasi avviso del compilatore. È utile quando è necessario eliminare un avviso in un blocco di codice specifico senza modificare significativamente la struttura del codice.

Quando possibile, usare [[gsl::suppress]] per eliminare gli avvisi di microsoft C++ Code Analysis.

Per altre informazioni sulle opzioni del compilatore che consentono di eliminare gli avvisi, vedere e .

Vedere anche

direttive Pragma e parole chiave e