Avvisi del compilatore disattivati per impostazione predefinita

Il compilatore supporta avvisi disattivati per impostazione predefinita, perché la maggior parte degli sviluppatori non li trova utili. In alcuni casi, avvisano di una scelta stilistica o di idiomi comuni nel codice precedente. Altri avvisi riguardano l'uso di un'estensione Microsoft per la lingua. Alcuni avvisi indicano un'area in cui i programmatori spesso fanno presupposti errati, che possono causare comportamenti imprevisti o non definiti. Se tutti questi avvisi sono abilitati, alcuni di essi possono essere visualizzati più volte nelle intestazioni della libreria. Le librerie di runtime C e le librerie standard C++ sono destinate a non generare avvisi solo a livello /W4di avviso.

Abilitare gli avvisi disattivati per impostazione predefinita

È possibile abilitare gli avvisi normalmente disattivati per impostazione predefinita usando una delle opzioni seguenti:

  • #pragma warning(default :warning_number)

    L'avviso specificato (warning_number) è abilitato a livello predefinito. La documentazione dell'avviso contiene il livello predefinito dell'avviso.

  • #pragma warning(:warning_level warning_number)

    L'avviso specificato (warning_number) è abilitato al livello specificato (warning_level).

  • /Wall

    /Wall abilita tutti gli avvisi, inclusi quelli disabilitati per impostazione predefinita. Se si usa questa opzione, è possibile disattivare singoli avvisi usando l'opzione /wd .

  • /wLnnnn

    Questa opzione abilita l'avviso nnnn al livello L.

Avvisi disattivati per impostazione predefinita

Visual Studio 2015 e versioni successive

Gli avvisi seguenti vengono disattivati per impostazione predefinita in Visual Studio 2015 e versioni successive:

Avviso Message
C4061 (livello 4) l'enumeratore 'identifier' in un'opzione di enumerazione 'enumeration' non viene gestita in modo esplicito da un'etichetta case.
C4062 (livello 4) l'enumeratore 'identifier' in un'opzione di enumerazione 'enumeration' non viene gestita.
C4165 (livello 1) 'HRESULT' viene convertito in 'bool'; sei sicuro che questo è quello che vuoi?
C4191 (livello 3) 'operator': conversione unsafe da 'type_of_expression' a 'type_required'
C4242 (livello 4) 'identifier': conversione da 'type1' a 'type2', possibile perdita di dati
C4254 (livello 4) 'operator': conversione da 'type1' a 'type2', possibile perdita di dati
C4255 (livello 4) 'function': no function prototype given: converting '()' to '(void)'
C4263 (livello 4) 'function': la funzione membro non esegue l'override di alcuna funzione membro della classe di base
C4264 (livello 1) 'virtual_function': nessun override disponibile per la funzione membro virtuale dalla 'classe'; la funzione è nascosta
C4265 (livello 3) 'class': la classe ha funzioni virtuali, ma il distruttore non è virtuale
C4266 (livello 4) 'function': nessun override disponibile per la funzione membro virtuale dalla base 'type'; la funzione è nascosta
C4287 (livello 3) 'operator': mancata corrispondenza costante senza segno/negativo
C4289 (livello 4) estensione non standard usata: 'var': variabile di controllo del ciclo dichiarata nel ciclo for viene usata all'esterno dell'ambito del ciclo for
C4296 (livello 4) 'operator': expression is always false
C4339 (livello 4) 'type': uso di un tipo non definito rilevato nei metadati CLR. L'uso di questo tipo può causare un'eccezione di runtime
C4342 (livello 1) modifica del comportamento: 'function' chiamata, ma è stato chiamato un operatore membro nelle versioni precedenti
C4350 (livello 1) modifica del comportamento: 'member1' chiamato invece di 'member2'
C4355 "this": utilizzato nell'elenco degli inizializzatori dei membri di base
C4365 (livello 4) 'action': conversione da 'type_1' a 'type_2', signed/unsigned non corrispondente
C4370 (livello 3) layout della classe è stato modificato rispetto alla versione precedente del compilatore per migliorare la compressione
C4371 (livello 3) 'class-name': il layout della classe potrebbe essere cambiato rispetto a una versione precedente del compilatore a causa di una migliore compressione del membro 'member'
C4388 (livello 4) errata corrispondenza tra signed e unsigned
C4412 (livello 2) 'function': la firma della funzione contiene il tipo 'type'; Gli oggetti C++ non sono sicuri da passare tra codice puro e misto o nativo
C4426 (livello 1) i flag di ottimizzazione modificati dopo l'inclusione dell'intestazione potrebbero essere dovuti a #pragma optimize() 14.1
C4435 (livello 4) 'class1': il layout dell'oggetto in /vd2 cambierà a causa della base virtuale 'class2'.
C4437 (livello 4) dynamic_cast dalla base virtuale 'class1' a 'class2' potrebbero non riuscire in alcuni contesti.
C4444 (livello 3) il livello superiore '__unaligned' non è implementato in questo contesto.
C4464 (livello 4) il percorso di inclusione relativo contiene '.'.
C4471 (livello 4) Una dichiarazione forward di un'enumerazione senza ambito deve avere un tipo sottostante (int assunto) Perm
C4472 (livello 1) 'identifier' è un'enumerazione nativa: aggiungere un identificatore di accesso (privato/pubblico) per dichiarare un'enumerazione gestita
C4514 (livello 4) 'function': la funzione inline senza riferimenti è stata rimossa
C4536 (livello 4) 'type name': type-name supera il limite di metadati dei caratteri 'limit'
C4545 (livello 1) l'espressione prima della virgola restituisce una funzione senza elenco di argomenti
C4546 (livello 1) nella chiamata di funzione prima della virgola manca l'elenco degli argomenti
C4547 (livello 1) 'operator': operatore prima della virgola non ha alcun effetto; operatore previsto con effetto collaterale
C4548 (livello 1) l'espressione prima della virgola non ha effetto. Prevista espressione con effetto collaterale.
C4549 (livello 1) 'operator1': l'operatore prima della virgola non ha alcun effetto; si intende 'operator2'?
C4555 (livello 1) l'espressione non ha effetto. Prevista espressione con effetto collaterale
C4557 (livello 3) '__assume' contiene l'effetto 'effect'
C4571 (livello 4) informativo: semantica catch(...) modificata da Visual C++ 7.1; le eccezioni strutturate (edizione Standard H) non vengono più rilevate
C4574 (livello 4) 'identifier' è definito come '0': si intende usare '#if identifier'?
C4577 (livello 1) 'noexcept' usato senza alcuna modalità di gestione delle eccezioni specificata; la terminazione in caso di eccezione non è garantita. Specificare /EHsc
C4582 (livello 4) 'type': il costruttore non viene chiamato in modo implicito
C4583 (livello 4) 'type': il distruttore non viene chiamato in modo implicito
C4587 (livello 1) 'anonymous_structure': modifica del comportamento: il costruttore non viene più chiamato in modo implicito
C4588 (livello 1) 'anonymous_structure': modifica del comportamento: il distruttore non viene più chiamato in modo implicito
C4596 (livello 4) 'identifier': nome qualificato non valido nella dichiarazione membro 14.3Perm
C4598 (livello 1 e livello 3) '#include "header"': numero di intestazione numero di intestazione nell'intestazione precompilata non corrisponde alla compilazione corrente nella posizione 14.3
C4599 (livello 3) 'optionpath': numero di argomento della riga di comando arg_number non corrisponde all'intestazione precompilata 14.3
C4605 (livello 1) '/Dmacro' specificata nella riga di comando corrente, ma non è stata specificata quando è stata compilata l'intestazione precompilata
C4608 (livello 3) 'union_member' è già stato inizializzato da un altro membro dell'unione nell'elenco di inizializzatori, 'union_member' Perm
C4619 (livello 3) #pragma avviso: non è presente alcun numero di avviso 'number'
C4623 (livello 4) 'classe derivata': impossibile generare il costruttore predefinito poiché un costruttore predefinito della classe base è inaccessibile
C4625 (livello 4) 'classe derivata': impossibile generare il costruttore di copia poiché un costruttore di copia della classe base è inaccessibile
C4626 (livello 4) 'classe derivata': impossibile generare l'operatore di assegnazione poiché un operatore di assegnazione della classe base è inaccessibile
C4628 (livello 1) digraph non supportati con -Ze. Sequenza di caratteri 'digraph' non interpretata come token alternativo per 'char'
C4640 (livello 3) 'instance': la costruzione di un oggetto statico locale non è thread-safe
C4643 (livello 4) La dichiarazione di inoltro 'identifier' nello spazio dei nomi std non è consentita dallo standard C++. 15.8
C4647 (livello 3) modifica del comportamento: __is_pod(tipo) ha un valore diverso nelle versioni precedenti
C4654 (livello 4) Il codice inserito prima dell'inclusione della riga di intestazione precompilata verrà ignorato. Aggiungere codice all'intestazione precompilata. 14.1
C4668 (livello 4) 'symbol' non è definito come macro preprocessore, sostituendo con '0' per 'direttive'
C4682 (livello 4) 'symbol': nessun attributo di parametro direzionale specificato, il valore predefinito è [in]
C4686 (livello 3) 'tipo definito dall'utente': possibile modifica del comportamento, modifica della convenzione di chiamata restituita dal tipo definito dall'utente
C4692 (livello 1) 'function': la firma del membro non privato contiene il tipo nativo privato dell'assembly 'native_type'
C4710 (livello 4) 'function': funzione non inlined
C4738 (livello 3) archiviazione in memoria del risultato float a 32 bit, possibile riduzione delle prestazioni
C4746 L'accesso volatile di 'expression' è soggetto all'impostazione /volatile:<iso|ms> ; prendere in considerazione l'uso di funzioni intrinseche __iso_volatile_load/store
C4749 (livello 4) supportato in modo condizionale: offsetof applicato al tipo di layout non standard 'type'
C4767 (livello 4) il nome di sezione 'symbol' è più lungo di 8 caratteri e verrà troncato dal linker
C4774 (livello 4) 'string': stringa di formato prevista nel numero di argomento non è un valore letterale stringa
C4777 (livello 4) 'function': la stringa di formato 'string' richiede un argomento di tipo 'type1', ma il numero di argomento variadic ha tipo 'type2'
C4786 (livello 3) 'symbol': il nome dell'oggetto è stato troncato a caratteri 'number' nelle informazioni di debug
C4800 (livello 4) Conversione implicita da 'type' a bool. Possibile perdita di informazioni 16.0
C4820 (livello 4) Riempimento dei byte 'byte' aggiunto dopo il costrutto 'member_name'
C4822 (livello 1) 'member': la funzione membro della classe locale non dispone di un corpo
C4826 (livello 2) La conversione da 'type1' a 'type2' è estesa per il segno. Ciò può causare un comportamento di runtime imprevisto.
C4837 (livello 4) trigrafo rilevato: '??character' sostituito da 'character'
C4841 (livello 4) estensione non standard usata: designatore membro composto usato in offsetof
C4842 (livello 4) Il risultato di 'offsetof' applicato a un tipo che usa più ereditarietà non è garantito che sia coerente tra le versioni del compilatore
C4866 (livello 4) Il compilatore 'file(line-number)' potrebbe non applicare l'ordine di valutazione da sinistra a destra per la chiamata all'operatore
C4868 (livello 4) Il compilatore 'file(line_number)' potrebbe non applicare l'ordine di valutazione da sinistra a destra nell'elenco di inizializzazione con parentesi graffa
C4905 (livello 1) cast di stringa letterale wide su "LPSTR"
C4906 (livello 1) cast di stringa letterale su "LPWSTR"
C4917 (livello 1) 'declarator': un GUID può essere associato solo a una classe, un'interfaccia o uno spazio dei nomi
C4928 (livello 1) inizializzazione di copia non valida; sono state implicitamente applicate più conversioni definite dall'utente
C4931 (livello 4) si suppone che la libreria dei tipi sia stata compilata per puntatori a numero bit
C4946 (livello 1) reinterpret_cast usati tra classi correlate: 'class1' e 'class2'
C4962 'function': ottimizzazioni guidate dal profilo disabilitate perché le ottimizzazioni causavano l'incoerenza dei dati del profilo
C4986 (livello 4) 'symbol': la specifica dell'eccezione non corrisponde alla dichiarazione precedente
C4987 (livello 4) utilizzata estensione non standard: 'throw (...)'
C4988 (livello 4) 'symbol': variabile dichiarata all'esterno dell'ambito di classe/funzione
C5022 'type': più costruttori di spostamento specificati
C5023 'type': più operatori di assegnazione di spostamento specificati
C5024 (livello 4) 'type': il costruttore di spostamento è stato definito in modo implicito come eliminato
C5025 (livello 4) 'type': l'operatore di assegnazione di spostamento è stato definito in modo implicito come eliminato
C5026 (livello 1 e livello 4) 'type': il costruttore di spostamento è stato definito in modo implicito come eliminato
C5027 (livello 1 e livello 4) 'type': l'operatore di assegnazione di spostamento è stato definito in modo implicito come eliminato
C5029 (livello 4) estensione non standard usata: gli attributi di allineamento in C++ si applicano solo a variabili, membri dati e tipi di tag
C5031 (livello 4) #pragma avviso(pop): probabile mancata corrispondenza, stato di avviso di comparsa inserito in un file diverso 14.1
C5032 (livello 4) rilevato #pragma warning(push) senza #pragma corrispondente warning(pop) 14.1

Visual Studio 2017 e versioni successive

Gli avvisi seguenti vengono disattivati per impostazione predefinita in Visual Studio 2017 e versioni successive:

Avviso Message
C5034 l'uso di intrinseco 'intrinseco' causa la compilazione di function-namecome codice guest 15.3
C5035 l'uso della funzionalità 'feature' causa la compilazione di function-name come codice guest 15.3
C5036 (livello 1) Conversione del puntatore di funzione varargs durante la compilazione con /hybrid:x86arm64 'type1' in 'type2' 15.3
C5038 (livello 4) il membro dati 'member1' verrà inizializzato dopo il membro dati 'member2' 15.3
C5039 (livello 4) 'function': puntatore o riferimento alla funzione potenzialmente generata passata alla funzione C extern in -EHc. Il comportamento non definito può verificarsi se questa funzione genera un'eccezione. 15.5
C5041 (livello 4) 'member-name': la definizione out-of-line per il membro dati statico constexpr non è necessaria ed è deprecata in C++17. 15.2
C5042 (livello 3) 'function': le dichiarazioni di funzione nell'ambito del blocco non possono essere specificate 'inline' nello standard C++; rimuovere l'identificatore 'inline' 15.5
C5045 Il compilatore inserisce la mitigazione Spectre per il carico di memoria se l'opzione /Qspectre ha specificato 15.7

Visual Studio 2019 e versioni successive

Gli avvisi seguenti vengono disattivati per impostazione predefinita in Visual Studio 2019 e versioni successive:

Avviso Message
C5052 (livello 3) La parola chiave 'keyword-name' è stata introdotta nella versione C++ e richiede l'uso dell'opzione della riga di comando 'option' 16.1
C5204 (livello 3) Una classe con funzioni virtuali ha un distruttore semplice non virtuale. 16.5
C5214 (livello 4) L'applicazione di 'keyword' a un operando con un tipo qualificato volatile è deprecata in C++20 16.7
C5215 (livello 4) 'function-parameter' un parametro di funzione con un tipo qualificato volatile è deprecato in C++20 16.7
C5216 (livello 4) 'return-type' un tipo restituito qualificato volatile è deprecato in C++20 16.7
C5217 (livello 4) Una dichiarazione di associazione strutturata che include volatile è deprecata in C++20 16.7
C5219 (livello 2) conversione implicita da 'type-1' a 'type-2', possibile perdita di dati 16.7
C5220 (livello 4) 'member': un membro dati non statico con un tipo qualificato volatile non implica più che
i costruttori di copia/spostamento generati dal compilatore e gli operatori di assegnazione di copia/spostamento non sono semplici 16.7
C5233 (livello 4) L'acquisizione lambda esplicita 'identifier' non viene usata 16.10
C5240 (livello 4) 'attribute-name': l'attributo viene ignorato in questa posizione sintattica 16.10
C5243 (livello 1) 'type-name': l'uso della classe incompleta 'class-name' può causare una potenziale violazione di una regola di definizione a causa della limitazione ABI 16.10
C5245 (livello 4) 'function': funzione senza riferimenti con collegamento interno rimossa
C5246 (livello 1) 'member': l'inizializzazione di un oggetto secondario deve essere racchiusa tra parentesi graffe 16.10
C5247 (livello 1) La sezione 'section-name' è riservata per l'inizializzazione dinamica C++. La creazione manuale della sezione interferisce con l'inizializzazione dinamica C++ e può causare un comportamento non definito 16.11
C5248 (livello 1) La sezione 'section-name' è riservata per l'inizializzazione dinamica C++. La variabile inserita manualmente nella sezione può essere ottimizzata e l'ordine relativo agli inizializzatori dinamici generati dal compilatore non è specificato 16.11

Visual Studio 2022 e versioni successive

Gli avvisi seguenti vengono disattivati per impostazione predefinita in Visual Studio 2022 e versioni successive:

Avviso Message
C5249 (livello 1) 'bitfield' di tipo 'enumeration_name' ha enumeratori denominati con valori che non possono essere rappresentati nella larghezza del campo di bit specificata di 'bitfield_width'. 17.0
C5250 (livello 3) 'function_name': funzione intrinseca non dichiarata. 17.0
C5251 (livello 4) segment-name modificato dopo aver incluso l'intestazione 17.1
C5254 (livello 4) La funzionalità del linguaggio 'terse static assert' richiede il flag del compilatore '/std:c++17' 17.1
C5256 (livello 1) 'enumerazione': una dichiarazione non di definizione di un'enumerazione con un tipo sottostante fisso è consentita solo come dichiarazione autonoma 17.2
C5258 (livello 4) L'acquisizione esplicita di 'symbol' non è necessaria per questo utilizzo 17.2
C5259 (livello 4) 'specialized-type': la specializzazione esplicita richiede 'template <>' 17.3
C5262 (livello 1, errore) il fall-through implicito si verifica qui; manca un'istruzione break ? Usare [[fallthrough]] quando un'istruzione break viene intenzionalmente omessa tra i casi 17.4
C5263 (livello 4) la chiamata di 'std::move' su un oggetto temporaneo impedisce l'elisione di copia 17.4
C5264 (livello 4) 'variable-name': la variabile 'const' non viene usata 17.4
C5266 (livello 4) Il qualificatore 'const' sul tipo restituito non ha alcun effetto 17.6
C5267 (livello 4) la definizione dell'operatore di assegnazione/costruttore di copia implicita per 'type' è deprecata perché dispone di un operatore di assegnazione/costruttore di copia fornito dall'utente 17.7

14.1 Questo avviso è disponibile a partire da Visual Studio 2015 Update 1.
14.3 Questo avviso è disponibile a partire da Visual Studio 2015 Update 3.
15.2 Questo avviso è disponibile a partire da Visual Studio 2017 versione 15.2.
15.3 Questo avviso è disponibile a partire da Visual Studio 2017 versione 15.3.
15.5 Questo avviso è disponibile a partire da Visual Studio 2017 versione 15.5.
15.7 Questo avviso è disponibile a partire da Visual Studio 2017 versione 15.7.
15.8 Questo avviso è disponibile a partire da Visual Studio 2017 versione 15.8.
16.0 Questo avviso è disponibile a partire da Visual Studio 2019 RTM.
16.5 Questo avviso è disponibile a partire da Visual Studio 2019 versione 16.5.
16.7 Questo avviso è disponibile a partire da Visual Studio 2019 versione 16.7.
16.10 Questo avviso è disponibile a partire da Visual Studio 2019 versione 16.10.
16.11 Questo avviso è disponibile a partire da Visual Studio 2019 versione 16.11.
17.0 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.0.
17.1 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.1.
17.2 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.2.
17.3 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.3.
17.4 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.4.
17.5 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.5.
17.6 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.6.
17.7 Questo avviso è disponibile a partire da Visual Studio 2022 versione 17.7.
Perm Questo avviso è disattivato a meno che non sia impostata l'opzione del /permissive- compilatore.

Avvisi disattivati per impostazione predefinita nelle versioni precedenti

Questo avviso è disattivato per impostazione predefinita in Visual Studio 2015 versione 15.3 e abilitato in Visual Studio 2015 versione 15.5:

Avviso Message
C4768 __declspec attributi prima della specifica di collegamento vengono ignorati

Questi avvisi sono stati disattivati per impostazione predefinita nelle versioni del compilatore precedenti a Visual Studio 2015:

Avviso Message
C4302 (livello 2) 'conversion': troncamento da 'type1' a 'type2'
C4311 (livello 1) 'variable': troncamento puntatore da 'type' a 'type'
C4312 (livello 1) 'operation': conversione da 'type1' a 'type2' di dimensioni maggiori
C4319 (livello 1) 'operator': zero extending 'type1' to 'type2' of greater size

Questo avviso è stato disattivato per impostazione predefinita nelle versioni del compilatore precedenti a Visual Studio 2012:

Avviso Message
C4431 (livello 4) identificatore di tipo mancante, verrà utilizzato int. Nota: default-int non è più supportato in C++

Vedi anche

warning Pragma