Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kompilatorn stöder varningar som är inaktiverade som standard, eftersom de flesta utvecklare inte tycker att de är användbara. I vissa fall varnar de för ett stilistiskt val eller om vanliga idiom i äldre kod. Andra varningar gäller användning av ett Microsoft-tillägg till språket. Vissa varningar indikerar ett område där programmerare ofta gör felaktiga antaganden, vilket kan leda till oväntat eller odefinierat beteende. Om alla dessa varningar är aktiverade kan vissa av dem visas många gånger i bibliotekshuvuden. C-körningsbiblioteken och C++-standardbiblioteken är avsedda att endast avge varningar på varningsnivå /W4.
Aktivera varningar som är inaktiverade som standard
Du kan aktivera varningar som normalt är inaktiverade som standard med något av följande alternativ:
#pragma warning(default :warning_number)Den angivna varningen (warning_number) är aktiverad på standardnivå. Dokumentationen för varningen innehåller standardnivån för varningen.
#pragma warning(:warning_levelwarning_number)Den angivna varningen (warning_number) är aktiverad på den angivna nivån (warning_level).
-
/Wallaktiverar alla varningar som är inaktiverade som standard. Om du använder det här alternativet kan du inaktivera enskilda varningar med hjälp av alternativet/wd. -
Det här alternativet aktiverar varning nnnn på nivå L.
Varningar som är inaktiverade som standard
Visual Studio 2015 och senare versioner
Följande varningar är inaktiverade som standard i Visual Studio 2015 och senare versioner:
| Varning | Meddelande |
|---|---|
| C4061 (nivå 4) | enumerator "identifierare" i en växel för uppräkning hanteras inte uttryckligen av en ärendeetikett. |
| C4062 (nivå 4) | uppräknarens "identifierare" i en växel för uppräkning hanteras inte. |
| C4165 (nivå 1) | "HRESULT" omvandlas till "bool". är du säker på att det här är vad du vill? |
| C4191 (nivå 3) | operator: osäker konvertering från "type_of_expression" till "type_required" |
| C4242 (nivå 4) | "identifierare": konvertering från "type1" till "type2", eventuell dataförlust |
| C4254 (nivå 4) | operator: konvertering från "type1" till "type2", eventuell dataförlust |
| C4255 (nivå 4) | "function": ingen funktionsprototyp angiven: konvertera "()" till "(void)" |
| C4263 (nivå 4) | Funktion: Medlemsfunktionen åsidosätter inte någon virtuell medlemsfunktion för basklass |
| C4264 (nivå 1) | "virtual_function": ingen åsidosättning tillgänglig för funktionen virtuell medlem från basklassen. funktionen är dold |
| C4265 (nivå 3) | klass: klassen har virtuella funktioner, men destructor är inte virtuell |
| C4266 (nivå 4) | "funktion": ingen åsidosättning är tillgänglig för funktionen virtuell medlem från bastypen. funktionen är dold |
| C4287 (nivå 3) | Operator: osignerad/negativ konstant matchningsfel |
| C4289 (nivå 4) | icke-standardtillägg som används: "var" : loopkontrollvariabeln som deklareras i for-loopen används utanför omfånget för for-loop |
| C4296 (nivå 4) | Operator: uttrycket är alltid falskt |
| C4339 (nivå 4) | "type" : användning av odefinierad typ som identifierats i CLR-metadata – användning av den här typen kan leda till ett körningsundatag |
| C4342 (nivå 1) | ändrat beteende: "funktion" anropas, men en medlemsoperator anropades i tidigare versioner |
| C4350 (nivå 1) | beteendeförändring: "member1" anropas i stället för "member2" |
| C4355 | "this" : används i grundläggande medlemsinitieringslista |
| C4365 (nivå 4) | "action": konvertering från "type_1" till "type_2", signerad/osignerad matchning |
| C4370 (nivå 3) | layouten för klassen har ändrats från en tidigare version av kompilatorn på grund av bättre packning |
| C4371 (nivå 3) | "klassnamn": layouten för klassen kan ha ändrats från en tidigare version av kompilatorn på grund av bättre packning av medlemmens "medlem" |
| C4388 (nivå 4) | signerad/osignerad matchning |
| C4412 (nivå 2) | funktion: funktionssignaturen innehåller typen typ. C++-objekt är osäkra att skicka mellan ren kod och blandade eller inbyggda |
| C4426 (nivå 1) | optimeringsflaggor som ändrats efter inklusive rubrik kan bero på #pragma optimize() 14.1 |
| C4435 (nivå 4) | "class1" : Objektlayouten under /vd2 ändras på grund av den virtuella basen "class2". |
| C4437 (nivå 4) | dynamic_cast från den virtuella basen "class1" till "class2" kan misslyckas i vissa sammanhang. |
| C4444 (nivå 3) | "__unaligned" på den översta nivån implementeras inte i det här sammanhanget. |
| C4464 (nivå 4) | relativ inkluderingssökväg innehåller .. |
| C4471 (nivå 4) | en framåtriktad deklaration av en oscoped uppräkning måste ha en underliggande typ (int antas) perm |
| C4472 (nivå 1) | "identifierare" är ett inbyggt uppräkning: lägg till en åtkomstspecificerare (privat/offentlig) för att deklarera en hanterad uppräkning |
| C4514 (nivå 4) | "funktion": den orefererade infogade funktionen har tagits bort |
| C4536 (nivå 4) | "typnamn": typnamn överskrider gränsen för metadata för "gräns"-tecken |
| C4545 (nivå 1) | uttryck innan kommatecken utvärderas till en funktion som saknar en argumentlista |
| C4546 (nivå 1) | funktionsanrop innan argumentlistan för komma saknas |
| C4547 (nivå 1) | operator: operatorn före kommatecken har ingen effekt. förväntad operator med bieffekt |
| C4548 (nivå 1) | uttryck före komma har ingen effekt; förväntat uttryck med bieffekt |
| C4549 (nivå 1) | operator1: operatorn före kommatecken har ingen effekt. hade du för avsikt att "operator2"? |
| C4555 (nivå 1) | uttryck har ingen effekt; förväntat uttryck med bieffekt |
| C4557 (nivå 3) | "__assume" innehåller effekten "effekt" |
| C4571 (nivå 4) | information: catch(...) semantik har ändrats sedan Visual C++ 7.1; strukturerade undantag (SEH) fångas inte längre |
| C4574 (nivå 4) | "identifierare" definieras som "0": menade du att använda "#if identifierare"? |
| C4577 (nivå 1) | "noexcept" används utan att något undantagshanteringsläge har angetts. Undantagsavslut garanteras inte. Specificera /EHsc |
| C4582 (nivå 4) | typ: konstruktorn anropas inte implicit |
| C4583 (nivå 4) | "type": destructor anropas inte implicit |
| C4587 (nivå 1) | "anonymous_structure": beteendeförändring: konstruktorn anropas inte längre implicit |
| C4588 (nivå 1) | "anonymous_structure": beteendeförändring: destructor anropas inte längre implicit |
| C4596 (nivå 4) | "identifierare": olagligt kvalificerat namn i medlemsdeklarationen 14,3perm |
| C4598 (nivå 1 och nivå 3) | "#include "header": rubriknummer rubriknummer i den förkompilerade rubriken matchar inte den aktuella kompileringen på den positionen 14.3 |
| C4599 (nivå 3) | "alternativsökväg": kommandoradsargumentnummer arg_number matchar inte förkompilerat sidhuvud 14.3 |
| C4605 (nivå 1) | "/D-makro" angavs på den aktuella kommandoraden, men angavs inte när förkompilerat huvud skapades |
| C4608 (nivå 3) | "union_member" har redan initierats av en annan fackföreningsmedlem i initierarlistan, "union_member" Perm |
| C4619 (nivå 3) | #pragma varning: det finns inget varningsnummer |
| C4623 (nivå 4) | "härledd klass": Standardkonstruktorn kunde inte genereras eftersom en standardkonstruktor för basklass är otillgänglig |
| C4625 (nivå 4) | "härledd klass": Kopieringskonstruktorn kunde inte genereras eftersom en kopieringskonstruktor för basklass är otillgänglig |
| C4626 (nivå 4) | "härledd klass": tilldelningsoperatorn kunde inte genereras eftersom en basklasstilldelningsoperator inte är tillgänglig |
| C4628 (nivå 1) | digraphs stöds inte med -Ze. Teckensekvensen "digraph" tolkas inte som alternativ token för "char" |
| C4640 (nivå 3) | "instans": konstruktionen av det lokala statiska objektet är inte trådsäker |
| C4643 (nivå 4) | Vidarebefordran av deklarerande "identifierare" i namnområdet std tillåts inte av C++ Standard. 15.8 |
| C4647 (nivå 3) | beteendeförändring: __is_pod(typ) har olika värde i tidigare versioner |
| C4654 (nivå 4) | Kod som placeras före inkludering av förkompilerad rubrikrad ignoreras. Lägg till kod i förkompilerat huvud. 14.1 |
| C4668 (nivå 4) | "symbol" definieras inte som ett makro för processorn och ersätts med "0" för "direktiv" |
| C4682 (nivå 4) | "symbol" : inget riktningsparameterattribut har angetts som standard till [in] |
| C4686 (nivå 3) | "användardefinierad typ": möjlig beteendeförändring, ändring i UDT-retursamtalskonvention |
| C4692 (nivå 1) | "funktion": signaturen för icke-privat medlem innehåller den privata sammansättningstypen "native_type" |
| C4710 (nivå 4) | "function": funktionen är inte inlindad |
| C4738 (nivå 3) | Lagring av 32-bitars float resulterar i minne, eventuell prestandaförlust |
| C4746 | flyktig åtkomst för "uttryck" omfattas av inställningen /volatile:<iso|ms> . Överväg att använda __iso_volatile_load/lagra inbyggda funktioner |
| C4749 (nivå 4) | villkorligt stöd: förskjutning som tillämpas på typen "typ" som inte är standardlayout |
| C4767 (nivå 4) | avsnittsnamnet "symbol" är längre än 8 tecken och trunkeras av länkaren |
| C4774 (nivå 4) | "string" : formatsträngen som förväntas i argumentnumret är inte en strängliteral |
| C4777 (nivå 4) | "function" : formatsträngen "string" kräver ett argument av typen "type1", men variadic argumentnummer har typen "type2" |
| C4786 (nivå 3) | "symbol" : objektnamnet trunkerades till taltecken i felsökningsinformationen |
| C4800 (nivå 4) | Implicit konvertering från "typ" till bool. Möjlig informationsförlust 16,0 |
| C4820 (nivå 4) | Bytes byte-utfyllnad har lagts till efter konstruktionen "member_name" |
| C4822 (nivå 1) | "medlem": funktionen lokal klassmedlem har ingen brödtext |
| C4826 (nivå 2) | Konvertering från "type1" till "type2" är sign-extended. Detta kan orsaka oväntat körningsbeteende. |
| C4837 (nivå 4) | trigraph har identifierats: "??tecken" ersatt av "tecken" |
| C4841 (nivå 4) | tillägg som inte är standard: sammansatt medlemsdesignator som används i förskjutning |
| C4842 (nivå 4) | resultatet av "offsetof" som tillämpas på en typ som använder flera arv är inte garanterat konsekvent mellan kompilatorversioner |
| C4866 (nivå 4) | Kompilatorn file(line-number) kanske inte framtvingar utvärderingsordning från vänster till höger för anrop till operatör |
| C4868 (nivå 4) | Kompilatorn "file(line_number)" kanske inte framtvingar utvärderingsordning från vänster till höger i listan över klammerparenteserade initieringslistor |
| C4905 (nivå 1) | wide string literal cast to 'LPSTR' |
| C4906 (nivå 1) | strängliteral cast till "LPWSTR" |
| C4917 (nivå 1) | "deklarator": ett GUID kan bara associeras med en klass, ett gränssnitt eller ett namnområde |
| C4928 (nivå 1) | olaglig kopieringsinitiering. mer än en användardefinierad konvertering har tillämpats implicit |
| C4931 (nivå 4) | vi antar att typbiblioteket har skapats för talbitspekare |
| C4946 (nivå 1) | reinterpret_cast som används mellan relaterade klasser: "class1" och "class2" |
| C4962 | Funktion: profilstyrda optimeringar inaktiverades eftersom optimeringar gjorde att profildata blev inkonsekventa |
| C4986 (nivå 4) | "symbol": undantagsspecifikationen matchar inte föregående deklaration |
| C4987 (nivå 4) | icke-standardtillägg som används: "kasta (...)" |
| C4988 (nivå 4) | "symbol": variabel som deklareras utanför klass/funktionsomfång |
| C5022 | "type": flera flyttkonstruktorer har angetts |
| C5023 | "type": flera flytttilldelningsoperatorer har angetts |
| C5024 (nivå 4) | "type": flyttkonstruktorn definierades implicit som borttagen |
| C5025 (nivå 4) | Typ: operatorn för flytttilldelning definierades implicit som borttagen |
| C5026 (nivå 1 och nivå 4) | "type": flyttkonstruktorn definierades implicit som borttagen |
| C5027 (nivå 1 och nivå 4) | Typ: operatorn för flytttilldelning definierades implicit som borttagen |
| C5029 (nivå 4) | icke-standardtillägg som används: Justeringsattribut i C++ gäller endast för variabler, datamedlemmar och taggtyper |
| C5031 (nivå 4) | #pragma warning(pop): sannolikt matchningsfel, poppande varningstillstånd som skickas i en annan fil 14.1 |
| C5032 (nivå 4) | upptäckt #pragma varning(push) utan motsvarande #pragma varning(pop) 14.1 |
Visual Studio 2017 och senare versioner
Följande varningar är inaktiverade som standard i Visual Studio 2017 och senare versioner:
| Varning | Meddelande |
|---|---|
| C5034 | användning av inbyggda "inbyggda" gör att funktionsfunktionens namn kompileras som gästkod 15.3 |
| C5035 | funktionsfunktionensfunktionsnamn kompileras som gästkod 15.3 |
| C5036 (nivå 1) | varargs-funktionspekarkonvertering vid kompilering med /hybrid:x86arm64 "type1" till "type2" 15.3 |
| C5038 (nivå 4) | datamedlemmen "member1" initieras efter att datamedlemmen "member2" 15.3 |
| C5039 (nivå 4) | "funktion": pekare eller referens till potentiellt utlösande funktion som skickas till extern C-funktion under -EHc. Odefinierat beteende kan inträffa om den här funktionen utlöser ett undantag.
15.5 |
| C5041 (nivå 4) | "medlemsnamn": out-of-line definition för constexpr static data member behövs inte och är inaktuell i C++17. 15.2 |
| C5042 (nivå 3) | funktion: funktionsdeklarationer i blockomfånget kan inte anges som infogade i standard-C++. ta bort "infogad" specificerare 15.5 |
| C5045 | Kompilatorn infogar Spectre-åtgärd för minnesbelastning om /Qspectre-växeln har angetts 15.7 |
Visual Studio 2019 och senare versioner
Följande varningar är inaktiverade som standard i Visual Studio 2019 och senare versioner:
| Varning | Meddelande |
|---|---|
| C5052 (nivå 3) | Nyckelordet "keyword-name" introducerades i C++- versionen och kräver användning av kommandoradsalternativet "option" 16.1 |
| C5204 (nivå 3) | En klass med virtuella funktioner har icke-virtuell trivial destructor. 16.5 |
| C5214 (nivå 4) | att tillämpa "nyckelord" på en operand med en flyktig kvalificerad typ är inaktuell i C++20 16.7 |
| C5215 (nivå 4) | "function-parameter" en funktionsparameter med en flyktig kvalificerad typ är inaktuell i C++20 16.7 |
| C5216 (nivå 4) | "returtyp" en flyktig kvalificerad returtyp är inaktuell i C++20 16,7 |
| C5217 (nivå 4) | en strukturerad bindningsdeklaration som innehåller flyktiga är inaktuell i C++20 16,7 |
| C5219 (nivå 2) | implicit konvertering från "type-1" till "type-2", möjlig dataförlust 16.7 |
| C5220 (nivå 4) |
"medlem": en icke-statisk datamedlem med en flyktig kvalificerad typ innebär inte längre att kompilatorgenererade kopierings-/flyttkonstruktorer och kopierings-/flytttilldelningsoperatorer är inte triviala 16,7 |
| C5233 (nivå 4) | explicit lambda capture "identifier" används inte 16.10 |
| C5240 (nivå 4) | Attributnamn: attributet ignoreras i den här syntaktiska positionen 16.10 |
| C5243 (nivå 1) | "type-name": användning av ofullständig klass "klassnamn" kan orsaka potentiellt en definitionsregelöverträdelse på grund av ABI-begränsning 16.10 |
| C5245 (nivå 4) | "funktion": orefererad funktion med intern länkning har tagits bort |
| C5246 (nivå 1) | "medlem": Initieringen av ett underobjekt ska omslutas i klammerparenteser 16.10 |
| C5247 (nivå 1) | Avsnittet "section-name" är reserverat för dynamisk C++-initiering. Om du skapar avsnittet manuellt påverkas C++-dynamisk initiering och kan leda till odefinierat beteende 16.11 |
| C5248 (nivå 1) | Avsnittet "section-name" är reserverat för dynamisk C++-initiering. Variabeln som placeras manuellt i avsnittet kan optimeras och dess ordning i förhållande till kompilatorgenererade dynamiska initierare är ospecificerad 16.11 |
Visual Studio 2022 och senare versioner
Följande varningar är inaktiverade som standard i Visual Studio 2022 och senare versioner:
| Varning | Meddelande |
|---|---|
| C5249 (nivå 1) | "bitfield" av typen "enumeration_name" har namngett uppräknare med värden som inte kan representeras i den angivna bitfältbredden "bitfield_width". 17.0 |
| C5250 (nivå 3) | "function_name": inbyggd funktion har inte deklarerats. 17.0 |
| C5251 (nivå 4) | segmentnamn har ändrats efter inklusive rubrik 17.1 |
| C5254 (nivå 4) | språkfunktionen "terse static assert" kräver kompilatorflaggan "/std:c++17" 17.1 |
| C5256 (nivå 1) | "uppräkning": en icke-definierande deklaration av en uppräkning med en fast underliggande typ tillåts endast som en fristående deklaration 17.2 |
| C5258 (nivå 4) | explicit avbildning av "symbol" krävs inte för denna användning 17.2 |
| C5259 (nivå 4) | "specialtyp": explicit specialisering kräver "template <>" 17.3 |
| C5262 (nivå 1, fel) | Implicita fall-through händer här; Saknar du möjligen en break-instruktion? Använd [[fallthrough]] när en break instruktion avsiktligt utelämnas mellan fall 17.4 |
| C5263 (nivå 4) | om du anropar påstd::move ett tillfälligt objekt förhindras kopierings elision 17.4 |
| C5264 (nivå 4) | Variabelnamn: "const"-variabeln används inte 17.4 |
| C5266 (nivå 4) | "const"-kval vid returtyp har ingen effekt 17.6 |
| C5267 (nivå 4) | definitionen av implicit kopieringskonstruktor/tilldelningsoperator för "typ" är inaktuell eftersom den har en tilldelningsoperator/kopieringskonstruktor 17.7 |
14.1 Den här varningen är tillgänglig från och med Visual Studio 2015 Update 1.
14.3 Den här varningen är tillgänglig från och med Visual Studio 2015 Update 3.
15.2 Den här varningen är tillgänglig från och med Visual Studio 2017 version 15.2.
15.3 Den här varningen är tillgänglig från och med Visual Studio 2017 version 15.3.
15.5 Den här varningen är tillgänglig från och med Visual Studio 2017 version 15.5.
15.7 Den här varningen är tillgänglig från och med Visual Studio 2017 version 15.7.
15.8 Den här varningen är tillgänglig från och med Visual Studio 2017 version 15.8.
16.0 Den här varningen är tillgänglig från och med Visual Studio 2019 RTM.
16.5 Den här varningen är tillgänglig från och med Visual Studio 2019 version 16.5.
16.7 Den här varningen är tillgänglig från och med Visual Studio 2019 version 16.7.
16.10 Den här varningen är tillgänglig från och med Visual Studio 2019 version 16.10.
16.11 Den här varningen är tillgänglig från och med Visual Studio 2019 version 16.11.
17.0 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.0.
17.1 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.1.
17.2 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.2.
17.3 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.3.
17.4 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.4.
17.5 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.5.
17.6 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.6.
17.7 Den här varningen är tillgänglig från och med Visual Studio 2022 version 17.7.
Permanent Den här varningen är inaktiverad om inte kompilatoralternativet /permissive- har angetts.
Varningar inaktiverade som standard i tidigare versioner
Den här varningen var inaktiverad som standard i Visual Studio 2015 version 15.3 och aktiverad i Visual Studio 2015 version 15.5:
| Varning | Meddelande |
|---|---|
| C4768 |
__declspec attribut innan länkningsspecifikationen ignoreras |
Dessa varningar var inaktiverade som standard i versioner av kompilatorn före Visual Studio 2015:
| Varning | Meddelande |
|---|---|
| C4302 (nivå 2) | "konvertering": trunkering från "type1" till "type2" |
| C4311 (nivå 1) | "variabel": pekarens trunkering från "typ" till "typ" |
| C4312 (nivå 1) | "operation": konvertering från "type1" till "type2" med större storlek |
| C4319 (nivå 1) | Operator: nollutvidgar "type1" till "type2" av större storlek |
Den här varningen var inaktiverad som standard i versioner av kompilatorn före Visual Studio 2012:
| Varning | Meddelande |
|---|---|
| C4431 (nivå 4) | saknad typspecificerare – int antas. Obs! C stöder inte längre standard-int |