Dela via


Kompilatorvarningar som är inaktiverade som standard

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).

  • /Wall

    /Wall aktiverar 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 .

  • /wL nnnn

    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

Se även

warning pragma