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 /W4
di 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
abilita tutti gli avvisi, inclusi quelli disabilitati per impostazione predefinita. Se si usa questa opzione, è possibile disattivare singoli avvisi usando l'opzione/wd
. -
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 | Messaggio |
---|---|
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 (SEH) 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.3 Perm |
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) | 'option path': 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 | Messaggio |
---|---|
C5034 | l'uso di intrinseco 'intrinseco' causa la compilazione di function-name come 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 | Messaggio |
---|---|
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 | Messaggio |
---|---|
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 | Messaggio |
---|---|
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 | Messaggio |
---|---|
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 | Messaggio |
---|---|
C4431 (livello 4) | identificatore di tipo mancante, verrà utilizzato int. Nota: default-int non è più supportato in C++ |