Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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++ |